Objectif global :
Concevoir et implémenter une base de données SQLite3 pour suivre et prédire les durées de dédouanement douanier de colis expédiés via des vols cargo réguliers.
Les données seront collectées en temps réel via des requêtes API et injectées dans la base.
L'objectif final est d'analyser et modéliser les facteurs influençant le délai entre :

Étape 220 : "Cargo flight departed" (départ du vol cargo du pays A).
Étape 370 : "Customs Clearance Completed" (fin du dédouanement dans le pays B).
Spécifications détaillées :

Structure de la base de données :
Créer 7 tables principales avec des relations SQL cohérentes :
parcels (colis) : Infos de base sur chaque colis (tracking number, pays de destination, etc.).
customs_lots (lots douaniers) : Groupe de colis ayant pris le même vol cargo.
tracking_steps (étapes de suivi) : Historique horodaté de chaque colis (codes étapes : 220, 370, etc.).
customs_batches (nouvelle entité) : Sessions de dédouanement groupées (quand ≥20 colis marqués 370 en peu de temps).
queue_status (file d'attente) : État de la file d'attente des lots à des moments précis.
holidays (jours fériés) : Liste des jours non ouvrables dans le pays de destination.
action_code_names : description textuelle des action code 
Mettre en place des clés étrangères pour lier les tables logiquement.
Ajouter des index optimisés pour accélérer les requêtes fréquentes (ex: timestamp, action_code, lot_id, etc.).
Notion de "Customs Batch" (Batch douanier) :
Un batch est déclenché quand ≥20 colis reçoivent le code 370 ("Customs Clearance Completed") dans un intervalle serré (~quelques minutes).
Caractéristiques à capturer :
start_timestamp : Horodatage du 1er colis marqué 370 du groupe.
end_timestamp : Horodatage du dernier colis marqué 370 du groupe.
batch_size : Nombre total de colis dans ce batch (≥20).
processing_duration : Durée en secondes entre start_timestamp et end_timestamp.
avg_processing_speed : Vitesse moyenne (colis/heure) calculée automatiquement.
Règle métier : Si l'écart entre deux marquages 370 dépasse 15 minutes, c'est un nouveau batch qui commence.
Collecte des données via API :
Les données arriveront par requêtes HTTP/JSON (probablement ~1 à 5 fois par heure).
Chaque requête contiendra :
Un ou plusieurs numéros de tracking avec leurs étapes horodatées (ex: {parcel_id, action_code, timestamp}).
Éventuellement des métadonnées vol (départ, arrivée, code vol) si elles n'existent pas déjà.
Chaque étape reçue doit :
Être insérée dans tracking_steps.
Déclencher la logique de détection de batch si c'est un code 370.
Traitements automatisés :
Détection des customs batches en temps réel (regrouper les 370 par paquets rapprochés).
Mise à jour des customs_lots avec le batch_id correspondant.
Calcul automatique des durées (processing_duration) et vitesses (avg_processing_speed).
Analyses prévues :
Statistiques journalières : Nombre de batches, colis traités, durée moyenne, etc.
Évolution mensuelle de la performance douanière.
Modélisation prédictive (Machine Learning) pour anticiper les durées de dédouanement futures en fonction :
Jour de la semaine / heure de départ.
Taille du lot douanier.
File d'attente estimée.
Présence de jours fériés proches.

**"Conçois une base de données SQLite3 optimisée pour suivre et analyser les durées de dédouanement douanier de colis.
Les données arriveront en temps réel via API JSON.

Réalise les tâches suivantes :

Écris le code Python 3.10 complet pour :
Initialiser la base SQLite (CREATE TABLE, INDEX, TRIGGER si besoin).
Définir 7 tables : parcels, customs_lots, cargo_flights, tracking_steps, customs_batches, queue_status, holidays.
Intégrer la logique de détection automatique des 'customs batches' (≥20 colis marqués 370 en <15 minutes).
Mettre à jour les customs_lots avec le batch_id associé.
Simule l'injection de données via un exemple d'API JSON (colis + étapes de tracking).
Exemple d'entrée :

{
  "tracking_number": "MA047420310R",
  "steps": [
    {"action_code": "220", "timestamp": "2025-01-12 08:30:00"},
    {"action_code": "230", "timestamp": "2025-01-13 10:15:00"},
    {"action_code": "370", "timestamp": "2025-01-14 09:02:00"}
  ],
  "flight_info": {"departure_date": "2025-01-12 08:30:00", "flight_code": "AF1234"}
}
Fournis des exemples de requêtes SQL pour :
Extraire les KPIs journaliers (nb batches, durée moyenne, etc.).
Analyser l'impact du jour de la semaine sur la vitesse de dédouanement.
Lister les lots encore en attente (pas de 370 reçu depuis >3 jours).
Ébauche un modèle prédictif simplifié (Python sklearn) pour estimer la durée 220 → 370 en fonction des features (jour, taille lot, file d'attente, etc.).
Contraintes techniques :

Utilise SQLite3 (pas de PostgreSQL/MySQL).
Code Python doit être PEP8 (lisible, commenté, black formaté).
Évite les SELECT * dans les requêtes finales (nomme explicitement les colonnes).
Documente chaque table + chaque fonction Python (docstrings).
Livrables attendus :

Un script init_db.py pour créer les tables/index.
Un script insert_data.py simulant l'API + la détection de batches.
Un notebook Jupyter (analysis.ipynb) avec les requêtes SQL + modèle ML de base.
Bonus si :

Tu intègres une vue matérialisée pour les stats journalières.
Tu proposes une alerte automatique (ex: par mail) si un batch dépasse 24h.
Prêt ? Vas-y !"**