generated: '2026-07-20' method: derived source: openapi/reonic-openapi-original.json entity_count: 78 note: Entity-relationship graph derived from OpenAPI component schemas and their *Id/*Ids reference fields. Identifiers are resolved at read time via the corresponding v3 endpoints. entities: - name: ResidentialProject fields: 21 - name: CommercialProject fields: 21 - name: TimetrackingEntry fields: 19 - name: ComponentModule fields: 17 - name: ComponentInverter fields: 17 - name: ComponentMicroinverter fields: 17 - name: ComponentOptimizer fields: 17 - name: ComponentVirtualBattery fields: 17 - name: ComponentBatteryStorage fields: 17 - name: ComponentEvCharger fields: 17 - name: ComponentHeatPump fields: 17 - name: ComponentAirHeatPump fields: 17 - name: ComponentHotWaterHeatPump fields: 17 - name: ComponentHeatingStorage fields: 17 - name: ComponentHotWaterStorage fields: 17 - name: ComponentHeatingRod fields: 17 - name: ComponentRadiator fields: 17 - name: ComponentIndoorUnitAirHeatPump fields: 17 - name: ComponentAccessoryToEvCharger fields: 17 - name: ComponentAccessoryToHeatPump fields: 17 - name: ComponentAccessoryToModule fields: 17 - name: ComponentAccessoryToInverter fields: 17 - name: ComponentAccessoryToBatteryStorage fields: 17 - name: ComponentOther fields: 17 - name: ComponentModuleFrameConstruction fields: 17 - name: ComponentServiceFee fields: 17 - name: ComponentInstallationFee fields: 17 - name: PhotogrammetryJob fields: 16 - name: Task fields: 15 - name: VariantLineItem fields: 15 - name: ContactCreate fields: 14 - name: Contact fields: 14 - name: ResidentialProjectSignatureRequest fields: 13 - name: OfferTemplate fields: 13 - name: File fields: 12 - name: User fields: 11 - name: ChecklistTemplate fields: 11 - name: ManualActivity fields: 10 - name: PlanningTemplate fields: 10 - name: WikiPage fields: 10 - name: Note fields: 9 - name: Team fields: 9 - name: Tag fields: 8 - name: Activity fields: 8 - name: PlanningTemplateCustomItemInput fields: 8 - name: PlanningPackageCustomItemInput fields: 8 - name: UserCreate fields: 7 - name: ResidentialVariant fields: 7 - name: FileFolder fields: 7 - name: KanbanBoard fields: 7 - name: PlanningPackage fields: 7 - name: VariantOptionalBundle fields: 6 - name: TimetrackingEventType fields: 6 - name: TeamUpdate fields: 6 - name: PlanningTemplateCatalogItemInput fields: 6 - name: PlanningPackageCreate fields: 6 - name: PlanningPackageCatalogItemInput fields: 6 - name: LeadSource fields: 5 - name: KanbanColumn fields: 5 - name: TeamCreate fields: 5 relationships: - from: Checklist to: User via: updatedById type: belongs_to - from: Task to: User via: completedById type: belongs_to - from: Task to: User via: assignedUserIds type: has_many - from: Task to: Team via: assignedTeamIds type: has_many - from: Task to: Tag via: tagIds type: has_many - from: ResidentialProject to: User via: keyAccountManagerId type: belongs_to - from: ResidentialProject to: KanbanBoard via: kanbanBoardId type: belongs_to - from: ResidentialProject to: KanbanColumn via: kanbanColumnId type: belongs_to - from: ResidentialProject to: LeadSource via: leadSourceId type: belongs_to - from: ResidentialProject to: Tag via: tagIds type: has_many - from: VariantLineItem to: Component via: componentId type: belongs_to - from: ResidentialProjectSignatureRequest to: ResidentialProject via: projectId type: belongs_to - from: CommercialProject to: User via: keyAccountManagerId type: belongs_to - from: CommercialProject to: KanbanBoard via: kanbanBoardId type: belongs_to - from: CommercialProject to: KanbanColumn via: kanbanColumnId type: belongs_to - from: CommercialProject to: Tag via: tagIds type: has_many - from: Note to: User via: createdById type: belongs_to - from: Note to: User via: editedById type: belongs_to - from: Note to: User via: pinnedById type: belongs_to - from: File to: FileFolder via: folderId type: belongs_to - from: File to: Team via: sharedWithTeamIds type: has_many - from: File to: User via: sharedWithUserIds type: has_many - from: File to: User via: createdById type: belongs_to - from: FileFolder to: User via: createdById type: belongs_to - from: TimetrackingEntry to: User via: userId type: belongs_to - from: TimetrackingEntry to: User via: createdById type: belongs_to - from: TimetrackingEntry to: User via: updatedById type: belongs_to - from: TimetrackingEntry to: TimetrackingEventType via: typeId type: belongs_to - from: Activity to: User via: createdById type: belongs_to - from: ManualActivity to: User via: createdById type: belongs_to - from: ManualActivity to: User via: updatedById type: belongs_to - from: KanbanColumn to: KanbanBoard via: boardId type: belongs_to - from: Team to: User via: leaderIds type: has_many - from: Team to: User via: memberIds type: has_many - from: TeamCreate to: User via: leaderIds type: has_many - from: TeamCreate to: User via: memberIds type: has_many - from: TeamUpdate to: User via: leaderIds type: has_many - from: TeamUpdate to: User via: memberIds type: has_many - from: PlanningTemplate to: User via: createdById type: belongs_to - from: PlanningTemplate to: User via: updatedById type: belongs_to - from: PlanningTemplateCatalogItemInput to: Component via: componentId type: belongs_to - from: PlanningPackageCatalogItemInput to: Component via: componentId type: belongs_to - from: ChecklistTemplate to: User via: createdById type: belongs_to - from: ChecklistTemplate to: User via: updatedById type: belongs_to - from: PhotogrammetryJob to: User via: createdById type: belongs_to - from: PhotogrammetryJob to: User via: updatedById type: belongs_to - from: PhotogrammetryJob to: User via: startedById type: belongs_to