Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Front-End:
mockup-tela.pdf

Back-End:
irrf-documentacao-html.zipImage Removed
example-irrf.jsonImage Removedhttps://app.swaggerhub.com/apis/evanstos10/irrf-report/1.0.0#/irrfRetValues/irrfRetValues


Estudo:

No Json idealizado para o relatório analítico foram criadas as quebras por tipos de informação de IR <tpInfoIR>. Hoje no fonte WSTAF010 na função FilIRRFSynthetic() onde esta a query principal estas informações já são retornadas na parte do TAF no campo V3N_ITIRRF e Governo no campo V3N_TPVLR. 

typesIrrfValues:

JsonDescrição da tag no LayoutCodigos
taxableIncome
Rendimentos tributáveis11, 12, 14 
nonTaxableIncome
Rendimento não tributável ou isento do IRRF70, 71, 72, 73, 74, 75, 76, 77, 700, 701, 79, 7900
retention
Retenções do IRRF 31, 32, 34
deductions
Deduções da base de cálculo do IRRF41, 42, 46, 47, 51, 52, 54, 61, 62, 63, 64, 67
taxableIncomeSuspended
Exigibilidade suspensa - Rendimento tributável 9011, 9012, 9014
retentionSuspended
Exigibilidade suspensa - Retenção do IRRF9031, 9032, 9034, 9831, 9832, 9834
deductionsSuspended
Exigibilidade suspensa - Dedução da base de cálculo do IRRF9041, 9042, 9046, 9047,  9051, 9052, 9054, 9061, 9062, 9063, 9064, 9067
judicialCompensation
Compensação judicial9082, 9083


Será necessário a implementação de método síncrono GET para buscar as informações com base no ticket gerado na tabela V3J para montar a resposta que será devolvida para a modal implementada no front.


Pode ser usado o exemplo da InssValues método usado para a parte analítica do relatório de INSS:

Este é apenas um exemplo não será necessário criar uma nova função como uma nova query para buscar os dados, a query do FilIRRFSynthetic() já busca as informações necessárias mas fica a cargo do desenvolvedor.

Painel
borderColorwhite
bgColorblack
titleColorwhite
borderWidth0
borderStylesolid

                  

WSMETHODGETInssValues;
        DESCRIPTION"Método para consultar resultado do relatório de conferência de INSS";
        WSSYNTAX"api/rh/esocial/v1/reportEsocialBaseConfer/InssValues/?{companyId}&{requestId}&{synthetic}&{differencesOnly}&{cpfNumber}&{page}&{pageSize}";
        PATH"api/rh/esocial/v1/reportEsocialBaseConfer/InssValues/";
        TTALK"v1";
        PRODUCESAPPLICATION_JSON


Atentar ao Swagger anexado pois utilizaremos o level 3 para o relatório analítico.



Neste ponto é possível reaproveitar o código que já esta implementado:


Hoje no fonte WSTAF010 na função FilIRRFSynthetic() onde esta a query principal estas informações já são retornadas na parte do TAF no campo V3N_ITIRRF e Governo no campo V3N_TPVLR.

Na função CalcIRRFVal() deve ser criada novas variáveis de controle para carregar os valores dos novos atributos que serão usados para gravar os valores na função que monta a HASH (LoadIRRFHash).

Outra alternativa é a criação de uma nova função, para que seja colhido os valores que vão compor os valores analíticos, a variáveis de controle dessa função também devem ser passadas na HASH.


Hoje na função CalcIRRFVal() temos a seguinte quebra de informações:

