193 lines
11 KiB
Plaintext
193 lines
11 KiB
Plaintext
Policy Module – RAG Knowledge Base
|
||
|
||
Chunk 1: Module Overview
|
||
Metadata: module=Policy, type=overview, location=CMH.HFA.Accounting.Orchestration/src/Policy, domain=policyAccounting, scope=fullLifecycle
|
||
Purpose: Comprehensive Lambda functions and services for insurance policy lifecycle events and accounting transactions
|
||
Functional Domains: Policy issuance/renewals, monetary/non-monetary endorsements, policy cancellations, refunds, commissions, invoice adjustments, licensing management
|
||
Integration Points: Oracle Fusion AR (invoice/credit memo posting), Oracle OIC (memo line lookups), customer management, commission tracking, AWS Step Functions
|
||
Key Concepts: invoice generation, credit memo creation, commission allocation, endorsement adjustments, refund distribution, transaction line building, temporal validity, memo line configuration
|
||
|
||
Chunk 2: MapOracleInvoice Service
|
||
Metadata: component=MapOracleInvoice, type=Lambda, operations=2, pattern=autoMapper, purpose=invoiceCreation
|
||
Description: Orchestrates transformation of policy events into Oracle AR invoice structures
|
||
Operations:
|
||
|
||
Map: Processes PolicyIssuedEvent for new invoices
|
||
MapRenewed: Processes PolicyRenewedEvent for renewal invoices
|
||
Processing Flow: Receives policy event + customer data, applies AutoMapper, determines transaction type (internal/external), invokes commission service, builds transaction lines using memo line lookups
|
||
Transaction Type Logic: Maps Internal vs External based on BillingType, ProductType, lender status
|
||
|
||
Chunk 3: Invoice Commission Processing
|
||
Metadata: component=InvoiceCommission, interface=IInvoiceCommission, pattern=multiStage, purpose=commissionCalculation
|
||
Description: Multi-stage pipeline to calculate commission-related transaction lines
|
||
Stages:
|
||
|
||
Pre-invoice line creation → maps premium and sales tax
|
||
Commission line generation → Retail vs HFA
|
||
Memo line retrieval → GL accounts via Oracle OIC
|
||
Transaction line finalization → GL accounts, amounts, commission metadata
|
||
Sorting → by type (premium, commission, fees) via TransactionLineComparer
|
||
Licensing Integration: Differentiates licensed/unlicensed home centers for commission routing
|
||
|
||
Chunk 4: Policy Cancellation Processing
|
||
Metadata: component=PolicyCancelService, operation=MapEventPayload, output=CreditMemo, purpose=cancellationAccounting
|
||
Description: Generates credit memos for policy cancellations with coverage-based refund calculations
|
||
Input: InsurancePolicyCancelledEventPayload (coverage blocks, unearned premium, sales tax refund, cancellation reason, billing type, other interests)
|
||
Credit Memo Generation: Negates original invoice amounts, maps cancellation reason to Oracle credit reason codes, determines internal/external transaction type, links to original invoice
|
||
Cancellation Reason Mapping: CustomerRequest, Flat, NonPayment, Repossession, ReplacementPolicy, Underwriting, HomeSold → "HFA-{Reason}" codes
|
||
Coverage Block Processing: Allocates premiums to corresponding GL accounts for accurate refunds
|
||
|
||
Chunk 5: Refund Adjustment Service
|
||
Metadata: component=RefundAdjustmentService, operation=GetCancellationRefundAdjustment, output=Adjustment, recipients=3
|
||
Description: Creates AR adjustment records for cancellation refunds
|
||
Recipient Types:
|
||
|
||
Retail → "HFA Retail I/C Refund"
|
||
VMF → "HFA VMF I/C Refund"
|
||
Customer → "HFA Auto Customer Refund"
|
||
Adjustment Configuration: Sets ReceivableTrxId, OrgId, SetOfBooksId
|
||
Comment Generation: Auto-generates descriptive comments
|
||
Validation: Throws exception if refund amount zero or credit memo missing
|
||
|
||
Chunk 6: Endorsement Adjustment Service
|
||
Metadata: component=EndorsementAdjustmentService, operation=MapEndorsementAdjustments, distribution=installmentBased, purpose=balanceSpread
|
||
Description: Allocates endorsement balance changes across invoice installments proportionally
|
||
Distribution Logic:
|
||
|
||
Single installment → full amount, rounding applied
|
||
Multiple installments → divided equally, final rounding adjustment
|
||
Zero balance → empty adjustment list
|
||
Adjustment Structure: Adjustment records with CustomerTrxId, PaymentScheduleId, ReceivablesTrxId, AdjustmentType="M", Amount, ApplyDate, CurrencyCode, OrgId, SetOfBooksId
|
||
Use Case: Monetary endorsements requiring proper AR aging
|
||
|
||
Chunk 7: Non-Monetary Endorsement Processing
|
||
Metadata: component=ProcessNonMonetaryEndorsementCustomerLambda, type=Lambda, purpose=customerUpdates, changes=demographic
|
||
Description: Updates customer data without affecting premium/fees
|
||
Supported Updates:
|
||
|
||
Name: first, middle, last, suffix
|
||
Address: street1-3, city, stateCode, zip.base/ext, country
|
||
Processing Pattern: Iterates NonMonetaryUpdate objects, applies property path to Oracle customer, targets MAILING site
|
||
Output: Modified OracleCustomer for downstream synchronization
|
||
|
||
Chunk 8: Invoice Filtering and Selection
|
||
Metadata: components=2, purpose=invoiceQuery, operations=filterAndSelect
|
||
|
||
FilterOpenInvoicesLambda: Filters invoices with balance >0, orders by TransactionDate descending
|
||
SelectValidInvoiceLambda: Selects most recent invoice matching valid transaction type whitelist (HFA internal/external, plan/type change, conversion), open balance >0
|
||
Valid Transaction Types: HfaInvoiceInternal, HfaInvoiceExternal, HfaInvPlanChgInt/Ext, HfaInvTypeChgInt/Ext, HfaInternConv, HfaExternConv
|
||
Use Cases: Endorsement workflows, billing change workflows
|
||
|
||
Chunk 9: Policy Number Management
|
||
Metadata: component=DecrementPolicyNumberLambda, type=Lambda, operation=numberManipulation, pattern=wrapping
|
||
Description: Decrements numeric suffix of policy numbers with wraparound logic
|
||
Algorithm: Last 2 characters numeric → decrement modulo 100, maintains prefix, zero-padded 2-digit suffix
|
||
Validation: Policy number min 2 chars, last 2 chars parse as int
|
||
Example: "POL-12345-03" → "POL-12345-02"; "POL-12345-00" → "POL-12345-99"
|
||
Use Case: Policy versioning/renewal numbering
|
||
|
||
Chunk 10: Policy Licensing Management
|
||
Metadata: component=PolicyLicensingLambda, operations=2, purpose=licensingInfo, determination=dealerBased
|
||
Operations:
|
||
|
||
MapIssuedLicensingInfo: Extracts licensing from issuance event
|
||
MapRenewedLicensingInfo: Extracts licensing from renewal event + previous invoice
|
||
LicenseInfo: IsHomeCenterLicensed, MasterDealerNumber, HomeCenterId, StateCode
|
||
Dealer Logic: Producer=ClaytonRetail AND Product≠ESC → MasterDealerNumber=29; else 0
|
||
Purpose: Influences commission calculations and transaction routing
|
||
|
||
Chunk 11: Cancellation Subfolder Components
|
||
Metadata: subfolder=Cancellations, components=4, purpose=cancellationWorkflow
|
||
|
||
MapCancellation Lambda: Orchestrates credit memo creation
|
||
MapCancellationRefund Lambda: Refund-specific logic
|
||
PolicyCancelRefundAdjustmentDto: DTO with credit memo references, refund amounts, recipients
|
||
InsurancePolicyCancelledEventPayload: Event model with policy/account identifiers, cancellation reasons, dates, other interests, billing type, coverage blocks, unearned premium, sales tax refund
|
||
|
||
Chunk 12: Event Domain Models
|
||
Metadata: subfolder=Events, type=payloadModels, count=10+, compliance=PII
|
||
|
||
PolicyIssuedEventV2Payload: New policy event with account, policy, product, premium, coverage, billing, producer info
|
||
InsurancePolicyRenewedEventPayload: Extends issuance payload, adds AgencyFirstWrittenDate
|
||
CommissionDisbursementCreditedPayload: Commission payment events
|
||
PolicyEventBase: Base class for policy events
|
||
PII Compliance: Uses attributes on sensitive fields
|
||
|
||
Chunk 13: Transaction Type Determination
|
||
Metadata: concept=transactionTypeMapping, factors=BillingType+OtherInterests, values=Internal/External
|
||
Internal: BillingType="OtherInterest" AND OtherInterests contains InternalLender=true
|
||
External: All other cases
|
||
Transaction Codes: HfaInvoiceInternal/External for invoices; Credit Memos vary by operation with Int/Ext suffix
|
||
|
||
Chunk 14: Memo Line Integration Pattern
|
||
Metadata: integration=MemoLineLookup, purpose=GLMapping, timing=temporal
|
||
Lookup Pattern: IMemoLookup.GetMemoLookupAsync using invoice creation date
|
||
Filtering: By Action, Type, ProductType, Organization, State, Commission Percent
|
||
GL Assignment: MemoLine.Description → TransactionLine.MemoLine; distribution % → amount
|
||
Temporal Guarantee: Historical accuracy, unaffected by configuration changes
|
||
|
||
Chunk 15: Transaction Line Sorting
|
||
Metadata: component=TransactionLineComparer, type=comparator, purpose=lineOrdering
|
||
Sort Order:
|
||
|
||
Premium Lines (Assurant Payable first)
|
||
Commission Lines
|
||
Fee Lines
|
||
Other Lines (original order)
|
||
Post-Sort: Renumber LineNumber sequentially
|
||
Purpose: Consistent invoice presentation, supports downstream processing
|
||
|
||
Chunk 16: DTO Folder Components
|
||
Metadata: subfolder=Dto, type=dataTransferObjects, count=6+, purpose=lambdaInputs
|
||
|
||
MapEndorsementAdjustmentsDto: Installments, OpenBalance, AdjustmentConfiguration
|
||
PolicyRenewedInvoiceMaptDto: PolicyRenewedEvent, Customer, LicenseInfo, PreviousInvoice
|
||
RenewedGetLicensingDto: PolicyRenewedEvent, PreviousInvoice
|
||
NonMonetaryEndorsementUpdateDto: OldCustomer, Updates collection
|
||
PolicyCancelRefundAdjustmentDto: Refund-specific data
|
||
Pattern: DTOs implement deconstruction methods for tuple unpacking
|
||
|
||
Chunk 17: Coverage Block Processing
|
||
Metadata: concept=coverageBlocks, purpose=premiumAllocation, granularity=perCoverage
|
||
Structure: CoverageBlock → Code, Coverage, Premium
|
||
Usage: Cancellations → pro-rated unearned premium; endorsements → coverage-specific adjustments; invoice generation → allocates premiums per coverage
|
||
GL Distribution: Different coverage types route to GL accounts via memo line config
|
||
|
||
Chunk 18: Commission Metadata Enrichment
|
||
Metadata: operation=commissionEnrichment, fields=7, differentiation=RetailVsHFA
|
||
Common Fields: BusinessGroup, NewOrRenewal, CommissionPercent, AgencyFirstWrittenDate
|
||
Retail: CommissionOrganization="Clayton Retail", Producer, SubProducer, CommissionReference
|
||
HFA: CommissionOrganization="HFA", Producer, SubProducer=empty, CommissionReference=empty
|
||
Detection: MemoLine.Description contains "Retail Commission" or "HFA Commission"
|
||
Renewal: Copies AgencyFirstWrittenDate
|
||
|
||
Chunk 19: State and Jurisdiction Handling
|
||
Metadata: concept=stateCodeProcessing, normalization=descriptionConversion, usage=memoLineFiltering
|
||
State Sources: PhysicalStateCode → string description via ToDescription()
|
||
Memo Line Filtering: State description used in GetMatchingLines
|
||
Address Normalization: State codes → descriptions
|
||
Tax Implications: State drives sales tax/refund in cancellations
|
||
|
||
Chunk 20: Search Queries Supported
|
||
Metadata: type=queryPatterns, purpose=RAGRetrieval
|
||
Sample Queries:
|
||
|
||
"How are policy issuance invoices created in Oracle?"
|
||
"What is the commission calculation process?"
|
||
"How do cancellations generate credit memos?"
|
||
"What adjustment types are supported for refunds?"
|
||
"How are endorsement balance changes distributed?"
|
||
"How do non-monetary endorsements update customers?"
|
||
"Transaction types for internal vs external billing?"
|
||
"How are coverage blocks used in premium calculations?"
|
||
"Memo line filtering criteria for invoices?"
|
||
"How does licensing service determine dealer numbers?"
|
||
"Transaction line sorting order on invoices?"
|
||
"How are policy renewal invoices different from issuance?"
|
||
"Cancellation reasons mapping?"
|
||
"How do refunds distribute to Retail, VMF, or customers?"
|
||
"Validation on invoice selection?"
|
||
"How does temporal memo line lookup work?"
|
||
"Which fields are updateable via non-monetary endorsements?"
|
||
"Commission organization determination (Retail vs HFA)?"
|
||
"How does system handle internal lenders for transaction typing?" |