Skip to content

Clause Type Conceptual Diagrams

Clause Type Construct vs. Deal Type Construct

Clause Type DiagramClause Type Diagram

Deal Type DiagramDeal Type Diagram

Type DiagramType Diagram

Detailed Data Model

mermaid
classDiagram
direction LR

%% =========================
%% Catalog (Abstract / Reusable)
%% =========================
class ClauseTypeCatalog {
  +catalogId
  +name
}

class DealTypeCatalog {
  +catalogId
  +name
}

class DealType {
  +dealTypeId
  +name
  +description
}

class DealTypeClause {
  +id
  +isRecommended
  +isRequiredForUI
  +displayOrder
}

class ClauseType {
  +clauseTypeId
  +name
  +description
}

class ClauseTypeVersion {
  +clauseTypeVersionId
  +versionNumber
  +status: Draft|Published|Deprecated
  +inputSchemaRef
  +outputSchemaRef
  +logicRefOrEmbedded
}

class ClauseTypeDependency {
  +dependencyId
  +kind: Requires|Consumes|Aggregates
  +notes
}

ClauseTypeCatalog "1" --> "1..*" ClauseType : contains
ClauseType "1" --> "1..*" ClauseTypeVersion : versions

%% Type-level dependencies (abstract)
ClauseTypeVersion "1" --> "0..*" ClauseTypeDependency : defines
ClauseTypeDependency "1" --> "1" ClauseTypeVersion : from
ClauseTypeDependency "1" --> "1" ClauseTypeVersion : to

%% =========================
%% Deal Types (UI grouping only)
%% =========================
DealTypeCatalog "1" --> "1..*" DealType : contains
DealType "1" --> "1..*" DealTypeClause : includes for UI
DealTypeClause "1" --> "1" ClauseType : references

%% Optional: show that the UI can filter clause types for selection
%% (Association name communicates intent; no processing implication.)

%% =========================
%% Deals (Instantiated / Specific)
%% =========================
class Deal {
  +dealId
  +name
  +selectedDealTypeId  // UI selection reference
}

class DealVersion {
  +dealVersionId
  +versionNumber
  +branchType: Authoritative|Projected
  +isCurrentAuthoritative
  +createdAt
}

class ClauseInstance {
  +clauseInstanceId
  +clauseNameInDeal
  +status: Draft|Forecast|Confirmed|Override
}

class ClauseInstanceDependency {
  +dependencyId
  +kind: Requires|Consumes|Aggregates
  +notes
}

class ClauseSnapshot {
  +snapshotId
  +asOfTimestamp
  +stateJson  // full snapshot incl terms + computed outputs
  +stateKind: Draft|Forecast|Confirmed|Override
}

class Override {
  +overrideId
  +reason
  +overrideJson
  +createdAt
}

Deal "1" --> "1..*" DealVersion : has versions
DealVersion "1" --> "1..*" ClauseInstance : contains clauses
ClauseInstance "1" --> "1..*" ClauseSnapshot : produces
ClauseInstance "1" --> "0..*" Override : may apply

%% Pinning: instances use a specific catalog version for change control
ClauseInstance "1" --> "1" ClauseTypeVersion : pinned to

%% Instance-level dependencies (deal-specific)
DealVersion "1" --> "0..*" ClauseInstanceDependency : has
ClauseInstanceDependency "1" --> "1" ClauseInstance : from
ClauseInstanceDependency "1" --> "1" ClauseInstance : to

%% UI reference only: deal indicates which deal type was chosen
Deal "0..1" --> "1" DealType : selected for UI

Clause Boundary

mermaid
flowchart LR
  subgraph DV[Deal Version - Authoritative or Projected]
    subgraph CI[Clause Instance - Merchandising Share]
      IN[Incoming Full State JSON<br/>Negotiated terms<br/>Actuals or estimates<br/>Prior computed values]
      DEP[Dependency Snapshots JSON<br/>From required clause instances]
      OVR[Override JSON<br/>User-provided values and reason]
      VAL[Validate<br/>JSON Schema and field rules]
      RULES[Evaluate<br/>Deterministic clause rules]
      OUT[New Full State JSON<br/>Updated terms and values<br/>Amount due and audit breakdown<br/>Status Draft Forecast Confirmed Override]

      IN --> VAL --> RULES --> OUT
      DEP --> RULES
      OVR --> RULES
    end
  end

  EXT[External inputs<br/>Actuals estimates changes] --> IN
  OTHER[Other clause instances<br/>Required dependencies] --> DEP
  OUT --> STORE[Snapshot store<br/>Version history]

Confidential. For internal use only.