Matriz de Migração — Contas -> agent_framework_oci
| Capacidade |
Destino novo |
Reuso framework |
Código de domínio novo |
Dependência anterior |
| LangGraph |
app/workflows/agent_graph.py |
Sim |
composição mínima |
Não |
| Router |
EnterpriseRouter |
Sim |
routing.yaml |
Não |
| Stickiness |
framework |
Sim |
configuração |
Não |
| Supervisor |
framework |
Sim |
configuração |
Não |
| Confirmação |
AgentRuntimeMixin |
Sim |
tool policy |
Não |
| Clarificação |
AgentRuntimeMixin/MCP mapping |
Sim |
schemas/mapping |
Não |
| Sessions |
framework repository |
Sim |
Não |
Não |
| Message memory |
framework |
Sim |
Não |
Não |
| Summary memory |
framework |
Sim |
Não |
Não |
| LTM |
framework |
Sim |
Não |
Não |
| Checkpoint |
framework |
Sim |
Não |
Não |
| RAG |
RagService |
Sim |
conteúdo/config |
Não |
| Guardrails |
GuardrailPipeline |
Sim |
config |
Não |
| Output Supervisor |
framework |
Sim |
Não |
Não |
| Judges |
JudgePipeline |
Sim |
config |
Não |
| MCP router |
framework |
Sim |
tool catalog |
Não |
| Faturas |
MCP/domain |
Não aplicável |
Sim |
Não |
| Billing Analysis |
MCP/domain |
Não aplicável |
Sim |
Não |
| Consulta/Histórico VAS |
MCP/domain |
Não aplicável |
Sim |
Não |
| Bloqueio/Cancelamento VAS |
MCP/domain |
confirmação no framework |
Sim |
Não |
| Contestação |
MCP/domain |
confirmação/estado no framework |
Sim |
Não |
| Protocol/Status/Tracking |
MCP/domain |
contexto no framework |
Sim |
Não |
| SMS |
MCP/domain |
contexto no framework |
Sim |
Não |
| Secure PDF |
MCP/domain |
contexto no framework |
Sim |
Não |
| Langfuse |
framework |
Sim |
Não |
Não |
| Pub/Sub/sequence |
framework |
Sim |
configuração |
Não |
| OCI Streaming |
framework |
Sim |
configuração |
Não |
| OTEL |
framework |
Sim |
configuração |
Não |
Regra
O pacote anterior não é uma biblioteca do novo projeto. Se uma regra específica for necessária, ela deve ser portada e testada dentro de app/domain/contas; infraestrutura genérica deve ser eliminada em favor do framework.
Contratos TIM validados por regressão
| Integração |
Paridade coberta |
Estado |
| CompleteInvoices |
método/payload/header ClientID |
✅ |
| Query VAS |
URL por MSISDN, clientId=AIAAGENTCR, auth |
✅ |
| VAS History |
query msisdn, clientId, messageId, auth |
✅ |
| Block VAS |
payload PMid + fallbacks e headers |
✅ |
| Cancel VAS |
DELETE, channel, protocol, headers, messageId |
✅ |
| Contract Information |
GET por MSISDN, clientId, auth |
✅ |
| Profile/Line Info |
GET e header ClientID |
✅ |
| Billing Analysis |
GET por MSISDN + channel |
✅ |
| Bill PDF |
POST detalhado + criptografia |
✅ |
| Secure PDF |
GET com parâmetros criptografados |
✅ |
| Customer Contestation |
payload/headers principais |
✅ |
| Service Request Status |
envelope serviceRequest |
✅ |
| Tracking Activities |
customer/invoice/activity/user |
✅ |
| Protocol V2 |
envelope Siebel + headers corporativos |
✅ |
| SMS Barcode |
payload completo + retry/RCT |
✅ |
Jornadas compostas e comportamento conversacional
| Capacidade original |
Implementação migrada |
Reuso do framework |
Regressão |
| Cancelamento VAS -> contestação |
dois workflows encadeados no MCP |
WorkflowRuntime |
✅ |
| Composição final cancelamento |
app/domain/contas/vas_cancellation_message.py |
domínio determinístico |
✅ 19 casos originais |
| Fallback VAS History |
ContasDomainService.cancelar_vas_avulso |
transporte via adapter |
✅ |
| Cancelamento parcial em lote |
action expõe cancelados/falhas/candidatos |
WorkflowRuntime + IdempotencyStore |
✅ |
| Idempotência transacional |
create_idempotency_store() |
framework |
✅ |
| Replay pós-finalização |
Channel short-circuit |
framework |
✅ |
| Idle nudge replay |
Channel short-circuit |
framework |
✅ |
| Processing interruption |
replay + classificador LLM fail-safe |
LLMProvider framework |
✅ |
| Correção Fim/Mim -> Sim |
channel transcription |
framework |
✅ |
| Finalização status/summary |
regra pura de domínio |
workflow framework |
✅ |
| Protocolo informacional final |
action + ProtocolV2 |
WorkflowRuntime |
✅ |
Bootstrap MCP
WorkflowRuntime, checkpointer e IdempotencyStore são inicializados de forma lazy. Isto evita dependência de Oracle/Redis para endpoints de diagnóstico e garante que o backend durável só seja aberto quando um workflow realmente precisar ser executado.
Incrementos de paridade - baseline 420
| Capacidade original |
Implementação migrada |
Responsabilidade |
Estado |
| InvoiceContextProvider / prefetch |
InvoiceContextService + agent_framework.cache.Cache |
domínio escolhe evidências; framework fornece cache |
✅ |
| Isolamento de invoice context por sessão |
chave session_id:msisdn:invoice_id |
framework cache |
✅ |
| Plano família titular/dependente |
normalização antes do workflow + contestação única no titular |
domínio + WorkflowRuntime |
✅ |
| Correção de linha por invoice detail |
normalização determinística |
domínio |
✅ |
| CVAL fail-stop |
edge success=false -> END |
WorkflowRuntime |
✅ |
| Snapshot parcial em falha |
WorkflowRuntime recupera último state do LangGraph |
framework |
✅ |
| Retry Billing Analysis / RCT 079-084 |
metadata _transport + RCTPolicy |
domínio define códigos; observer publica |
✅ |
| Finalização invoice explanation |
protocolo informacional somente após workflow executado |
domínio + WorkflowRuntime |
✅ |
| VEB fechado / force RT15 |
reuso ou novo protocolo conforme flags |
domínio |
✅ |
| Inicialização AgentWorkflow |
router/agentes/grafo dentro de __init__ |
aplicação/framework |
✅ |
Incrementos de paridade — baseline 435
| Capacidade original |
Implementação migrada |
Responsabilidade |
Status |
| Invoice prefetch single-flight |
InvoiceContextService + agent_framework.cache.Cache |
domínio escolhe evidências; framework fornece cache |
✅ |
| CVN de prefetch sem duplicação |
business_events + cache markers |
domínio define código; observer framework publica |
✅ |
| Latch invoice/workflow já executado |
AgentRuntimeMixin.business_workflows_executed |
framework |
✅ |
| Batch cancellation max 5 |
action async + semaphore |
domínio action sobre WorkflowRuntime |
✅ |
| Protocolo por linha antes de cancelar |
action cancelamento_vas_avulso_batch |
domínio + adapter TIM |
✅ |
| Erro estruturado de workflow |
WorkflowRunResult.error_details |
framework |
✅ |
| Provider error de contestação |
MCP mapping sobre error_details |
domínio/MCP fino |
✅ |
Baseline 440 testes - continuação
- 440 testes de migração passando; 2 skipped por dependências indisponíveis neste runtime (
langgraph/jellyfish).
- Cancelamento VAS: falha de bloqueio/cancelamento pode permanecer candidata à contestação sem mascarar sucesso.
- Resposta composta preserva protocolos de cancelamento por linha + protocolo de contestação e sinaliza finalização sugerida.
- Plano família: protocolo de cancelamento em dependente resolve
socialSecNo via LineInfo da própria linha.
- Registro de protocolo aceita aliases de resposta
interactionProtocol, protocolNumber, protocol e protocolo.
- Finalização informacional recalcula Bundle/Estratégico/Avulso pela evidência de
invoice_detail/Billing Analysis quando disponível.
Finalização - paridade adicional (baseline 533)
| Capability original |
Implementação migrada |
Framework reutilizado |
Evidência |
| CVN aceite/recusa no encerramento |
finalizar_atendimento_action |
business_events + AgentObserver |
testes de finalização estendida |
| Protocolo RT-15 informacional |
action de domínio + TIM client |
WorkflowRuntime/observer/idempotência |
RCT.085/086 + CVN.010/011 |
| Nota de invoice explanation |
valor canônico Explicação dos valores da fatura |
workflow latch do framework |
regressão |
| Handoff/retention suppression |
flags no state/domain action |
estado persistido do framework |
regressão |
| SAD decision tree |
SAD.001/002/003/004/005/006/007 como business events |
AgentObserver |
regressão |
| Classificação VAS sem invoice detail |
aliases determinísticos de domínio |
nenhuma engine paralela |
regressão |
| Regressão offline de workflow |
WorkflowRuntime(... allow_deterministic_fallback=True) somente em teste |
DSL/actions do framework |
18 casos históricos executados |
Atualização de paridade - baseline 550
| Capability |
Original |
Migrado |
Evidência |
| Finalização com prefetch de fatura |
CVN lookup + RT-15 quando aplicável |
Implementado |
regressão de finalização |
| Supressão após transição para negócio |
não reemite CVN/MPI |
Implementado |
regressão dedicada |
| VEB terminal |
não duplica RT-15/CVN |
Implementado |
regressão dedicada |
| Precedência de tipo pela fatura |
total/parcial/sem match |
Implementado |
regressão dedicada |
| Protocolo já existente |
não duplica RT-15 |
Implementado |
regressão dedicada |
| Matcher fonético/transcrição |
catálogo real |
Implementado sem xfails |
suíte de transcrição |
VAA — rastreabilidade de cancelamento/contestação
| Capability histórica |
Implementação migrada |
Framework reutilizado |
Estado |
| VAA.001–004 cancelamento |
cancelamento_vas_avulso_batch retorna business_events |
AgentObserver / analytics |
OK |
| VAA.005–009 contestação/boleto |
abrir_contestacao_cliente retorna business_events |
AgentObserver / analytics |
OK |
| VAA.012–015 SMS |
enviar_sms retorna business_events e mantém fluxo em erro |
AgentObserver / analytics |
OK |
| VAA.016–017 status SR |
atualizar_status_sr retorna business_events |
AgentObserver / analytics |
OK |
Baseline 560 testes - metadata corporativa TIM
- 560 testes de migração passando, sem skips/xfails.
- Business events preservam contexto corporativo:
agentProtocolId, adjustedProtocol, billingId, uraCallId, channelId, sessionId, messageId e agentSpecificData.
- Contestação VAA.005-009 preserva itens/valores ajustados e protocolo.
- Finalização CVN.010/011 preserva protocolo TIM/URA e billing context.
- RCTs derivados de retry HTTP carregam
apiUrl, apiStatusCode, apiResponsePayload e latencyMs.
- SMS e Service Request Status carregam metadata de transporte e contexto de protocolo.
tim_payload_mapper aceita o formato histórico agentSpecificData JSON-string e o converte para o objeto canônico TIM no payload final.
Paridade de eventos conversacionais — baseline 565
| Família |
Paridade adicionada |
| VEB |
ordem dos branches de VAS estratégico e metadata do turno/URA |
| MPI |
contexto de invoice explanation, pró-rata e cancelamento |
| CVN |
contexto conversacional/protocolo no encerramento |
| SAD |
llmResponse, messageId, sessão/canal e sessionEndAt normalizado |
Incremento de paridade — baseline 570
| Funcionalidade original |
Implementação migrada |
Responsabilidade |
| Cancelamento solicitado para item estratégico/bundle |
InvoiceResolver redireciona para workflow vas_estrategico |
Domínio + WorkflowRuntime |
| Invoice explanation SIM |
recomenda resolvido pelo último node do workflow |
MCP adapter fino sobre WorkflowRuntime |
| Invoice explanation NÃO sem VAS variado |
recomenda nao_resolvido |
MCP adapter fino sobre WorkflowRuntime |
| Pró-rata aceito / sem Plano Controle |
recomenda resolvido |
MCP adapter fino sobre WorkflowRuntime |
| Orientação de cancelamento de VAS estratégico por parceiro |
action declara requires_rag/rag_queries; AgentRuntimeMixin chama RagService |
Framework |
| Gate padrão de regressão |
pytest -q -> tests/ |
Projeto migrado |
Baseline 578 - wrapper cancelamento + LLM composition
- 593 testes passando; zero skipped/xfail.
- Cancelamento preserva
auto_finalize_on_failure em falha técnica de contestação.
- Item já contestado não mascara cancelamento concluído como falha sistêmica.
cancelamento_vas_protocol e todos os protocolos de resposta são preservados.
- Plano família contesta titular + dependentes em uma única
contestacao_tool.
- Lote com muitos no-match continua contestando exatamente os candidatos elegíveis.
- Pró-rata usa
requires_llm_composition do framework em vez de gateway LLM de domínio.
Paridade de wrappers históricos — baseline 593
| Comportamento original |
Implementação migrada |
Estado |
tipo_atendimento=contestacao |
_workflow_payload(contestacao_tool) |
✅ |
| Contexto do turno no workflow |
payload MCP preserva IDs/canal/mensagem |
✅ |
| CPF como alias de socialSecNo |
normalização no wrapper composto |
✅ |
cancelados sem results.success |
fallback agregado do wrapper |
✅ |
itens_para_contestacao |
alias de contestation_candidates |
✅ |
| falha block/cancel ainda elegível a RT-02 |
composição de dois WorkflowRuntime |
✅ |
| SMS falha sem derrubar jornada |
sms_not_send_error |
✅ |
| Bundle + Estratégico + NÃO |
protocolo deferido + RAG obrigatório |
✅ |
Complemento de paridade — baseline 599
| Comportamento histórico |
Implementação migrada |
Prova |
| Itens já contestados |
normalização em abrir_contestacao_cliente + compositor determinístico |
teste de wrapper 1:1 |
| Itens contestados/não contestados |
classificação na action de domínio |
regressão de contestação |
| Total contestado somente dos itens aceitos |
cálculo determinístico no domínio |
regressão de contestação |
| Contestação retorna valor zero |
fallback para total efetivamente cancelado |
teste de wrapper 1:1 |
| Valor na fala em pt-BR |
normalização na borda MCP |
teste R$ 14,99 |
next_subject |
ignorado pelo compositor determinístico |
teste de wrapper 1:1 |
| Billing Analysis indisponível |
fraseologia canônica e auto_finalize_on_failure=false |
regressão invoice explanation |
Cobertura 1:1 de wrappers — baseline 615
Além dos testes de domínio/actions/workflows, a suíte passa a reproduzir diretamente
outcomes históricos dos wrappers cancelar_vas_single e finalize_support, cobrindo
no-match, candidatos explícitos, falhas parciais RT-01→RT-02, SMS, protocolos,
protocol_closed, plano família/titular-dependente e protocolo informacional deferido.
Esses testes são classificados como paridade explícita de contrato externo, e não
apenas cobertura indireta por actions internas.