bugfix: Invoice details
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -71,7 +71,7 @@ class ToolCall(BaseModel):
|
||||
|
||||
|
||||
TOOLS: dict[str, dict[str, Any]] = {
|
||||
"consultar_faturas": {"description": "Consulta faturas do cliente.", "input_schema": {"msisdn": "string"}},
|
||||
"consultar_faturas": {"description": "Consulta faturas do cliente, incluindo valor total quando disponível na fatura detalhada.", "input_schema": {"msisdn": "string"}},
|
||||
"consultar_plano": {"description": "Consulta exclusivamente o plano ou planos contratados presentes na fatura.", "input_schema": {"msisdn": "string"}},
|
||||
"invoice_explanation": {"description": "Executa o workflow de explicação de fatura com pause/resume pelo WorkflowRuntime do framework.", "input_schema": {"msisdn": "string"}},
|
||||
"consultar_vas": {"description": "Consulta VAS ativos.", "input_schema": {"msisdn": "string"}},
|
||||
@@ -307,17 +307,22 @@ def _preflight_subject(name: str, args: dict[str, Any]) -> dict[str, Any] | None
|
||||
return None
|
||||
|
||||
async def _enrich_invoice_context(name: str, args: dict[str, Any]) -> None:
|
||||
if name not in {"consultar_plano", "invoice_explanation", "cancelar_vas_avulso", "tratar_vas_estrategico", "contestar_cobranca"}:
|
||||
if name not in {"consultar_faturas", "consultar_plano", "invoice_explanation", "cancelar_vas_avulso", "tratar_vas_estrategico", "contestar_cobranca"}:
|
||||
return
|
||||
msisdn = str(args.get("msisdn") or "").strip()
|
||||
if not msisdn:
|
||||
return
|
||||
# If all required evidence is already present, preserve it exactly.
|
||||
if isinstance(args.get("complete_invoices_payload"), dict) and isinstance(args.get("billing_analysis"), dict):
|
||||
# If all required evidence is already present, preserve it exactly. For
|
||||
# consultar_faturas/invoice_explanation the semantic amount also matters, so
|
||||
# a cached pair without detail must still be enriched.
|
||||
has_base = isinstance(args.get("complete_invoices_payload"), dict) and isinstance(args.get("billing_analysis"), dict)
|
||||
needs_detail = name in {"consultar_faturas", "invoice_explanation", "cancelar_vas_avulso", "contestar_cobranca"}
|
||||
has_detail = isinstance(args.get("invoice_detail"), dict) or args.get("invoice_amount") not in (None, "")
|
||||
if has_base and (not needs_detail or has_detail):
|
||||
return
|
||||
session_id = str(args.get("session_id") or args.get("original_session_id") or args.get("conversation_key") or "").strip()
|
||||
invoice_id = str(args.get("invoice_id") or args.get("current_invoice_number") or "").strip()
|
||||
include_detail = name in {"cancelar_vas_avulso", "contestar_cobranca"} and not isinstance(args.get("invoice_detail"), dict)
|
||||
include_detail = name in {"consultar_faturas", "invoice_explanation", "cancelar_vas_avulso", "contestar_cobranca"} and not isinstance(args.get("invoice_detail"), dict)
|
||||
try:
|
||||
ctx = await get_invoice_context_service().get(
|
||||
session_id=session_id,
|
||||
|
||||
Reference in New Issue
Block a user