bugfix: Invoice details

This commit is contained in:
2026-08-24 16:39:08 -03:00
parent 4b3e4d44e8
commit d7f270f52a
102 changed files with 183 additions and 10 deletions

View File

@@ -25,7 +25,16 @@ class Client:
def bill_pdf(self, msisdn, invoice_id, customer_id, **kwargs):
self.pdf_calls += 1
return {"119": {"SVA Detalhe Total": [{"desc": "Tamboro"}]}}
return {
"status": "SUCCESS",
"parsed_content": {
"total_geral": 191.97,
"Fatura Resumo": [
{"desc": "Período", "period": "01/04/2026 a 30/04/2026"},
{"desc": "Emissão", "emissao": "01/04/2026"},
],
},
}
@pytest.mark.asyncio
@@ -196,3 +205,73 @@ async def test_invoice_context_cache_hit_expoe_cache_age_sem_republicar_eventos(
assert cached.metadata["cache_hit"] is True
assert cached.metadata["cache_age_ms"] >= 0
assert cached.business_events == []
def test_extract_invoice_summary_context_restaura_semantica_do_original():
from app.domain.contas.invoice_context import extract_invoice_summary_context
result = extract_invoice_summary_context({
"parsed_content": {
"total_geral": 191.97,
"Fatura Resumo": [
{"desc": "Período", "period": "01/04/2026 a 30/04/2026"},
{"desc": "Emissão", "emissao": "01/04/2026"},
],
}
})
assert result == {
"invoice_amount": "191.97",
"invoice_amount_open": "191.97",
"invoice_period": "01/04/2026 a 30/04/2026",
"invoice_emissao": "01/04/2026",
}
@pytest.mark.asyncio
async def test_invoice_context_detail_expoe_invoice_amount_semantico():
client = Client()
svc = InvoiceContextService(client, InMemoryCache(), ttl_seconds=60) # type: ignore[arg-type]
ctx = await svc.get(session_id="s1", msisdn="119", include_detail=True)
assert ctx.invoice_amount == "191.97"
assert ctx.invoice_amount_open == "191.97"
assert ctx.invoice_period == "01/04/2026 a 30/04/2026"
assert ctx.invoice_emissao == "01/04/2026"
assert ctx.as_dict()["invoice_amount"] == "191.97"
def test_consultar_faturas_reusa_prefetch_e_publica_valor_sem_reconsultar_backend():
from app.domain.contas.service import ContasDomainService
class C(Client):
def consultar_faturas(self, msisdn):
raise AssertionError("nao deveria consultar novamente")
svc = ContasDomainService(client=C()) # type: ignore[arg-type]
result = svc.consultar_faturas(
msisdn="119",
complete_invoices_payload={"paymentItems": [{"invoiceId": "I1"}]},
invoice_id="I1",
customer_id="C1",
invoice_amount="191.97",
invoice_amount_open="191.97",
)
assert result["invoice_amount"] == "191.97"
assert result["invoice_amount_open"] == "191.97"
assert result["invoice_id"] == "I1"
assert result["customer_id"] == "C1"
@pytest.mark.asyncio
async def test_mcp_consultar_faturas_enriquece_com_detail_e_valor(monkeypatch):
from contas_mcp.servers.contas_mcp_server import main
client = Client()
context_service = InvoiceContextService(client, InMemoryCache(), ttl_seconds=60) # type: ignore[arg-type]
monkeypatch.setattr(main, "get_invoice_context_service", lambda: context_service)
args = {"msisdn": "119", "session_id": "s1", "message_id": "m1"}
await main._enrich_invoice_context("consultar_faturas", args)
assert client.pdf_calls == 1
assert args["invoice_amount"] == "191.97"
assert args["invoice_amount_open"] == "191.97"
assert args["complete_invoices_payload"]["paymentItems"][0]["invoiceId"] == "I1"