ajuste no guardraild COE
This commit is contained in:
223
tests/docs/MATRIZ_MIGRACAO.md
Normal file
223
tests/docs/MATRIZ_MIGRACAO.md
Normal file
@@ -0,0 +1,223 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user