Known Unknowns & Risk Register

What we haven't verified, hidden dependencies, and compliance risks

10 Known Unknowns

These are areas where the POC analysis is based on incomplete information. Each needs investigation before implementation begins.

1. ScaAchService ACHD logic — how complete is it?

ScaAchService handles both ACHC and ACHD and has a RulesService dependency that AvAchService doesn't. We only read ~200 of 566 lines.

What we knowScaAchService accepts ACHD TransactionType, calls RulesService for evaluation, has parallel fetch of holidays + beta instructions + lending details
What we don'tDoes RulesService handle IRA/tax/PECO logic? Is SCA ACHD tested in production? Can AvAchService reuse this logic or is it SCA-specific (lending/loan validation)?
ActionFull code review of ScaAchService + RulesService. Determine reuse strategy for AV channel.

2. cam-movemoney-system-api BETA request builder

We read the Refit interface (ICamMovemoneySystemClient.PostBetaTransactionAsync) but never the actual system-api implementation.

What we knowInterface accepts CreateBetaAchTransactionRequest and returns AchTransactionResponse
What we don'tDoes the request model include WithdrawalSourceCode / PECO fields? Is AchType hardcoded or configurable? What's the actual DB schema in BraveContext?
ActionRead cam-movemoney-system-api source: BETA request builder, CreateBetaAchTransactionRequest model, BraveContext entity definitions

3. Movemoney.Commons.Core NuGet shared models

All shared models (TransactionRequest, TransactionResponse, TransactionStatus) live in this NuGet package. We haven't read any of them.

What we knowPackage is referenced by cam-process, cam-system, cam-background. Contains enums like OriginId, TransactionStatus, RttUpdate.
What we don'tDoes TransactionRequest have IsRetirement, AmntNetOrGross, FedTaxIndicator, ExcessAmt, FrequencyCode, CycleBeginDate? If not, NuGet bump needed across all consumers.
ActionRead Movemoney.Commons.Core NuGet source. Identify field gaps. Plan coordinated NuGet version bump if needed.

4. AccountDetailsResponse — does it include IRA data?

AvAchService calls IAccountDetailsClient.GetAccountDetailsAsync(). We saw the interface but not the response model.

What we knowReturns AccountDetailsResponse with AcctClassCode (used by EligibilityService), AcctId, and nested AccountDetails
What we don'tDoes it include IRAType, DateOfBirth, IRAMktValueYE (FMV), FeeSchedule, IRA history? OLZ got these from separate BetaAcctMaster + BetaAccountIraDetails + BetaCustomerRelationship calls.
ActionRead AccountDetailsResponse model. If IRA data is missing, identify the NLZ equivalent data source (cam-system-api? separate IRA service?).

5. 1099-R tax reporting integration

Retirement distributions must generate IRS Form 1099-R. No evidence of this in either OLZ or NLZ money movement codebase.

What we knowOLZ CmRequest has FedTaxIndicator/StateTaxIndicator fields. NLZ cam-system-api persists transaction records.
What we don'tIs 1099-R handled by BETA downstream? By a separate tax reporting system? Does the MM system need to publish specific data for it? Is this a compliance blocker for go-live?
ActionConfirm with BETA team and Tax/Compliance team. This could delay retirement withdrawal support if not accounted for.

6. FICO rules — complete coverage unknown

OLZ delegated eligibility/compliance to FICO via external HTTP. We documented inline rules from what NLZ currently checks, but never saw the actual FICO rule definitions.

What we knowNLZ EligibilityService checks: amount, account class (BBK/BFL/BMM only), BORD, house account, high-dollar. ComplianceService checks: registration type (1G), employee class code.
What we don'tWere there FICO rules for ACHD not reflected in code? State-specific withholding? IRA distribution exception codes (72t SEPP, disability, first-time home)? Age-based thresholds?
ActionRequest FICO rule documentation from the Rules Engine team. Cross-reference with OLZ RulesRequestFactory field mapping to identify gaps.

7. BFF routing for new endpoints

The bridge BFF (investor-cash-mgmt-process-api) currently routes /contributions and /instructions/search. New endpoints like /ach/periodic-instruction have no OLZ equivalent.

What we knowBFF has MoveMoneyServiceClient with 4 methods (2 OLZ, 2 NLZ). NEW_MOVE_MONEY_API_ENABLE flag routes between them.
What we don'tDoes the BFF need new routes for periodic endpoints? Or does the NLZ SPA call cam-process-api directly (bypassing BFF)? Who owns BFF changes — Investor team or Move Money team?
ActionAlign with both teams. If periodic is NLZ-only (no OLZ fallback needed), direct routing from inex-cashmgmt-exp-api (future BFF) may be the right path.

8. Kafka schema governance for new events

Adding periodic lifecycle events (Created, Executed, Canceled) to Kafka.

What we knowExisting KafkaProducer publishes TransactionData events. SyDD governance requires Event Review approval.
What we don'tSchema registry enforcement? Downstream consumers that could break? New topic vs existing topic for periodic events?
ActionCheck with Event team. Submit Event Review as part of SyDD governance.

