{ "version": "1.0", "documentMetadata": { "status": "Draft", "statusChangedAt": "2026-03-27T12:00:00.000Z", "statusChangedBy": "system", "statusHistory": [ { "timestamp": "2026-03-27T12:00:00.000Z", "oldStatus": "Draft", "newStatus": "Draft", "changedBy": "system", "reason": "Document created", "metadata": {} } ] }, "classes": [], "instances": [ { "id": "node_1_1774800000001", "class": "Entity", "x": 88, "y": 16, "values": {}, "about": { "displayName": "Lead", "logicalName": "lead", "description": "Entry point of the revenue funnel. Represents a prospective customer contact or inbound inquiry before qualification. A Lead that passes qualification criteria is converted to an Opportunity.", "prompt": "Generate a `leads` table with these exact columns. This table is the entry point of the revenue funnel. Indexes: (status, owner_role_id), (created_date DESC), (estimated_value DESC). status enum: 'new' | 'in-progress' | 'qualified' | 'unqualified' | 'disqualified'. FK: owner_role_id → owner_roles.role_id. Create a trigger to write to transition_links when status changes to 'qualified' (fromStageId=lead, toStageId=opportunity, transitionType='normal') or 'disqualified' (transitionType='leak')." }, "schema": [ { "typeName": "leadId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Lead ID (PK)" }, { "typeName": "title", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Title / Lead Name" }, { "typeName": "source", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Lead Source" }, { "typeName": "contactName", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Contact Name" }, { "typeName": "contactEmail", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Contact Email" }, { "typeName": "estimatedValue", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Estimated Value" }, { "typeName": "currency", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Currency (ISO 4217)" }, { "typeName": "status", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Status" }, { "typeName": "qualificationScore", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Qualification Score (0–100)" }, { "typeName": "ownerRoleId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Owner Role ID (FK)" }, { "typeName": "createdDate", "typeOrigin": "datetime", "typeLevel": 5, "required": true, "displayLabel": "Created Date" }, { "typeName": "updatedDate", "typeOrigin": "datetime", "typeLevel": 5, "required": false, "displayLabel": "Updated Date" } ], "width": 380, "height": 373 }, { "id": "node_2_1774800000002", "class": "Entity", "x": 728, "y": 16, "values": {}, "about": { "displayName": "Opportunity", "logicalName": "opportunity", "description": "A qualified sales opportunity with an estimated value, close date, and conversion probability. Represents the revenue at stake for a specific deal.", "prompt": "Generate an `opportunities` table with these columns. FK: lead_id → leads.lead_id (nullable — opportunities not always sourced from a tracked lead), owner_role_id → owner_roles.role_id. Indexes: (status, close_date), (owner_role_id), (estimated_value DESC). status enum: 'in-progress' | 'won' | 'lost' | 'on-hold'. Write to transition_links on status change (won→proposal=normal, lost=leak with leakage_amount=estimated_value)." }, "schema": [ { "typeName": "opportunityId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Opportunity ID (PK)" }, { "typeName": "leadId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Lead ID (FK, nullable)" }, { "typeName": "name", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Opportunity Name" }, { "typeName": "description", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Description" }, { "typeName": "estimatedValue", "typeOrigin": "decimal", "typeLevel": 5, "required": true, "displayLabel": "Estimated Value" }, { "typeName": "probability", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Win Probability (0–1)" }, { "typeName": "closeDate", "typeOrigin": "date", "typeLevel": 5, "required": false, "displayLabel": "Expected Close Date" }, { "typeName": "stage", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Sales Stage" }, { "typeName": "status", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Status" }, { "typeName": "ownerRoleId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Owner Role ID (FK)" }, { "typeName": "createdDate", "typeOrigin": "datetime", "typeLevel": 5, "required": true, "displayLabel": "Created Date" }, { "typeName": "updatedDate", "typeOrigin": "datetime", "typeLevel": 5, "required": false, "displayLabel": "Updated Date" } ], "width": 380, "height": 373 }, { "id": "node_3_1774800000003", "class": "Entity", "x": 1368, "y": 16, "values": {}, "about": { "displayName": "Proposal", "logicalName": "proposal", "description": "A formal commercial proposal presented to a potential client. Contains the proposed value, terms, and validity window. Multiple revisions can exist per Opportunity.", "prompt": "Generate a `proposals` table. FK: opportunity_id → opportunities.opportunity_id, owner_role_id → owner_roles.role_id. status enum: 'draft' | 'sent' | 'accepted' | 'rejected' | 'expired'. A proposal is only revenue-positive if accepted (converts to Contract). rejected and expired proposals write to transition_links as transitionType='leak'. Index on: (opportunity_id, status), (valid_until WHERE status='sent')." }, "schema": [ { "typeName": "proposalId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Proposal ID (PK)" }, { "typeName": "opportunityId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Opportunity ID (FK)" }, { "typeName": "title", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Proposal Title" }, { "typeName": "proposedValue", "typeOrigin": "decimal", "typeLevel": 5, "required": true, "displayLabel": "Proposed Value" }, { "typeName": "currency", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Currency (ISO 4217)" }, { "typeName": "validUntil", "typeOrigin": "date", "typeLevel": 5, "required": false, "displayLabel": "Valid Until" }, { "typeName": "revisionNumber", "typeOrigin": "number", "typeLevel": 5, "required": false, "displayLabel": "Revision Number" }, { "typeName": "status", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Status" }, { "typeName": "terms", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Terms Summary" }, { "typeName": "ownerRoleId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Owner Role ID (FK)" }, { "typeName": "createdDate", "typeOrigin": "datetime", "typeLevel": 5, "required": true, "displayLabel": "Created Date" }, { "typeName": "updatedDate", "typeOrigin": "datetime", "typeLevel": 5, "required": false, "displayLabel": "Updated Date" } ], "width": 380, "height": 373 }, { "id": "node_4_1774800000004", "class": "Entity", "x": 2008, "y": 16, "values": {}, "about": { "displayName": "Contract", "logicalName": "contract", "description": "A legally binding agreement between the organization and a client. Defines total contract value, duration, and service terms. Anchors the revenue commitment for the Delivery stage.", "prompt": "Generate a `contracts` table. FK: proposal_id → proposals.proposal_id (nullable — contracts may be created manually), owner_role_id → owner_roles.role_id. status enum: 'draft' | 'active' | 'pending-renewal' | 'expired' | 'terminated'. Contracts terminated before natural end_date write a TransitionLink with transitionType='leak' and leakage_amount = remaining contract value. Index on: (status, end_date), (total_value DESC)." }, "schema": [ { "typeName": "contractId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Contract ID (PK)" }, { "typeName": "proposalId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Proposal ID (FK, nullable)" }, { "typeName": "contractNumber", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Contract Number" }, { "typeName": "totalValue", "typeOrigin": "decimal", "typeLevel": 5, "required": true, "displayLabel": "Total Contract Value" }, { "typeName": "currency", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Currency (ISO 4217)" }, { "typeName": "startDate", "typeOrigin": "date", "typeLevel": 5, "required": true, "displayLabel": "Start Date" }, { "typeName": "endDate", "typeOrigin": "date", "typeLevel": 5, "required": false, "displayLabel": "End Date" }, { "typeName": "status", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Status" }, { "typeName": "terms", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Terms Summary" }, { "typeName": "ownerRoleId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Owner Role ID (FK)" }, { "typeName": "createdDate", "typeOrigin": "datetime", "typeLevel": 5, "required": true, "displayLabel": "Created Date" }, { "typeName": "updatedDate", "typeOrigin": "datetime", "typeLevel": 5, "required": false, "displayLabel": "Updated Date" } ], "width": 380, "height": 373 }, { "id": "node_5_1774800000005", "class": "Entity", "x": 2648, "y": 16, "values": {}, "about": { "displayName": "Delivery", "logicalName": "delivery", "description": "A deliverable item or milestone under a Contract. Tracks what was promised vs delivered, and captures friction events (delays, quality issues) that represent process leakage.", "prompt": "Generate a `deliveries` table. FK: contract_id → contracts.contract_id, friction_type_id → friction_types.friction_type_id (nullable), leakage_category_id → leakage_categories.category_id (nullable), owner_role_id → owner_roles.role_id. status enum: 'scheduled' | 'in-progress' | 'complete' | 'delayed' | 'cancelled'. Non-null friction_type_id or leakage_category_id indicates a process friction or leakage event at this delivery. Index on: (contract_id, status), (actual_delivery_date), (leakage_category_id) WHERE NOT NULL." }, "schema": [ { "typeName": "deliveryId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Delivery ID (PK)" }, { "typeName": "contractId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Contract ID (FK)" }, { "typeName": "description", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Delivery Description" }, { "typeName": "scheduledDate", "typeOrigin": "date", "typeLevel": 5, "required": false, "displayLabel": "Scheduled Delivery Date" }, { "typeName": "actualDeliveryDate", "typeOrigin": "date", "typeLevel": 5, "required": false, "displayLabel": "Actual Delivery Date" }, { "typeName": "deliveredValue", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Delivered Value" }, { "typeName": "status", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Status" }, { "typeName": "frictionTypeId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Friction Type ID (FK, nullable)" }, { "typeName": "leakageCategoryId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Leakage Category ID (FK, nullable)" }, { "typeName": "ownerRoleId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Owner Role ID (FK)" }, { "typeName": "createdDate", "typeOrigin": "datetime", "typeLevel": 5, "required": true, "displayLabel": "Created Date" }, { "typeName": "updatedDate", "typeOrigin": "datetime", "typeLevel": 5, "required": false, "displayLabel": "Updated Date" } ], "width": 380, "height": 373 }, { "id": "node_6_1774800000006", "class": "Entity", "x": 3240, "y": -8, "values": {}, "about": { "displayName": "Invoice", "logicalName": "invoice", "description": "A billing record issued against a Delivery. Tracks invoiced vs paid amounts and payment status. Overdue and disputed invoices are a primary source of invoice-stage revenue leakage.", "prompt": "Generate an `invoices` table. FK: delivery_id → deliveries.delivery_id, leakage_category_id → leakage_categories.category_id (nullable), owner_role_id → owner_roles.role_id. status enum: 'draft' | 'sent' | 'paid' | 'partially-paid' | 'overdue' | 'disputed' | 'written-off'. 'written-off' = terminal leakage; write to transition_links with transitionType='leak', leakage_amount=(invoiced_amount - paid_amount). Partial payments: paid_amount tracks cumulative received. Index on: (status, due_date), (delivery_id), (issue_date DESC)." }, "schema": [ { "typeName": "invoiceId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Invoice ID (PK)" }, { "typeName": "deliveryId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Delivery ID (FK)" }, { "typeName": "invoiceNumber", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Invoice Number" }, { "typeName": "invoicedAmount", "typeOrigin": "decimal", "typeLevel": 5, "required": true, "displayLabel": "Invoiced Amount" }, { "typeName": "paidAmount", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Paid Amount (partial ok)" }, { "typeName": "currency", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Currency (ISO 4217)" }, { "typeName": "issueDate", "typeOrigin": "date", "typeLevel": 5, "required": true, "displayLabel": "Issue Date" }, { "typeName": "dueDate", "typeOrigin": "date", "typeLevel": 5, "required": false, "displayLabel": "Due Date" }, { "typeName": "paidDate", "typeOrigin": "date", "typeLevel": 5, "required": false, "displayLabel": "Paid Date" }, { "typeName": "status", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Status" }, { "typeName": "disputeReason", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Dispute Reason" }, { "typeName": "leakageCategoryId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Leakage Category ID (FK)" }, { "typeName": "ownerRoleId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Owner Role ID (FK)" }, { "typeName": "createdDate", "typeOrigin": "datetime", "typeLevel": 5, "required": true, "displayLabel": "Created Date" }, { "typeName": "updatedDate", "typeOrigin": "datetime", "typeLevel": 5, "required": false, "displayLabel": "Updated Date" } ], "width": 380, "height": 425 }, { "id": "node_7_1774800000007", "class": "Entity", "x": 3856, "y": 32, "values": {}, "about": { "displayName": "Retention", "logicalName": "retention", "description": "Tracks post-invoice customer retention and renewal disposition. Monitors churn risk and captures the value of customer relationships across renewal cycles. Churn at this stage represents the highest-leverage leakage point in the revenue funnel.", "prompt": "Generate a `retentions` table. FK: invoice_id → invoices.invoice_id (nullable), leakage_category_id → leakage_categories.category_id (nullable), owner_role_id → owner_roles.role_id. retention_status enum: 'retained' | 'at-risk' | 'churned' | 'renewed'. 'churned' = terminal leakage event; write to transition_links with transitionType='leak', leakage_amount=renewal_value. churn_risk_score is decimal 0.0–1.0 (ML model output or manual estimate). Index on: (retention_status, next_renewal_date), (customer_id). Recommended analytics view: monthly_churn_rate = COUNT(churned) / COUNT(*) GROUP BY YEAR, MONTH." }, "schema": [ { "typeName": "retentionId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Retention ID (PK)" }, { "typeName": "invoiceId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Invoice ID (FK, nullable)" }, { "typeName": "customerId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Customer ID (FK)" }, { "typeName": "nextRenewalDate", "typeOrigin": "date", "typeLevel": 5, "required": false, "displayLabel": "Next Renewal Date" }, { "typeName": "renewalValue", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Renewal Value" }, { "typeName": "retentionStatus", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Retention Status" }, { "typeName": "churnRiskScore", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Churn Risk Score (0–1)" }, { "typeName": "churnReason", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Churn Reason" }, { "typeName": "leakageCategoryId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Leakage Category ID (FK)" }, { "typeName": "ownerRoleId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Owner Role ID (FK)" }, { "typeName": "createdDate", "typeOrigin": "datetime", "typeLevel": 5, "required": true, "displayLabel": "Created Date" }, { "typeName": "updatedDate", "typeOrigin": "datetime", "typeLevel": 5, "required": false, "displayLabel": "Updated Date" } ], "width": 380, "height": 349 }, { "id": "node_8_1774800000008", "class": "Entity", "x": 88, "y": 712, "values": {}, "about": { "displayName": "SalesFunnelStage", "logicalName": "salesFunnelStage", "description": "Reference lookup table defining the canonical stages of the revenue funnel. Provides normalized stage codes for consistent analytics and funnel reporting.", "prompt": "Generate a `sales_funnel_stages` seed table (reference/lookup). Seed records: {Lead, Opportunity, Proposal, Contract, Delivery, Invoice, Retention} in stage_order 1–7, with is_leak_point=true for Proposal (rejection), Delivery (cancellation), Invoice (write-off), and Retention (churn). This table is referenced by transition_links.from_stage_id and transition_links.to_stage_id — always FK here instead of using raw string literals. expected_duration_days is used for funnel velocity KPI calculations." }, "schema": [ { "typeName": "stageId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Stage ID (PK)" }, { "typeName": "stageName", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Stage Name" }, { "typeName": "stageCode", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Stage Code (unique)" }, { "typeName": "stageOrder", "typeOrigin": "number", "typeLevel": 5, "required": true, "displayLabel": "Stage Order" }, { "typeName": "description", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Description" }, { "typeName": "expectedDurationDays", "typeOrigin": "number", "typeLevel": 5, "required": false, "displayLabel": "Expected Duration (days)" }, { "typeName": "exitCriteria", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Exit Criteria" }, { "typeName": "isLeakPoint", "typeOrigin": "boolean", "typeLevel": 5, "required": false, "displayLabel": "Is Leak Point" } ], "width": 380, "height": 270 }, { "id": "node_9_1774800000009", "class": "Entity", "x": 2888, "y": 656, "values": {}, "about": { "displayName": "LeakageCategory", "logicalName": "leakageCategory", "description": "Classification taxonomy for revenue leakage types. Provides structured categories for analyzing where and why revenue exits the funnel at each stage.", "prompt": "Generate a `leakage_categories` seed table. Seed records: {Pricing Erosion, Scope Creep, Delayed Delivery, Payment Default, Non-Renewal, Proposal Rejection, Disqualified Lead, Contract Termination} — each with leakage_type and severity. Referenced by Delivery.leakage_category_id, Invoice.leakage_category_id, Retention.leakage_category_id. Critical analytics query: SELECT lc.category_name, SUM(tl.leakage_amount) AS total_leakage, COUNT(*) AS event_count FROM transition_links tl JOIN leakage_categories lc ON tl.leakage_category_id = lc.category_id WHERE tl.transition_type='leak' GROUP BY lc.category_name ORDER BY total_leakage DESC." }, "schema": [ { "typeName": "categoryId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Category ID (PK)" }, { "typeName": "categoryName", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Category Name" }, { "typeName": "leakageType", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Leakage Type" }, { "typeName": "severity", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Severity (critical/high/medium/low)" }, { "typeName": "description", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Description" }, { "typeName": "remediationOwner", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Remediation Owner" }, { "typeName": "annualImpactEstimate", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Annual Impact Estimate" } ], "width": 380, "height": 246 }, { "id": "node_10_1774800000010", "class": "Entity", "x": 2400, "y": 664, "values": {}, "about": { "displayName": "FrictionType", "logicalName": "frictionType", "description": "Classification of process friction events. Friction is any obstacle or inefficiency in the delivery process that delays, reduces, or prevents successful revenue conversion.", "prompt": "Generate a `friction_types` seed table. Seed: {Approval Delay, Contract Rework, Integration Failure, Resource Constraint, Compliance Hold, Payment Process Error, Stakeholder Misalignment, Scope Change}. Referenced by Delivery.friction_type_id and contextually via TransitionLink.friction_score. Analytics: SELECT ft.friction_name, AVG(tl.friction_score) AS avg_friction, COUNT(*) AS events FROM transition_links tl JOIN deliveries d ON d.delivery_id = tl.source_entity_id JOIN friction_types ft ON d.friction_type_id = ft.friction_type_id GROUP BY ft.friction_name ORDER BY avg_friction DESC." }, "schema": [ { "typeName": "frictionTypeId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Friction Type ID (PK)" }, { "typeName": "frictionName", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Friction Name" }, { "typeName": "frictionCategory", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Category (internal/external/systemic)" }, { "typeName": "impactLevel", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Impact Level (high/medium/low)" }, { "typeName": "description", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Description" }, { "typeName": "mitigationStrategy", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Mitigation Strategy" } ], "width": 380, "height": 222 }, { "id": "node_11_1774800000011", "class": "Entity", "x": 1344, "y": 736, "values": {}, "about": { "displayName": "OwnerRole", "logicalName": "ownerRole", "description": "A named organizational role that owns accountability for one or more revenue funnel entities. Maps to a person or team responsible for that part of the revenue lifecycle.", "prompt": "Generate an `owner_roles` lookup table. This is a lightweight reference table — not a full user/identity table. role_id is FK-referenced by all 7 stage entity tables (leads, opportunities, proposals, contracts, deliveries, invoices, retentions) and by transition_links.owner_id. For a production system, JOIN to your identity provider's user table via role_id or email. Seed: {Sales Manager, Account Executive, Delivery Lead, Finance Manager, Chief Customer Officer, Executive Sponsor}." }, "schema": [ { "typeName": "roleId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Role ID (PK)" }, { "typeName": "roleName", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Role Name" }, { "typeName": "department", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Department" }, { "typeName": "team", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Team" }, { "typeName": "revenueAccountability", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Revenue Accountability Scope" }, { "typeName": "email", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Email" } ], "width": 380, "height": 222 }, { "id": "node_12_1774800000012", "class": "Entity", "x": 752, "y": 704, "values": {}, "about": { "displayName": "TransitionLink", "logicalName": "transitionLink", "description": "First-class Fractal Link subtype. Records every transition between revenue funnel stages — both healthy progressions (normal), process exceptions (exception), and leakage events (leak). The TransitionLink table is the central analytics backbone of the Revenue Leakage data model.", "prompt": "Generate a `transition_links` table — this is THE CORE ANALYTICS TABLE of the Revenue Leakage data model. Every stage transition writes one record here. from_stage_id and to_stage_id are FKs → sales_funnel_stages.stage_id. transition_type enum: 'normal' | 'exception' | 'leak'. leakage_amount = revenue value lost (0 for normal transitions). friction_score = decimal 0.0–1.0 composite process friction coefficient at time of transition. owner_id FK → owner_roles.role_id. PRIMARY ANALYTICS QUERY: SELECT from_stage_id, to_stage_id, transition_type, SUM(leakage_amount) AS total_leakage, AVG(friction_score) AS avg_friction, COUNT(*) AS event_count FROM transition_links GROUP BY from_stage_id, to_stage_id, transition_type ORDER BY total_leakage DESC. Create a MATERIALIZED VIEW for dashboard performance. Also recommended: VIEW revenue_funnel_summary AS SELECT sfs.stage_name, COUNT(tl.link_id) FILTER(WHERE tl.transition_type='leak') / COUNT(tl.link_id)::decimal AS leak_rate, SUM(tl.leakage_amount) AS total_leakage_value FROM transition_links tl JOIN sales_funnel_stages sfs ON tl.from_stage_id = sfs.stage_id GROUP BY sfs.stage_name, sfs.stage_order ORDER BY sfs.stage_order." }, "schema": [ { "typeName": "linkId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Link ID (PK)" }, { "typeName": "fromStageId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "From Stage ID (FK → SalesFunnelStage)" }, { "typeName": "toStageId", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "To Stage ID (FK → SalesFunnelStage)" }, { "typeName": "transitionType", "typeOrigin": "string", "typeLevel": 5, "required": true, "displayLabel": "Transition Type (normal|exception|leak)" }, { "typeName": "leakageAmount", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Leakage Amount (0 if normal)" }, { "typeName": "frictionScore", "typeOrigin": "decimal", "typeLevel": 5, "required": false, "displayLabel": "Friction Score (0.0–1.0)" }, { "typeName": "ownerId", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Owner ID (FK → OwnerRole)" }, { "typeName": "notes", "typeOrigin": "string", "typeLevel": 5, "required": false, "displayLabel": "Notes" }, { "typeName": "createdDate", "typeOrigin": "datetime", "typeLevel": 5, "required": true, "displayLabel": "Created Date" } ], "width": 380, "height": 286 } ], "links": [ { "id": "node_12_1774800000012-node_11_1774800000011-1774636928601", "class": "StructuralLink", "from": "node_12_1774800000012", "to": "node_11_1774800000011", "about": { "displayName": "OwnedBy (FK)", "description": "" }, "values": { "sourceHandle": "right-source", "targetHandle": "left-target", "typeCode": "reference", "cardinality": "0..1", "label": "References" } }, { "id": "node_12_1774800000012-node_8_1774800000008-1774637039151", "class": "StructuralLink", "from": "node_12_1774800000012", "to": "node_8_1774800000008", "about": { "displayName": "FromStage (FK)", "description": "" }, "values": { "sourceHandle": "left-source", "targetHandle": "right-source", "typeCode": "reference", "cardinality": "1..1", "label": "References", "constraints": [ "" ] } }, { "id": "node_1_1774800000001-node_8_1774800000008-1774637124873", "class": "StructuralLink", "from": "node_1_1774800000001", "to": "node_8_1774800000008", "about": { "displayName": "AtFunnelStage", "description": "" }, "values": { "sourceHandle": "bottom-source", "targetHandle": "top-target", "typeCode": "classification", "cardinality": "1..1", "label": "BelongsTo" } }, { "id": "node_1_1774800000001-node_2_1774800000002-1774637270249", "class": "StructuralLink", "from": "node_1_1774800000001", "to": "node_2_1774800000002", "about": { "displayName": "GeneratesOpportunity", "description": "" }, "values": { "sourceHandle": "right-source", "targetHandle": "left-target", "typeCode": "aggregation", "cardinality": "1..*", "label": "HasMember" } }, { "id": "node_1_1774800000001-node_11_1774800000011-1774637339870", "class": "StructuralLink", "from": "node_1_1774800000001", "to": "node_11_1774800000011", "about": { "displayName": "OwnedBy", "description": "" }, "values": { "sourceHandle": "bottom-source", "targetHandle": "top-target", "typeCode": "reference", "cardinality": "1..1", "label": "References" } }, { "id": "node_2_1774800000002-node_3_1774800000003-1774637381937", "class": "StructuralLink", "from": "node_2_1774800000002", "to": "node_3_1774800000003", "about": { "displayName": "GeneratesProposal", "description": "" }, "values": { "sourceHandle": "right-source", "targetHandle": "left-target", "typeCode": "aggregation", "cardinality": "1..*", "label": "HasMember" } }, { "id": "node_3_1774800000003-node_4_1774800000004-1774637425461", "class": "StructuralLink", "from": "node_3_1774800000003", "to": "node_4_1774800000004", "about": { "displayName": "ConvertedToContract", "description": "" }, "values": { "sourceHandle": "right-source", "targetHandle": "left-target", "typeCode": "reference", "cardinality": "0..1", "label": "References" } }, { "id": "node_4_1774800000004-node_5_1774800000005-1774637497887", "class": "StructuralLink", "from": "node_4_1774800000004", "to": "node_5_1774800000005", "about": { "displayName": "HasDelivery", "description": "" }, "values": { "sourceHandle": "right-source", "targetHandle": "left-target", "typeCode": "composition", "cardinality": "1..*" } }, { "id": "node_5_1774800000005-node_9_1774800000009-1774637600019", "class": "StructuralLink", "from": "node_5_1774800000005", "to": "node_9_1774800000009", "about": { "displayName": "HasLeakageCategory", "description": "" }, "values": { "sourceHandle": "bottom-source", "targetHandle": "top-target", "typeCode": "reference", "cardinality": "0..1", "label": "References" } }, { "id": "node_5_1774800000005-node_10_1774800000010-1774637638941", "class": "StructuralLink", "from": "node_5_1774800000005", "to": "node_10_1774800000010", "about": { "displayName": "HasFrictionType", "description": "" }, "values": { "sourceHandle": "bottom-source", "targetHandle": "top-target", "typeCode": "reference", "cardinality": "0..1", "label": "References" } }, { "id": "node_5_1774800000005-node_6_1774800000006-1774637687808", "class": "StructuralLink", "from": "node_5_1774800000005", "to": "node_6_1774800000006", "about": { "displayName": "BilledAs", "description": "" }, "values": { "sourceHandle": "right-source", "targetHandle": "left-source", "typeCode": "reference", "cardinality": "0..1", "label": "References" } }, { "id": "node_6_1774800000006-node_7_1774800000007-1774637716146", "class": "StructuralLink", "from": "node_6_1774800000006", "to": "node_7_1774800000007", "about": { "displayName": "LedToRetention", "description": "" }, "values": { "sourceHandle": "right-source", "targetHandle": "left-target", "typeCode": "reference", "cardinality": "0..1", "label": "References" } } ], "subCanvases": [], "viewport": { "x": 8.860170682139028, "y": 76.05011793609549, "zoom": 0.5268389895956247 }, "showDataModel": true, "showAttributes": false, "snapToGrid": true, "showHoverPreview": false, "metadata": { "exportedAt": "2026-03-27T12:00:00.000Z", "modelType": "OSI", "version": "1.0" } }