-
Notifications
You must be signed in to change notification settings - Fork 594
Description
Estou trabalhando localmente em alterações nas classes Parser e Converter relacionadas ao RTC.
Hoje o arquivo txtstructure400_v1.3.json separa todos os campos novos do RTC em vários grupos:
UB01,UB12,UB17,UB36,UB55,UB68,UB73,UB82A,UB84,UB90,UB94,UB99,UB112,UB116,UB120,UB131- e também
W34,W37,W42,W50,W57,W59E
Porém, muitos desses grupos são dependentes entre si. Por exemplo: UB12, UB17, UB36 e UB55. Nos primeiros grupos, os valores vão sendo agregados até que a tag seja efetivamente gerada apenas no último (UB55).
/**
* Grupo de Informações da CBS
* UB55|gCBS_pCBS|gCBS_pDif|gCBS_vDif|gCBS_vDevTrib
* |gCBS_pRedAliq|gCBS_pAliqEfet|gCBS_vCBS|
*/
protected function ub55Entity(stdClass $std): void
{
$std->item = $this->item;
$this->mergeStdClass($std);
$this->make->tagIBSCBS($this->stdAuxiliar);
$this->stdAuxiliar = null;
}O mesmo padrão ocorre para:
UB84,UB90,UB94,UB99(gera tag só noUB99)W34,W37,W42,W50,W57,W59E(gera tag só noW59E)
Problema
Se o último grupo da cadeia não for informado (por exemplo, não vem UB55), a tag não é gerada e ainda temos um efeito colateral:
- Os dados parcialmente agregados permanecem em
stdAuxiliar - Isso “sujará” os dados na próxima chamada de
mergeStdClass, pois o conteúdo anterior não foi “limpo” com a criação da tag - Isso pode levar a comportamento inesperado/bug na geração de outras tags subsequentes
Ou seja, o desenho atual dos grupos dependentes + mergeStdClass cria um acoplamento frágil e sensível à presença/ausência do último UB/W da cadeia.
Proposta
Minha proposta é remover esse uso de mergeStdClass em cadeias de grupos dependentes e unificar todos os campos de um mesmo grupo RTC em uma única linha da estrutura TXT.
A ideia é:
- Remover
UB12,UB17,UB36,UB55e manter apenasUB12 - Remover
UB84,UB90,UB94,UB99e manter apenasUB84 - Remover
W34,W37,W42,W50,W57,W59Ee manter apenasW34
Exemplo de como ficaria na txtstructure400_v1.3.json:
{
"UB12": "UB12|CST|cClassTrib|indDoacao|vBC|gIBSUF_pIBSUF|gIBSUF_pDif|gIBSUF_vDif|gIBSUF_vDevTrib|gIBSUF_pRedAliq|gIBSUF_pAliqEfet|gIBSUF_vIBSUF|gIBSMun_pIBSMun|gIBSMun_pDif|gIBSMun_vDif|gIBSMun_vDevTrib|gIBSMun_pRedAliq|gIBSMun_pAliqEfet|gIBSMun_vIBSMun|gCBS_pCBS|gCBS_pDif|gCBS_vDif|gCBS_vDevTrib|gCBS_pRedAliq|gCBS_pAliqEfet|gCBS_vCBS|",
"UB84": "UB84|qBCMono|adRemIBS|adRemCBS|vIBSMono|vCBSMono|vTotIBSMonoItem|vTotCBSMonoItem|qBCMonoReten|adRemIBSReten|vIBSMonoReten|adRemCBSReten|vCBSMonoReten|qBCMonoRet|adRemIBSRet|vIBSMonoRet|adRemCBSRet|vCBSMonoRet|pDifIBS|vIBSMonoDif|pDifCBS|vCBSMonoDif|",
"W34": "W34|vBCIBSCBS|gIBSUF_vDif|gIBSUF_vDevTrib|gIBSUF_vIBSUF|gIBS_vIBS|gIBS_vCredPres|gIBS_vCredPresCondSus|gIBSMun_vDif|gIBSMun_vDevTrib|gIBSMun_vIBSMun|gCBS_vDif|gCBS_vDevTrib|gCBS_vCBS|gCBS_vCredPres|gCBS_vCredPresCondSus|gMono_vIBSMono|gMono_vCBSMono|gMono_vIBSMonoReten|gMono_vCBSMonoReten|gMono_vIBSMonoRet|gMono_vCBSMonoRet|gEstonoCred_vIBSEstCred|gEstonoCred_vCBSEstCred|"
}Benefícios esperados:
- Código mais simples e direto (um UB/W por grupo funcional)
- Eliminação da dependência “invisível” do último grupo para limpar
stdAuxiliar - Redução de chances de inconsistências quando nem todos os grupos da cadeia são informados
Fico totalmente aberto a discussões, sugestões e contribuições para que possamos evoluir juntos e tornar o projeto cada vez melhor.