Parent
Spec: #306
What to build
Dividir o módulo de import da planilha (hoje um único arquivo de ~7 mil linhas, dos quais ~64% são testes) em quatro submódulos internos por preocupação — grid (leitura bruta: linha/célula, layout, série de saldo, número e data), classify (significado: passado/futuro, tipo de linha, tipo de item por seção, normalização, checksum, diagnósticos de precisão), lexicon (resolução de identidade de cartão a partir das três fontes) e proposals (reconhecimento de cartão desconhecido e construção da proposta) — reexportando tudo no módulo pai. É reorganização de arquivo, não de arquitetura: nenhuma função muda de assinatura ou comportamento, nenhum call site externo muda, nenhum caminho público novo é exposto.
Os testes são a rede de segurança do próprio refactor: migram junto com o código que exercitam, um bloco por submódulo de destino, sem reescrever asserção nem remover caso. Os comentários de racional existentes (fronteira de fevereiro, seção como autoridade do lexicon) migram intactos. Resultado demoável: um mantenedor abre o submódulo de uma preocupação e encontra só ela; um revisor confere a interface pública intocada por diff do conjunto de símbolos exportados, sem ler assinatura por assinatura.
Atenção: lexicon e propostas estão fisicamente entrelaçados no topo do arquivo atual — a separação deles é a parte que exige critério, não busca-e-recorta.
Acceptance criteria
Blocked by
None — can start immediately (independente do ticket do fixture de paridade).
Parent
Spec: #306
What to build
Dividir o módulo de import da planilha (hoje um único arquivo de ~7 mil linhas, dos quais ~64% são testes) em quatro submódulos internos por preocupação —
grid(leitura bruta: linha/célula, layout, série de saldo, número e data),classify(significado: passado/futuro, tipo de linha, tipo de item por seção, normalização, checksum, diagnósticos de precisão),lexicon(resolução de identidade de cartão a partir das três fontes) eproposals(reconhecimento de cartão desconhecido e construção da proposta) — reexportando tudo no módulo pai. É reorganização de arquivo, não de arquitetura: nenhuma função muda de assinatura ou comportamento, nenhum call site externo muda, nenhum caminho público novo é exposto.Os testes são a rede de segurança do próprio refactor: migram junto com o código que exercitam, um bloco por submódulo de destino, sem reescrever asserção nem remover caso. Os comentários de racional existentes (fronteira de fevereiro, seção como autoridade do lexicon) migram intactos. Resultado demoável: um mantenedor abre o submódulo de uma preocupação e encontra só ela; um revisor confere a interface pública intocada por diff do conjunto de símbolos exportados, sem ler assinatura por assinatura.
Atenção: lexicon e propostas estão fisicamente entrelaçados no topo do arquivo atual — a separação deles é a parte que exige critério, não busca-e-recorta.
Acceptance criteria
npm run check)Blocked by
None — can start immediately (independente do ticket do fixture de paridade).