62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
import pandas as pd
|
|
|
|
from app.domain.contas.parsers.bill_processor import PDFBillingProcessor
|
|
|
|
|
|
def test_danfe_payload_preserva_ordem_do_parser_nos_itens_do_plano() -> None:
|
|
processor = PDFBillingProcessor(include_danfe=True)
|
|
danfe_df = pd.DataFrame(
|
|
[
|
|
{"desc": "TIM CTRL Redes Sociais 8 0", "value": 35.96},
|
|
{"desc": "Serviços de Valor Adicionado Conteúdo", "value": 99.99},
|
|
{"desc": "Aya Books Premium", "value": 19.44},
|
|
]
|
|
)
|
|
raw = {
|
|
"DANFE-COM": danfe_df,
|
|
"Plano": pd.DataFrame(
|
|
[
|
|
{
|
|
"desc": "TIM CTRL Redes Sociais 8 0 (096/POS/SMP)",
|
|
"value": 35.96,
|
|
}
|
|
]
|
|
),
|
|
}
|
|
|
|
payload = processor._build_danfe_payload(danfe_df, raw)
|
|
|
|
item_names = [
|
|
item["desc"]
|
|
for item in payload["Planos"]["TIM CTRL Redes Sociais 8 0"]
|
|
]
|
|
assert item_names == [
|
|
"TIM CTRL Redes Sociais 8 0",
|
|
"Serviços de Valor Adicionado Conteúdo",
|
|
"Aya Books Premium",
|
|
]
|
|
|
|
|
|
def test_max_mensal_em_itens_eventuais_e_estrategico() -> None:
|
|
"""Max Mensal (streaming) em "Itens Eventuais" recebe estrategico=True e
|
|
classe=estrategico; o avulso comum mantém classe=avulso."""
|
|
processor = PDFBillingProcessor()
|
|
df = pd.DataFrame(
|
|
[
|
|
{"desc": "Serviço Avulso X", "value": 9.90},
|
|
{"desc": "Max Mensal", "value": 34.90},
|
|
]
|
|
)
|
|
|
|
regular, strategic = processor._split_strategic_records(df, "Itens Eventuais")
|
|
|
|
assert [r["desc"] for r in strategic] == ["Max Mensal"]
|
|
assert strategic[0]["estrategico"] is True
|
|
assert [r["desc"] for r in regular] == ["Serviço Avulso X"]
|
|
|
|
processor._annotate_class(strategic, "Itens Eventuais")
|
|
processor._annotate_class(regular, "Itens Eventuais")
|
|
assert strategic[0]["classe"] == "estrategico"
|
|
assert strategic[0]["verb"] == "falar sobre"
|
|
assert regular[0]["classe"] == "avulso"
|