openapi: 3.0.3
info:
  title: Fattura Elettronica API 2.0
  description: |
    API REST per l'invio e la ricezione di fatture elettroniche tramite il Sistema
    di Interscambio (SDI) dell'Agenzia delle Entrate italiana.

    ## Autenticazione
    Ogni chiamata può essere autenticata tramite **Basic Authentication** oppure
    **Bearer Token**. Il Bearer Token si ottiene chiamando `POST /authentication`
    con le credenziali Basic. Nelle risposte alle chiamate con Basic Auth vengono
    restituiti gli header `X-auth-token` e `X-auth-expires` per ottenere il token
    senza una chiamata esplicita all'endpoint di autenticazione.

    ## Paginazione
    Tutte le chiamate `GET` che restituiscono liste supportano i parametri
    `per_page` (max 1000, default 100) e `page`. Se esiste una pagina successiva,
    la risposta include l'header `Link: <url> rel="next"`.

    ## Gestione degli errori
    In caso di errore il codice HTTP sarà `400`, `401` o `404` e il corpo conterrà
    un campo `error` con il messaggio descrittivo.
  version: "2.0"
  contact:
    url: https://www.fattura-elettronica-api.it/contatti/

servers:
  - url: https://fattura-elettronica-api.it/ws2.0/test
    description: Ambiente di test
  - url: https://fattura-elettronica-api.it/ws2.0/prod
    description: Ambiente di produzione

security:
  - basicAuth: []
  - bearerAuth: []

tags:
  - name: Autenticazione
    description: Ottenere un Bearer Token
  - name: Fatture
    description: Invio e ricezione di fatture elettroniche
  - name: Aziende
    description: Gestione anagrafica aziende (multi-azienda)

