Projeto do Agent Contas ORACLE
This commit is contained in:
1
workflows/buscar_fatura.active.yaml
Normal file
1
workflows/buscar_fatura.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 1
|
||||
16
workflows/buscar_fatura.v1.yaml
Normal file
16
workflows/buscar_fatura.v1.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
name: buscar_fatura
|
||||
version: 1
|
||||
start: buscar_fatura
|
||||
|
||||
nodes:
|
||||
- id: buscar_fatura
|
||||
action: buscar_fatura
|
||||
input:
|
||||
invoice_id: $.input.invoice_id
|
||||
msisdn: $.input.msisdn
|
||||
customer_id: $.input.customer_id
|
||||
output: $.input.output
|
||||
|
||||
edges:
|
||||
- from: buscar_fatura
|
||||
to: END
|
||||
1
workflows/buscar_informacao.active.yaml
Normal file
1
workflows/buscar_informacao.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 2
|
||||
28
workflows/buscar_informacao.v2.yaml
Normal file
28
workflows/buscar_informacao.v2.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
name: buscar_informacao
|
||||
version: 2
|
||||
start: buscar_informacao
|
||||
|
||||
nodes:
|
||||
- id: buscar_informacao
|
||||
action: buscar_informacao_rag
|
||||
input:
|
||||
query: $.input.query
|
||||
queries: $.input.queries
|
||||
top_k: $.input.top_k
|
||||
segment: $.input.segment
|
||||
|
||||
- id: reescrever_resposta
|
||||
action: reescrever_resposta_buscar_informacao
|
||||
input:
|
||||
queries: $.vars.buscar_informacao.queries
|
||||
documents: $.vars.buscar_informacao.documents
|
||||
answer: $.vars.buscar_informacao.answer
|
||||
noMatchRag: $.vars.buscar_informacao.noMatchRag
|
||||
ragRetrievedDocuments: $.vars.buscar_informacao.ragRetrievedDocuments
|
||||
ragSelectedDocuments: $.vars.buscar_informacao.ragSelectedDocuments
|
||||
|
||||
edges:
|
||||
- from: buscar_informacao
|
||||
to: reescrever_resposta
|
||||
- from: reescrever_resposta
|
||||
to: END
|
||||
1
workflows/cancelamento_vas_avulso.active.yaml
Normal file
1
workflows/cancelamento_vas_avulso.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 1
|
||||
20
workflows/cancelamento_vas_avulso.v1.yaml
Normal file
20
workflows/cancelamento_vas_avulso.v1.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
name: cancelamento_vas_avulso
|
||||
version: 1
|
||||
start: cancelar_vas_avulso
|
||||
|
||||
nodes:
|
||||
- id: cancelar_vas_avulso
|
||||
action: cancelamento_vas_avulso_batch
|
||||
input:
|
||||
items: $.input.items
|
||||
csp_id: $.input.csp_id
|
||||
channel: $.input.channel
|
||||
social_sec_no: $.input.social_sec_no
|
||||
request_status: "Fechado"
|
||||
status: "CLOSED"
|
||||
data_credito_proxima_fatura: $.input.data_credito_proxima_fatura
|
||||
idempotency_key: $.input.idempotency_key
|
||||
|
||||
edges:
|
||||
- from: cancelar_vas_avulso
|
||||
to: END
|
||||
1
workflows/contestacao_tool.active.yaml
Normal file
1
workflows/contestacao_tool.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 2
|
||||
178
workflows/contestacao_tool.v2.yaml
Normal file
178
workflows/contestacao_tool.v2.yaml
Normal file
@@ -0,0 +1,178 @@
|
||||
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
|
||||
1
workflows/finalizar_atendimento.active.yaml
Normal file
1
workflows/finalizar_atendimento.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 1
|
||||
23
workflows/finalizar_atendimento.v1.yaml
Normal file
23
workflows/finalizar_atendimento.v1.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
name: finalizar_atendimento
|
||||
version: 1
|
||||
start: finalizar
|
||||
|
||||
nodes:
|
||||
- id: finalizar
|
||||
action: finalizar_atendimento_action
|
||||
input:
|
||||
status: $.input.status
|
||||
summary: $.input.summary
|
||||
msisdn: $.input.msisdn
|
||||
social_sec_no: $.input.social_sec_no
|
||||
message_id: $.input.message_id
|
||||
informational_vas_types: $.input.informational_vas_types
|
||||
informational_rag_vas_types: $.input.informational_rag_vas_types
|
||||
protocol_number: $.input.protocol_number
|
||||
protocolo_id: $.input.protocolo_id
|
||||
defer_sad_ic: $.input.defer_sad_ic
|
||||
suppress_cvn_protocol_ic: $.input.suppress_cvn_protocol_ic
|
||||
|
||||
edges:
|
||||
- from: finalizar
|
||||
to: END
|
||||
1
workflows/invoice_explanation.active.yaml
Normal file
1
workflows/invoice_explanation.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 2
|
||||
168
workflows/invoice_explanation.v2.yaml
Normal file
168
workflows/invoice_explanation.v2.yaml
Normal file
@@ -0,0 +1,168 @@
|
||||
name: invoice_explanation
|
||||
version: 2
|
||||
start: preparar
|
||||
|
||||
nodes:
|
||||
- id: preparar
|
||||
action: preparar_invoice_explanation
|
||||
input:
|
||||
msisdn: $.input.msisdn
|
||||
customer_id: $.input.customer_id
|
||||
current_invoice_number: $.input.current_invoice_number
|
||||
past_invoice_number: $.input.past_invoice_number
|
||||
current_invoice_due_date: $.input.current_invoice_due_date
|
||||
past_invoice_due_date: $.input.past_invoice_due_date
|
||||
channel: $.input.channel
|
||||
tentativa_anterior: $.vars.preparar.tentativa
|
||||
invoice_explanation_base: $.input.invoice_explanation_base
|
||||
|
||||
- id: formatar
|
||||
action: formatar_invoice_explanation
|
||||
input:
|
||||
explicacao_base: $.vars.preparar.explicacao_base
|
||||
invoice_detail: $.input.invoice_detail
|
||||
pause:
|
||||
enabled: true
|
||||
when:
|
||||
eq: [$.output.await_user_input, true]
|
||||
return_from: $.output.mensagem
|
||||
expected_input:
|
||||
key: resposta_usuario
|
||||
allowed_values: ["SIM", "NAO"]
|
||||
normalize: upper_strip
|
||||
resume_from: decisao
|
||||
|
||||
- id: checar_tentativa
|
||||
action: checar_tentativa_cvn
|
||||
input:
|
||||
tentativa: $.vars.preparar.tentativa
|
||||
|
||||
- id: texto_intencao_invalida
|
||||
action: montar_resposta_texto
|
||||
input:
|
||||
dados:
|
||||
texto_usuario: "Não consegui validar sua solicitação. Pode informar novamente sobre a sua fatura?"
|
||||
|
||||
- id: fim_intencao_invalida
|
||||
action: montar_resposta_texto
|
||||
input:
|
||||
dados:
|
||||
texto_usuario: "Não foi possível validar sua solicitação neste momento."
|
||||
|
||||
- id: resposta_falha_servico
|
||||
action: montar_resposta_texto
|
||||
input:
|
||||
dados:
|
||||
texto_usuario: "Para continuar com a sua solicitação, aguarde um instante."
|
||||
|
||||
- id: decisao
|
||||
action: no_op
|
||||
input: {}
|
||||
|
||||
- id: registrar_sim
|
||||
action: registrar_atendimento_invoice_explanation
|
||||
input:
|
||||
resposta_usuario: SIM
|
||||
|
||||
- id: registrar_protocolo_aceite
|
||||
action: registrar_protocolo_inicio
|
||||
input:
|
||||
msisdn: $.input.msisdn
|
||||
scenario: invoice_explanation_aceite_fechado
|
||||
request_status: Fechado
|
||||
status: CLOSED
|
||||
|
||||
- id: registrar_nao
|
||||
action: registrar_atendimento_invoice_explanation
|
||||
input:
|
||||
resposta_usuario: NAO
|
||||
|
||||
# A variação foi causada por VAS avulso ou estratégico? Sem VAS variado não há nada que
|
||||
# o bot resolva, e insistir com o orquestrador só gasta turno (SPEC §9 "Explicação da variação recusada").
|
||||
- id: checar_vas_variacao
|
||||
action: checar_vas_variado
|
||||
input:
|
||||
invoice_variation: $.input.invoice_variation
|
||||
invoice_detail: $.input.invoice_detail
|
||||
|
||||
# Nó só para nomear o last_node: o backend o mapeia para nao_resolvido em
|
||||
# auto_finalize_status_map, e a fala vem do NAO_RESOLVIDO_CLOSING.
|
||||
- id: finalizar_nao_resolvido
|
||||
action: no_op
|
||||
input: {}
|
||||
|
||||
edges:
|
||||
- from: preparar
|
||||
to: formatar
|
||||
priority: 10
|
||||
when:
|
||||
eq: [$.vars.preparar.success, true]
|
||||
|
||||
- from: preparar
|
||||
to: resposta_falha_servico
|
||||
priority: 20
|
||||
when:
|
||||
eq: [$.vars.preparar.service_failed, true]
|
||||
|
||||
- from: preparar
|
||||
to: checar_tentativa
|
||||
priority: 30
|
||||
when:
|
||||
eq: [$.vars.preparar.success, false]
|
||||
|
||||
- from: checar_tentativa
|
||||
to: fim_intencao_invalida
|
||||
priority: 10
|
||||
when:
|
||||
eq: [$.vars.checar_tentativa.limite_excedido, true]
|
||||
|
||||
- from: checar_tentativa
|
||||
to: texto_intencao_invalida
|
||||
priority: 20
|
||||
|
||||
- from: formatar
|
||||
to: decisao
|
||||
|
||||
- from: decisao
|
||||
to: registrar_sim
|
||||
priority: 10
|
||||
when:
|
||||
eq: [$.input.resposta_usuario, SIM]
|
||||
|
||||
- from: decisao
|
||||
to: registrar_nao
|
||||
priority: 20
|
||||
when:
|
||||
eq: [$.input.resposta_usuario, NAO]
|
||||
|
||||
- from: registrar_sim
|
||||
to: registrar_protocolo_aceite
|
||||
|
||||
- from: registrar_protocolo_aceite
|
||||
to: END
|
||||
|
||||
- from: registrar_nao
|
||||
to: checar_vas_variacao
|
||||
|
||||
- from: checar_vas_variacao
|
||||
to: finalizar_nao_resolvido
|
||||
priority: 10
|
||||
when:
|
||||
eq: [$.vars.checar_vas_variacao.tem_vas_variado, false]
|
||||
|
||||
# Tem VAS variado (ou não deu para saber): devolve ao orquestrador, como sempre.
|
||||
- from: checar_vas_variacao
|
||||
to: END
|
||||
priority: 20
|
||||
|
||||
- from: finalizar_nao_resolvido
|
||||
to: END
|
||||
|
||||
- from: texto_intencao_invalida
|
||||
to: END
|
||||
|
||||
- from: fim_intencao_invalida
|
||||
to: END
|
||||
|
||||
- from: resposta_falha_servico
|
||||
to: END
|
||||
1
workflows/pro_rata.active.yaml
Normal file
1
workflows/pro_rata.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 3
|
||||
104
workflows/pro_rata.v3.yaml
Normal file
104
workflows/pro_rata.v3.yaml
Normal file
@@ -0,0 +1,104 @@
|
||||
name: pro_rata
|
||||
version: 3
|
||||
start: preparar
|
||||
|
||||
nodes:
|
||||
- id: preparar
|
||||
action: preparar_pro_rata
|
||||
input:
|
||||
msisdn: $.input.msisdn
|
||||
planos: $.input.planos
|
||||
has_plano_controle: $.input.has_plano_controle
|
||||
|
||||
- id: formatar
|
||||
action: formatar_pro_rata
|
||||
input:
|
||||
mensagem_base: $.vars.preparar.mensagem
|
||||
pause:
|
||||
enabled: true
|
||||
when:
|
||||
eq: [$.vars.preparar.await_user_input, true]
|
||||
return_from: $.output.mensagem
|
||||
expected_input:
|
||||
key: resposta_usuario
|
||||
allowed_values: ["SIM", "NAO", "OUTRO"]
|
||||
normalize: upper_strip
|
||||
resume_from: decisao_esclarecimento
|
||||
|
||||
- id: decisao_esclarecimento
|
||||
action: no_op
|
||||
input: {}
|
||||
|
||||
- id: devolver_orquestrador
|
||||
action: no_op
|
||||
input: {}
|
||||
|
||||
- id: reperguntar_esclarecimento
|
||||
action: formatar_pro_rata
|
||||
input:
|
||||
mensagem_base: $.vars.preparar.mensagem_reperguntar_esclarecimento
|
||||
pause:
|
||||
enabled: true
|
||||
return_from: $.output.mensagem
|
||||
expected_input:
|
||||
key: resposta_usuario
|
||||
allowed_values: ["SIM", "NAO", "OUTRO"]
|
||||
normalize: upper_strip
|
||||
resume_from: decisao_esclarecimento
|
||||
|
||||
- id: registrar_nao_controle
|
||||
action: registrar_atendimento_pro_rata
|
||||
input:
|
||||
msisdn: $.input.msisdn
|
||||
mensagem_base: $.vars.formatar.mensagem
|
||||
caminho: nao_controle
|
||||
|
||||
- id: registrar_aceitou
|
||||
action: registrar_atendimento_pro_rata
|
||||
input:
|
||||
msisdn: $.input.msisdn
|
||||
mensagem_base: $.vars.preparar.mensagem_pos_aceite
|
||||
caminho: aceitou
|
||||
ic: VEB.003
|
||||
|
||||
edges:
|
||||
- from: preparar
|
||||
to: formatar
|
||||
|
||||
- from: formatar
|
||||
to: decisao_esclarecimento
|
||||
priority: 10
|
||||
when:
|
||||
eq: [$.vars.preparar.await_user_input, true]
|
||||
|
||||
- from: formatar
|
||||
to: registrar_nao_controle
|
||||
priority: 20
|
||||
|
||||
- from: decisao_esclarecimento
|
||||
to: registrar_aceitou
|
||||
priority: 10
|
||||
when:
|
||||
eq: [$.input.resposta_usuario, SIM]
|
||||
|
||||
- from: decisao_esclarecimento
|
||||
to: devolver_orquestrador
|
||||
priority: 20
|
||||
when:
|
||||
eq: [$.input.resposta_usuario, NAO]
|
||||
|
||||
- from: decisao_esclarecimento
|
||||
to: reperguntar_esclarecimento
|
||||
priority: 30
|
||||
|
||||
- from: devolver_orquestrador
|
||||
to: END
|
||||
|
||||
- from: reperguntar_esclarecimento
|
||||
to: decisao_esclarecimento
|
||||
|
||||
- from: registrar_nao_controle
|
||||
to: END
|
||||
|
||||
- from: registrar_aceitou
|
||||
to: END
|
||||
1
workflows/termino_desconto.active.yaml
Normal file
1
workflows/termino_desconto.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 1
|
||||
15
workflows/termino_desconto.v1.yaml
Normal file
15
workflows/termino_desconto.v1.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
name: termino_desconto
|
||||
version: 1
|
||||
start: formatar
|
||||
|
||||
nodes:
|
||||
- id: formatar
|
||||
action: formatar_capability_resposta
|
||||
input:
|
||||
tipo: termino_desconto
|
||||
msisdn: $.input.msisdn
|
||||
nome_plano: $.input.nome_plano
|
||||
|
||||
edges:
|
||||
- from: formatar
|
||||
to: END
|
||||
1
workflows/valor_divergente.active.yaml
Normal file
1
workflows/valor_divergente.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 1
|
||||
14
workflows/valor_divergente.v1.yaml
Normal file
14
workflows/valor_divergente.v1.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
name: valor_divergente
|
||||
version: 1
|
||||
start: formatar
|
||||
|
||||
nodes:
|
||||
- id: formatar
|
||||
action: formatar_capability_resposta
|
||||
input:
|
||||
tipo: valor_divergente
|
||||
msisdn: $.input.msisdn
|
||||
|
||||
edges:
|
||||
- from: formatar
|
||||
to: END
|
||||
1
workflows/vas_estrategico.active.yaml
Normal file
1
workflows/vas_estrategico.active.yaml
Normal file
@@ -0,0 +1 @@
|
||||
version: 3
|
||||
140
workflows/vas_estrategico.v3.yaml
Normal file
140
workflows/vas_estrategico.v3.yaml
Normal file
@@ -0,0 +1,140 @@
|
||||
name: vas_estrategico
|
||||
version: 3
|
||||
start: preparar
|
||||
|
||||
nodes:
|
||||
- id: preparar
|
||||
action: preparar_vas_estrategico
|
||||
input:
|
||||
items: $.input.items
|
||||
linhas: $.input.linhas
|
||||
pause:
|
||||
enabled: true
|
||||
when:
|
||||
eq: [$.output.await_user_input, true]
|
||||
return_from: $.output.mensagem
|
||||
expected_input:
|
||||
key: resposta_usuario
|
||||
allowed_values: ["SIM", "NAO", "OUTRO"]
|
||||
normalize: upper_strip
|
||||
resume_from: decisao
|
||||
|
||||
- id: resposta_bundle
|
||||
action: montar_resposta_texto
|
||||
input:
|
||||
dados:
|
||||
texto_usuario: $.vars.preparar.mensagem_bundle_fechamento
|
||||
|
||||
- id: decisao
|
||||
action: no_op
|
||||
input: {}
|
||||
|
||||
- id: resposta_sim
|
||||
action: montar_resposta_texto
|
||||
input:
|
||||
dados:
|
||||
texto_usuario: $.vars.preparar.mensagem_pos_aceite
|
||||
|
||||
- id: explicar_cancelamento
|
||||
action: montar_explicacao_cancelamento_vas_estrategico
|
||||
input:
|
||||
linhas: $.vars.preparar.linhas
|
||||
orientacoes_cancelamento: $.input.orientacoes_cancelamento
|
||||
|
||||
- id: registrar_sim
|
||||
action: registrar_atendimento_vas_estrategico
|
||||
input:
|
||||
linhas: $.vars.preparar.linhas
|
||||
mensagem_base: $.vars.resposta_sim.mensagem
|
||||
request_status: "Fechado"
|
||||
status: "CLOSED"
|
||||
|
||||
- id: registrar_nao
|
||||
action: registrar_atendimento_vas_estrategico
|
||||
input:
|
||||
linhas: $.vars.preparar.linhas
|
||||
mensagem_base: $.vars.explicar_cancelamento.mensagem
|
||||
request_status: "Fechado"
|
||||
status: "CLOSED"
|
||||
|
||||
- id: registrar_bundle
|
||||
action: registrar_atendimento_vas_estrategico
|
||||
input:
|
||||
linhas: $.vars.preparar.linhas
|
||||
mensagem_base: $.vars.resposta_bundle.mensagem
|
||||
request_status: "Fechado"
|
||||
status: "CLOSED"
|
||||
|
||||
- id: registrar_outro
|
||||
action: registrar_atendimento_vas_estrategico
|
||||
input:
|
||||
linhas: $.vars.preparar.linhas
|
||||
mensagem_base: "Atendimento encerrado sem confirmação de manutenção do serviço."
|
||||
request_status: "Fechado"
|
||||
status: "CLOSED"
|
||||
|
||||
edges:
|
||||
- from: preparar
|
||||
to: decisao
|
||||
priority: 10
|
||||
when:
|
||||
eq: [$.vars.preparar.await_user_input, true]
|
||||
|
||||
- from: preparar
|
||||
to: resposta_bundle
|
||||
priority: 20
|
||||
|
||||
# Decisão pós-pausa. A pergunta "aceitou a explicação?" decide ANTES da
|
||||
# distinção bundle (igual ao diagrama). OUTRO nunca chega aqui: o runtime
|
||||
# intercepta resposta ambígua antes de retomar (fluxo_repergunta_outro
|
||||
# re-explica e repergunta), então resposta_usuario é sempre SIM ou NAO.
|
||||
|
||||
# Aceitou (SIM) — bundle OU estratégico: sem reforço, só registra/finaliza.
|
||||
- from: decisao
|
||||
to: resposta_sim
|
||||
priority: 10
|
||||
when:
|
||||
eq: [$.input.resposta_usuario, SIM]
|
||||
|
||||
# Não aceitou (NAO) + há estratégico: explica o procedimento de cancelamento
|
||||
# do(s) estratégico(s) (pedidos mistos seguem por aqui, como antes).
|
||||
- from: decisao
|
||||
to: explicar_cancelamento
|
||||
priority: 20
|
||||
when:
|
||||
all:
|
||||
- eq: [$.vars.preparar.has_estrategico_items, true]
|
||||
- eq: [$.input.resposta_usuario, NAO]
|
||||
|
||||
# Não aceitou (NAO) + bundle puro (sem estratégico): reforça a impossibilidade
|
||||
# de cancelar. SIM já foi tratado acima (priority menor), então aqui só cai NAO.
|
||||
- from: decisao
|
||||
to: resposta_bundle
|
||||
priority: 30
|
||||
when:
|
||||
eq: [$.vars.preparar.has_estrategico_items, false]
|
||||
|
||||
- from: decisao
|
||||
to: registrar_outro
|
||||
priority: 99
|
||||
|
||||
- from: resposta_sim
|
||||
to: registrar_sim
|
||||
|
||||
- from: explicar_cancelamento
|
||||
to: registrar_nao
|
||||
|
||||
- from: registrar_sim
|
||||
to: END
|
||||
|
||||
- from: registrar_nao
|
||||
to: END
|
||||
|
||||
- from: resposta_bundle
|
||||
to: registrar_bundle
|
||||
|
||||
- from: registrar_bundle
|
||||
to: END
|
||||
|
||||
- from: registrar_outro
|
||||
to: END
|
||||
Reference in New Issue
Block a user