...
Front-End:
mockup-tela.pdf![](https://jiraproducao.totvs.com.br/images/icons/link_attachment_7.gif)
Back-End:
irrf-documentacao-html.zip
Image Removed
example-irrf.json
Image 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>.
...
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 |
---|
borderColor | white |
---|
bgColor | black |
---|
titleColor | white |
---|
borderWidth | 0 |
---|
borderStyle | solid |
---|
|
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 utilizamos utilizaremos o level 3 para o relatório analítico.
...
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.
...
Painel |
---|
borderColor | white |
---|
bgColor | black |
---|
titleColor | white |
---|
borderWidth | 0 |
---|
borderStyle | solid |
---|
|
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 um uma forma genérica, pois o foco da parte 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>.
...
Painel |
---|
borderColor | white |
---|
bgColor | black |
---|
titleColor | white |
---|
borderWidth | 0 |
---|
borderStyle | solid |
---|
|
cIncidRRF = ( cAlias )->V3N_ITIRRF cIRRFGov = ( cAlias )->V3N_TPVLR If
If ( cAlias )->V3N_ORIGEM $ "|2"
IfcIncidRRF $ "11|12|13"
If cIncidRRF $ "11|12|13DoCASE CasecIncidRRF == "11" nRendimentoTributaveis11 := ( cAlias )->V3N_VALOR CasecIncidRRF == "12" nRendimentoTributaveis12 := ( cAlias )->V3N_VALOR nRendimentoTributaveis CasecIncidRRF == "13" nRendimentoTributaveis13 := ( cAlias )->V3N_VALOR OtherWise ElseIf cIncidRRF $ lRet := .F. EndCase ElseIfcIncidRRF $ "31|32|34" DoCASE CasecIncidRRF == "31" nRetencoesIRRF nRetencoesIRRF31 := ( cAlias )->V3N_VALOR ElseIf cIncidRRF $ "9082|9083CasecIncidRRF == "32" nCompensacaoJudical nRetencoesIRRF32 := ( cAlias )->V3N_VALOR EndIf ElseIf CasecIncidRRF == "34" nRetencoesIRRF33 := ( cAlias )->V3N_ORIGEM $ "4" If cIncidRRF $ "11|12|13VALOR OtherWise lRet := .F. EndCase
ElseIfcIncidRRF $ "9082|9083"
DoCASE CasecIncidRRF == "9082" nRendimentoTributaveisGov nCompensacaoJudical9082 := ( cAlias )->V3N_VALOR ElseIf cIncidRRF $ "31|32|34CasecIncidRRF == "9083" nRetencoesIRRFGov nCompensacaoJudical8083 := ( cAlias )->V3N_VALOR OtherWise lRet := .F. EndIfEndCase
EndIf
EndIf
|
Para função LoadIRRFHash() deve ser implementado a logica 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 |
---|
borderColor | white |
---|
bgColor | black |
---|
titleColor | white |
---|
borderWidth | 0 |
---|
borderStyle | solid |
---|
|
"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 |
---|
borderColor | white |
---|
bgColor | black |
---|
titleColor | white |
---|
borderWidth | 0 |
---|
borderStyle | solid |
---|
|
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 Atividade | Descrição do Desenvolvimento |
---|
1 | Dicionário | Criação do campo V3N_CRMEN gravação da tag totApurMen\CRMen na V3N
Sugestão para o campo: X3_CAMPO | X3_TIPO | X3_TAMANHO | X3_DECIMAL | X3_TITULO | X3_DESCRIC | X3_PICTURE |
---|
V3N_CRMEN | C | 6 | 0 | Cod. Receita | Código de Receita | @! | V3N_VLRCRM | N | 14 | 2 | Vlr. CR Men | Valor relativo ao Imposto de Renda Retido na Fonte | @E 99,999,999,999.99 |
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>
|
2 | TAFA422
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 |
3 | TAFESOCIALREPORT 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.
|
5 | Dicioná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 |