"""验证资金精度、路由优先级与真实历史统计边界,而非只镜像实现语句。""" from decimal import Decimal import pytest from app.shared.common import BusinessError, cents from app.domain.rules import check_rule, compliance, decide, risk_score @pytest.mark.parametrize('value', ['NaN', 'Infinity', '-0.01', '1.001', '10000000000.00', None]) def test_invalid_money(value): with pytest.raises(BusinessError): cents(value) def test_decimal_cent_boundary(): assert cents('0.29') + cents('0.01') == 30 assert cents(Decimal('9999999999.99')) == 999999999999 def test_critical_and_skip_cannot_pass(): item = check_rule({'code': 'invoice_no_duplicate', 'severity': 'critical'}, {'file_hash': 'same'}, {'existing_hashes': ['same']}) assert compliance([item]) == 'fail' assert compliance([{'passed': False, 'severity': 'warning', 'execution_status': 'skipped'}]) == 'partial' assert compliance([{'passed': True, 'severity': 'warning', 'execution_status': 'not_applicable'}]) == 'pass' def test_routing_missing_dominates_high(): assert decide({'risk_level': 3, 'compliance_status': 'fail'})['decision'] == 'to_manual' valid = {'extracted_invoices': [{'amount': '1', 'invoice_date': '2026-01-01'}]} assert decide({**valid, 'risk_level': 3, 'compliance_status': 'pass'})['decision'] == 'to_finance' assert decide({**valid, 'risk_level': 1, 'compliance_status': 'partial'})['decision'] == 'to_supervisor' assert decide({**valid, 'risk_level': 1, 'compliance_status': 'pass'})['decision'] == 'auto_approve' assert decide({**valid, 'risk_level': 1, 'compliance_status': 'pass', 'core_failure': True})['decision'] == 'to_manual' def test_history_ratio_accepts_snapshot_decimal_string(): risk = risk_score([{'amount': '100', 'tax_amount': '6', 'confidence': .9}], {'dept_average_cents': '2650.5', 'recent_submissions': 0}, {}) assert risk['features']['dept_avg_amount_ratio'] > 3 assert risk['score'] == '0.2' def test_tax_rounding_and_configured_severity(): value = check_rule({'code': 'tax_calculation_valid', 'severity': 'error', 'params': {'tolerance': '0.00'}}, {'amount': '10.25', 'tax_amount': '0.62', 'tax_rate': '0.06'}, {}) assert value['passed'] value = check_rule({'code': 'tax_number_valid', 'severity': 'critical', 'params': {'lengths': [18]}}, {'tax_number': 'x'}, {}) assert not value['passed'] and value['severity'] == 'critical'