new feature: External guardrails/judges

This commit is contained in:
2026-08-24 11:14:10 -03:00
parent 05373deff2
commit fd37138c4f
384 changed files with 40593 additions and 3621 deletions

View File

@@ -13,7 +13,8 @@ from typing import Any
from agent_framework.workflows import WorkflowActionRegistry
from agent_framework.idempotency import InMemoryIdempotencyStore
from agent_framework.guardrails.calibrated import validate_contestation_items
from app.domain.contas.contestation_validation import validate_contestation_items
from app.domain.contas.client import get_tim_integration_value
from .client import TimApiError
from .contestation_rules import (
@@ -798,9 +799,9 @@ def build_contas_workflow_actions(service: ContasDomainService, *, idempotency_s
"refundOption": str(params.get("refund_option") or ""),
"manualContaCertaIndicator": bool(params.get("manual_conta_certa_indicator", False)),
"doubleRefund": bool(params.get("double_refund", False)),
"userId": str(params.get("user_id") or "AIAGENTCR"),
"userId": str(params.get("user_id") or os.getenv("TIM_DEFAULT_CLIENT_ID")),
"messageId": str(params.get("message_id") or _first(params, state, "message_id") or ""),
"clientId": str(params.get("client_id") or "AIAGENTCR"),
"clientId": str(params.get("client_id") or os.getenv("TIM_DEFAULT_CLIENT_ID")),
"tipo_atendimento": "pro_rata",
"skip_invoice_item_validation": True,
"items": items,
@@ -1227,9 +1228,9 @@ def build_contas_workflow_actions(service: ContasDomainService, *, idempotency_s
"doubleRefund": bool(params.get("double_refund")),
"description": params.get("descricao") or "",
"items": items,
"userId": params.get("user_id") or "AIAGENTCR",
"userId": params.get("user_id") or os.getenv("TIM_DEFAULT_CLIENT_ID"),
"messageId": params.get("message_id") or "",
"clientId": params.get("client_id") or "AIAGENTCR",
"clientId": params.get("client_id") or os.getenv("TIM_DEFAULT_CLIENT_ID"),
}
# CVAL é capability do framework: antes do side effect, valida que os
# itens existem na fatura, pertencem a VAS, não são estratégicos e que o
@@ -1357,8 +1358,8 @@ def build_contas_workflow_actions(service: ContasDomainService, *, idempotency_s
try:
if hasattr(service, "client") and hasattr(service.client, "sms"):
result = service.client.sms(
msisdn, message, sender_name="TIM Brasil", long_url="https://meutim.com.br",
notify_url=os.getenv("TIM_SMS_NOTIFY_URL", "http://10.114.200.57:9003/teste"),
msisdn, message, sender_name=get_tim_integration_value("TIM_SMS_SENDER_NAME"), long_url=get_tim_integration_value("TIM_SMS_LONG_URL"),
notify_url=get_tim_integration_value("TIM_SMS_NOTIFY_URL"),
)
else:
result = service.enviar_sms(msisdn=msisdn, message=message)
@@ -1447,8 +1448,8 @@ def build_contas_workflow_actions(service: ContasDomainService, *, idempotency_s
status = str(params.get("status") or "Fechado")
status_payload = {
"msisdn": msisdn, "socialSecNo": re.sub(r"\D", "", str(params.get("social_sec_no") or "")),
"protocolNumber": protocol_id, "status": status, "channel": "AIAGENTCR",
"clientId": params.get("client_id") or "AIAGENTCR",
"protocolNumber": protocol_id, "status": status, "channel": os.getenv("TIM_DEFAULT_CHANNEL"),
"clientId": params.get("client_id") or os.getenv("TIM_DEFAULT_CLIENT_ID"),
"reason1": "Reclamação", "reason2": "Conta", "reason3": "Valor", "notes": "",
}
try: