SOA Senior — Pattern Editor

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.

📊 DAG patterns
🏷 6 link types
🔗 FORMULA nodes
🧩 Dimensions
📌 Treaty restrictions

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.

Junior
Clause creation
Structures clause text into typed clauses
Senior
Validation
Validates clauses, dimensions, treaty types
Actuary
DAG formalisation
Encodes clauses as computation graphs
Manager
Instanciation
Instantiates graphs on contracts, fills values
SOA Senior — you
Pattern design
Designs the statement of account DAG — wires FORMULA nodes to Manager outputs
SOA Junior
Statement production
Instantiates your pattern on contracts
💡
You do not enter financial values. You build the presentation structure. The Junior SOA fills in the references to Manager data. The actual figures come from the Manager's graph instances.

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. ) 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.

🔒
Instantiated patterns are frozen. Once the Junior creates an instance from your pattern, you cannot change the pattern's node/link structure. Create a new version (new label) to amend the structure for future instances.

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).

1
Select a pattern
Click a pattern in the sidebar to load it into the canvas. If the canvas is empty, the pattern has no nodes yet.
2
Add nodes
Click + Node in the toolbar (or double-click the canvas). Fill in the label, accounting link type, and value type. Click Add node.
3
Connect nodes
Hover a node until the output port appears at its bottom edge, then drag to a target node. A prompt asks for the link type (DETAIL, SUBTOTAL, etc.).
4
Attach dimensions (optional)
Select a node → open the Dimensions tab in the inspector → add dimensions the Junior SOA should document for this line item.
5
Save
Click 💾 Save. The entire pattern is written atomically. Cycle detection runs on every save.
⚠️
Unsaved changes exist only in the browser. Navigating away or refreshing without saving loses your work. The header shows ● unsaved / ✓ saved at all times.

Keyboard shortcuts

KeyAction
Ctrl/Cmd + SSave current pattern
Delete / BackspaceDelete selected node or link
Scroll wheelZoom in / out
Drag on canvasPan the view
Double-click canvasAdd 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.

HEADER
Section title or major heading — no value, purely structural.
DETAIL
Individual line item. Feeds into a SUBTOTAL or TOTAL.
SUBTOTAL
Intermediate sum of DETAIL lines within a section.
TOTAL
Final balance — the bottom line of the account or a major section.
OFFSET
Contra-item — reduces or adjusts an adjacent line (e.g. deposit offset).
NOTE
Informational annotation — visible in the account but not part of the computation.

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.

💡
Node colour = link type. The canvas renders each node with the colour of its link type — HEADER in navy, DETAIL in blue, SUBTOTAL in green, TOTAL in dark green, OFFSET in orange, NOTE in grey. This makes the account structure instantly legible at a glance.

Inspector panel

Clicking a node opens the inspector on the right — two tabs for a selected node.

TabWhat you do here
PropertiesEdit the node label, link type, and value type. Click Apply to update the in-memory state — then Save (toolbar) to persist.
DimensionsAdd 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.

🔗 The reconciliation signal
The FORMULA wiring is an act of reconciliation between the actuarial domain and accounting reality. If a line item in the statement cannot find its landing node in the Manager's graphs, the tool reveals the misalignment — what the actuary modelled and what the account requires are out of sync. RI-TOOL makes that gap visible.

How to create a FORMULA node

1
Add a node
Click + Node. Set the label (e.g. "Net Retained Loss"), choose an appropriate link type (usually DETAIL), and set the value type to FORMULA.
2
Save
Save the pattern. The node appears with a dashed border and a 🔗 icon on the canvas — ready for the SOA Junior to cite a Manager graph node.
💡
One FORMULA node per Manager quantity. If the account has two separate reinforcement premiums (e.g. free and paid reinstatement), create two FORMULA nodes — each will be cited independently by the Junior.

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.

📊
Two ready-made templates ship with every new account
PC Standard and PC Sliding Scale — 21 nodes, 14 FORMULA links wired to the live Profit Commission actuary graphs. Ready to instantiate on day one.

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.

IF
The predicate being evaluated. Exactly one IF parent per CONDITION node. Rendered in violet.
THEN
Value returned when the predicate is true. Rendered in green.
ELSE
Value returned when the predicate is false. Can be a CONSTANT(0) for a zero floor. Rendered in red.

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.

💡
One CONDITION = one binary outcome. If the account requires two separate lines for "above corridor" and "below corridor" scenarios, model them as two separate FORMULA nodes — each citing a different branch of the Actuary graph, not the CONDITION node itself.

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.

💡
FORMULA nodes and dimensions are independent. You can attach documentary dimensions (Periodicity, Share, Counterpart…) to a FORMULA node just like any other node. The FORMULA citation itself is stored separately — it is managed by the SOA Junior via the node picker, not through the dimension system.
Bootstrap dimensionTypical use on a SOA node
PERIODICITYQuarterly / annual / adjustment / supplementary — the accounting cycle for this line
SHARE100% / reinsurer's share / cedant's share — the applicable proportion
COUNTERPARTReinsurer / broker — the paying or receiving party
💡
Dimensions are optional but powerful. A TOTAL node rarely needs documentation; a DETAIL node feeding a premium line almost always benefits from PERIODICITY and SHARE. Use judgment — fewer, well-chosen dimensions are better than a form overload.

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.

⚠️
Detection is non-blocking. Find the node that feeds back into one of its own ancestors, remove the offending link, and save again. The cycle flag clears automatically.

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.

ViewWhat it shows
SOA Templates — overviewAll patterns with node count, FORMULA nodes, instance count, treaty types and linked clauses
FORMULA nodes — unwiredFORMULA nodes that have no Manager citation saved by the SOA Junior — wiring gaps to follow up on
Dimension coverage by nodeAll 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.

CodeWhat it cleansRisk
S1Patterns with no nodes — empty shells left from aborted creationLow
S2Patterns with a detected cycle — diagnostic only, no deletion. Fix manually in the editor.Medium
S3Orphan nodes whose parent pattern was deleted outside normal flowMedium
S4Orphan dimension attachments whose node or dimension was deletedLow

Recommended order: S1 → S3 → S4. S2 is a read-only diagnostic — it highlights cycles to fix manually, it does not delete anything.