Repository navigation
feat(nfse): explicit company-scoped tax association groundwork (#428) - #444
Merged
Merged
Conversation
Base automatically changed from
fix/nt007-social-retention-and-description-scope-20261010
to
main
October 12, 2026 19:16
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…428) Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…ence (#428) Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…428) Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
#428) Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…428) Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…ion (#428) Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…428) Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…ty (#428) Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Estado — draft, não mergeável até validação independente
Implementação incremental da issue #428, sem encerrá-la. A dependência NT007 (#416) foi integrada em
3739466804aa2b398842748c06b749c482b2f9ad. Base do PR:main.Entregas técnicas nesta branch
company_id + tax_id + vigência, modelo e enum de identidades fiscais.lockForUpdateno imposto de sua empresa, intervalo não sobreposto, referência de auditoria e identidade do confirmador. O controle de acesso do futuro formulário pertence à frente feat: confirmar associações fiscais de impostos Akaunting existentes por empresa #431.document_item_taxescom junções vinculadas por empresa, documento e item; decimais lidos como texto (CAST ... AS CHAR) para não receber floats no SQLite.FiscalTaxFactimutável + diagnóstico de ausência, conflito de tipo/papel e tributo de transparência.Falha anterior de CI / correção
Run
38296314427: 275 testes Feature aprovados, um falhou porque o driver devolvia DECIMAL como float. Corrigido em11e2483e, sem aceitar conversões de float como oráculo. Checks posteriores devem ser conferidos no HEAD final; não tratar execuções canceladas ou pendentes como aprovação.Limites de escopo ainda pendentes
FederalTaxSnapshotBuilder,FederalSocialRetentionCalculatoreInvoiceFederalPayloadResolvercontinuam usando nomes legados. Não afirmar que refactor: vincular identidade e papel fiscal aos impostos do Akaunting #428 resolveu definitivamente o defeito nem fazer merge dessa branch como entrega final.main(ruleset22483081) exige revisão CODEOWNER e aprovação.CODEOWNERSatual:* @vitormattos, que também é o autor deste PR. Não usar bypass; é necessário resolver essa impossibilidade organizacional fora do escopo de mudanças de proteção.Não houve emissão fiscal real, uso de certificados/PII reais, alterações de workflows nem pin de dependência fiscal. Todos os commits são incrementais e assinados via Git Signing MCP com DCO.
Revisão de complexidade e regras de negócio — 12/10/2026
HEAD:
c6dd6592a9acf745cddfc5ea3f4014928d7e11aa(commits GPG/DCO). Revisão pedida pelo mantenedor, sem alterar workflows, dependências fiscais nem habilitar emissão real.Métodos públicos refatorados, contagem de linhas por corpo (não métrica formal de complexidade):
FederalTaxFactAggregator::aggregate(): 100 → 36; extraídos validação da identidade, política de tipo/papel, identificação de ocorrência, acumulação em centavos e registro de alíquotas.InvoiceTaxFactsResolver::resolve(): 126 → 25; validador de escopo, consulta de observações ativas, seleção temporal por empresa, materialização e validação da evidência são métodos independentes.TaxFiscalAssociationStore::confirm(): 71 → 37; revisão de datas, prova dotax_idna empresa, lock e sobreposição isolados.FiscalTaxAssociationDiagnostics::inspect(): 40 → 12; razão e construção de decisão em métodos próprios.ExactTaxDecimal::percentOfCentsHalfEven(): 30 → 13; escala exata e tie-breaking half-even separados.Data providers de negócio: ocorrência persistida vs. duplicação, homônimos e
tax_iddistintos, imposto devido/retido, tipo nativo incompatível, PIS/COFINS/CSLL/IRRF/CP vs. ISS/IBS/CBS, half-even (ties, não ties, overflow e valores desconhecidos), intervalos de confirmação inclusivos e não sobrepostos, competência no primeiro/último dia, evidência de confirmação e isolamento empresarial. A fixture Feature principal foi dividida em testes independentes com nomes que descrevem regras observáveis; nada foi acrescentado somente para elevar cobertura.Limites mantidos:
#428continua aberta, esta entrega é groundwork e não conclui a integração do novo resolvedor aoInvoiceFederalPayloadResolver,FederalTaxSnapshotBuildere retenções NT007. A classe não adquire autoridade para decidir base, alíquota, incidência ou IBS/CBS. Sem transmitir a SEFIN. Fonte normativa e validação independente da#427, checks no HEAD final e review CODEOWNER continuam obrigatórios. O autor@vitormattoscontinua sendo o único CODEOWNER registrado, o que exige resolução de governança sem bypass.CI: consultar os resultados finais e não cancelados do HEAD acima em https://github.com/LibreCodeCoop/akaunting-nfse/pull/444/checks. Nenhum job em andamento conta como aprovado.
Integração da base e critérios de merge
A
mainavançou após a criação desta branch, incluindo os PRs #452 (oráculos normativos E2E) e #453 (evidência cooperativa). A nova base observada foif238283b72d7f2df2f49a9b1eed065b7b969bbc4; o PR continua sem conflitos, mas os checks dec6dd6592a9acf745cddfc5ea3f4014928d7e11aaforam iniciados antes dessa integração. Exigir comparação e CI de integração contra a base vigente antes de liberar merge.Na última conferência do HEAD da revisão de complexidade: PHPUnit PHP 8.2/8.3/8.4, Psalm, PHP-CS-Fixer, migrações MySQL, Smoke, Frontend Unit, REUSE, DCO e commits convencionais aprovados; Dependabot não aplicável; Akaunting Feature e Playwright Full UI ainda
in_progress. Nunca classificar esses dois como sucesso sem resultado concluído.#428segue aberta, PR em draft, sem substituição do caminho de emissão por fatos confirmados, sem revisão CODEOWNER, e sem bypass.