models.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from dataclasses import dataclass
  2. from datetime import date, datetime
  3. from typing import Any
  4. @dataclass(frozen=True)
  5. class Quote:
  6. id: str
  7. user_id: str
  8. product_id: str
  9. product_version_id: str
  10. plan_id: str
  11. insured_age: int
  12. insured_region_code: str
  13. occupation_code: str
  14. relationship: str
  15. premium_cents: int
  16. currency: str
  17. rule_version: str
  18. rate_version: str
  19. status: str
  20. expires_at: datetime
  21. created_at: datetime
  22. @dataclass(frozen=True)
  23. class EnrollmentDraft:
  24. id: str
  25. user_id: str
  26. quote_id: str
  27. applicant: dict[str, Any]
  28. insured: dict[str, Any]
  29. contact: dict[str, Any]
  30. status: str
  31. expires_at: datetime
  32. created_at: datetime
  33. @dataclass(frozen=True)
  34. class UserConfirmation:
  35. id: str
  36. user_id: str
  37. draft_id: str
  38. token_hash: str
  39. status: str
  40. expires_at: datetime
  41. created_at: datetime
  42. @dataclass(frozen=True)
  43. class EnrollmentOrder:
  44. id: str
  45. order_no: str
  46. user_id: str
  47. quote_id: str
  48. draft_id: str
  49. confirmation_id: str
  50. idempotency_key: str
  51. product_id: str
  52. product_version_id: str
  53. plan_id: str
  54. applicant_snapshot: dict[str, Any]
  55. insured_snapshot: dict[str, Any]
  56. amount_cents: int
  57. currency: str
  58. status: str
  59. created_at: datetime
  60. @dataclass(frozen=True)
  61. class PaymentTransaction:
  62. id: str
  63. payment_no: str
  64. order_id: str
  65. user_id: str
  66. transaction_type: str
  67. provider: str
  68. idempotency_key: str
  69. amount_cents: int
  70. currency: str
  71. status: str
  72. provider_transaction_no: str | None
  73. succeeded_at: datetime | None
  74. created_at: datetime
  75. @dataclass(frozen=True)
  76. class Policy:
  77. id: str
  78. policy_no: str
  79. order_id: str
  80. user_id: str
  81. product_id: str
  82. product_version_id: str
  83. plan_id: str
  84. premium_cents: int
  85. currency: str
  86. coverage_start: date
  87. coverage_end: date
  88. status: str
  89. issued_at: datetime
  90. @dataclass(frozen=True)
  91. class OutboxEvent:
  92. id: str
  93. aggregate_type: str
  94. aggregate_id: str
  95. event_type: str
  96. payload: dict[str, Any]
  97. status: str
  98. created_at: datetime
  99. @dataclass(frozen=True)
  100. class AsyncTask:
  101. id: str
  102. task_type: str
  103. business_key: str
  104. idempotency_key: str
  105. payload: dict[str, Any]
  106. status: str
  107. attempt_count: int
  108. created_at: datetime