-- Migration pour améliorer l'apprentissage OCR intelligent
-- Date: 2025-10-22

-- Ajouter les colonnes d'apprentissage intelligent à factures_patterns
ALTER TABLE `factures_patterns` 
ADD COLUMN `ht_ttc_inverse` DECIMAL(3,2) DEFAULT 0.00 COMMENT 'Probabilité d inversion HT/TTC (0.00 à 1.00)',
ADD COLUMN `structure_type` ENUM('simple', 'standard', 'detaillee') DEFAULT 'standard' COMMENT 'Type de structure de facture',
ADD COLUMN `position_date_moyenne` DECIMAL(3,2) DEFAULT 0.20 COMMENT 'Position moyenne de la date (0.00=début, 1.00=fin)',
ADD COLUMN `position_montant_moyenne` DECIMAL(3,2) DEFAULT 0.80 COMMENT 'Position moyenne des montants',
ADD COLUMN `format_date_prefere` ENUM('dmy', 'mdy', 'ymd') DEFAULT 'dmy' COMMENT 'Format de date préféré',
ADD COLUMN `taux_tva_habituel` DECIMAL(4,2) DEFAULT 20.00 COMMENT 'Taux de TVA habituel en %',
ADD COLUMN `score_confiance_moyen` DECIMAL(3,2) DEFAULT 0.50 COMMENT 'Score de confiance moyen',
ADD COLUMN `nb_corrections` INT DEFAULT 0 COMMENT 'Nombre de fois où des corrections ont été nécessaires',
ADD COLUMN `derniere_correction` JSON DEFAULT NULL COMMENT 'Détail de la dernière correction appliquée';

-- Créer un index pour les requêtes d'apprentissage
CREATE INDEX idx_learning ON `factures_patterns`(fournisseur_reel, nb_utilisations, ht_ttc_inverse);

-- Table pour logger les apprentissages (optionnel, pour debug)
CREATE TABLE IF NOT EXISTS `ocr_learning_log` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `id_facture` BIGINT NOT NULL,
    `id_copro` INT NOT NULL,
    `fournisseur_reel` VARCHAR(255),
    `type_correction` ENUM('inversion_ht_ttc', 'format_date', 'tva_manquante', 'numero_manquant', 'autre') NOT NULL,
    `donnees_ocr` JSON COMMENT 'Données OCR brutes',
    `donnees_corrigees` JSON COMMENT 'Données après correction',
    `confiance_avant` DECIMAL(3,2),
    `confiance_apres` DECIMAL(3,2),
    `date_apprentissage` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    KEY `idx_facture` (`id_facture`),
    KEY `idx_fournisseur` (`fournisseur_reel`),
    KEY `idx_type` (`type_correction`),
    KEY `idx_date` (`date_apprentissage`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Log des apprentissages OCR pour analyse et amélioration';

-- Créer une vue pour les statistiques d'apprentissage
-- Compatible avec ONLY_FULL_GROUP_BY - TOUTES les colonnes dans GROUP BY
CREATE OR REPLACE VIEW v_ocr_learning_stats AS
SELECT 
    fp.fournisseur_reel,
    fp.nb_utilisations,
    fp.ht_ttc_inverse,
    fp.structure_type,
    fp.position_date_moyenne,
    fp.position_montant_moyenne,
    fp.format_date_prefere,
    fp.taux_tva_habituel,
    fp.score_confiance_moyen,
    fp.nb_corrections,
    COUNT(DISTINCT f.id) as nb_factures_validees,
    AVG(f.confiance_score) as confiance_moyenne_factures,
    fp.derniere_utilisation
FROM factures_patterns fp
LEFT JOIN factures f ON f.fournisseur_nom = fp.fournisseur_reel AND f.statut = 'validated'
GROUP BY 
    fp.fournisseur_reel,
    fp.nb_utilisations,
    fp.ht_ttc_inverse,
    fp.structure_type,
    fp.position_date_moyenne,
    fp.position_montant_moyenne,
    fp.format_date_prefere,
    fp.taux_tva_habituel,
    fp.score_confiance_moyen,
    fp.nb_corrections,
    fp.derniere_utilisation
HAVING fp.nb_utilisations >= 3
ORDER BY fp.nb_utilisations DESC;
