API-reference
Datamodel-felt-reference
Felt-for-felt opslag på de vigtigste tabeller i Ressourcify.
Tørt opslagsværk over kerne-modeller. Den autoritative kilde er
prisma/schema.prisma. For forklaring af hvorfor modellen ser sådan ud,
se Datamodel & ER-diagram.
Alle ID'er er UUID v4 med mindre andet er angivet. Datotyper er
PostgreSQL date (ikke timestamp) med mindre felt-navnet ender på
At — det indikerer timestamp.
Organization
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
name | string | Vises i UI + browser-titel |
createdAt | timestamp | |
updatedAt | timestamp |
Department
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID | FK → Organization |
name | string | |
code | string? | Kort identifier |
managerId | UUID? | FK → User; afdelingsleder |
Team
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID | FK → Organization |
name | string | |
isActive | boolean | Default true |
Mange-til-mange med User via UserTeam.
User
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID | FK → Organization |
primaryDepartmentId | UUID? | FK → Department |
email | string | Unique global |
name | string | |
employmentPct | decimal(3,2) | 0.00–1.00 |
defaultWeeklyHours | decimal(4,2) | Default 37.00 |
startDate | date | Ansættelsesdato |
endDate | date? | Fratrædelse |
status | ACTIVE | INACTIVE | |
isManager | boolean | Giver insights:view |
azureAdOid | string? | Unique; bruges af NextAuth |
azureAdTid | string? | Tenant-ID fra Entra |
passwordHash | string? | Fallback til lokal-auth (ikke aktiv) |
deletedAt | timestamp? | Soft-delete |
UserRole
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
userId | UUID | FK → User; cascade-delete |
role | enum | ORG_ADMIN | DEPT_ADMIN | COORDINATOR | RESOURCE | VIEWER |
scopeType | enum | ORG | DEPT | TEAM |
scopeId | UUID | ID på scope-target |
Unik på (userId, role, scopeType, scopeId).
UserTeam
| Felt | Type | Note |
|---|---|---|
userId | UUID | FK → User |
teamId | UUID | FK → Team |
isCoordinator | boolean | UI-flag — ikke samme som COORDINATOR-rollen |
Composite-PK (userId, teamId).
Project
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID | FK |
departmentId | UUID? | FK |
code | string | Unique inden for org |
name | string | |
externalRef | string? | Fx Jira-key |
status | enum | ACTIVE | ON_HOLD | DONE |
startDate | date? | |
endDate | date? | |
managerId | UUID? | FK → User |
forecastEnabled | boolean | Default false |
deletedAt | timestamp? | Soft-delete |
Assignment
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
projectId | UUID | FK → Project; cascade |
userId | UUID | FK → User; cascade |
startDate | date | |
endDate | date | |
allocationKind | enum | HOURS | PERCENT |
value | decimal(6,2) | Timer/md eller procent |
monthlyValues | json? | Per-måned override {2026-06: 4, 2026-07: 0} |
note | string? | |
bulkAllocationBatchId | UUID? | FK → BulkAllocationBatch |
isLocked | boolean | RESOURCE kan ikke redigere når true |
BulkAllocationBatch
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID | FK |
createdById | UUID | FK → User |
projectId | UUID | FK → Project |
label | string | Fx "Afdelingsmøder Q3 2026" |
scopeDefinition | json | Original scope-vinduet fra wizarden |
parentBatchId | UUID? | Reference til original batch ved revision |
Leave
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
userId | UUID | FK → User; cascade |
leaveTypeId | UUID | FK → LeaveType |
startDate | date | |
endDate | date | |
hoursPerDay | decimal(4,2)? | null = hele dage |
note | string? |
LeaveType
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID? | null = global type |
name | string | |
code | string? | Kort identifier |
color | string | Hex, default #6B7280 |
isAbsence | boolean | false for "ikke-fravær" typer (fx kursus) |
ForecastPlan
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID | FK |
projectId | UUID | FK → Project; cascade |
year | int | Fx 2027 |
sizeId | UUID | FK → ForecastSize |
startMonth | int | 1–12 |
endMonth | int | 1–12 |
note | string? |
Unique på (projectId, year).
ForecastSize
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID | FK |
code | string | Fx S, M, L |
label | string | Vises i UI |
allocationKind | enum | HOURS | PERCENT |
totalHours | decimal? | null for HOURS-kind |
MonthlyCapacity (cache)
| Felt | Type | Note |
|---|---|---|
userId | UUID | FK |
year | int | |
month | int | 1–12 |
workdays | int | |
baseHours | decimal | |
leaveHours | decimal | |
netHours | decimal |
Genberegnes når brugerens fravær eller arbejdsmønster ændres.
AuditLog
| Felt | Type | Note |
|---|---|---|
id | UUID | PK |
organizationId | UUID | FK |
actorUserId | UUID? | null ved system-handlinger |
action | string | Fx assignment.create |
targetType | string | Modelnavn |
targetId | string | ID på target |
payload | json? | Før/efter-tilstand |
createdAt | timestamp |
Retention konfigureres per organisation under Indstillinger → Audit.
Enums
| Enum | Værdier |
|---|---|
RoleType | ORG_ADMIN, DEPT_ADMIN, COORDINATOR, RESOURCE, VIEWER |
ScopeType | ORG, DEPT, TEAM |
AllocationKind | HOURS, PERCENT |
UserStatus | ACTIVE, INACTIVE |
ProjectStatus | ACTIVE, ON_HOLD, DONE |