git-subtree-dir: fiscal git-subtree-mainline:d95165fc8fgit-subtree-split:102ba84500
181 lines
8.4 KiB
Python
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)
|