<abstract> Auditable
- createdBy: string = "dbunit"
- createdOn: string = <today>
- lastModifiedBy: string = <null>
- lastModifiedOn: string = <null>

<abstract> RequirementLibraryNode is Auditable
- rlnId: long

RequirementFolder is RequirementLibraryNode
- resId: long
- nodes: RequirementLibraryNode[*]
- name: string = "folder"
- description: string = ""
- customFieldValues: CustomFieldValue[*]

Requirement is RequirementLibraryNode
- nodes: Requirement[*]
- requirementVersions: RequirementVersion[*]
- highLevelRequirement: boolean = false
- highLevelRequirementId: long

RequirementVersion is Auditable
- resId: long
- name: string = "req"
- description: string = ""
- reference: string = ""
- criticality: enum(org.squashtest.tm.domain.requirement.RequirementCriticality) = org.squashtest.tm.domain.requirement.RequirementCriticality.UNDEFINED
- status: enum(org.squashtest.tm.domain.requirement.RequirementStatus) = org.squashtest.tm.domain.requirement.RequirementStatus.WORK_IN_PROGRESS
- customFieldValues: CustomFieldValue[*]
- categoryItemId: long

<abstract> TestCaseLibraryNode is Auditable
- tclnId: long
- name: string = "tcln"
- description: string = ""

TestCaseFolder is TestCaseLibraryNode
- nodes: TestCaseLibraryNode[*]
- customFieldValues: CustomFieldValue[*]

<abstract> TestCase is TestCaseLibraryNode
- executionMode: string = <null>
- importance: enum(org.squashtest.tm.domain.testcase.TestCaseImportance) = org.squashtest.tm.domain.testcase.TestCaseImportance.LOW
- importanceAuto: boolean = <false>
- prerequisite: string = ""
- reference: string = ""
# - taTest: ?
- natureItemId: long = 12
- typeItemId: long = 20
- status: enum(org.squashtest.tm.domain.testcase.TestCaseStatus) = org.squashtest.tm.domain.testcase.TestCaseStatus.WORK_IN_PROGRESS
- automatable: string = "M"
- uuid: string = <uuid>
- automatedTestReference: string = ""
- automatedTestTechnology: long = <null>
# - scmRepository: ScmRepository*
- draftedByAi: boolean = <false>
# - automationRequest: AutomationRequest*
- customFieldValues: CustomFieldValue[*]
- requirementVersionIds: long[*]

<abstract> TestStep
- stepId: long

CallTestStep is TestStep
- calledTestCaseId: long
- calledDatasetId: long = <null>
- delegateParameterValues: boolean = <false>

ActionTestStep is TestStep
- action: string = ""
- expectedResult: string = ""
- customFieldValues: CustomFieldValue[*]
- requirementVersionIds: long[*]

KeywordTestStep is TestStep
- keyword: enum(org.squashtest.tm.domain.bdd.Keyword) = org.squashtest.tm.domain.bdd.Keyword.GIVEN
- datatable: string
- docstring: string
- comment: string
- actionWord: ActionWord

<abstract> ActionWordLibraryNode is Auditable
- awlnId: long

ActionWord is ActionWordLibraryNode
- keywordType: string = "UNDEFINED"
- description: string
- words: string = ""
- lastImplementationTechnology: string = <null>
- lastImplementationDate: string = <null>

Parameter
- paramId: long
- name: string
- description: string = ""

Dataset
- datasetId: long
- name: string
- values: string[*]

StandardTestCase is TestCase
- steps: TestStep[*]
- parameters: Parameter[*]
- datasets: Dataset[*]

KeywordTestCase is TestCase
- steps: KeywordTestStep[*]
- parameters: Parameter[*]
- datasets: Dataset[*]

ExploratoryTestCase is TestCase
- charter: string = ""
- sessionDuration: int

ScriptedTestCase is TestCase
- script: string

<abstract> ExecutionWorkspaceNode is Auditable
- name: string = "node"
- description: string = ""

