Files
gti d21a9d1140 Add 'fiscal/' from commit '102ba84500dbd9655a0471288c3e278652593ca9'
git-subtree-dir: fiscal
git-subtree-mainline: d95165fc8f
git-subtree-split: 102ba84500
2026-09-29 14:43:23 -03:00

181 lines
8.4 KiB
Python

import pytest
from central.app.dry_run_planner import (
build_field_proposals,
execute,
mva_evidence,
split_by_eligibility,
)
def _decision(**overrides):
base = {
"status": "EXACT_NCM",
"cest_status": "NO_CEST_MAPPING_FOUND",
"ipi_status": "NO_TIPI_MAPPING_FOUND",
"ba_st_mva_status": "NO_MVA_MAPPING_FOUND",
"classification": {
"ncm": "07069000",
"cest": [],
"ipi": None,
"ba_st_mva": None,
"ba_st_mva_candidates": [],
},
"dataset_versions": {"ncm": "n1", "cest": "c1", "tipi_ipi": "t1", "ba_st_mva": "m1"},
"engine_version": "0.1.0",
"decision_version": "mvp",
"request_fingerprint": "fp",
}
base.update(overrides)
return base
def test_ipi_resolved_numeric_current_unknown():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": "3.25", "rate_numeric": 3.25, "rate_kind": "NUMERIC", "ex": None}})
proposals = build_field_proposals("000026", decision, {})
ipi = next(p for p in proposals if p["field"] == "IPI")
assert ipi["status"] == "CURRENT_UNKNOWN"
assert ipi["write_eligible"] is False
assert ipi["proposed_value"] == 3.25
def test_ipi_resolved_numeric_same_value():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": "3.25", "rate_numeric": 3.25, "rate_kind": "NUMERIC", "ex": None}})
proposals = build_field_proposals("000026", decision, {"ipi": 3.25, "ex_tipi": None})
ipi = next(p for p in proposals if p["field"] == "IPI")
assert ipi["status"] == "SAME_VALUE"
assert ipi["write_eligible"] is False
def test_ipi_resolved_numeric_change_required():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": "3.25", "rate_numeric": 3.25, "rate_kind": "NUMERIC", "ex": None}})
proposals = build_field_proposals("000026", decision, {"ipi": None, "ex_tipi": None})
ipi = next(p for p in proposals if p["field"] == "IPI")
assert ipi["status"] == "CHANGE_REQUIRED"
assert ipi["write_eligible"] is True
assert ipi["proposed_value"] == 3.25
def test_ipi_non_numeric_marker_never_proposes_a_write():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": "NT", "rate_numeric": None, "rate_kind": "NON_NUMERIC", "rate_classification": "NT_OR_NON_TAXED", "ex": None}})
proposals = build_field_proposals("000004", decision, {"ipi": None, "ex_tipi": None})
ipi = next(p for p in proposals if p["field"] == "IPI")
assert ipi["status"] == "NON_NUMERIC_IPI_STATUS"
assert ipi["proposed_value"] is None
assert ipi["write_eligible"] is False
assert ipi["reason_code"] == "TIPI_RATE_NT_OR_NON_TAXED"
def test_ipi_resolved_without_concrete_rate_still_produces_a_row():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": None, "rate_numeric": None, "rate_kind": "BLANK", "rate_classification": "SOURCE_BLANK", "ex": None}})
proposals = build_field_proposals("000018", decision, {"ipi": 5, "ex_tipi": None})
ipi = next(p for p in proposals if p["field"] == "IPI")
assert ipi["status"] == "SOURCE_BLANK"
assert ipi["proposed_value"] is None
assert ipi["write_eligible"] is False
assert ipi["reason_code"] == "TIPI_RATE_SOURCE_BLANK"
def test_no_ex_tipi_row_when_no_ex_candidates():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": "3.25", "rate_numeric": 3.25, "rate_kind": "NUMERIC", "ex": None}, "ipi_candidates": []})
proposals = build_field_proposals("000026", decision, {"ipi": None, "ex_tipi": None})
assert all(p["field"] != "EX_TIPI" for p in proposals)
def test_ex_tipi_concrete_single_candidate_change_required():
decision = _decision(
ipi_status="IPI_CANDIDATES",
classification={**_decision()["classification"], "ipi": None, "ipi_candidates": [{"ncm": "07069000", "ex": "01", "description": "specific", "rate": "5"}]},
)
proposals = build_field_proposals("000004", decision, {"ex_tipi": None})
ex = next(p for p in proposals if p["field"] == "EX_TIPI")
assert ex["status"] == "CHANGE_REQUIRED"
assert ex["proposed_value"] == "01"
assert ex["write_eligible"] is True
def test_ex_tipi_multiple_candidates_is_candidate_not_eligible():
decision = _decision(
ipi_status="IPI_CANDIDATES",
classification={**_decision()["classification"], "ipi": None, "ipi_candidates": [
{"ncm": "07069000", "ex": "01", "description": "a", "rate": "5"},
{"ncm": "07069000", "ex": "02", "description": "b", "rate": "7"},
]},
)
proposals = build_field_proposals("000004", decision, {"ex_tipi": None})
ex = next(p for p in proposals if p["field"] == "EX_TIPI")
assert ex["status"] == "CANDIDATE"
assert ex["proposed_value"] is None
assert ex["write_eligible"] is False
def test_cest_confirmed_change_required():
decision = _decision(cest_status="CEST_CONFIRMED", classification={**_decision()["classification"], "cest": ["17.087.02"]})
proposals = build_field_proposals("000018", decision, {"cest": ""})
cest = next(p for p in proposals if p["field"] == "CEST")
assert cest["status"] == "CHANGE_REQUIRED"
assert cest["write_eligible"] is True
assert cest["proposed_value"] == "17.087.02"
def test_cest_candidates_not_eligible():
decision = _decision(cest_status="CEST_CANDIDATES")
proposals = build_field_proposals("000024", decision, {"cest": ""})
cest = next(p for p in proposals if p["field"] == "CEST")
assert cest["status"] == "CANDIDATE"
assert cest["proposed_value"] is None
assert cest["write_eligible"] is False
def test_cest_description_mismatch_not_eligible():
decision = _decision(cest_status="CEST_DESCRIPTION_MISMATCH")
proposals = build_field_proposals("000018", decision, {"cest": ""})
cest = next(p for p in proposals if p["field"] == "CEST")
assert cest["status"] == "UNRESOLVED"
assert cest["reason_code"] == "CEST_DESCRIPTION_SCORE_BELOW_THRESHOLD"
assert cest["write_eligible"] is False
def test_legacy_ncm_review_no_invented_successor():
decision = _decision(status="LEGACY_NCM", classification={**_decision()["classification"], "ncm": "02071400"})
proposals = build_field_proposals("000016", decision, {"ipi": "3.25", "cest": ""})
assert len(proposals) == 1
row = proposals[0]
assert row["field"] == "CLASSIFICACAO_FISCAL"
assert row["status"] == "LEGACY_NCM_REVIEW"
assert row["proposed_value"] is None
assert row["write_eligible"] is False
def test_mva_never_produces_a_write_proposal():
decision = _decision(ba_st_mva_status="MVA_CANDIDATES", classification={**_decision()["classification"], "ba_st_mva_candidates": [{"item": "1"}]})
proposals = build_field_proposals("000024", decision, {"cest": ""})
assert all(p["field"] != "BA_ST_MVA" for p in proposals)
evidence = mva_evidence("000024", decision)
assert evidence["status"] == "MVA_CANDIDATES"
assert evidence["candidates"]
def test_split_by_eligibility():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": "3.25", "rate_numeric": 3.25, "rate_kind": "NUMERIC", "ex": None}})
proposals = build_field_proposals("000026", decision, {})
split = split_by_eligibility(proposals)
assert split["blocked"] == proposals
assert split["eligible"] == []
def test_execute_refuses_non_eligible_proposal():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": "3.25", "rate_numeric": 3.25, "rate_kind": "NUMERIC", "ex": None}})
proposals = build_field_proposals("000026", decision, {})
with pytest.raises(PermissionError):
execute(proposals)
def test_execute_never_writes_even_when_eligible():
decision = _decision(ipi_status="IPI_RESOLVED", classification={**_decision()["classification"], "ipi": {"rate": "3.25", "rate_numeric": 3.25, "rate_kind": "NUMERIC", "ex": None}})
proposals = build_field_proposals("000026", decision, {"ipi": "0"})
eligible_only = split_by_eligibility(proposals)["eligible"]
assert eligible_only
with pytest.raises(NotImplementedError):
execute(eligible_only)