{
  "ok": true,
  "kernel_version": "manifest@v1",
  "manifest_id": "ecorce:fruits-legumes-hebdo@v1",
  "owner_actor": "ecorce",
  "protocol": "ecorce.weekly_produce_pool@v1",
  "state": {
    "allocation_and_exceptions": {
      "shortages_and_substitutions": [
        {
          "spn_ordered": "CODE-FL-006",
          "product_ordered": "Fraises fraîches — Caisse 8×1 lb (44,00 $)",
          "shortage_reason": "Rupture partielle d'arrivage chez le grossiste matinal (1 caisse reçue sur 3)",
          "substitute_spn": "CODE-FL-006S",
          "substitute_product": "Fraises de serre locale — Caisse 8×1 lb",
          "substitute_price_display": "46,00 $",
          "price_variance_pct": 4.5,
          "decisions_by_retailer": [
            {
              "retailer": "epicerie-quartier-a",
              "policy": "accept_equivalent (max +10 %)",
              "decision": "SUBSTITUÉ AUTOMATIQUEMENT (+4,5 % <= 10 %)",
              "allocated": "1 caisse CODE-FL-006 (44,00 $) + 1 caisse CODE-FL-006S serre locale (46,00 $)"
            },
            {
              "retailer": "epicerie-quartier-b",
              "policy": "same_origin_only (max +5 %)",
              "decision": "SUBSTITUÉ AUTOMATIQUEMENT (+4,5 % <= 5 %)",
              "allocated": "1 caisse CODE-FL-006S serre locale (46,00 $)"
            }
          ]
        }
      ],
      "redivision_slips": {
        "epicerie-quartier-a": [
          "2 × Bananes bio 40 lb (CODE-FL-001) — caisses entières",
          "0,5 × Avocats Hass 48 (CODE-FL-003) — bac redivisé de 24 unités (jumelé avec epicerie-quartier-b)",
          "1 × Fraises 8×1 lb (CODE-FL-006) + 1 × Fraises serre locale 8×1 lb (CODE-FL-006S, échange pré-autorisé +4,5 %)",
          "0,5 × Citrons 115 (CODE-FL-007) — bac redivisé de 58 unités (jumelé avec epicerie-quartier-b)"
        ],
        "epicerie-quartier-b": [
          "1 × Bananes bio 40 lb (CODE-FL-001) — caisse entière",
          "0,5 × Avocats Hass 48 (CODE-FL-003) — bac redivisé de 24 unités (jumelé avec epicerie-quartier-a)",
          "1 × Fraises serre locale 8×1 lb (CODE-FL-006S, échange pré-autorisé +4,5 %)",
          "0,5 × Citrons 115 (CODE-FL-007) — bac redivisé de 57 unités (jumelé avec epicerie-quartier-a)"
        ]
      }
    },
    "cycle_info": {
      "cycle_id": "2026-W44",
      "status": "1_collecte_ouverte",
      "primary_wholesaler": "Grossiste matinal (Marché Central, Montréal) + fermes maraîchères locales (données d'exemple)",
      "hybrid_model_note": "L'assistant de l'épicier lit la liste matinale publiée ou extrait directement les lignes du PDF du grossiste matinal et soumet sa commande avant l'aube.",
      "weekly_schedule_rules": [
        "02h00: lecture automatisée de la liste de prix PDF du grossiste matinal et comparaison des tarifs.",
        "04h30: consolidation maître — jumelage automatique des demi-caisses (0,5 + 0,5 = 1 caisse entière) entre épiceries voisines.",
        "05h30: réception au débarcadère, application des règles d'échange pré-autorisées en cas de rupture et génération des bordereaux.",
        "08h00: livraison en magasin et déclaration en une phrase des casseaux abîmés pour crédit immédiat au prorata."
      ]
    },
    "master_order": {
      "cycle_id": "2026-W44",
      "wholesaler": "Grossiste matinal (Marché Central, Montréal)",
      "participating_retailers": [
        "epicerie-quartier-a",
        "epicerie-quartier-b"
      ],
      "total_whole_cases": 8,
      "split_cases_paired_count": 2,
      "orphan_half_cases_count": 0,
      "total_wholesale_display": "386,00 $",
      "split_case_pairings": [
        {
          "spn": "CODE-FL-003",
          "product": "Avocats Hass calibre 48 — Caisse 48 unités",
          "retailers": [
            "epicerie-quartier-a (0,5 caisse = 24 unités)",
            "epicerie-quartier-b (0,5 caisse = 24 unités)"
          ],
          "combined_whole_cases": 1,
          "whole_case_price_display": "64,00 $ (32,00 $ par épicier, 0 perte)"
        },
        {
          "spn": "CODE-FL-007",
          "product": "Citrons choix — Caisse 115 unités",
          "retailers": [
            "epicerie-quartier-a (0,5 caisse = 58 unités)",
            "epicerie-quartier-b (0,5 caisse = 57 unités)"
          ],
          "combined_whole_cases": 1,
          "whole_case_price_display": "52,00 $ (26,00 $ par épicier, rotation doublée)"
        }
      ]
    },
    "quality_claims": [
      {
        "claim_id": "clm_w44_001",
        "retailer_handle": "epicerie-quartier-a",
        "spn": "CODE-FL-006",
        "product": "Fraises fraîches — Caisse 8×1 lb (8 barquettes)",
        "damaged_units": 2,
        "total_units_in_case": 8,
        "damaged_ratio_pct": 25,
        "credit_display": "11,00 $",
        "description": "2 barquettes abîmées à l'ouverture sur la caisse de 8×1 lb (2/8 = 25 %)",
        "photo_ref": "photo-reception-epicerie-a-fraises-w44",
        "status": "credited_pro_rata"
      }
    ],
    "retailer_orders": {
      "epicerie-quartier-a": {
        "retailer_handle": "epicerie-quartier-a",
        "retailer_name": "Épicerie de quartier A (exemple)",
        "default_substitution_policy": "accept_equivalent",
        "default_max_price_variance_pct": 10,
        "lines": [
          {
            "spn": "CODE-FL-001",
            "name": "Bananes biologiques équitables — Caisse 40 lb",
            "cases": 2,
            "is_half_case": false,
            "substitution_policy": "accept_equivalent",
            "max_price_variance_pct": 10,
            "line_total_display": "92,00 $"
          },
          {
            "spn": "CODE-FL-003",
            "name": "Avocats Hass calibre 48 — Caisse 48 unités",
            "cases": 0.5,
            "is_half_case": true,
            "paired_with": "epicerie-quartier-b",
            "substitution_policy": "accept_equivalent",
            "max_price_variance_pct": 10,
            "line_total_display": "32,00 $ (demi-caisse jumelée)"
          },
          {
            "spn": "CODE-FL-006",
            "name": "Fraises fraîches — Caisse 8×1 lb",
            "cases": 2,
            "is_half_case": false,
            "substitution_policy": "accept_equivalent",
            "max_price_variance_pct": 10,
            "line_total_display": "88,00 $"
          },
          {
            "spn": "CODE-FL-007",
            "name": "Citrons choix — Caisse 115 unités",
            "cases": 0.5,
            "is_half_case": true,
            "paired_with": "epicerie-quartier-b",
            "substitution_policy": "accept_equivalent",
            "max_price_variance_pct": 10,
            "line_total_display": "26,00 $ (demi-caisse jumelée)"
          }
        ],
        "subtotal_display": "238,00 $"
      },
      "epicerie-quartier-b": {
        "retailer_handle": "epicerie-quartier-b",
        "retailer_name": "Épicerie de quartier B (exemple)",
        "default_substitution_policy": "same_origin_only",
        "default_max_price_variance_pct": 5,
        "lines": [
          {
            "spn": "CODE-FL-001",
            "name": "Bananes biologiques équitables — Caisse 40 lb",
            "cases": 1,
            "is_half_case": false,
            "substitution_policy": "same_origin_only",
            "max_price_variance_pct": 5,
            "line_total_display": "46,00 $"
          },
          {
            "spn": "CODE-FL-003",
            "name": "Avocats Hass calibre 48 — Caisse 48 unités",
            "cases": 0.5,
            "is_half_case": true,
            "paired_with": "epicerie-quartier-a",
            "substitution_policy": "accept_equivalent",
            "max_price_variance_pct": 10,
            "line_total_display": "32,00 $ (demi-caisse jumelée)"
          },
          {
            "spn": "CODE-FL-006",
            "name": "Fraises fraîches — Caisse 8×1 lb",
            "cases": 1,
            "is_half_case": false,
            "substitution_policy": "same_origin_only",
            "max_price_variance_pct": 5,
            "line_total_display": "44,00 $"
          },
          {
            "spn": "CODE-FL-007",
            "name": "Citrons choix — Caisse 115 unités",
            "cases": 0.5,
            "is_half_case": true,
            "paired_with": "epicerie-quartier-a",
            "substitution_policy": "accept_equivalent",
            "max_price_variance_pct": 10,
            "line_total_display": "26,00 $ (demi-caisse jumelée)"
          }
        ],
        "subtotal_display": "148,00 $"
      }
    },
    "weekly_list": [
      {
        "spn": "CODE-FL-001",
        "name": "Bananes biologiques équitables — Caisse 40 lb",
        "origin": "Import équitable (Grossiste matinal, Montréal)",
        "case_size": "40 lb",
        "units_per_case": 40,
        "unit_label": "lb",
        "case_price_cents": 4600,
        "case_price_display": "46,00 $",
        "pallet_tier_price_cents": 4200,
        "pallet_tier_price_display": "42,00 $",
        "pallet_tier_min_cases": 10,
        "split_case_allowed": true,
        "half_case_price_cents": 2350,
        "half_case_price_display": "23,50 $",
        "suggested_substitutes": [
          "CODE-FL-001B (Bananes conventionnelles 40 lb — 36,00 $)"
        ]
      },
      {
        "spn": "CODE-FL-003",
        "name": "Avocats Hass calibre 48 — Caisse 48 unités",
        "origin": "Grossiste matinal (Marché Central, Montréal)",
        "case_size": "48 unités",
        "units_per_case": 48,
        "unit_label": "unité",
        "case_price_cents": 6400,
        "case_price_display": "64,00 $",
        "pallet_tier_price_cents": 5900,
        "pallet_tier_price_display": "59,00 $",
        "pallet_tier_min_cases": 10,
        "split_case_allowed": true,
        "half_case_price_cents": 3250,
        "half_case_price_display": "32,50 $ (24 unités)",
        "suggested_substitutes": [
          "Avocats Hass calibre 60 — Caisse 60 unités (60,00 $)"
        ]
      },
      {
        "spn": "CODE-FL-006",
        "name": "Fraises fraîches — Caisse 8×1 lb (8 barquettes)",
        "origin": "Serres locales / Grossiste matinal",
        "case_size": "8 barquettes de 1 lb",
        "units_per_case": 8,
        "unit_label": "barquette 1 lb",
        "case_price_cents": 4400,
        "case_price_display": "44,00 $",
        "pallet_tier_price_cents": 4000,
        "pallet_tier_price_display": "40,00 $",
        "pallet_tier_min_cases": 10,
        "split_case_allowed": true,
        "half_case_price_cents": 2250,
        "half_case_price_display": "22,50 $ (4 barquettes)",
        "suggested_substitutes": [
          "CODE-FL-006S — Fraises de serre locale 8×1 lb (46,00 $, +4,5 %)"
        ]
      },
      {
        "spn": "CODE-FL-007",
        "name": "Citrons choix — Caisse 115 unités",
        "origin": "Grossiste matinal (Marché Central, Montréal)",
        "case_size": "115 unités",
        "units_per_case": 115,
        "unit_label": "unité",
        "case_price_cents": 5200,
        "case_price_display": "52,00 $",
        "pallet_tier_price_cents": 4800,
        "pallet_tier_price_display": "48,00 $",
        "pallet_tier_min_cases": 10,
        "split_case_allowed": true,
        "half_case_price_cents": 2650,
        "half_case_price_display": "26,50 $ (~57 unités)",
        "suggested_substitutes": [
          "Citrons calibre 140 — Caisse 140 unités (50,00 $)"
        ]
      }
    ]
  },
  "entries": [
    {
      "key": "allocation_and_exceptions",
      "value": {
        "shortages_and_substitutions": [
          {
            "spn_ordered": "CODE-FL-006",
            "product_ordered": "Fraises fraîches — Caisse 8×1 lb (44,00 $)",
            "shortage_reason": "Rupture partielle d'arrivage chez le grossiste matinal (1 caisse reçue sur 3)",
            "substitute_spn": "CODE-FL-006S",
            "substitute_product": "Fraises de serre locale — Caisse 8×1 lb",
            "substitute_price_display": "46,00 $",
            "price_variance_pct": 4.5,
            "decisions_by_retailer": [
              {
                "retailer": "epicerie-quartier-a",
                "policy": "accept_equivalent (max +10 %)",
                "decision": "SUBSTITUÉ AUTOMATIQUEMENT (+4,5 % <= 10 %)",
                "allocated": "1 caisse CODE-FL-006 (44,00 $) + 1 caisse CODE-FL-006S serre locale (46,00 $)"
              },
              {
                "retailer": "epicerie-quartier-b",
                "policy": "same_origin_only (max +5 %)",
                "decision": "SUBSTITUÉ AUTOMATIQUEMENT (+4,5 % <= 5 %)",
                "allocated": "1 caisse CODE-FL-006S serre locale (46,00 $)"
              }
            ]
          }
        ],
        "redivision_slips": {
          "epicerie-quartier-a": [
            "2 × Bananes bio 40 lb (CODE-FL-001) — caisses entières",
            "0,5 × Avocats Hass 48 (CODE-FL-003) — bac redivisé de 24 unités (jumelé avec epicerie-quartier-b)",
            "1 × Fraises 8×1 lb (CODE-FL-006) + 1 × Fraises serre locale 8×1 lb (CODE-FL-006S, échange pré-autorisé +4,5 %)",
            "0,5 × Citrons 115 (CODE-FL-007) — bac redivisé de 58 unités (jumelé avec epicerie-quartier-b)"
          ],
          "epicerie-quartier-b": [
            "1 × Bananes bio 40 lb (CODE-FL-001) — caisse entière",
            "0,5 × Avocats Hass 48 (CODE-FL-003) — bac redivisé de 24 unités (jumelé avec epicerie-quartier-a)",
            "1 × Fraises serre locale 8×1 lb (CODE-FL-006S, échange pré-autorisé +4,5 %)",
            "0,5 × Citrons 115 (CODE-FL-007) — bac redivisé de 57 unités (jumelé avec epicerie-quartier-a)"
          ]
        }
      },
      "updated_by": "ecorce",
      "updated_at": "2026-10-28T18:37:40.491Z"
    },
    {
      "key": "cycle_info",
      "value": {
        "cycle_id": "2026-W44",
        "status": "1_collecte_ouverte",
        "primary_wholesaler": "Grossiste matinal (Marché Central, Montréal) + fermes maraîchères locales (données d'exemple)",
        "hybrid_model_note": "L'assistant de l'épicier lit la liste matinale publiée ou extrait directement les lignes du PDF du grossiste matinal et soumet sa commande avant l'aube.",
        "weekly_schedule_rules": [
          "02h00: lecture automatisée de la liste de prix PDF du grossiste matinal et comparaison des tarifs.",
          "04h30: consolidation maître — jumelage automatique des demi-caisses (0,5 + 0,5 = 1 caisse entière) entre épiceries voisines.",
          "05h30: réception au débarcadère, application des règles d'échange pré-autorisées en cas de rupture et génération des bordereaux.",
          "08h00: livraison en magasin et déclaration en une phrase des casseaux abîmés pour crédit immédiat au prorata."
        ]
      },
      "updated_by": "ecorce",
      "updated_at": "2026-10-28T18:37:40.491Z"
    },
    {
      "key": "master_order",
      "value": {
        "cycle_id": "2026-W44",
        "wholesaler": "Grossiste matinal (Marché Central, Montréal)",
        "participating_retailers": [
          "epicerie-quartier-a",
          "epicerie-quartier-b"
        ],
        "total_whole_cases": 8,
        "split_cases_paired_count": 2,
        "orphan_half_cases_count": 0,
        "total_wholesale_display": "386,00 $",
        "split_case_pairings": [
          {
            "spn": "CODE-FL-003",
            "product": "Avocats Hass calibre 48 — Caisse 48 unités",
            "retailers": [
              "epicerie-quartier-a (0,5 caisse = 24 unités)",
              "epicerie-quartier-b (0,5 caisse = 24 unités)"
            ],
            "combined_whole_cases": 1,
            "whole_case_price_display": "64,00 $ (32,00 $ par épicier, 0 perte)"
          },
          {
            "spn": "CODE-FL-007",
            "product": "Citrons choix — Caisse 115 unités",
            "retailers": [
              "epicerie-quartier-a (0,5 caisse = 58 unités)",
              "epicerie-quartier-b (0,5 caisse = 57 unités)"
            ],
            "combined_whole_cases": 1,
            "whole_case_price_display": "52,00 $ (26,00 $ par épicier, rotation doublée)"
          }
        ]
      },
      "updated_by": "ecorce",
      "updated_at": "2026-10-28T18:37:40.491Z"
    },
    {
      "key": "quality_claims",
      "value": [
        {
          "claim_id": "clm_w44_001",
          "retailer_handle": "epicerie-quartier-a",
          "spn": "CODE-FL-006",
          "product": "Fraises fraîches — Caisse 8×1 lb (8 barquettes)",
          "damaged_units": 2,
          "total_units_in_case": 8,
          "damaged_ratio_pct": 25,
          "credit_display": "11,00 $",
          "description": "2 barquettes abîmées à l'ouverture sur la caisse de 8×1 lb (2/8 = 25 %)",
          "photo_ref": "photo-reception-epicerie-a-fraises-w44",
          "status": "credited_pro_rata"
        }
      ],
      "updated_by": "ecorce",
      "updated_at": "2026-10-28T18:37:40.491Z"
    },
    {
      "key": "retailer_orders",
      "value": {
        "epicerie-quartier-a": {
          "retailer_handle": "epicerie-quartier-a",
          "retailer_name": "Épicerie de quartier A (exemple)",
          "default_substitution_policy": "accept_equivalent",
          "default_max_price_variance_pct": 10,
          "lines": [
            {
              "spn": "CODE-FL-001",
              "name": "Bananes biologiques équitables — Caisse 40 lb",
              "cases": 2,
              "is_half_case": false,
              "substitution_policy": "accept_equivalent",
              "max_price_variance_pct": 10,
              "line_total_display": "92,00 $"
            },
            {
              "spn": "CODE-FL-003",
              "name": "Avocats Hass calibre 48 — Caisse 48 unités",
              "cases": 0.5,
              "is_half_case": true,
              "paired_with": "epicerie-quartier-b",
              "substitution_policy": "accept_equivalent",
              "max_price_variance_pct": 10,
              "line_total_display": "32,00 $ (demi-caisse jumelée)"
            },
            {
              "spn": "CODE-FL-006",
              "name": "Fraises fraîches — Caisse 8×1 lb",
              "cases": 2,
              "is_half_case": false,
              "substitution_policy": "accept_equivalent",
              "max_price_variance_pct": 10,
              "line_total_display": "88,00 $"
            },
            {
              "spn": "CODE-FL-007",
              "name": "Citrons choix — Caisse 115 unités",
              "cases": 0.5,
              "is_half_case": true,
              "paired_with": "epicerie-quartier-b",
              "substitution_policy": "accept_equivalent",
              "max_price_variance_pct": 10,
              "line_total_display": "26,00 $ (demi-caisse jumelée)"
            }
          ],
          "subtotal_display": "238,00 $"
        },
        "epicerie-quartier-b": {
          "retailer_handle": "epicerie-quartier-b",
          "retailer_name": "Épicerie de quartier B (exemple)",
          "default_substitution_policy": "same_origin_only",
          "default_max_price_variance_pct": 5,
          "lines": [
            {
              "spn": "CODE-FL-001",
              "name": "Bananes biologiques équitables — Caisse 40 lb",
              "cases": 1,
              "is_half_case": false,
              "substitution_policy": "same_origin_only",
              "max_price_variance_pct": 5,
              "line_total_display": "46,00 $"
            },
            {
              "spn": "CODE-FL-003",
              "name": "Avocats Hass calibre 48 — Caisse 48 unités",
              "cases": 0.5,
              "is_half_case": true,
              "paired_with": "epicerie-quartier-a",
              "substitution_policy": "accept_equivalent",
              "max_price_variance_pct": 10,
              "line_total_display": "32,00 $ (demi-caisse jumelée)"
            },
            {
              "spn": "CODE-FL-006",
              "name": "Fraises fraîches — Caisse 8×1 lb",
              "cases": 1,
              "is_half_case": false,
              "substitution_policy": "same_origin_only",
              "max_price_variance_pct": 5,
              "line_total_display": "44,00 $"
            },
            {
              "spn": "CODE-FL-007",
              "name": "Citrons choix — Caisse 115 unités",
              "cases": 0.5,
              "is_half_case": true,
              "paired_with": "epicerie-quartier-a",
              "substitution_policy": "accept_equivalent",
              "max_price_variance_pct": 10,
              "line_total_display": "26,00 $ (demi-caisse jumelée)"
            }
          ],
          "subtotal_display": "148,00 $"
        }
      },
      "updated_by": "ecorce",
      "updated_at": "2026-10-28T18:37:40.491Z"
    },
    {
      "key": "weekly_list",
      "value": [
        {
          "spn": "CODE-FL-001",
          "name": "Bananes biologiques équitables — Caisse 40 lb",
          "origin": "Import équitable (Grossiste matinal, Montréal)",
          "case_size": "40 lb",
          "units_per_case": 40,
          "unit_label": "lb",
          "case_price_cents": 4600,
          "case_price_display": "46,00 $",
          "pallet_tier_price_cents": 4200,
          "pallet_tier_price_display": "42,00 $",
          "pallet_tier_min_cases": 10,
          "split_case_allowed": true,
          "half_case_price_cents": 2350,
          "half_case_price_display": "23,50 $",
          "suggested_substitutes": [
            "CODE-FL-001B (Bananes conventionnelles 40 lb — 36,00 $)"
          ]
        },
        {
          "spn": "CODE-FL-003",
          "name": "Avocats Hass calibre 48 — Caisse 48 unités",
          "origin": "Grossiste matinal (Marché Central, Montréal)",
          "case_size": "48 unités",
          "units_per_case": 48,
          "unit_label": "unité",
          "case_price_cents": 6400,
          "case_price_display": "64,00 $",
          "pallet_tier_price_cents": 5900,
          "pallet_tier_price_display": "59,00 $",
          "pallet_tier_min_cases": 10,
          "split_case_allowed": true,
          "half_case_price_cents": 3250,
          "half_case_price_display": "32,50 $ (24 unités)",
          "suggested_substitutes": [
            "Avocats Hass calibre 60 — Caisse 60 unités (60,00 $)"
          ]
        },
        {
          "spn": "CODE-FL-006",
          "name": "Fraises fraîches — Caisse 8×1 lb (8 barquettes)",
          "origin": "Serres locales / Grossiste matinal",
          "case_size": "8 barquettes de 1 lb",
          "units_per_case": 8,
          "unit_label": "barquette 1 lb",
          "case_price_cents": 4400,
          "case_price_display": "44,00 $",
          "pallet_tier_price_cents": 4000,
          "pallet_tier_price_display": "40,00 $",
          "pallet_tier_min_cases": 10,
          "split_case_allowed": true,
          "half_case_price_cents": 2250,
          "half_case_price_display": "22,50 $ (4 barquettes)",
          "suggested_substitutes": [
            "CODE-FL-006S — Fraises de serre locale 8×1 lb (46,00 $, +4,5 %)"
          ]
        },
        {
          "spn": "CODE-FL-007",
          "name": "Citrons choix — Caisse 115 unités",
          "origin": "Grossiste matinal (Marché Central, Montréal)",
          "case_size": "115 unités",
          "units_per_case": 115,
          "unit_label": "unité",
          "case_price_cents": 5200,
          "case_price_display": "52,00 $",
          "pallet_tier_price_cents": 4800,
          "pallet_tier_price_display": "48,00 $",
          "pallet_tier_min_cases": 10,
          "split_case_allowed": true,
          "half_case_price_cents": 2650,
          "half_case_price_display": "26,50 $ (~57 unités)",
          "suggested_substitutes": [
            "Citrons calibre 140 — Caisse 140 unités (50,00 $)"
          ]
        }
      ],
      "updated_by": "ecorce",
      "updated_at": "2026-10-28T18:37:40.491Z"
    }
  ]
}