Before You Connect
What you need to get started
Bank System Access
- Database credentials with read access to your core banking system (FIS Horizon, Fiserv DNA, Jack Henry, or a generic RDBMS)
- Or: ability to configure outbound webhooks from your core system
- Your core system's host, port, and database name
BankGuard Credentials
- Your BankGuard Command Center URL
- Your analyst or admin login (email + password)
- API key for your institution (obtained from your BankGuard admin)
Network Requirements
- For polling depths: BankGuard's IP needs outbound access to your database port (typically 1433 for SQL Server)
- For webhook/intercept: your core system needs outbound HTTPS access to BankGuard's connector endpoint
- TLS required on all connections
Connecting Your Bank
The Connection Wizard
- Log in to the Command Center. Navigate to Settings → Bank Connections → Add Connection. The Connection Wizard opens.
- Select your core banking system. BankGuard lists FIS Horizon, Fiserv DNA, Jack Henry SilverLake, and Generic (for any RDBMS). If your system is not listed, choose Generic and configure column mappings manually.
- Choose your integration depth. See the depth comparison table below.
- Enter your connection details (host, port, database, credentials). Credentials are encrypted with AES-256-GCM before storage.
- Click Test Connection. BankGuard performs a schema discovery to verify it can read the required tables. You will see either a green confirmation or a specific error.
- Name this connection (e.g., "FIS-Prod-Primary") and click Save & Activate.
Integration Depth Comparison
| Depth | How it works | Latency impact | Best for |
|---|---|---|---|
| Observe | BankGuard polls every 5 min | None | Risk dashboard; initial evaluation |
| Monitor | BankGuard polls every 1 min | None | Ongoing monitoring |
| Alert | Your system pushes events via webhook | None (async) | General fraud prevention |
| Intercept | Inline sync; bank awaits decision | < 500ms | High-risk transaction blocking |
Understanding Fraud Scores
What BankGuard returns for every transaction
Field Explanations
recommended_action — What BankGuard recommends the bank do: APPROVE / STEP_UP / DECLINE. For Intercept depth, this becomes APPROVE / BLOCK.
scores — Five independent engine scores, each 0.0–1.0. Higher = more suspicious. Fraud score: probability of fraudulent activity based on transaction patterns and velocity. Risk score: customer-level risk profile. Compliance score: BSA/AML flag probability. Retention: customer churn/distress signal. Predictive anomaly: statistical deviation from this account's historical baseline.
rules_applied — Any declarative rules that fired. Rules can elevate the ML recommendation but not lower it (unless configured with override_ml: true).
feature_contributions — SHAP-based explanation showing the features that most influenced the fraud score. Positive contribution = pushed score higher (toward fraud). Available in Case Detail view.
Default Action Thresholds
| Fraud Score | Default Action |
|---|---|
| Fraud < 0.30 | APPROVE |
| Fraud 0.30 – 0.60 | Monitor (no action for Monitor/Observe depth) |
| Fraud 0.60 – 0.85 | STEP_UP (challenge customer) |
| Fraud ≥ 0.85 | DECLINE / BLOCK |
Thresholds are configurable per institution.
Case Management
Working your fraud queue
When BankGuard recommends STEP_UP or DECLINE, a case is automatically created in the Case Queue. Cases are the primary workflow surface for fraud analysts.
The Case Lifecycle
Priority and SLA
| Priority | Score Range | SLA |
|---|---|---|
| CRITICAL | Fraud ≥ 0.85 or DECLINE | 4 hours |
| HIGH | Fraud ≥ 0.60 or STEP_UP | 8 hours |
| MEDIUM | Fraud ≥ 0.30 | 24 hours |
| LOW | Other | 72 hours |
Working a Case
- Open the Cases view. Cases are sorted by SLA urgency (time remaining). Red = SLA at risk.
- Click a case to open Case Detail. You'll see: the transaction data, all five engine scores, the SHAP feature contributions bar chart, any rules that fired, and the event timeline.
- Click Assign to Me (or assign to another analyst).
- Review the evidence. Use the Notes field to document your reasoning.
- Set a Disposition: TRUE_POSITIVE (confirmed fraud), FALSE_POSITIVE (legitimate transaction), SUSPICIOUS (uncertain, keep open), or INCONCLUSIVE.
- TRUE_POSITIVE and FALSE_POSITIVE dispositions automatically send feedback signals to the ML engines.
SAR and CTR Drafting
Regulatory document workflow
SAR Workflow
- With a case open (must be TRUE_POSITIVE or SUSPICIOUS disposition), click Draft SAR.
- BankGuard sends the case context (transaction details, account history, scores, analyst notes) to an LLM and generates a FinCEN-format SAR narrative covering the 5W+H framework: Who, What, Where, When, Why, and How.
- The draft appears in the Documents tab of the case. Review it carefully — the AI draft is a starting point, not a finished document.
- Edit the narrative as needed in the document editor.
- Click Mark as Reviewed when the document is complete.
- File manually through your FinCEN BSA E-Filing portal. Return to BankGuard and click Mark as Filed to close the loop.
CTR Workflow
Identical to the SAR workflow, initiated with Draft CTR from a HIGH-value cash transaction case.
Document Status Flow
The Rules Engine
Declarative fraud logic on top of ML scoring
Rules let you encode your institution's specific fraud policy as declarative logic. Rules fire before the ML score is returned — if a rule fires, its action is merged with the ML recommendation (most severe wins).
Available fields: transaction.amount · transaction.channel · transaction.type · account.balance · account.age_days · customer.risk_tier · features.tx_count_1h · features.sum_24h · features.avg_amount_30d
Building a Rule
- Navigate to Rules → New Rule.
- Name the rule and add condition rows (field + operator + value). Nest with AND/OR groups.
- Set the action (APPROVE / STEP_UP / DECLINE) and priority (lower number = higher priority).
- Save as Inactive. Use Simulate to run it against the last 30 days of historical data before activating — the simulation returns how many transactions would have been hit and an estimated false-positive rate.
- When confident, set status to Active.
override_ml: true on an APPROVE rule means the rule can suppress a STEP_UP generated by the ML engine. Use only for known-good transaction patterns with high confidence.
Graph Intelligence
Entity relationships and fraud ring detection
The entity graph tracks relationships between accounts, customers, merchants, devices, and IP addresses. Shared connections between fraud-confirmed entities and new accounts are a powerful leading indicator.
How the Graph Is Built
- › Every scored transaction updates the graph: account ↔ merchant (TRANSACTED_WITH), account → device (USED_FROM), account → IP (USED_FROM)
- › PII nodes (phone, email, address) are SHA-256 hashed — raw values are never stored
- › Edge weights decay over time: a 30-day-old connection has half the weight of a current one
Using the Graph
Case Detail Graph Panel
On any case detail page, click Show Graph to open the entity graph for the transaction's account. You'll see the account's 2-hop neighborhood — all connected entities. Confirmed-fraud nodes appear in red. Shared devices or IPs with known-fraud accounts are an immediate red flag.
Ring Detection
From the Graph page, search for a node and click Detect Rings. BankGuard runs a DFS algorithm to find cycles of 3–8 hops — characteristic structures of money-muling and fraud ring operations. Each detected ring is shown with a confidence score (higher = tighter ring with more recent transactions).
Quick Reference
Keyboard shortcuts, dispositions, and common questions
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| C | Go to Cases queue |
| R | Go to Rules list |
| G | Go to Graph |
| M | Go to Model Governance |
| B | Go to Billing |
| Shift+N | Next unworked case (by SLA) |
| Shift+A | Assign current case to me |
| Shift+D | Draft SAR for current case |
| ? | Open help |
Case Disposition Quick Reference
| Disposition | When to use | ML effect |
|---|---|---|
| TRUE_POSITIVE | Confirmed fraud — customer did NOT initiate this | Trains fraud engine: this was real |
| FALSE_POSITIVE | Legitimate — customer confirms they initiated this | Trains fraud engine: don't flag this pattern |
| SUSPICIOUS | Unclear; cannot confirm either way | No ML feedback sent |
| INCONCLUSIVE | Evidence insufficient to determine | No ML feedback sent |
Common Questions
Checker Map: Docker
What bankguard-check.js verifies in the Docker deployment model
Each numbered badge shows which section of the System Integrity Checker is responsible for that component. A clean run means every badge-annotated component reported healthy.
Checker Map: PM2
What bankguard-check.js verifies in the PM2 / bare-metal deployment model
This is the live deployment on the AnswerPoint VPS. The numbered badges match exactly the five sections reported in the checker's terminal output. If a badge-annotated component is failing, its checker section will report FAIL or WARN.
System Integrity Check
Verify that every BankGuard service, NATS connection, and engine is operating correctly
Running the Checker
The System Integrity Checker is a Node.js script included with every BankGuard installation. Run it after deployment or when troubleshooting connectivity issues:
For automated pipelines, add --json for structured output, or --quiet to suppress display and rely on the exit code (0 = all pass, 1 = failure, 2 = checker error).
What the Checker Verifies
| Section | Checks performed |
|---|---|
| 1 · Environment | All required env vars set and non-placeholder across bankguard-node, bankguard-connector, and bankguard-registry. PII key length (64 hex chars) and key-pair distinctness validated. |
| 2 · NATS | TCP probe confirms NATS server accepts connections on the configured port and returns an INFO handshake. |
| 3 · Service Health | HTTP health check against Registry (:4100), Connector (:4299), Cases (:4200), Rules (:4201), Graph (:4202), and UI (:5000). Uptime reported per service. |
| 4 · Engine Smoke Test | Posts a synthetic transaction to the Connector API and verifies that fraud, risk, and compliance engines return a scored response. |
| 5 · Security Posture | Reads the static analysis log to report open issue count and last run timestamp. |
Common Failures and Fixes
bankguard-node/.env and set PII_ENCRYPTION_KEY to a 64-character hex string (32 random bytes). Generate one with: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"nats-server -c /etc/nats/nats.conf or check its PM2 status with pm2 status. Confirm port 4222 is not blocked by a local firewall rule.CONNECTOR_API_KEY in bankguard-connector/.env does not match. Verify both files use the same value, then restart: pm2 restart bankguard-connector.pm2 status to find stopped or erroring processes. Check logs with pm2 logs <service-name>. The most common cause is a missing or malformed .env value that prevents startup.