Skip to main content

Application Status — Domain Model

Entities

  • ApplicationStatus (in document/domain/) — template-scoped custom status; fields: applicationTemplateId, statusId (slug), internalName, externalName, color, isInitial, isFinal, manuallySettable
  • Application.currentApplicationStatusId — UUID FK; read-only join via currentApplicationStatus; set the ID to change status; never set via ApplicationInput
  • ApplicationStatusHistory — audit log; one row per status change on an application
  • ApplicationStatusTransition — transition definition on a template (from-status → to-status); in document/domain/
  • StatusTransitionType — enum in document/domain/; values: USER, SYSTEM, BOTH

GraphQL field names

  • Queries: applicationStatuses(templateId), applicationStatusTransitions(templateId), applicationStatusHistory(applicationId)
  • Mutations: createApplicationStatus, updateApplicationStatus, deleteApplicationStatus, createApplicationStatusTransition, updateApplicationStatusTransition, deleteApplicationStatusTransition
  • Application type field: currentApplicationStatus
  • WorkflowStep type field: applicationStatus

Constraints

  • ApplicationStatusInput lives in documents-input.graphqlsapplication-input.graphqls must NOT define it
  • ApplicationInput has no status field — status is set by the workflow engine only
  • isDraft: !application.currentApplicationStatus (no status assigned yet)

Frontend hooks (use-template-statuses.ts)

useApplicationStatuses, useCreateApplicationStatus, useUpdateApplicationStatus, useDeleteApplicationStatus, useApplicationStatusTransitions, useCreateApplicationStatusTransition, useUpdateApplicationStatusTransition, useDeleteApplicationStatusTransition

Query keys: queryKeys.applicationStatuses(templateId), queryKeys.applicationStatusTransitions(templateId)