Candidate Architecture Design — NLZ Migration
| Platform | Investor Experience (INEX) — Money Movement |
| Broker Dealer | LPLE / LPLF |
| Product Code | INEX |
| Initiative | NLZ Migration — Topic 3: ACH Withdrawal & Deposit |
| Status | POC / Draft |
Migrate ACH money movement capabilities from the OLZ OnPrem stack (investor-ach-api) to the NLZ cloud-native stack (cam-movemoney-process-api), adding one-time withdrawals and recurring/periodic ACH transactions that were never fully implemented in OLZ.
| Driver | Problem | Impact |
|---|---|---|
| No AV withdrawals in NLZ | AvAchService only handles ACHC (deposits); ACHD routing missing for AccountView channel | Investors cannot withdraw via NLZ path |
| No recurring ACH | CmPeriodicInstruction schema exists in OLZ but was never wired to any handler or scheduler | Investors must manually submit each deposit/withdrawal |
| OLZ FutureDate bug | ProcessRequestsHandler cancels FutureDate requests (lines 161-170) instead of executing them | Future-dated deposits silently fail in OLZ |
| FICO dependency | OLZ makes 3 external HTTP calls to FICO for eligibility/compliance | Latency + single point of failure (no circuit breaker in OLZ) |
| Data Element | Classification | Protection |
|---|---|---|
| LPL Account Number | Confidential / PII | Masked in logs, encrypted at rest |
| Bank Account Number | Confidential / PII | Masked in logs, encrypted at rest, TLS in transit |
| SSN (tax withholding) | Restricted / PII | Not stored in MM system — passed through to tax service |
| Transaction Records | Books & Records | Retained per SEC Rule 17a-4, audit trail at every step |
| Kafka Events | Internal | No PII in event payload (uses masked account references) |
| Risk | Severity | Category | Mitigation |
|---|---|---|---|
| EligibilityService has no ACHD-specific rules (IRA limits, margin) | High | Technology | Port OLZ FICO ACHD rules into NLZ inline EligibilityService |
| Periodic scheduler double-execution across pods | High | Technology | Distributed lock (Redis or DB advisory) in ProcessPeriodicTransactionRequestsService |
| cam-system-api BETA payload may not support distribution PECO codes | Medium | Technology | Verify BETA request builder handles ACHD. Reference OLZ BetaRequestFactory.GetIrasPecoCode() |
| Tax withholding logic not in any NLZ service | Medium | Technology | Build TaxWithholdingService. OLZ CmRequest has fields but never populated. |
| No periodic instruction DB schema in cam-system-api | Medium | Technology | Design new table based on OLZ CmPeriodicInstruction |
| Repository | Role | Stack |
|---|---|---|
cam-movemoney-process-api | NLZ orchestrator (target for new features) | .NET 8, EKS, Kafka, Refit, Polly |
cam-mm-backgroundservice-api | NLZ queue processor (target for periodic scheduler) | .NET 8, BackgroundService, MediatR, Dapper |
cam-movemoney-system-api | NLZ data/BETA layer | .NET 8, EF Core, SQL Server |
cam-mm-instruction-system-api | Bank instruction management | .NET 8, Refit |
investor-ach-api | OLZ reference (current production) | .NET 7, MediatR, FICO |
investor-movemoney-commons | OLZ schema reference (CmPeriodicInstruction) | .NET, NuGet package |