| 123456789101112131415161718192021222324252627282930313233343536373839 |
- """验证资金精度、路由优先级与真实历史统计边界,而非只镜像实现语句。"""
- 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'
|