<abstract> CampaignLibraryNode is ExecutionWorkspaceNode
- clnId: long

CampaignFolder is CampaignLibraryNode
- nodes: CampaignLibraryNode[*]
- customFieldValues: CustomFieldValue[*]

Campaign is CampaignLibraryNode
- reference: string = ""
- status: enum(org.squashtest.tm.domain.campaign.CampaignStatus) = org.squashtest.tm.domain.campaign.CampaignStatus.UNDEFINED
- actualStartDate: string = <null>
- actualEndDate: string = <null>
- scheduledStartDate: string = <null>
- scheduledEndDate: string = <null>
- actualStartAuto: boolean = <true>
- actualEndAuto: boolean = <true>
- iterations: Iteration[*]
- customFieldValues: CustomFieldValue[*]
- testPlanItems: CampaignTestPlanItem[*]

CampaignTestPlanItem
- testCaseId: long
- datasetId: long

Iteration is ExecutionWorkspaceNode
- itId: long
- reference: string = ""
- status: enum(org.squashtest.tm.domain.campaign.IterationStatus) = org.squashtest.tm.domain.campaign.IterationStatus.UNDEFINED
- uuid: string = <uuid>
- actualStartDate: string = <null>
- actualEndDate: string = <null>
- scheduledStartDate: string = <null>
- scheduledEndDate: string = <null>
- actualStartAuto: boolean = <true>
- actualEndAuto: boolean = <true>
- testSuites: TestSuite[*]
- customFieldValues: CustomFieldValue[*]
- testPlanItems: TestPlanItem[*]

TestSuite is ExecutionWorkspaceNode
- tsId: long
- status: enum(org.squashtest.tm.domain.execution.ExecutionStatus) = org.squashtest.tm.domain.execution.ExecutionStatus.READY
- uuid: string = <uuid>
- customFieldValues: CustomFieldValue[*]
- testPlanItemBindings: long[*]

TestPlanItem is Auditable
- tpiId: long
- tclnId: long
- datasetId: long
- label: string = "label"
- status: enum(org.squashtest.tm.domain.execution.ExecutionStatus) = org.squashtest.tm.domain.execution.ExecutionStatus.READY
- lastExecutedBy: string = <null>
- lastExecutedOn: string = <null>
- deleted: boolean = <false>
- executions: Execution[*]
- sessionOverview: SessionOverview = <null>

SessionOverview
- dueDate: string = <null>
- comment: string = <null>
- status: enum(org.squashtest.tm.domain.campaign.ExploratorySessionOverviewStatus) = org.squashtest.tm.domain.campaign.ExploratorySessionOverviewStatus.TO_DO

<abstract> Execution is Auditable
- description: string = <null>
- executionMode: enum(org.squashtest.tm.domain.testcase.TestCaseExecutionMode) = org.squashtest.tm.domain.testcase.TestCaseExecutionMode.MANUAL
- executionStatus: enum(org.squashtest.tm.domain.execution.ExecutionStatus) = org.squashtest.tm.domain.execution.ExecutionStatus.READY
- lastExecutedBy: string = <null>
- lastExecutedOn: string = <null>
- tcNatLabel: string = <null>
- tcNatCode: string = <null>
- tcNatIconName: string = <null>
- tcTypeLabel: string = <null>
- tcTypeCode: string = <null>
- tcTypeIconName: string = <null>
- customFieldValues: CustomFieldValue[*]
- denormalizedValues : DenormalizedValue[*]

ManualExecution is Execution
- executionStep: ManualExecutionStep[*]

ExploratoryExecution is Execution
- taskDivision: string = <null>
- reviewed: boolean = <false>
- events: ExploratoryEvent[*]
- sessionNotes: SessionNote[*]

ExploratoryEvent
- author: string = "dbunit"
- eventDate: string = <today>
- eventType: enum(org.squashtest.tm.domain.execution.ExploratoryExecutionEventType) = org.squashtest.tm.domain.execution.ExploratoryExecutionEventType.START

