3. Architecture — OLZ vs NLZ

Full repository map, system context, downstream dependencies, and inline rules engine

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

MethodEndpointServicePurpose
POST/ach/transactionAchService → AvAchService or ScaAchServiceSubmit ACH transaction (routes by OriginId)
POST/ach/queueprocessAchQueueServiceProcess queued transaction (called by backgroundservice)
POST/ach/transactions/searchAchServiceSearch/history with instruction enrichment
PATCH/ach/transactionBackofficeTransactionServiceBackoffice status update
POST/ach/transaction/{id}/publish-eventAchServicePublish Kafka event
POST/ach/workflow/notesAchServiceUpdate workflow notes

Downstream Dependencies (Refit Clients)

InterfaceTargetOperations
ICamMovemoneySystemClientcam-movemoney-system-apiBETA submit, DB CRUD, status, audit, workflow, search
ICamMmInstructionSystemClientcam-mm-instruction-system-apiBeta ACH instructions, instruction search
IAccountDetailsClientAccount Details ServiceAccount details, restrictions, transfers
IRttClientRTT ServiceRequest tracking: submit, status query
INotificationClientNotification ServiceSubmit/NIGO (fire-and-forget via BackgroundQueue)
IMovemoneyUtilitySvcClientmovemoney-utilityHolidays, business days
IKafkaProducerKafkaTransaction 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