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?"