Entity Relationship Diagrams
This page visualizes the relationships between time cockpit's standard entities (APP_ prefix). The data model is organized into logical domains for clarity.
Domain 1: Project & Billing
This domain handles customer relationships, project management, time tracking, and invoicing.
erDiagram
APP_Customer ||--o{ APP_Project : "APP_Customer"
APP_Project ||--o{ APP_Task : "APP_Project"
APP_Project ||--o{ APP_Timesheet : "APP_Project"
APP_Task ||--o{ APP_Timesheet : "APP_Task"
APP_Project ||--o{ APP_Invoice : "APP_Project"
APP_Invoice ||--o{ APP_InvoiceDetail : "APP_Invoice"
APP_InvoiceDetail }o--|| APP_Article : "APP_Article"
APP_InvoiceDetail }o--|| APP_Unit : "APP_Unit"
APP_InvoiceDetail }o--o| APP_Task : "APP_Task"
APP_Timesheet }o--o| APP_Invoice : "APP_Invoice"
APP_Timesheet }o--|| APP_UserDetail : "APP_UserDetail"
APP_Timesheet }o--o| APP_WorkingTimeWeight : "APP_WorkingTimeWeight"
APP_Project }o--o| APP_UserDetail : "APP_Manager1"
APP_Project }o--o| APP_UserDetail : "APP_Manager2"
APP_Customer {
guid APP_CustomerUuid PK
string APP_CompanyName
string APP_Code
boolean APP_Billable
string APP_BillingAddress
string APP_Email
}
APP_Project {
guid APP_ProjectUuid PK
string APP_ProjectName
string APP_Code
decimal APP_Budget
decimal APP_BudgetInHours
decimal APP_HourlyRate
boolean APP_Billable
boolean APP_FixedPrice
boolean APP_Closed
guid APP_Customer FK
guid APP_Manager1 FK
guid APP_Manager2 FK
}
APP_Task {
guid APP_TaskUuid PK
string APP_TaskName
string APP_Code
decimal APP_BudgetInHours
boolean APP_Closed
guid APP_Project FK
}
APP_Timesheet {
guid APP_TimesheetUuid PK
datetime APP_BeginTime
datetime APP_EndTime
decimal APP_DurationInHours "Calculated"
string APP_Description
boolean APP_Billable
boolean APP_Billed
decimal APP_HourlyRateActual
decimal APP_Revenue "Calculated"
guid APP_Project FK
guid APP_Task FK
guid APP_UserDetail FK
guid APP_Invoice FK
guid APP_WorkingTimeWeight FK
}
APP_Invoice {
guid APP_InvoiceUuid PK
string APP_InvoiceNumber
date APP_InvoiceDate
decimal APP_ReadOnlyRevenue "Calculated"
guid APP_Project FK
}
APP_InvoiceDetail {
guid APP_InvoiceDetailUuid PK
decimal APP_Quantity
decimal APP_Price
decimal APP_Amount "Calculated"
guid APP_Invoice FK
guid APP_Article FK
guid APP_Unit FK
guid APP_Task FK
}
APP_Article {
guid APP_ArticleUuid PK
string APP_Code
string APP_ArticleName
guid APP_Unit FK
}
APP_Unit {
guid APP_UnitUuid PK
string APP_Code
string APP_UnitName
}
APP_UserDetail {
guid APP_UserDetailUuid PK
string APP_Username
string APP_Fullname
}
APP_WorkingTimeWeight {
guid APP_WorkingTimeWeightUuid PK
string APP_Code
decimal APP_Multiplier
}
Key Relationships
APP_Customeris the root; eachAPP_Projectbelongs to exactly one customer.APP_Taskbelongs to exactly oneAPP_Project; a project can have many tasks.APP_Timesheethas a mandatory FK toAPP_UserDetail, a mandatory FK toAPP_Project, and an optional FK toAPP_Task.APP_Timesheethas an optional FK toAPP_Invoice, linking it to at most one invoice.APP_Invoicebelongs to exactly oneAPP_Project; a project can have many invoices.APP_InvoiceDetailbelongs to exactly oneAPP_Invoiceand has mandatory FKs toAPP_ArticleandAPP_Unit, plus an optional FK toAPP_Task.APP_Projectholds two optional FKs toAPP_UserDetail(Manager1, Manager2).
Domain 2: Time & Attendance
This domain manages employee work schedules, absences, approvals, and working time compliance.
erDiagram
APP_UserDetail ||--o{ APP_WeeklyHoursOfWork : "APP_UserDetail"
APP_UserDetail ||--o{ APP_VacationEntitlement : "APP_UserDetail"
APP_UserDetail ||--o{ APP_Vacation : "APP_UserDetail"
APP_UserDetail ||--o{ APP_SickLeave : "APP_UserDetail"
APP_UserDetail ||--o{ APP_CompensatoryTime : "APP_UserDetail"
APP_UserDetail ||--o{ APP_OvertimeCorrection : "APP_UserDetail"
APP_UserDetail }o--o| APP_Department : "APP_Department"
APP_Department ||--o{ APP_DepartmentLead : "APP_Department"
APP_DepartmentLead }o--|| APP_UserDetail : "APP_UserDetail"
APP_UserDetail }o--o| APP_LegalHolidayCalendar : "APP_LegalHolidayCalendar"
APP_LegalHolidayCalendar ||--o{ APP_LegalHoliday : "APP_LegalHolidayCalendar"
APP_UserDetail ||--o{ APP_WorkingTimeLimit : "APP_UserDetail"
APP_Vacation }o--o| APP_UserDetail : "APP_Approver"
APP_SickLeave }o--o| APP_UserDetail : "APP_Approver"
APP_CompensatoryTime }o--o| APP_UserDetail : "APP_Approver"
APP_UserDetail ||--o{ APP_Timesheet : "APP_UserDetail"
APP_UserDetail {
guid APP_UserDetailUuid PK
string APP_Username
string APP_Firstname
string APP_Lastname
string APP_Email
decimal APP_HourlyRate "Internal cost rate"
boolean APP_IsAbsenceApprovalRequired
date APP_DeviatingBookingCompletionDate
guid APP_Department FK
guid APP_LegalHolidayCalendar FK
}
APP_Department {
guid APP_DepartmentUuid PK
string APP_DepartmentName
string APP_Code
}
APP_DepartmentLead {
guid APP_DepartmentLeadUuid PK
boolean APP_ReceiveNotificationsForAbsenceApproval
guid APP_Department FK
guid APP_UserDetail FK
}
APP_WeeklyHoursOfWork {
guid APP_WeeklyHoursOfWorkUuid PK
date APP_EffectiveDate
decimal APP_MondayHours
decimal APP_TuesdayHours
decimal APP_WednesdayHours
decimal APP_ThursdayHours
decimal APP_FridayHours
decimal APP_SaturdayHours
decimal APP_SundayHours
guid APP_UserDetail FK
}
APP_Vacation {
guid APP_VacationUuid PK
datetime APP_BeginTime
datetime APP_EndTime
string APP_Description
boolean APP_IsWholeDay
datetime APP_ApprovedTimestampUtc
boolean APP_IsApproved "Calculated"
guid APP_UserDetail FK
guid APP_Approver FK
}
APP_SickLeave {
guid APP_SickLeaveUuid PK
datetime APP_BeginTime
datetime APP_EndTime
string APP_Description
boolean APP_IsWholeDay
datetime APP_ApprovedTimestampUtc
boolean APP_IsApproved "Calculated"
string APP_RejectionReason
guid APP_UserDetail FK
guid APP_Approver FK
}
APP_CompensatoryTime {
guid APP_CompensatoryTimeUuid PK
datetime APP_BeginTime
datetime APP_EndTime
boolean APP_IsApproved "Calculated"
guid APP_UserDetail FK
guid APP_Approver FK
}
APP_OvertimeCorrection {
guid APP_OvertimeCorrectionUuid PK
date APP_EffectiveDate
decimal APP_Hours
string APP_Reason
guid APP_UserDetail FK
}
APP_VacationEntitlement {
guid APP_VacationEntitlementUuid PK
int APP_Year
decimal APP_Days
guid APP_UserDetail FK
}
APP_WorkingTimeLimit {
guid APP_WorkingTimeLimitUuid PK
date APP_EffectiveDate
decimal APP_MaxDailyWorkingTime
decimal APP_MinDailyBreakTime
decimal APP_MaxWeeklyWorkingTime
guid APP_UserDetail FK
}
APP_LegalHolidayCalendar {
guid APP_LegalHolidayCalendarUuid PK
string APP_CalendarName
string APP_Description
}
APP_LegalHoliday {
guid APP_LegalHolidayUuid PK
string APP_HolidayName
date APP_HolidayDate
guid APP_LegalHolidayCalendar FK
}
APP_Timesheet {
guid APP_TimesheetUuid PK
date APP_DateActual
datetime APP_BeginTime
datetime APP_EndTime
guid APP_UserDetail FK
}
Key Relationships
APP_UserDetailis the central entity in this domain; all absence, schedule, and limit records hold a mandatory FK to it.APP_Vacation,APP_SickLeave, andAPP_CompensatoryTimeeach have a mandatory FK toAPP_UserDetail(the employee) and an optional FK back toAPP_UserDetail(the approver).APP_WeeklyHoursOfWork,APP_VacationEntitlement,APP_WorkingTimeLimit, andAPP_OvertimeCorrectioneach have a mandatory FK toAPP_UserDetail; one user can have many records of each type.APP_UserDetailhas an optional FK toAPP_Department; a department can have many users.APP_DepartmentLeadis a join entity betweenAPP_DepartmentandAPP_UserDetail; a department can have many leads, and a user can lead many departments.APP_UserDetailhas an optional FK toAPP_LegalHolidayCalendar; a calendar can be shared across many users.APP_LegalHolidayhas a mandatory FK toAPP_LegalHolidayCalendar; a calendar contains many holidays.
Domain 3: Security & User Management
This domain handles authentication, authorization, roles, and permissions.
erDiagram
SYS_UserAccount ||--o| APP_UserDetail : "SYS_UserAccount"
APP_UserDetail ||--o{ APP_UserDetailRole : "APP_UserDetail"
APP_UserDetailRole }o--|| APP_UserRole : "APP_UserRole"
APP_UserRole }o--o| SYS_Permission : "SYS_Permission"
APP_UserDetail }o--|| APP_CultureInfo : "APP_CultureInfo"
SYS_UserAccount {
guid SYS_UserAccountUuid PK
string SYS_Username
string SYS_Email
boolean SYS_IsDisabled
}
APP_UserDetail {
guid APP_UserDetailUuid PK
string APP_Username
string APP_Firstname
string APP_Lastname
string APP_Email
boolean APP_IsHidden
guid SYS_UserAccount FK
guid APP_CultureInfo FK
}
APP_UserDetailRole {
guid APP_UserDetailRoleUuid PK
date APP_ValidFrom
date APP_ValidTo
guid APP_UserDetail FK
guid APP_UserRole FK
}
APP_UserRole {
guid APP_UserRoleUuid PK
string APP_Code "e.g., BillingAdmin"
string APP_RoleName
string APP_Description
}
APP_CultureInfo {
guid APP_CultureInfoUuid PK
string APP_CultureInfoName "e.g., en-US"
string APP_DisplayName
}
SYS_Permission {
guid SYS_PermissionUuid PK
string SYS_TargetEntity
string SYS_PermissionType
}
Key Relationships
SYS_UserAccounthas at most oneAPP_UserDetailprofile (one-to-zero-or-one).APP_UserDetailbelongs to exactly oneAPP_CultureInfo.APP_UserDetailRoleis a join entity betweenAPP_UserDetailandAPP_UserRole; a user can have many roles, and a role can be assigned to many users.APP_UserRolehas an optional FK toSYS_Permission.
Domain 4: Master Data & Configuration
Supporting entities for configuration and reference data.
erDiagram
APP_Company ||--o{ APP_Invoice : "APP_Company"
APP_Article ||--o{ APP_InvoiceDetail : "APP_Article"
APP_Unit ||--o{ APP_InvoiceDetail : "APP_Unit"
APP_Unit ||--o{ APP_Article : "APP_Unit"
APP_Country ||--o{ APP_Customer : "APP_Country"
APP_Country ||--o{ APP_Company : "APP_Country"
APP_LegalHolidayCalendar ||--o{ APP_LegalHoliday : "APP_LegalHolidayCalendar"
APP_Company {
guid APP_CompanyUuid PK
string APP_CompanyName
string APP_VatID
string APP_IBAN
string APP_Street
string APP_ZipCode
string APP_Town
guid APP_Country FK
}
APP_Article {
guid APP_ArticleUuid PK
string APP_Code
string APP_ArticleName
decimal APP_Price
decimal APP_VatRate
decimal APP_PriceVat "Calculated"
boolean APP_IsHidden
guid APP_Unit FK
}
APP_Unit {
guid APP_UnitUuid PK
string APP_Code "e.g., hour, piece, km"
string APP_UnitName
}
APP_Country {
guid APP_CountryUuid PK
string APP_CountryName
string APP_CountryCode "ISO code"
}
APP_LegalHolidayCalendar {
guid APP_LegalHolidayCalendarUuid PK
string APP_CalendarName
string APP_Description
}
APP_LegalHoliday {
guid APP_LegalHolidayUuid PK
string APP_HolidayName
date APP_HolidayDate
guid APP_LegalHolidayCalendar FK
}
APP_Customer {
guid APP_CustomerUuid PK
string APP_CompanyName
guid APP_Country FK
}
APP_Invoice {
guid APP_InvoiceUuid PK
string APP_InvoiceNumber
guid APP_Company FK
}
APP_InvoiceDetail {
guid APP_InvoiceDetailUuid PK
guid APP_Invoice FK
guid APP_Article FK
guid APP_Unit FK
}
Cross-Domain Relationships
APP_UserDetail holds FKs from or to entities in every domain:
- Referenced by
APP_Timesheet(Domain 1) - References
APP_DepartmentandAPP_LegalHolidayCalendar, and is referenced by all absence/schedule entities (Domain 2) - Referenced by
SYS_UserAccountandAPP_UserDetailRole, and referencesAPP_CultureInfo(Domain 3)
APP_Project is referenced across domains:
- References
APP_Customer(Domain 1) - Referenced by
APP_TimesheetandAPP_Invoice(Domain 1)
Understanding Cardinality
Symbols:
||: One (exactly one)o{: Zero or many}o: Many to zero or one||--o{: One to many}o--||: Many to one}o--o|: Many to zero-or-one
Examples:
APP_Customer ||--o{ APP_Project
One customer has zero or many projects. Each project belongs to exactly one customer.
APP_Timesheet }o--o| APP_Invoice
A timesheet can belong to zero or one invoice (optional). An invoice can have many timesheets.
Complete Entity List by Domain
Billing & Projects
- APP_Customer
- APP_Project
- APP_Task
- APP_Timesheet
- APP_Invoice
- APP_InvoiceDetail
- APP_Article
- APP_Unit
Time & Attendance
- APP_UserDetail
- APP_Department
- APP_DepartmentLead
- APP_WeeklyHoursOfWork
- APP_Vacation
- APP_SickLeave
- APP_CompensatoryTime
- APP_OvertimeCorrection
- APP_VacationEntitlement
- APP_WorkingTimeLimit
- APP_WorkingTimeWeight
- APP_LegalHolidayCalendar
- APP_LegalHoliday
Security
- SYS_UserAccount
- APP_UserDetail
- APP_UserDetailRole
- APP_UserRole
- APP_CultureInfo
Master Data
- APP_Company
- APP_Country
- APP_MeansOfTransport
Configuration
- APP_GlobalSettings
- APP_FeatureFlag
- APP_FormattingProfile
- APP_EntityViewProfile
Related Documentation
- Standard Entities Reference - Detailed documentation for each entity
- Permissions Guide - How to work with entity permissions
- TCQL Overview - Query language for time cockpit
- Web API - OData - REST API access to entities