"""Elegibilidade da cap table: quotas órfãs e a data do acto posterior não usado.

Descoberto ao correr o backfill sobre o corpus já guardado, com a vigia de apagão
a disparar: **19 dos 246 actos com quotas listam uma quota sem titular**. Em 5
desses o valor órfão é exactamente o que falta para fechar o capital declarado, o
que prova que é uma quota a sério cujo titular a publicação não nomeia.

O caso concreto que o revelou, `510036899`: a estrutura verificada de 2020 tinha
três titulares e somava 213.684,21 EUR; o acto de 2023 lista três quotas mas só
nomeia duas, somando 10.685,21. Com a regra "a fotografia mais recente vale por
inteiro", a empresa perdia o maior sócio e ficava com aspecto perfeitamente
normal — exactamente o modo de falha silenciosa que estas colunas existem para
impedir.

A regra passa a ter dois degraus: usa-se o acto mais recente **elegível** (com
quotas, todas com valor, nenhuma órfã); se não houver nenhum, usa-se o mais
recente com quotas e diz-se que a estrutura não está completa. Em qualquer dos
casos guarda-se `captable_newer_act_date`, para a ficha poder dizer "há alterações
posteriores não reflectidas" em vez de apresentar uma data sem contexto.
"""
from alembic import op

revision = "0024"
down_revision = "0023"
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.execute("ALTER TABLE registry_acts ADD COLUMN parse_quota_orphans INT")
    op.execute("ALTER TABLE registry_acts ADD COLUMN parse_captable_eligible BOOLEAN")
    op.execute("ALTER TABLE registry_entities ADD COLUMN captable_newer_act_date DATE")
    # A fila de "qual é a fotografia desta empresa" passa por aqui em cada
    # recompute, uma vez por acto ingerido.
    op.execute(
        """
        CREATE INDEX ix_racts_captable_pick ON registry_acts(nipc, act_date DESC NULLS LAST)
         WHERE parse_captable_eligible
        """
    )


def downgrade() -> None:
    op.execute("DROP INDEX IF EXISTS ix_racts_captable_pick")
    op.execute("ALTER TABLE registry_entities DROP COLUMN IF EXISTS captable_newer_act_date")
    op.execute("ALTER TABLE registry_acts DROP COLUMN IF EXISTS parse_captable_eligible")
    op.execute("ALTER TABLE registry_acts DROP COLUMN IF EXISTS parse_quota_orphans")
