-- Papelería de trabajo: archivos del despacho por contribuyente, organizados
-- por mes/año y con flujo opcional de aprobación. Formatos permitidos
-- (validados en backend): pdf, word (doc/docx), excel (xls/xlsx). Máx 5 MB
-- por archivo (validado en backend). NO accesible para usuarios rol cliente.

CREATE TABLE IF NOT EXISTS papeleria_trabajo (
  id                   serial PRIMARY KEY,
  contribuyente_id     uuid NOT NULL REFERENCES contribuyentes(entidad_id) ON DELETE CASCADE,
  nombre               varchar(255) NOT NULL,           -- "Reporte de cuentas Q1"
  descripcion          text,
  archivo              bytea NOT NULL,
  archivo_filename     varchar(255) NOT NULL,           -- "reporte.pdf"
  archivo_mime         varchar(100) NOT NULL,
  archivo_size         int NOT NULL,
  -- periodo (mes + año)
  anio                 int NOT NULL CHECK (anio BETWEEN 2000 AND 2100),
  mes                  int NOT NULL CHECK (mes BETWEEN 1 AND 12),
  -- flujo de aprobación
  requiere_aprobacion  boolean NOT NULL DEFAULT false,
  estado               varchar(20) CHECK (estado IS NULL OR estado IN ('pendiente','aprobado','rechazado')),
  aprobado_por         uuid,
  aprobado_at          timestamptz,
  comentario_rechazo   text,
  subido_por           uuid NOT NULL,
  created_at           timestamptz DEFAULT now()
);

CREATE INDEX IF NOT EXISTS ix_papeleria_contrib
  ON papeleria_trabajo(contribuyente_id, created_at DESC);
CREATE INDEX IF NOT EXISTS ix_papeleria_periodo
  ON papeleria_trabajo(contribuyente_id, anio, mes);
CREATE INDEX IF NOT EXISTS ix_papeleria_estado
  ON papeleria_trabajo(estado)
  WHERE estado IS NOT NULL;

INSERT INTO tenant_migrations (scope, version, name)
VALUES ('vertical-contable', 36, '036_papeleria_trabajo')
ON CONFLICT (scope, version) DO NOTHING;
