Overview
DMS is a modular decision platform for lending. It turns business policy into deterministic, auditable, simulatable rules — with humans in the loop where it matters.
What is DMS?
DMS sits between your Loan Origination System (LOS), your Loan Management System (LMS), your Collections platform, and your bureau / core-banking data. It receives applicants or events, evaluates them against your live policy, and returns a verdict — with a full forensic trail.
A "decision" in DMS is never a black box. Every rule that fired, every constant it read, every score it computed, and every cell it landed in is recorded and replayable.
How a decision flows
The end-to-end path of a single application through DMS:
- Ingest. LOS posts an application; DMS resolves the IQAMA against bureau, core-banking, and internal tables via Input & Schema.
- Score. The active Decisioning Studio scorecard produces a numeric score; Rule Engine rules and Rule Flow diagrams evaluate eligibility (RAC) gates.
- Price. Pricing Studio derives a rate from base + risk premium + score discount and clamps it to product floors/ceilings.
- Decide. Auto-approve, auto-decline, or route into the Underwriter Queue for human review.
- Communicate. Comms Studio alerts the right stakeholders (operators, admins, customer-facing teams).
- Record. Every step is captured in Audit Logs and replayable forever via Decision Replay.
Who uses what
Risk & Policy
Rule Engine, Rule Flow, AI Advisor, Decisioning Studio, Pricing Studio, Policy Versioning.
Operations
Dashboard, Underwriter Queue, Decision Replay, Comms Studio, Audit Logs.
Compliance & Admin
Audit Logs, Policy Versioning, Users, Roles & Permissions.
Architecture
A clean separation between policy definition, runtime evaluation, human review, and audit.
The four layers
Design principles
- Deterministic by default. Same inputs + same policy version → same verdict, always. AI never sits on the critical path; it advises only.
- Everything is versioned. Rules, flows, RACs, scorecards, matrices, and policies are immutable once activated. Cloning a draft is the only way to evolve.
- Humans are first-class. Soft policy fails, missing bureau, or grey-band scores route to the queue with a full reason trail.
- The ledger is sacred. Every action by a user, the system, or an AI is captured in a tamper-evident audit chain.
Quickstart
From zero to a first decision in five minutes.
-
1
Connect your data
Open Input & Schema and add a connection (MySQL, Datalake, or REST). Click Test connection — you should see green tick and a column count.
-
2
Write your first rule
Go to Rule Engine, click an example like "DBR cap (Personal Loan)", then Run Test with a sample IQAMA. Save it.
-
3
Build a flow (optional)
Use Rule Flow to visually compose multiple rules + comparisons into one diagram. Right for non-technical authors.
-
4
Bundle into a policy version
Policy Versioning → New version → pick your rules & flows → Simulate. When happy, Activate (4-eyes optional).
-
5
Watch it run
Send a real application from your LOS. Watch it land in the Dashboard ticker; click it to open Decision Replay.
Key concepts
The vocabulary used across all DMS modules.
REJ-04) that explains an adverse outcome.trc_uw_1408) that stitches together every event for one decision.Rule Engine
Author single-output rules in a domain-specific language (DSL) with full schema autocomplete, syntax highlighting, and a live test console.
Overview
The Rule Engine is for one-line-of-business policy expressions — eligibility checks, DBR formulas, credit-score components, fees, IRRs, and adverse-action mapping. Each saved rule produces a single typed output: Boolean, Integer, Decimal, or String.
Anatomy of the page
- Schema Explorer (left) — a tree of every database, table, and column you've connected via Input & Schema. Click or drag a column to insert it at the cursor.
- Constants & Functions tabs — reusable values (
MIN_SALARY,MAX_DBR_PCT) and helpers (FN_age(dob),FN_dbr(...)). - Editor (centre) — CodeMirror with the DMS DSL mode: keywords (
IF,THEN,ELSE,AND,OR,NOT), constants, functions, and table.column references are all syntax-coloured. - Toolbar — pick the rule type, the output name, run a test, save the rule, or save as a function for reuse.
- Test Console (right) — type a sample IQAMA or Application ID and click Run Test. See inputs, intermediate steps, and the final output value.
- Example Scripts modal — 15 BRD-aligned starters (DBR, credit scoring, KYC, collections segmentation, etc.).
Syntax
The DSL is intentionally close to natural English with a sprinkle of math.
// Eligibility — must be 22+, salaried, and DBR within cap
IF Customer_Info.age >= MIN_AGE
AND Customer_Info.employment_type = "salaried"
AND FN_dbr(Customer_Info.existing_emi, Application.loan_emi, Customer_Info.monthly_income) <= MAX_DBR_PCT
THEN true
ELSE false
if ≡ IF). Identifiers and string literals are case-sensitive.Operators & helpers
| Category | Tokens |
|---|---|
| Comparison | = != > < >= <= |
| Logical | AND OR NOT |
| Arithmetic | + - * / · parentheses for grouping |
| Aggregates | SUM AVG MIN MAX COUNT |
| Control | IF … THEN … ELSE |
| Literals | true false · numbers · quoted strings |
Output types
Tips
- Use the Save as function button to extract a reusable helper. Then call it from any rule as
FN_yourName(...). - Constants store both the value and a description. Authors and auditors see the description on hover.
- The Test Console shows every intermediate value — great for debugging long expressions.
- Keep one rule = one output. If you need branching outputs, use Rule Flow instead.
Rule Flow
A visual drag-and-drop designer that produces the same deterministic evaluations as Rule Engine — without writing code.
Overview
Rule Flow gives non-technical authors a friendly canvas. Drag blocks, draw connections, double-click a block to configure it, and you have a runnable diagram. Every flow starts with a START block and ends with RETURN.
Block types
| Block | Purpose | Inputs / Outputs |
|---|---|---|
| START | Entry point of the flow. | — / 1 |
| Schema input | Reads a column from a connected table. | — / 1 |
| Constant | Provides a literal or a Global Constant value. | — / 1 |
| Comparison | = != > < >= <= | 2 / 1 (boolean) |
| AND / OR | Logical fan-in (configurable: 2 – 6 inputs). | n / 1 |
| NOT | Inverts a boolean. | 1 / 1 |
| Condition | IF … THEN … ELSE branch. | 3 / 1 |
| Function | Call a Global Function; inputs derive from arity. | n / 1 |
| Math | + − × ÷ SUM AVG MIN MAX | 2–n / 1 |
| RETURN | Emits the flow's final output value. | 1 / — |
Canvas controls
- Pan. Hold space or drag any empty area.
- Zoom. Trackpad pinch, or use the +/− buttons.
- Connect. Drag from the small circle on the right of a block to the circle on the left of another.
- Configure. Double-click a block to open the node editor — here you pick the DB · table · column, comparison operator, literal, or function.
- Delete. Select a block or edge and press Delete.
Test runner
Click Run flow. DMS highlights the active path step by step from START to RETURN, annotating each block with its input, calculation, and output values. This is the same trace the Underwriter sees in Decision Replay.
Built-in examples
Use the Example flows button to load: DBR check, Credit scoring, Eligibility gates, Collections segmentation, and KYC verification.
AI Advisor
An always-on analyst that mines your portfolio data to suggest policy tweaks — never auto-applied, always reviewable.
Overview
The Advisor watches every recorded decision and customer outcome (DPD, write-off, regular pay, legal action) and continuously trains a shadow model. It surfaces opportunities to lift approval rates, tighten loss bands, re-price segments, or expand into adjacent customer cohorts.
What it learns from
- Customer demographics — age, employment, segment, employer tier.
- Loan history — product, principal, tenure, repayment cadence.
- Repayment behaviour — DPD buckets, prepayments, delays, defaults.
- Collections actions — reminders, restructures, legal escalation, write-off.
- Bureau signals — SIMAH score deltas, foreign-bureau lookups.
Recommendation types
MIN_SALARY 8,000 → 7,400).Preview Impact
Click Preview impact on any recommendation. An animated popup replays the last N production decisions through the proposed change and shows:
- Δ approval rate (with confidence band).
- Δ expected loss.
- Customers newly reachable.
- Revenue projection at 3 / 6 / 12 months.
If you accept, the Advisor opens a draft policy version pre-populated with the change — ready to Simulate in Policy Versioning.
Input & Schema
Manage the connections, tables, and aliases that feed every rule, flow, and matrix.
Overview
DMS reads data; it never mutates upstream systems. Input & Schema is where you register data sources, inspect their schemas, and (optionally) rename columns to friendlier labels for Rule Engine and Rule Flow authors.
Connection types
MySQL / Postgres
Host, port, db, user, password, optional SSH tunnel. Auto-discovers tables & columns on first connect.
Datalake
S3 / ADLS-style buckets with Parquet/CSV. Schema inferred from file headers; partition keys honoured.
REST API
Endpoint, auth type (bearer / OAuth2 / API key), and a sample response. DMS infers fields from the schema you paste.
Workflow
- 1
Add connection
Top-right + New connection. Fill credentials, hit Test. Green tick = ready.
- 2
Explore schema
Click a connection in the list to see its tables. Click a table to expand columns — types, nullability, sample values.
- 3
Alias map
Hit Map columns on any table. Rename ugly columns (
cust_dob→Date of Birth) for downstream readability. Original schema is never touched. - 4
Global constants
Add reusable values like
MIN_SALARY = 8000with a description. They show up in Rule Engine & Rule Flow autocomplete instantly.
Decisioning Studio
Define your RAC gates, weighted Scorecard, and lookup Matrix — all in one studio.
Three modes
RAC
Risk Acceptance Criteria. Hard policy gates: age, income, DBR, blacklist, IQAMA validity. Any fail = auto-decline.
Scorecard
Weighted-band model. Drag sliders to set weights for demographics, behaviour, bureau, and stability. Animated score ring shows the impact.
Matrix
Two-dimensional lookup (e.g. score band × tenure) for rate, limit, or decision. Click any cell to edit; heatmap shows risk density.
RAC editor
Each RAC has a name, a description, a hard/soft toggle, and a check expression. Soft fails route to the Underwriter Queue with a specific reason code; hard fails decline.
Scorecard editor
Weights must sum to 100. The studio enforces this live as you drag sliders — the score ring re-animates and shows where a sample applicant would land. You can press AI assist to ask the Advisor for weight suggestions based on realised outcomes.
Matrix editor
Define two axes (e.g. score band A–E, tenure 12/24/36/48/60 months) and a payload (rate, limit, or decision). Hover any cell to see its production hit-count and realised loss.
Pricing Studio
Build the rate that lands in the customer's contract — from base rate, risk premium, score discount, and product clamps.
The formula
RawPremium = BaseRate(SIBOR + spread) + RiskPremium(tenure_matrix)
ScoreDiscount = MAX(score_discount_fn(score), floor_cap)
FinalPremium = clamp(RawPremium * (1 - ScoreDiscount), min_rp, max_rp)
Products
Three products live side-by-side: Tawaruq 1, Tawaruq 2, and Digital Installments. Each has its own base rate, tenure matrix, and clamps. Pick a product from the card grid; the live calculator on the right re-runs the formula instantly.
Live calculator
- Drag the Score and Tenure sliders to see Raw → Discount → Final visually flow through the breakdown chain.
- The risk-to-rate curve plots final premium vs score for the chosen tenure — helpful for sanity-checking edge cases.
- The heatmap shows realised loss vs priced premium for every (score × tenure) cell.
Decision Replay
Forensic inspection of any decision — every rule fired, every value read, every gate passed or failed.
When to use it
- Customer dispute. "Why was I declined?" — pull the trace, see the failing rule and its reason code.
- SAMA audit. Export a signed PDF/CSV pack covering any date range or segment.
- Internal debugging. A new rule producing unexpected outcomes — replay last 1,000 applications through it.
Anatomy of a trace
Each trace shows:
- Applicant fingerprint (IQAMA, product, requested amount, channel).
- Active policy version snapshot at decision time.
- Per-rule evaluation: input values, expression, computed value, outcome (✔ / ✗).
- Score components and the matrix cell hit.
- Adverse-action code (if declined).
- Decision latency timeline (ingest → score → price → verdict).
Filtering & export
Filter the list by date, product, channel, status, or score band. Export produces a signed bundle (PDF + CSV + JSON manifest) with audit checksums — ready for regulator submission.
Underwriter Queue
The tactical cockpit where humans take over: grey-band scores, soft policy fails, missing bureau — routed here with full context.
What gets routed
| Reason | Trigger | SLA |
|---|---|---|
RT-GREY-SCORE | Score in grey band | 4h |
RT-BUREAU-MISS | SIMAH lookup empty / stale | 2h |
RT-SOFT-POLICY | Soft RAC failed | 4h |
RT-DOC-PENDING | Document upload required | 24h |
RT-EXCEPTION | Manual escalation | 1h |
The cockpit
- HUD — live counters for active, breaching, in-review, decided 24h.
- Radar — each case is a dot placed by reason (angle) and SLA (distance). Breaching cases pulse red.
- Focus stage — click a dot to lock onto a case. SLA ring, app score, SIMAH score, DBR, and audit ribbon all appear.
- Up-next deck — horizontally scrolling cards sorted by SLA. Claim next critical is one tap away.
Decisions
Five actions per case:
- Approve — optionally with override amount and a reason code (e.g.
AP-OVR-04). - Decline — reason code mandatory (e.g.
DC-INC-02). - Request info — pause SLA until applicant responds.
- Assign — hand the case to a specific colleague.
- Skip — return to queue, log a reason.
Every action triggers the dramatic verdict reveal animation and writes a full ribbon row.
Comms Studio
Internal alerting — SMS / email templates that reach stakeholders when DMS executes a rule, makes (or can't make) a decision, or needs human attention.
Overview
Comms Studio is not a customer-facing marketing tool. It's the alerting backbone for DMS operators: admins, on-call risk, compliance, and reviewers. Triggers come from DMS events (rule fired, RAC failed, queue breach, anomaly detected).
Trigger types
- Decision events — approved, declined, manual review needed.
- System events — service degraded, retrain done, ETL failure.
- AI events — anomaly above threshold, drift signal, new recommendation.
- Governance events — policy activated, role permission changed.
Templates & merge fields
Each template has SMS and email variants. Merge fields look like {{applicant.iqama}}, {{decision.reason}}, {{sla.remaining}}. The preview pane shows a fully resolved sample.
Recipients & groups
Add individual contacts (phone + email) or create groups (e.g. Compliance on-call, Underwriting team A). Each trigger can fire to one or many groups. Quiet hours and rate limits are honoured per group.
Policy Versioning
The control centre for everything that decides. Bundle rules + flows + RAC + scorecard + matrix into immutable, simulatable, replayable versions.
Lifecycle
Creating a version
- 1
Pick or create a policy
Examples: Personal Loan, Credit Card, Auto Loan, Digital Installments.
- 2
Clone or start fresh
Most teams clone the latest active version and tweak.
- 3
Add rules & flows
Open the edit modal, pick from the library, mark each as Mandatory or Soft.
- 4
Simulate
Run the dry-run simulator against a sample applicant or replay the last 1,000 production decisions through the draft.
- 5
Activate
4-eyes optional. Activation is logged in Audit Logs as a critical event.
The simulator
A full-screen dry-run with animated execution. Inputs on the left, step-by-step execution flow in the centre (each rule turns running → pass / fail / skip), verdict on the right. Use it before every activation.
Audit Logs
Forensic ledger — every action, every change, every decision, recorded and signed.
What's captured
- User actions — rule edits, RAC changes, policy activations, queue decisions, exports, logins, MFA changes.
- System actions — auto-decisions, ETL jobs, scheduled retrains, webhook deliveries, service health events.
- AI actions — recommendations, anomaly alerts, drift signals.
Anatomy of an event
| Field | Description |
|---|---|
| id | Globally unique event ID. |
| actor | Person, service, or AI agent. |
| action | Verb — create, update, delete, decision, etc. |
| target | The thing acted on (rule, policy, case, connection…). |
| severity | info · notice · warning · critical. |
| diff | Field-level before/after (for updates). |
| trace_id | Stitches related events together. |
| checksum | SHA-256 over the event body for tamper detection. |
Retention & export
Events are immutable, signed at write time, retained for 7 years (SAMA aligned). Export filtered slices as CSV directly from the toolbar.
Users
Profile management, role assignment, MFA, activity timeline.
User list
Searchable, filterable list of every active person in DMS. Each row shows name, role(s), team, MFA status, and last active. Status toggles flip a user between active / suspended / off-boarded.
User profile drawer
- Identity — name, email, phone, IQAMA, employer ID.
- Roles — assign one or more (see Roles & Permissions).
- MFA — enable TOTP / SMS factors.
- Activity timeline — recent logins, decisions made, edits performed.
Off-boarding
One click: revoke all roles, terminate active sessions, rotate keys, archive activity. The user remains in Audit Logs forever for compliance, but cannot sign in.
Roles & Permissions
Granular, module-by-module access control with an animated coverage ring.
Permission matrix
A grid of modules × actions. For each role, toggle which actions are allowed:
| Action | What it grants |
|---|---|
read | View pages and data in the module. |
create | Add new entities (rules, connections, users…). |
update | Edit existing entities. |
delete | Soft-delete or archive entities. |
activate | Promote drafts to live (policies, versions). |
export | Pull data out as CSV/PDF/JSON. |
decide | Take queue decisions (approve, decline, info). |
Built-in roles
Glossary
Keyboard shortcuts
| Action | Shortcut |
|---|---|
| Open global nav search | ⌘ K |
| Jump to Dashboard | ⌘ 1 |
| Jump to Rule Engine | ⌘ 2 |
| Jump to Rule Flow | ⌘ 3 |
| Jump to AI Advisor | ⌘ 4 |
| Jump to Input & Schema | ⌘ 5 |
| Jump to Decisioning Studio | ⌘ 6 |
| Jump to Pricing Studio | ⌘ 7 |
| Jump to Decision Replay | ⌘ 8 |
| Jump to Policy Versioning | ⌘ 9 |
| Jump to Audit Logs | ⌘ 0 |
| Focus the docs search | / |
| Close any modal / overlay | Esc |
Changelog
- v1.0.0Audit Logs rebuilt as forensic ledger with live streaming, filters, inspector pane, and CSV export.
- v1.0.0Policy Versioning rebuilt with multi-version history, simulator, and AI-authored badges.
- v1.0.0Underwriter Queue tactical cockpit with radar plotting and live SLA rings.
- v0.9Comms Studio pivoted from customer marketing to internal alerting.
- v0.9Users + Roles & Permissions introduced with permission matrix and animated coverage ring.
- v0.8Pricing Studio aligned to BRD Pricing Calculation V.3; card-based product selector.
- v0.8Decisioning Studio built from PF RAC and Scorecard V2 with three modes.
- v0.7Decision Replay added with forensic trace inspector.
- v0.7Input & Schema revamped with connection types and alias mapping.
- v0.6AI Advisor introduced with Preview Impact popup.