Painel de leitura da documentação, planejamento e implementação por feature, com seleção centralizada antes da navegação.
stepsCompleted:
This document builds collaboratively through step-by-step discovery. Sections are appended as we work through each architectural decision together.
Functional Requirements:
A feature chronos-titulos adiciona uma terceira fonte de dados ao dashboard operacional do cobrador sem substituir a logica existente. O PRD consolidou 49 requisitos funcionais, concentrados em nove areas arquiteturalmente relevantes: carteira consolidada, classificacao operacional, fluxo de quebras, fluxo de 30 dias, fluxo de renegociacoes, indicadores, filtros/leitura de dashboard, resiliencia operacional e governanca/auditoria. O efeito arquitetural mais importante e que a feature nao e “mais um endpoint”; ela exige um contrato interno unico de titulo consolidado para alimentar varios endpoints existentes com comportamento consistente.
No MVP, a feature precisa suportar tres comportamentos centrais. Primeiro, incorporar titulos da Chronos no grid de quebras para clientes da carteira do cobrador. Segundo, permitir que titulos Travessia entrem e se movimentem pelo fluxo de 30 dias preservando o MySQL como fonte de verdade da marcacao operacional. Terceiro, incorporar renegociacoes pagas da Chronos sem duplicar valores ou linhas em grids concorrentes. Isso implica regras deterministicas de classificacao, prioridade entre categorias e rastreabilidade suficiente para auditoria funcional.
Non-Functional Requirements: Os 31 NFRs do PRD convergem para seis pressões arquiteturais: performance operacional do dashboard, seguranca de credenciais e dados, confiabilidade com degradacao controlada, robustez de integracao entre fontes heterogeneas, observabilidade/auditoria e rollout seguro em homologacao. Em termos praticos, a arquitetura precisa manter a aplicacao utilizavel mesmo com falha da Chronos, evitar chamadas redundantes, impedir vazamento de segredos, preservar leitura operacional da tela e permitir diagnostico posterior de classificacao e divergencia.
Os NFRs tambem reforcam restricoes nao negociaveis: a integracao deve ser backend-only, os segredos da Chronos nao podem ir para codigo versionado ou frontend, e nenhuma alteracao em scripts SQL Server existentes pode ser feita sem confirmacao explicita. Isso elimina opcoes arquiteturais mais invasivas e direciona o desenho para uma camada complementar dentro do monolito PHP, controlada por configuracao e operando em cima dos endpoints ja existentes.
Scale & Complexity: O projeto e de complexidade alta, nao por volume de telas novas, mas por impacto sobre uma operacao sensivel em producao. A feature cruza tres fontes com semanticas diferentes: SQL Server para carteira operacional atual, MySQL para atribuicao e marcacoes operacionais, e Chronos para titulos suspensos da Travessia. A dificuldade arquitetural esta em orquestrar essas fontes sem regressao para a Bralar e sem espalhar regra de consolidacao por varios endpoints.
web_app PHP monolitico com APIs JSON internas e integracao financeira externa.high7A restricao central do projeto e de negocio e arquitetura ao mesmo tempo: os scripts SQL Server atuais devem permanecer intactos, salvo nova confirmacao explicita. Portanto, a solucao nao pode “corrigir” o ERP. Ela precisa introduzir uma camada complementar de consolidacao no backend PHP, consumindo Chronos e cruzando seus resultados com a mesma carteira e as mesmas marcacoes auxiliares do fluxo atual.
Ha tambem uma dependencia forte do banco MySQL auxiliar. A classificacao de 30 dias nao nasce da Chronos; ela continua a depender de cobranca_30dias_registros. Isso significa que a arquitetura da feature nao pode ser apenas um adapter da API externa. Ela precisa combinar: atribuicoes da carteira no MySQL, titulos SQL Server ja existentes, titulos Chronos complementares, marcacao 30 dias no MySQL e regras funcionais de exclusao de duplicidade entre grids.
Existe tambem uma dependencia estrutural de ownership da carteira. O sistema atual resolve “de quem e o cliente” por cobranca_atribuicao_cliente, e essa regra deve permanecer para a Chronos. Cada titulo Travessia so pode entrar na visao do cobrador se o cpf_cnpj normalizado do devedor estiver associado ao user_id logado em uma atribuicao ATIVO. A API externa nao deve introduzir um segundo conceito de responsavel de carteira.
Do lado da Chronos, o comportamento tecnico ja validado impõe dependencias claras: autenticacao OAuth2 Client Credentials, descoberta de credito e uso de id interno para buscar parcelas, classificacao por status e parcelFrequencyName, e tolerancia a respostas vazias/nulas. Como o dashboard atual e server-rendered com AJAX pontual, a integracao deve ficar inteiramente no backend e devolver JSON compatível com os contratos atuais ou com extensoes pequenas e controladas desses contratos.
cpf_cnpj, identificar corretamente a granularidade de titulo/parcela e manter proposta operacional exibivel sem colapsar multiplos titulos do mesmo cliente.cpf_cnpj -> cobrador_usuario_id a partir de cobranca_atribuicao_cliente antes de incluir linhas Chronos nos grids do cobrador.quebras, 30 dias ou renegociacoes, e de qual fonte esse titulo veio.Histórico do cliente e Triagem Jurídica precisam continuar operando para Bralar e Travessia, o que exige fallback de contexto fora do SQL Server e payload explícito de contrato externo para o jurídico./var/www/html/cobranca-hml, com necessidade de ativacao reversivel e degradacao controlada em caso de falha da Chronos.web_app brownfield em PHP server-rendered com endpoints JSON internos, baseado em codigo existente que precisa ser evoluido in-place. Nao se trata de inicializacao de um projeto novo.
Foram verificados starters atuais e mantidos do ecossistema PHP como referencia de mercado, mas apenas para validar se faria sentido adotá-los nesta feature. As opcoes mais obvias hoje sao:
symfony new --webapp e symfony/skeleton, recomendados oficialmente para novas aplicacoes Symfony.Essas opcoes sao validas para greenfield, mas nao encaixam neste caso por quatro motivos arquiteturais:
Rationale for Selection:
Para chronos-titulos, a decisao correta e nao adotar starter template. A fundacao da feature deve ser o proprio sistema existente em /var/www/html/cobranca-hml, com implementacao incremental e compatível com o monolito atual. Arquiteturalmente, isso evita introduzir um novo framework, evita dualidade de padroes e mantem a feature no lugar onde o negocio ja opera hoje.
Initialization Command:
# Nao aplicavel: a feature sera implementada sobre o codigo brownfield existente
cd /var/www/html/cobranca-hml
Architectural Decisions Provided by Starter:
Language & Runtime: Nao ha novo starter definindo stack. A feature continua em PHP no runtime ja adotado pelo sistema, com sessao PHP, endpoints JSON internos e acesso aos bancos ja configurados.
Styling Solution: Nao ha mudanca de stack visual. A tela continua usando o frontend existente do projeto, com ajustes incrementais nos grids e badges do dashboard.
Build Tooling: Nao ha novo build system introduzido. A implementacao deve respeitar o fluxo atual da aplicacao, sem criar pipeline paralelo de bundling para esta feature.
Testing Framework:
Nenhum framework novo e introduzido nesta etapa. A validacao da feature continua centrada em homologacao dirigida e verificacao funcional no ambiente cobranca-hml.
Code Organization: A feature deve se encaixar na organizacao atual do sistema, preferencialmente concentrando a nova inteligencia em uma camada interna de consolidacao reutilizavel pelos endpoints impactados, sem reestruturar o repositorio em torno de um novo framework.
Development Experience: O ganho de consistencia virá das decisoes arquiteturais deste documento, nao de um boilerplate externo. O primeiro trabalho de implementacao devera ser criar a camada de integracao/consolidacao Chronos dentro da aplicacao atual.
Note: Nao existe historia de “inicializar projeto a partir de starter”. A primeira historia de implementacao deve partir da arquitetura da camada consolidada dentro do brownfield existente.
Critical Decisions (Block Implementation):
30 dias.Important Decisions (Shape Architecture):
Deferred Decisions (Post-MVP):
Decision: manter o modelo atual com SQL Server + MySQL e introduzir uma terceira camada logica de leitura consolidada, sem criar novo banco e sem mexer nos scripts SQL Server existentes.
Rationale: O SQL Server continua sendo a fonte operacional da Bralar e nao deve ser alterado. O MySQL continua sendo a fonte de atribuicao de carteira, historico e marcacoes operacionais. A Chronos entra como fonte externa complementar da Travessia. A arquitetura correta e uma composicao server-side dessas fontes, nao migracao de ownership de dados.
Chosen Model:
cobranca_30dias_registros, historicos e futuras colunas auxiliares de rastreabilidade.TituloConsolidado, contrato interno unico para alimentar endpoints.Normalization Strategy:
cpf_cnpj normalizado como chave de pertencimento e cruzamento.titulo_uid interno obrigatorio por linha consolidada.
origem + proposta + cpf_cnpj + categoriaorigem + credit_id + parcel_idproposta_exibicao mantida para leitura operacional.marca_empresa sempre explicita: Bralar ou Travessia.origem_sistema sempre explicita: sqlsrv ou chronos.nome_cliente, cpf_cnpj, proposta_exibicao e referencias operacionais equivalentes de residencial/unidade quando houver.cpf_cnpj pode ser usado para localizar dados complementares no SQL Server, mas nunca deve substituir credit_id + parcel_id como identidade do titulo. O SQL Server enriquece o contexto; a Chronos continua sendo a fonte de verdade do titulo complementar.MySQL Schema Strategy:
Para o MVP, a tabela cobranca_30dias_registros continua sendo a base funcional do fluxo 30 dias, mas a arquitetura recomenda extensao aditiva no MySQL para suportar rastreabilidade da Travessia sem quebrar compatibilidade. Os campos candidatos sao:
origem_sistemamarca_empresatitulo_uidchronos_credit_idchronos_parcel_idIsso evita ambiguidade futura entre proposta operacional, cpf do cliente e identificador real da parcela Chronos.
Caching Strategy: Nao adotar cache persistente sofisticado no MVP. A decisao inicial e:
Decision: manter autenticacao da aplicacao via sessao PHP e isolar a autenticacao Chronos no backend por OAuth2 Client Credentials com cache curto de token.
Verified Runtime Context:
PHP 8.4.17 no servidor de homologacaoguzzlehttp/guzzle em Packagist continua na linha 7.x e declara suporte >=7.2.5,<8.5Security Decision:
Apesar de o ambiente atual suportar Guzzle 7, a melhor escolha para o MVP e nao introduzir nova dependencia HTTP. O projeto hoje tem composer.json minimo e nenhuma abstracao HTTP preexistente. Para reduzir risco de supply chain, impacto em deploy e variabilidade no brownfield, a integracao Chronos deve usar PHP nativo com cURL/extensao HTTP ja presente no ambiente.
Token Handling:
client_id e client_secret fora do repositorioexpires_at em arquivo local nao publico ou camada equivalente de configuracao do servidorAuthorization Pattern:
user_id/user_perfil existentescobranca_atribuicao_cliente com status = 'ATIVO' como fonte unica de ownership de carteira para Bralar e TravessiaDecision: manter o padrao atual de endpoints JSON internos e introduzir uma camada interna de servicos/adapters, sem criar microservico, GraphQL ou API externa nova.
Internal Pattern Chosen:
/src/api/*ChronosTokenProviderChronosClientChronosMapperSqlsrvTituloEnrichmentServiceTituloConsolidadoServiceTituloClassificationServiceError Handling Standard:
Payload Compatibility: A arquitetura deve favorecer extensao minima dos contratos atuais. Campos novos recomendados nos grids:
origem_sistemamarca_empresatitulo_uidproposta_exibicaoCampos atuais como Cliente, cpf_cnpj, Residencial, Valor, DataPagamento, DataVencimento e afins devem continuar existindo.
Decision: nao introduzir nova arquitetura frontend. O dashboard continua server-rendered com AJAX pontual, recebendo apenas extensoes pequenas de payload.
Frontend Impact Rules:
View Model Decision:
O frontend deve receber uma representacao uniforme para linhas Bralar e Travessia. Isso permite que grids existentes renderizem dados de ambas as origens sem ifs excessivos por origem na camada visual.
Decision: manter deploy no ambiente atual Apache/PHP-FPM e usar configuracao do proprio servidor para ativacao da feature e segredos da Chronos.
Deployment Strategy:
/var/www/html/cobranca-hmlCHRONOS_ENABLEDCHRONOS_ENABLE_QUEBRASCHRONOS_ENABLE_30DCHRONOS_ENABLE_RENEGLogging & Monitoring:
chronos, titulos_consolidados, classificacao_titulos/src/api/quebras_listar.php
OVERDUE para CPFs da carteira do cobrador/src/api/pc_titulos_pagos.php
parcelFrequencyName = Renegociação30 diasadvogado pelo enriquecimento SQL Server/src/api/pc_titulos_pagos_adv.php
NumeroContratoBanco LIKE '%adv%'30 diasrenegociacoes/src/api/pc_titulos_pagos_30d.php
cobranca_30dias_registros como basecpf_cnpj e referencias operacionais derivadas quando a API nao trouxer todos os campos necessarios/src/api/indicadores_30dias.php
cobranca_30dias_registrosImplementation Sequence:
TituloConsolidado.quebra, 30 dias, renegociacao).30 dias para registrar rastreabilidade da Travessia no MySQL.quebras_listar.php.pc_titulos_pagos.php.pc_titulos_pagos_30d.php.pc_titulos_pagos_adv.php.pc_recebimento_por_tipo.php e indicadores derivados.Travessia/Bralar.Cross-Component Dependencies:
cobranca_atribuicao_cliente como mapa de carteira ativa por CPF normalizado.30 dias depende da marcacao persistida no MySQL, nao apenas da Chronos.quebras, advogado e renegociacoes dependem da classificacao centralizada para nao divergirem entre si.quebras dependem de contexto operacional adicional:
Historico do cliente: src/contatos/historico_clientes.php hoje é SQL Server-first para nome, status, KPIs e parcelas, com MySQL para ownership e histórico.Triagem Jurídica: js/dashboard_quebras.js, src/api/triagem/registrar_historico.php e integração jurídica externa exigem cpf, contract.external_id, cliente e residencial consistentes para Bralar e Travessia.contract_external_id, em vez de depender de parsing implícito da proposta exibida.contractNumber, numberDescription, datas e valor;cpf_cnpj no SQL Server como fallback controlado para recuperar contexto exibivel do cliente quando a API nao trouxer o campo desejado.credit_id, parcel_id, key quando houver).30 dias, por marcacao no MySQL;advogado, por enriquecimento no SQL Server com NumeroContratoBanco LIKE '%adv%';renegociacoes, para titulos pagos remanescentes com parcelFrequencyName = Renegociação.TituloClassificationService, nunca reproduzida de forma independente por endpoint.Critical Conflict Points Identified: 8 areas onde agentes diferentes poderiam tomar decisoes incompatíveis: naming de campos e classes, localizacao da camada nova, formato de payload, modelo de erro, normalizacao de dados, logging, persistencia auxiliar no MySQL e regras de classificacao/precedencia.
Database Naming Conventions:
snake_case.origem_sistemamarca_empresatitulo_uidchronos_credit_idchronos_parcel_idchronosCreditId ou tituloUid no banco.API Naming Conventions:
PascalCase e snake_case, a regra para a feature e:
snake_case para reduzir ambiguidadeCliente, Residencial, Valor, DataPagamentoorigem_sistema, marca_empresa, titulo_uid, proposta_exibicaoCode Naming Conventions:
PascalCase.camelCase.camelCase.ChronosTokenProviderChronosClientChronosMapperTituloConsolidadoServiceTituloClassificationServiceProject Organization:
src/lib/ ou estrutura equivalente leve dentro do monolito.src/lib/chronos/ChronosTokenProvider.phpsrc/lib/chronos/ChronosClient.phpsrc/lib/chronos/ChronosMapper.phpsrc/lib/cobranca/TituloConsolidadoService.phpsrc/lib/cobranca/TituloClassificationService.phpsrc/api/* devem virar consumidores dessa camada, nao novos centros de regra.File Structure Patterns:
config/ ou leitura de ambiente em um ponto central.API Response Formats:
{data: [...]}, continuar com {data: [...]}.{error: false, data: [...]}, continuar com esse formato.Data Exchange Formats:
cpf_cnpj sempre trafega normalizado para somente dígitos internamente.YYYY-MM-DD quando operacionalYYYY-MM-DD HH:MM:SS ou valor atual, se o endpoint já trabalha assim'true', 'false', 'SIM', 'NAO'.Event System Patterns:
TituloConsolidado.State Management Patterns:
30 dias.Error Handling Patterns:
Loading State Patterns:
All AI Agents MUST:
TituloConsolidado e a classificacao centralizada, sem reimplementar regra por endpointcobranca_30dias_registros como fonte de verdade para 30 diasTravessia/Bralar explicito em todos os pontos de exibição suportados pelo MVPPattern Enforcement:
src/lib/ ou local equivalente da camada nova, e nao com regra solta em src/api.snake_case.Good Examples:
quebras_listar.php chama TituloConsolidadoService::listarQuebras(...) e apenas adapta a resposta ao contrato JSON atual.pc_titulos_pagos.php usa TituloClassificationService para excluir itens que ja pertencem a 30 dias.pc_titulos_pagos_30d.php usa titulo_uid/ids Chronos persistidos no MySQL para enriquecer corretamente linhas Travessia.origem_sistema, marca_empresa, titulo_uid.Anti-Patterns:
parcelFrequencyName e em outro por regra textual diferente.proposta da Travessia no MySQL sem nenhum identificador real da parcela.marcaEmpresa em um endpoint e marca_empresa em outro para o mesmo conceito novo./var/www/html/cobranca-hml/
├── config/
│ ├── database.php
│ ├── database_sqlsrv.php
│ ├── juridico.php
│ ├── kb_routes.php
│ └── chronos.php # novo ponto central de configuracao da integracao
├── src/
│ ├── api/
│ │ ├── cobranca30/
│ │ │ └── registrar.php # adaptar para rastreabilidade Travessia
│ │ ├── pc_titulos_pagos.php # consumir camada consolidada
│ │ ├── pc_titulos_pagos_30d.php # consumir camada consolidada
│ │ ├── indicadores_30dias.php # consumir dados MySQL com rastreabilidade Travessia
│ │ └── quebras_listar.php # consumir camada consolidada
│ ├── lib/
│ │ ├── chronos/
│ │ │ ├── ChronosTokenProvider.php
│ │ │ ├── ChronosClient.php
│ │ │ ├── ChronosMapper.php
│ │ │ └── ChronosContracts.php # DTOs/arrays padronizados, opcional
│ │ ├── cobranca/
│ │ │ ├── TituloConsolidadoService.php
│ │ │ ├── TituloClassificationService.php
│ │ │ ├── TituloUidFactory.php
│ │ │ ├── TituloNormalization.php
│ │ │ └── TituloAuditContext.php
│ │ ├── Image.php
│ │ ├── Markdown.php
│ │ └── Sanitize.php
│ └── middleware/
│ └── auth_api.php
├── storage/
│ └── logs/ # reaproveitar para logs técnicos da integração, se já existir política local
└── _evo-output/
└── planning-artifacts/
└── chronos-titulos/
├── prd.md
├── implementation-readiness-report.md
└── architecture.md
API Boundaries:
/src/api/* permanece como fronteira HTTP interna do sistema.Component Boundaries:
src/lib/chronos/* e responsavel apenas por autenticacao e leitura da API Chronos.src/lib/cobranca/* e responsavel por normalizacao, classificacao, consolidacao e rastreabilidade.src/api/* e responsavel apenas pela borda HTTP e compatibilidade com o dashboard.Service Boundaries:
ChronosTokenProvider: obtenção e cache do token.ChronosClient: chamadas HTTP, retries mínimos, parse básico e tratamento de falha.ChronosMapper: transforma payload bruto Chronos em estrutura intermediaria coerente.TituloNormalization: normaliza cpf_cnpj, proposta e chaves.TituloUidFactory: gera titulo_uid consistente por origem.TituloClassificationService: decide quebra, 30 dias, renegociacao e exclusões.TituloConsolidadoService: orquestra SQL Server + MySQL + Chronos para cada caso de uso.Data Boundaries:
Feature/FR Mapping:
Carteira Consolidada e Classificação Operacional
src/lib/cobranca/TituloConsolidadoService.phpsrc/lib/cobranca/TituloClassificationService.phpsrc/lib/cobranca/TituloNormalization.phpsrc/lib/cobranca/TituloUidFactory.phpFluxo de Quebras
src/api/quebras_listar.phpsrc/lib/cobranca/TituloConsolidadoService.phpsrc/lib/chronos/ChronosClient.phpFluxo de 30 Dias
src/api/cobranca30/registrar.phpsrc/api/pc_titulos_pagos_30d.phpsrc/api/indicadores_30dias.phpsrc/lib/cobranca/TituloConsolidadoService.phpFluxo de Renegociações
src/api/pc_titulos_pagos.phpsrc/lib/cobranca/TituloClassificationService.phpsrc/lib/chronos/ChronosMapper.phpGovernança, Auditoria e Resiliência
src/lib/cobranca/TituloAuditContext.phpconfig/chronos.phpCross-Cutting Concerns:
src/middleware/ + validacoes atuais de endpointconfig/chronos.phpsrc/lib/cobranca/TituloNormalization.phperror_log com prefixos padronizadosInternal Communication:
TituloConsolidadoServiceTituloConsolidadoService -> SQL Server atual + MySQL atual + ChronosClientTituloConsolidadoService -> TituloClassificationServiceTituloConsolidadoService -> retorno uniforme para endpointExternal Integrations:
Data Flow:
Configuration Files:
config/chronos.phpdatabase.php e database_sqlsrv.php nao devem ser poluídos com regra de negocio da featureSource Organization:
src/lib/chronos/src/lib/cobranca/src/api/Test Organization:
src/lib/Asset Organization:
Development Server Structure:
/var/www/html/cobranca-hmlBuild Process Structure:
Deployment Structure:
Decision Compatibility: As decisoes principais nao entram em conflito entre si. A opcao por manter o monolito PHP atual, nao usar starter externo, nao alterar queries SQL Server e introduzir uma camada interna de consolidacao e compativel com o brownfield existente. A decisao de usar Chronos apenas no backend tambem e coerente com a seguranca definida no PRD e com o modo atual de funcionamento do dashboard.
Pattern Consistency:
Os padroes definidos reforcam as decisoes arquiteturais. Naming, formato de payload, localizacao das classes novas e estrategia de logging estao alinhados com a ideia de manter os endpoints como borda HTTP e mover a inteligencia da feature para src/lib/chronos/ e src/lib/cobranca/. Isso reduz a chance de implementacoes divergentes entre agentes ou arquivos diferentes.
Structure Alignment: A estrutura proposta suporta o desenho tecnico sem exigir refatoracao ampla do repositorio. Os novos componentes vivem em areas coerentes com a organizacao ja existente, e os endpoints impactados estao claramente mapeados. A separacao entre adaptador externo, consolidacao de dominio e borda HTTP ficou suficientemente clara para implementacao incremental.
Epic/Feature Coverage:
Mesmo sem epicos criados ainda, a arquitetura cobre a feature chronos-titulos como um todo. Os fluxos de quebras, 30 dias, renegociacoes, indicadores e rastreabilidade foram explicitamente contemplados nas decisoes e na estrutura.
Functional Requirements Coverage:
Os FRs do PRD estao arquiteturalmente suportados. A camada TituloConsolidado cobre consolidacao, origem e view model uniforme. TituloClassificationService cobre classificacao deterministica, precedencia e nao duplicidade. Os endpoints mapeados cobrem os fluxos obrigatorios do MVP. O papel do MySQL como fonte de verdade de 30 dias tambem foi mantido.
Non-Functional Requirements Coverage: Os NFRs mais importantes estao respondidos na arquitetura:
Decision Completeness: As decisoes criticas para comecar a implementacao estao fechadas. Isso inclui stack, boundaries, contracts internos, estrategia de integracao, politica de erro, rollout e impacto por endpoint. Nao restou nenhuma decisao estrutural grande em aberto para o MVP.
Structure Completeness: A estrutura fisica do projeto para a feature esta suficientemente definida: configuracao, classes novas, endpoints consumidores, limites de responsabilidade e fluxo de dados. Isso e suficiente para guiar os proximos artefatos e a implementacao.
Pattern Completeness: Os principais pontos onde agentes poderiam divergir foram cobertos: naming, localizacao de codigo, campos de payload, persistencia de rastreabilidade, tratamento de erro, classificacao e logging. Isso reduz bastante o risco de conflitos de implementacao.
Critical Gaps:
Important Gaps:
Nice-to-Have Gaps:
O principal risco detectado antes da arquitetura era cair em implementacao espalhada por endpoints. Isso foi resolvido nesta arquitetura ao definir uma camada compartilhada de consolidacao e classificacao. Outro risco era perder rastreabilidade dos titulos Travessia no fluxo 30 dias; isso foi tratado ao prever metadata persistente no MySQL e um titulo_uid unico por linha consolidada.
✅ Requirements Analysis
✅ Architectural Decisions
✅ Implementation Patterns
✅ Project Structure
Overall Status: READY FOR EPICS AND IMPLEMENTATION BREAKDOWN
Confidence Level: high
Key Strengths:
Areas for Future Enhancement:
AI Agent Guidelines:
src/lib/chronos/ e src/lib/cobranca/ como centro da featurecobranca_30dias_registros como fonte de verdade operacional de 30 diasFirst Implementation Priority:
Criar a camada interna de integracao Chronos e o contrato TituloConsolidado, incluindo token provider, client HTTP, mapper, normalizacao, titulo_uid e classificacao centralizada.