Clause Type Conceptual Diagrams
Clause Type Construct vs. Deal Type Construct






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 UIClause 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]