paths:

  # ─── AUTENTICAZIONE ────────────────────────────────────────────────────────

  /authentication:
    post:
      tags: [Autenticazione]
      summary: Ottieni un Bearer Token
      description: |
        Invoca questo endpoint con le credenziali Basic per ottenere un token Bearer
        da usare nelle chiamate successive.
      security:
        - basicAuth: []
      responses:
        "200":
          description: Token generato con successo
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthToken"
        "401":
          $ref: "#/components/responses/Unauthorized"

  # ─── FATTURE ───────────────────────────────────────────────────────────────

  /fatture:
    post:
      tags: [Fatture]
      summary: Invia una fattura elettronica
      description: |
        Invia una fattura elettronica in formato **XML** (Content-Type: application/xml)
        oppure tramite **dati JSON** (Content-Type: application/json).

        - **XML**: il documento viene trasmesso così com'è; il sistema aggiornerà
          automaticamente la sezione `DatiTrasmissione`.
        - **JSON**: il sistema genera l'XML a partire dai dati forniti. L'anagrafica
          dell'azienda cedente deve essere già compilata nel gestionale (o specificata
          tramite `piva_mittente` per la modalità multi-azienda).
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: string
              format: xml
              description: Documento XML della fattura elettronica (FatturaElettronica)
              example: |
                <?xml version="1.0" encoding="UTF-8"?>
                <p:FatturaElettronica>
                  ...fattura xml completa...
                </p:FatturaElettronica>
          application/json:
            schema:
              $ref: "#/components/schemas/FatturaInput"
      responses:
        "200":
          description: Fattura inviata o presa in carico
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FatturaInviata"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"

    get:
      tags: [Fatture]
      summary: Ricezione fatture e aggiornamenti di trasmissione
      description: |
        Restituisce la lista delle fatture ricevute (`ricezione=1`) e degli
        aggiornamenti sulle fatture trasmesse (`ricezione=0`).
        Supporta la paginazione tramite `per_page` e `page`.
      parameters:
        - $ref: "#/components/parameters/unread"
        - $ref: "#/components/parameters/date_from"
        - $ref: "#/components/parameters/date_to"
        - $ref: "#/components/parameters/id_from"
        - $ref: "#/components/parameters/id_to"
        - $ref: "#/components/parameters/sdi_id_from"
        - $ref: "#/components/parameters/sdi_id_to"
        - $ref: "#/components/parameters/sdi_id"
        - $ref: "#/components/parameters/partita_iva"
        - $ref: "#/components/parameters/solo_ricezioni"
        - $ref: "#/components/parameters/solo_trasmissioni"
        - $ref: "#/components/parameters/origine"
        - $ref: "#/components/parameters/partita_iva_controparte"
        - $ref: "#/components/parameters/numero_documento"
        - $ref: "#/components/parameters/anno_documento"
        - $ref: "#/components/parameters/tipo_documento"
        - $ref: "#/components/parameters/per_page"
        - $ref: "#/components/parameters/page"
      responses:
        "200":
          description: Lista di fatture e aggiornamenti
          headers:
            Link:
              description: URL della pagina successiva (formato `<url> rel="next"`)
              schema:
                type: string
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/FatturaAggiornamento"
        "401":
          $ref: "#/components/responses/Unauthorized"

  /fatture/{id}:
    get:
      tags: [Fatture]
      summary: Dettaglio/aggiornamento di una singola fattura
      parameters:
        - $ref: "#/components/parameters/id"
        - name: num_corpo
          in: query
          description: Numero del corpo della fattura (default 1; utile per fatture con corpi multipli)
          schema:
            type: integer
            default: 1
            minimum: 1
      responses:
        "200":
          description: Dati e stato della fattura
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FatturaAggiornamento"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

  /fatture/{id}/pdf:
    get:
      tags: [Fatture]
      summary: Fattura in formato PDF
      description: Restituisce la rappresentazione PDF della fattura in formato binario.
      parameters:
        - $ref: "#/components/parameters/id"
      responses:
        "200":
          description: File PDF della fattura
          headers:
            Content-Type:
              schema:
                type: string
                example: application/pdf
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

  /fatture/{id}/allegati:
    get:
      tags: [Fatture]
      summary: Allegati di una fattura
      description: |
        Restituisce gli allegati della fattura già decodificati e decompressi.
        Per fatture con corpi multipli usare il parametro `num_corpo`.
      parameters:
        - $ref: "#/components/parameters/id"
        - name: num_corpo
          in: query
          description: Numero del corpo della fattura (default 1)
          schema:
            type: integer
            default: 1
            minimum: 1
      responses:
        "200":
          description: Lista degli allegati
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Allegato"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

  /fatture/{id}/notifica:
    get:
      tags: [Fatture]
      summary: File di notifica SDI
      description: |
        Scarica il file XML originale prodotto dal SDI per notificare l'esito
        della trasmissione.
      parameters:
        - $ref: "#/components/parameters/id"
      responses:
        "200":
          description: File XML di notifica SDI
          headers:
            Content-Type:
              schema:
                type: string
                example: application/xml
            Content-Disposition:
              schema:
                type: string
                example: attachment; filename=notifica.xml
          content:
            application/xml:
              schema:
                type: string
                format: xml
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

  # ─── AZIENDE ───────────────────────────────────────────────────────────────

  /aziende:
    post:
      tags: [Aziende]
      summary: Crea una nuova azienda
      description: "Campi obbligatori: `ragione_sociale`, `piva`, `cfis`."
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AziendaInput"
      responses:
        "200":
          description: Azienda creata
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Azienda"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"

    get:
      tags: [Aziende]
      summary: Elenco aziende
      parameters:
        - $ref: "#/components/parameters/per_page"
        - $ref: "#/components/parameters/page"
      responses:
        "200":
          description: Lista aziende
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Azienda"
        "401":
          $ref: "#/components/responses/Unauthorized"

  /aziende/{id}:
    get:
      tags: [Aziende]
      summary: Dati di una singola azienda
      parameters:
        - $ref: "#/components/parameters/id"
      responses:
        "200":
          description: Dati azienda
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Azienda"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

    put:
      tags: [Aziende]
      summary: Aggiorna un'azienda
      description: È possibile specificare solo i campi da aggiornare.
      parameters:
        - $ref: "#/components/parameters/id"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AziendaInput"
      responses:
        "200":
          description: Azienda aggiornata
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Azienda"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

    delete:
      tags: [Aziende]
      summary: Elimina un'azienda
      parameters:
        - $ref: "#/components/parameters/id"
      responses:
        "200":
          description: Azienda eliminata
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Azienda"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"

