{
  "version": "1.0.0",
  "label": "Illustrative example",
  "inspectedMetres": 100,
  "widthMetres": 1.5,
  "buyerLimit": 40,
  "unit": "points per 100 m²",
  "categories": [
    {
      "id": "thread",
      "name": "Loose thread",
      "description": "A strand lies over the weave.",
      "image": "defect-thread.png"
    },
    {
      "id": "hole",
      "name": "Hole",
      "description": "An opening interrupts the fabric.",
      "image": "defect-hole.png"
    },
    {
      "id": "buildup",
      "name": "Yarn buildup",
      "description": "Extra yarn forms a thick spot.",
      "image": "defect-buildup.png"
    },
    {
      "id": "loop",
      "name": "Loop",
      "description": "A yarn loop stands away from the surface.",
      "image": "defect-loop.png"
    },
    {
      "id": "distortion",
      "name": "Weave distortion",
      "description": "The regular weave is disrupted.",
      "image": "defect-distortion.png"
    },
    {
      "id": "line",
      "name": "Cross-fabric line",
      "description": "A visible band runs across the fabric.",
      "image": "defect-line.png"
    }
  ],
  "defects": [
    { "type": "thread", "metres": 6, "acrossMetres": 0.4, "points": 1 },
    { "type": "thread", "metres": 18, "acrossMetres": 1.1, "points": 1 },
    { "type": "thread", "metres": 24, "acrossMetres": 0.6, "points": 1 },
    { "type": "hole", "metres": 26, "acrossMetres": 1.2, "points": 2 },
    { "type": "buildup", "metres": 38, "acrossMetres": 0.3, "points": 1 },
    { "type": "thread", "metres": 45, "acrossMetres": 0.8, "points": 1 },
    { "type": "loop", "metres": 49, "acrossMetres": 1.3, "points": 1 },
    { "type": "thread", "metres": 61, "acrossMetres": 0.3, "points": 1 },
    { "type": "hole", "metres": 62, "acrossMetres": 1.1, "points": 2 },
    { "type": "buildup", "metres": 64, "acrossMetres": 0.6, "points": 1 },
    { "type": "thread", "metres": 65, "acrossMetres": 1.3, "points": 1 },
    { "type": "distortion", "metres": 66, "acrossMetres": 0.9, "points": 2 },
    { "type": "hole", "metres": 68, "acrossMetres": 0.2, "points": 2 },
    { "type": "thread", "metres": 71, "acrossMetres": 0.5, "points": 1 },
    { "type": "distortion", "metres": 73, "acrossMetres": 1.2, "points": 2 },
    { "type": "loop", "metres": 76, "acrossMetres": 0.8, "points": 1 },
    { "type": "line", "metres": 79, "acrossMetres": 0.7, "points": 4 },
    { "type": "hole", "metres": 84, "acrossMetres": 0.4, "points": 2 },
    { "type": "thread", "metres": 90, "acrossMetres": 1.1, "points": 1 },
    { "type": "distortion", "metres": 96, "acrossMetres": 0.6, "points": 2 }
  ],
  "forecasts": [
    {
      "label": "Range below the limit",
      "low": 20,
      "high": 30,
      "meaning": "The range stays below the buyer's limit. Continue inspection and confirm the final grade."
    },
    {
      "label": "Range crosses the limit",
      "low": 30,
      "high": 50,
      "meaning": "The range includes results on both sides of the buyer's limit. Review the fabric before deciding the grade."
    }
  ],
  "provenance": "Invented teaching example, not a customer inspection or a model prediction. Points are assigned to individual defects for this example, not fixed weights for defect categories. Photos illustrate defect types and are not images of these invented events."
}
