Import ClientFlow production v4928.1.5.132.4

This commit is contained in:
plx
2026-07-29 13:11:01 +00:00
parent 6445044ac6
commit 261d342057
405 changed files with 48373 additions and 1401 deletions

View File

@@ -0,0 +1,100 @@
from pathlib import Path
from app.reply_recipient_utils import resolve_reply_recipient, apply_preferred_greeting
ROOT = Path(__file__).resolve().parents[1]
AMORASUB_MESSAGE = """Boa tarde,
Teve oportunidade de ver o email que lhe enviei sobre a morada?
Cumprimentos,
Alexandra Silvestre
Amorasub Engenharia Hidráulica, Lda
Rua Manuel Teixeira Gomes, 9A
Paivas
2845-378 Amora
"""
def read(path: str) -> str:
return (ROOT / path).read_text(encoding="utf-8")
def test_recipient_signature_person_has_priority_over_company_name():
task = {
"customer_name": "AMORASUB - ENGENHARIA HIDRÁULICA, UNIPESSOAL, LDA",
"linked_customer_name": "AMORASUB - ENGENHARIA HIDRÁULICA, UNIPESSOAL, LDA",
"request_text": AMORASUB_MESSAGE,
}
recipient = resolve_reply_recipient(task)
assert recipient["person_name"] == "Alexandra Silvestre"
assert recipient["company_name"] == "AMORASUB - ENGENHARIA HIDRÁULICA, UNIPESSOAL, LDA"
assert recipient["preferred_greeting"] == "Boa tarde Sra. Alexandra Silvestre,"
assert recipient["greeting_source"] == "signature"
def test_apply_preferred_greeting_replaces_company_greeting():
message = apply_preferred_greeting(
"Boa tarde Amorasub,\n\nConfirmamos a receção.",
"Boa tarde Sra. Alexandra Silvestre,",
)
assert message.startswith("Boa tarde Sra. Alexandra Silvestre,")
assert "Boa tarde Amorasub" not in message
def test_openrouter_context_contains_recipient_person_rules_static():
source = read("app/llm_reply_generator.py")
assert "recipient.person_name" in source
assert "não cumprimentar com nome de empresa" in source
assert "preferred_greeting" in source
def test_openai_agent_context_contains_recipient_person_rules_static():
source = read("app/email_reply_agent_service.py")
assert "destinatario_resposta" in source
assert "A pessoa que assina a última mensagem tem prioridade" in source
assert "preferred_greeting" in source or "cumprimento_preferido" in source
def test_prompt_instructs_address_followup_not_generic_analysis():
source = read("app/llm_reply_generator.py")
assert "follow-up sobre morada" in source
assert "não responder genericamente" in source
def test_recipient_can_infer_person_from_personal_email_without_using_company_name():
task = {
"customer_name": "Verifone Portugal, Lda",
"linked_customer_name": "Verifone Portugal, Lda",
"customer_email": "nuno.silva@verifone.com",
}
recipient = resolve_reply_recipient(task)
assert recipient["person_name"] == "Nuno Silva"
assert recipient["person_first_name"] == "Nuno"
assert recipient["greeting_source"] == "email"
assert recipient["person_confidence"] == "alto"
assert recipient["preferred_greeting"] == "Bom dia Sr. Nuno,"
def test_recipient_does_not_infer_person_from_generic_mailbox():
task = {
"customer_name": "Eficen",
"customer_email": "escritorio@eficen.pt",
}
recipient = resolve_reply_recipient(task)
assert recipient["person_name"] == ""
assert recipient["preferred_greeting"] == "Bom dia,"