{"slug":"platform/12-entity-framework","title":"12 — Entity Framework","section":"platform","sectionLabel":"Platform","status":"unclassified","type":"document","path":"platform/12-entity-framework.mdx","bytes":1672,"description":null,"updated":null,"source":"integratewise/Integratewise-docs-wiki","content":"\n> **Extracted from:** IntegrateWise Platform Specification Suite\n> **Region:** first_pass\n> **Original line:** 1121\n> **Lines:** 36 | **Chars:** 1,364\n> **Status:** Raw extraction — requires review and canonicalization\n\n12 — Entity Framework\n12.1 Responsibilities\nDefine the canonical entity types permitted per tenant (enabled_entities).\nProvide inheritance, dynamic fields, industry extensions, validation.\n12.2 Inheritance\nCopyEntity (base: id, version, lifecycle, provenance)\n├── AggregateEntity (typed by purpose)\n│ ├── CRMAccount (inherits references[]→ contacts)\n│ ├── CRMLead\n│ ├── CRMOpportunity\n│ ├── Ticket\n│ ├── Invoice\n│ └── …\n└── ReferenceEntity\n├── User\n├── Product\n└── …\n12.3 Dynamic fields\nSchema-additive. Each tenant may add fields via tenant_spine_config.field_extensions[].\nFields typed string|number|date|ref|enum|json.\n12.4 Industry extensions\nDeclared in the 12×11 matrix; example for Healthcare: phi_flag, consent_ref, hipaa_scope.\n12.5 Validation\nType-level validators per field.\nCross-entity validators (e.g., opportunity.amount > 0 AND opportunity.stage != closed).\nValidator plugins VALIDATOR(name).\n12.6 References and graph traversal\nReference integrity checked via Spine (02).\n12.7 Events\nProduced: EntityTypeRegistered, EntityExtensionAdded.\nConsumed: OnboardingComplete to seed enabled entities.\n12.8 APIs\nPOST /entity-types, POST /entity-types/{type}/fields, POST /entities/validate.\n12.9 Failure handling\nValidation failure blocks write; suggests fix in the error message.\nExtension conflicts surface as admin warnings.\n"}