# Base de datos

No se encontro un archivo `schema.sql` ni una carpeta de migraciones. El esquema activo esta en `backend/comando.sql` y tambien se crea/ajusta en tiempo de arranque desde `ensureAuthTables` y `ensureInvimaTables`.

## Modelo activo

```mermaid
erDiagram
  APP_USERS {
    bigserial id PK
    text username UK
    text full_name
    text role
    text password_hash
    boolean is_active
    timestamptz created_at
    timestamptz updated_at
  }

  APP_SESSIONS {
    text token_hash PK
    bigint user_id FK
    timestamptz expires_at
    timestamptz created_at
    timestamptz last_used_at
    text user_agent
    text ip_address
  }

  INVIMA_API_RAW {
    bigserial id PK
    text source_dataset_key UK
    text source_dataset_id
    text source_uid UK
    jsonb raw_payload
    timestamptz fetched_at
    timestamptz created_at
    timestamptz updated_at
  }

  INVIMA_API_CATALOG {
    text source_dataset_key PK
    text source_dataset_id
    text source_uid PK
    text source_dataset_name
    text categoria_linea
    text categoria_canonica
    text categoria_slug
    text expediente
    text registro_sanitario
    text producto
    text titular
    text estado_registro
    date fecha_expedicion
    date fecha_vencimiento
    text modalidad
    text grupo
    text marca
    text principio_activo
    text forma_farmaceutica
    text presentacion_comercial
    text atc
    text rol_nombre
    text rol_tipo
    text ciudad_titular
    text pais_titular
    text fabricante
    text importador
    text vigencia
    text search_text
    jsonb extra
    timestamptz fetched_at
    timestamptz updated_at
  }

  APP_USERS ||--o{ APP_SESSIONS : user_id
  INVIMA_API_RAW ||--o| INVIMA_API_CATALOG : "source_dataset_key_source_uid"
```

Notas del modelo activo:

- `app_sessions.user_id` si tiene FK real hacia `app_users(id)` con `ON DELETE CASCADE`.
- `invima_api_raw` e `invima_api_catalog` comparten `source_dataset_key` y `source_uid`, pero el codigo no declara una FK entre ellas.
- `invima_api_catalog` tiene indices reales para dataset, categoria, estado, registro, expediente, modalidad, grupo, fechas, FTS y trigramas.

## Modelo legado en comandos de pgAdmin

```mermaid
erDiagram
  PRODUCTOS {
    text id_producto PK
    text nombre_comercial
    text categoria_general
  }

  REGISTROS_SANITARIOS {
    text id_registro PK
    text id_producto FK
    numeric numero_registro
    text estado
    date fecha_expedicion
    date fecha_vencimiento
    text modalidad
    text titular_registro
    text fabricante
    text observaciones
  }

  ALERTAS_SANITARIAS {
    text id_alerta PK
    text id_producto FK
    date fecha_alerta
    text tipo
    text descripcion
    text estado_alerta
    text url_fuente
  }

  MEDICAMENTOS {
    text id_producto FK
    text categoria_general
    text estado FK
    text subcategoria PK
    text concentracion_base
    text forma_farmaceutica
    text codigo_atc
    text tipo_medicamento
  }

  DISPOSITIVOS {
    text id_producto FK
    text categoria_general
    text estado FK
    text subcategoria PK
    text clase_riesgo
    text uso_previsto_detallado
    text energia_fuente
    boolean software_incluido
    text version_software
    integer vida_util_meses
  }

  ACTORES {
    numeric id_actor PK
    text tipo
    text razon_social
    text nit
    text pais
    text contacto
  }

  EVALUACIONES {
    text estado PK
    text id_producto FK
    numeric id_actor FK
    text id_registro FK
    text id_alerta FK
    date fecha_revision
    text observaciones
  }

  PRODUCTOS ||--o{ REGISTROS_SANITARIOS : id_producto
  PRODUCTOS ||--o{ ALERTAS_SANITARIAS : id_producto
  PRODUCTOS ||--o{ MEDICAMENTOS : id_producto
  PRODUCTOS ||--o{ DISPOSITIVOS : id_producto
  PRODUCTOS ||--o{ EVALUACIONES : id_producto
  ACTORES ||--o{ EVALUACIONES : id_actor
  REGISTROS_SANITARIOS ||--o{ EVALUACIONES : id_registro
  ALERTAS_SANITARIAS ||--o{ EVALUACIONES : id_alerta
  EVALUACIONES ||--o{ MEDICAMENTOS : estado
  EVALUACIONES ||--o{ DISPOSITIVOS : estado
```

## Archivos analizados

- `backend/comando.sql`
- `backend/comandos en pgadmin4.txt`
- `backend/databasepg.js`
- `backend/src/auth/auth.service.js`
- `backend/invima/service.js`
- `backend/src/db/pool.js`