SessionNote is Auditable
- noteKind: enum(org.squashtest.tm.domain.execution.SessionNoteKind) = org.squashtest.tm.domain.execution.SessionNoteKind.COMMENT
- content : string = ""

<abstract> ExecutionStep is Auditable
- executionStatus: enum(org.squashtest.tm.domain.execution.ExecutionStatus) = org.squashtest.tm.domain.execution.ExecutionStatus.READY
- comment: string = <null>
- lastExecutedBy: string = <null>
- lastExecutedOn: string = <null>
- customFieldValues: CustomFieldValue[*]

ManualExecutionStep is ExecutionStep
- stepId: long
- denormalizedValues : DenormalizedValue[*]

DenormalizedValue is CustomFieldValue
- code: string
- label: string
- inputType: enum(org.squashtest.tm.domain.customfield.InputType)

SprintGroup is CampaignFolder

Sprint is CampaignLibraryNode
- reference: string = ""
- status: enum(org.squashtest.tm.domain.campaign.SprintStatus) = org.squashtest.tm.domain.campaign.SprintStatus.UPCOMING
- startDate: string = <null>
- endDate: string = <null>
- customFieldValues: CustomFieldValue[*]
- sprintReqVersions: SprintReqVersion[*]

SprintReqVersion is Auditable
- resId: long
- mode: enum(org.squashtest.tm.domain.requirement.ManagementMode) = org.squashtest.tm.domain.requirement.ManagementMode.NATIVE
- validationStatus: enum(org.squashtest.tm.domain.campaign.SprintReqVersionValidationStatus) = org.squashtest.tm.domain.campaign.SprintReqVersionValidationStatus.TO_BE_TESTED
- testPlanItems: TestPlanItem[*]
- reference: string = <null>
- name: string = <null>
- status: string = <null>
- description: string = <null>
- criticality: string = <null>
- category : string = <null>

CustomField
- cufId: long
- name: string
- code: string
- label: string
- inputType: enum(org.squashtest.tm.domain.customfield.InputType)
- optional: boolean = <true>
# Here we could have a union-type for the default value instead of "any", but it would be too complex to generate
- defaultValue: any = <null>
- options: CustomFieldOption[*]

CustomFieldOption
- cufOptionId: long
- label: string
- code: string
- colour: string

CustomFieldBinding
- cufBindingIds: long[*]
- boundEntities: enum(org.squashtest.tm.domain.customfield.BindableEntity)[*]

CustomFieldValue
- cufId: long
- value: object

InfoList is Auditable
- ilId: long
- label: string
- description: string
- code: string
- infoListItems: InfoListItem[*]

InfoListItem
- iliId: long
- label: string
- code: string
- colour: string
- iconName: string
- isDefault: boolean = <false>

Project is Auditable
- projectId: long
- testCaseLibraryNodes: TestCaseLibraryNode[*]
- requirementLibraryNodes: RequirementLibraryNode[*]
- campaignLibraryNodes: CampaignLibraryNode[*]
- actionWordLibraryNodes: ActionWordLibraryNode[*]
- name: string
- description: string = ""
- label: string = ""
- customFieldBindings: CustomFieldBinding[*]
- reqCategoryInfoListId: long = 1
- tcNatureInfoListId: long = 2
- tcTypeInfoListId: long = 3
- allowTcModifDuringExec: boolean = false
- allowAutomationWorkflow: boolean = false
- automationWorkflowType: string = <null>
- bddImplementationTechnology: string = <null>
- bddScriptLanguage: string = <null>
- automatedSuitesLifetime: int = <null>
- inheritsEnvironmentTags: boolean = false

ApiToken
- tokenId: long
- userId: long
- uuid: string
- name: string = "token"
- permissions: string = "READ"
- createdOn: string = <today>
- expiryDate: string = <today>
- lastUsage: string = <today>
- createdBy: string = "dbunit"

<root>
- projects: Project[*]
- customFields: CustomField[*]
- infoLists: InfoList[*]
- apiTokens: ApiToken[*]
