git-subtree-dir: fiscal git-subtree-mainline:d95165fc8fgit-subtree-split:102ba84500
59 lines
3.9 KiB
Python
59 lines
3.9 KiB
Python
from central.app.icms_context import csosn_v2, product_role, st_conflict_class, st_status, withheld_status
|
|
|
|
DOM = {"102", "500", "101", "400"}
|
|
|
|
|
|
def test_cest_candidate_never_confirms_st():
|
|
assert st_status("EXACT_NCM", "MVA_CANDIDATES", "CEST_CANDIDATES", "", None, 4)[0] == "ST_CANDIDATE"
|
|
assert st_status("EXACT_NCM", "MVA_RESOLVED", "CEST_CANDIDATES", "", "03.021.03", 4)[0] == "ST_CANDIDATE"
|
|
|
|
|
|
def test_st_confirmed_needs_erp_cest_corroboration():
|
|
assert st_status("EXACT_NCM", "MVA_RESOLVED", "CEST_CANDIDATES", "0302103", "03.021.03", 4)[0] == "ST_CONFIRMED"
|
|
assert st_status("EXACT_NCM", "MVA_RESOLVED", "CEST_CONFIRMED", "", "03.021.03", 4)[0] == "ST_CONFIRMED"
|
|
|
|
|
|
def test_st_not_applicable_needs_both_lists_silent_and_valid_ncm():
|
|
assert st_status("EXACT_NCM", "NO_MVA_MAPPING_FOUND", "NO_CEST_MAPPING_FOUND", None, None, None)[0] == "ST_NOT_APPLICABLE"
|
|
assert st_status("EXACT_NCM", "NO_MVA_MAPPING_FOUND", "CEST_CANDIDATES", None, None, None)[0] == "ST_UNKNOWN"
|
|
assert st_status("LEGACY_NCM", "NO_MVA_MAPPING_FOUND", "NO_CEST_MAPPING_FOUND", None, None, None)[0] == "ST_UNKNOWN"
|
|
|
|
|
|
def test_withholding_needs_positive_purchase_evidence():
|
|
assert withheld_status([])[0] == "ST_WITHHOLDING_UNKNOWN"
|
|
assert withheld_status([{"icms_retido": "N", "valor_retido": 0, "sub_valor": 0}])[0] == "ST_ALREADY_WITHHELD_NOT_CONFIRMED"
|
|
assert withheld_status([{"icms_retido": "S", "valor_retido": 0, "sub_valor": 0}])[0] == "ST_ALREADY_WITHHELD_CONFIRMED"
|
|
assert withheld_status([{"icms_retido": "N", "valor_retido": 5, "sub_valor": 0}])[0] == "ST_ALREADY_WITHHELD_CONFIRMED"
|
|
|
|
|
|
def test_role_uses_objective_evidence_only():
|
|
assert product_role("MATERIA-PRIMA", False, False, False, False, False)[0] == "INPUT"
|
|
assert product_role("VENDA", True, False, False, False, False)[0] == "OWN_PRODUCTION"
|
|
assert product_role("VENDA", False, False, False, False, True)[0] == "RESALE"
|
|
assert product_role("VENDA", False, False, False, False, False)[0] == "UNKNOWN"
|
|
assert product_role("VENDA", True, False, False, False, True)[0] == "UNKNOWN"
|
|
|
|
|
|
def test_csosn_never_assumes_102_and_never_writes():
|
|
for st in ("ST_CANDIDATE", "ST_UNKNOWN"):
|
|
r = csosn_v2("102", "102", "EXACT_NCM", st, "ST_WITHHOLDING_UNKNOWN", "RESALE", DOM)
|
|
assert r["status"] == "CSOSN_CONTEXT_REQUIRED" and r["proposed_csosn"] is None
|
|
r = csosn_v2("102", "102", "EXACT_NCM", "ST_NOT_APPLICABLE", "ST_WITHHOLDING_UNKNOWN", "RESALE", DOM)
|
|
assert r["status"] == "CSOSN_CANDIDATE" and not r["write_eligible"]
|
|
assert csosn_v2("102", "102", "EXACT_NCM", "ST_NOT_APPLICABLE", "ST_WITHHOLDING_UNKNOWN", "UNKNOWN", DOM)["status"] == "CSOSN_CONTEXT_REQUIRED"
|
|
assert csosn_v2("102", "102", "LEGACY_NCM", "ST_NOT_APPLICABLE", "ST_WITHHOLDING_UNKNOWN", "RESALE", DOM)["status"] == "CSOSN_UNRESOLVED"
|
|
|
|
|
|
def test_csosn_resolved_only_with_st_withholding_and_role_proven():
|
|
r = csosn_v2("102", "102", "EXACT_NCM", "ST_CONFIRMED", "ST_ALREADY_WITHHELD_CONFIRMED", "RESALE", DOM)
|
|
assert r["status"] == "CSOSN_RESOLVED" and r["proposed_csosn"] == "500" and r["write_eligible"] is False
|
|
assert csosn_v2("102", "102", "EXACT_NCM", "ST_CONFIRMED", "ST_WITHHOLDING_UNKNOWN", "RESALE", DOM)["status"] == "CSOSN_CONTEXT_REQUIRED"
|
|
assert csosn_v2("500", "102", "EXACT_NCM", "ST_CONFIRMED", "ST_ALREADY_WITHHELD_NOT_CONFIRMED", "RESALE", DOM)["status"] == "CSOSN_CONFLICT"
|
|
|
|
|
|
def test_conflict_classes():
|
|
assert st_conflict_class("CEST_CANDIDATES", "MVA_RESOLVED", 4, "", "03.021.03", "5102", True, False)[0] == "ERP_HISTORY_CONFLICT"
|
|
assert st_conflict_class(None, "NO_MVA_MAPPING_FOUND", None, "", None, "5405", False, True)[0] == "BA_ST_RULE_CONFLICT"
|
|
assert st_conflict_class("CEST_DESCRIPTION_MISMATCH", "MVA_RESOLVED", 6, "", None, "5102", False, False)[0] == "DESCRIPTION_MISMATCH"
|
|
assert st_conflict_class(None, "MVA_RESOLVED", 6, "", None, "5102", False, False)[0] == "NO_EVIDENCE"
|