Files
Chartwell/Books/Accounting/AccountsReceivable/AccountsReceivable.txt
2026-04-08 12:47:30 -04:00

558 lines
23 KiB
Plaintext

RAG Knowledge Chunks for CMH.HFA.Accounting.AccountsReceivable
---
Title: CustomerCreateLambda - Oracle Customer Creation Component
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: CustomerCreateLambda
• type: component
• domain: Customer Management
• system: Oracle
Content: Purpose: AWS Lambda function that creates new customer records in Oracle via OracleCustomerIntegration.
Processing Logic:
• Accepts OracleCustomer object as input
• Sets AccountSource to "HFA" for first account
• Delegates to IOracleCustomerIntegration.CreateCustomer
• Returns created OracleCustomer with Oracle-assigned IDs
Key Rules:
• AccountSource is always "HFA" for account creation
• Lambda configuration: 256MB memory, 30s timeout
Example Questions:
• How do I create a new customer in Oracle?
• What AccountSource is used for HFA customer creation?
• Which component handles customer creation?
---
Title: CustomerGetLambda - Multi-Method Customer Retrieval
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: CustomerGetLambda
• type: component
• domain: Customer Management
• system: Oracle
Content: Purpose: AWS Lambda providing multiple methods to retrieve customer data from Oracle and account links from AccountsService.
Processing Logic:
• Get() method: Retrieves customer by AccountSourceReference, AccountNumber, or CustAccountId (priority order)
• GetAccountWithLinks(): Retrieves iSeries account key linked to AccountSourceReference
• GetAccountLinksByLinkedAccountNumber(): Retrieves accounts by linked account number and source
• GetCustomerActivity(): Retrieves customer account activity summary by CustAccountId
Key Rules:
• Throws ArgumentNullException if all identifiers are null
• Priority: AccountSourceReference > AccountNumber > CustAccountId
Example Questions:
• How do I retrieve a customer using policy number?
• What identifiers can query Oracle customers?
• How do I get iSeries account keys for Oracle customers?
---
Title: OracleCustomer DTO Structure
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: OracleCustomer
• type: concept
• domain: Customer Management
• system: Oracle
Content: Purpose: Data structure representing Oracle customer entity with party and account information.
Properties:
• Version, SourceSystem, PartyId
• CustomerNumber (Oracle-assigned)
• PartyType (Person/Organization)
• FirstName, MiddleName, LastName, NameSuffix
• PartySourceSystemReferenceId (external system reference)
• Accounts[] (array of Account objects)
Inheritance: Extends AuditableEntityBase for audit tracking
Example Questions:
• What fields define an Oracle customer?
• How is customer name structured in Oracle?
• What is PartySourceSystemReferenceId used for?
---
Title: Account DTO Structure
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: Account
• type: concept
• domain: Customer Management
• system: Oracle
Content: Purpose: Data structure representing Oracle customer account with source references and status.
Properties:
• CustAccountId (Oracle ID, mapped from "CustAccountId" JSON)
• AccountNumber, AccountSource, AccountSourceReference
• AccountDescription, AccountType, CustomerClass
• AccountEstablishedDate, AccountTerminationDate (DateOnly)
• AccountStatus, PartyId
• Sites[] (array of Site objects)
Inheritance: Extends AuditableEntityBase
Example Questions:
• What identifies an Oracle account record?
• How are account source references structured?
• What account metadata is tracked?
---
Title: AccountIdDto - Account Identifier Container
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: AccountIdDto
• type: concept
• domain: Customer Management
• system: Multi-system
Content: Purpose: Container for passing account identifiers between step functions and Lambda invocations.
Properties:
• AccountSourceReference (nullable string) - external system reference
• AccountNumber (nullable string) - Oracle account number
• CustAccountId (nullable string) - Oracle customer account ID
Key Rules:
• All fields optional, at least one required for customer lookups
• Used as input parameter for CustomerGetLambda methods
Example Questions:
• How do I pass account identifiers to Lambda functions?
• What account lookup keys are supported?
• What DTO is used for step function account passing?
---
Title: PolicyInvoiceLambda - Invoice Get/Post Operations
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: PolicyInvoiceLambda
• type: component
• domain: Invoice Management
• system: Oracle
Content: Purpose: AWS Lambda for retrieving and posting invoices to Oracle via OIC (Oracle Integration Cloud).
Processing Logic:
• Get(): Retrieves invoice by InvoiceId OR by PolicyNumber+CustomerNumber combination
• Post(): Creates new invoice in Oracle
• Delegates all operations to IOracleInvoiceIntegration
Key Rules:
• Get requires either InvoiceId OR (PolicyNumber AND CustomerNumber)
• Throws exception for invalid request combinations
Example Questions:
• How do I retrieve an invoice by policy number?
• Which Lambda posts invoices to Oracle?
• What are valid invoice lookup parameters?
---
Title: InvoicesGetLambda - Multi-Invoice Retrieval with Sorting
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: InvoicesGetLambda
• type: component
• domain: Invoice Management
• system: Oracle
Content: Purpose: Retrieves multiple invoices from Oracle with configurable sorting.
Processing Logic:
• Accepts GetInvoicesDto with filter and sort criteria
• Delegates retrieval to IOracleInvoiceIntegration
• Applies sorting based on OrderOptions.PropertyName and SortBy
• Returns sorted List<OracleInvoice>
Sortable Fields:
• DocumentNumber (default), TransactionDate, DueDate, AccountingDate, TransactionNumber
Key Rules:
• Throws ArgumentException for unsupported sort fields
• Supports Ascending/Descending order via SortByOption
Example Questions:
• How do I retrieve invoices sorted by due date?
• What fields can invoices be sorted by?
• Which Lambda handles bulk invoice retrieval?
---
Title: OracleInvoice DTO Structure
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: OracleInvoice
• type: concept
• domain: Invoice Management
• system: Oracle
Content: Purpose: Data structure representing an invoice in Oracle AR system.
Key Properties:
• TransactionID, TransactionNumber, DocumentNumber
• TransactionClass (always "Invoice"), TransactionType
• TransactionDate, AccountingDate, DueDate (date fields)
• CustomerAccountNumber, SitePurposeSiteNumber
• TransactionLines[] (list of Transactionline objects)
• InvoiceBalanceAmount, TransactionStatus, PrintStatus
Static Values:
• BusinessUnit = "HFA BU"
• TransactionSource = "HFA Agency Management System"
• CurrencyCode = "USD"
• LegalEntityID = "62-1764688"
Computed Property:
• PremiumAmount: Sum of transaction lines containing "premium" in description
Example Questions:
• What fields define an Oracle invoice?
• What static values are set for HFA invoices?
• How is premium amount calculated?
---
Title: InvoiceStatic Constants - Invoice Configuration Values
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: InvoiceStatic
• type: rule
• domain: Invoice Management
• system: Oracle
Content: Purpose: Centralized constant values for invoice processing configuration.
Core Constants:
• HfaLegalEntityID: "62-1764688"
• HfaAgencyManagementSystem: "HFA Agency Management System"
• USD: "USD", Invoice: "Invoice", Billing: "Billing"
• GenerateBillNo: "No", BillTo: "BILL_TO"
Business Groups:
• HfaHmhPremium, HfaMhwHbppPremium, HfaMhwEscPremium
Line Types:
• Premium, Fees, NonRefundableFees, NonRefundableFeesWithCommission, SalesTax
Coverage Codes:
• CTX, EMPAT, FCPRS, HCFAS, IGA, LFPEA, MNFSR, POLFE, SURC
Example Questions:
• What is the HFA legal entity ID for invoices?
• What business groups are supported?
• What line types are available for invoices?
---
Title: HfaStatic Constants - HFA System-Wide Values
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: HfaStatic
• type: rule
• domain: System Configuration
• system: HFA
Content: Purpose: System-wide constant values used across HFA accounting modules.
Constants:
• Credit: "Credit", Debit: "Debit"
• HFA: "HFA"
• HfaAgencyManagementSystem: "HFA Agency Management System"
• HfaBusinessUnit: "HFA BU"
• HFASystems: "HFA SYSTEMS"
• NewStatus: "New", RenewalStatus: "Renewal"
• USD: "USD"
Usage: Referenced throughout invoice, general ledger, and customer modules for consistent value assignment.
Example Questions:
• What is the HFA business unit identifier?
• What currency code is used for HFA transactions?
• What status values are used for new vs renewal transactions?
---
Title: GeneralLedgerStatic Constants - GL Configuration
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: GeneralLedgerStatic
• type: rule
• domain: General Ledger
• system: Oracle GL
Content: Purpose: Centralized constants for general ledger posting configuration.
Core Constants:
• LedgerName: "Clayton GAAP USD"
• ActualFlag_A: "A", Version19: "V1.9"
• ApplicaitonName: "CMH.HFA.Accounting.AccountsReceivable"
• SourceServer: "AWS", Priority: 2, MaxWait: 3000
Account Codes:
• A198000, A200001, A200110, A201004, A450007, A450008
Cost Centers: C0700, C999, C9999 Entities: E200, E400, E500, E501, E999 Product Lines: P001, P003, P004, P999 Location: L00000, Future: F99999
Example Questions:
• What ledger name is used for HFA general ledger?
• What account codes are used for GL postings?
• What is the GL version identifier?
---
Title: GeneralLedgerHelper - GL Posting and Event Publishing
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: GeneralLedgerHelper
• type: component
• domain: General Ledger
• system: Integration Hub
Content: Purpose: Posts general ledger entries to Integration Hub and publishes retail disbursement events.
Processing Logic:
• Post(): Submits GeneralLedgerModel to Integration Hub
• GetRetailDisbursementEvent(): Maps PreGeneralLedger to CommissionDisbursementEvent for retail consumption
Key Rules:
• Returns success message with GL ID from first payload item
• Event includes SubType, PolicyNumber, CommissionReference, amounts
Example Questions:
• How do I post general ledger entries?
• Which component publishes retail disbursement events?
• What is included in commission disbursement events?
---
Title: ApPaymentRequestHelper - AP Payment Processing
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: ApPaymentRequestHelper
• type: component
• domain: Accounts Payable
• system: Integration Hub
Content: Purpose: Posts AP payment requests to Integration Hub and maps account links to keys.
Processing Logic:
• Post(): Validates and submits ApPaymentRequestModel
• MapAccountLinkToAccountKey(): Extracts iSeriesAccountKey from AccountLinks
• MapAccountLinkToPolicyNo(): Extracts HfaPolicyNumber from AccountLinks
Validation Rules:
• ClaytonBusinessUnit, ApplicationName, SourceServer required
• Payload must have at least one item
• Invoice with InvoiceNumber and InvoiceLines required
• InvoiceLine Amount must be > 0
Example Questions:
• How do I submit an AP payment request?
• How do I map account links to iSeries account key?
• What validations apply to AP payment requests?
---
Title: AccountLink Mapping Rules - iSeries and Policy Number Extraction
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: ApPaymentRequestHelper
• type: rule
• domain: Account Management
• system: Multi-system
Content: Purpose: Extract specific account keys from AccountLinks array based on AccountSource.
Mapping Logic:
• iSeriesAccountKey: Find AccountLink where AccountSource contains "iSeriesAccountKey" (case-insensitive substring match)
• HfaPolicyNumber: Find AccountLink where AccountSource equals "HfaPolicyNumber" (case-insensitive exact match)
Key Rules:
• Throws InvalidOperationException if target AccountLink not found
• Requires at least one AccountLink in AccountDto
• Returns AccountNumber from matched AccountLink
Example Questions:
• How do I extract iSeries account key from account links?
• What AccountSource identifies HFA policy numbers?
• How are account links filtered?
---
Title: UnappliedCashReceiptNotifyLambda - Email Notification Workflow
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: UnappliedCashReceiptNotifyLambda
• type: workflow
• domain: Cash Receipts
• system: Email/Mail Relay
Content: Purpose: Notifies stakeholders about unapplied cash receipts via email with Excel attachment.
Processing Flow:
1. Filter receipts: UnappliedAmount > 0 AND ReceiptState = "Unapplied" (case-insensitive)
2. Generate Excel report with receipt details (if receipts found)
3. Send email via IMailRelayService with attachment
4. Return execution result with email status
Key Rules:
• FromEmail: "noreply_hfa_accountsreceivable@claytonhomes.com"
• Resilient: sends email without attachment if Excel generation fails
• Returns success if no unapplied receipts (nothing to notify)
Example Questions:
• How are unapplied receipts identified?
• Which Lambda sends unapplied receipt notifications?
• What happens if no unapplied receipts are found?
---
Title: ReceiptStatic Constants - Receipt Configuration
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: ReceiptStatic
• type: rule
• domain: Cash Receipts
• system: Oracle AR
Content: Purpose: Constant values for receipt processing and status identification.
Constants:
• ReceiptMethodIcVmf: "HFA I/C VMF"
• Unapplied: "Unapplied"
• Remitted: "Remitted"
Usage: Used to identify receipt states and methods throughout receipt processing workflows.
Example Questions:
• What receipt method identifier is used for VMF?
• What value indicates an unapplied receipt?
• What are valid receipt status values?
---
Title: OracleIntegrationBase - Authentication and Request Building
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: OracleIntegrationBase
• type: component
• domain: Integration
• system: Oracle OIC
Content: Purpose: Base class for Oracle Integration Cloud (OIC) integrations providing authentication and request configuration.
Processing Logic:
• OracleBaseUrl(): Constructs base URL using environment-specific OIC subdomain
• GetRequestAsync(): Creates authenticated Flurl request with basic auth credentials
• GetRequestForJsonContent(): Adds "Content-Type: application/json" header
Secret Management:
• Retrieves credentials from secrets: {environment}-hfa-oic-username, {environment}-hfa-oic-password
• Retrieves OIC environment from: {environment}-hfa-oic-environment
URL Pattern: https://erp-{oicEnv}-oicintegration-idq4hj6bgo2f-ia.integration.ocp.oraclecloud.com
Example Questions:
• How do Oracle integrations authenticate?
• What is the OIC base URL structure?
• How are OIC credentials retrieved?
---
Title: OracleEndpoints - OIC API Endpoint Definitions
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: OracleEndpoints
• type: rule
• domain: Integration
• system: Oracle OIC
Content: Purpose: Centralized definitions of Oracle Integration Cloud REST API endpoints.
Endpoint Definitions:
• LookupEndpoint: /ic/api/integration/v1/flows/rest/CHI_LOOKUP_API/1.0/lookup?LookupType=CHI_HFA_LOOKUPS
• InvoiceEndpoint: /ic/api/integration/v1/flows/rest/CHI_ARINVOICE_AP/1.0/invoice
• CustomerEndpoint: /ic/api/integration/v1/flows/rest/CHI_CUSTOMER_API/1.0/Customer
• InstallmentEndpoint: /ic/api/integration/v1/flows/rest/CHI_INSTALLMEN_API/1.0/installment
• PostApplyReceiptToInvoiceEndpoint: /ic/api/integration/v1/flows/rest/CHI_RECEIPTAPP_API/1.0/ReceiptApplication
• CustomerAccountActivitySummaryEndpoint: /ic/api/integration/v1/flows/rest/CHI_ARCUSTOMER_API/1.0/ARCustomerAccountActivities
Example Questions:
• What is the endpoint for posting invoices to Oracle?
• Which endpoint retrieves customer account activity?
• What are the OIC flow names for HFA integrations?
---
Title: DecrementPolicyNumberLambda - Policy Number Decrement Logic
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: DecrementPolicyNumberLambda
• type: component
• domain: Policy Management
• system: HFA
Content: Purpose: Decrements the last two digits of a policy number using modulo arithmetic.
Processing Logic:
• Extract prefix (all characters except last 2)
• Extract numeral part (last 2 characters)
• Parse numeral as integer
• Decrement: (numeral - 1 + 100) % 100
• Return: prefix + decremented numeral (zero-padded to 2 digits)
Validation:
• Policy number must be at least 2 characters
• Last 2 characters must be numeric
Example Questions:
• How do I decrement a policy number?
• What format is required for policy numbers?
• How are policy number suffixes handled?
---
Title: StringExtension - Pre-Value Padding Helper
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: StringExtension
• type: rule
• domain: String Manipulation
• system: N/A
Content: Purpose: Extension method to pad strings with leading characters to reach target length.
Method Signature:
• AddPreValuePadding(this string value, int totalCharLimit, char paddingChar = '0')
Processing Logic:
• If value is null, treat as empty string
• If value.Length > totalCharLimit, return unchanged
• Calculate padding: totalCharLimit - value.Length
• Return: new string(paddingChar, padding) + value
Default Behavior: Pads with '0' characters
Example Questions:
• How do I left-pad a string with zeros?
• What happens if string exceeds character limit?
• How do I pad transaction numbers to fixed length?
---
Title: RetailGeneralLedger - Retail GL Mapping Component
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: RetailGeneralLedger
• type: component
• domain: General Ledger
• system: Retail
Content: Purpose: Maps retail general ledger DTOs to GeneralLedgerModel for debit and credit entries.
Processing Logic:
• MapDebit(): Maps debit retail commission to GL lines
• MapCredit(): Maps credit retail commission to GL lines
• Both methods delegate line generation to IRetailCommissionMapHelper
• Sets shared properties: JournalSource, JournalCategory, LedgerName, batch/journal names
Key Rules:
• JournalSource = JournalCategory = RetailStatic.JournalSource
• LedgerName = "Clayton GAAP USD"
• BusinessCategory = "Retail"
• ClaytonBusinessUnit = "Retail"
Example Questions:
• How do I map retail commissions to general ledger?
• Which component handles retail GL entries?
• What journal source is used for retail transactions?
---
Title: Retail GL Journal Entry Naming Convention
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: RetailGeneralLedger
• type: rule
• domain: General Ledger
• system: Retail
Content: Purpose: Defines naming conventions for retail GL batch and journal entries.
BatchName Format:
• Pattern: "INS {TransactionDate} {PolicyNumber} {TransactionNumber}"
• TransactionDate format: "yyyy-MM-dd"
JournalEntryName Format:
• Total length: exactly 12 characters
• Pattern: "INS" + zero-padding + TransactionNumber
• Padding calculation: 12 - TransactionNumber.Length - 3
• Example: "INS000012345" for transaction number 12345
Example Questions:
• What format is used for retail GL batch names?
• How are journal entry names constructed?
• What is the fixed length for journal entry names?
---
Title: LicensingLambda - Home Center License Validation
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: LicensingLambda
• type: component
• domain: Licensing
• system: Licensing API
Content: Purpose: Validates if a home center is licensed in a specific state via Licensing API integration.
Processing Logic:
• Accepts LicenseInfo with MasterDealerNumber and StateCode
• Skips validation if MasterDealerNumber <= 0
• Calls ILicensingApiIntegration.GetLicenseInfo with today's date
• Sets IsHomeCenterLicensed = true if any license matches StateCode
• Returns updated LicenseInfo
Key Rules:
• Only processes when MasterDealerNumber > 0
• Validates against current date (DateOnly.FromDateTime(DateTime.Today))
Example Questions:
• How do I check if a home center is licensed?
• Which Lambda validates dealer licensing?
• What determines if a home center is licensed in a state?
---
Title: PolicyRefundDisbursementLambda - Refund Event Publishing
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: PolicyRefundDisbursementLambda
• type: component
• domain: Refunds
• system: Event Publishing
Content: Purpose: Publishes policy refund disbursement events to accounting service event bus.
Processing Logic:
• PublishCheck(): Publishes event with EventSubType = "Check"
• PublishTransfer(): Publishes event with EventSubType = "Transfer"
• Both methods wrap PolicyRefundDisbursementPayload in EventMessage
• Delegates publishing to IAccountingServiceIntegration
Event Properties:
• EventType: "PolicyRefundDisbursement"
• Source: "Aws.Accounting.AccountsReceivable"
• Reporter: "AccountsReceivable.Event.PolicyRefundDisbursementLambda"
• EventVersion: "v1", EventClass: EventClass.Detail
Example Questions:
• How do I publish a policy refund event?
• What event types are available for refund disbursements?
• Which component publishes refund check events?
---
Title: Unapplied Receipt Filtering Rule
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: UnappliedCashReceiptNotifyLambda
• type: rule
• domain: Cash Receipts
• system: Oracle AR
Content: Purpose: Defines criteria for identifying unapplied cash receipts requiring notification.
Filter Criteria (both conditions must be true):
• UnappliedAmount > 0 (decimal comparison)
• ReceiptState equals "Unapplied" (case-insensitive string comparison)
Processing:
• Applied using LINQ Where clause on IEnumerable<OracleReceipt>
• Result used to trigger email notification workflow
• Empty result skips notification
Example Questions:
• What conditions identify an unapplied receipt?
• How are unapplied receipts filtered from receipt lists?
• What ReceiptState value triggers notifications?
---
Title: Journal Entry Description Mapping by Line Context
Metadata:
• module: CMH.HFA.Accounting.AccountsReceivable
• component: RetailGeneralLedger
• type: rule
• domain: General Ledger
• system: Retail
Content: Purpose: Maps business group line context to appropriate journal entry descriptions.
Mapping Rules:
• HfaHmhPremium → "InsPolicyTransaction" (from JournalEntryLineDescription)
• HfaMhwHbppPremium → "HbpPolicies"
• HfaMhwEscPremium → "HbpPolicies"
• Default: "HbpPolicies"
Processing: Uses case-insensitive StringComparison.OrdinalIgnoreCase for matching.
Example Questions:
• What journal description is used for HMH premium?
• How are journal entry descriptions determined?
• What description applies to HBPP premium transactions?
---
This completes the RAG knowledge chunks for the CMH.HFA.Accounting.AccountsReceivable module. Each chunk is atomic, focuses on a single concept, and provides query-ready information optimized for retrieval-augmented generation systems.