§
    éƒtjC  ã                  ó.   — d Z ddlmZ ddlmZmZ dd„ZdS )	u@   FDI durable schema â€” system of record for financial documents.é    )Úannotations)Úget_connectionÚtable_columnsÚreturnÚNonec                 óž   — t          ¦   «         5 } |                      d¦  «         t          | d¦  «        }ddd¦  «         dS # 1 swxY w Y   dS )z6Create FDI tables (idempotent). Called from SaaS init.al  
            CREATE TABLE IF NOT EXISTS fdi_documents (
                id                  TEXT PRIMARY KEY,
                org_id              TEXT NOT NULL,
                agent_id            TEXT NOT NULL,
                kb_doc_id           TEXT,
                filename            TEXT NOT NULL,
                storage_uri         TEXT,
                sha256              TEXT,
                mime_type           TEXT,
                doc_type            TEXT NOT NULL DEFAULT 'unknown',
                doc_type_confidence REAL NOT NULL DEFAULT 0,
                status              TEXT NOT NULL DEFAULT 'pending',
                page_count          INTEGER NOT NULL DEFAULT 0,
                ocr_used            INTEGER NOT NULL DEFAULT 0,
                parse_confidence    REAL NOT NULL DEFAULT 0,
                currency_primary    TEXT,
                period_start        TEXT,
                period_end          TEXT,
                issuer_name         TEXT,
                holder_name         TEXT,
                source_type         TEXT,
                error               TEXT,
                created_at          TEXT NOT NULL,
                indexed_at          TEXT
            );

            CREATE TABLE IF NOT EXISTS fdi_assertions (
                id              TEXT PRIMARY KEY,
                org_id          TEXT NOT NULL,
                document_id     TEXT NOT NULL,
                kind            TEXT NOT NULL,
                label           TEXT,
                value_numeric   REAL,
                value_text      TEXT,
                unit            TEXT,
                currency        TEXT,
                source          TEXT NOT NULL DEFAULT 'extracted',
                confidence      REAL NOT NULL DEFAULT 0,
                evidence_json   TEXT,
                created_at      TEXT NOT NULL
            );

            CREATE TABLE IF NOT EXISTS fdi_line_items (
                id                      TEXT PRIMARY KEY,
                org_id                  TEXT NOT NULL,
                document_id             TEXT NOT NULL,
                page_no                 INTEGER,
                row_idx                 INTEGER,
                event_date              TEXT,
                posting_date            TEXT,
                description_raw         TEXT,
                description_norm        TEXT,
                amount                  REAL,
                debit                   REAL,
                credit                  REAL,
                balance_after           REAL,
                direction               TEXT,
                currency                TEXT,
                counterparty_entity_id  TEXT,
                account_entity_id       TEXT,
                category                TEXT,
                event_class             TEXT NOT NULL DEFAULT 'other',
                extras_json             TEXT,
                confidence              REAL NOT NULL DEFAULT 0,
                created_at              TEXT NOT NULL
            );

            CREATE TABLE IF NOT EXISTS fdi_identifiers (
                id              TEXT PRIMARY KEY,
                org_id          TEXT NOT NULL,
                document_id     TEXT,
                line_item_id    TEXT,
                id_type         TEXT NOT NULL,
                value_raw       TEXT NOT NULL,
                value_norm      TEXT NOT NULL,
                confidence      REAL NOT NULL DEFAULT 0,
                created_at      TEXT NOT NULL
            );

            CREATE TABLE IF NOT EXISTS fdi_entities (
                id              TEXT PRIMARY KEY,
                org_id          TEXT NOT NULL,
                entity_type     TEXT NOT NULL,
                canonical_name  TEXT NOT NULL,
                attributes_json TEXT,
                created_at      TEXT NOT NULL
            );

            CREATE TABLE IF NOT EXISTS fdi_entity_aliases (
                id              TEXT PRIMARY KEY,
                org_id          TEXT NOT NULL,
                entity_id       TEXT NOT NULL,
                alias           TEXT NOT NULL,
                source          TEXT,
                weight          REAL NOT NULL DEFAULT 1,
                created_at      TEXT NOT NULL
            );

            CREATE TABLE IF NOT EXISTS fdi_entity_links (
                id              TEXT PRIMARY KEY,
                org_id          TEXT NOT NULL,
                left_id         TEXT NOT NULL,
                right_id        TEXT NOT NULL,
                rel_type        TEXT NOT NULL,
                document_id     TEXT,
                confidence      REAL NOT NULL DEFAULT 0,
                created_at      TEXT NOT NULL
            );

            CREATE INDEX IF NOT EXISTS idx_fdi_docs_org_agent
                ON fdi_documents(org_id, agent_id);
            CREATE INDEX IF NOT EXISTS idx_fdi_docs_kb
                ON fdi_documents(kb_doc_id);
            CREATE INDEX IF NOT EXISTS idx_fdi_docs_type
                ON fdi_documents(org_id, doc_type);
            CREATE INDEX IF NOT EXISTS idx_fdi_lines_doc
                ON fdi_line_items(document_id);
            CREATE INDEX IF NOT EXISTS idx_fdi_lines_org_date
                ON fdi_line_items(org_id, event_date);
            CREATE INDEX IF NOT EXISTS idx_fdi_lines_counterparty
                ON fdi_line_items(counterparty_entity_id);
            CREATE INDEX IF NOT EXISTS idx_fdi_ids_lookup
                ON fdi_identifiers(org_id, id_type, value_norm);
            CREATE INDEX IF NOT EXISTS idx_fdi_ids_doc
                ON fdi_identifiers(document_id);
            CREATE INDEX IF NOT EXISTS idx_fdi_assertions_doc
                ON fdi_assertions(document_id);
            CREATE INDEX IF NOT EXISTS idx_fdi_entities_org
                ON fdi_entities(org_id, entity_type);
            CREATE INDEX IF NOT EXISTS idx_fdi_aliases_org
                ON fdi_entity_aliases(org_id, alias);
            Úfdi_documentsN)r   Úexecutescriptr   )ÚconnÚ_s     ú*/var/www/html/CA-Chatbot/app/fdi/schema.pyÚinit_fdi_tablesr      s¶   € å	Ñ	Ô	ð I1˜TØ×ÒðDñF	
ô F	
ð F	
õP ˜$ Ñ0Ô0ˆðSI1ð I1ð I1ñ I1ô I1ð I1ð I1ð I1ð I1ð I1ð I1ð I1øøøð I1ð I1ð I1ð I1ð I1ð I1s   �&AÁAÁ	AN)r   r   )Ú__doc__Ú
__future__r   Úapp.databaser   r   r   © ó    r   ú<module>r      sY   ðØ FÐ Fà "Ð "Ð "Ð "Ð "Ð "à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ðK1ð K1ð K1ð K1ð K1ð K1r   