# ─── COMPONENTS ──────────────────────────────────────────────────────────────

components:

  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    bearerAuth:
      type: http
      scheme: bearer

  parameters:
    id:
      name: id
      in: path
      required: true
      description: Identificativo univoco interno fattura-elettronica-api
      schema:
        type: integer
    unread:
      name: unread
      in: query
      description: Se `true`, restituisce solo gli aggiornamenti non ancora letti
      schema:
        type: boolean
    date_from:
      name: date_from
      in: query
      description: "Data aggiornamento iniziale (formato: yyyy-mm-dd o yyyy-mm-dd hh:mm:ss)"
      schema:
        type: string
    date_to:
      name: date_to
      in: query
      description: "Data aggiornamento finale (formato: yyyy-mm-dd o yyyy-mm-dd hh:mm:ss)"
      schema:
        type: string
    id_from:
      name: id_from
      in: query
      schema:
        type: integer
    id_to:
      name: id_to
      in: query
      schema:
        type: integer
    sdi_id_from:
      name: sdi_id_from
      in: query
      schema:
        type: integer
    sdi_id_to:
      name: sdi_id_to
      in: query
      schema:
        type: integer
    sdi_id:
      name: sdi_id
      in: query
      schema:
        type: integer
    partita_iva:
      name: partita_iva
      in: query
      description: Filtra per P.IVA dell'azienda (utile in scenari multi-azienda)
      schema:
        type: string
    solo_ricezioni:
      name: solo_ricezioni
      in: query
      description: Se `true`, restituisce solo le fatture ricevute
      schema:
        type: boolean
    solo_trasmissioni:
      name: solo_trasmissioni
      in: query
      description: Se `true`, restituisce solo gli aggiornamenti sulle trasmissioni
      schema:
        type: boolean
    origine:
      name: origine
      in: query
      description: "Origine della fattura: A=API, M=Manuale, S=SDI, R=Richiesta massiva"
      schema:
        type: string
        enum: [A, M, S, R]
    partita_iva_controparte:
      name: partita_iva_controparte
      in: query
      description: "P.IVA della controparte con prefisso internazionale (es: IT12345678901)"
      schema:
        type: string
    numero_documento:
      name: numero_documento
      in: query
      description: "Numero documento esatto (es: 1234ABC)"
      schema:
        type: string
    anno_documento:
      name: anno_documento
      in: query
      description: "Anno del documento (es: 2024)"
      schema:
        type: string
    tipo_documento:
      name: tipo_documento
      in: query
      description: "Tipo documento (es: FATT, NDC, TD02, TD16, ...)"
      schema:
        type: string
    per_page:
      name: per_page
      in: query
      description: Numero di risultati per pagina (max 1000, default 100)
      schema:
        type: integer
        default: 100
        maximum: 1000
        minimum: 1
    page:
      name: page
      in: query
      description: Numero di pagina (default 1)
      schema:
        type: integer
        default: 1
        minimum: 1

  responses:
    BadRequest:
      description: Dati non validi
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    Unauthorized:
      description: Autenticazione mancante o non valida
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    NotFound:
      description: Risorsa non trovata
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"

  schemas:

    Error:
      type: object
      properties:
        error:
          type: string
          description: Messaggio di errore
      required: [error]

    AuthToken:
      type: object
      properties:
        token:
          type: string
          description: Bearer token da usare nelle chiamate successive
        expires:
          type: string
          format: date-time
          description: "Data/ora di scadenza del token (formato: yyyy-mm-dd hh:mm:ss)"
      required: [token, expires]

    # ── Invio fattura ──────────────────────────────────────────────────────

    FatturaInput:
      type: object
      description: Dati per la creazione di una fattura elettronica in formato JSON
      properties:
        piva_mittente:
          type: string
          description: P.IVA del cedente/prestatore (necessaria in scenari multi-azienda)
        destinatario:
          $ref: "#/components/schemas/Destinatario"
        documento:
          $ref: "#/components/schemas/Documento"
        righe:
          type: array
          items:
            $ref: "#/components/schemas/RigaFattura"
      required: [destinatario, documento, righe]

    Destinatario:
      type: object
      properties:
        CodiceSDI:
          type: string
          description: Codice destinatario SDI (7 caratteri)
          example: "0000000"
        PEC:
          type: string
          format: email
          description: PEC del destinatario (alternativa al CodiceSDI)
        PartitaIVA:
          type: string
          example: "00000000000"
        CodiceFiscale:
          type: string
        Denominazione:
          type: string
          description: "Ragione sociale (per persone fisiche: Cognome Nome)"
          example: "Azienda di Test SpA"
        Indirizzo:
          type: string
          example: "Via di Test, 4"
        CAP:
          type: string
          example: "00100"
        Comune:
          type: string
          example: "Roma"
        Provincia:
          type: string
          description: Sigla della provincia (2 caratteri)
          example: "RM"
        Nazione:
          type: string
          description: Codice ISO 3166-1 alpha-2
          example: "IT"

    Documento:
      type: object
      properties:
        tipo:
          type: string
          description: "Tipo documento (default: FATT)"
          enum: [FATT, NDC, TD02, TD03, TD05, TD06, TD16, TD17, TD18, TD19, TD20, TD24]
          default: FATT
        Data:
          type: string
          format: date
          example: "2023-10-03"
        Numero:
          type: string
          example: "10"
        Causale:
          type: string
        DatiRitenuta:
          type: array
          items:
            $ref: "#/components/schemas/DatiRitenuta"
        DatiBollo:
          $ref: "#/components/schemas/DatiBollo"
        DatiCassaPrevidenziale:
          type: array
          items:
            $ref: "#/components/schemas/DatiCassaPrevidenziale"
        DatiOrdineAcquisto:
          type: array
          items:
            $ref: "#/components/schemas/DatiDocumentoCollegato"
        DatiContratto:
          type: array
          items:
            $ref: "#/components/schemas/DatiDocumentoCollegato"
        DatiConvenzione:
          type: array
          items:
            $ref: "#/components/schemas/DatiDocumentoCollegato"
        DatiRicezione:
          type: array
          items:
            $ref: "#/components/schemas/DatiDocumentoCollegato"
        DatiFattureCollegate:
          type: array
          items:
            $ref: "#/components/schemas/DatiDocumentoCollegato"
        DatiDDT:
          type: array
          items:
            $ref: "#/components/schemas/DatiDDT"
        DatiPagamento:
          $ref: "#/components/schemas/DatiPagamento"
      required: [Data, Numero]

    DatiRitenuta:
      type: object
      properties:
        TipoRitenuta:
          type: string
          description: Se omesso, viene assegnato automaticamente il tipo predefinito
        ImportoRitenuta:
          type: string
          example: "20.00"
        AliquotaRitenuta:
          type: string
          description: "Default: 20"
          example: "20.00"
        CausalePagamento:
          type: string

    DatiBollo:
      type: object
      properties:
        BolloVirtuale:
          type: string
          enum: [SI]
        ImportoBollo:
          type: string
          example: "2.00"

    DatiCassaPrevidenziale:
      type: object
      properties:
        TipoCassa:
          type: string
        AlCassa:
          type: string
        ImportoContributoCassa:
          type: string
        ImponibileCassa:
          type: string
        AliquotaIVA:
          type: string
        Natura:
          type: string
        Ritenuta:
          type: string
          enum: [SI]

    DatiDocumentoCollegato:
      type: object
      properties:
        RiferimentoNumeroLinea:
          type: array
          items:
            type: string
        IdDocumento:
          type: string
        Data:
          type: string
          format: date
        NumItem:
          type: string
        CodiceCommessaConvenzione:
          type: string
        CodiceCUP:
          type: string
        CodiceCIG:
          type: string

    DatiDDT:
      type: object
      properties:
        NumeroDDT:
          type: string
        DataDDT:
          type: string
          format: date
        RiferimentoNumeroLinea:
          type: array
          items:
            type: string

    DatiPagamento:
      type: object
      properties:
        CondizioniPagamento:
          type: string
          description: "TP01, TP02 (default), TP03"
          enum: [TP01, TP02, TP03]
          default: TP02
        DettaglioPagamento:
          type: array
          items:
            $ref: "#/components/schemas/DettaglioPagamento"

    DettaglioPagamento:
      type: object
      properties:
        Beneficiario:
          type: string
        ModalitaPagamento:
          type: string
          description: "Da MP01 a MP23. Default: MP05 se l'azienda ha IBAN, altrimenti MP01"
          example: MP05
        DataScadenzaPagamento:
          type: string
          format: date
        IBAN:
          type: string
          example: IT99A0000000000000000
        ImportoPagamento:
          type: string
          description: Se omesso, viene precalcolato dal sistema
        IstitutoFinanziario:
          type: string

    RigaFattura:
      type: object
      properties:
        Descrizione:
          type: string
          description: "Default: -"
          example: "Servizio 1"
        PrezzoUnitario:
          type: string
          description: "Default: 0"
          example: "100.00"
        AliquotaIVA:
          type: number
          description: "Default: 22"
          example: 22
        Quantita:
          type: number
          description: "Default: 1"
          example: 1
        ScontoMaggiorazione:
          $ref: "#/components/schemas/ScontoMaggiorazione"
        Natura:
          type: string
        CodiceArticolo:
          $ref: "#/components/schemas/CodiceArticolo"
        UnitaMisura:
          type: string
        EsigibilitaIVA:
          type: string
        AltriDatiGestionali:
          $ref: "#/components/schemas/AltriDatiGestionali"

    ScontoMaggiorazione:
      type: object
      properties:
        Tipo:
          type: string
          description: "Default: SC (sconto)"
          default: SC
        Percentuale:
          type: string
        Importo:
          type: string

    CodiceArticolo:
      type: object
      properties:
        CodiceTipo:
          type: string
        CodiceValore:
          type: string

    AltriDatiGestionali:
      type: object
      properties:
        TipoDato:
          type: string
        RiferimentoTesto:
          type: string
        RiferimentoNumero:
          type: string
        RiferimentoData:
          type: string

    # ── Risposta invio ─────────────────────────────────────────────────────

    FatturaInviata:
      type: object
      properties:
        id:
          type: integer
          description: Identificativo univoco interno fattura-elettronica-api
        sdi_identificativo:
          type: integer
          nullable: true
          description: Identificativo trasmissione SDI (null se non ancora disponibile)
        sdi_nome_file:
          type: string
          description: Nome del file trasmesso al SDI
        sdi_fattura:
          type: string
          description: Documento XML effettivamente trasmesso
        sdi_stato:
          type: string
          enum: [INVI, PREN, ERRO]
          description: "INVI=Inviato, PREN=Prenotato (ID SDI non ancora disponibile), ERRO=Errore"
        sdi_messaggio:
          type: string
          nullable: true
          description: Eventuale messaggio di errore

    # ── Ricezione fatture/aggiornamenti ───────────────────────────────────

    FatturaAggiornamento:
      type: object
      description: Fattura ricevuta (ricezione=1) o aggiornamento su trasmissione (ricezione=0)
      properties:
        ricezione:
          type: integer
          enum: [0, 1]
          description: "1=fattura ricevuta, 0=aggiornamento su trasmissione"
        id:
          type: integer
        partita_iva:
          type: string
          description: P.IVA dell'azienda destinataria (utile in scenari multi-azienda)
        sdi_fattura_base64:
          type: string
          description: Documento originale (con eventuale firma digitale) codificato in base64
        sdi_fattura_xml:
          type: string
          description: Documento decodificato da eventuali firme digitali
        sdi_identificativo:
          type: integer
          nullable: true
        sdi_stato:
          type: string
          description: |
            Stato SDI della fattura trasmessa:
            - INVI: Inviato
            - PREN: Prenotato (preso in carico, non ancora trasmesso al SDI)
            - ERRO: Errore (vedere sdi_messaggio)
            - CONS: Consegnato
            - NONC: Non Consegnato (obbligo comunque ottemperato)
            - ACCE: Accettato (solo PA)
            - RIFI: Rifiutato (solo PA)
            - DECO: Decorrenza termini / accettazione implicita (solo PA)
          enum: [INVI, PREN, ERRO, CONS, NONC, ACCE, RIFI, DECO]
        sdi_data_aggiornamento:
          type: string
          description: "Data ultimo aggiornamento (formato: yyyy-mm-dd hh:mm:ss)"
        sdi_messaggio:
          type: string
          nullable: true
        sdi_nome_file:
          type: string
        origine:
          type: string
          enum: [A, M, S, R]
          description: "A=API, M=Manuale, S=SDI, R=Richiesta massiva"
        dati_documento:
          $ref: "#/components/schemas/DatiDocumento"

    DatiDocumento:
      type: object
      description: Dati strutturati estratti dall'XML della fattura
      properties:
        mittente:
          type: object
          additionalProperties: true
        destinatario:
          type: object
          additionalProperties: true
        documento:
          type: object
          additionalProperties: true
        righe:
          type: array
          items:
            type: object
            additionalProperties: true
        num_allegati:
          type: integer
        num_corpi:
          type: integer
          description: Numero di corpi della fattura (solitamente 1)

    Allegato:
      type: object
      properties:
        nome_file:
          type: string
          example: "allegato.pdf"
        descrizione:
          type: string
          nullable: true
        file_base64:
          type: string
          description: Contenuto del file decodificato e decompresso, codificato in base64

    # ── Aziende ───────────────────────────────────────────────────────────

    AziendaInput:
      type: object
      properties:
        ragione_sociale:
          type: string
          description: Obbligatoria in fase di creazione
        piva:
          type: string
          description: Partita IVA (obbligatoria)
          example: "00000000000"
        cfis:
          type: string
          description: Codice fiscale (obbligatorio)
          example: "00000000000"
        descrizione:
          type: string
          description: Note libere
        indirizzo:
          type: string
        cap:
          type: string
        citta:
          type: string
        provincia:
          type: string
          description: Sigla provincia (2 caratteri)
        paese:
          type: string
        abilita_ricezione:
          type: integer
          enum: [0, 1]
          default: 1
          description: "0=disabilitata, 1=abilitata (default)"
        forma_giuridica:
          type: string
          nullable: true
          enum: [ind, ss, snc, sas, spa, sapa, srl, srlsem, srlrid, coop, altro]
        tipo_regime_fiscale:
          type: string
          nullable: true
          description: "Codice regime fiscale (es: RF01=Ordinario, RF02=Contribuenti minimi)"
        albo_professionale:
          type: string
        provincia_albo:
          type: string
        numero_iscrizione_albo:
          type: string
        data_iscrizione_albo:
          type: string
          format: date
          nullable: true
        rea_ufficio:
          type: string
          description: Sigla provincia della camera di commercio
        rea:
          type: string
          description: Numero iscrizione camera di commercio
        capitale_sociale:
          type: string
          nullable: true
          example: "20000.00"
        socio_unico:
          type: integer
          nullable: true
          enum: [0, 1]
        liquidazione:
          type: integer
          nullable: true
          enum: [0, 1]
        telefono_amministrazione:
          type: string
        email_amministrazione:
          type: string
          format: email
        legale_rappresentante_nome:
          type: string
        legale_rappresentante_cfis:
          type: string
        iban:
          type: string
          example: "IT99A0000000000000000"

    Azienda:
      allOf:
        - $ref: "#/components/schemas/AziendaInput"
        - type: object
          properties:
            id:
              type: string
              description: Identificativo univoco interno
            data_inserimento:
              type: string
              description: "Data inserimento (formato: yyyy-mm-dd hh:mm:ss)"