Painel
borderColorwhite
bgColorblack
titleColorwhite
borderWidth0
borderStylesolid

                      IfcIncidRRF $ "31|32|33|34".AND.cTipo $ "2|4"



                nEmplTafValue   := ( cAlias )->V3N_VALOR
                nEmplErpValue   := ( cAlias )->V3N_VALOR
                lRet            := .T.

            EndIf
           
            If cIncidRRF $ "31|32|33|34"
               
                If cTipo $ "2|4"

                    nDmTafVal   += ( cAlias )->V3N_VALOR
                    nDmErpVal   += ( cAlias )->V3N_VALOR
                    lRet        := .T.

                ElseIf cTipo $ "1|3"

                    nDmTafVal   -= ( cAlias )->V3N_VALOR
                    nDmErpVal   -= ( cAlias )->V3N_VALOR
                    lRet        := .T.

                EndIf

            ElseIf cIncidRRF $ "11|12|41|42|46|47|51|52|54|61|63|64|67|70|71|72|73|74|75|76|77|79|700|701|7900|7950|7951|7952"
                nDmTafVal       := 0
                nEmplTafValue   += 0
                lRet            := .T.
            ElseIf cIncidRRF $ "7952|7953|7954|7955|7956|7957|7958|7959|7960|7961|7962|7963|7964|9011|9012|9014|9031|9032|9034|9831|9832|9834|9041|9042|9046|9047|9051|9052|9054|9061|9062|9063|9064|9067|9082|9083"
                nDmTafVal       := 0
                nEmplTafValue   += 0
                lRet            := .T.
            EndIf


As quebras por tipo no trecho acima estão de uma forma genérica, pois o foco da função sintética era mostrar apenas valores retidos. Para a adaptar a função na parte analítica a quebra deve ser feita conforme tipo de <tpInfoIR>.

Pseudo código:

Painel
borderColorwhite
bgColorblack
titleColorwhite
borderWidth0
borderStylesolid

cIncidRRF =( cAlias )->V3N_ITIRRF
cIRRFGov = ( cAlias )->V3N_TPVLR




If ( cAlias )->V3N_ORIGEM $ "|2"

    IfcIncidRRF $ "11|12|13"

        DoCASE
        CasecIncidRRF == "11"
            nRendimentoTributaveis11 := ( cAlias )->V3N_VALOR
        CasecIncidRRF == "12"
            nRendimentoTributaveis12 := ( cAlias )->V3N_VALOR
        CasecIncidRRF == "13"
            nRendimentoTributaveis13 := ( cAlias )->V3N_VALOR
        OtherWise
            lRet := .F.
        EndCase
    ElseIfcIncidRRF $ "31|32|34"
       
        DoCASE
        CasecIncidRRF == "31"
            nRetencoesIRRF31 := ( cAlias )->V3N_VALOR
        CasecIncidRRF == "32"
            nRetencoesIRRF32 := ( cAlias )->V3N_VALOR
        CasecIncidRRF == "34"
            nRetencoesIRRF33 := ( cAlias )->V3N_VALOR
        OtherWise
            lRet := .F.
        EndCase


    ElseIfcIncidRRF $ "9082|9083"


        DoCASE
        CasecIncidRRF == "9082"
            nCompensacaoJudical9082 := ( cAlias )->V3N_VALOR
        CasecIncidRRF == "9083"
            nCompensacaoJudical8083 := ( cAlias )->V3N_VALOR
        OtherWise
            lRet := .F.
        EndCase

    EndIf

EndIf


Para função LoadIRRFHash() deve ser implementado a lógica para a parte ANALITICA montando o JSON de resposta.


Atentar ao fato que dentro das quebras por tipo pode ter mais de um código para o mesmo tipo, neste caso tendo um JSON da seguinte maneira: 

Painel
borderColorwhite
bgColorblack
titleColorwhite
borderWidth0
borderStylesolid

