Skip to content

Parser e Converter #1293

@eduardokum

Description

@eduardokum

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ó no UB99)
  • W34, W37, W42, W50, W57, W59E (gera tag só no W59E)

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, UB55 e manter apenas UB12
  • Remover UB84, UB90, UB94, UB99 e manter apenas UB84
  • Remover W34, W37, W42, W50, W57, W59E e manter apenas W34

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions