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

RequirementVersionLinkType
- id: long
- role1: string
- role2: string
- codeRole1: string
- codeRole2: string
- isDefault: boolean = <false>

<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
- milestoneIds: long[*]
- linkedRequirementVersions: RequirementVersionLink[*]

RequirementVersionLink
- linkTypeId: long
- versionId: long

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

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>
- automatedTest: AutomatedTest
- scmRepositoryId: long
- draftedByAi: boolean = <false>
- automationRequest: AutomationRequest
- customFieldValues: CustomFieldValue[*]
- requirementVersionIds: long[*]
- milestoneIds: long[*]

AutomationRequest
- id: long
- requestStatus: enum(org.squashtest.tm.domain.tf.automationrequest.AutomationRequestStatus) = org.squashtest.tm.domain.tf.automationrequest.AutomationRequestStatus.WORK_IN_PROGRESS
- automationPriority: int
- transmittedOn: string = <today>
- transmittedBy: long = 1
- assignedTo: long = 1
- assignedOn: string = <today>
- createdBy: long = 1
- conflictAssociation: string = ""
- isManual: boolean = false

AutomatedTest
- id: long
- name: string
- taProjectId: 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[*]
- testAutomationCandidate: TestAutomationCandidate = <null>

KeywordTestCase is TestCase
- steps: KeywordTestStep[*]
- parameters: Parameter[*]
- datasets: Dataset[*]
- testAutomationCandidate: TestAutomationCandidate = <null>

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

ScriptedTestCase is TestCase
- script: string
- testAutomationCandidate: TestAutomationCandidate = <null>

<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[*]
- milestoneId: long = <null>

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[*]
- automatedSuites: AutomatedSuite[*]
- 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[*]
- automatedSuites: AutomatedSuite[*]

AutomatedSuite is Auditable
- suiteId: long
- uuid: string = <uuid>
- executionStatus: enum(org.squashtest.tm.domain.execution.ExecutionStatus) = org.squashtest.tm.domain.execution.ExecutionStatus.READY
- workflows: AutomatedSuiteWorkflow[*]

AutomatedSuiteWorkflow
- workflowId: string
- projectId: 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[*]
- issues: Issue[*]

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 = ""
- issues: Issue[*]

<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[*]
- issues: Issue[*]

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

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

Issue
- remoteIssueId: string
- bugtrackerId: long
- additionalData: string = ""

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>
- quickTest : QuickTest[*] = <null>

QuickTest is Auditable
- quickTestId: long
- sprintReqVersionId: long
- attachmentListId: long = <null>
- issues: Issue[*]
- name: string = "Quick Test numero 1"
- executionStatus: enum(org.squashtest.tm.domain.execution.ExecutionStatus) = org.squashtest.tm.domain.execution.ExecutionStatus.READY


TestCandidateAnalysis is Auditable
- id: long
- status: enum(org.squashtest.tm.domain.testautomation.AnalysisStatus) = org.squashtest.tm.domain.testautomation.AnalysisStatus.RUNNING
- nbOfProcessedTestCases: int = 0
- nbOfTotalTestCases: int
- terminatedOn: string = <null>
- projectIds: long[*]

TestAutomationCandidate is Auditable
- id: long
- priorityScore: int
- evaluatedOn: string
- evaluatedBy: string
- suggestionStatus: enum(org.squashtest.tm.domain.testcase.SuggestionStatus) = org.squashtest.tm.domain.testcase.SuggestionStatus.SUGGESTED
- decidedOn: string = <null>
- decidedBy: string = <null>
- decidedPriority: int = <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>

AiUse
- aiUseId: long
- use: string

PromptSet is Auditable
- psId: long
- name: string
- description: string
- aiUseId: long
- prompts: Prompt[*]

Prompt
- pId: long
- name: string
- systemPromptTemplate: string
- userPromptTemplate: string

TestAutomationProject
- id: long
- label: string
- remoteName: string
- executionEnvironment: string = ""
- canRunGherkin: boolean = false

Project is Auditable
- projectId: long
- testCaseLibraryNodes: TestCaseLibraryNode[*]
- requirementLibraryNodes: RequirementLibraryNode[*]
- campaignLibraryNodes: CampaignLibraryNode[*]
- actionWordLibraryNodes: ActionWordLibraryNode[*]
- bugTrackerId: long = <null>
- bugtrackerProjectNames: string[*]
- 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
- milestoneIds: long[*]
- scmRepositoryId: long
- testAutomationProjects: TestAutomationProject[*]
- taServerId: long = <null>
- aiServerId: long = <null>

ProjectAiConfiguration
- projectAiConfigurationId: long
- projectId: long
- aiUseId: long
- aiServerId: long = <null>
- promptSetId: long = <null>

Milestone is Auditable
- id: long
- label: string = <null>
- status: enum(org.squashtest.tm.domain.milestone.MilestoneStatus) = org.squashtest.tm.domain.milestone.MilestoneStatus.PLANNED
- endDate: string = <today>
- description: string = ""
- range: enum(org.squashtest.tm.domain.milestone.MilestoneRange) = org.squashtest.tm.domain.milestone.MilestoneRange.GLOBAL
- userId: long = 1

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"

AiServer is ThirdPartyServer
- payloadTemplate: string = <null>
- jsonPath: string = <null>
- provider: string = <null>
- modelName: string = <null>
- options: string = <null>

BugTracker is ThirdPartyServer
- kind: string
- iframeFriendly: boolean = false

CoreUser
- partyId: long
- login: string
- firstName: string
- lastName: string
- email: string
- active: boolean = <true>
- createdBy: string = "dbunit"
- createdOn: string = <today>
- lastModifiedBy: string = <null>
- lastModifiedOn: string = <null>
- lastConnection: string = <null>
- canDeleteFromUI: boolean = <true>

<abstract> ThirdPartyServer is Auditable
- id: long
- name: string
- url: string
- authPolicy: enum(org.squashtest.tm.domain.servers.AuthenticationPolicy) = org.squashtest.tm.domain.servers.AuthenticationPolicy.USER
- authProtocol: enum(org.squashtest.tm.domain.servers.AuthenticationProtocol) = org.squashtest.tm.domain.servers.AuthenticationProtocol.BASIC_AUTH
- description: string = ""

TestAutomationServer is ThirdPartyServer
- serverKind: enum(org.squashtest.tm.domain.testautomation.TestAutomationServerKind) = org.squashtest.tm.domain.testautomation.TestAutomationServerKind.jenkins
- manualSlaveSelection: boolean = false
- observerUrl: string
- eventBusUrl: string
- killSwitchUrl: string
- additionalConfig: string = ""

ScmServer is ThirdPartyServer
- serverKind: string
- committerMail: string = ""
- credentialsNotShared: boolean = false
- repositories: ScmRepository[*]

ScmRepository
- id: long
- name: string
- workingBranch: string = "main"
- repositoryPath: string = ""
- workingFolderPath: string = <null>

<root>
- projects: Project[*]
- customFields: CustomField[*]
- infoLists: InfoList[*]
- promptSets: PromptSet[*]
- apiTokens: ApiToken[*]
- users: CoreUser[*]
- milestones: Milestone[*]
- testCandidateAnalyses: TestCandidateAnalysis[*]
- servers: ThirdPartyServer[*]
- projectAiConfigurations: ProjectAiConfiguration[*]
- requirementVersionLinkTypes: RequirementVersionLinkType[*]