"typesIrrfValues": {
                  "taxableIncome": {
                    "total": {
                      "tafValue": 57.00,
                      "erpValue": 57.00,
                      "retValue": 57.00
                    },
                    "items": [
                      {
                        "type": "11",
                        "descriptionType": "Rendimentos Tributáveis",
                        "tafValue": 35.00,
                        "erpValue": 35.00,
                        "retValue": 35.00
                      },
                      {
                        "type": "12",
                        "descriptionType": "13º salário",
                        "tafValue": 22.00,
                        "erpValue": 22.00,
                        "retValue": 22.00
                      }
                    ]

Será necessário fazer um DE/PARA para preencher descriptionType de acordo com o tipo.


Para os valores Analíticos da parte de RH na função do novo método criado, deve ser recuperado os valores da tabela V5H através da função V5HGetRhValues(), para depois ser gravados no HASH. Para isto deve ser implementado no HASH a condição de quando o processo for do RH.


Exemplo do caso a cima para analítico INSS:

Painel
borderColorwhite
bgColorblack
titleColorwhite
borderWidth0
borderStylesolid

IflIsLegacy      
        aRhValues := V5HGetRhValues(cTicket,cCPF)



        FornX := 1ToLen(aRHValues)
            LoadHash("RH",cAlias,oArqTrb, @nRessInss, @nVlINSS, @nVlINSS13, @nBasINSS, @nSalFam, @nSalMat, @nSalMat13, @nBasINSS13, @nRetValue, @nRetDescValue, @nRet13Value, @nRet13DescValue,aRHValues[nX])
        Next
    EndIf


Para execução desta ação na função é necessário reavaliar a execução da função CreateV5H(), pois será necessário a criação de campos novos para gravar os valores correspondentes as novas quebras de tipo e valores para a parte analítica, e ajuste das funções V5HByTicket(), V5HGetRhValues() com os campos novos se necessário.


Pontos de Ajuste:

Seq.Nome da AtividadeDescrição do Desenvolvimento
1Dicionário 

Criação do campo V3N_CRMEN gravação da tag totApurMen\CRMen na V3N


Sugestão para o campo:

@E 99,999,999,999.99   

X3_CAMPO

X3_TIPO

X3_TAMANHO

X3_DECIMAL

X3_TITULO

X3_DESCRIC

X3_PICTURE

V3N_CRMENC60Cod. ReceitaCódigo de Receita      @!                     
V3N_VLRCRMN142Vlr. CR MenValor relativo ao Imposto de Renda Retido na Fonte
                     


A tag que ira alimentar o campo é <CRMen> V3N_CRMEN recebendo os valores:

056107 - IRRF mensal, 13° salário e férias sobre trabalho assalariado no país ou ausente no exterior a serviço do país, exceto se contratado por empregador doméstico ou por segurado especial sujeito a recolhimento unificado
056108 - IRRF mensal e férias - Empregado doméstico
056109 - IRRF 13° salário na rescisão de contrato de trabalho - Empregado doméstico
056110 - IRRF - Empregado doméstico 13º salário
056111 - IRRF - Empregado/Trabalhador rural - Segurado especial
056112 - IRRF - Empregado/Trabalhador rural - Segurado especial 13° salário
056113 - IRRF - Empregado/Trabalhador rural - Segurado especial 13° salário rescisório
058806 - IRRF sobre rendimento do trabalho sem vínculo empregatício
061001 - IRRF sobre rendimentos relativos a prestação de serviços de transporte rodoviário internacional de carga, pagos a transportador autônomo PF residente no Paraguai
353301 - Proventos de aposentadoria, reserva, reforma ou pensão pagos por previdência pública
356201 - IRRF sobre participação dos trabalhadores em lucros ou resultados - PLR
188901 - Rendimentos Recebidos Acumuladamente - RRA

 

A Tag que ira alimentar o campo V3N_VLRCRM <vlrCRMen>


2TAFA422

TAF422Grv

Criação de uma nova #DEFINE para ser passado no array aAnalitico com o valor das TAG de código receita.


Ajuste do array passado para função upsert para alimentar os novos campos da V3N

3TAFESOCIALREPORT
Ajuste da Upsert()

Ajustar a função para que faça o INSERT do valor no campo novo criado na V3N.

4

WSTAF010


FilIRRFSynthetic : Necessário incluir os campos novos na query, pois será possível filtrar pelo código <CRMen> tendo um visão similar com a DCTFWEB (Avaliar com o Evandro informação não esta no MOCK).


CalcIRRFVal e LoadIRRFHash: Implementação da parte analítica.


Criar DE/PARA para preencher descriptionType de acordo com o tipo.


CreateV5H, V5HByTicket e V5HGetRhValues: Ajustes para criação da parte analítica e adequação com os novos campos que serão criados.


5Dicionário

Criação dos campo necessários para adequar a tabela V5H.

6X

TAFA250

TAFA266
TAFA280

TAFA423

TAFCHARGERPT

Avaliar se a mudança do UPSERT não afetara os processos das rotinas que fazem uso deste método e se não será necessário alteração no tamanho do array nas funções 
de grv(), xml() e SaveModel().


Avaliar todos os processos de CRUD destas rotinas por meio de integração e de modo manual, pois todo o processo para este evento é relacionado com a V3N para garantir
a persistência dos dados.


7

Documentação 

Incluir a parte analítica na documentação: Painel de Conferência de IRRF