The account is a graph.
You are its architect.
As the SOA Senior, you design the statement of account templates — called patterns — that the Junior SOA will instantiate on real contracts. A pattern is a DAG of accounting line items, each connected to the Manager's quantitative work.
Your role in the chain
Six roles — one direction. The SOA module sits at the end of the chain, translating actuarial work into financial accounts.
Patterns sidebar
The left sidebar lists all your SOA patterns. Each pattern is a reusable template for a statement of account.
Use the search box to filter patterns by name or identifier. Click + New pattern to create one — give it a descriptive label (e.g. "XL Treaty Statement v1", "Quota Share — Annual").
A ♻ badge next to a pattern name indicates a detected cycle — that pattern cannot be instantiated by the Junior until the cycle is fixed. A small instance counter (e.g. 3×) shows how many active SOA instances reference this pattern.
SOA Link Types are also managed from this section — they define the accounting role of each node and link in a pattern (HEADER, DETAIL, SUBTOTAL, TOTAL, OFFSET, NOTE). Access them via the SOA Link Types item directly below the pattern list in the sidebar.
Building a SOA pattern
A pattern is a Directed Acyclic Graph of accounting line items. Each node represents one line of the statement. Links encode the hierarchical structure (detail → subtotal → total).
Keyboard shortcuts
| Key | Action |
|---|---|
| Ctrl/Cmd + S | Save current pattern |
| Delete / Backspace | Delete selected node or link |
| Scroll wheel | Zoom in / out |
| Drag on canvas | Pan the view |
| Double-click canvas | Add node at cursor |
SOA link types
Every node and every link in a SOA pattern carries a link type — its accounting role in the statement. This replaces the computational operands used by the Actuary.
You can extend the list from 🏷 SOA Link Types in the sidebar. New codes are immediately available in the node editor. Deleting a code is blocked if any node or link still uses it.
Inspector panel
Clicking a node opens the inspector on the right — two tabs for a selected node.
| Tab | What you do here |
|---|---|
| Properties | Edit the node label, link type, and value type. Click Apply to update the in-memory state — then Save (toolbar) to persist. |
| Dimensions | Add or remove documentary dimension attachments. Each dimension you attach becomes a fill form the Junior SOA must complete for this line item. |
Clicking a link opens the inspector with a link type selector — change the link type and click Apply.
Clicking the pattern background (no node selected) shows the pattern inspector: linked clauses, treaty type restrictions, instance count, and quick-action buttons (rename, edit clauses, edit treaty types, delete).
FORMULA nodes — the bridge to Manager data
A FORMULA node is a special line item whose value is not entered by the Junior SOA directly — instead, the Junior cites a specific node from a Manager graph instance.
How to create a FORMULA node
What the Junior SOA does with FORMULA nodes
When the Junior opens a FORMULA node, a three-group picker appears — Same contract, Same treaty type, Same clause. The Junior selects the relevant Manager graph and the specific node whose output feeds this account line. The reference is stored as a JSON citation — no value is copied, only the pointer.
IF / THEN / ELSE link operands
When a SOA pattern node is wired to an Actuary graph node of type CONDITION, three specialised link operands structure the conditional relationship explicitly.
Prior to patch 035, CONDITION nodes used the generic ARGUMENT operand for all parents, making the graphical intent ambiguous. The three dedicated operands below replace ARGUMENT on CONDITION links and make the predicate logic immediately legible on the canvas.
When are these operands relevant for SOA Senior?
As a SOA Senior, you do not build Actuary graphs — but you wire FORMULA nodes to their Manager counterparts, which themselves reference Actuary graph outputs. Understanding what a CONDITION node produces helps you label the corresponding FORMULA line item accurately in the statement.
A typical example: a Profit Commission Payable after Loss Corridor FORMULA node should cite the output of a CONDITION node in the Actuary graph. That CONDITION evaluates a loss corridor threshold — the IF parent is the test, the THEN parent is the commission if the corridor is cleared, the ELSE parent is zero. Your FORMULA line captures the result of that branching.
THRESHOLD nodes
A THRESHOLD node (orange, introduced in patch 035) is a leaf node representing a single bound — a floor, cap, attachment point, or trigger. It is always a parent of a CONDITION or LOOKUP node. THRESHOLD nodes do not appear directly as FORMULA targets in SOA patterns: they are intermediate inputs in the Actuary graph, not output quantities. Do not create FORMULA lines that cite THRESHOLD nodes.
Dimensions
Dimensions are documentary axes — optional fill forms attached to pattern nodes. The SOA Senior can attach any dimension from the tenant's catalogue to any node.
The dimension catalogue is owned by the Senior Underwriter and is shared across all profiles. A dedicated SOA dimension category is provisioned at tenant creation with three bootstrap axes: Periodicity, Share, and Counterpart — the most common documentary context for a statement line.
| Bootstrap dimension | Typical use on a SOA node |
|---|---|
| PERIODICITY | Quarterly / annual / adjustment / supplementary — the accounting cycle for this line |
| SHARE | 100% / reinsurer's share / cedant's share — the applicable proportion |
| COUNTERPART | Reinsurer / broker — the paying or receiving party |
Pattern restrictions
Two optional restrictions help the Junior SOA find the right pattern for each contract.
Linked clauses
A pattern can be anchored to one or more validated clauses (e.g. "XL reinstatement clause"). This is informational — it signals which clause family this pattern was designed for. The restriction is not enforced at instanciation.
To manage: click 🔗 Clauses in the toolbar, or use the pattern inspector's Edit linked clauses button.
Treaty type restrictions
If you restrict a pattern to one or more treaty types (e.g. TREATY_XL), the Junior's instance creation screen shows a compatibility badge — ✓ Compatible or ⚠ Mismatch. A mismatch is a warning, not a block — the Junior can still proceed.
Leave all treaty types unchecked to make the pattern universal — applicable to any contract regardless of treaty type.
To manage: click 📋 Treaty types in the toolbar, or use the pattern inspector.
Cycle detection
A DAG must be acyclic — no line item can be its own ancestor. RI-TOOL detects cycles automatically on every save.
If a cycle is found, an orange banner appears at the top of the editor and the pattern row in the sidebar shows a ♻ cycle badge. The pattern is still saved but is flagged as non-instantiable.
Pattern Explorer
A production-level view of all your patterns — filterable by instance status and cycle flag.
Click 🔭 Pattern Explorer in the sidebar to open the fullscreen view. Each card shows the pattern identifier, label, node count, dimension coverage percentage, and instance count. Click a card to jump directly to that pattern in the editor.
Dimension coverage
Coverage is the percentage of nodes that have at least one dimension attached. 🧩 80% means 80% of nodes have documentation requirements. A pattern with 0% coverage is valid but produces no fill form for the Junior.
Data Checks
Live SQL queries on your tenant data — accessible from 📊 Data Checks in the sidebar.
| View | What it shows |
|---|---|
| SOA Templates — overview | All patterns with node count, FORMULA nodes, instance count, treaty types and linked clauses |
| FORMULA nodes — unwired | FORMULA nodes that have no Manager citation saved by the SOA Junior — wiring gaps to follow up on |
| Dimension coverage by node | All nodes with their attached dimensions and instruction count — useful for coverage audit |
Each view has a ▶ Run button. Results display inline with a ⬇ Download CSV link for full export.
Maintenance
Four cleanup checks accessible from the sidebar. Always diagnose before executing — execution is irreversible.
| Code | What it cleans | Risk |
|---|---|---|
| S1 | Patterns with no nodes — empty shells left from aborted creation | Low |
| S2 | Patterns with a detected cycle — diagnostic only, no deletion. Fix manually in the editor. | Medium |
| S3 | Orphan nodes whose parent pattern was deleted outside normal flow | Medium |
| S4 | Orphan dimension attachments whose node or dimension was deleted | Low |
Recommended order: S1 → S3 → S4. S2 is a read-only diagnostic — it highlights cycles to fix manually, it does not delete anything.