Source code for ace.centralize.models.policy
"""
Policy models for Centralize
Models for coverages, premiums, ratings, payment agreements, and policies.
Based on the Policy/Application GraphQL schema (PolicyCreateParamsInput,
PolicyUpdateParamsInput, CoverageCreateParamsInput, etc.)
"""
from datetime import date
from typing import List, Optional
from ace.centralize.models.base import ModelBase
# ================================================== COVERAGES =========================================================
[docs]
class CoverageBenefitParamsInput(ModelBase):
"""Maps to CoverageBenefitParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
benefit_percentage: Optional[float] = None,
benefit_period_id: Optional[int] = None,
current_benefit_amount: Optional[float] = None,
current_benefit_currency_id: Optional[int] = None,
elimination_period_id: Optional[int] = None,
expiry_date: Optional[str] = None,
initial_benefit_amount: Optional[float] = None,
initial_benefit_currency_id: Optional[int] = None,
lives_type_id: Optional[int] = None,
renewal_date: Optional[date] = None
):
if benefit_percentage is not None:
self.benefitPercentage = benefit_percentage
if benefit_period_id is not None:
self.benefitPeriodId = benefit_period_id
if current_benefit_amount is not None:
self.currentBenefitAmount = current_benefit_amount
if current_benefit_currency_id is not None:
self.currentBenefitCurrencyId = current_benefit_currency_id
if elimination_period_id is not None:
self.eliminationPeriodId = elimination_period_id
if expiry_date is not None:
self.expiryDate = expiry_date
if initial_benefit_amount is not None:
self.initialBenefitAmount = initial_benefit_amount
if initial_benefit_currency_id is not None:
self.initialBenefitCurrencyId = initial_benefit_currency_id
if lives_type_id is not None:
self.livesTypeId = lives_type_id
if renewal_date is not None:
self.renewalDate = renewal_date
# Backward-compatible alias
CreateCoverageBenefitObject = CoverageBenefitParamsInput
[docs]
class CoverageLifeParamsInput(ModelBase):
"""Maps to CoverageLifeParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
conversion_date: Optional[date] = None,
current_amount: Optional[float] = None,
death_benefit_option_type_id: Optional[int] = None,
duration_design: Optional[int] = None,
expiry_date: Optional[date] = None,
initial_amount: Optional[float] = None,
lives_type_id: Optional[int] = None,
renewal_date: Optional[date] = None,
):
if conversion_date is not None:
self.conversionDate = conversion_date
if current_amount is not None:
self.currentAmount = current_amount
if death_benefit_option_type_id is not None:
self.deathBenefitOptionTypeId = death_benefit_option_type_id
if duration_design is not None:
self.durationDesign = duration_design
if expiry_date is not None:
self.expiryDate = expiry_date
if initial_amount is not None:
self.initialAmount = initial_amount
if lives_type_id is not None:
self.livesTypeId = lives_type_id
if renewal_date is not None:
self.renewalDate = renewal_date
# Backward-compatible alias
CreateCoverageLifeObject = CoverageLifeParamsInput
[docs]
class RatingParamsInput(ModelBase):
"""Maps to RatingParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
employment_class_id: Optional[int] = None,
issue_age: Optional[int] = None,
issue_gender_id: Optional[int] = None,
occupation: Optional[str] = None,
tobacco_premium_basis_id: Optional[int] = None,
underwriting_class_id: Optional[int] = None
):
if employment_class_id is not None:
self.employmentClassId = employment_class_id
if issue_age is not None:
self.issueAge = issue_age
if issue_gender_id is not None:
self.issueGenderId = issue_gender_id
if occupation is not None:
self.occupation = occupation
if tobacco_premium_basis_id is not None:
self.tobaccoPremiumBasisId = tobacco_premium_basis_id
if underwriting_class_id is not None:
self.underwritingClassId = underwriting_class_id
# Backward-compatible alias
CreateRatingObject = RatingParamsInput
[docs]
class SubstandardRatingCreateParamsInput(ModelBase):
"""Maps to SubstandardRatingCreateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
effective_date: Optional[date] = None,
expiration_date: Optional[date] = None,
flat_extra_amount: Optional[float] = None,
flat_extra_basis_id: Optional[int] = None,
participant_role_id: Optional[int] = None,
table_rating_id: Optional[int] = None
):
if effective_date is not None:
self.effectiveDate = effective_date
if expiration_date is not None:
self.expirationDate = expiration_date
if flat_extra_amount is not None:
self.flatExtraAmount = flat_extra_amount
if flat_extra_basis_id is not None:
self.flatExtraBasisId = flat_extra_basis_id
if participant_role_id is not None:
self.participantRoleId = participant_role_id
if table_rating_id is not None:
self.tableRatingId = table_rating_id
# Backward-compatible alias
CreateSubStandardRatingObject = SubstandardRatingCreateParamsInput
[docs]
class SubstandardRatingUpdateParamsInput(ModelBase):
"""Maps to SubstandardRatingUpdateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
id: int,
effective_date: Optional[date] = None,
expiration_date: Optional[date] = None,
flat_extra_amount: Optional[float] = None,
flat_extra_basis_id: Optional[int] = None,
participant_role_id: Optional[int] = None,
table_rating_id: Optional[int] = None
):
self.id = id
if effective_date is not None:
self.effectiveDate = effective_date
if expiration_date is not None:
self.expirationDate = expiration_date
if flat_extra_amount is not None:
self.flatExtraAmount = flat_extra_amount
if flat_extra_basis_id is not None:
self.flatExtraBasisId = flat_extra_basis_id
if participant_role_id is not None:
self.participantRoleId = participant_role_id
if table_rating_id is not None:
self.tableRatingId = table_rating_id
# Backward-compatible alias
UpdateSubStandardRatingObject = SubstandardRatingUpdateParamsInput
[docs]
class PremiumCreateParamsInput(ModelBase):
"""Maps to PremiumCreateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
premium_amount: float,
premium_type_id: int,
effective_date: Optional[date] = None,
expiration_date: Optional[date] = None
):
self.premiumAmount = premium_amount
self.premiumTypeId = premium_type_id
if effective_date is not None:
self.effectiveDate = effective_date
if expiration_date is not None:
self.expirationDate = expiration_date
# Backward-compatible alias
CreatePremiumObject = PremiumCreateParamsInput
[docs]
class PremiumUpdateParamsInput(ModelBase):
"""Maps to PremiumUpdateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
premium_id: int,
premium_type_id: Optional[int] = None,
premium_amount: Optional[float] = None,
effective_date: Optional[date] = None,
expiration_date: Optional[date] = None
):
self.id = premium_id
if premium_type_id is not None:
self.premiumTypeId = premium_type_id
if premium_amount is not None:
self.premiumAmount = premium_amount
if effective_date is not None:
self.effectiveDate = effective_date
if expiration_date is not None:
self.expirationDate = expiration_date
# Backward-compatible alias
UpdatePremiumObject = PremiumUpdateParamsInput
[docs]
class CoverageCreateParamsInput(ModelBase):
"""Maps to CoverageCreateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
coverage_product_id: int,
annual_premium: Optional[float] = None,
coverage_benefit: Optional[CoverageBenefitParamsInput] = None,
coverage_guid: Optional[str] = None,
coverage_life: Optional[CoverageLifeParamsInput] = None,
coverage_number: Optional[str] = None,
current_amount: Optional[float] = None,
duration_design: Optional[int] = None,
effective_date: Optional[date] = None,
expiry_date: Optional[date] = None,
index: Optional[int] = None,
link_guid: Optional[str] = None,
lives_type_id: Optional[int] = None,
modal_premium: Optional[float] = None,
parent_coverage_id: Optional[int] = None,
parent_guid: Optional[str] = None,
premiums: Optional[List[PremiumCreateParamsInput]] = None,
product_code: Optional[str] = None,
rating: Optional[RatingParamsInput] = None,
sub_standard_ratings: Optional[List[SubstandardRatingCreateParamsInput]] = None,
termination_date: Optional[date] = None,
termination_reason_id: Optional[int] = None,
):
self.coverageProductId = coverage_product_id
if annual_premium is not None:
self.annualPremium = annual_premium
if coverage_benefit is not None:
self.coverageBenefit = coverage_benefit
if coverage_guid is not None:
self.coverageGUID = coverage_guid
if coverage_life is not None:
self.coverageLife = coverage_life
if coverage_number is not None:
self.coverageNumber = coverage_number
if current_amount is not None:
self.currentAmount = current_amount
if duration_design is not None:
self.durationDesign = duration_design
if effective_date is not None:
self.effectiveDate = effective_date
if expiry_date is not None:
self.expiryDate = expiry_date
if index is not None:
self.index = index
if link_guid is not None:
self.linkGUID = link_guid
if lives_type_id is not None:
self.livesTypeId = lives_type_id
if modal_premium is not None:
self.modalPremium = modal_premium
if parent_coverage_id is not None:
self.parentCoverageId = parent_coverage_id
if parent_guid is not None:
self.parentGUID = parent_guid
if premiums is not None:
self.premiums = premiums
if product_code is not None:
self.productCode = product_code
if rating is not None:
self.rating = rating
if sub_standard_ratings is not None:
self.substandardRatings = sub_standard_ratings
if termination_date is not None:
self.terminationDate = termination_date
if termination_reason_id is not None:
self.terminationReasonId = termination_reason_id
# Backward-compatible alias
CreateCoverageObject = CoverageCreateParamsInput
[docs]
class CoverageUpdateParamsInput(ModelBase):
"""Maps to CoverageUpdateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
coverage_id: int,
annual_premium: Optional[float] = None,
coverage_benefit: Optional[CoverageBenefitParamsInput] = None,
coverage_life: Optional[CoverageLifeParamsInput] = None,
coverage_number: Optional[str] = None,
coverage_product_id: Optional[int] = None,
current_amount: Optional[float] = None,
duration_design: Optional[int] = None,
effective_date: Optional[date] = None,
expiry_date: Optional[date] = None,
index: Optional[int] = None,
lives_type_id: Optional[int] = None,
modal_premium: Optional[float] = None,
parent_coverage_id: Optional[int] = None,
premiums_to_add: Optional[List[PremiumCreateParamsInput]] = None,
premiums_to_delete: Optional[List[int]] = None,
premiums_to_update: Optional[List[PremiumUpdateParamsInput]] = None,
product_code: Optional[str] = None,
rating: Optional[RatingParamsInput] = None,
substandard_ratings_to_add: Optional[List[SubstandardRatingCreateParamsInput]] = None,
substandard_ratings_to_delete: Optional[List[int]] = None,
substandard_ratings_to_update: Optional[List[SubstandardRatingUpdateParamsInput]] = None,
termination_date: Optional[date] = None,
termination_reason_id: Optional[int] = None,
):
self.id = coverage_id
if annual_premium is not None:
self.annualPremium = annual_premium
if coverage_benefit is not None:
self.coverageBenefit = coverage_benefit
if coverage_life is not None:
self.coverageLife = coverage_life
if coverage_number is not None:
self.coverageNumber = coverage_number
if coverage_product_id is not None:
self.coverageProductId = coverage_product_id
if current_amount is not None:
self.currentAmount = current_amount
if duration_design is not None:
self.durationDesign = duration_design
if effective_date is not None:
self.effectiveDate = effective_date
if expiry_date is not None:
self.expiryDate = expiry_date
if index is not None:
self.index = index
if lives_type_id is not None:
self.livesTypeId = lives_type_id
if modal_premium is not None:
self.modalPremium = modal_premium
if parent_coverage_id is not None:
self.parentCoverageId = parent_coverage_id
if premiums_to_add is not None:
self.premiumsToAdd = premiums_to_add
if premiums_to_delete is not None:
self.premiumsToDelete = premiums_to_delete
if premiums_to_update is not None:
self.premiumsToUpdate = premiums_to_update
if product_code is not None:
self.productCode = product_code
if rating is not None:
self.rating = rating
if substandard_ratings_to_add is not None:
self.substandardRatingsToAdd = substandard_ratings_to_add
if substandard_ratings_to_delete is not None:
self.substandardRatingsToDelete = substandard_ratings_to_delete
if substandard_ratings_to_update is not None:
self.substandardRatingsToUpdate = substandard_ratings_to_update
if termination_date is not None:
self.terminationDate = termination_date
if termination_reason_id is not None:
self.terminationReasonId = termination_reason_id
# Backward-compatible alias
UpdateCoverageObject = CoverageUpdateParamsInput
[docs]
class TerminateCoverageObject(ModelBase):
"""Convenience model for terminating a coverage (not a direct schema type)."""
[docs]
def __init__(
self,
termination_date: Optional[date] = None,
termination_reason_id: Optional[int] = None,
coverage_id: int = 0
):
self.id = coverage_id
self.terminationDate = termination_date
self.terminationReasonId = termination_reason_id
# =============================================== PAYMENT AGREEMENT ====================================================
[docs]
class PaymentAgreementCreateParamsInput(ModelBase):
"""Maps to PaymentAgreementCreateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
payment_method_id: int,
payment_mode_id: int,
day_of_month: Optional[int] = None
):
self.paymentMethodId = payment_method_id
self.paymentModeId = payment_mode_id
if day_of_month is not None:
self.dayOfMonth = day_of_month
# Backward-compatible alias
CreatePaymentAgreementObject = PaymentAgreementCreateParamsInput
[docs]
class PaymentAgreementUpdateParamsInput(ModelBase):
"""Maps to PaymentAgreementUpdateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
day_of_month: Optional[int] = None,
payment_method_id: Optional[int] = None,
payment_mode_id: Optional[int] = None
):
if day_of_month is not None:
self.dayOfMonth = day_of_month
if payment_method_id is not None:
self.paymentMethodId = payment_method_id
if payment_mode_id is not None:
self.paymentModeId = payment_mode_id
# Backward-compatible alias
UpdatePaymentAgreementObject = PaymentAgreementUpdateParamsInput
# ===================================================== POLICY =========================================================
[docs]
class PolicyPaymentUpdateParamsInput(ModelBase):
"""Maps to PolicyPaymentUpdateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
billed_to_date: Optional[date] = None,
grace_amount: Optional[float] = None,
grace_period_end_date: Optional[date] = None,
next_billed_amount: Optional[float] = None,
paid_to_date: Optional[date] = None,
premium_paid_end_date: Optional[date] = None,
premium_paid_status_id: Optional[int] = None
):
if billed_to_date is not None:
self.billedToDate = billed_to_date
if grace_amount is not None:
self.graceAmount = grace_amount
if grace_period_end_date is not None:
self.gracePeriodEndDate = grace_period_end_date
if next_billed_amount is not None:
self.nextBilledAmount = next_billed_amount
if paid_to_date is not None:
self.paidToDate = paid_to_date
if premium_paid_end_date is not None:
self.premiumPaidEndDate = premium_paid_end_date
if premium_paid_status_id is not None:
self.premiumPaidStatusId = premium_paid_status_id
# Backward-compatible alias
UpdatePolicyPaymentObject = PolicyPaymentUpdateParamsInput
[docs]
class PolicyCreateParamsInput(ModelBase):
"""Maps to PolicyCreateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
product_id: int,
coverages: Optional[List[CoverageCreateParamsInput]] = None,
effective_date: Optional[date] = None,
issue_date: Optional[date] = None,
jurisdiction_id: Optional[int] = None,
maturity_date: Optional[date] = None,
policy_number: Optional[str] = None,
premiums: Optional[List[PremiumCreateParamsInput]] = None,
premium_payment_agreement: Optional[PaymentAgreementCreateParamsInput] = None,
product_code: Optional[str] = None,
referral_source_id: Optional[int] = None,
renewal_date: Optional[date] = None,
sub_status_id: Optional[int] = None,
termination_date: Optional[date] = None,
termination_reason_id: Optional[int] = None,
# Deprecated fields (use premiums list instead)
annual_premium: Optional[float] = None,
fee_amount: Optional[float] = None,
modal_premium: Optional[float] = None,
):
self.productId = product_id
if coverages is not None:
self.coverages = coverages
if effective_date is not None:
self.effectiveDate = effective_date
if issue_date is not None:
self.issueDate = issue_date
if jurisdiction_id is not None:
self.jurisdictionId = jurisdiction_id
if maturity_date is not None:
self.maturityDate = maturity_date
if policy_number is not None:
self.policyNumber = policy_number
if premiums is not None:
self.premiums = premiums
if premium_payment_agreement is not None:
self.premiumPaymentAgreement = premium_payment_agreement
if product_code is not None:
self.productCode = product_code
if referral_source_id is not None:
self.referralSourceId = referral_source_id
if renewal_date is not None:
self.renewalDate = renewal_date
if sub_status_id is not None:
self.subStatusId = sub_status_id
if termination_date is not None:
self.terminationDate = termination_date
if termination_reason_id is not None:
self.terminationReasonId = termination_reason_id
# Deprecated
if annual_premium is not None:
self.annualPremium = annual_premium
if fee_amount is not None:
self.feeAmount = fee_amount
if modal_premium is not None:
self.modalPremium = modal_premium
# Backward-compatible alias
CreatePolicyObject = PolicyCreateParamsInput
[docs]
class PolicyUpdateParamsInput(ModelBase):
"""Maps to PolicyUpdateParamsInput in GraphQL schema."""
[docs]
def __init__(
self,
policy_id: int,
coverages_to_add: Optional[List[CoverageCreateParamsInput]] = None,
coverages_to_delete: Optional[List[int]] = None,
coverages_to_update: Optional[List[CoverageUpdateParamsInput]] = None,
effective_date: Optional[date] = None,
issue_date: Optional[date] = None,
jurisdiction_id: Optional[int] = None,
maturity_date: Optional[date] = None,
payment: Optional[PolicyPaymentUpdateParamsInput] = None,
policy_number: Optional[str] = None,
premium_payment_agreement: Optional[PaymentAgreementUpdateParamsInput] = None,
premiums_to_add: Optional[List[PremiumCreateParamsInput]] = None,
premiums_to_delete: Optional[List[int]] = None,
premiums_to_update: Optional[List[PremiumUpdateParamsInput]] = None,
product_code: Optional[str] = None,
product_id: Optional[int] = None,
referral_source_id: Optional[int] = None,
renewal_date: Optional[date] = None,
sub_status_id: Optional[int] = None,
termination_date: Optional[date] = None,
termination_reason_id: Optional[int] = None,
# Deprecated fields (use premiums list instead)
annual_premium: Optional[float] = None,
fee_amount: Optional[float] = None,
modal_premium: Optional[float] = None,
):
self.id = policy_id
if coverages_to_add is not None:
self.coveragesToAdd = coverages_to_add
if coverages_to_delete is not None:
self.coveragesToDelete = coverages_to_delete
if coverages_to_update is not None:
self.coveragesToUpdate = coverages_to_update
if effective_date is not None:
self.effectiveDate = effective_date
if issue_date is not None:
self.issueDate = issue_date
if jurisdiction_id is not None:
self.jurisdictionId = jurisdiction_id
if maturity_date is not None:
self.maturityDate = maturity_date
if payment is not None:
self.payment = payment
if policy_number is not None:
self.policyNumber = policy_number
if premium_payment_agreement is not None:
self.premiumPaymentAgreement = premium_payment_agreement
if premiums_to_add is not None:
self.premiumsToAdd = premiums_to_add
if premiums_to_delete is not None:
self.premiumsToDelete = premiums_to_delete
if premiums_to_update is not None:
self.premiumsToUpdate = premiums_to_update
if product_code is not None:
self.productCode = product_code
if product_id is not None:
self.productId = product_id
if referral_source_id is not None:
self.referralSourceId = referral_source_id
if renewal_date is not None:
self.renewalDate = renewal_date
if sub_status_id is not None:
self.subStatusId = sub_status_id
if termination_date is not None:
self.terminationDate = termination_date
if termination_reason_id is not None:
self.terminationReasonId = termination_reason_id
# Deprecated
if annual_premium is not None:
self.annualPremium = annual_premium
if fee_amount is not None:
self.feeAmount = fee_amount
if modal_premium is not None:
self.modalPremium = modal_premium
# Backward-compatible alias
UpdatePolicyObject = PolicyUpdateParamsInput
[docs]
class TerminatePolicyObject(ModelBase):
"""Convenience model for terminating a policy (not a direct schema type)."""
[docs]
def __init__(
self,
termination_date: Optional[date] = None,
termination_reason_id: Optional[int] = None,
policy_id: int = 0,
coverages: Optional[List[TerminateCoverageObject]] = None
):
self.id = policy_id
self.terminationDate = termination_date
self.terminationReasonId = termination_reason_id
self.coveragesToUpdate = coverages