| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """样本各期应缴合计 vs 合同金额校验"""
- from decimal import Decimal
- import unittest
- from app.services.sample_payment_schedule_validate import (
- schedule_dues_match_contract,
- schedule_required_fields_ok,
- )
- class TestScheduleValidate(unittest.TestCase):
- def test_match(self):
- ok, msg = schedule_dues_match_contract(
- contract_amount=Decimal("1000"),
- schedules=[{"dueAmount": 600}, {"dueAmount": 400}],
- )
- self.assertTrue(ok)
- self.assertIsNone(msg)
- def test_mismatch(self):
- ok, msg = schedule_dues_match_contract(
- contract_amount=Decimal("1000"),
- schedules=[{"dueAmount": 600}, {"dueAmount": 300}],
- sample_code="S001",
- )
- self.assertFalse(ok)
- self.assertIn("900", msg or "")
- self.assertIn("1000", msg or "")
- self.assertIn("S001", msg or "")
- def test_skip_void(self):
- ok, msg = schedule_dues_match_contract(
- contract_amount=Decimal("500"),
- schedules=[
- {"dueAmount": 500, "scheduleStatus": "open"},
- {"dueAmount": 200, "scheduleStatus": "void"},
- ],
- )
- self.assertTrue(ok)
- self.assertIsNone(msg)
- def test_empty_schedules_skip(self):
- ok, msg = schedule_dues_match_contract(
- contract_amount=Decimal("1000"),
- schedules=[],
- )
- self.assertTrue(ok)
- self.assertIsNone(msg)
- def test_require_amount_and_due_date(self):
- ok, msg = schedule_dues_match_contract(
- contract_amount=Decimal("1000"),
- schedules=[
- {"dueAmount": None, "dueDate": "20261001"},
- {"dueAmount": 500, "dueDate": ""},
- ],
- sample_code="S1",
- require_schedule_fields=True,
- )
- self.assertFalse(ok)
- self.assertIn("应缴金额", msg or "")
- def test_require_fields_ok(self):
- ok, msg = schedule_required_fields_ok(
- schedules=[
- {"dueAmount": 500, "dueDate": "20261001"},
- {"dueAmount": 500, "due_date": "20261101"},
- ]
- )
- self.assertTrue(ok)
- self.assertIsNone(msg)
|