Fraud Detection Blueprint
Real-time transaction fraud detection with risk scoring, velocity checks, anomaly detection, and auto-blocking for payment terminals
| Feature | fraud-detection |
| Category | Payment |
| Version | 1.0.0 |
| Tags | fraud, risk-scoring, security, velocity, anomaly-detection |
| YAML Source | View on GitHub |
| JSON API | fraud-detection.json |
Actors
| ID | Name | Type | Description |
|---|---|---|---|
terminal_app | Terminal Application | system | Submits transactions for risk scoring before processing |
risk_engine | Risk Engine | system | Evaluates transactions against fraud rules and ML models |
fraud_analyst | Fraud Analyst | human | Reviews flagged transactions and makes final decisions |
fleet_admin | Fleet Administrator | human | Manages whitelists, blacklists, and risk thresholds |
Fields
| Name | Type | Required | Label | Description |
|---|---|---|---|---|
risk_assessment_id | token | Yes | Risk Assessment ID | |
transaction_id | token | Yes | Transaction ID | |
terminal_id | text | Yes | Terminal ID | |
merchant_id | text | Yes | Merchant ID | |
payment_method | select | Yes | Payment Method | |
amount | number | Yes | Transaction Amount | Validations: min |
risk_score | number | No | Risk Score (0-100) | Validations: min, max |
risk_verdict | select | Yes | Risk Verdict | |
risk_factors | json | No | Risk Factors | |
velocity_window_minutes | number | Yes | Velocity Check Window (minutes) | |
velocity_max_count | number | Yes | Max Transactions in Window | |
velocity_max_amount | number | Yes | Max Amount in Window | |
auto_block_threshold | number | Yes | Auto-Block Risk Score Threshold | |
flag_threshold | number | Yes | Flag for Review Threshold | |
review_status | select | No | Review Status | |
reviewer_id | text | No | Reviewer ID | |
review_notes | text | No | Review Notes | |
device_fingerprint | text | No | Device Fingerprint |
States
State field: review_status
Values:
| State | Initial | Terminal |
|---|---|---|
scoring | Yes | |
approved | Yes | |
flagged | ||
blocked | Yes | |
under_review | ||
cleared | Yes | |
confirmed_fraud | Yes |
Transitions:
| Name | From | To | Actor | Condition |
|---|---|---|---|---|
scoring | approved | risk_engine | ||
scoring | flagged | risk_engine | ||
scoring | blocked | risk_engine | ||
flagged | under_review | fraud_analyst | ||
under_review | cleared | fraud_analyst | ||
under_review | confirmed_fraud | fraud_analyst | ||
blocked | under_review | fraud_analyst |
Rules
- velocity_checks:
- transaction_count: Block if more than velocity_max_count transactions from same proxy/card in velocity_window_minutes
- amount_total: Block if total amount from same proxy/card in velocity_window_minutes exceeds velocity_max_amount
- terminal_velocity: Flag if single terminal processes more than 30 transactions in 5 minutes
- amount_anomaly:
- customer_average: Flag if transaction amount exceeds 3x the customer’s 30-day average
- merchant_average: Flag if transaction amount exceeds 5x the merchant’s typical transaction size
- round_number: Add risk points for suspiciously round amounts (e.g., R1,000, R5,000)
- device_trust:
- known_terminal: Reduce risk score for transactions from registered, healthy terminals
- unknown_device: Block transactions from unregistered terminal IDs
- tampered_device: Auto-block transactions from terminals reporting tamper alerts
- geographic:
- location_change: Flag if same proxy/card used at terminals more than 100km apart within 30 minutes
- known_location: Reduce risk score for transactions at customer’s usual locations
- thresholds:
- auto_approve: Risk score 0-59: approve without review
- flag_for_review: Risk score 60-84: allow transaction but queue for analyst review
- auto_block: Risk score 85-100: block transaction immediately
- blacklist:
- proxy_blacklist: Permanently block transactions from blacklisted PayShap proxies
- card_blacklist: Permanently block transactions from blacklisted card fingerprints
- terminal_blacklist: Permanently block transactions from blacklisted terminal IDs
- whitelist:
- trusted_proxy: Skip velocity checks for whitelisted proxies (e.g., corporate accounts)
- trusted_terminal: Reduce risk score by 10 points for whitelisted terminals
- palm_specific:
- failed_match_velocity: 3 failed palm matches in 5 minutes triggers proxy suspension review
- spoof_detection: Liveness check failure adds 50 risk points
Outcomes
Transaction_approved (Priority: 1)
Given:
- Transaction submitted for risk assessment
risk_score(computed) lt60
Then:
- set_field target:
risk_verdictvalue:approved - transition_state field:
review_statusfrom:scoringto:approved - emit_event event:
fraud.transaction.approved
Result: Transaction approved — proceed to payment processing
Transaction_flagged (Priority: 2)
Given:
- Transaction submitted for risk assessment
risk_score(computed) gte60risk_score(computed) lt85
Then:
- set_field target:
risk_verdictvalue:flagged - transition_state field:
review_statusfrom:scoringto:flagged - notify — Add to fraud analyst review queue
- emit_event event:
fraud.transaction.flagged
Result: Transaction allowed but queued for analyst review
Transaction_blocked (Priority: 3) — Error: FRAUD_TRANSACTION_BLOCKED
Given:
- Transaction submitted for risk assessment
risk_score(computed) gte85
Then:
- set_field target:
risk_verdictvalue:blocked - transition_state field:
review_statusfrom:scoringto:blocked - notify — Alert fraud team of blocked transaction
- emit_event event:
fraud.transaction.blocked
Result: Transaction blocked — customer informed, analyst notified
Velocity_exceeded (Priority: 4) — Error: FRAUD_VELOCITY_EXCEEDED
Given:
- Transaction submitted for risk assessment
- Transaction count or amount from same source exceeds velocity limits within window
Then:
- set_field target:
risk_verdictvalue:blocked - set_field target:
risk_scorevalue:95 - transition_state field:
review_statusfrom:scoringto:blocked - emit_event event:
fraud.velocity.exceeded
Result: Transaction blocked — velocity limit exceeded
Review_cleared (Priority: 5)
Given:
review_status(db) equnder_review- Fraud analyst determines transaction is legitimate
Then:
- transition_state field:
review_statusfrom:under_reviewto:cleared - emit_event event:
fraud.review.cleared
Result: Transaction cleared after manual review
Review_confirmed_fraud (Priority: 6) | Transaction: atomic
Given:
review_status(db) equnder_review- Fraud analyst confirms fraudulent activity
Then:
- transition_state field:
review_statusfrom:under_reviewto:confirmed_fraud - call_service target:
palm_pay.suspend_link— Suspend the palm-pay link if palm payment - emit_event event:
fraud.review.confirmed
Result: Fraud confirmed — proxy/card suspended, investigation opened
Blacklisted_source (Priority: 7) — Error: FRAUD_BLACKLISTED
Given:
- Transaction source (proxy, card, or terminal) is on the blacklist
Then:
- set_field target:
risk_scorevalue:100 - set_field target:
risk_verdictvalue:blocked - transition_state field:
review_statusfrom:scoringto:blocked - emit_event event:
fraud.blacklist.hit
Result: Transaction blocked — source is blacklisted
Errors
| Code | Status | Message | Retry |
|---|---|---|---|
FRAUD_TRANSACTION_BLOCKED | 403 | Transaction blocked by fraud detection — contact support | No |
FRAUD_VELOCITY_EXCEEDED | 429 | Too many transactions in a short period — please wait and try again | No |
FRAUD_BLACKLISTED | 403 | This payment method has been blocked | No |
FRAUD_DEVICE_UNTRUSTED | 403 | Transaction from unrecognised terminal | No |
FRAUD_SCORING_ERROR | 500 | Risk scoring service unavailable — transaction held for review | Yes |
Events
| Event | Description | Payload |
|---|---|---|
fraud.transaction.approved | Transaction passed risk assessment | risk_assessment_id, transaction_id, risk_score |
fraud.transaction.flagged | Transaction allowed but flagged for review | risk_assessment_id, transaction_id, risk_score, risk_factors |
fraud.transaction.blocked | Transaction auto-blocked by risk engine | risk_assessment_id, transaction_id, risk_score, risk_factors |
fraud.velocity.exceeded | Velocity limit exceeded — transaction blocked | risk_assessment_id, transaction_id, velocity_window_minutes |
fraud.review.cleared | Flagged transaction cleared by analyst | risk_assessment_id, transaction_id, reviewer_id |
fraud.review.confirmed | Fraud confirmed by analyst | risk_assessment_id, transaction_id, reviewer_id, review_notes |
fraud.blacklist.hit | Transaction from blacklisted source | risk_assessment_id, transaction_id |
Related Blueprints
| Feature | Relationship | Reason |
|---|---|---|
| palm-pay | recommended | Palm pay transactions are scored for fraud before processing |
| terminal-payment-flow | required | Payment flow calls fraud detection before executing payment |
| payshap-rail | recommended | PayShap transactions scored before credit push |
| payment-gateway | recommended | Card transactions scored before authorisation |
| audit-logging | required | All fraud decisions must be logged in immutable audit trail |
AGI Readiness
Goals
Reliable Fraud Detection
Real-time transaction fraud detection with risk scoring, velocity checks, anomaly detection, and auto-blocking for payment terminals
Success Metrics:
| Metric | Target | Measurement |
|---|---|---|
| policy_violation_rate | 0% | Operations that violate defined policies |
| audit_completeness | 100% | All decisions have complete audit trails |
Constraints:
- regulatory (non-negotiable): All operations must be auditable and traceable
- security (non-negotiable): Sensitive fields must be encrypted at rest and never logged in plaintext
Autonomy
Level: supervised
Human Checkpoints:
- before modifying sensitive data fields
- before transitioning to a terminal state
Escalation Triggers:
error_rate > 5consecutive_failures > 3
Verification
Invariants:
- sensitive fields are never logged in plaintext
- all data access is authenticated and authorized
- error messages never expose internal system details
- state transitions follow the defined state machine — no illegal transitions
Tradeoffs
| Prefer | Over | Reason |
|---|---|---|
| accuracy | speed | financial transactions must be precise and auditable |
Coordination
Protocol: orchestrated
Consumes:
| Capability | From | Fallback |
|---|---|---|
terminal_payment_flow | terminal-payment-flow | fail |
audit_logging | audit-logging | fail |
Safety
| Action | Permission | Cooldown | Max Auto |
|---|---|---|---|
| transaction_approved | supervised | - | - |
| transaction_flagged | autonomous | - | - |
| transaction_blocked | human_required | - | - |
| velocity_exceeded | autonomous | - | - |
| review_cleared | autonomous | - | - |
| review_confirmed_fraud | autonomous | - | - |
| blacklisted_source | autonomous | - | - |