Actuary — DAG Editor

You can model anything.
You just have to learn how.

As the Actuary, you are the architect of the logic engine. You don't write formulas — you build graphs. Each graph is a precise, unambiguous representation of a clause that the Manager can apply to real contracts.

🕸️ DAG graphs
🔵 10 node types
➡️ 6 link types
🧩 Dimensions
🔗 External parents
👻 Phantom nodes

Your role in the chain

Four roles — one direction. Each step unlocks the next.

StepProfileWhat they doWhat you receive
1JuniorDeconstructs clause text — creates structured clauses with wording, family, treaty types, dependenciesClauses in draft
2SeniorValidates clauses and designs the dimension catalogue — axes you will attach to graph nodesValidated clauses + dimension palette
3Actuary ← youBuilds DAG graphs per validated clause. Attaches dimensions node by node. Links graphs across clauses.Graphs ready for Manager
4ManagerCreates contracts, instantiates a graph, fills in dimension values per node
💡
You only see validated clauses. If a clause is missing, the Senior must validate it first. You cannot modify clause content.

Building a DAG

A Directed Acyclic Graph encodes the computational logic of a clause as a traversable structure of nodes and directed links.

A reinsurance clause contains nested formulas — "net retained loss, net of recoveries, in excess of the retention, capped at the limit." Each element becomes a node. Each dependency becomes a directed link. The root node holds the clause's final value.

The graph is not a calculator. It is a documentation structure. The Manager reads it, understands exactly what to fill in, and the result is an unambiguous record of the clause's parametrisation on a contract.

Workflow

1
Select a graph in the sidebar
Click a graph row to load it into the canvas. The canvas area is a pan-and-zoom SVG editor. Use the toolbar to fit the view, add nodes, save, or export CSV.
2
Add nodes
Click + Node in the toolbar. A temporary node appears on the canvas and the right-hand inspector opens on its Properties tab. Set label, operand, and value type, then click Apply.
3
Draw links
Hover a node until the edge handle appears at its border, then drag to a target node. A link is created and an operand selector appears — choose PLUS, MINUS, FACTOR, etc.
4
Attach dimensions
Select a node, open the Dimensions tab in the inspector, and click + Add dimension to pin documentary axes to this node.
5
Save
Click 💾 Save in the toolbar. The entire graph — nodes, links, dimension attachments — is written atomically. The state badge switches to ✓ saved.
⚠️
Save is all-or-nothing. Unsaved changes exist only in the browser. Refreshing without saving loses your work.

Inspector panel

Clicking any node opens the inspector on the right — three tabs, one node at a time.

Properties
Dimensions
Ext. links
TabWhat you do here
PropertiesSet the node label, operand, and value type. Click Apply to confirm — changes are local until you save the graph.
DimensionsAdd or remove documentary dimension attachments. Each dimension you attach here becomes a fill form the Manager must complete for this node.
Ext. linksManage incoming contributions from nodes in other graphs. See the External parents section for the full workflow.
💡
Apply vs Save. Apply commits changes to the in-memory graph state. Save (toolbar) writes the entire graph to the database. Always Save after Apply.

Node operands

The operand defines the role of a node and determines how it is rendered — colour and border style.

