-- Fix: las declaraciones provisionales no distinguían contribuyente. En un
-- despacho con N RFCs, la declaración IVA de Alexa aparecía también cuando
-- se seleccionaba a Carlos. Agregamos FK nullable para linkear, y las
-- existentes quedan con NULL (interpretadas como "tenant-wide / legacy").
-- `ON DELETE SET NULL` para que borrar un contribuyente no tire declaraciones.

ALTER TABLE declaraciones_provisionales
  ADD COLUMN IF NOT EXISTS contribuyente_id uuid
    REFERENCES contribuyentes(entidad_id) ON DELETE SET NULL;

CREATE INDEX IF NOT EXISTS ix_declaraciones_contribuyente
  ON declaraciones_provisionales(contribuyente_id, año DESC, mes DESC)
  WHERE contribuyente_id IS NOT NULL;

-- Reemplaza el UNIQUE (año, mes) WHERE tipo='normal' por uno que incluye
-- contribuyente: cada RFC debe poder tener su propia declaración normal
-- para el mismo mes. Postgres trata NULL != NULL en índices, así que
-- declaraciones legacy sin contribuyente siguen pudiendo coexistir entre
-- sí — no se auto-de-duplican, pero tampoco bloquean las nuevas.
DROP INDEX IF EXISTS uniq_declaracion_normal_mes;
CREATE UNIQUE INDEX IF NOT EXISTS uniq_declaracion_normal_mes_contrib
  ON declaraciones_provisionales(año, mes, contribuyente_id)
  WHERE tipo = 'normal';

INSERT INTO tenant_migrations (scope, version, name)
VALUES ('vertical-contable', 31, '031_declaraciones_contribuyente_id')
ON CONFLICT (scope, version) DO NOTHING;