9. State-specific mandatory tax withholding

Some states require withholding on IRA distributions regardless of investor election. Rules vary by state and change annually.

What we knowOLZ BetaAcctMaster had StateTaxWithholdingIndicator + StateTaxWithholdingPercentage on file. CmRequest has StateTaxIndicator/Percent/Amount fields.
What we don'tWhich states are mandatory? Is there an existing LPL state tax rules engine? Does BETA handle state withholding downstream? Or must TaxWithholdingService implement all 50 states?
ActionConfirm with Tax/Compliance team whether BETA handles state tax or MM must enforce it.

10. Existing periodic instructions in production DB

OLZ CmPeriodicInstruction table exists with stored procs. It may have records from the old Mulesoft/CW era.

What we knowSchema exists in investor-movemoney-commons. CashManagementDbService reads them. No handler writes them.
What we don'tAre there existing records from legacy systems? If so, do they need migration to cam-system-api? Or is the table truly empty?
ActionQuery CashManagement DB: SELECT COUNT(*) FROM CmPeriodicInstruction. If records exist, plan migration strategy.

Team Contacts & Ownership

Team / RepoRoleNameEmail
cam-movemoney-process-api
cam-movemoney-system-api
Move Money NLZ
Tech LeadBabujee ArumugamBabujee.Arumugam@lplfinancial.com
Solution LeadMichael Mcguiremichael.mcguire@lplfinancial.com
Subdomain LeadSuresh Thoutamsuresh.thoutam@lplfinancial.com
cam-movemoney-process-api
Developers
DeveloperNikhil Agrawalnikhil.agrawal@lplfinancial.com
DeveloperNirmal RajputNirmal.Rajput@lplfinancial.com
DeveloperPuneeth RangaswamyPuneeth.Rangaswamy@lplfinancial.com
investor-cash-mgmt-process-api
BFF Bridge
Tech LeadKaushik Sarkarkaushik.sarkar@lplfinancial.com
DeveloperGuruprasad SreedharGuruprasad.Sreedhar@lplfinancial.com
DeveloperSomasundaram AppavuSomasundaram.Appavu@lplfinancial.com
investor-ach-api
OLZ OnPrem
Tech LeadKaushik Sarkarkaushik.sarkar@lplfinancial.com
INEX / Investor TeamArchitectKaushik Sarkarkaushik.sarkar@lplfinancial.com

Jira: Long Term Cash Management (LTCM) • Domain: CCS • Subdomain: movemoney • AWS: lzp-portfolio-movemoney-dev

Consolidated Risk Register

#RiskSevContactMitigation
1AccountDetailsResponse may not include IRA dataHighBabujee A.Read response model. Find alt IRA source if missing.
2cam-system-api BETA request may not support ACHD PECOHighBabujee A. + BETA teamInspect CreateBetaAchTransactionRequest + BETA builder.
3Commons NuGet may lack withdrawal/tax/periodic fieldsHighSuresh T.Read TransactionRequest. Plan NuGet version bump.
41099-R tax reporting — no integration foundHighMichael M. + BETA teamConfirm with BETA + Tax/Compliance. Possible blocker.
5ScaAchService ACHD may be SCA-specificMedNikhil A. / Nirmal R.Full code review. Determine AV reuse strategy.
6FICO ACHD rules unknown — inline rules may be incompleteMedSuresh T. + FICO teamRequest FICO rule docs. Cross-ref RulesRequestFactory.
7BFF routing for periodic — no OLZ equivalentMedKaushik S. + Babujee A.Align BFF + cam-process routing strategy.
8Periodic scheduler double-execution across podsMedPuneeth R. + Babujee A.Add Redis/DB advisory lock.
9State-specific mandatory tax withholdingMedMichael M.Confirm if BETA handles or MM must implement.
10Kafka schema governance for periodic eventsLowBabujee A. + EA boardSubmit Event Review early.

Investigation Priority

Before Sprint +1 starts: Items 1-4 are blockers. If AccountDetailsResponse lacks IRA data or 1099-R has no integration path, the retirement withdrawal scope may need to be deferred.
flowchart LR subgraph Week1["Week 1: Read code + confirm"] A1["Read AccountDetailsResponse model"] A2["Read cam-system-api BETA builder"] A3["Read Movemoney.Commons.Core NuGet"] A4["Confirm 1099-R with BETA + Tax team"] end subgraph Week2["Week 2: Review + align"] B1["Full ScaAchService + RulesService review"] B2["Request FICO rule documentation"] B3["Align BFF routing with both teams"] B4["Query CmPeriodicInstruction table"] end subgraph Week3["Week 3: Design + govern"] C1["Submit Event Review for Kafka"] C2["Confirm state tax withholding ownership"] C3["Finalize NuGet field additions"] end Week1 --> Week2 --> Week3 style Week1 fill:#fde8e6,stroke:#e74c3c,color:#1a1d2e style Week2 fill:#fff8ec,stroke:#f39c12,color:#1a1d2e style Week3 fill:#e6faf5,stroke:#00b894,color:#1a1d2e