INPUT
Value entered by the Manager at instantiation time. Leaf node — no parents. Dashed border. Primary documentation target.
CONSTANT
Fixed contractual value set at graph construction time. Not filled in by the Manager. Use for rates, thresholds, caps, counts — any value fixed by the clause wording.
SUM
Additive aggregation. Accepts PLUS and MINUS parents. Most common aggregation node.
DIFFERENCE
Explicit subtraction — a base reduced by one or more deductions.
PRODUCT
Multiplication of parent nodes. Models rate × base patterns.
QUOTIENT
Division. Expects exactly one NUMERATOR parent and one DENOMINATOR parent.
IF
Evaluates an expression formed by its incoming links. The expression and its comparison operator are documented in the node label (e.g. "Loss Ratio ≤ 85%"). Emits to exactly one THEN and one ELSE via FACTOR links.
THEN
Value returned when the IF condition is true. Receives the result value from its sources and a routing link from IF via FACTOR.
ELSE
Value returned when the IF condition is false. Same structure as THEN. Can receive a CONSTANT (e.g. zero) when the false branch yields nothing.
LOOKUP
Reads a value from a scale or schedule (sliding scale, reinstatement table). Receives the lookup key via an ARGUMENT parent; returns the corresponding value. Attach the Table dimension to document the schedule.
RESULT
Terminal output node of a graph. Documents the final computed value and serves as the SUBGRAPH hook for cross-graph links. Every graph should end with a RESULT node.
💡
INPUT and CONSTANT are always leaves. They never have parents. Every other node must have at least one parent — otherwise the Manager has nothing to aggregate at that node.
💡
IF / THEN / ELSE are node types, not link types. The condition is the label of the IF node. Incoming links to IF use the same operands as any other node (PLUS for addition, FACTOR for multiplication…). IF always emits to THEN and ELSE via FACTOR links.

Every node must have a value type — the kind of value the Manager will enter: amount, percentage, duration, count, etc. Value types are configured by the Senior.

🔬
All these operands, live in your account from day one
The Profit Commission example ships with every new account — 5 graphs, 46 nodes, covering bottom-up cascade, sliding scale, loss corridor, carry-forward sub-graph and LOOKUP.

Dimensions — the creative engine

Dimensions are why RI-TOOL adapts to any organisation without imposing a template. This is where your tenant's identity lives.

🎯
The dimension system is RI-TOOL's core differentiator. Two tenants formalising the same clause can use completely different axes, different granularity, different instructions — and both will be exactly right for their own organisation.

Four layers, three roles

Senior
Categories + Dimensions
Creates named dimension categories and the dimensions themselves, each with fill instructions the Manager will follow line by line.
Actuary — you
Node attachments
Pins specific dimensions onto specific nodes via the Dimensions tab of the inspector. One decision per node: what must the Manager document here?
Manager
Filled values
Fills one value per node × dimension × instruction line. Result: a fully documented clause instance on a contract.

Attaching a dimension to a node

Select a node → open the Dimensions tab → click + Add dimension → choose from the catalogue built by the Senior. The attachment is local until you save the graph. You can attach multiple dimensions to the same node.

💡
Instructions are the Manager's form. A dimension Amount with three instructions produces three fill fields per attached node. The Senior controls the granularity; you decide where to apply it.

Typical attachment choices by node type

Node typeTypical dimension choicesReasoning
INPUT (amount)Currency + Risk + TimeLeaf values are the primary documentation target — always contextualise them.
INPUT (date / count)Temporal (event window) or Time (period)Dates and day counts document the temporal scope of the value.
INPUT (market rate)Time (fixing period)A market rate is always associated with an observation period.
CONSTANT (rate)Rate + Table (if sliding scale)Document the contractual rate and any associated scale.
SUM (event aggregate)Peril + Spatial + TemporalThe Cat event aggregate is defined by its peril, geographic boundary and time window.
SUM / DIFFERENCE (other)Amount (result) — optionally scope axes if context changesAggregation nodes may need a result annotation; context is usually inherited from children.
IF / THEN / ELSEUsually none — logic lives in the label and link structureAttach a dimension only if the condition itself needs documentary context.
LOOKUPTable (the schedule)The schedule lives in the Table dimension; the key is documented on the ARGUMENT parent.
RESULTUsually none — context lives upstreamTerminal node — documentation is on the nodes feeding it.
PRODUCT / QUOTIENTUsually noneStructural nodes — documentation is on INPUT/CONSTANT parents.

The protection chain

The platform prevents silent data loss in both directions. You cannot remove a dimension attachment if the Manager has already filled values against it. The Senior cannot delete a dimension you have attached to a node. Every layer protects the one below it.

