-- Declaraciones provisionales del tenant: PDFs subidos por el contador con
-- el comprobante de la declaración + opcionalmente el comprobante de pago.
-- Al subir una declaración o un comprobante, el sistema marca como resueltas
-- las alertas correspondientes (decl-XXX o pago-XXX) en la tabla `alertas`.
--
-- Reglas:
--   - 1 declaración tipo='normal' por (año, mes) — UNIQUE parcial
--   - N declaraciones tipo='complementaria' por (año, mes) — sin restricción
--   - `impuestos` es un array de strings: ['IVA', 'ISR', 'IEPS', etc.] que
--     cubre la declaración. Permite saber qué alertas resolver.

CREATE TABLE IF NOT EXISTS declaraciones_provisionales (
  id              SERIAL PRIMARY KEY,
  año             INT NOT NULL,
  mes             INT NOT NULL CHECK (mes BETWEEN 1 AND 12),
  tipo            VARCHAR(15) NOT NULL CHECK (tipo IN ('normal', 'complementaria')),
  impuestos       TEXT[] NOT NULL,        -- ['IVA', 'ISR', 'IEPS', ...]
  pdf_declaracion BYTEA NOT NULL,
  pdf_filename    VARCHAR(255),
  link_pago       TEXT,
  pdf_pago        BYTEA,
  pdf_pago_filename VARCHAR(255),
  pagado_at       TIMESTAMP,
  creado_por      VARCHAR(255),            -- email del user que la subió
  notas           TEXT,
  created_at      TIMESTAMP DEFAULT NOW(),
  updated_at      TIMESTAMP DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_declaraciones_periodo ON declaraciones_provisionales(año DESC, mes DESC);

-- Solo 1 declaración tipo='normal' por (año, mes). Las complementarias no
-- tienen restricción de cantidad.
CREATE UNIQUE INDEX IF NOT EXISTS uniq_declaracion_normal_mes
  ON declaraciones_provisionales(año, mes)
  WHERE tipo = 'normal';
