openapi: 3.0.1 info: title: Caitel_Accatastamento description: CAITEL - Api pubblicate per accatastamento impianto contact: name: Supporto Accatastamento Caitel url: https://servizi.regione.liguria.it/page/welcome/CAITEL email: caitel-api-assistenza@liguriadigitale.it version: 1.0.6 x-summary: API per l'accatastamento semplificato di impianti termici nel sistema regionale CAITEL (Liguria) servers: - url: https://services-caitel.regione.liguria.it/api/accatastamento description: Url Server di PRODUZIONE specifico per accatastamento x-sandbox: false - url: https://services-caitel-test.regione.liguria.it/api/accatastamento description: Url Server di TEST specifico per accatastamento x-sandbox: false security: - BearerAuth: [] tags: - name: nuovo-impianto-controller description: Operazioni relative al nuovo impianto - name: tipologiche-controller description: Operazioni relative alle tipologiche - name: sistema-controller description: Operazioni di sistema - name: proprieta-controller description: Operazioni relative alle proprieta' paths: /nuovo-impianto/verifica-dati: post: tags: - nuovo-impianto-controller summary: Verifica dati description: Verifica dati per accatastamento semplificato nuovo impianto operationId: verificaDatiPerNuovoImpianto parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" requestBody: content: application/json: schema: $ref: "#/components/schemas/AccatastamentoRichiesta" required: true responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/EsitoVerificaDatiAccatastamentoResponse" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /nuovo-impianto/inserisci: post: tags: - nuovo-impianto-controller summary: Insert nuovo impianto description: Accatastamento semplificato nuovo impianto operationId: accatastaPerNuovoImpianto parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" requestBody: content: application/json: schema: $ref: "#/components/schemas/AccatastamentoRichiesta" required: true responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/AccatastamentoRisposta" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/tipi-responsabilita: get: tags: - tipologiche-controller summary: Get lista tipi responsabilità description: "Retrieve la lista dei tipi di responsabilità. Lista fissa: 1=Proprietario, 2=Occupante, 3=Amministratore condominio, 4=Terzo responsabile." operationId: recuperoDatiTipiResponsabilita parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" examples: tipi-responsabilita: description: tipi-responsabilita value: lista: - identificativo: "1" valore: Proprietario - identificativo: "2" valore: Occupante - identificativo: "3" valore: Amministratore condominio - identificativo: "4" valore: Terzo responsabile numeroElementiLista: 4 responseStatus: 200 OK "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/tipi-macchina-termica: get: tags: - tipologiche-controller summary: Get lista tipi macchina termica description: Retrieve la lista dei tipi di macchina termica operationId: recuperoDatiTipiMacchinaTermica parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/tipi-intervento: get: tags: - tipologiche-controller summary: Get tipi intervento description: Retrieve i diversi tipi di intervento operationId: recuperoDatiTipiIntervento parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/tipi-generatori-per-nuovo-impianto: get: tags: - tipologiche-controller summary: Get lista tipi generatori per nuovo impianto description: Retrieve la lista dei tipi di generatori adatti per un nuovo impianto operationId: recuperoDatiTipiGeneratoriPerNuovoImpianto parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/tipi-generatore-rendimento: get: tags: - tipologiche-controller summary: Get lista tipi generatore rendimento description: Retrieve la lista dei tipi di generatore rendimento operationId: recuperoDatiTipiGeneratoreRendimento parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/tipi-fluido-vettore: get: tags: - tipologiche-controller summary: Get lista tipi fluido vettore description: Retrieve la lista dei tipi di fluido vettore operationId: recuperoDatiTipiFluidoVettore parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/tipi-colore-civico: get: tags: - tipologiche-controller summary: Get lista tipi colore civico description: "Retrieve la lista dei tipi di colore del civico. Lista fissa: R = Rosso, N = Nero." operationId: recuperoDatiTipiColoreCivico parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" examples: tipi-colore-civico: description: tipi-colore-civico value: lista: - identificativo: R valore: Rosso - identificativo: N valore: Nero numeroElementiLista: 2 responseStatus: 200 OK "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/province: get: tags: - tipologiche-controller summary: Get lista province description: Retrieve la lista di tutte le province operationId: recuperoListaProvince parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/province-liguria: get: tags: - tipologiche-controller summary: Get lista province Liguria description: Retrieve la lista delle quattro province della Liguria (GE, IM, SP, SV). Lista fissa. operationId: recuperoListaProvinceLiguria parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" examples: province-liguria: description: province-liguria value: lista: - identificativo: "010" valore: GENOVA - identificativo: "008" valore: IMPERIA - identificativo: "011" valore: LA SPEZIA - identificativo: "009" valore: SAVONA numeroElementiLista: 4 responseStatus: 200 OK "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/is-macchine-a-biomassa: get: tags: - tipologiche-controller summary: Get lista is macchine a biomassa description: Retrieve la lista dei valori che indicano se una macchina è a biomassa operationId: recuperoDatiIsMacchineABiomassa parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValori" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/indirizzi-provincia-comune-nuovo-o-modifica-impianto/{identificativo-provincia}/{identificativo-comune}/{parte}: get: tags: - tipologiche-controller summary: Get lista indirizzi per provincia, comune e parte dell'indirizzo (nuovo o modifica impianto) description: Retrieve la lista degli indirizzi appartenenti a una specifica provincia e comune e che contengono la parte specificata nel nome (per nuovo o modifica impianto) operationId: recuperoDatiIndirizziProvinciaComuneNuovoModificaImpianto parameters: - name: identificativo-provincia in: path description: Identificativo ISTAT della provincia required: true schema: type: string example: "010" - name: identificativo-comune in: path description: Identificativo ISTAT del comune required: true schema: type: string example: "025" - name: parte in: path required: true schema: type: string - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValoriWithRequest" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /tipologiche/comuni-provincia/{identificativo-provincia}: get: tags: - tipologiche-controller summary: Get lista comuni per provincia description: Retrieve la lista dei comuni appartenenti a una specifica provincia operationId: recuperoListaComuniPerProvincia parameters: - name: identificativo-provincia in: path description: Identificativo ISTAT della provincia required: true schema: type: string example: "010" - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/ListaValoriWithRequest" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /status: get: tags: - sistema-controller summary: Api di verifica risposta sistema description: Fornisce informazioni sullo stato del sistema operationId: informazioniSistema parameters: - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/BooleanProblemAndJson" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" /proprieta/accatastamento/{sezione}: get: tags: - proprieta-controller summary: Get proprieta campi della sezione description: Retrieve tutti i campi e le loro proprieta tramite identificativo della sezione contenitore operationId: recuperoDatiProprietaAccatastamento parameters: - name: sezione in: path required: true schema: pattern: nuovoImpianto|nuovoImpiantoGeneratore|nuovoImpiantoForniture|nuovoImpiantoResponsabile type: string - $ref: "#/components/parameters/CodiceFiscaleOperatore" responses: "200": description: Ok content: application/json: schema: $ref: "#/components/schemas/MapRespStringProprietaResp" "400": description: Dati sintatticamente errati content: application/problem+json: schema: $ref: "#/components/schemas/BadRequestCaitelResponse" "403": description: Richiesta non autorizzata content: application/problem+json: schema: $ref: "#/components/schemas/ForbiddenCaitelResponse" "404": description: Non trovati content: application/problem+json: schema: $ref: "#/components/schemas/NotFoundCaitelResponse" "500": description: Internal server error content: application/problem+json: schema: $ref: "#/components/schemas/InternalServerErrorCaitelResponse" components: schemas: AccatastamentoRichiesta: required: - forniture - generatori - impianto - responsabile type: object properties: impianto: $ref: "#/components/schemas/ImpiantoDaAccatastare" forniture: $ref: "#/components/schemas/ForniturePodPdr" responsabile: $ref: "#/components/schemas/ResponsabileImpianto" generatori: type: array description: Lista generatori; ogni generatore puo' avere piu' macchine. Deve essere presente almeno un generatore. items: $ref: "#/components/schemas/GruppoGeneratore" description: "Corpo della richiesta per la creazione di un nuovo impianto (accatastamento semplificato). Per i dati di generatori/macchine valorizzare \"generatori\": ogni elemento e' un gruppo omogeneo che puo' avere una o piu' macchine (vedi \"macchine\"); un impianto con un solo generatore e una sola macchina si rappresenta con una lista di un elemento." ForniturePodPdr: required: - pod type: object properties: pod: maxLength: 15 minLength: 14 pattern: ^[iI][tT][0-9]{3}[eE][0-9]{8,9}$ type: string description: POD - Point Of Delivery, identifica il punto di prelievo dell'energia elettrica example: IT001E12345678 pdr: maxLength: 14 minLength: 14 pattern: ^\d{14}$ type: string description: PDR - Punto Di Raccolta, identifica in modo univoco l'utenza del gas example: "00112233445566" description: Dati delle forniture (energia elettrica / gas) associate all'impianto GruppoGeneratore: required: - identificativoTipoFluidoVettore - identificativoTipoGeneratore type: object properties: identificativoTipoGeneratore: type: string description: "Identificativo del tipo di generatore. Valori: 1=Generatori alimentati a combustibile liquido o solido, 2=Generatori alimentati a gas, metano o Gpl, 3=Macchine frigorifere e/o pompe di calore a compressione di vapore ad azionamento elettrico e macchine frigorifere e/o pompe di calore ad assorbimento a fiamma diretta, 4=Pompe di calore a compressione di vapore azionate da energia termica, 5=Pompe di calore ad assorbimento alimentate da energia termica, 6=Impianti alimentati da teleriscaldamento - sottostazione di scambio termico da rete ad utenza, 7=Impianti cogenerativi" example: "1" enum: - "1" - "2" - "3" - "4" - "5" - "6" - "7" identificativoTipoFluidoVettore: type: string description: "Identificativo del tipo di fluido vettore. Valori: 1=Acqua, 2=Aria, 3=Altro" example: "2" enum: - "1" - "2" - "3" altroFluidoVettore: type: string description: Altro fluido vettore (se presente) example: Glicole macchine: type: array description: Lista delle macchine del gruppo generatore items: $ref: "#/components/schemas/MacchinaGeneratore" description: | Gruppo omogeneo di generatori. Contiene solo i dati del gruppo: i dati tecnici delle singole macchine vanno nella lista "macchine" (vedi MacchinaGeneratore) — la tabella delle regole per tipologia sotto si applica ai campi di ciascun elemento di "macchine", non ai campi diretti del generatore. **Campi booleani frigo** — isAdAssorbimentoRecuperoCaloreFrigo, isAdAssorbimentoFiammaFrigo e isACicloDiCompressione (su MacchinaGeneratore) sono mutuamente esclusivi: al piu' uno puo' essere true. Per le tipologie 3, 4 e 5 (frigoriferi) almeno uno deve essere true. **Regole per tipologia** (identificativoTipoGeneratore): | Tipologia | Campi obbligatori (oltre ai required di schema) | Campi non applicabili (ignorati/disabilitati) | |-----------|--------------------------------------------------|-----------------------------------------------| | 1 — Caldaia/moduli con biomassa | identificativoTipoMacchinaTermica, identificativoTipoGeneratorediCalore, numeroModuli, identificativoIsMacchinaaBiomassa | numeroCircuiti, i tre booleani frigo | | 2 — Caldaia/moduli senza biomassa | identificativoTipoMacchinaTermica, identificativoTipoGeneratorediCalore, numeroModuli | numeroCircuiti, identificativoIsMacchinaaBiomassa, i tre booleani frigo | | 3 — Frigo ad assorbimento recupero calore | numeroCircuiti, almeno un booleano frigo | identificativoTipoMacchinaTermica, identificativoTipoGeneratorediCalore, numeroModuli, identificativoIsMacchinaaBiomassa | | 4 — Frigo ad assorbimento fiamma | numeroCircuiti, almeno un booleano frigo | identificativoTipoMacchinaTermica, identificativoTipoGeneratorediCalore, numeroModuli, identificativoIsMacchinaaBiomassa | | 5 — Frigo a ciclo di compressione | numeroCircuiti, almeno un booleano frigo | identificativoTipoMacchinaTermica, identificativoTipoGeneratorediCalore, numeroModuli, identificativoIsMacchinaaBiomassa | | 6 — Altro | nessuno aggiuntivo | identificativoTipoMacchinaTermica, identificativoTipoGeneratorediCalore, numeroModuli, numeroCircuiti, identificativoIsMacchinaaBiomassa, i tre booleani frigo | | 7 — Altro | nessuno aggiuntivo | identificativoTipoMacchinaTermica, identificativoTipoGeneratorediCalore, numeroModuli, numeroCircuiti, identificativoIsMacchinaaBiomassa, i tre booleani frigo | x-form-rules: campiCondizionaliPerTipologia: "1": obbligatori: - identificativoTipoMacchinaTermica - identificativoTipoGeneratorediCalore - numeroModuli - identificativoIsMacchinaaBiomassa nonApplicabili: - numeroCircuiti - isAdAssorbimentoRecuperoCaloreFrigo - isAdAssorbimentoFiammaFrigo - isACicloDiCompressione "2": obbligatori: - identificativoTipoMacchinaTermica - identificativoTipoGeneratorediCalore - numeroModuli nonApplicabili: - numeroCircuiti - identificativoIsMacchinaaBiomassa - isAdAssorbimentoRecuperoCaloreFrigo - isAdAssorbimentoFiammaFrigo - isACicloDiCompressione "3": obbligatori: - numeroCircuiti nonApplicabili: - identificativoTipoMacchinaTermica - identificativoTipoGeneratorediCalore - numeroModuli - identificativoIsMacchinaaBiomassa "4": obbligatori: - numeroCircuiti nonApplicabili: - identificativoTipoMacchinaTermica - identificativoTipoGeneratorediCalore - numeroModuli - identificativoIsMacchinaaBiomassa "5": obbligatori: - numeroCircuiti nonApplicabili: - identificativoTipoMacchinaTermica - identificativoTipoGeneratorediCalore - numeroModuli - identificativoIsMacchinaaBiomassa "6": obbligatori: [] nonApplicabili: - identificativoTipoMacchinaTermica - identificativoTipoGeneratorediCalore - numeroModuli - numeroCircuiti - identificativoIsMacchinaaBiomassa - isAdAssorbimentoRecuperoCaloreFrigo - isAdAssorbimentoFiammaFrigo - isACicloDiCompressione "7": obbligatori: [] nonApplicabili: - identificativoTipoMacchinaTermica - identificativoTipoGeneratorediCalore - numeroModuli - numeroCircuiti - identificativoIsMacchinaaBiomassa - isAdAssorbimentoRecuperoCaloreFrigo - isAdAssorbimentoFiammaFrigo - isACicloDiCompressione ImpiantoDaAccatastare: required: - civico - dataIntervento - identificativoColoreCivico - identificativoComune - identificativoIndirizzo - identificativoProvincia - identificativoTipoIntervento type: object properties: identificativoTipoIntervento: type: string description: "Identificativo del tipo di intervento. Valori: 1=Nuova installazione, 2=Ristrutturazione, 3=Sostituzione del generatore, 4=Compilazione libretto impianto esistente" example: "2" enum: - "1" - "2" - "3" - "4" dataIntervento: pattern: ^\d{4}-\d{2}-\d{2}$ type: string description: Data dell'intervento nel formato AAAA-MM-GG example: 2025-04-30 identificativoProvincia: type: string description: "Identificativo della provincia (codice ISTAT) in cui e' ubicato l'impianto. Valori: 008=Imperia, 009=Savona, 010=Genova, 011=La Spezia" example: "010" enum: - "008" - "009" - "010" - "011" identificativoComune: type: string description: Identificativo del comune (codice ISTAT), chiamare il servizio associato example: "025" identificativoIndirizzo: type: string description: Identificativo dell'indirizzo (codice univoco), chiamare il servizio associato example: "12345" valoreIndirizzo: type: string description: Stringa associata all'identificativo dell'indirizzo (es. via, piazza) example: Via Roma civico: maxLength: 4 minLength: 1 pattern: ^\d{1,4}$ type: string description: Numero civico example: "10" identificativoColoreCivico: type: string description: "Identificativo del colore del civico. Valori: R = Rosso, N = Nero" example: N enum: - R - N letteraOpalazzo: maxLength: 20 minLength: 1 type: string description: Lettera o palazzo (se presente) example: A scala: maxLength: 20 type: string description: Scala (se presente) example: B interno: maxLength: 20 type: string description: Interno (se presente) example: "3" internoLettera: maxLength: 1 type: string description: Lettera dell'interno (se presente) example: C description: Dati identificativi e di ubicazione dell'impianto da accatastare MacchinaGeneratore: required: - dataInstallazione - matricola - modello - potenzaTermicaUtileNominalekW type: object properties: dataInstallazione: pattern: ^\d{4}-\d{2}-\d{2}$ type: string description: Data di installazione nel formato AAAA-MM-GG example: 2024-12-31 identificativoTipoMacchinaTermica: type: string description: "Identificativo del tipo di macchina termica. Valori: 1=Gruppo termico singolo, 2=Gruppo termico modulare, 3=Tubo / nastro radiante, 4=Generatore d'aria calda" example: "3" enum: - "1" - "2" - "3" - "4" identificativoTipoGeneratorediCalore: type: string description: "Identificativo del tipo di generatore di calore. Valori: 1=Standard, 2=A bassa temperatura, 3=A condensazione, 4=Generatore aria calda" example: "4" enum: - "1" - "2" - "3" - "4" isAdAssorbimentoRecuperoCaloreFrigo: type: boolean description: Indica se e' un sistema ad assorbimento con recupero calore (frigorifero) example: true isAdAssorbimentoFiammaFrigo: type: boolean description: Indica se e' un sistema ad assorbimento a fiamma (frigorifero) example: false isACicloDiCompressione: type: boolean description: Indica se e' un sistema a ciclo di compressione example: true potenzaTermicaUtileNominalekW: pattern: ^\d+([.,]\d+)?$ type: string description: Potenza termica utile nominale in kW example: "24.0" numeroModuli: type: string description: Numero di moduli (se applicabile) example: "1" numeroCircuiti: type: string description: Numero di circuiti (se applicabile) example: "2" identificativoIsMacchinaaBiomassa: type: string description: Identificativo che indica se la macchina e' a biomassa, chiamare il servizio associato example: SI enum: - SI - NO fabbricante: type: string description: Fabbricante della macchina example: Vaillant modello: type: string description: Modello della macchina example: ecoTEC plus VMW 266/5-5 matricola: type: string description: Numero di matricola della macchina example: "1234567890" description: >- Dati di una singola macchina all'interno di un gruppo generatore (vedi GruppoGeneratore.macchine): un gruppo puo' avere piu' macchine. **Regole per tipologia** — l'obbligatorieta'/applicabilita' di identificativoTipoMacchinaTermica, identificativoTipoGeneratorediCalore, numeroModuli, numeroCircuiti, identificativoIsMacchinaaBiomassa e dei tre campi booleani frigo dipende da identificativoTipoGeneratore del gruppo generatore a cui la macchina appartiene: stessa tabella di GruppoGeneratore (vedi x-form-rules li' definito). ResponsabileImpianto: required: - civico - email - identificativoComune - identificativoTipoResponsabilita - indirizzo - telefono type: object properties: identificativoTipoResponsabilita: type: string description: "Identificativo del tipo di responsabilita'. Valori: 1=Proprietario, 2=Occupante, 3=Amministratore condominio, 4=Terzo responsabile" example: "1" enum: - "1" - "2" - "3" - "4" cognome: type: string description: Cognome della persona fisica example: Rossi nome: type: string description: Nome della persona fisica example: Mario codiceFiscale: maxLength: 16 minLength: 11 pattern: ^([A-Za-z]{6}[0-9]{2}[A-Za-z][0-9]{2}[A-Za-z][0-9]{3}[A-Za-z]|[0-9]{11})$ type: string description: Codice fiscale della persona o dell'ente example: RSSMRA80A01F205X ragioneSociale: type: string description: Ragione sociale del responsabile (se ente) example: Azienda S.r.l. partitaIva: pattern: ^((IT)?\d{11})?$ type: string description: Partita IVA del responsabile (se applicabile) example: IT01234567890 identificativoProvincia: type: string description: Identificativo della provincia di residenza (codice ISTAT), chiamare il servizio associato example: "010" identificativoComune: type: string description: Identificativo del comune di residenza (codice ISTAT), chiamare il servizio associato example: "025" indirizzo: type: string description: Indirizzo di residenza (via, piazza, ecc.) example: Via Garibaldi civico: type: string description: Numero civico example: "12" email: pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ type: string description: Indirizzo email example: mario.rossi@example.com telefono: maxLength: 250 minLength: 8 pattern: ^(?=.*[0-9])[0-9._eE+\-\/\\ ;]{8,250}$ type: string description: Numero di telefono example: "0101234567" description: "Dati del responsabile dell'impianto. I campi devono essere valorizzati soddisfando una di queste tre combinazioni di obbligatorieta': cognome, nome e codice fiscale - ragione sociale e partita IVA - ragione sociale e codice fiscale" Base: type: object description: Corpo della request originale BasePairString: type: object properties: identificativo: type: string description: Chiave tecnica o ID dell'elemento example: D969 valore: type: string description: Etichetta descrittiva da mostrare all'utente example: Genova altroValore: type: string description: Eventuale informazione aggiuntiva di supporto example: GE selezionato: type: boolean description: Indica se l'elemento è quello selezionato di default example: true description: Elenco dei parametri path/query della request InternalServerErrorCaitelResponse: type: object properties: responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadBase" status: type: integer format: int32 title: type: string detail: type: string RequestPayloadBase: type: object properties: corpo: $ref: "#/components/schemas/Base" parametri: type: array description: Elenco dei parametri path/query della request items: $ref: "#/components/schemas/BasePairString" description: Oggetto contenente i dati della request originaria utilizzati per la chiamata del servizio ResponseMessage: type: object properties: tipo: type: string enum: - UNDEF - INFO - WARNING - ERROR - SUCCESS - QUESTION systemMessageCode: type: string confirmationToken: type: string messaggio: type: string ulterioriMessaggi: type: array items: type: string ulterioriMessaggiConDettagli: type: array items: $ref: "#/components/schemas/ResponseMessageDetails" stringaUnicaHtml: type: string stringaUnicaHtmlCompleta: type: string ResponseMessageDetails: type: object properties: tipo: type: string enum: - UNDEF - INFO - WARNING - ERROR - SUCCESS - QUESTION dettaglio: type: string ulterioriDettagli: type: array items: $ref: "#/components/schemas/BasePairString" conclusione: type: string domanda: type: string possibiliRisposteDomanda: type: array items: $ref: "#/components/schemas/BasePairString" BadRequestCaitelResponse: type: object properties: responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadBase" status: type: integer format: int32 title: type: string detail: type: string NotFoundCaitelResponse: type: object properties: responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadBase" status: type: integer format: int32 title: type: string detail: type: string ForbiddenCaitelResponse: type: object properties: responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadBase" status: type: integer format: int32 title: type: string detail: type: string EsitoVerificaDatiAccatastamentoResponse: type: object properties: elemento: type: boolean description: true se i dati sono validi per l'accatastamento (in caso contrario il servizio ritorna un errore 400 con il dettaglio dei campi non validi, non false). example: true responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadAccatastamentoRichiesta" description: Risposta al servizio di verifica dati per accatastamento semplificato nuovo impianto RequestPayloadAccatastamentoRichiesta: type: object properties: corpo: $ref: "#/components/schemas/AccatastamentoRichiesta" parametri: type: array description: Elenco dei parametri path/query della request items: $ref: "#/components/schemas/BasePairString" description: Oggetto contenente i dati della request originaria utilizzati per la chiamata del servizio AccatastamentoRisposta: type: object properties: elemento: $ref: "#/components/schemas/ImpiantoAccatastato" responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadAccatastamentoRichiesta" description: Risposta al servizio di accatastamento semplificato nuovo impianto ImpiantoAccatastato: type: object properties: codiceImpianto: pattern: ^07[A-ILM][0-9]{13}$ type: string description: Codice identificativo dell'impianto nel catasto example: 07A1110000000069 identificativoImpianto: type: string description: Identificativo univoco numerico dell'impianto example: "1574" identificativoResponsabile: type: string description: Identificativo univoco del responsabile dell'impianto example: "892" identificativoIndirizzo: type: string description: Identificativo univoco dell'indirizzo dell'impianto example: "3201" descrizioniGruppiOmogenei: type: array description: Descrizioni dei gruppi omogenei dell'impianto (esistente o appena creato) items: type: string description: Descrizioni dei gruppi omogenei dell'impianto (esistente o appena creato) esistente: type: boolean description: true se l'impianto era gia' presente al medesimo indirizzo (non e' stato inserito un nuovo impianto) example: false description: "Esito dell'accatastamento: identificativi dell'impianto inserito (o gia' esistente)" ListaValori: type: object properties: lista: type: array items: $ref: "#/components/schemas/BasePairString" numeroElementiLista: type: integer format: int32 numeroTotaleElementi: type: integer format: int32 paginaAttuale: type: integer format: int32 pagineTotali: type: integer format: int32 responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadBase" description: Risposta semplice contenente una lista di valori chiave/valore ListaValoriWithRequest: type: object properties: lista: type: array items: $ref: "#/components/schemas/BasePairString" numeroElementiLista: type: integer format: int32 numeroTotaleElementi: type: integer format: int32 paginaAttuale: type: integer format: int32 pagineTotali: type: integer format: int32 responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadBase" description: Risposta completa contenente una lista di valori chiave/valore che include i parametri di ricerca originali BooleanProblemAndJson: type: object properties: elemento: type: boolean responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadBase" status: type: integer format: int32 title: type: string detail: type: string MapRespStringProprietaResp: type: object properties: mappa: type: object additionalProperties: $ref: "#/components/schemas/ProprietaResp" numeroElementiMappa: type: integer format: int32 responseStatus: type: string informazioni: $ref: "#/components/schemas/ResponseMessage" request: $ref: "#/components/schemas/RequestPayloadBase" extra: $ref: "#/components/schemas/BasePairString" ProprietaResp: type: object properties: campo: type: string description: Nome del campo (chiave nella mappa delle proprietà) example: pod parentDotCampo: type: string etichetta: type: string description: Etichetta da visualizzare nel form example: POD - Point of Delivery Rete Elettrica placeholder: type: string description: Testo placeholder del campo input example: Inserire il codice POD ulterioreTesto: type: string description: Testo aggiuntivo da mostrare sotto il campo unitaMisura: type: string description: Unità di misura del campo example: kW parent: type: string description: Identificatore della sezione padre nel form example: s0102ubicazioneEDestinazioneEdificio proprieta: type: string description: Visibilità del campo per il ruolo corrente example: NON-VISIBILE enum: - EDITABILE - NON-VISIBILE - SOLA-LETTURA - OBBLIGATORIO tipoCampo: type: string description: Tipo di campo example: TESTUALE enum: - TESTUALE - INTERO - DECIMALE - CENTESIMALE - MILLESIMALE - BOOLEANO - DATA - TIPOLOGICA - AREADITESTO - OGGETTO condizioneDescrizione: type: string description: Messaggio di errore da mostrare se la condizione non è rispettata example: Formato POD non corretto [IT, 3 cifre, E e 8/9 cifre] condizioneRegexp1: type: string description: Espressione regolare primaria di validazione example: ^[iI][tT][0-9]{3}[eE][0-9]{8,9}$ condizioneRegexp2: type: string description: Espressione regolare secondaria di validazione (alternativa a regexp1) condizioneLengthMin: type: integer description: Lunghezza minima del valore format: int64 example: 14 condizioneLengthMax: type: integer description: Lunghezza massima del valore format: int64 example: 15 condizioneValueMin: type: number description: Valore numerico minimo condizioneStepSpin: type: number description: Step per i campi di tipo SPIN format: double example: 0.5 condizioneValueMax: type: number description: Valore numerico massimo condizioneDateMinAbs: pattern: ^\d{4}-\d{2}-\d{2}$ type: string description: Data minima assoluta (formato yyyy-MM-dd) format: date example: 2020-01-01 condizioneDateMaxAbs: pattern: ^\d{4}-\d{2}-\d{2}$ type: string description: Data massima assoluta (formato yyyy-MM-dd) format: date example: 2030-12-31 condizioneDateMinDayRelToNow: type: integer description: Giorni minimi relativi alla data odierna (negativo = passato) format: int32 example: -365 condizioneDateMaxDayRelToNow: type: integer description: Giorni massimi relativi alla data odierna (0 = oggi, positivo = futuro) format: int32 example: 0 condizioneSetValues1: type: string description: Insieme di valori ammessi — primo set (valori separati da virgola) example: S,N,2,3,4 condizioneOrSetValues2: type: string description: Secondo insieme di valori ammessi (AND o OR con il primo set) condizioneOrSetValues3: type: string description: Terzo insieme di valori ammessi (AND o OR con il primo e secondo set) condizioneDipendendeDaAltriCampi: type: boolean description: Indica se la visibilità del campo dipende dal valore di altri campi example: false testoAlert: type: string description: Ulteriore testo di alert testoWarning: type: string description: Ulteriore testo di warning description: Proprietà di visibilità e validazione di un campo del form, come restituita dalla view V_LIB_CAMPI_FE example: pod: campo: pod etichetta: POD - Point of Delivery Rete Elettrica parent: s0102ubicazioneEDestinazioneEdificio proprieta: NON-VISIBILE tipoCampo: TESTUALE condizioneDescrizione: Formato POD non corretto [IT, 3 cifre, E e 8/9 cifre] condizioneRegexp1: ^[iI][tT][0-9]{3}[eE][0-9]{8,9}$ condizioneLengthMin: 14 condizioneLengthMax: 15 condizioneDipendendeDaAltriCampi: false parameters: CodiceFiscaleOperatore: name: codice-fiscale-operatore in: header description: Codice Fiscale operatore required: true schema: pattern: ^[A-Za-z]{6}[0-9LMNPQRSTUVlmnpqrstuv]{2}[A-EHLMPRSTa-ehlmprst][0-9LMNPQRSTUVlmnpqrstuv]{2}[A-Za-z][0-9LMNPQRSTUVlmnpqrstuv]{3}[A-Za-z]$ type: string securitySchemes: BearerAuth: type: http description: Token Bearer ottenuto tramite OAuth2 client_credentials dal server di autorizzazione di Regione Liguria. Il token ha durata di 3600 secondi e va rinnovato alla scadenza. Richiede inoltre il certificato mTLS firmato da Liguria Digitale configurato sul client TLS. scheme: bearer bearerFormat: JWT