Repository Map: OLZ → Bridge → NLZ
Traffic routing: investor-cash-mgmt-process-api (BFF bridge) checks NEW_MOVE_MONEY_API_ENABLE via AdvisorAccessSystemClient. Flag OFF → OLZ. Flag ON → NLZ. Falls back to OLZ on gRPC failure.
graph TD
subgraph OLZ["OLZ OnPrem"]
OA["investor-ach-api
.NET 7 · MediatR
All business logic"]
OQ["investor-ach-queue
Quartz cron"]
OS["investor-submit-ach-api
DORMANT"]
OC["investor-movemoney-commons
Shared models"]
end
subgraph Bridge["Bridge BFF"]
BFF["investor-cash-mgmt-process-api
NEW_MOVE_MONEY_API_ENABLE flag"]
end
subgraph NLZ["NLZ Cloud — cam repos"]
CP["cam-movemoney-process-api
NLZ orchestrator"]
CS["cam-movemoney-system-api
DB · BETA · audit"]
CI["cam-mm-instruction-system-api
Bank instructions"]
CB["cam-mm-backgroundservice-api
Timer queue processor"]
end
subgraph Future["NLZ Future — inex repos (scaffold)"]
IE["inex-cashmgmt-exp-api"]
IP["inex-cashmgmt-process-api"]
end
BFF -->|Flag OFF| OA
BFF -->|Flag ON| CP
OQ --> OA
CB --> CP
CP --> CS
CP --> CI
IE -.->|Eventually replaces| BFF
IP -.->|Eventually calls| CP
style OLZ fill:#fde8e6,stroke:#e74c3c,color:#1a1d2e
style Bridge fill:#fff8ec,stroke:#f39c12,color:#1a1d2e
style NLZ fill:#e6faf5,stroke:#00b894,color:#1a1d2e
style Future fill:#f0eeff,stroke:#6c5ce7,color:#1a1d2e
style OS fill:#f0f2f8,stroke:#8b90a8,color:#8b90a8
NLZ System Context: cam-movemoney-process-api
graph LR
INV(["Investor Experience
NLZ SPA"])
BFF["investor-cash-mgmt-process-api
BFF Bridge"]
CAM["cam-movemoney-process-api
NLZ Orchestrator"]
BG["cam-mm-backgroundservice-api
Queue Processor"]
CAMSYS["cam-movemoney-system-api
DB · BETA · Audit"]
CAMINST["cam-mm-instruction-system-api
Bank Instructions"]
ACCT(["Account Details
Service"])
RTT(["RTT Service"])
NOTIF(["Notification
Service"])
KAFKA(["Kafka"])
BETA(["BETA"])
UTIL(["movemoney-utility
Holidays"])
INV --> BFF --> CAM
BG -->|Timer loop| CAM
CAM --> CAMSYS
CAM --> CAMINST
CAM --> ACCT
CAM --> RTT
CAM --> NOTIF
CAM --> KAFKA
CAMSYS --> BETA
CAM --> UTIL
style INV fill:#e8ecff,stroke:#4f6bed
style BFF fill:#fff8ec,stroke:#f39c12
style CAM fill:#e6faf5,stroke:#00b894
style BG fill:#e6faf5,stroke:#00b894
style CAMSYS fill:#e3f0ff,stroke:#1e88e5
style CAMINST fill:#e3f0ff,stroke:#1e88e5
style BETA fill:#f0eeff,stroke:#6c5ce7
style KAFKA fill:#fff8ec,stroke:#f39c12
style RTT fill:#fce4ec,stroke:#e91e63
cam-movemoney-process-api: Endpoints
| Method | Endpoint | Service | Purpose |
| POST | /ach/transaction | AchService → AvAchService or ScaAchService | Submit ACH transaction (routes by OriginId) |
| POST | /ach/queueprocess | AchQueueService | Process queued transaction (called by backgroundservice) |
| POST | /ach/transactions/search | AchService | Search/history with instruction enrichment |
| PATCH | /ach/transaction | BackofficeTransactionService | Backoffice status update |
| POST | /ach/transaction/{id}/publish-event | AchService | Publish Kafka event |
| POST | /ach/workflow/notes | AchService | Update workflow notes |
Downstream Dependencies (Refit Clients)
| Interface | Target | Operations |
ICamMovemoneySystemClient | cam-movemoney-system-api | BETA submit, DB CRUD, status, audit, workflow, search |
ICamMmInstructionSystemClient | cam-mm-instruction-system-api | Beta ACH instructions, instruction search |
IAccountDetailsClient | Account Details Service | Account details, restrictions, transfers |
IRttClient | RTT Service | Request tracking: submit, status query |
INotificationClient | Notification Service | Submit/NIGO (fire-and-forget via BackgroundQueue) |
IMovemoneyUtilitySvcClient | movemoney-utility | Holidays, business days |
IKafkaProducer | Kafka | Transaction status events |
Inline Rules Engine (No FICO)
Key NLZ change: OLZ called FICO via 3 external HTTP requests (BetaLookup, Eligibility, Compliance). NLZ evaluates all rules inline with custom services — no network calls, no FICO dependency.
EligibilityService
- Amount validation (numeric, > 0)
- Account class code (BBK, BFL, BMM)
- BORD restrictions check
- House account check
- Business eligibility rules
- High-dollar threshold
ComplianceService
- Registration type (1G Guardianship = hard stop)
- Employee class code (must be U or V)
OLZ vs NLZ: Architecture Comparison
flowchart LR
subgraph OLZ["OLZ: investor-ach-api"]
O1["Sequential account fetch"]
O2["FICO BetaLookup — HTTP"]
O3["FICO Eligibility — HTTP"]
O4["FICO Compliance — HTTP"]
O5["RttDirector — HTTP"]
O6["Notification — sync"]
O7["BetaDirector → BETA"]
O8["No Kafka"]
O9["Quartz cron queue"]
end
subgraph NLZ["NLZ: cam-movemoney-process-api"]
N1["PARALLEL account fetch"]
N2["Inline EligibilityService"]
N3["Inline ComplianceService"]
N4["IRttClient + cam-system-api"]
N5["BackgroundQueue async"]
N6["cam-system-api → BETA (Refit)"]
N7["Kafka events"]
N8["BackgroundService timer"]
N9["Audit at every step"]
end
O1 -.-> N1
O2 -.-> N2
O3 -.-> N2
O4 -.-> N3
O5 -.-> N4
O6 -.-> N5
O7 -.-> N6
O8 -.-> N7
O9 -.-> N8
style OLZ fill:#fde8e6,stroke:#e74c3c,color:#1a1d2e
style NLZ fill:#e6faf5,stroke:#00b894,color:#1a1d2e