Cycle detection

A DAG must be acyclic — no node can be its own ancestor. RI-TOOL detects cycles automatically on every save.

After saving, the platform checks the full graph structure. If a cycle is found, an orange banner appears at the top of the editor and the graph row in the sidebar shows a ♻ cycle badge.

⚠️
Detection is non-blocking. A cyclic graph is still saved — but is semantically invalid and the Manager cannot instantiate it. Fix before use: find the node feeding back into one of its own ancestors, remove the offending link, resave.

Instance lock

Once a Manager instantiates a graph on a contract, that graph's structure is frozen.

The platform blocks any structural modification to an instantiated graph — you cannot save changes or delete it. This protects the Manager's existing data entry from silent invalidation.

🔒
Need to amend an instantiated graph? Create a new version. Use + Graph on the same clause with a new label (e.g. "Net Retained Loss v2"). The Manager instantiates the new version on future contracts; existing contracts keep the original.

Graph Explorer

A production-level view of all your graphs in one place — filterable, inspectable, and exportable.

Click 🔭 Graph Explorer in the Analytics section of the sidebar to open the fullscreen explorer. The inspector panel on the right stays visible throughout — click any card to load its detail.

Filter bar

Six combinable filters apply in real time:

FilterWhat it targets
Clause FamilyFamily of the clause linked to the graph (from the tenant's reference list)
Clause StatusValidation status of the clause — e.g. filter to VALIDATED only
Treaty TypeAny treaty type code associated with the clause
InstancesInstanced (≥ 1 active Manager instance) or Not instanced
CycleGraphs flagged with a reference cycle by the last save
DimensionsCoverage level — Full (100%), Partial, No coverage, or Empty graph (no nodes)

Use ↺ Reset filters to clear all at once. Filter state is persisted in localStorage and restored on your next visit.

Cards and inspector

Each card shows the graph id and label, its clause, and a row of semantic badges — node count, instance count, cycle flag, inter-graph links, and dimension coverage percentage with colour coding. Click a card to load the full detail in the right-hand inspector: graph identity, clause wording, treaty type pills, and a visual coverage bar.

From the inspector, click ↗ Open in DAG editor to jump directly to that graph on the canvas.

Export

The ⬇ Export CSV button in the Explorer header exports the currently filtered view as a CSV — not all graphs, only what the active filters show. Columns: graph id, label, clause id, clause title, clause family, clause status, treaty types (pipe-separated), node count, nodes with dimensions, dimension coverage %, instance count, inter-graph links, cycle flag.

💡
Explorer data is loaded once per session and cached. If you make structural changes in the DAG editor and return to the Explorer, refresh the page to reload.

Data Checks

Live queries on your tenant data, each exportable as CSV — accessible from the Analytics section of the sidebar.

Click 📊 Data Checks to open the fullscreen panel. Each configured view shows a description and a ▶ Run button. Results display as a paginated table with a ⬇ Download CSV link. The DAG toolbar also offers a per-graph ⬇ CSV export of the current graph's nodes and links.

Maintenance

Four cleanup operations accessible from the sidebar footer. Always run the diagnostic first — it shows exactly what will be removed without touching anything.

⚠️
All purge operations are irreversible. Review the diagnostic list carefully before confirming.
CodeWhat it cleansWhen it occurs
A1Nodes whose parent graph was deleted — cascades to their links and dimension attachmentsGraph deleted outside normal flow
A2Orphan intra-graph links whose parent or child node no longer existsNode deleted but links not cascaded
A3Ghost inter-graph links pointing to a deleted graph (parent or child side)A graph involved in a cross-link was deleted
A4Orphan dimension attachments (node or dimension deleted) — may also remove associated Manager valuesNode or dimension deleted leaving stale attachments

Recommended order: A1 → A2 → A3 → A4. Running A1 first eliminates nodes whose links A2 and A3 would otherwise also catch.