{
  "version": 1,
  "name": "Q3 2026 vendor review: corrugated and labels",
  "preparedBy": "Purchasing",
  "date": "2026-10-29",
  "criteria": [
    {
      "id": "otif",
      "name": "On-time in-full",
      "weight": 35
    },
    {
      "id": "ppm",
      "name": "Quality (defect PPM)",
      "weight": 30
    },
    {
      "id": "response",
      "name": "Responsiveness",
      "weight": 15
    },
    {
      "id": "invoice",
      "name": "Invoice accuracy",
      "weight": 10
    },
    {
      "id": "cost",
      "name": "Price vs. contract",
      "weight": 10
    }
  ],
  "gates": [
    {
      "id": "coi",
      "name": "Certificate of insurance current"
    },
    {
      "id": "conduct",
      "name": "Supplier code of conduct signed"
    }
  ],
  "vendors": [
    {
      "id": "harbor",
      "name": "Harbor Supply",
      "scores": {
        "otif": 4,
        "ppm": 3,
        "response": 4,
        "invoice": 5,
        "cost": 4
      },
      "gates": {
        "coi": "pass",
        "conduct": "pass"
      },
      "note": "OTIF 203/212 = 95.8%. 31 defects in 48,000 units = 646 PPM. Median reply 6 h. 58/58 invoices matched. Prices +1.2% vs contract."
    },
    {
      "id": "north",
      "name": "Northline Packaging",
      "scores": {
        "otif": 5,
        "ppm": 4,
        "response": 3,
        "invoice": 4,
        "cost": 3
      },
      "gates": {
        "coi": "pass",
        "conduct": "pass"
      },
      "note": "OTIF 148/150 = 98.7%. 14 defects in 36,500 units = 384 PPM. Median reply 20 h. 49/51 invoices matched. Prices +2.5% vs contract."
    },
    {
      "id": "quill",
      "name": "Quill Labels",
      "scores": {
        "otif": 2,
        "ppm": 5,
        "response": 4,
        "invoice": 3,
        "cost": 5
      },
      "gates": {
        "coi": "unknown",
        "conduct": "pass"
      },
      "note": "OTIF 77/88 = 87.5%. 3 defects in 120,000 labels = 25 PPM. Median reply 5 h. 27/30 invoices matched. Prices 0.5% under contract. Insurance certificate lapsed 30 Sep; renewal requested, not received."
    }
  ]
}
