metis-desk/docs/diagrama-entidad-relacion.md
David b45925f3e2 feat(assets): implement asset picker dialog and selection components
- Added `useAssetPickerController` for managing asset selection logic.
- Created `AssetSelectProps` type for defining asset selection properties.
- Implemented `AssetPickerDialog` for displaying the asset selection interface.
- Developed `AssetPickerList` for rendering the list of selectable assets.
- Introduced `AssetSelect` component for integrating the asset picker into forms.
- Created `AssetList` component for shared asset listing functionality.
- Added tests for workstation creation logic to ensure proper validation.
- Implemented workstation asset fields and association fields for managing workstation assets.
- Developed workstation lifecycle dialog for managing work profile states.
- Added form progress component for visualizing multi-step forms.
2026-10-14 19:42:59 +02:00

53 KiB

Diagrama de entidad relación de la base de datos

Esquema físico consultado en MariaDB el 14 de octubre de 2026 mediante information_schema. Esta instantánea refleja las tablas y restricciones existentes, no un diseño propuesto ni únicamente los modelos de Sequelize. No se han consultado registros de negocio ni modificado la base de datos.

130 tablas y 2 vistas SQL · 999 columnas · 1054 restricciones FK · 355 relaciones distintas (agrupando restricciones con idénticas columnas, destino y reglas).

Cómo leer los diagramas

