72 lines
4.0 KiB
Python
72 lines
4.0 KiB
Python
from central.app.fiscal_decision import ERP_FIELD_MAP, decide_product
|
|
|
|
REFS = {"cfop_valid": {"5102"}, "csosn": {"102", "500"}, "cst_icms": {"00", "40", "60"}, "cst_pis": {"01"}, "cst_cofins": {"01"},
|
|
"origem": set("012345678"), "fcp_uf": {"BA": {"aliq_1": "Fixo:2.00"}}, "cbs_rate_2026": 0.009, "cclasstrib_count": 164}
|
|
COMPANY = {"uf": "BA", "crt": "1"}
|
|
|
|
|
|
def product(**kw):
|
|
base = {"CODIGO": "1", "PRODUTO": "X", "CLASSIFICACAO_FISCAL": "22030000", "CFOP": "5102", "CST": "040", "CSOSN": "102",
|
|
"CEST": None, "IPI": None, "EX_TIPI": None, "ORIGEM": None, "COD_SAIDA_PIS": None, "COD_SAIDA_COFINS": None, "ALIQ_PIS": None}
|
|
base.update(kw)
|
|
return base
|
|
|
|
|
|
def decision(**kw):
|
|
base = {"status": "EXACT_NCM", "ipi_status": "IPI_RESOLVED", "cest_status": "CEST_CANDIDATES", "ba_st_mva_status": "MVA_CANDIDATES",
|
|
"dataset_versions": {}, "classification": {"ncm": "22030000", "ipi": {"rate_kind": "NUMERIC", "rate_numeric": 3.9}, "cest_candidates": [1, 2]}}
|
|
base.update(kw)
|
|
return base
|
|
|
|
|
|
def test_numeric_ipi_change_is_the_only_auto_apply():
|
|
out = decide_product(product(IPI=5102.0), decision(), COMPANY, REFS)
|
|
assert out["IPI"]["action_class"] == "AUTO_APPLY_SAFE" and out["IPI"]["write_eligible"] and out["IPI"]["proposed_value"] == 3.9
|
|
assert [d for d, r in out.items() if r["write_eligible"]] == ["IPI"]
|
|
|
|
|
|
def test_same_ipi_is_already_correct_not_write():
|
|
out = decide_product(product(IPI=3.9), decision(), COMPANY, REFS)
|
|
assert out["IPI"]["action_class"] == "ALREADY_CORRECT" and not out["IPI"]["write_eligible"]
|
|
|
|
|
|
def test_non_numeric_and_blank_ipi_never_write():
|
|
d = decision(classification={"ipi": {"rate_kind": "NON_NUMERIC", "rate_classification": "NT"}})
|
|
assert not decide_product(product(), d, COMPANY, REFS)["IPI"]["write_eligible"]
|
|
d = decision(classification={"ipi": {"rate_kind": "BLANK"}})
|
|
r = decide_product(product(), d, COMPANY, REFS)["IPI"]
|
|
assert not r["write_eligible"] and r["status"] == "RULE_UNRESOLVED"
|
|
|
|
|
|
def test_operation_dependent_fields_never_resolved_or_written():
|
|
out = decide_product(product(), decision(), COMPANY, REFS)
|
|
for dom in ("CFOP", "CSOSN", "CST_ICMS", "PIS_CST", "COFINS_CST", "FCP", "RTC_CCLASSTRIB", "RTC_CBS_RATE"):
|
|
assert out[dom]["status"] == "OPERATION_CONTEXT_REQUIRED" and not out[dom]["write_eligible"]
|
|
assert out["CFOP"]["domain_valid"] is True and out["FCP"]["fcp_rate_available"] is True
|
|
assert out["RTC_CBS_RATE"]["proposed_value"] is None and out["RTC_CBS_RATE"]["reference_rate_2026"] == 0.009
|
|
|
|
|
|
def test_ncm_legacy_is_review_and_never_write():
|
|
out = decide_product(product(), decision(status="LEGACY_NCM"), COMPANY, REFS)
|
|
assert out["NCM"]["action_class"] == "REVIEW_REQUIRED" and not any(r["write_eligible"] for r in out.values())
|
|
|
|
|
|
def test_origin_only_candidate_and_unconfirmed_mapping():
|
|
out = decide_product(product(), decision(), COMPANY, REFS)
|
|
assert out["ORIGEM"]["status"] == "RULE_CANDIDATE" and not out["ORIGEM"]["write_eligible"]
|
|
assert {f["ERP_FIELD"] for f in ERP_FIELD_MAP if f["MAPPING"] == "MAPPING_UNCONFIRMED"} >= {"ORIGEM", "CFOP_ENTRADA", "CST_ENTRADA"}
|
|
|
|
|
|
def test_mva_never_written_even_when_resolved():
|
|
d = decision(ba_st_mva_status="MVA_RESOLVED", classification={"ipi": {"rate_kind": "NUMERIC", "rate_numeric": 1}, "ba_st_mva": {"mva_original": "140%"}})
|
|
r = decide_product(product(IPI=1), d, COMPANY, REFS)["MVA"]
|
|
assert r["status"] == "RULE_RESOLVED" and not r["write_eligible"]
|
|
|
|
|
|
def test_single_ex_without_description_evidence_is_candidate_not_write():
|
|
cls = {"ipi": {"rate_kind": "NUMERIC", "rate_numeric": 3.9}, "ipi_candidates": [{"ex": "1", "description": "Chope"}]}
|
|
out = decide_product(product(PRODUTO="CERVEJA LATA", IPI=3.9), decision(classification=cls), COMPANY, REFS)
|
|
assert out["EX_TIPI"]["status"] == "RULE_CANDIDATE" and not out["EX_TIPI"]["write_eligible"]
|
|
out = decide_product(product(PRODUTO="CHOPE ESCURO", IPI=3.9), decision(classification=cls), COMPANY, REFS)
|
|
assert out["EX_TIPI"]["status"] == "RULE_RESOLVED" and out["EX_TIPI"]["write_eligible"]
|