name: contestacao_tool version: 2 start: registrar_protocolo nodes: # 1. Registrar protocolo — primeiro passo ao entrar em contestação - id: registrar_protocolo action: registrar_protocolo input: msisdn: $.input.msisdn social_sec_no: $.input.social_sec_no scenario: "contestacao" request_status: "Aberto" status: "OPENED" # 3. Enviar SMS com código do boleto - id: enviar_sms action: enviar_sms input: msisdn: $.input.msisdn message: $.input.mensagem_sms # 3.1 Consultar status da fatura (CompleteInvoices). Reaproveita o payload # do prefetch da sessão quando disponível (evita 2ª chamada à API). - id: check_invoice_status action: check_invoice_status input: msisdn: $.input.msisdn invoice_id: $.input.invoice_id current_invoice_number: $.input.current_invoice_number complete_invoices_payload: $.input.complete_invoices_payload # 4. Abrir contestação no serviço dedicado - id: abrir_contestacao_cliente action: abrir_contestacao_cliente input: msisdn: $.input.msisdn social_sec_no: $.input.social_sec_no customer_id: $.input.customer_id current_invoice_number: $.input.current_invoice_number invoice_id: $.input.invoice_id current_invoice_due_date: $.input.current_invoice_due_date servico: $.input.servico valor: $.input.valor descricao: $.input.descricao items: $.input.items protocolo_id: $.vars.registrar_protocolo.protocolo_id customer_type: $.input.customer_type customer_status: $.input.customer_status invoice_status: $.vars.check_invoice_status.invoice_status invoice_amount_open: $.input.invoice_amount_open invoice_amount: $.input.invoice_amount contestation_type: $.input.contestation_type adjust_reason: $.input.adjust_reason refund_option: $.input.refund_option manual_conta_certa_indicator: $.input.manual_conta_certa_indicator double_refund: $.input.double_refund user_id: $.input.user_id message_id: $.input.message_id client_id: $.input.client_id tipo_atendimento: $.input.tipo_atendimento skip_invoice_item_validation: $.input.skip_invoice_item_validation # 5. Consultar contrato para verificar data de corte. Em plano família, # dependent_invoice_item=true força Conta Certa Manual obrigatória. - id: consultar_contrato_corte action: consultar_contrato_corte input: msisdn: $.input.msisdn current_invoice_due_date: $.input.current_invoice_due_date dependent_invoice_item: $.input.dependent_invoice_item # 6. Abrir SR de Conta Certa Manual (quando após data de corte) - id: abrir_sr_conta_certa_manual action: abrir_sr_conta_certa_manual input: msisdn: $.input.msisdn social_sec_no: $.input.social_sec_no dia_vencimento: $.vars.consultar_contrato_corte.dia_vencimento request_status: "Encaminhado" status: "Encaminhado" # 7. Atualizar status do protocolo principal — último passo - id: atualizar_status_sr action: atualizar_status_sr input: msisdn: $.input.msisdn social_sec_no: $.input.social_sec_no protocolo_id: $.vars.registrar_protocolo.protocolo_id dia_vencimento: $.vars.abrir_sr_conta_certa_manual.dia_vencimento scenario: "contestacao" channel: "AIAGENTCR" status: "Fechado" client_id: "AIAGENTCR" # 8. Atualiza status do protocolo principal após Conta Certa Manual - id: atualizar_status_sr_registro action: atualizar_status_sr input: msisdn: $.input.msisdn social_sec_no: $.input.social_sec_no protocolo_id: $.vars.abrir_sr_conta_certa_manual.sr_conta_certa_id scenario: "conta_certa_manual" status: "Encaminhado" client_id: "AIAGENTCR" edges: # Protocolo registrado → reutiliza o CompleteInvoices do prefetch - from: registrar_protocolo to: check_invoice_status # Todas as formas → abrir contestação - from: check_invoice_status to: abrir_contestacao_cliente priority: 10 # Guardrail/validação financeira bloqueou a contestação: encerrar sem # executar SMS, contrato ou SR. O MCP propaga success=false ao agente. - from: abrir_contestacao_cliente to: END priority: 1 when: eq: [$.vars.abrir_contestacao_cliente.success, false] # Após contestação: quando necessário, enviar SMS - from: abrir_contestacao_cliente to: enviar_sms priority: 10 when: all: - exists: $.vars.abrir_contestacao_cliente.barcode - neq: [$.vars.abrir_contestacao_cliente.barcode, ""] # Após contestação (sem SMS) → verificar data de corte - from: abrir_contestacao_cliente to: consultar_contrato_corte priority: 99 # Após SMS → verificar data de corte - from: enviar_sms to: consultar_contrato_corte # Abrir SR Conta Certa Manual: após data de corte (regra padrão) OU # contestação de item de fatura de dependente (plano família, obrigatória) - from: consultar_contrato_corte to: abrir_sr_conta_certa_manual priority: 10 when: any: - all: - eq: [$.vars.consultar_contrato_corte.apos_data_corte, true] - eq: [$.vars.consultar_contrato_corte.contestation_success, true] - any: - eq: [$.input.manual_conta_certa_indicator, true] - eq: [$.vars.abrir_contestacao_cliente.manual_conta_certa_indicator, true] - all: - eq: [$.vars.consultar_contrato_corte.dependent_invoice_item, true] # contestação registrada no portal (CRIAR ou ENVIADA): a SR manual # de item de dependente não depende do portal pedir criação - eq: [$.vars.consultar_contrato_corte.contestation_registered, true] # Sem Conta Certa Manual elegível → atualiza tracking e fecha protocolo - from: consultar_contrato_corte to: atualizar_status_sr priority: 99 # Após SR manual → fechar protocolo - from: abrir_sr_conta_certa_manual to: atualizar_status_sr_registro priority: 10 # Protocolo principal de contestação atualizado após Conta Certa Manual → END - from: atualizar_status_sr_registro to: END # Protocolo atualizado → END - from: atualizar_status_sr to: END