{
  "exporte_le": "2026-09-10T16:27:52.063Z",
  "tables": {
    "weddings": [
      {
        "id": 1,
        "couple": "Camille & Julien",
        "email": "camille.et.julien@example.fr",
        "phone": "06 12 34 56 78",
        "wedding_date": "2026-09-19",
        "venue": "Château de Launac",
        "city": "Launac (31)",
        "guest_count": 110,
        "formule": "complete",
        "status": "signe",
        "budget_total": 42000,
        "fee": 4200,
        "notes": "Mariage champêtre chic. Camille très organisée, Julien délègue tout. Attention : la mère de Camille veut valider la déco.",
        "created_at": "2026-07-12 22:08:41",
        "share_token": "a5a101160170490661",
        "couple_token": "ba6e650a01028e899c",
        "share_budget": 1
      },
      {
        "id": 2,
        "couple": "Léa & Maxime",
        "email": "lea.maxime2027@example.fr",
        "phone": "06 98 76 54 32",
        "wedding_date": "2027-06-12",
        "venue": "Domaine de Verchant",
        "city": "Montpellier",
        "guest_count": 85,
        "formule": "partielle",
        "status": "signe",
        "budget_total": 30000,
        "fee": 2900,
        "notes": "Formule partielle : le couple gère la papeterie et les tenues. Ambiance méditerranéenne, dîner en extérieur souhaité.",
        "created_at": "2026-07-12 22:08:41",
        "share_token": "ae36e6cbe99abae897",
        "couple_token": "cff0d5d038b33c1c9d",
        "share_budget": 0
      },
      {
        "id": 3,
        "couple": "Sarah & Thomas",
        "email": "sarah.thomas@example.fr",
        "phone": "07 61 20 48 85",
        "wedding_date": "2026-08-08",
        "venue": "Ferme des Étoiles",
        "city": "Fleurance (32)",
        "guest_count": 60,
        "formule": "jour_j",
        "status": "signe",
        "budget_total": 18000,
        "fee": 1600,
        "notes": "Coordination jour J seule. Le couple a tout réservé lui-même — audit des contrats fait, DJ à surveiller (pas de backup).",
        "created_at": "2026-07-12 22:08:41",
        "share_token": "3f4965f1713e339f41",
        "couple_token": "22913c925198c561f3",
        "share_budget": 0
      },
      {
        "id": 4,
        "couple": "Emma & Lucas",
        "email": "emma.lucas@example.fr",
        "phone": "06 44 09 31 58",
        "wedding_date": "2027-09-04",
        "venue": "",
        "city": "Toulouse",
        "guest_count": 90,
        "formule": "complete",
        "status": "rdv",
        "budget_total": 35000,
        "fee": 0,
        "notes": "Venus via Instagram (reel du mariage de mai). Veulent un mariage champêtre, budget à cadrer.",
        "created_at": "2026-07-12 22:08:41",
        "share_token": "b76881be841026fd62",
        "couple_token": "6dc9862b763eb2b017",
        "share_budget": 0
      },
      {
        "id": 5,
        "couple": "Inès & Hugo",
        "email": "ines.hugo@example.fr",
        "phone": "06 27 84 60 12",
        "wedding_date": "2026-12-12",
        "venue": "",
        "city": "Carcassonne",
        "guest_count": 40,
        "formule": "jour_j",
        "status": "rdv",
        "budget_total": 15000,
        "fee": 0,
        "notes": "Mariage d'hiver intimiste. RDV visio jeudi 18h00.",
        "created_at": "2026-07-12 22:08:41",
        "share_token": "08045a67a689c5b754",
        "couple_token": "a062107d4633b2009b",
        "share_budget": 0
      },
      {
        "id": 6,
        "couple": "Chloé & Antoine",
        "email": "chloe.antoine@example.fr",
        "phone": "07 82 15 47 93",
        "wedding_date": "2027-05-22",
        "venue": "",
        "city": "Albi",
        "guest_count": 70,
        "formule": "partielle",
        "status": "devis",
        "budget_total": 24000,
        "fee": 2400,
        "notes": "Devis envoyé le 8 juillet (formule partielle, 2 400 €). Relance prévue le 18 juillet.",
        "created_at": "2026-07-12 22:08:41",
        "share_token": "7766740ff84f3bc583",
        "couple_token": "e2682aadb1b7a42bd4",
        "share_budget": 0
      }
    ],
    "tasks": [
      {
        "id": 1,
        "wedding_id": 1,
        "title": "Cadrer le budget global avec le couple",
        "category": "Budget",
        "due_date": "2025-09-19",
        "done": 1,
        "position": 0
      },
      {
        "id": 2,
        "wedding_id": 1,
        "title": "Établir la liste d'invités provisoire",
        "category": "Couple",
        "due_date": "2025-09-19",
        "done": 1,
        "position": 1
      },
      {
        "id": 3,
        "wedding_id": 1,
        "title": "Réserver le lieu de réception",
        "category": "Prestataires",
        "due_date": "2025-10-04",
        "done": 1,
        "position": 2
      },
      {
        "id": 4,
        "wedding_id": 1,
        "title": "Réserver le traiteur",
        "category": "Prestataires",
        "due_date": "2025-10-14",
        "done": 1,
        "position": 3
      },
      {
        "id": 5,
        "wedding_id": 1,
        "title": "Réserver le photographe / vidéaste",
        "category": "Prestataires",
        "due_date": "2025-10-24",
        "done": 1,
        "position": 4
      },
      {
        "id": 6,
        "wedding_id": 1,
        "title": "Retenir la date à la mairie / l'officiant",
        "category": "Administratif",
        "due_date": "2025-11-03",
        "done": 1,
        "position": 5
      },
      {
        "id": 7,
        "wedding_id": 1,
        "title": "Réserver le DJ ou le groupe",
        "category": "Prestataires",
        "due_date": "2025-11-23",
        "done": 1,
        "position": 6
      },
      {
        "id": 8,
        "wedding_id": 1,
        "title": "Envoyer les save-the-date",
        "category": "Couple",
        "due_date": "2025-12-03",
        "done": 1,
        "position": 7
      },
      {
        "id": 9,
        "wedding_id": 1,
        "title": "Premier essayage robe / costume",
        "category": "Couple",
        "due_date": "2025-12-13",
        "done": 1,
        "position": 8
      },
      {
        "id": 10,
        "wedding_id": 1,
        "title": "Réserver le fleuriste",
        "category": "Prestataires",
        "due_date": "2025-12-23",
        "done": 1,
        "position": 9
      },
      {
        "id": 11,
        "wedding_id": 1,
        "title": "Définir le thème et la direction artistique",
        "category": "Design & déco",
        "due_date": "2026-01-22",
        "done": 1,
        "position": 10
      },
      {
        "id": 12,
        "wedding_id": 1,
        "title": "Réserver coiffure & maquillage",
        "category": "Prestataires",
        "due_date": "2026-02-21",
        "done": 1,
        "position": 11
      },
      {
        "id": 13,
        "wedding_id": 1,
        "title": "Commander les faire-part",
        "category": "Design & déco",
        "due_date": "2026-03-23",
        "done": 1,
        "position": 12
      },
      {
        "id": 14,
        "wedding_id": 1,
        "title": "Dégustation du menu traiteur",
        "category": "Prestataires",
        "due_date": "2026-03-23",
        "done": 1,
        "position": 13
      },
      {
        "id": 15,
        "wedding_id": 1,
        "title": "Choisir les alliances",
        "category": "Couple",
        "due_date": "2026-04-02",
        "done": 1,
        "position": 14
      },
      {
        "id": 16,
        "wedding_id": 1,
        "title": "Réserver hébergements & navettes invités",
        "category": "Administratif",
        "due_date": "2026-04-22",
        "done": 1,
        "position": 15
      },
      {
        "id": 17,
        "wedding_id": 1,
        "title": "Envoyer les faire-part",
        "category": "Couple",
        "due_date": "2026-05-22",
        "done": 1,
        "position": 16
      },
      {
        "id": 18,
        "wedding_id": 1,
        "title": "Valider le plan d'implantation & la décoration",
        "category": "Design & déco",
        "due_date": "2026-05-22",
        "done": 1,
        "position": 17
      },
      {
        "id": 19,
        "wedding_id": 1,
        "title": "Réserver le mobilier et le matériel",
        "category": "Prestataires",
        "due_date": "2026-06-01",
        "done": 1,
        "position": 18
      },
      {
        "id": 20,
        "wedding_id": 1,
        "title": "Lancer la coordination jour J",
        "category": "Jour J",
        "due_date": "2026-06-21",
        "done": 1,
        "position": 19
      },
      {
        "id": 21,
        "wedding_id": 1,
        "title": "Visite technique du lieu avec les prestataires",
        "category": "Jour J",
        "due_date": "2026-06-21",
        "done": 1,
        "position": 20
      },
      {
        "id": 22,
        "wedding_id": 1,
        "title": "Essai coiffure & maquillage",
        "category": "Couple",
        "due_date": "2026-06-26",
        "done": 1,
        "position": 21
      },
      {
        "id": 23,
        "wedding_id": 1,
        "title": "Point budget & échéancier d'acomptes",
        "category": "Budget",
        "due_date": "2026-07-06",
        "done": 1,
        "position": 22
      },
      {
        "id": 24,
        "wedding_id": 1,
        "title": "Relancer les RSVP retardataires",
        "category": "Couple",
        "due_date": "2026-07-21",
        "done": 1,
        "position": 23
      },
      {
        "id": 25,
        "wedding_id": 1,
        "title": "Finaliser le menu et les quantités",
        "category": "Prestataires",
        "due_date": "2026-07-26",
        "done": 1,
        "position": 24
      },
      {
        "id": 26,
        "wedding_id": 1,
        "title": "Dernier essayage robe / costume",
        "category": "Couple",
        "due_date": "2026-08-05",
        "done": 1,
        "position": 25
      },
      {
        "id": 27,
        "wedding_id": 1,
        "title": "Établir le plan de table v1",
        "category": "Jour J",
        "due_date": "2026-08-20",
        "done": 1,
        "position": 26
      },
      {
        "id": 28,
        "wedding_id": 1,
        "title": "Envoyer le déroulé détaillé aux prestataires",
        "category": "Jour J",
        "due_date": "2026-08-20",
        "done": 1,
        "position": 27
      },
      {
        "id": 29,
        "wedding_id": 1,
        "title": "Confirmer horaires et accès de chaque prestataire",
        "category": "Jour J",
        "due_date": "2026-08-25",
        "done": 1,
        "position": 28
      },
      {
        "id": 30,
        "wedding_id": 1,
        "title": "Finaliser le plan de table",
        "category": "Jour J",
        "due_date": "2026-09-04",
        "done": 1,
        "position": 29
      },
      {
        "id": 31,
        "wedding_id": 1,
        "title": "Confirmations finales de tous les prestataires",
        "category": "Jour J",
        "due_date": "2026-09-12",
        "done": 0,
        "position": 30
      },
      {
        "id": 32,
        "wedding_id": 1,
        "title": "Préparer le kit d'urgence",
        "category": "Jour J",
        "due_date": "2026-09-13",
        "done": 0,
        "position": 31
      },
      {
        "id": 33,
        "wedding_id": 1,
        "title": "Imprimer les déroulés et plans (2 copies)",
        "category": "Jour J",
        "due_date": "2026-09-14",
        "done": 0,
        "position": 32
      },
      {
        "id": 34,
        "wedding_id": 1,
        "title": "Répétition de la cérémonie",
        "category": "Jour J",
        "due_date": "2026-09-18",
        "done": 0,
        "position": 33
      },
      {
        "id": 35,
        "wedding_id": 1,
        "title": "Vérifier les livraisons & point météo / plan B",
        "category": "Jour J",
        "due_date": "2026-09-18",
        "done": 0,
        "position": 34
      },
      {
        "id": 36,
        "wedding_id": 1,
        "title": "Coordination du jour J",
        "category": "Jour J",
        "due_date": "2026-09-19",
        "done": 0,
        "position": 35
      },
      {
        "id": 37,
        "wedding_id": 1,
        "title": "Retours de matériel et location",
        "category": "Post-mariage",
        "due_date": "2026-09-24",
        "done": 0,
        "position": 36
      },
      {
        "id": 38,
        "wedding_id": 1,
        "title": "Relancer la récupération de la caution",
        "category": "Post-mariage",
        "due_date": "2026-09-26",
        "done": 0,
        "position": 37
      },
      {
        "id": 39,
        "wedding_id": 1,
        "title": "Demander les avis au couple",
        "category": "Post-mariage",
        "due_date": "2026-09-29",
        "done": 0,
        "position": 38
      },
      {
        "id": 40,
        "wedding_id": 1,
        "title": "Remercier et débriefer les prestataires",
        "category": "Post-mariage",
        "due_date": "2026-10-01",
        "done": 0,
        "position": 39
      },
      {
        "id": 41,
        "wedding_id": 1,
        "title": "Clôturer le dossier",
        "category": "Post-mariage",
        "due_date": "2026-10-04",
        "done": 0,
        "position": 40
      },
      {
        "id": 42,
        "wedding_id": 2,
        "title": "Cadrer le budget global avec le couple",
        "category": "Budget",
        "due_date": "2026-06-12",
        "done": 1,
        "position": 0
      },
      {
        "id": 43,
        "wedding_id": 2,
        "title": "Établir la liste d'invités provisoire",
        "category": "Couple",
        "due_date": "2026-06-12",
        "done": 1,
        "position": 1
      },
      {
        "id": 44,
        "wedding_id": 2,
        "title": "Réserver le lieu de réception",
        "category": "Prestataires",
        "due_date": "2026-06-27",
        "done": 1,
        "position": 2
      },
      {
        "id": 45,
        "wedding_id": 2,
        "title": "Réserver le traiteur",
        "category": "Prestataires",
        "due_date": "2026-07-07",
        "done": 1,
        "position": 3
      },
      {
        "id": 46,
        "wedding_id": 2,
        "title": "Réserver le photographe / vidéaste",
        "category": "Prestataires",
        "due_date": "2026-07-17",
        "done": 1,
        "position": 4
      },
      {
        "id": 47,
        "wedding_id": 2,
        "title": "Retenir la date à la mairie / l'officiant",
        "category": "Administratif",
        "due_date": "2026-07-27",
        "done": 1,
        "position": 5
      },
      {
        "id": 48,
        "wedding_id": 2,
        "title": "Réserver le DJ ou le groupe",
        "category": "Prestataires",
        "due_date": "2026-08-16",
        "done": 1,
        "position": 6
      },
      {
        "id": 49,
        "wedding_id": 2,
        "title": "Envoyer les save-the-date",
        "category": "Couple",
        "due_date": "2026-08-26",
        "done": 1,
        "position": 7
      },
      {
        "id": 50,
        "wedding_id": 2,
        "title": "Premier essayage robe / costume",
        "category": "Couple",
        "due_date": "2026-09-05",
        "done": 1,
        "position": 8
      },
      {
        "id": 51,
        "wedding_id": 2,
        "title": "Réserver le fleuriste",
        "category": "Prestataires",
        "due_date": "2026-09-15",
        "done": 0,
        "position": 9
      },
      {
        "id": 52,
        "wedding_id": 2,
        "title": "Définir le thème et la direction artistique",
        "category": "Design & déco",
        "due_date": "2026-10-15",
        "done": 0,
        "position": 10
      },
      {
        "id": 53,
        "wedding_id": 2,
        "title": "Réserver coiffure & maquillage",
        "category": "Prestataires",
        "due_date": "2026-11-14",
        "done": 0,
        "position": 11
      },
      {
        "id": 54,
        "wedding_id": 2,
        "title": "Commander les faire-part",
        "category": "Design & déco",
        "due_date": "2026-12-14",
        "done": 0,
        "position": 12
      },
      {
        "id": 55,
        "wedding_id": 2,
        "title": "Dégustation du menu traiteur",
        "category": "Prestataires",
        "due_date": "2026-12-14",
        "done": 0,
        "position": 13
      },
      {
        "id": 56,
        "wedding_id": 2,
        "title": "Choisir les alliances",
        "category": "Couple",
        "due_date": "2026-12-24",
        "done": 0,
        "position": 14
      },
      {
        "id": 57,
        "wedding_id": 2,
        "title": "Réserver hébergements & navettes invités",
        "category": "Administratif",
        "due_date": "2027-01-13",
        "done": 0,
        "position": 15
      },
      {
        "id": 58,
        "wedding_id": 2,
        "title": "Envoyer les faire-part",
        "category": "Couple",
        "due_date": "2027-02-12",
        "done": 0,
        "position": 16
      },
      {
        "id": 59,
        "wedding_id": 2,
        "title": "Valider le plan d'implantation & la décoration",
        "category": "Design & déco",
        "due_date": "2027-02-12",
        "done": 0,
        "position": 17
      },
      {
        "id": 60,
        "wedding_id": 2,
        "title": "Réserver le mobilier et le matériel",
        "category": "Prestataires",
        "due_date": "2027-02-22",
        "done": 0,
        "position": 18
      },
      {
        "id": 61,
        "wedding_id": 2,
        "title": "Lancer la coordination jour J",
        "category": "Jour J",
        "due_date": "2027-03-14",
        "done": 0,
        "position": 19
      },
      {
        "id": 62,
        "wedding_id": 2,
        "title": "Visite technique du lieu avec les prestataires",
        "category": "Jour J",
        "due_date": "2027-03-14",
        "done": 0,
        "position": 20
      },
      {
        "id": 63,
        "wedding_id": 2,
        "title": "Essai coiffure & maquillage",
        "category": "Couple",
        "due_date": "2027-03-19",
        "done": 0,
        "position": 21
      },
      {
        "id": 64,
        "wedding_id": 2,
        "title": "Point budget & échéancier d'acomptes",
        "category": "Budget",
        "due_date": "2027-03-29",
        "done": 0,
        "position": 22
      },
      {
        "id": 65,
        "wedding_id": 2,
        "title": "Relancer les RSVP retardataires",
        "category": "Couple",
        "due_date": "2027-04-13",
        "done": 0,
        "position": 23
      },
      {
        "id": 66,
        "wedding_id": 2,
        "title": "Finaliser le menu et les quantités",
        "category": "Prestataires",
        "due_date": "2027-04-18",
        "done": 0,
        "position": 24
      },
      {
        "id": 67,
        "wedding_id": 2,
        "title": "Dernier essayage robe / costume",
        "category": "Couple",
        "due_date": "2027-04-28",
        "done": 0,
        "position": 25
      },
      {
        "id": 68,
        "wedding_id": 2,
        "title": "Établir le plan de table v1",
        "category": "Jour J",
        "due_date": "2027-05-13",
        "done": 0,
        "position": 26
      },
      {
        "id": 69,
        "wedding_id": 2,
        "title": "Envoyer le déroulé détaillé aux prestataires",
        "category": "Jour J",
        "due_date": "2027-05-13",
        "done": 0,
        "position": 27
      },
      {
        "id": 70,
        "wedding_id": 2,
        "title": "Confirmer horaires et accès de chaque prestataire",
        "category": "Jour J",
        "due_date": "2027-05-18",
        "done": 0,
        "position": 28
      },
      {
        "id": 71,
        "wedding_id": 2,
        "title": "Finaliser le plan de table",
        "category": "Jour J",
        "due_date": "2027-05-28",
        "done": 0,
        "position": 29
      },
      {
        "id": 72,
        "wedding_id": 2,
        "title": "Confirmations finales de tous les prestataires",
        "category": "Jour J",
        "due_date": "2027-06-05",
        "done": 0,
        "position": 30
      },
      {
        "id": 73,
        "wedding_id": 2,
        "title": "Préparer le kit d'urgence",
        "category": "Jour J",
        "due_date": "2027-06-06",
        "done": 0,
        "position": 31
      },
      {
        "id": 74,
        "wedding_id": 2,
        "title": "Imprimer les déroulés et plans (2 copies)",
        "category": "Jour J",
        "due_date": "2027-06-07",
        "done": 0,
        "position": 32
      },
      {
        "id": 75,
        "wedding_id": 2,
        "title": "Répétition de la cérémonie",
        "category": "Jour J",
        "due_date": "2027-06-11",
        "done": 0,
        "position": 33
      },
      {
        "id": 76,
        "wedding_id": 2,
        "title": "Vérifier les livraisons & point météo / plan B",
        "category": "Jour J",
        "due_date": "2027-06-11",
        "done": 0,
        "position": 34
      },
      {
        "id": 77,
        "wedding_id": 2,
        "title": "Coordination du jour J",
        "category": "Jour J",
        "due_date": "2027-06-12",
        "done": 0,
        "position": 35
      },
      {
        "id": 78,
        "wedding_id": 2,
        "title": "Retours de matériel et location",
        "category": "Post-mariage",
        "due_date": "2027-06-17",
        "done": 0,
        "position": 36
      },
      {
        "id": 79,
        "wedding_id": 2,
        "title": "Relancer la récupération de la caution",
        "category": "Post-mariage",
        "due_date": "2027-06-19",
        "done": 0,
        "position": 37
      },
      {
        "id": 80,
        "wedding_id": 2,
        "title": "Demander les avis au couple",
        "category": "Post-mariage",
        "due_date": "2027-06-22",
        "done": 0,
        "position": 38
      },
      {
        "id": 81,
        "wedding_id": 2,
        "title": "Remercier et débriefer les prestataires",
        "category": "Post-mariage",
        "due_date": "2027-06-24",
        "done": 0,
        "position": 39
      },
      {
        "id": 82,
        "wedding_id": 2,
        "title": "Clôturer le dossier",
        "category": "Post-mariage",
        "due_date": "2027-06-27",
        "done": 0,
        "position": 40
      },
      {
        "id": 83,
        "wedding_id": 3,
        "title": "Lancer la coordination jour J",
        "category": "Jour J",
        "due_date": "2026-05-10",
        "done": 1,
        "position": 0
      },
      {
        "id": 84,
        "wedding_id": 3,
        "title": "Visite technique du lieu avec les prestataires",
        "category": "Jour J",
        "due_date": "2026-05-10",
        "done": 1,
        "position": 1
      },
      {
        "id": 85,
        "wedding_id": 3,
        "title": "Essai coiffure & maquillage",
        "category": "Couple",
        "due_date": "2026-05-15",
        "done": 1,
        "position": 2
      },
      {
        "id": 86,
        "wedding_id": 3,
        "title": "Point budget & échéancier d'acomptes",
        "category": "Budget",
        "due_date": "2026-05-25",
        "done": 1,
        "position": 3
      },
      {
        "id": 87,
        "wedding_id": 3,
        "title": "Relancer les RSVP retardataires",
        "category": "Couple",
        "due_date": "2026-06-09",
        "done": 1,
        "position": 4
      },
      {
        "id": 88,
        "wedding_id": 3,
        "title": "Finaliser le menu et les quantités",
        "category": "Prestataires",
        "due_date": "2026-06-14",
        "done": 1,
        "position": 5
      },
      {
        "id": 89,
        "wedding_id": 3,
        "title": "Dernier essayage robe / costume",
        "category": "Couple",
        "due_date": "2026-06-24",
        "done": 1,
        "position": 6
      },
      {
        "id": 90,
        "wedding_id": 3,
        "title": "Établir le plan de table v1",
        "category": "Jour J",
        "due_date": "2026-07-09",
        "done": 1,
        "position": 7
      },
      {
        "id": 91,
        "wedding_id": 3,
        "title": "Envoyer le déroulé détaillé aux prestataires",
        "category": "Jour J",
        "due_date": "2026-07-09",
        "done": 1,
        "position": 8
      },
      {
        "id": 92,
        "wedding_id": 3,
        "title": "Confirmer horaires et accès de chaque prestataire",
        "category": "Jour J",
        "due_date": "2026-07-14",
        "done": 1,
        "position": 9
      },
      {
        "id": 93,
        "wedding_id": 3,
        "title": "Finaliser le plan de table",
        "category": "Jour J",
        "due_date": "2026-07-24",
        "done": 1,
        "position": 10
      },
      {
        "id": 94,
        "wedding_id": 3,
        "title": "Confirmations finales de tous les prestataires",
        "category": "Jour J",
        "due_date": "2026-08-01",
        "done": 1,
        "position": 11
      },
      {
        "id": 95,
        "wedding_id": 3,
        "title": "Préparer le kit d'urgence",
        "category": "Jour J",
        "due_date": "2026-08-02",
        "done": 1,
        "position": 12
      },
      {
        "id": 96,
        "wedding_id": 3,
        "title": "Imprimer les déroulés et plans (2 copies)",
        "category": "Jour J",
        "due_date": "2026-08-03",
        "done": 1,
        "position": 13
      },
      {
        "id": 97,
        "wedding_id": 3,
        "title": "Répétition de la cérémonie",
        "category": "Jour J",
        "due_date": "2026-08-07",
        "done": 1,
        "position": 14
      },
      {
        "id": 98,
        "wedding_id": 3,
        "title": "Vérifier les livraisons & point météo / plan B",
        "category": "Jour J",
        "due_date": "2026-08-07",
        "done": 1,
        "position": 15
      },
      {
        "id": 99,
        "wedding_id": 3,
        "title": "Coordination du jour J",
        "category": "Jour J",
        "due_date": "2026-08-08",
        "done": 1,
        "position": 16
      },
      {
        "id": 100,
        "wedding_id": 3,
        "title": "Retours de matériel et location",
        "category": "Post-mariage",
        "due_date": "2026-08-13",
        "done": 1,
        "position": 17
      },
      {
        "id": 101,
        "wedding_id": 3,
        "title": "Relancer la récupération de la caution",
        "category": "Post-mariage",
        "due_date": "2026-08-15",
        "done": 1,
        "position": 18
      },
      {
        "id": 102,
        "wedding_id": 3,
        "title": "Demander les avis au couple",
        "category": "Post-mariage",
        "due_date": "2026-08-18",
        "done": 1,
        "position": 19
      },
      {
        "id": 103,
        "wedding_id": 3,
        "title": "Remercier et débriefer les prestataires",
        "category": "Post-mariage",
        "due_date": "2026-08-20",
        "done": 1,
        "position": 20
      },
      {
        "id": 104,
        "wedding_id": 3,
        "title": "Clôturer le dossier",
        "category": "Post-mariage",
        "due_date": "2026-08-23",
        "done": 1,
        "position": 21
      }
    ],
    "vendors": [
      {
        "id": 1,
        "name": "Château de Launac",
        "category": "Lieu de réception",
        "contact": "Mme Fabre",
        "phone": "05 61 85 42 10",
        "phone_backup": "06 74 21 03 88",
        "email": "contact@chateau-launac.fr",
        "city": "Launac (31)",
        "rating": 5,
        "price_range": "€€€",
        "notes": "Capacité 150 assis, 40 couchages sur place. Plan B pluie : orangerie. Accès traiteur par la cour nord."
      },
      {
        "id": 2,
        "name": "Maison Delort",
        "category": "Traiteur",
        "contact": "M. Delort",
        "phone": "05 62 48 77 30",
        "phone_backup": "",
        "email": "devis@maisondelort.fr",
        "city": "Toulouse",
        "rating": 5,
        "price_range": "€€€",
        "notes": "Gastronomique régional. Très fiable sur les délais, demande les quantités définitives à J-10."
      },
      {
        "id": 3,
        "name": "Studio Lumière",
        "category": "Photographe",
        "contact": "Claire Marty",
        "phone": "06 52 18 94 47",
        "phone_backup": "",
        "email": "claire@studiolumiere.fr",
        "city": "Toulouse",
        "rating": 5,
        "price_range": "€€",
        "notes": "Style reportage, drone inclus. Livraison galerie sous 6 semaines."
      },
      {
        "id": 4,
        "name": "DJ Fréquence",
        "category": "DJ / Musique",
        "contact": "Karim B.",
        "phone": "06 11 38 62 90",
        "phone_backup": "06 45 77 12 34",
        "email": "karim@djfrequence.fr",
        "city": "Toulouse",
        "rating": 4,
        "price_range": "€€",
        "notes": "Son + lumière complet, matériel de backup. Prévoir accès élec 32A."
      },
      {
        "id": 5,
        "name": "Atelier Rosalie",
        "category": "Fleuriste",
        "contact": "Rosalie V.",
        "phone": "05 61 22 90 15",
        "phone_backup": "",
        "email": "hello@atelier-rosalie.fr",
        "city": "Blagnac",
        "rating": 5,
        "price_range": "€€",
        "notes": "Fleurs de saison uniquement. Livraison + installation incluses. Lente à répondre aux mails → appeler."
      },
      {
        "id": 6,
        "name": "Pâtisserie Blanche",
        "category": "Wedding cake",
        "contact": "Mme Roux",
        "phone": "05 61 40 28 73",
        "phone_backup": "",
        "email": "commande@patisserieblanche.fr",
        "city": "Toulouse",
        "rating": 4,
        "price_range": "€€",
        "notes": "Dégustation sur RDV le mardi. Livraison réfrigérée."
      },
      {
        "id": 7,
        "name": "Beauté M. Duval",
        "category": "Coiffure & maquillage",
        "contact": "Marion Duval",
        "phone": "06 63 05 41 27",
        "phone_backup": "",
        "email": "marion.duval.pro@gmail.com",
        "city": "Toulouse",
        "rating": 4,
        "price_range": "€€",
        "notes": "Se déplace sur le lieu. Essai obligatoire à J-90."
      },
      {
        "id": 8,
        "name": "Les Voitures d'Antan",
        "category": "Transport",
        "contact": "M. Pagès",
        "phone": "06 07 55 89 21",
        "phone_backup": "",
        "email": "contact@voituresdantan.fr",
        "city": "Muret",
        "rating": 3,
        "price_range": "€€",
        "notes": "Citroën DS + Combi VW. Ponctualité moyenne — confirmer 2 fois."
      },
      {
        "id": 9,
        "name": "Cérémonie & Co",
        "category": "Officiant",
        "contact": "Julie Andrieu",
        "phone": "06 98 12 43 76",
        "phone_backup": "",
        "email": "julie@ceremonieandco.fr",
        "city": "Toulouse",
        "rating": 5,
        "price_range": "€€",
        "notes": "Cérémonies laïques bilingues FR/EN. Trame validée à J-30."
      },
      {
        "id": 10,
        "name": "Domaine de Verchant",
        "category": "Lieu de réception",
        "contact": "Service événements",
        "phone": "04 67 07 26 00",
        "phone_backup": "",
        "email": "events@verchant.com",
        "city": "Montpellier",
        "rating": 4,
        "price_range": "€€€€",
        "notes": "5 étoiles, exclusivité week-end possible. Corkage élevé."
      }
    ],
    "wedding_vendors": [
      {
        "id": 1,
        "wedding_id": 1,
        "vendor_id": 1,
        "status": "confirme",
        "amount": 12000,
        "notes": "Exclusivité week-end. État des lieux vendredi 17h.",
        "arrival_time": "15:00",
        "arrival_confirmed": 0
      },
      {
        "id": 2,
        "wedding_id": 1,
        "vendor_id": 2,
        "status": "reserve",
        "amount": 14300,
        "notes": "Menu validé après dégustation. Quantités définitives à J-10.",
        "arrival_time": "16:30",
        "arrival_confirmed": 0
      },
      {
        "id": 3,
        "wedding_id": 1,
        "vendor_id": 3,
        "status": "reserve",
        "amount": 3200,
        "notes": "Présente de 10h à 1h. Shot list à envoyer avec le déroulé.",
        "arrival_time": "",
        "arrival_confirmed": 0
      },
      {
        "id": 4,
        "wedding_id": 1,
        "vendor_id": 4,
        "status": "reserve",
        "amount": 1800,
        "notes": "Playlist couple reçue. Fin du son 3h (arrêté préfectoral).",
        "arrival_time": "",
        "arrival_confirmed": 0
      },
      {
        "id": 5,
        "wedding_id": 1,
        "vendor_id": 5,
        "status": "devis_recu",
        "amount": 2400,
        "notes": "Devis en attente de validation par le couple.",
        "arrival_time": "",
        "arrival_confirmed": 0
      },
      {
        "id": 6,
        "wedding_id": 1,
        "vendor_id": 6,
        "status": "contacte",
        "amount": 0,
        "notes": "Dégustation à planifier.",
        "arrival_time": "",
        "arrival_confirmed": 0
      },
      {
        "id": 7,
        "wedding_id": 1,
        "vendor_id": 7,
        "status": "reserve",
        "amount": 650,
        "notes": "Essai fait le 26/06, validé.",
        "arrival_time": "09:30",
        "arrival_confirmed": 0
      },
      {
        "id": 8,
        "wedding_id": 1,
        "vendor_id": 9,
        "status": "confirme",
        "amount": 900,
        "notes": "Trame de cérémonie en cours d'écriture.",
        "arrival_time": "",
        "arrival_confirmed": 0
      },
      {
        "id": 9,
        "wedding_id": 2,
        "vendor_id": 10,
        "status": "reserve",
        "amount": 15000,
        "notes": "Option posée sur le 12/06/2027, exclusivité à confirmer.",
        "arrival_time": "",
        "arrival_confirmed": 0
      },
      {
        "id": 10,
        "wedding_id": 2,
        "vendor_id": 3,
        "status": "contacte",
        "amount": 0,
        "notes": "Dispo à confirmer pour juin 2027.",
        "arrival_time": "",
        "arrival_confirmed": 0
      },
      {
        "id": 11,
        "wedding_id": 3,
        "vendor_id": 4,
        "status": "confirme",
        "amount": 1500,
        "notes": "Réservé en direct par le couple — je coordonne uniquement.",
        "arrival_time": "10:00",
        "arrival_confirmed": 1
      },
      {
        "id": 12,
        "wedding_id": 3,
        "vendor_id": 5,
        "status": "confirme",
        "amount": 900,
        "notes": "Livraison 9h le jour J.",
        "arrival_time": "09:00",
        "arrival_confirmed": 0
      }
    ],
    "payments": [
      {
        "id": 1,
        "wedding_vendor_id": 1,
        "label": "Acompte 30 %",
        "amount": 3600,
        "due_date": "2025-11-15",
        "paid": 1,
        "paid_at": "2025-11-14"
      },
      {
        "id": 2,
        "wedding_vendor_id": 1,
        "label": "Acompte 30 %",
        "amount": 3600,
        "due_date": "2026-06-19",
        "paid": 1,
        "paid_at": "2026-06-18"
      },
      {
        "id": 3,
        "wedding_vendor_id": 1,
        "label": "Solde",
        "amount": 4800,
        "due_date": "2026-09-12",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 4,
        "wedding_vendor_id": 2,
        "label": "Acompte 30 %",
        "amount": 4290,
        "due_date": "2026-02-10",
        "paid": 1,
        "paid_at": "2026-02-09"
      },
      {
        "id": 5,
        "wedding_vendor_id": 2,
        "label": "Acompte 40 %",
        "amount": 5720,
        "due_date": "2026-08-20",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 6,
        "wedding_vendor_id": 2,
        "label": "Solde",
        "amount": 4290,
        "due_date": "2026-09-19",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 7,
        "wedding_vendor_id": 3,
        "label": "Acompte 50 %",
        "amount": 1600,
        "due_date": "2026-01-15",
        "paid": 1,
        "paid_at": "2026-01-15"
      },
      {
        "id": 8,
        "wedding_vendor_id": 3,
        "label": "Solde",
        "amount": 1600,
        "due_date": "2026-09-12",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 9,
        "wedding_vendor_id": 4,
        "label": "Acompte 30 %",
        "amount": 540,
        "due_date": "2026-03-01",
        "paid": 1,
        "paid_at": "2026-02-27"
      },
      {
        "id": 10,
        "wedding_vendor_id": 4,
        "label": "Solde",
        "amount": 1260,
        "due_date": "2026-09-19",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 11,
        "wedding_vendor_id": 5,
        "label": "Acompte 30 %",
        "amount": 720,
        "due_date": "2026-07-05",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 12,
        "wedding_vendor_id": 7,
        "label": "Solde",
        "amount": 650,
        "due_date": "2026-09-19",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 13,
        "wedding_vendor_id": 8,
        "label": "Acompte 50 %",
        "amount": 450,
        "due_date": "2026-04-10",
        "paid": 1,
        "paid_at": "2026-04-10"
      },
      {
        "id": 14,
        "wedding_vendor_id": 8,
        "label": "Solde",
        "amount": 450,
        "due_date": "2026-09-19",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 15,
        "wedding_vendor_id": 9,
        "label": "Acompte 30 %",
        "amount": 4500,
        "due_date": "2026-07-30",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 16,
        "wedding_vendor_id": 9,
        "label": "Acompte 30 %",
        "amount": 4500,
        "due_date": "2027-01-12",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 17,
        "wedding_vendor_id": 9,
        "label": "Solde",
        "amount": 6000,
        "due_date": "2027-06-05",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 18,
        "wedding_vendor_id": 11,
        "label": "Solde (à régler par le couple)",
        "amount": 1500,
        "due_date": "2026-08-08",
        "paid": 0,
        "paid_at": null
      },
      {
        "id": 19,
        "wedding_vendor_id": 12,
        "label": "Solde (à régler par le couple)",
        "amount": 900,
        "due_date": "2026-08-08",
        "paid": 0,
        "paid_at": null
      }
    ],
    "budget_items": [
      {
        "id": 1,
        "wedding_id": 1,
        "label": "Lieu de réception",
        "estimated": 12000,
        "contracted": 12000,
        "paid": 7200,
        "position": 0
      },
      {
        "id": 2,
        "wedding_id": 1,
        "label": "Traiteur & boissons",
        "estimated": 15000,
        "contracted": 14300,
        "paid": 4290,
        "position": 1
      },
      {
        "id": 3,
        "wedding_id": 1,
        "label": "Photographe / vidéo",
        "estimated": 3500,
        "contracted": 3200,
        "paid": 1600,
        "position": 2
      },
      {
        "id": 4,
        "wedding_id": 1,
        "label": "Musique & animation",
        "estimated": 2000,
        "contracted": 1800,
        "paid": 540,
        "position": 3
      },
      {
        "id": 5,
        "wedding_id": 1,
        "label": "Fleurs & décoration",
        "estimated": 3000,
        "contracted": 2400,
        "paid": 0,
        "position": 4
      },
      {
        "id": 6,
        "wedding_id": 1,
        "label": "Robe & costumes",
        "estimated": 3500,
        "contracted": 3100,
        "paid": 3100,
        "position": 5
      },
      {
        "id": 7,
        "wedding_id": 1,
        "label": "Papeterie",
        "estimated": 800,
        "contracted": 620,
        "paid": 620,
        "position": 6
      },
      {
        "id": 8,
        "wedding_id": 1,
        "label": "Coiffure & maquillage",
        "estimated": 700,
        "contracted": 650,
        "paid": 0,
        "position": 7
      },
      {
        "id": 9,
        "wedding_id": 1,
        "label": "Transport",
        "estimated": 800,
        "contracted": 0,
        "paid": 0,
        "position": 8
      },
      {
        "id": 10,
        "wedding_id": 1,
        "label": "Divers & imprévus",
        "estimated": 700,
        "contracted": 0,
        "paid": 0,
        "position": 9
      },
      {
        "id": 11,
        "wedding_id": 2,
        "label": "Lieu de réception",
        "estimated": 15000,
        "contracted": 15000,
        "paid": 0,
        "position": 0
      },
      {
        "id": 12,
        "wedding_id": 2,
        "label": "Traiteur & boissons",
        "estimated": 9000,
        "contracted": 0,
        "paid": 0,
        "position": 1
      },
      {
        "id": 13,
        "wedding_id": 2,
        "label": "Photographe / vidéo",
        "estimated": 3000,
        "contracted": 0,
        "paid": 0,
        "position": 2
      },
      {
        "id": 14,
        "wedding_id": 2,
        "label": "Fleurs & décoration",
        "estimated": 2000,
        "contracted": 0,
        "paid": 0,
        "position": 3
      },
      {
        "id": 15,
        "wedding_id": 2,
        "label": "Divers & imprévus",
        "estimated": 1000,
        "contracted": 0,
        "paid": 0,
        "position": 4
      },
      {
        "id": 16,
        "wedding_id": 3,
        "label": "Musique & animation",
        "estimated": 1500,
        "contracted": 1500,
        "paid": 0,
        "position": 0
      },
      {
        "id": 17,
        "wedding_id": 3,
        "label": "Fleurs & décoration",
        "estimated": 900,
        "contracted": 900,
        "paid": 0,
        "position": 1
      },
      {
        "id": 18,
        "wedding_id": 3,
        "label": "Divers & imprévus",
        "estimated": 300,
        "contracted": 0,
        "paid": 0,
        "position": 2
      }
    ],
    "timeline_items": [
      {
        "id": 1,
        "wedding_id": 1,
        "time": "09:30",
        "title": "Coiffure & maquillage de la mariée",
        "duration": 180,
        "location": "Suite du château",
        "notes": "",
        "wedding_vendor_id": 7
      },
      {
        "id": 2,
        "wedding_id": 1,
        "time": "15:00",
        "title": "Ouverture du lieu — état des lieux",
        "duration": 30,
        "location": "Château de Launac",
        "notes": "Avec Mme Fabre",
        "wedding_vendor_id": 1
      },
      {
        "id": 3,
        "wedding_id": 1,
        "time": "17:00",
        "title": "Cérémonie laïque",
        "duration": 60,
        "location": "Parc du château",
        "notes": "Trame en cours d'écriture",
        "wedding_vendor_id": 8
      },
      {
        "id": 4,
        "wedding_id": 1,
        "time": "18:00",
        "title": "Cocktail",
        "duration": 150,
        "location": "Terrasse sud",
        "notes": "",
        "wedding_vendor_id": null
      },
      {
        "id": 5,
        "wedding_id": 1,
        "time": "20:30",
        "title": "Dîner",
        "duration": 180,
        "location": "Orangerie",
        "notes": "Déroulé détaillé à compléter avec le traiteur",
        "wedding_vendor_id": 2
      },
      {
        "id": 6,
        "wedding_id": 3,
        "time": "08:30",
        "title": "Arrivée coordination — tour du lieu & vérifications",
        "duration": 30,
        "location": "Ferme des Étoiles",
        "notes": "Plan B pluie : grange. Vérifier l'accès élec 32A pour le DJ.",
        "wedding_vendor_id": null
      },
      {
        "id": 7,
        "wedding_id": 3,
        "time": "09:00",
        "title": "Livraison & installation des fleurs",
        "duration": 120,
        "location": "Arche + tables",
        "notes": "Installer l'arche de cérémonie en premier",
        "wedding_vendor_id": 12
      },
      {
        "id": 8,
        "wedding_id": 3,
        "time": "10:00",
        "title": "Installation sono & lumières + tests",
        "duration": 90,
        "location": "Grange",
        "notes": "Accès élec 32A côté cour",
        "wedding_vendor_id": 11
      },
      {
        "id": 9,
        "wedding_id": 3,
        "time": "11:00",
        "title": "Coiffure & maquillage de la mariée",
        "duration": 150,
        "location": "Gîte de la ferme",
        "notes": "",
        "wedding_vendor_id": null
      },
      {
        "id": 10,
        "wedding_id": 3,
        "time": "12:30",
        "title": "Déjeuner du cortège",
        "duration": 60,
        "location": "Terrasse",
        "notes": "",
        "wedding_vendor_id": null
      },
      {
        "id": 11,
        "wedding_id": 3,
        "time": "14:00",
        "title": "Photos de couple",
        "duration": 90,
        "location": "Champ derrière la grange",
        "notes": "Backup golden hour à 19h45 si lumière dure",
        "wedding_vendor_id": null
      },
      {
        "id": 12,
        "wedding_id": 3,
        "time": "15:30",
        "title": "Accueil des invités",
        "duration": 30,
        "location": "Parvis",
        "notes": "Parking fléché par les témoins",
        "wedding_vendor_id": null
      },
      {
        "id": 13,
        "wedding_id": 3,
        "time": "16:00",
        "title": "Cérémonie laïque",
        "duration": 60,
        "location": "Sous le grand chêne",
        "notes": "Cues musique lancées par le DJ",
        "wedding_vendor_id": null
      },
      {
        "id": 14,
        "wedding_id": 3,
        "time": "17:00",
        "title": "Cocktail",
        "duration": 150,
        "location": "Terrasse",
        "notes": "Annonce de l'entrée en salle à 19h20",
        "wedding_vendor_id": null
      },
      {
        "id": 15,
        "wedding_id": 3,
        "time": "19:30",
        "title": "Entrée en salle & discours",
        "duration": 30,
        "location": "Grange",
        "notes": "Discours : père de Sarah puis témoins (10 min max chacun)",
        "wedding_vendor_id": null
      },
      {
        "id": 16,
        "wedding_id": 3,
        "time": "20:00",
        "title": "Dîner",
        "duration": 150,
        "location": "Grange",
        "notes": "60 adultes, 4 enfants — quantités confirmées",
        "wedding_vendor_id": null
      },
      {
        "id": 17,
        "wedding_id": 3,
        "time": "22:30",
        "title": "Pièce montée & dessert",
        "duration": 30,
        "location": "Grange",
        "notes": "",
        "wedding_vendor_id": null
      },
      {
        "id": 18,
        "wedding_id": 3,
        "time": "23:00",
        "title": "Ouverture de bal",
        "duration": 30,
        "location": "Grange",
        "notes": "",
        "wedding_vendor_id": 11
      },
      {
        "id": 19,
        "wedding_id": 3,
        "time": "03:00",
        "title": "Fin du son (arrêté préfectoral)",
        "duration": 0,
        "location": "",
        "notes": "Strict — négocié avec la mairie",
        "wedding_vendor_id": 11
      }
    ],
    "decisions": [
      {
        "id": 1,
        "wedding_id": 1,
        "question": "Chaises pour la cérémonie : Napoléon dorées ou bancs en bois brut ?",
        "options": "Napoléon dorées|Bancs en bois brut",
        "answer": "",
        "comment": "",
        "created_at": "2026-07-12 22:08:41",
        "answered_at": null
      },
      {
        "id": 2,
        "wedding_id": 1,
        "question": "On valide le devis fleuriste de l'Atelier Rosalie (2 400 €) ?",
        "options": "On valide|On veut ajuster",
        "answer": "",
        "comment": "",
        "created_at": "2026-07-12 22:08:41",
        "answered_at": null
      },
      {
        "id": 3,
        "wedding_id": 1,
        "question": "Le gâteau : pièce montée traditionnelle ou naked cake ?",
        "options": "Pièce montée|Naked cake",
        "answer": "Naked cake",
        "comment": "On adore l'idée avec les fleurs fraîches !",
        "created_at": "2026-07-12 22:08:41",
        "answered_at": "2026-07-02"
      },
      {
        "id": 4,
        "wedding_id": 3,
        "question": "test",
        "options": "",
        "answer": "",
        "comment": "",
        "created_at": "2026-07-13 09:27:48",
        "answered_at": null
      }
    ],
    "documents": [
      {
        "id": 1,
        "wedding_id": 1,
        "kind": "devis",
        "facture_type": "",
        "number": "DEV-2026-001",
        "status": "accepte",
        "title": "Organisation complète",
        "issue_date": "2026-01-10",
        "valid_until": "2026-02-09",
        "due_date": null,
        "parent_id": null,
        "notes": "",
        "share_token": "4819d9f017dac737a9",
        "accepted_by": "Camille Roussel",
        "accepted_at": "2026-01-18",
        "paid_at": null,
        "created_at": "2026-07-12 22:08:41"
      },
      {
        "id": 2,
        "wedding_id": 1,
        "kind": "facture",
        "facture_type": "acompte",
        "number": "FAC-2026-001",
        "status": "payee",
        "title": "Organisation complète",
        "issue_date": "2026-01-20",
        "valid_until": null,
        "due_date": "2026-02-03",
        "parent_id": 1,
        "notes": "",
        "share_token": "81924b9a39461ffd03",
        "accepted_by": "",
        "accepted_at": null,
        "paid_at": "2026-01-28",
        "created_at": "2026-07-12 22:08:41"
      },
      {
        "id": 3,
        "wedding_id": 3,
        "kind": "devis",
        "facture_type": "",
        "number": "DEV-2026-002",
        "status": "accepte",
        "title": "Coordination jour J",
        "issue_date": "2026-05-20",
        "valid_until": "2026-06-19",
        "due_date": null,
        "parent_id": null,
        "notes": "",
        "share_token": "f90d51909115c5c0ac",
        "accepted_by": "Sarah Bianchi",
        "accepted_at": "2026-05-28",
        "paid_at": null,
        "created_at": "2026-07-12 22:08:41"
      },
      {
        "id": 4,
        "wedding_id": 3,
        "kind": "facture",
        "facture_type": "acompte",
        "number": "FAC-2026-002",
        "status": "payee",
        "title": "Coordination jour J",
        "issue_date": "2026-05-30",
        "valid_until": null,
        "due_date": "2026-06-13",
        "parent_id": 3,
        "notes": "",
        "share_token": "868e4c55ec14694b1e",
        "accepted_by": "",
        "accepted_at": null,
        "paid_at": "2026-06-02",
        "created_at": "2026-07-12 22:08:41"
      },
      {
        "id": 5,
        "wedding_id": 1,
        "kind": "facture",
        "facture_type": "solde",
        "number": "FAC-2026-003",
        "status": "emise",
        "title": "Organisation complète",
        "issue_date": "2026-07-01",
        "valid_until": null,
        "due_date": "2026-09-12",
        "parent_id": 1,
        "notes": "",
        "share_token": "9791da00b04f85a843",
        "accepted_by": "",
        "accepted_at": null,
        "paid_at": null,
        "created_at": "2026-07-12 22:08:41"
      },
      {
        "id": 6,
        "wedding_id": 6,
        "kind": "devis",
        "facture_type": "",
        "number": "DEV-2026-003",
        "status": "envoye",
        "title": "Organisation partielle",
        "issue_date": "2026-07-08",
        "valid_until": "2026-08-07",
        "due_date": null,
        "parent_id": null,
        "notes": "",
        "share_token": "3d13eb336a1a581b05",
        "accepted_by": "",
        "accepted_at": null,
        "paid_at": null,
        "created_at": "2026-07-12 22:08:41"
      },
      {
        "id": 7,
        "wedding_id": 3,
        "kind": "devis",
        "facture_type": "",
        "number": "DEV-2026-004",
        "status": "brouillon",
        "title": "Coordination jour J",
        "issue_date": "2026-07-13",
        "valid_until": "2026-08-12",
        "due_date": null,
        "parent_id": null,
        "notes": "",
        "share_token": "985b1e42254b4e73ae",
        "accepted_by": "",
        "accepted_at": null,
        "paid_at": null,
        "created_at": "2026-07-13 09:28:47"
      }
    ],
    "document_lines": [
      {
        "id": 1,
        "document_id": 1,
        "description": "Organisation & coordination complètes — mariage du 19 septembre 2026 (12 mois d'accompagnement)",
        "qty": 1,
        "unit_price": 3500,
        "position": 0
      },
      {
        "id": 2,
        "document_id": 1,
        "description": "Coordination du jour J — équipe de 2 personnes",
        "qty": 1,
        "unit_price": 500,
        "position": 1
      },
      {
        "id": 3,
        "document_id": 1,
        "description": "Frais de déplacement (Launac)",
        "qty": 1,
        "unit_price": 200,
        "position": 2
      },
      {
        "id": 4,
        "document_id": 2,
        "description": "Acompte de 30 % — devis DEV-2026-001 (Organisation complète)",
        "qty": 1,
        "unit_price": 1260,
        "position": 0
      },
      {
        "id": 5,
        "document_id": 3,
        "description": "Coordination jour J — mariage du 8 août 2026",
        "qty": 1,
        "unit_price": 1400,
        "position": 0
      },
      {
        "id": 6,
        "document_id": 3,
        "description": "Frais de déplacement (Fleurance)",
        "qty": 1,
        "unit_price": 200,
        "position": 1
      },
      {
        "id": 7,
        "document_id": 4,
        "description": "Acompte de 50 % — devis DEV-2026-002 (Coordination jour J)",
        "qty": 1,
        "unit_price": 800,
        "position": 0
      },
      {
        "id": 8,
        "document_id": 5,
        "description": "Solde — devis DEV-2026-001 (Organisation complète)",
        "qty": 1,
        "unit_price": 2940,
        "position": 0
      },
      {
        "id": 9,
        "document_id": 6,
        "description": "Organisation partielle — mariage du 22 mai 2027",
        "qty": 1,
        "unit_price": 2400,
        "position": 0
      },
      {
        "id": 10,
        "document_id": 7,
        "description": "Coordination jour J — mariage du 8 août 2026",
        "qty": 1,
        "unit_price": 1601,
        "position": 0
      }
    ]
  }
}