||: exactamente uno; |o: cero o uno; o{: cero o muchos; o|: cero o uno en el extremo hijo. La nulabilidad de la FK determina si el padre es opcional. Las restricciones PRIMARY/UNIQUE determinan si el hijo puede repetirse. Las líneas discontinuas representan asociaciones por FK; no se deduce composición de dominio a partir de ellas. La etiqueta indica las columnas del hijo.

Los diagramas por área muestran las PK/FK y los padres externos necesarios para entender sus relaciones. Cada tabla pertenece a un área; los padres pueden repetirse como referencia. El archivo completo incluye todas las columnas, también las tablas sin FK. Los nombres son los reales de MariaDB: por ejemplo, las personas se almacenan en company_contacts.

Vista principal

Vista reducida: omite tablas auxiliares e históricas; todas ellas aparecen en las áreas siguientes y en el diagrama completo.

erDiagram
    direction LR
    asset_brands
    asset_definitions
    assets
    companies
    company_contacts
    company_departments
    company_sites
    interventions
    person_department_assignments
    resource_definitions
    resources
    tickets
    users
    work_profiles
    workstation_assets
    workstation_members
    workstations
    companies |o..o{ asset_definitions : "companyId"
    asset_brands |o..o{ assets : "brandId"
    asset_definitions ||..o{ assets : "templateId"
    companies ||..o{ assets : "companyId"
    company_sites |o..o{ assets : "siteId"
    companies ||..o{ company_contacts : "companyId"
    companies ||..o{ company_departments : "companyId"
    companies ||..o{ company_sites : "companyId"
    companies ||..o{ interventions : "companyId"
    tickets |o..o{ interventions : "ticketId"
    users |o..o{ interventions : "assigneeId"
    companies ||..o{ person_department_assignments : "companyId"
    company_contacts ||..o{ person_department_assignments : "personId, companyId"
    company_departments ||..o{ person_department_assignments : "departmentId, companyId"
    companies |o..o{ resource_definitions : "companyId"
    companies ||..o{ resources : "companyId"
    resource_definitions |o..o{ resources : "addressFieldId"
    resource_definitions |o..o{ resources : "contextFieldId"
    resource_definitions |o..o{ resources : "referenceFieldId"
    resource_definitions ||..o{ resources : "templateId"
    companies ||..o{ tickets : "companyId"
    company_contacts |o..o{ tickets : "requesterId"
    users |o..o{ tickets : "assigneeId"
    assets ||..o{ work_profiles : "assetId"
    companies ||..o{ work_profiles : "companyId"
    company_contacts ||..o{ work_profiles : "personId"
    assets ||..o{ workstation_assets : "assetId"
    assets ||..o{ workstation_assets : "companyId, assetId"
    companies ||..o{ workstation_assets : "companyId"
    workstations ||..o{ workstation_assets : "companyId, workstationId"
    workstations ||..o{ workstation_assets : "workstationId"
    assets ||..o{ workstation_members : "assetId"
    workstations ||..o{ workstation_members : "workstationId"
    assets |o..o{ workstations : "computerAssetId"
    companies ||..o{ workstations : "companyId"
    company_contacts |o..o{ workstations : "personId"
    company_sites |o..o{ workstations : "siteId"

Áreas del esquema

Área Tablas
Cuentas y accesos: histórico 15
Cuentas y accesos: estado actual 18
Vistas SQL de cuentas y accesos 2
Correo y configuraciones 16
Activos y catálogo 18
Compañías y personas 8
Usuarios y sesión 3
Tickets e intervenciones 19
Procesos de personas 9
Teletrabajo y conexiones remotas 4
Recursos y catálogo 13
Perfiles de usuario 2
Puestos de trabajo 5

Cuentas y accesos: histórico

Tablas propias: access_account_person_revision_values, access_account_revision_values, access_coverage_revision_values, access_environment_revision_values, access_grant_revision_values, access_group_revision_values, access_membership_revision_values, access_need_revision_permissions, access_need_revision_values, access_permission_revision_values, access_resource_revision_values, access_resource_type_revision_values, access_revisions, access_system_revision_values, access_template_revision_values.

erDiagram
    direction LR
    access_account_person_revision_values {
        char ownerId PK,FK
        char accountId FK
        char personId FK
    }
    access_account_revision_values {
        char ownerId PK,FK
        char systemId FK
        char environmentId FK "nullable"
    }
    access_coverage_revision_values {
        char ownerId PK,FK
        char needId FK
        char grantId FK
        char accountPersonId FK
        char membershipId FK "nullable"
    }
    access_environment_revision_values {
        char ownerId PK,FK
        char systemId FK
    }
    access_grant_revision_values {
        char ownerId PK,FK
        char resourceId FK
        char permissionId FK
        char accountId FK "nullable"
        char groupId FK "nullable"
    }
    access_group_revision_values {
        char ownerId PK,FK
        char systemId FK
        char environmentId FK "nullable"
        char templateId FK "nullable"
    }
    access_items {
        char id PK
        char workspaceId FK
    }
    access_membership_revision_values {
        char ownerId PK,FK
        char accountId FK
        char groupId FK
    }
    access_need_revision_permissions {
        char ownerId PK,FK
        int position PK
        char permissionId FK
    }
    access_need_revision_values {
        char ownerId PK,FK
        char personId FK
        char resourceId FK
    }
    access_permission_revision_values {
        char ownerId PK,FK
        char resourceTypeId FK
    }
    access_resource_revision_values {
        char ownerId PK,FK
        char resourceTypeId FK
        char systemId FK "nullable"
        char environmentId FK "nullable"
    }
    access_resource_type_revision_values {
        char ownerId PK,FK
    }
    access_revisions {
        char id PK
        char itemId FK
        char actorId FK
    }
    access_system_revision_values {
        char ownerId PK,FK
    }
    access_template_revision_values {
        char ownerId PK,FK
        char systemId FK "nullable"
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    users {
        char id PK
    }
    access_items ||..o{ access_account_person_revision_values : "accountId"
    access_revisions ||..o| access_account_person_revision_values : "ownerId"
    company_contacts ||..o{ access_account_person_revision_values : "personId"
    access_items |o..o{ access_account_revision_values : "environmentId"
    access_items ||..o{ access_account_revision_values : "systemId"
    access_revisions ||..o| access_account_revision_values : "ownerId"
    access_items ||..o{ access_coverage_revision_values : "accountPersonId"
    access_items ||..o{ access_coverage_revision_values : "grantId"
    access_items |o..o{ access_coverage_revision_values : "membershipId"
    access_items ||..o{ access_coverage_revision_values : "needId"
    access_revisions ||..o| access_coverage_revision_values : "ownerId"
    access_items ||..o{ access_environment_revision_values : "systemId"
    access_revisions ||..o| access_environment_revision_values : "ownerId"
    access_items |o..o{ access_grant_revision_values : "accountId"
    access_items |o..o{ access_grant_revision_values : "groupId"
    access_items ||..o{ access_grant_revision_values : "permissionId"
    access_items ||..o{ access_grant_revision_values : "resourceId"
    access_revisions ||..o| access_grant_revision_values : "ownerId"
    access_items |o..o{ access_group_revision_values : "environmentId"
    access_items ||..o{ access_group_revision_values : "systemId"
    access_items |o..o{ access_group_revision_values : "templateId"
    access_revisions ||..o| access_group_revision_values : "ownerId"
    access_items ||..o{ access_membership_revision_values : "accountId"
    access_items ||..o{ access_membership_revision_values : "groupId"
    access_revisions ||..o| access_membership_revision_values : "ownerId"
    access_items ||..o{ access_need_revision_permissions : "permissionId"
    access_need_revision_values ||..o{ access_need_revision_permissions : "ownerId"
    access_items ||..o{ access_need_revision_values : "resourceId"
    access_revisions ||..o| access_need_revision_values : "ownerId"
    company_contacts ||..o{ access_need_revision_values : "personId"
    access_items ||..o{ access_permission_revision_values : "resourceTypeId"
    access_revisions ||..o| access_permission_revision_values : "ownerId"
    access_items |o..o{ access_resource_revision_values : "environmentId"
    access_items ||..o{ access_resource_revision_values : "resourceTypeId"
    access_items |o..o{ access_resource_revision_values : "systemId"
    access_revisions ||..o| access_resource_revision_values : "ownerId"
    access_revisions ||..o| access_resource_type_revision_values : "ownerId"
    access_items ||..o{ access_revisions : "itemId"
    users ||..o{ access_revisions : "actorId"
    access_revisions ||..o| access_system_revision_values : "ownerId"
    access_items |o..o{ access_template_revision_values : "systemId"
    access_revisions ||..o| access_template_revision_values : "ownerId"

Cuentas y accesos: estado actual

Tablas propias: access_account_person_values, access_account_values, access_coverage_values, access_environment_values, access_grant_values, access_group_values, access_items, access_membership_values, access_need_permissions, access_need_values, access_permission_values, access_person_references, access_references, access_resource_type_values, access_resource_values, access_system_values, access_template_values, access_workspaces.

erDiagram
    direction LR
    access_account_person_values {
        char ownerId PK,FK
        char accountId FK
        char personId FK
    }
    access_account_values {
        char ownerId PK,FK
        char systemId FK
        char environmentId FK "nullable"
    }
    access_coverage_values {
        char ownerId PK,FK
        char needId FK
        char grantId FK
        char accountPersonId FK
        char membershipId FK "nullable"
    }
    access_environment_values {
        char ownerId PK,FK
        char systemId FK
    }
    access_grant_values {
        char ownerId PK,FK
        char resourceId FK
        char permissionId FK
        char accountId FK "nullable"
        char groupId FK "nullable"
    }
    access_group_values {
        char ownerId PK,FK
        char systemId FK
        char environmentId FK "nullable"
        char templateId FK "nullable"
    }
    access_items {
        char id PK
        char workspaceId FK
    }
    access_membership_values {
        char ownerId PK,FK
        char accountId FK
        char groupId FK
    }
    access_need_permissions {
        char ownerId PK,FK
        int position PK
        char permissionId FK
    }
    access_need_values {
        char ownerId PK,FK
        char personId FK
        char resourceId FK
    }
    access_permission_values {
        char ownerId PK,FK
        char resourceTypeId FK
    }
    access_person_references {
        char itemId PK,FK
        char personId PK,FK
    }
    access_references {
        int id PK
        char itemId FK
        char targetId FK
    }
    access_resource_type_values {
        char ownerId PK,FK
    }
    access_resource_values {
        char ownerId PK,FK
        char resourceTypeId FK
        char systemId FK "nullable"
        char environmentId FK "nullable"
    }
    access_system_values {
        char ownerId PK,FK
    }
    access_template_values {
        char ownerId PK,FK
        char systemId FK "nullable"
    }
    access_workspaces {
        char id PK
        char companyId FK "nullable"
    }
    companies {
        char id PK
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    access_items ||..o{ access_account_person_values : "accountId"
    access_items ||..o| access_account_person_values : "ownerId"
    company_contacts ||..o{ access_account_person_values : "personId"
    access_items |o..o{ access_account_values : "environmentId"
    access_items ||..o| access_account_values : "ownerId"
    access_items ||..o{ access_account_values : "systemId"
    access_items ||..o{ access_coverage_values : "accountPersonId"
    access_items ||..o{ access_coverage_values : "grantId"
    access_items |o..o{ access_coverage_values : "membershipId"
    access_items ||..o{ access_coverage_values : "needId"
    access_items ||..o| access_coverage_values : "ownerId"
    access_items ||..o| access_environment_values : "ownerId"
    access_items ||..o{ access_environment_values : "systemId"
    access_items |o..o{ access_grant_values : "accountId"
    access_items |o..o{ access_grant_values : "groupId"
    access_items ||..o| access_grant_values : "ownerId"
    access_items ||..o{ access_grant_values : "permissionId"
    access_items ||..o{ access_grant_values : "resourceId"
    access_items |o..o{ access_group_values : "environmentId"
    access_items ||..o| access_group_values : "ownerId"
    access_items ||..o{ access_group_values : "systemId"
    access_items |o..o{ access_group_values : "templateId"
    access_workspaces ||..o{ access_items : "workspaceId"
    access_items ||..o{ access_membership_values : "accountId"
    access_items ||..o{ access_membership_values : "groupId"
    access_items ||..o| access_membership_values : "ownerId"
    access_items ||..o{ access_need_permissions : "permissionId"
    access_need_values ||..o{ access_need_permissions : "ownerId"
    access_items ||..o| access_need_values : "ownerId"
    access_items ||..o{ access_need_values : "resourceId"
    company_contacts ||..o{ access_need_values : "personId"
    access_items ||..o| access_permission_values : "ownerId"
    access_items ||..o{ access_permission_values : "resourceTypeId"
    access_items ||..o{ access_person_references : "itemId"
    company_contacts ||..o{ access_person_references : "personId"
    access_items ||..o{ access_references : "itemId"
    access_items ||..o{ access_references : "targetId"
    access_items ||..o| access_resource_type_values : "ownerId"
    access_items |o..o{ access_resource_values : "environmentId"
    access_items ||..o| access_resource_values : "ownerId"
    access_items ||..o{ access_resource_values : "resourceTypeId"
    access_items |o..o{ access_resource_values : "systemId"
    access_items ||..o| access_system_values : "ownerId"
    access_items ||..o| access_template_values : "ownerId"
    access_items |o..o{ access_template_values : "systemId"
    companies |o..o{ access_workspaces : "companyId"

Vistas SQL de cuentas y accesos

Tablas propias: access_current_values, access_historical_values.

erDiagram
    direction LR
    access_current_values
    access_historical_values

Correo y configuraciones

Tablas propias: application_configuration_revisions, application_configurations, certificate_configuration_revisions, certificate_configurations, folder_mapping_revisions, folder_mappings, mail_configuration_revisions, mail_configurations, mailbox_revisions, mailbox_use_revisions, mailbox_uses, mailboxes, printer_configuration_revisions, printer_configurations, software_installation_revisions, software_installations.

erDiagram
    direction LR
    access_items {
        char id PK
        char workspaceId FK
    }
    application_configuration_revisions {
        char id PK
        char configurationId FK
        char actorId FK
        char profileId FK "nullable"
        char resourceId FK "nullable"
    }
    application_configurations {
        char id PK
        char companyId FK
        char profileId FK
        char resourceId FK
    }
    assets {
        char id PK
        char companyId FK
        char templateId FK
        char siteId FK "nullable"
        char brandId FK "nullable"
    }
    certificate_configuration_revisions {
        char id PK
        char configurationId FK
        char actorId FK
        char profileId FK "nullable"
        char resourceId FK "nullable"
    }
    certificate_configurations {
        char id PK
        char companyId FK
        char profileId FK
        char resourceId FK
    }
    companies {
        char id PK
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    folder_mapping_revisions {
        char id PK
        char mappingId FK
        char actorId FK
        char profileId FK "nullable"
        char needId FK "nullable"
    }
    folder_mappings {
        char id PK
        char companyId FK
        char profileId FK
        char needId FK
    }
    mail_configuration_revisions {
        char id PK
        char configurationId FK
        char actorId FK
        char personId FK "nullable"
        char accountId FK "nullable"
        char assetId FK "nullable"
        char profileId FK "nullable"
        char mailboxId FK "nullable"
    }
    mail_configurations {
        char id PK
        char companyId FK
        char personId FK "nullable"
        char accountId FK "nullable"
        char assetId FK "nullable"
        char profileId FK "nullable"
        char mailboxId FK "nullable"
    }
    mailbox_revisions {
        char id PK
        char itemId FK
        char actorId FK
        char accountId FK "nullable"
    }
    mailbox_use_revisions {
        char id PK
        char itemId FK
        char actorId FK
        char mailboxId FK "nullable"
        char personId FK "nullable"
    }
    mailbox_uses {
        char id PK
        char companyId FK
        char mailboxId FK
        char personId FK
    }
    mailboxes {
        char id PK
        char companyId FK
        char accountId FK "nullable"
    }
    printer_configuration_revisions {
        char id PK
        char configurationId FK
        char actorId FK
        char profileId FK "nullable"
        char printerId FK "nullable"
    }
    printer_configurations {
        char id PK
        char companyId FK
        char profileId FK
        char printerId FK
    }
    resources {
        char id PK
        char companyId FK
        char templateId FK
        char addressFieldId FK "nullable"
        char contextFieldId FK "nullable"
        char accountId FK "nullable"
        char referenceFieldId FK "nullable"
        char resourceTypeId FK "nullable"
        char systemId FK "nullable"
        char environmentId FK "nullable"
    }
    software_installation_revisions {
        char id PK
        char configurationId FK
        char assetId FK
        char resourceId FK
        char actorId FK
        char licenseResourceId FK "nullable"
    }
    software_installations {
        char id PK
        char companyId FK
        char assetId FK
        char resourceId FK
        char licenseResourceId FK "nullable"
    }
    users {
        char id PK
    }
    work_profiles {
        char id PK
        char companyId FK
        char personId FK
        char accountId FK "nullable"
        char assetId FK
    }
    application_configurations ||..o{ application_configuration_revisions : "configurationId"
    resources |o..o{ application_configuration_revisions : "resourceId"
    users ||..o{ application_configuration_revisions : "actorId"
    work_profiles |o..o{ application_configuration_revisions : "profileId"
    companies ||..o{ application_configurations : "companyId"
    resources ||..o{ application_configurations : "resourceId"
    work_profiles ||..o{ application_configurations : "profileId"
    certificate_configurations ||..o{ certificate_configuration_revisions : "configurationId"
    resources |o..o{ certificate_configuration_revisions : "resourceId"
    users ||..o{ certificate_configuration_revisions : "actorId"
    work_profiles |o..o{ certificate_configuration_revisions : "profileId"
    companies ||..o{ certificate_configurations : "companyId"
    resources ||..o{ certificate_configurations : "resourceId"
    work_profiles ||..o{ certificate_configurations : "profileId"
    access_items |o..o{ folder_mapping_revisions : "needId"
    folder_mappings ||..o{ folder_mapping_revisions : "mappingId"
    users ||..o{ folder_mapping_revisions : "actorId"
    work_profiles |o..o{ folder_mapping_revisions : "profileId"
    access_items ||..o{ folder_mappings : "needId"
    companies ||..o{ folder_mappings : "companyId"
    work_profiles ||..o{ folder_mappings : "profileId"
    access_items |o..o{ mail_configuration_revisions : "accountId"
    assets |o..o{ mail_configuration_revisions : "assetId"
    company_contacts |o..o{ mail_configuration_revisions : "personId"
    mail_configurations ||..o{ mail_configuration_revisions : "configurationId"
    mailboxes |o..o{ mail_configuration_revisions : "mailboxId"
    users ||..o{ mail_configuration_revisions : "actorId"
    work_profiles |o..o{ mail_configuration_revisions : "profileId"
    access_items |o..o{ mail_configurations : "accountId"
    assets |o..o{ mail_configurations : "assetId"
    companies ||..o{ mail_configurations : "companyId"
    company_contacts |o..o{ mail_configurations : "personId"
    mailboxes |o..o{ mail_configurations : "mailboxId"
    work_profiles |o..o{ mail_configurations : "profileId"
    access_items |o..o{ mailbox_revisions : "accountId"
    mailboxes ||..o{ mailbox_revisions : "itemId"
    users ||..o{ mailbox_revisions : "actorId"
    company_contacts |o..o{ mailbox_use_revisions : "personId"
    mailbox_uses ||..o{ mailbox_use_revisions : "itemId"
    mailboxes |o..o{ mailbox_use_revisions : "mailboxId"
    users ||..o{ mailbox_use_revisions : "actorId"
    companies ||..o{ mailbox_uses : "companyId"
    company_contacts ||..o{ mailbox_uses : "personId"
    mailboxes ||..o{ mailbox_uses : "mailboxId"
    access_items |o..o{ mailboxes : "accountId"
    companies ||..o{ mailboxes : "companyId"
    assets |o..o{ printer_configuration_revisions : "printerId"
    printer_configurations ||..o{ printer_configuration_revisions : "configurationId"
    users ||..o{ printer_configuration_revisions : "actorId"
    work_profiles |o..o{ printer_configuration_revisions : "profileId"
    assets ||..o{ printer_configurations : "printerId"
    companies ||..o{ printer_configurations : "companyId"
    work_profiles ||..o{ printer_configurations : "profileId"
    assets ||..o{ software_installation_revisions : "assetId"
    resources |o..o{ software_installation_revisions : "licenseResourceId"
    resources ||..o{ software_installation_revisions : "resourceId"
    software_installations ||..o{ software_installation_revisions : "configurationId"
    users ||..o{ software_installation_revisions : "actorId"
    assets ||..o{ software_installations : "assetId"
    companies ||..o{ software_installations : "companyId"
    resources |o..o{ software_installations : "licenseResourceId"
    resources ||..o{ software_installations : "resourceId"

Tablas propias: asset_availability, asset_brands, asset_catalogs, asset_characteristics, asset_definitions, asset_field_choices, asset_relationships, asset_revision_characteristics, asset_revisions, asset_specification_field_choices, asset_specification_fields, asset_specification_sections, asset_support, asset_support_revisions, asset_template_fields, asset_template_sections, assets, brand_catalog_lock.

erDiagram
    direction LR
    asset_availability {
        char id PK
        char catalogId FK
        char companyId FK
        char definitionId FK
    }
    asset_brands {
        char id PK
    }
    asset_catalogs {
        char id PK
    }
    asset_characteristics {
        char assetId PK,FK
        char fieldId PK,FK
    }
    asset_definitions {
        char id PK
        char catalogId FK
        char companyId FK "nullable"
    }
    asset_field_choices {
        char fieldId PK,FK
        int position PK
    }
    asset_relationships {
        char id PK
        char companyId FK
        char sourceId FK
        char targetId FK
        char typeId FK
        char createdBy FK
        char endedBy FK "nullable"
    }
    asset_revision_characteristics {
        char revisionId PK,FK
        char assetId FK
        char fieldId PK,FK
    }
    asset_revisions {
        char id PK
        char assetId FK
        char actorId FK
        char siteId FK "nullable"
        char brandId FK "nullable"
        char templateId FK
    }
    asset_specification_field_choices {
        char assetId PK,FK
        char fieldId PK,FK
        int position PK
    }
    asset_specification_fields {
        char assetId PK,FK
        char fieldId PK,FK
        char sectionId FK "nullable"
    }
    asset_specification_sections {
        char assetId PK,FK
        char id PK
    }
    asset_support {
        char id PK
        char companyId FK
        char assetId FK
        char resourceId FK
    }
    asset_support_revisions {
        char id PK
        char connectionId FK
        char actorId FK
        char resourceId FK
    }
    asset_template_fields {
        char id PK
        char templateId FK
        char fieldId FK
        char sectionId FK "nullable"
    }
    asset_template_sections {
        char id PK
        char templateId FK
    }
    assets {
        char id PK
        char companyId FK
        char templateId FK
        char siteId FK "nullable"
        char brandId FK "nullable"
    }
    brand_catalog_lock {
        int id PK
    }
    companies {
        char id PK
    }
    company_sites {
        char id PK
        char companyId FK
    }
    resources {
        char id PK
        char companyId FK
        char templateId FK
        char addressFieldId FK "nullable"
        char contextFieldId FK "nullable"
        char accountId FK "nullable"
        char referenceFieldId FK "nullable"
        char resourceTypeId FK "nullable"
        char systemId FK "nullable"
        char environmentId FK "nullable"
    }
    users {
        char id PK
    }
    asset_catalogs ||..o{ asset_availability : "catalogId"
    asset_definitions ||..o{ asset_availability : "definitionId"
    companies ||..o{ asset_availability : "companyId"
    asset_definitions ||..o{ asset_characteristics : "fieldId"
    asset_specification_fields ||..o| asset_characteristics : "assetId, fieldId"
    assets ||..o{ asset_characteristics : "assetId"
    asset_catalogs ||..o{ asset_definitions : "catalogId"
    companies |o..o{ asset_definitions : "companyId"
    asset_definitions ||..o{ asset_field_choices : "fieldId"
    asset_definitions ||..o{ asset_relationships : "typeId"
    assets ||..o{ asset_relationships : "companyId, sourceId"
    assets ||..o{ asset_relationships : "companyId, targetId"
    assets ||..o{ asset_relationships : "sourceId"
    assets ||..o{ asset_relationships : "targetId"
    companies ||..o{ asset_relationships : "companyId"
    users ||..o{ asset_relationships : "createdBy"
    users |o..o{ asset_relationships : "endedBy"
    asset_definitions ||..o{ asset_revision_characteristics : "fieldId"
    asset_revisions ||..o{ asset_revision_characteristics : "revisionId"
    asset_revisions ||..o{ asset_revision_characteristics : "revisionId, assetId"
    asset_specification_fields ||..o{ asset_revision_characteristics : "assetId, fieldId"
    assets ||..o{ asset_revision_characteristics : "assetId"
    asset_brands |o..o{ asset_revisions : "brandId"
    asset_definitions ||..o{ asset_revisions : "templateId"
    assets ||..o{ asset_revisions : "assetId"
    company_sites |o..o{ asset_revisions : "siteId"
    users ||..o{ asset_revisions : "actorId"
    asset_definitions ||..o{ asset_specification_field_choices : "fieldId"
    asset_specification_fields ||..o{ asset_specification_field_choices : "assetId, fieldId"
    assets ||..o{ asset_specification_field_choices : "assetId"
    asset_definitions ||..o{ asset_specification_fields : "fieldId"
    asset_specification_sections |o..o{ asset_specification_fields : "assetId, sectionId"
    assets ||..o{ asset_specification_fields : "assetId"
    assets ||..o{ asset_specification_sections : "assetId"
    assets ||..o{ asset_support : "assetId"
    assets ||..o{ asset_support : "companyId, assetId"
    companies ||..o{ asset_support : "companyId"
    resources ||..o{ asset_support : "companyId, resourceId"
    resources ||..o{ asset_support : "resourceId"
    asset_support ||..o{ asset_support_revisions : "connectionId"
    resources ||..o{ asset_support_revisions : "resourceId"
    users ||..o{ asset_support_revisions : "actorId"
    asset_definitions ||..o{ asset_template_fields : "fieldId"
    asset_definitions ||..o{ asset_template_fields : "templateId"
    asset_template_sections |o..o{ asset_template_fields : "sectionId"
    asset_template_sections |o..o{ asset_template_fields : "templateId, sectionId"
    asset_definitions ||..o{ asset_template_sections : "templateId"
    asset_brands |o..o{ assets : "brandId"
    asset_definitions ||..o{ assets : "templateId"
    companies ||..o{ assets : "companyId"
    company_sites |o..o{ assets : "siteId"

Compañías y personas

Tablas propias: companies, company_contacts, company_departments, company_logos, company_sites, department_assignment_revisions, person_department_assignments, person_photos.

erDiagram
    direction LR
    companies {
        char id PK
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    company_departments {
        char id PK
        char companyId FK
    }
    company_logos {
        char companyId PK,FK
    }
    company_sites {
        char id PK
        char companyId FK
    }
    department_assignment_revisions {
        char id PK
        char assignmentId FK
    }
    person_department_assignments {
        char id PK
        char companyId FK
        char personId FK
        char departmentId FK
    }
    person_photos {
        char personId PK,FK
        char companyId FK
    }
    companies ||..o{ company_contacts : "companyId"
    companies ||..o{ company_departments : "companyId"
    companies ||..o| company_logos : "companyId"
    companies ||..o{ company_sites : "companyId"
    person_department_assignments ||..o{ department_assignment_revisions : "assignmentId"
    companies ||..o{ person_department_assignments : "companyId"
    company_contacts ||..o{ person_department_assignments : "personId, companyId"
    company_departments ||..o{ person_department_assignments : "departmentId, companyId"
    company_contacts ||..o| person_photos : "personId, companyId"

Usuarios y sesión

Tablas propias: http_sessions, identity_state, users.

erDiagram
    direction LR
    http_sessions {
        varchar sid PK
        char userId FK "nullable"
    }
    identity_state {
        int id PK
        char initialAdminId FK "nullable"
    }
    users {
        char id PK
    }
    users |o..o{ http_sessions : "userId"
    users |o..o{ identity_state : "initialAdminId"

Tickets e intervenciones

Tablas propias: intervention_counter, intervention_procedure_steps, intervention_procedures, intervention_revision_steps, intervention_revision_targets, intervention_revisions, intervention_steps, intervention_targets, intervention_template_lock, intervention_template_revision_steps, intervention_template_revisions, intervention_template_steps, intervention_templates, interventions, ticket_counter, ticket_revision_targets, ticket_revisions, ticket_targets, tickets.

erDiagram
    direction LR
    assets {
        char id PK
        char companyId FK
        char templateId FK
        char siteId FK "nullable"
        char brandId FK "nullable"
    }
    companies {
        char id PK
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    intervention_counter {
        int id PK
    }
    intervention_procedure_steps {
        char ownerId PK,FK
        char stepId PK
    }
    intervention_procedures {
        char interventionId PK,FK
        char templateId FK
        char revisionId FK
    }
    intervention_revision_steps {
        char ownerId PK,FK
        char stepId PK
    }
    intervention_revision_targets {
        char ownerId PK,FK
        int position PK
        char personId FK "nullable"
        char workstationId FK "nullable"
        char assetId FK "nullable"
        char resourceId FK "nullable"
    }
    intervention_revisions {
        char id PK
        char interventionId FK
        char actorId FK
        char ticketId FK "nullable"
        char assigneeId FK "nullable"
    }
    intervention_steps {
        char ownerId PK,FK
        char stepId PK
    }
    intervention_targets {
        char ownerId PK,FK
        int position PK
        char personId FK "nullable"
        char workstationId FK "nullable"
        char assetId FK "nullable"
        char resourceId FK "nullable"
    }
    intervention_template_lock {
        int id PK
    }
    intervention_template_revision_steps {
        char ownerId PK,FK
        char stepId PK
    }
    intervention_template_revisions {
        char id PK
        char templateId FK
        char actorId FK "nullable"
    }
    intervention_template_steps {
        char ownerId PK,FK
        char stepId PK
    }
    intervention_templates {
        char id PK
        char companyId FK "nullable"
    }
    interventions {
        char id PK
        char companyId FK
        char ticketId FK "nullable"
        char assigneeId FK "nullable"
    }
    resources {
        char id PK
        char companyId FK
        char templateId FK
        char addressFieldId FK "nullable"
        char contextFieldId FK "nullable"
        char accountId FK "nullable"
        char referenceFieldId FK "nullable"
        char resourceTypeId FK "nullable"
        char systemId FK "nullable"
        char environmentId FK "nullable"
    }
    ticket_counter {
        int id PK
    }
    ticket_revision_targets {
        char ownerId PK,FK
        int position PK
        char personId FK "nullable"
        char workstationId FK "nullable"
        char assetId FK "nullable"
        char resourceId FK "nullable"
    }
    ticket_revisions {
        char id PK
        char ticketId FK
        char actorId FK
        char requesterId FK "nullable"
        char assigneeId FK "nullable"
    }
    ticket_targets {
        char ownerId PK,FK
        int position PK
        char personId FK "nullable"
        char workstationId FK "nullable"
        char assetId FK "nullable"
        char resourceId FK "nullable"
    }
    tickets {
        char id PK
        char companyId FK
        char requesterId FK "nullable"
        char assigneeId FK "nullable"
    }
    users {
        char id PK
    }
    workstations {
        char id PK
        char companyId FK
        char siteId FK "nullable"
        char personId FK "nullable"
        char computerAssetId FK "nullable"
    }
    intervention_procedures ||..o{ intervention_procedure_steps : "ownerId"
    intervention_template_revisions ||..o{ intervention_procedures : "revisionId"
    intervention_template_revisions ||..o{ intervention_procedures : "templateId, revisionId"
    intervention_templates ||..o{ intervention_procedures : "templateId"
    interventions ||..o| intervention_procedures : "interventionId"
    intervention_revisions ||..o{ intervention_revision_steps : "ownerId"
    assets |o..o{ intervention_revision_targets : "assetId"
    company_contacts |o..o{ intervention_revision_targets : "personId"
    intervention_revisions ||..o{ intervention_revision_targets : "ownerId"
    resources |o..o{ intervention_revision_targets : "resourceId"
    workstations |o..o{ intervention_revision_targets : "workstationId"
    interventions ||..o{ intervention_revisions : "interventionId"
    tickets |o..o{ intervention_revisions : "ticketId"
    users ||..o{ intervention_revisions : "actorId"
    users |o..o{ intervention_revisions : "assigneeId"
    interventions ||..o{ intervention_steps : "ownerId"
    assets |o..o{ intervention_targets : "assetId"
    company_contacts |o..o{ intervention_targets : "personId"
    interventions ||..o{ intervention_targets : "ownerId"
    resources |o..o{ intervention_targets : "resourceId"
    workstations |o..o{ intervention_targets : "workstationId"
    intervention_template_revisions ||..o{ intervention_template_revision_steps : "ownerId"
    intervention_templates ||..o{ intervention_template_revisions : "templateId"
    users |o..o{ intervention_template_revisions : "actorId"
    intervention_templates ||..o{ intervention_template_steps : "ownerId"
    companies |o..o{ intervention_templates : "companyId"
    companies ||..o{ interventions : "companyId"
    tickets |o..o{ interventions : "ticketId"
    users |o..o{ interventions : "assigneeId"
    assets |o..o{ ticket_revision_targets : "assetId"
    company_contacts |o..o{ ticket_revision_targets : "personId"
    resources |o..o{ ticket_revision_targets : "resourceId"
    ticket_revisions ||..o{ ticket_revision_targets : "ownerId"
    workstations |o..o{ ticket_revision_targets : "workstationId"
    company_contacts |o..o{ ticket_revisions : "requesterId"
    tickets ||..o{ ticket_revisions : "ticketId"
    users ||..o{ ticket_revisions : "actorId"
    users |o..o{ ticket_revisions : "assigneeId"
    assets |o..o{ ticket_targets : "assetId"
    company_contacts |o..o{ ticket_targets : "personId"
    resources |o..o{ ticket_targets : "resourceId"
    tickets ||..o{ ticket_targets : "ownerId"
    workstations |o..o{ ticket_targets : "workstationId"
    companies ||..o{ tickets : "companyId"
    company_contacts |o..o{ tickets : "requesterId"
    users |o..o{ tickets : "assigneeId"

Procesos de personas

Tablas propias: person_process_revision_tasks, person_process_revisions, person_process_tasks, person_processes, process_catalog_lock, process_template_instructions, process_template_revision_instructions, process_template_revisions, process_templates.

erDiagram
    direction LR
    companies {
        char id PK
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    person_process_revision_tasks {
        char ownerId PK,FK
        char taskId PK
    }
    person_process_revisions {
        char id PK
        char actorId FK "nullable"
        char itemId FK
        char personId FK "nullable"
        char templateId FK "nullable"
    }
    person_process_tasks {
        char ownerId PK,FK
        char taskId PK
    }
    person_processes {
        char id PK
        char companyId FK
        char personId FK
        char templateId FK
    }
    process_catalog_lock {
        int id PK
    }
    process_template_instructions {
        char ownerId PK,FK
        int position PK
    }
    process_template_revision_instructions {
        char ownerId PK,FK
        int position PK
    }
    process_template_revisions {
        char id PK
        char actorId FK "nullable"
        char itemId FK
    }
    process_templates {
        char id PK
    }
    users {
        char id PK
    }
    person_process_revisions ||..o{ person_process_revision_tasks : "ownerId"
    company_contacts |o..o{ person_process_revisions : "personId"
    person_processes ||..o{ person_process_revisions : "itemId"
    process_templates |o..o{ person_process_revisions : "templateId"
    users |o..o{ person_process_revisions : "actorId"
    person_processes ||..o{ person_process_tasks : "ownerId"
    companies ||..o{ person_processes : "companyId"
    company_contacts ||..o{ person_processes : "personId"
    process_templates ||..o{ person_processes : "templateId"
    process_templates ||..o{ process_template_instructions : "ownerId"
    process_template_revisions ||..o{ process_template_revision_instructions : "ownerId"
    process_templates ||..o{ process_template_revisions : "itemId"
    users |o..o{ process_template_revisions : "actorId"

Teletrabajo y conexiones remotas

Tablas propias: remote_connection_revisions, remote_connections, telework_authorization_revisions, telework_authorizations.

erDiagram
    direction LR
    assets {
        char id PK
        char companyId FK
        char templateId FK
        char siteId FK "nullable"
        char brandId FK "nullable"
    }
    companies {
        char id PK
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    company_sites {
        char id PK
        char companyId FK
    }
    remote_connection_revisions {
        char id PK
        char connectionId FK
        char actorId FK
        char personId FK "nullable"
        char sourceAssetId FK "nullable"
        char targetAssetId FK "nullable"
        char targetResourceId FK "nullable"
        char siteId FK "nullable"
    }
    remote_connections {
        char id PK
        char companyId FK
        char personId FK
        char sourceAssetId FK "nullable"
        char targetAssetId FK "nullable"
        char targetResourceId FK "nullable"
        char siteId FK "nullable"
    }
    resources {
        char id PK
        char companyId FK
        char templateId FK
        char addressFieldId FK "nullable"
        char contextFieldId FK "nullable"
        char accountId FK "nullable"
        char referenceFieldId FK "nullable"
        char resourceTypeId FK "nullable"
        char systemId FK "nullable"
        char environmentId FK "nullable"
    }
    telework_authorization_revisions {
        char id PK
        char authorizationId FK
        char actorId FK
        char personId FK "nullable"
    }
    telework_authorizations {
        char id PK
        char companyId FK
        char personId FK
    }
    users {
        char id PK
    }
    assets |o..o{ remote_connection_revisions : "sourceAssetId"
    assets |o..o{ remote_connection_revisions : "targetAssetId"
    company_contacts |o..o{ remote_connection_revisions : "personId"
    company_sites |o..o{ remote_connection_revisions : "siteId"
    remote_connections ||..o{ remote_connection_revisions : "connectionId"
    resources |o..o{ remote_connection_revisions : "targetResourceId"
    users ||..o{ remote_connection_revisions : "actorId"
    assets |o..o{ remote_connections : "sourceAssetId"
    assets |o..o{ remote_connections : "targetAssetId"
    companies ||..o{ remote_connections : "companyId"
    company_contacts ||..o{ remote_connections : "personId"
    company_sites |o..o{ remote_connections : "siteId"
    resources |o..o{ remote_connections : "targetResourceId"
    company_contacts |o..o{ telework_authorization_revisions : "personId"
    telework_authorizations ||..o{ telework_authorization_revisions : "authorizationId"
    users ||..o{ telework_authorization_revisions : "actorId"
    companies ||..o{ telework_authorizations : "companyId"
    company_contacts ||..o| telework_authorizations : "personId"

Tablas propias: resource_availability, resource_catalogs, resource_characteristics, resource_definitions, resource_field_choices, resource_revision_characteristics, resource_revisions, resource_specification_field_choices, resource_specification_fields, resource_specification_sections, resource_template_fields, resource_template_sections, resources.

erDiagram
    direction LR
    access_items {
        char id PK
        char workspaceId FK
    }
    companies {
        char id PK
    }
    resource_availability {
        char id PK
        char catalogId FK
        char companyId FK
        char definitionId FK
    }
    resource_catalogs {
        char id PK
    }
    resource_characteristics {
        char resourceId PK,FK
        char fieldId PK,FK
    }
    resource_definitions {
        char id PK
        char catalogId FK
        char companyId FK "nullable"
    }
    resource_field_choices {
        char fieldId PK,FK
        int position PK
    }
    resource_revision_characteristics {
        char revisionId PK,FK
        char resourceId FK
        char fieldId PK,FK
    }
    resource_revisions {
        char id PK
        char resourceId FK
        char actorId FK
        char addressFieldId FK "nullable"
        char contextFieldId FK "nullable"
        char accountId FK "nullable"
        char referenceFieldId FK "nullable"
        char resourceTypeId FK "nullable"
        char systemId FK "nullable"
        char environmentId FK "nullable"
        char templateId FK "nullable"
    }
    resource_specification_field_choices {
        char resourceId PK,FK
        char fieldId PK,FK
        int position PK
    }
    resource_specification_fields {
        char resourceId PK,FK
        char fieldId PK,FK
    }
    resource_specification_sections {
        char resourceId PK,FK
        char id PK
    }
    resource_template_fields {
        char id PK
        char templateId FK
        char fieldId FK
        char sectionId FK "nullable"
    }
    resource_template_sections {
        char id PK
        char templateId PK,FK
    }
    resources {
        char id PK
        char companyId FK
        char templateId FK
        char addressFieldId FK "nullable"
        char contextFieldId FK "nullable"
        char accountId FK "nullable"
        char referenceFieldId FK "nullable"
        char resourceTypeId FK "nullable"
        char systemId FK "nullable"
        char environmentId FK "nullable"
    }
    users {
        char id PK
    }
    companies ||..o{ resource_availability : "companyId"
    resource_catalogs ||..o{ resource_availability : "catalogId"
    resource_definitions ||..o{ resource_availability : "definitionId"
    resource_definitions ||..o{ resource_characteristics : "fieldId"
    resources ||..o{ resource_characteristics : "resourceId"
    companies |o..o{ resource_definitions : "companyId"
    resource_catalogs ||..o{ resource_definitions : "catalogId"
    resource_definitions ||..o{ resource_field_choices : "fieldId"
    resource_definitions ||..o{ resource_revision_characteristics : "fieldId"
    resource_revisions ||..o{ resource_revision_characteristics : "revisionId"
    resources ||..o{ resource_revision_characteristics : "resourceId"
    access_items |o..o{ resource_revisions : "accountId"
    access_items |o..o{ resource_revisions : "environmentId"
    access_items |o..o{ resource_revisions : "resourceTypeId"
    access_items |o..o{ resource_revisions : "systemId"
    resource_definitions |o..o{ resource_revisions : "addressFieldId"
    resource_definitions |o..o{ resource_revisions : "contextFieldId"
    resource_definitions |o..o{ resource_revisions : "referenceFieldId"
    resource_definitions |o..o{ resource_revisions : "templateId"
    resources ||..o{ resource_revisions : "resourceId"
    users ||..o{ resource_revisions : "actorId"
    resource_definitions ||..o{ resource_specification_field_choices : "fieldId"
    resources ||..o{ resource_specification_field_choices : "resourceId"
    resource_definitions ||..o{ resource_specification_fields : "fieldId"
    resources ||..o{ resource_specification_fields : "resourceId"
    resources ||..o{ resource_specification_sections : "resourceId"
    resource_definitions ||..o{ resource_template_fields : "fieldId"
    resource_definitions ||..o{ resource_template_fields : "templateId"
    resource_template_sections |o..o{ resource_template_fields : "templateId, sectionId"
    resource_definitions ||..o{ resource_template_sections : "templateId"
    access_items |o..o{ resources : "accountId"
    access_items |o..o{ resources : "environmentId"
    access_items |o..o{ resources : "resourceTypeId"
    access_items |o..o{ resources : "systemId"
    companies ||..o{ resources : "companyId"
    resource_definitions |o..o{ resources : "addressFieldId"
    resource_definitions |o..o{ resources : "contextFieldId"
    resource_definitions |o..o{ resources : "referenceFieldId"
    resource_definitions ||..o{ resources : "templateId"

Perfiles de usuario

Tablas propias: work_profile_revisions, work_profiles.

erDiagram
    direction LR
    access_items {
        char id PK
        char workspaceId FK
    }
    assets {
        char id PK
        char companyId FK
        char templateId FK
        char siteId FK "nullable"
        char brandId FK "nullable"
    }
    companies {
        char id PK
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    users {
        char id PK
    }
    work_profile_revisions {
        char id PK
        char profileId FK
        char accountId FK "nullable"
        char actorId FK
        char personId FK "nullable"
        char assetId FK "nullable"
    }
    work_profiles {
        char id PK
        char companyId FK
        char personId FK
        char accountId FK "nullable"
        char assetId FK
    }
    access_items |o..o{ work_profile_revisions : "accountId"
    assets |o..o{ work_profile_revisions : "assetId"
    company_contacts |o..o{ work_profile_revisions : "personId"
    users ||..o{ work_profile_revisions : "actorId"
    work_profiles ||..o{ work_profile_revisions : "profileId"
    access_items |o..o{ work_profiles : "accountId"
    assets ||..o{ work_profiles : "assetId"
    companies ||..o{ work_profiles : "companyId"
    company_contacts ||..o{ work_profiles : "personId"

Puestos de trabajo

Tablas propias: workstation_assets, workstation_members, workstation_revision_members, workstation_revisions, workstations.

erDiagram
    direction LR
    assets {
        char id PK
        char companyId FK
        char templateId FK
        char siteId FK "nullable"
        char brandId FK "nullable"
    }
    companies {
        char id PK
    }
    company_contacts {
        char id PK
        char companyId FK
    }
    company_sites {
        char id PK
        char companyId FK
    }
    users {
        char id PK
    }
    workstation_assets {
        char workstationId PK,FK
        char companyId FK
        char assetId PK,FK
    }
    workstation_members {
        char workstationId PK,FK
        char assetId PK,FK
    }
    workstation_revision_members {
        char revisionId PK,FK
        char assetId PK,FK
    }
    workstation_revisions {
        char id PK
        char workstationId FK
        char actorId FK
        char siteId FK "nullable"
        char personId FK "nullable"
        char computerAssetId FK "nullable"
    }
    workstations {
        char id PK
        char companyId FK
        char siteId FK "nullable"
        char personId FK "nullable"
        char computerAssetId FK "nullable"
    }
    assets ||..o{ workstation_assets : "assetId"
    assets ||..o{ workstation_assets : "companyId, assetId"
    companies ||..o{ workstation_assets : "companyId"
    workstations ||..o{ workstation_assets : "companyId, workstationId"
    workstations ||..o{ workstation_assets : "workstationId"
    assets ||..o{ workstation_members : "assetId"
    workstations ||..o{ workstation_members : "workstationId"
    assets ||..o{ workstation_revision_members : "assetId"
    workstation_revisions ||..o{ workstation_revision_members : "revisionId"
    assets |o..o{ workstation_revisions : "computerAssetId"
    company_contacts |o..o{ workstation_revisions : "personId"
    company_sites |o..o{ workstation_revisions : "siteId"
    users ||..o{ workstation_revisions : "actorId"
    workstations ||..o{ workstation_revisions : "workstationId"
    assets |o..o{ workstations : "computerAssetId"
    companies ||..o{ workstations : "companyId"
    company_contacts |o..o{ workstations : "personId"
    company_sites |o..o{ workstations : "siteId"

Observaciones del esquema físico

Los 132 objetos consultados son 130 tablas y 2 vistas SQL: access_current_values y access_historical_values. Las vistas no tienen FK propias y se representan como objetos independientes; no se inventan relaciones físicas para ellas.

Se han encontrado 17 relaciones con varias restricciones FK equivalentes: 699 restricciones adicionales. Se han agrupado únicamente en la representación; no se han eliminado. El diccionario conserva todos los nombres de restricciones. Conviene revisar por separado el origen de estas duplicaciones.

Solo se dibujan relaciones declaradas en MariaDB. Un identificador sin FK no implica una relación física garantizada; las referencias polimórficas y las validaciones de aplicación pueden tener relaciones adicionales. Las tablas de revisiones forman parte del esquema actual y se incluyen. Esta documentación no implica que exista ya la auditoría centralizada diseñada para una implementación futura.

Validación

Generación verificada contra la misma captura de metadatos: 130 tablas y 2 vistas SQL, 999 columnas y 355 relaciones distintas incluidas en el archivo completo; todas las tablas asignadas a un área. Las reglas ON DELETE/ON UPDATE se recogen en el diccionario. No se han ejecutado migraciones ni cambios de datos.