Skip to main content

AML Rule Catalog

Kora Compliance ships a typed rule engine: you pick a rule_type and supply its parameters, rather than hand-composing generic field/operator/value logic. This page is the complete library — every rule type, the AML/CFT typologies it covers, and the configuration for each. Everything here is configurable from the dashboard (Monitoring → Rules → Create) or the Rules API.

Rules are per-tenant and start disabled — you enable each when ready. Thresholds below are sensible starting points; tune them to your risk appetite.

Rule types at a glance

rule_typeDetectsKey parameters
THRESHOLDSingle transaction over an amount limitamount_threshold, amount_operator, max_account_age_days
VELOCITYCount or cumulative value in a time windowcount_threshold / sum_threshold, time_window_minutes|time_window_days, group_by
PATTERNStructuring, round amounts, rapid movementpattern_type, just_below_amount, tolerance_percent
GEOGRAPHICHigh-risk / sanctioned jurisdictionshigh_risk_countries, sanctioned_countries
BEHAVIORALDeviation from the customer's own baselinedeviation_metric, deviation_threshold
NETWORKFan-in/out, mesh, closed groups, shared identifierspattern_type, count_threshold, identifier_field
SCREENINGReal-time sanctions / PEP / adverse-media on payment partiesscreening_lists, match_score_threshold, block_score_threshold
BLACKLISTTenant-maintained deny listsblacklist_kinds
CHARGEBACK_RATIOMerchant chargeback tier crossingstier_thresholds, ratio_basis, cb_period_days
DORMANT_REACTIVATIONHigh-value activity after long inactivityinactive_days, amount_threshold
NEW_DEVICETransaction from an unrecognised devicerequire_device_fingerprint, amount_threshold

No integrator-supplied context. Kora derives what it needs from data it already holds. Account age comes from our first-seen record of the customer; new-country, pass-through, and velocity from the transaction history we store — none of these require you to send an extra field.

Screening (sanctions / PEP / adverse-media)

Real-time, inline screening of the payment beneficiary against watchlists. Fail-closed: a screening outage holds the payment rather than releasing it. Configure which lists a rule checks; a sanctions match at or above block_score_threshold blocks, otherwise a hit holds.

{
"code": "SANCTIONS_SCREEN",
"rule_type": "SCREENING",
"category": "SANCTIONS",
"severity": "CRITICAL",
"parameters": {
"screening_lists": ["sanctions"],
"block_score_threshold": 0.95
}
}
TypologyConfiguration
Sanctioned entity match (real-time)screening_lists: ["sanctions"]
PEP transaction activityscreening_lists: ["pep"]
High-value PEP transactionscreening_lists: ["pep"], require_high_value: true, amount_threshold
Adverse-media / negative-news matchscreening_lists: ["adverse_media"]

PEP and adverse-media dispositions follow your per-tenant screening policy (GET/PUT /monitoring/screening/policy). See Real-Time Payment Screening for the decision model.

Amount & threshold

TypologyConfiguration
Single high-value transactionTHRESHOLD · amount_threshold, amount_operator: "GTE"
Large cash transaction (e.g. ≥ CAD 10,000, aggregated 24h)VELOCITY · sum_threshold, time_window_minutes: 1440, currency-scoped, channels: ["cash"]
CTR threshold (≥ USD 10,000, cash)THRESHOLD/VELOCITY · currency-scoped, cash channel
Individual vs corporate cash limitsduplicate the rule, scope by conditions.customer_types
Foreign / international transferTHRESHOLD scoped by transaction_types; model per currency (a threshold is stated in the transaction's own currency — no FX auto-conversion)

Velocity

VELOCITY counts transactions (count_threshold) or sums value (sum_threshold) within a window. group_by selects the aggregation key (customer, card, device, wallet, beneficiary).

TypologyConfiguration
Rapid transactions (≥5 in 10 min)count_threshold: 5, time_window_minutes: 10
High daily volume (≥20 in 24h)count_threshold: 20, time_window_minutes: 1440
High-velocity mobile money (≥10 in 1h)count_threshold: 10, channels: ["mobile_money"], time_window_minutes: 60
Daily / weekly / monthly cumulative amountsum_threshold with the matching window

Structuring / smurfing

TypologyConfiguration
Below-threshold structuringPATTERN · pattern_type: "STRUCTURING", just_below_amount, count_threshold, time_window_hours
CTR evasion / multi-day structuringsame, with a wider window
Round-amount transactionsPATTERN · pattern_type: "ROUND_AMOUNTS", tolerance_percent

Behavioural

BEHAVIORAL compares a transaction against the customer's own baseline (z-score).

TypologyConfiguration
Unusual activity / profile deviationdeviation_metric: "AMOUNT", deviation_threshold: 3.0
Value spike (≥3× average)deviation_metric: "AMOUNT", deviation_threshold: 3.0
Sudden volume / count increasedeviation_metric: "DAILY_VOLUME" | "DAILY_COUNT"

Geographic

TypologyConfiguration
High-risk country (FATF list)GEOGRAPHIC · high_risk_countries: ["…"]
Sanctioned jurisdictionsanctioned_countries: ["…"]
New-country activityderived from the customer's country history we store (behavioural/geo)

Network & relationship

NETWORK rules detect connected-party structures. pattern_type selects the shape.

pattern_typeTypologyKey parameters
FAN_OUTOne account → many recipientscount_threshold
FAN_INMany senders → one accountcount_threshold
BENEFICIARY_FAN_INMany customers → one beneficiarycount_threshold
SHARED_IDENTIFIERAccounts sharing a device / card / emailidentifier_field, count_threshold
MANY_TO_MANYMesh of senders and beneficiariescount_threshold, min_distinct_beneficiaries
CLOSED_NETWORKRepeated activity within a small groupcount_threshold, max_group_size
CIRCULARRound-tripping (A → B → … → A)time_window_minutes
{
"code": "COMMON_DEVICE",
"rule_type": "NETWORK",
"category": "FRAUD",
"severity": "HIGH",
"parameters": {
"pattern_type": "SHARED_IDENTIFIER",
"identifier_field": "device_fingerprint",
"count_threshold": 2,
"time_window_days": 7
}
}

Account, device & AML typologies

TypologyConfiguration
New-account risk (high value on a young account)THRESHOLD · amount_threshold + max_account_age_days — account age is self-derived from our first-seen record; no field required from you
Dormant reactivationDORMANT_REACTIVATION · inactive_days, amount_threshold
New device, high valueNEW_DEVICE · require_device_fingerprint: true, amount_threshold
Layering / rapid movementPATTERN · pattern_type: "RAPID_MOVEMENT"
Pass-through / mule accountPATTERN · pattern_type: "RAPID_MOVEMENT" (inflow → outflow, derived from history)
Placement — large unexplained inboundTHRESHOLD scoped by conditions.directions: ["CREDIT"]

Configure it yourself

  • Dashboard: sandbox.korastratum.comMonitoring → Rules → Create Rule. Pick the type, fill the fields, enable. Scoring-layer weights auto-balance to 100%.
  • API: POST /monitoring/rules then PUT /monitoring/rules/{id}/enable. See the Transaction Monitoring guide.
  • Bulk: provision a full rule set per tenant with the deal-desk seed catalog.

Every rule here runs today in the sandbox — create it, send a test transaction to POST /monitoring/evaluate, and watch it fire before you commit to anything.