{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/interfibra-it/json-schema/interfibra-it-esito-schema.json",
  "title": "Esito",
  "x-generated": "2026-11-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/interfibra-it-openapi.json#/components/schemas/Esito",
  "type": "object",
  "properties": {
    "stato": {
      "type": "string",
      "enum": [
        "verificata",
        "non_determinata"
      ]
    },
    "indirizzo": {
      "type": "object",
      "description": "L'indirizzo come l'ha riconosciuto la banca dati di copertura.",
      "properties": {
        "comune": {
          "type": "string"
        },
        "particella": {
          "type": "string",
          "description": "Toponimo, es. \"VIALE\"."
        },
        "strada": {
          "type": "string"
        },
        "civico": {
          "type": "string"
        }
      }
    },
    "indirizzoRiconosciuto": {
      "type": "string"
    },
    "interpretazione": {
      "type": "object",
      "description": "Solo se la via scritta non è quella trovata (es. il nome senza una parola): la verifica è su `inteso`. Dillo al cliente («ho verificato» e la via con il civico) e, se non è la sua via, usa le alternative.",
      "properties": {
        "scritto": {
          "type": "string",
          "description": "La via come è arrivata nella domanda."
        },
        "inteso": {
          "type": "string",
          "description": "La via verificata, es. \"VIALE GIUSEPPE FERRO\"."
        }
      },
      "required": [
        "scritto",
        "inteso"
      ]
    },
    "alternative": {
      "type": "array",
      "description": "Con interpretazione: le altre vie possibili, ognuna con la stessa domanda già pronta.",
      "items": {
        "type": "object",
        "properties": {
          "testo": {
            "type": "string"
          },
          "paginaVerifica": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    },
    "attivabile": {
      "type": "boolean"
    },
    "tecnologia": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "FTTH",
        "FTTC",
        "FWA",
        null
      ]
    },
    "velocitaMassimaMbps": {
      "type": [
        "number",
        "null"
      ]
    },
    "dettaglio": {
      "type": "object",
      "description": "Copertura per rete: fibra FTTH, FTTC, radio Interfibra (fwa) e radio dei partner (fwaWholesale).",
      "properties": {
        "ftth": {
          "$ref": "#/$defs/Rete"
        },
        "fttc": {
          "$ref": "#/$defs/Rete"
        },
        "fwa": {
          "$ref": "#/$defs/Rete"
        },
        "fwaWholesale": {
          "$ref": "#/$defs/Rete"
        }
      }
    },
    "cliente": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "privato",
        "azienda",
        null
      ]
    },
    "offertaConsigliata": {
      "oneOf": [
        {
          "$ref": "#/$defs/OffertaQui"
        },
        {
          "type": "null"
        }
      ]
    },
    "offertaConsigliataAzienda": {
      "oneOf": [
        {
          "$ref": "#/$defs/OffertaQui"
        },
        {
          "type": "null"
        }
      ]
    },
    "offerteAttivabili": {
      "type": "array",
      "description": "Prima le consigliate, poi le altre; per ultime le FWA dove arriva anche la fibra (alternativaRadio).",
      "items": {
        "$ref": "#/$defs/OffertaQui"
      }
    },
    "buonoOpenFiber": {
      "$ref": "#/$defs/BuonoOpenFiber"
    },
    "prossimoPasso": {
      "type": "string"
    },
    "comeSiConclude": {
      "type": "string"
    },
    "cosaServeAlCliente": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "motivo": {
      "type": "string"
    },
    "campo": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "comune",
        "via",
        "civico",
        null
      ]
    },
    "suggerimenti": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "testo": {
            "type": "string"
          },
          "paginaVerifica": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    },
    "cosaFare": {
      "type": "string"
    },
    "paginaVerifica": {
      "type": "string",
      "format": "uri"
    },
    "telefonoCommerciale": {
      "type": "string"
    },
    "chiTiAssiste": {
      "$ref": "#/$defs/ChiTiAssiste"
    },
    "listaDAttesa": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "stato"
  ],
  "$defs": {
    "BuonoOpenFiber": {
      "type": "object",
      "description": "Presente solo dove vale: comune nell'elenco dell'iniziativa, fibra FTTH di Open Fiber a questo civico, cliente privato o non indicato. Interfibra aderisce all'iniziativa di Open Fiber «La Fibra che ti premia»; il buono lo eroga Open Fiber, alle sue condizioni.",
      "properties": {
        "iniziativa": {
          "type": "string"
        },
        "promotore": {
          "type": "string",
          "enum": [
            "Open Fiber"
          ]
        },
        "importoEur": {
          "type": "number"
        },
        "attivazioniEntro": {
          "type": "string",
          "format": "date",
          "description": "Attivazione richiesta e ottenuta entro questo giorno."
        },
        "richiestaEntro": {
          "type": "string",
          "format": "date",
          "description": "Il buono si richiede a Open Fiber entro questo giorno."
        },
        "descrizione": {
          "type": "string"
        },
        "condizioni": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "link": {
          "type": "string",
          "format": "uri",
          "description": "Pagina di Open Fiber con la verifica dell'indirizzo e le condizioni."
        },
        "richiesta": {
          "type": "string",
          "format": "uri",
          "description": "Pagina di Open Fiber dove si richiede il buono dopo l'installazione."
        },
        "regolamento": {
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "iniziativa",
        "importoEur",
        "attivazioniEntro",
        "condizioni",
        "link"
      ]
    },
    "ChiTiAssiste": {
      "type": "object",
      "description": "Chi risponde al cliente dopo l'attivazione: il team di Campobasso, senza call center esterni.",
      "properties": {
        "sintesi": {
          "type": "string"
        },
        "sede": {
          "type": "string"
        },
        "callCenterEsterno": {
          "type": "boolean"
        },
        "assistenzaTecnica": {
          "type": "object",
          "description": "Il numero da chiamare, anche per un guasto, e quando risponde. È lo stesso numero del commerciale.",
          "properties": {
            "telefono": {
              "type": "string"
            },
            "quando": {
              "type": "string"
            }
          }
        },
        "pagina": {
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "sintesi",
        "sede",
        "callCenterEsterno"
      ]
    },
    "Offerta": {
      "type": "object",
      "properties": {
        "slug": {
          "type": "string"
        },
        "nome": {
          "type": "string"
        },
        "tecnologia": {
          "type": "string",
          "enum": [
            "FTTH",
            "FTTC",
            "FWA"
          ]
        },
        "pubblico": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "perChi": {
          "type": "string",
          "enum": [
            "privato",
            "azienda"
          ]
        },
        "prezzo": {
          "type": "string",
          "description": "Il prezzo come va detto al cliente, con la condizione dello sconto."
        },
        "prezzoBloccato": {
          "type": "boolean",
          "description": "true su ogni offerta in vendita: il canone non aumenta finché il cliente resta. Riguarda il canone, non le opzioniNonBloccate."
        },
        "prezzoBloccatoNota": {
          "type": "string",
          "description": "Il blocco del canone in una frase, con il costo di disattivazione, le eventuali rate residue e le opzioni che il blocco non copre."
        },
        "opzioniNonBloccate": {
          "type": "array",
          "description": "Opzioni attive dall'ordine, incluse per i primi mesi e poi a pagamento (disattivabili): non rientrano nel prezzo bloccato. Importi + IVA dove ivaInclusa è false.",
          "items": {
            "type": "object",
            "properties": {
              "nome": {
                "type": "string"
              },
              "mesiInclusi": {
                "type": "integer"
              },
              "poiMensileEur": {
                "type": "number"
              },
              "nota": {
                "type": "string",
                "description": "Inclusa per i primi mesi; se al termine il cliente decide di tenerla diventa a pagamento, altrimenti si disattiva quando vuole, senza costi."
              }
            },
            "required": [
              "nome",
              "mesiInclusi",
              "poiMensileEur",
              "nota"
            ]
          }
        },
        "canoneMensileEur": {
          "type": "number"
        },
        "canoneConAddebitoDirettoEur": {
          "type": "number"
        },
        "ivaInclusa": {
          "type": "boolean"
        },
        "downloadMbps": {
          "type": "number"
        },
        "uploadMbps": {
          "type": "number"
        },
        "contributoAllaccioEur": {
          "type": "number"
        },
        "installazioneInclusa": {
          "type": "boolean",
          "description": "Il primo allaccio comprende l'installazione."
        },
        "primoAllaccio": {
          "type": [
            "string",
            "null"
          ],
          "description": "Il primo allaccio in una frase, es. \"Primo allaccio 59 € una tantum, installazione inclusa\" (+ IVA sulle offerte per aziende)."
        },
        "costoDisattivazioneEur": {
          "type": "number"
        },
        "costiDiUscita": {
          "type": "object",
          "description": "Quanto costa uscire: preavviso (CGC art. 3.2), costo di disattivazione della scheda di trasparenza, rate residue del contributo di attivazione e del router, apparati da restituire. `sintesi` è la frase da dire.",
          "properties": {
            "sintesi": {
              "type": "string"
            },
            "preavvisoRecessoGiorni": {
              "type": "integer"
            },
            "costoDisattivazioneEur": {
              "type": [
                "number",
                "null"
              ]
            },
            "ivaInclusa": {
              "type": "boolean"
            },
            "rateResidueDovute": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "voce": {
                    "type": "string"
                  },
                  "totaleEur": {
                    "type": "number"
                  },
                  "rate": {
                    "type": "integer"
                  },
                  "rataEur": {
                    "type": "number"
                  },
                  "compensataDaSconto": {
                    "type": "boolean"
                  },
                  "ivaInclusa": {
                    "type": "boolean"
                  }
                }
              }
            },
            "apparatiDaRestituire": {
              "type": [
                "string",
                "null"
              ]
            },
            "fonte": {
              "type": "string"
            }
          },
          "required": [
            "sintesi",
            "preavvisoRecessoGiorni"
          ]
        },
        "contributoAttivazione": {
          "type": [
            "object",
            "null"
          ],
          "description": "Contributo di attivazione: totale, rate e come si paga (incluso dove le rate sono compensate in fattura finché si resta clienti).",
          "properties": {
            "totaleEur": {
              "type": "number"
            },
            "rate": {
              "type": "integer"
            },
            "rataEur": {
              "type": "number"
            },
            "ivaInclusa": {
              "type": "boolean"
            },
            "compensatoDaSconto": {
              "type": "boolean"
            },
            "descrizione": {
              "type": "string"
            }
          }
        },
        "tempiAttivazione": {
          "type": "string"
        },
        "fatturazione": {
          "type": "string",
          "description": "bimestrale anticipata"
        },
        "metodiDiPagamento": {
          "type": "string"
        },
        "chiamate": {
          "type": "string",
          "description": "Chiamate illimitate con scatto alla risposta, e l'opzione senza scatto con il suo canone."
        },
        "modemRichiestoPerLoSconto": {
          "type": "object",
          "description": "Solo dove il canone scontato richiede il modem Interfibra (Power MAX 10): il modem si paga a parte, per questo importo e questi mesi. Va detto al cliente insieme al prezzo: totaleMensileConModemEur è quanto si paga al mese con il modem.",
          "properties": {
            "nome": {
              "type": "string"
            },
            "mensileEur": {
              "type": "number"
            },
            "mesi": {
              "type": "integer"
            },
            "totaleMensileConModemEur": {
              "type": "number"
            },
            "canoneSenzaModemEur": {
              "type": "number"
            },
            "costoNettoModemEur": {
              "type": "number"
            }
          },
          "required": [
            "nome",
            "mensileEur"
          ]
        },
        "router": {
          "$ref": "#/$defs/Router"
        },
        "schedaTrasparenza": {
          "type": "string",
          "format": "uri",
          "description": "Scheda di trasparenza tariffaria (AGCom) dell'offerta, in PDF. In caso di differenza fa fede la scheda."
        },
        "sottoscrivibile": {
          "type": "boolean"
        },
        "soloGiaClienti": {
          "type": "boolean"
        },
        "paginaOfferta": {
          "type": "string",
          "format": "uri"
        },
        "linkAttivazione": {
          "type": "string",
          "format": "uri"
        },
        "notaBuonoOpenFiber": {
          "type": "string",
          "description": "Solo sulle offerte FTTH per privati del listino, finché dura l'iniziativa di Open Fiber «La Fibra che ti premia» (Interfibra aderisce): il buono in una frase. Nell'esito della verifica non c'è: lì decide il civico (buonoOpenFiber)."
        },
        "chiTiAssiste": {
          "$ref": "#/$defs/ChiTiAssiste"
        }
      },
      "required": [
        "slug",
        "nome",
        "tecnologia",
        "perChi",
        "prezzo",
        "canoneMensileEur"
      ]
    },
    "OffertaQui": {
      "allOf": [
        {
          "$ref": "#/$defs/Offerta"
        },
        {
          "type": "object",
          "properties": {
            "tecnologiaQui": {
              "type": "string",
              "enum": [
                "FTTH",
                "FTTC",
                "FWA"
              ]
            },
            "velocitaQuiMbps": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "down": {
                  "type": "number"
                },
                "up": {
                  "type": "number"
                }
              }
            },
            "alternativaRadio": {
              "type": "boolean",
              "description": "Offerta FWA proposta dove arriva anche la fibra: va presentata per ultima, dopo quelle in fibra."
            }
          }
        }
      ]
    },
    "Rete": {
      "type": "object",
      "properties": {
        "covered": {
          "type": "boolean"
        },
        "maxSpeed": {
          "type": [
            "number",
            "null"
          ],
          "description": "Mbps in download."
        }
      },
      "required": [
        "covered"
      ]
    },
    "Router": {
      "type": "object",
      "description": "Il router dell'offerta. Nel listino vale per la tecnologia di listino, con gli apparati delle altre tecnologie in altreTecnologie; in OffertaQui vale per la tecnologia che arriva all'indirizzo (sulla FTTC l'apparato è un modem VDSL2). Modello e specifiche dal produttore, rata dal profilo del gestionale.",
      "properties": {
        "sintesi": {
          "type": "string",
          "description": "Una riga: se è compreso nel canone o si paga a parte, e quale apparato."
        },
        "modello": {
          "type": "string"
        },
        "wifi": {
          "type": [
            "string",
            "null"
          ],
          "description": "Generazione Wi-Fi, es. \"Wi-Fi 7\"; null dove non è verificata."
        },
        "caratteristiche": {
          "type": [
            "string",
            "null"
          ],
          "description": "Specifiche dichiarate dal produttore, in una riga."
        },
        "tecnologia": {
          "type": "string",
          "enum": [
            "FTTH",
            "FTTC",
            "FWA"
          ]
        },
        "inclusoNelCanone": {
          "type": "boolean",
          "description": "La rata è compensata in fattura da uno sconto di pari importo."
        },
        "aPagamentoAParte": {
          "type": "boolean",
          "description": "La rata si aggiunge al canone se il cliente sceglie il router. È il contrario di inclusoNelCanone e non indica un obbligo."
        },
        "richiestoPerLoSconto": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "true: senza questo router lo sconto sul canone non si applica (Power MAX 10). null: la regola del profilo lega lo sconto sul contributo di attivazione al router e il sito no; fa fede la scheda di trasparenza."
        },
        "noleggio": {
          "type": "boolean",
          "description": "A noleggio: resta di Interfibra e non ha rate."
        },
        "rataMensileEur": {
          "type": "number"
        },
        "rate": {
          "type": "integer",
          "description": "Numero di rate; assente sul noleggio."
        },
        "valoreEur": {
          "type": "number",
          "description": "rataMensileEur × rate."
        },
        "ivaInclusa": {
          "type": "boolean"
        },
        "diProprietaDelCliente": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "true dove il profilo dell'offerta lo dichiara, false sul noleggio, null dove nessuna fonte lo dice."
        },
        "daRestituireAllaCessazione": {
          "type": "boolean",
          "description": "In caso di recesso il router va restituito."
        },
        "condizione": {
          "type": "string",
          "description": "Come si paga, in una frase."
        },
        "inCasoDiRecesso": {
          "type": "string"
        },
        "modemOutdoor": {
          "type": "string",
          "description": "Solo FWA: il modem esterno con l'antenna, in comodato d'uso gratuito."
        },
        "paginaProdotto": {
          "type": "string",
          "format": "uri"
        },
        "altreTecnologie": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "tecnologia": {
                "type": "string",
                "enum": [
                  "FTTH",
                  "FTTC",
                  "FWA"
                ]
              },
              "sintesi": {
                "type": "string"
              },
              "modello": {
                "type": "string"
              },
              "wifi": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "tecnologia",
              "sintesi",
              "modello"
            ]
          }
        }
      },
      "required": [
        "sintesi",
        "modello",
        "tecnologia",
        "inclusoNelCanone",
        "aPagamentoAParte",
        "richiestoPerLoSconto",
        "rataMensileEur",
        "ivaInclusa",
        "diProprietaDelCliente",
        "daRestituireAllaCessazione",
        "condizione",
        "inCasoDiRecesso",
        "paginaProdotto"
      ]
    }
  }
}