"""fq → fgd:软删后续期,剩余欠缴并入第一期未清期""" from decimal import Decimal import unittest from app.services.sample_payment_fgd_convert import plan_fq_to_fgd_merge class TestFgdConvert(unittest.TestCase): def test_merge_into_period_3(self): schedules = [ {"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("5000"), "scheduleStatus": "cleared"}, {"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("5000"), "scheduleStatus": "cleared"}, {"id": "s3", "scheduleNo": 3, "dueAmount": Decimal("5000"), "scheduleStatus": "open"}, {"id": "s4", "scheduleNo": 4, "dueAmount": Decimal("5000"), "scheduleStatus": "open"}, {"id": "s5", "scheduleNo": 5, "dueAmount": Decimal("5000"), "scheduleStatus": "open"}, {"id": "s6", "scheduleNo": 6, "dueAmount": Decimal("4800"), "scheduleStatus": "open"}, ] transfers = [ {"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("5000")}, {"scheduleId": "s2", "payStatus": "yjf", "transferAmount": Decimal("5000")}, ] plan = plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers) self.assertEqual(plan["targetScheduleId"], "s3") self.assertEqual(plan["newDueAmount"], Decimal("19800")) self.assertEqual(set(plan["softDeleteScheduleIds"]), {"s4", "s5", "s6"}) self.assertEqual(plan["newInstallmentCount"], 3) def test_allow_when_jfqrz(self): """付款确认中不再阻断分改趸并期规划。""" schedules = [ {"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("1000"), "scheduleStatus": "open"}, {"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("1000"), "scheduleStatus": "open"}, ] transfers = [ {"scheduleId": "s1", "payStatus": "jfqrz", "transferAmount": Decimal("500")}, ] plan = plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers) self.assertEqual(plan["targetScheduleId"], "s1") self.assertEqual(set(plan["softDeleteScheduleIds"]), {"s2"}) def test_reject_when_later_period_has_yjf(self): schedules = [ {"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("1000"), "scheduleStatus": "open"}, {"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("1000"), "scheduleStatus": "open"}, ] transfers = [ {"scheduleId": "s2", "payStatus": "yjf", "transferAmount": Decimal("1000")}, ] with self.assertRaises(ValueError) as ctx: plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers) self.assertIn("后续期", str(ctx.exception)) if __name__ == "__main__": unittest.main()