{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://forensislab.com/schema/referto/1.4.json",
  "title": "Referto Forensis Lab",
  "description": "Il documento emesso dal laboratorio: il referto (L2, L3), firmato dal perito, o l'esito preliminare del controllo sulle fotografie (L1), che non è una perizia. L'impronta non sta nel documento: è lo SHA-256 del file JSON così come è stato emesso, byte per byte, e la pubblica la pagina di verifica del codice (e, quando sarà attivo, il registro).",
  "type": "object",
  "required": ["referto", "perito", "oggetto", "metodo", "esito"],
  "properties": {
    "referto": {
      "type": "object",
      "required": ["codice", "livello", "emesso"],
      "properties": {
        "codice": {
          "type": "string",
          "pattern": "^FL-(443-[0-9]{2}|DEMO)-L[123]-[0-9A-F]{4}$",
          "$comment": "Nei referti emessi il codice porta il numero d'albo del perito (443) e l'anno, in due cifre. Il prefisso FL-DEMO è riservato ai documenti dimostrativi: nessun referto emesso lo porta."
        },
        "livello": { "enum": ["L1", "L2", "L3"] },
        "emesso": { "type": "string", "format": "date" },
        "dimostrativo": {
          "const": true,
          "description": "Solo nei documenti dimostrativi (prefisso FL-DEMO), che hanno dati simulati."
        }
      }
    },
    "perito": {
      "type": "object",
      "required": ["nome", "albo", "tribunale"],
      "properties": {
        "nome": { "type": "string" },
        "albo": { "type": "integer" },
        "tribunale": { "type": "string" }
      }
    },
    "oggetto": {
      "type": "object",
      "required": ["marchio", "referenza", "canale"],
      "properties": {
        "marchio": { "type": "string" },
        "referenza": { "type": "string" },
        "canale": {
          "enum": [
            "boutique", "profumeria", "marketplace", "social", "fiera",
            "privato"
          ]
        },
        "lotto": { "type": "string", "pattern": "^[A-Z0-9]{4,8}$" }
      }
    },
    "metodo": {
      "type": "array",
      "description": "Le bozze di protocollo applicate (FL-P/nn): identificano la bozza di lavoro, non un testo in vigore; il numero di versione (FL-P/nn vN.N) si aggiunge con il deposito formale. Il metodo applicato al caso è descritto nel referto; nei contesti giudiziari la perizia è accompagnata dalla scheda tecnica con il metodo, i confronti eseguiti, gli strumenti utilizzati e l'identificazione dei campioni (Codice Etico 3.2 c).",
      "items": {
        "type": "string",
        "pattern": "^FL-P/[0-9]{2}( v[0-9]+\\.[0-9]+)?$"
      },
      "minItems": 1
    },
    "esito": {
      "type": "object",
      "description": "Le conclusioni del perito sul campione esaminato, al livello indicato in referto.livello e nei limiti dichiarati. Nel referto (L2, L3) la perizia accerta la conformità o la non conformità ai campioni di riferimento (conclusione); il controllo sulle fotografie (L1) dà solo un esito preliminare (esito_preliminare), che non è una conclusione di conformità e non ha valore di perizia. L'attribuzione di responsabilità spetta all'autorità competente e il valore del referto lo valuta il giudice.",
      "required": ["grado_di_certezza", "limiti", "elementi"],
      "properties": {
        "conclusione": {
          "enum": ["conforme", "non_conforme", "non_concludente"],
          "description": "Solo nel referto (L2, L3). conforme: nessuna difformità rispetto ai campioni di riferimento, per quanto esaminato. non_conforme: difformità documentate rispetto ai campioni di riferimento. non_concludente: gli elementi non bastano ad accertare né la conformità né la non conformità; il referto indica quale livello di analisi servirebbe."
        },
        "esito_preliminare": {
          "enum": ["nessuna_anomalia_visibile", "con_anomalie_visibili"],
          "description": "Solo nel controllo sulle fotografie (L1): che cosa mostrano le fotografie esaminate. Non è una conclusione di conformità e non ha valore di perizia; per un accertamento sul prodotto serve la verifica in laboratorio (L2)."
        },
        "grado_di_certezza": {
          "type": "string",
          "description": "Il grado di certezza raggiunto, dichiarato dal perito a parole. Non è un punteggio né una percentuale."
        },
        "limiti": {
          "type": "string",
          "description": "Che cosa l'analisi non ha potuto verificare, e perché."
        },
        "elementi": {
          "type": "array",
          "description": "Fatti osservati e risultati delle analisi su cui si fonda l'esito, ciascuno con il protocollo che lo ha prodotto.",
          "items": {
            "type": "object",
            "required": ["titolo", "gravita", "protocollo"],
            "properties": {
              "titolo": { "type": "string" },
              "gravita": { "enum": ["alta", "media", "bassa"] },
              "protocollo": { "type": "string" }
            }
          }
        }
      }
    }
  },
  "allOf": [
    {
      "$comment": "L1: solo l'esito preliminare, mai una conclusione. L2 e L3: la conclusione, mai l'esito preliminare.",
      "if": {
        "required": ["referto"],
        "properties": {
          "referto": {
            "required": ["livello"],
            "properties": {
              "livello": { "const": "L1" }
            }
          }
        }
      },
      "then": {
        "properties": {
          "esito": {
            "required": ["esito_preliminare"],
            "not": { "required": ["conclusione"] }
          }
        }
      },
      "else": {
        "properties": {
          "esito": {
            "required": ["conclusione"],
            "not": { "required": ["esito_preliminare"] }
          }
        }
      }
    }
  ]
}
