test_sample_payment_fgd_convert.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """fq → fgd:软删后续期,剩余欠缴并入第一期未清期"""
  2. from decimal import Decimal
  3. import unittest
  4. from app.services.sample_payment_fgd_convert import plan_fq_to_fgd_merge
  5. class TestFgdConvert(unittest.TestCase):
  6. def test_merge_into_period_3(self):
  7. schedules = [
  8. {"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("5000"), "scheduleStatus": "cleared"},
  9. {"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("5000"), "scheduleStatus": "cleared"},
  10. {"id": "s3", "scheduleNo": 3, "dueAmount": Decimal("5000"), "scheduleStatus": "open"},
  11. {"id": "s4", "scheduleNo": 4, "dueAmount": Decimal("5000"), "scheduleStatus": "open"},
  12. {"id": "s5", "scheduleNo": 5, "dueAmount": Decimal("5000"), "scheduleStatus": "open"},
  13. {"id": "s6", "scheduleNo": 6, "dueAmount": Decimal("4800"), "scheduleStatus": "open"},
  14. ]
  15. transfers = [
  16. {"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("5000")},
  17. {"scheduleId": "s2", "payStatus": "yjf", "transferAmount": Decimal("5000")},
  18. ]
  19. plan = plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers)
  20. self.assertEqual(plan["targetScheduleId"], "s3")
  21. self.assertEqual(plan["newDueAmount"], Decimal("19800"))
  22. self.assertEqual(set(plan["softDeleteScheduleIds"]), {"s4", "s5", "s6"})
  23. self.assertEqual(plan["newInstallmentCount"], 3)
  24. def test_allow_when_jfqrz(self):
  25. """付款确认中不再阻断分改趸并期规划。"""
  26. schedules = [
  27. {"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("1000"), "scheduleStatus": "open"},
  28. {"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("1000"), "scheduleStatus": "open"},
  29. ]
  30. transfers = [
  31. {"scheduleId": "s1", "payStatus": "jfqrz", "transferAmount": Decimal("500")},
  32. ]
  33. plan = plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers)
  34. self.assertEqual(plan["targetScheduleId"], "s1")
  35. self.assertEqual(set(plan["softDeleteScheduleIds"]), {"s2"})
  36. def test_reject_when_later_period_has_yjf(self):
  37. schedules = [
  38. {"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("1000"), "scheduleStatus": "open"},
  39. {"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("1000"), "scheduleStatus": "open"},
  40. ]
  41. transfers = [
  42. {"scheduleId": "s2", "payStatus": "yjf", "transferAmount": Decimal("1000")},
  43. ]
  44. with self.assertRaises(ValueError) as ctx:
  45. plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers)
  46. self.assertIn("后续期", str(ctx.exception))
  47. if __name__ == "__main__":
  48. unittest.main()