from pathlib import Path import yaml ROOT = Path(__file__).resolve().parents[2] def test_contas_transactional_parameters_have_customer_facing_prompts(): data = yaml.safe_load((ROOT / "config" / "tools.yaml").read_text(encoding="utf-8")) tools = data["tools"] expected = { ("cancelar_vas_avulso", "subject"): "Qual serviço você deseja cancelar?", ("tratar_vas_estrategico", "subject"): "Qual serviço ou benefício você deseja tratar?", ("validar_contestacao", "subject"): "Qual cobrança ou item você não reconhece?", ("validar_contestacao", "valor"): "Qual é o valor da cobrança?", ("contestar_cobranca", "subject"): "Qual cobrança ou item você deseja contestar?", ("contestar_cobranca", "valor"): "Qual é o valor da cobrança que você deseja contestar?", } for (tool, field), prompt in expected.items(): assert tools[tool]["args_schema"][field]["user_prompt"] == prompt assert field not in prompt.lower().replace("subject", "") if field == "subject" else True def test_billing_prompt_forbids_unsupported_causal_hypotheses(): prompt = yaml.safe_load((ROOT / "config" / "prompts" / "billing.yaml").read_text(encoding="utf-8"))["system"] assert "fim de promoção" in prompt assert "perda de elegibilidade" in prompt assert "sem evidência explícita" in prompt assert "Não prometa nem estime valores de faturas futuras" in prompt def test_support_prompt_does_not_simulate_handoff_or_terminal_success(): prompt = yaml.safe_load((ROOT / "config" / "prompts" / "support.yaml").read_text(encoding="utf-8"))["system"] assert "Nunca anuncie transferência" in prompt assert "não simule handoff em texto livre" in prompt assert "OUT_OF_SCOPE" in prompt