openapi: '3.0.2'
info:
  title: PortalSIF
  version: '0.1'
servers:
  - url: https://portalsif.es/api
  - url: https://portalsif.es/apicai
  - url: http://localhost/verifactu/verifactu.dll
externalDocs:
  description: Descargar especificación OpenAPI
  url: api/documentacion/swagger.yml    
components:
  schemas:
    facturas:
      type: object
      properties:
        idemisorfactura:
          type: string
          maxLength: 9
          description: "Número de identificación fiscal (NIF) del obligado a expedir la factura."
        nombrerepresentante:
          type: string
          maxLength: 9
          description: "Nombre del representante del oblifo a expedir la factura."
        nifrepresentante:
          type: string
          maxLength: 9
          description: "Número de identificación fiscal (NIF) del representante del obligado a expedir la factura."                    
        numseriefactura:
          type: string
          maxLength: 60
          description: "Nº Serie + Nº Factura que identifica a la factura emitida."
        fechaexpedicionfactura:
          type: string
          format: date-time
          description: "Fecha de expedición de la factura. Formato dd-mm-aaaa"
        refexterna:
          type: string
          maxLength: 60
          description: "Programas CAISOFT ver Descripción"
        nombrerazonemisor:
          type: string
          maxLength: 120
          description: Nombre-razón social del obligado a expedir la factura.
        anulacion:
          type: string
          maxLength: 1
          example: "N"
        subsanacion:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        rechazoprevio:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        sinregistroprevio:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        tipofactura:
          type: string
          maxLength: 2
          description: Especificación del tipo de factura - factura completa, factura simplificada, factura emitida en sustitución de facturas simplificadas o factura rectificativa.
          example: "F1"
        tiporectificativa:
          type: string
          maxLength: 1
          nullable: true
          example: ""
        baserectificada:
          type: number
          format: float
          nullable: true
        cuotarectificada:
          type: number
          format: float
          nullable: true
        cuotarecargorectificado:
          type: number
          format: float
          nullable: true
        fechaoperacion:
          type: string
          format: date-time
          nullable: true
        descripcionoperacion:
          type: string
          maxLength: 500
          description: Descripción del objeto de la factura.
        simplificadaart7273:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        sinidentifdestinatarioart61d:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        macrodato:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        emitidaporterceroodestinatario:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        terceronombrerazon:
          type: string
          maxLength: 120
        terceronif:
          type: string
          maxLength: 9
        tercerocodigopais:
          type: string
          maxLength: 2
          example: ""
        terceroidtype:
          type: string
          maxLength: 2
          example: ""
        terceroid:
          type: string
          maxLength: 20
        cupon:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        cuotatotal:
          type: number
          format: float
          example: "100"
        importetotal:
          type: number
          format: float
          example: "1100"
        cadenaprimerregistro:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        cadenaidemisorfactura:
          type: string
          maxLength: 9
          nullable: true
        cadenanumseriefactura:
          type: string
          maxLength: 60
          nullable: true
        cadenafechaexpedicionfactura:
          type: string
          format: date-time
          nullable: true
        cadenahuella:
          type: string
          maxLength: 64
          nullable: true
        huella:
          type: string
          maxLength: 64
          nullable: true
        enviada:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        fechaportalsif:
          type: string
          format: date-time
          nullable: true
        fechahorahusoenregistro:
          type: string
          format: date-time
          nullable: true
        estadoregistro:
          type: string
          maxLength: 18
          nullable: true
        codigoerrorregistro:
          type: string
          maxLength: 5
          nullable: true
        descripcionerrorregistro:
          type: string
          maxLength: 500
          nullable: true
        detalledesglose:
          type: array
          items:
            $ref: '#/components/schemas/detalledesglose'
        facturassustituidas:
          type: array
          items:
            $ref: '#/components/schemas/facturasustituida'
        facturasrectificadas:
          type: array
          items:
            $ref: '#/components/schemas/facturarectificada'
        destinatarios:
          type: array
          items:
            $ref: '#/components/schemas/destinatario'

    detalledesglose:
      type: object
      properties:
        impuesto:
          type: string
          maxLength: 2
          nullable: true
          example: "01"
        claveregimen:
          type: string
          maxLength: 2
          example: "01"
        calificacionoperacion:
          type: string
          maxLength: 2
          description: Clave de la operación sujeta y no exenta o de la operación no sujeta.
          example: "S1"
        operacionexenta:
          type: string
          maxLength: 2
          description: Campo que especifica la causa de exención.
          example: ""
        tipoimpositivo:
          type: number
          format: float
          example: "10"
        baseimponibleoimportenosujeto:
          type: number
          format: float
          example: "1000"
        baseimponibleacoste:
          type: number
          format: float
          example: "0"
        cuotarepercutida:
          type: number
          format: float
          example: "100"
        tiporecargoequivalencia:
          type: number
          format: float
          nullable: true
          example: "0"
        cuotarecargoequivalencia:
          type: number
          format: float
          nullable: true
          example: "0"

    facturasustituida:
      type: object
      properties:
        idemisorFactura:
          type: string
          maxLength: 9
          description: "Número de identificación fiscal (NIF) del obligado a expedir la factura."
        numseriefactura:
          type: string
          maxLength: 60
          description: "Nº Serie + Nº Factura que identifica a la factura emitida."
        fechaexpedicionfactura:
          type: string
          description: "Fecha de expedición de la factura. Formato dd-mm-aaaa"

    facturarectificada:
      type: object
      properties:
        idemisorFactura:
          type: string
          maxLength: 9
          description: "Número de identificación fiscal (NIF) del obligado a expedir la factura."
        numseriefactura:
          type: string
          maxLength: 60
          description: "Nº Serie + Nº Factura que identifica a la factura emitida."
        fechaexpedicionfactura:
          type: string
          description: "Fecha de expedición de la factura. Formato dd/mm/aaaa"
    destinatario:
      type: object
      properties:
        nombrerazon:
          type: string
        nif:
          type: string
        codigopais:
          type: string
        idtype:
          type: string
        id:
          type: string   

    facturasget:
      type: object
      properties:
        csv:
          type: string
          maxLength: 16
          description: "Código seguro de verificación."
        encadenada:
          type: string
          maxLength: 1
          description: "S/N está correctamente encadenada"
        idemisorFactura:
          type: string
          maxLength: 9
          description: "Número de identificación fiscal (NIF) del obligado a expedir la factura."
        numseriefactura:
          type: string
          maxLength: 60
          description: "Nº Serie + Nº Factura que identifica a la factura emitida."
        fechaexpedicionfactura:
          type: string
          format: date-time
          description: "Fecha de expedición de la factura. Formato dd-mm-aaaa"
        refexterna:
          type: string
          maxLength: 60
          description: "Programas CAISOFT ver Descripción"
        nombrerazonemisor:
          type: string
          maxLength: 120
          description: Nombre-razón social del obligado a expedir la factura.
        anulacion:
          type: string
          maxLength: 1
          example: "N"
        subsanacion:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        rechazoprevio:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        sinregistroprevio:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        tipofactura:
          type: string
          maxLength: 2
          description: Especificación del tipo de factura - factura completa, factura simplificada, factura emitida en sustitución de facturas simplificadas o factura rectificativa.
          example: "F1"
        tiporectificativa:
          type: string
          maxLength: 1
          nullable: true
          example: ""
        baserectificada:
          type: number
          format: float
          nullable: true
        cuotarectificada:
          type: number
          format: float
          nullable: true
        cuotarecargorectificado:
          type: number
          format: float
          nullable: true
        fechaoperacion:
          type: string
          format: date-time
          nullable: true
        descripcionoperacion:
          type: string
          maxLength: 500
          description: Descripción del objeto de la factura.
        simplificadaart7273:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        sinidentifdestinatarioart61d:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        macrodato:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        emitidaporterceroodestinatario:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        terceronombrerazon:
          type: string
          maxLength: 120
        terceronif:
          type: string
          maxLength: 9
        tercerocodigopais:
          type: string
          maxLength: 2
          example: ""
        terceroidtype:
          type: string
          maxLength: 2
          example: ""
        terceroid:
          type: string
          maxLength: 20
        cupon:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        cuotatotal:
          type: number
          format: float
          example: "100"
        importetotal:
          type: number
          format: float
          example: "1100"
        cadenaprimerregistro:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        cadenaidemisorfactura:
          type: string
          maxLength: 9
          nullable: true
        cadenanumseriefactura:
          type: string
          maxLength: 60
          nullable: true
        cadenafechaexpedicionfactura:
          type: string
          format: date-time
          nullable: true
        cadenahuella:
          type: string
          maxLength: 64
          nullable: true
        huella:
          type: string
          maxLength: 64
          nullable: true
        enviada:
          type: string
          maxLength: 1
          nullable: true
          example: "N"
        fechaportalsif:
          type: string
          format: date-time
          nullable: true
        fechahorahusoenregistro:
          type: string
          format: date-time
          nullable: true
        estadoregistro:
          type: string
          maxLength: 18
          nullable: true
        codigoerrorregistro:
          type: string
          maxLength: 5
          nullable: true
        descripcionerrorregistro:
          type: string
          maxLength: 500
          nullable: true
        detalledesglose:
          type: array
          items:
            $ref: '#/components/schemas/detalledesgloseget'
        facturassustituidas:
          type: array
          items:
            $ref: '#/components/schemas/facturasustituidaget'
        facturasrectificadas:
          type: array
          items:
            $ref: '#/components/schemas/facturarectificadaget'
        destinatarios:
          type: array
          items:
            $ref: '#/components/schemas/destinatarioget'

    detalledesgloseget:
      type: object
      properties:
        idfacturasdesglose:
          type: integer
        idffacturas:
          type: integer
        impuesto:
          type: string
          maxLength: 2
          nullable: true
          example: "01"
        claveregimen:
          type: string
          maxLength: 2
          example: "01"
        calificacionoperacion:
          type: string
          maxLength: 2
          description: Clave de la operación sujeta y no exenta o de la operación no sujeta.
          example: "S1"
        operacionexenta:
          type: string
          maxLength: 2
          description: Campo que especifica la causa de exención.
          example: ""
        tipoimpositivo:
          type: number
          format: float
          example: "10"
        baseimponibleoimportenosujeto:
          type: number
          format: float
          example: "1000"
        baseimponibleacoste:
          type: number
          format: float
          example: "0"
        cuotarepercutida:
          type: number
          format: float
          example: "100"
        tiporecargoequivalencia:
          type: number
          format: float
          nullable: true
          example: "0"
        cuotarecargoequivalencia:
          type: number
          format: float
          nullable: true
          example: "0"

    facturasustituidaget:
      type: object
      properties:
        idemisorFactura:
          type: string
          maxLength: 9
          description: "Número de identificación fiscal (NIF) del obligado a expedir la factura."
        numseriefactura:
          type: string
          maxLength: 60
          description: "Nº Serie + Nº Factura que identifica a la factura emitida."
        fechaexpedicionfactura:
          type: string
          description: "Fecha de expedición de la factura. Formato dd-mm-aaaa"

    facturarectificadaget:
      type: object
      properties:
        idemisorFactura:
          type: string
          maxLength: 9
          description: "Número de identificación fiscal (NIF) del obligado a expedir la factura."
        numseriefactura:
          type: string
          maxLength: 60
          description: "Nº Serie + Nº Factura que identifica a la factura emitida."
        fechaexpedicionfactura:
          type: string
          description: "Fecha de expedición de la factura. Formato dd/mm/aaaa"
    destinatarioget:
      type: object
      properties:
        idfacturasdestinatarios:
          type: integer
        idffacturas:
          type: integer
        nombrerazon:
          type: string
        nif:
          type: string
        codigopais:
          type: string
        idtype:
          type: string
        id:
          type: string
          
    qr:
        type: string
        format: binary

    error:
      type: object
      properties:
        classname:
          type: string
        message:
          type: string     

    idfactura:
      type: object
      properties:        
        idemisorfactura:
          type: string
        numseriefactura:
          type: string
          maxLength: 60
        fechaexpedicionfactura:
          type: string
          format: date-time
   
    estadofacturas:
      type: object
      properties:  
        idfactura:
          type: array
          items:
            $ref: '#/components/schemas/idfactura'   
        estado: 
          type: string 
          maxLength: 10

tags:
  - name: "facturas"
    description: "Subida de facturas a PortalSIF"

paths:
  /facturas/alta:
    post:
      tags:
        - "facturas"
      summary: "Subida de facturas a PortalSIF."
      description: | 
        Graba en la BDD los registros de facturación.
        ### Requisitos body: Registros de facturación 

        | Campo               |Descripcion              |Obligatorio|
        |---------------------|-------------------------|------------|
        |**idemisorFactura**  |Número de identificación fiscal (NIF) del obligado a expedir la factura|Sí|
        |**nombrerepresentante**  |Nombre del representante del obligado a expedir la factura| No |
        |**nifrepresentante**  |Número de identificación fiscal (NIF) del representante del obligado a expedir la factura| No |
        | **numseriefactura** | Nº Serie + Nº Factura que identifica a la factura emitida. | Sí |
        | **fechaexpedicionfactura** | Fecha de expedición de la factura. | Sí |
        | **refexterna** | Dato adicional de contenido libre para asociar opcionalmente información interna del sistema informático de facturación al registro de facturación. Este dato puede ayudar a completar la identificación o calificación de la factura y/o su registro de facturación. En CAISOFT se usará para que PortalSIF sincronice, en tiempo real, la información de las facturas (estado, CSV, huella, ...). Su formato será #[nombre del programa]#[índice de factura en su BDD] | No |
        | **nombrerazonemisor** | Nombre-razón social del obligado a expedir la factura. | Sí |
        | **anulacion** | Indicador que especifica si se trata de una anulación de un registro de facturación con alta previamente generado. Si no se informa, tiene valor "N" (Alta Normal-Inicial). | No |
        | **subsanacion** | Indicador que especifica si se trata de una subsanación de un registro de facturación de alta previamente generado. Si no se informa, tiene valor "N" (Alta Normal-Inicial). | No |
        | **rechazoprevio** | Indicador que especifica si se está generando un nuevo registro de facturación de alta subsanado tras haber sido rechazado en el último envío. Si no se informa o el registro de facturación original resultó aceptado o aceptado con errores, tiene valor "N". Los otros posibles valores son "X" cuando el registro de facturación original ha sido rechazado o "S" cuando existe una subsanación previamente rechazada. Este campo forma parte del detalle de las circunstancias de generación de los registros de facturación. | No |
        | **sinregistroprevio** | Indicador que especifica que se trata de la anulación de un registro de facturación de alta (o subsanación de un registro de facturación de anulación previo) cuando este no existe en la AEAT (o en el propio sistema informático, si así procede indicar). Si no se informa este campo se entenderá que tiene valor "N". Este campo forma parte del detalle de las circunstancias de generación de los registros de facturación. | No |
        | **tipofactura** | Especificación del tipo de factura: factura completa, simplificada, emitida en sustitución de facturas simplificadas o rectificativa. Opciones: <br> <b>F1</b> - Factura completa <br> <b>F2</b> - Factura Simplificada <br> <b>F3</b> - Factura en sustitución de facturas simplificadas <br> <b>R1</b> - Rectificativa (Error fundado en derecho y Art. 80 Uno Dos y Seis LIVA) <br> <b>R2</b> - Rectificativa (Art. 80.3)<br> <b>R3</b> - Rectificativa (Art. 80.4)<br> <b>R4</b> - Rectificativa (Resto)<br> <b>R5</b> - Rectificativa en facturas simplificadas | Sí |
        | **tiporectificativa** | Indica si el tipo de factura rectificativa es por sustitución o diferencia.Opciones:<br><b>S</b> - Por sustitución<br><b>I</b> - Por diferencias | No |
        | **facturasrectificadas** | Información de facturas rectificadas incluyendo <br> idemisorfactura, numseriefactura, y fechaexpedicionfactura. | No |
        | **facturassustituidas** | Información de facturas sustituidas incluyendo <br> idemisorfactura, numseriefactura, y fechaexpedicionfactura. | No |
        | **baserectificada** | Base imponible de la factura. | No |
        | **cuotarectificada** | Cuota repercutida o soportada de la factura. | No |
        | **cuotarecargorectificado** | Cuota recargo de equivalencia de la factura. | No |
        | **fechaoperacion** | Fecha en la que se ha realizado la operación (si difiere de la fecha de expedición). | No |
        | **descripcionoperacion** | Descripción del objeto de la factura. | No |
        | **simplificadaArt7273** | Factura simplificada Art. 7.2 y 7.3 del RD 1619/2012. Si no se informa, se asume valor “N". | No |
        | **sinidentifdestinatarioart61d** | Factura sin identificación del destinatario según Art. 6.1.d) RD 1619/2012. Si no se informa, se asume valor “N". | No |
        | **macrodato** | Identificador para facturas con base o importe superior al umbral especificado. Si no se informa, se asume valor “N". | No |
        | **emitidaporterceroodestinatario** | Identificador si la factura ha sido expedida por un tercero o el destinatario. | No |
        | **terceronombrerazon** | Nombre-razón social del tercero que expide la factura. | No |
        | **terceronif** | NIF del tercero que expide la factura. | No |
        | **tercerocodigopais** | Código del país del tercero que expide la factura. | No |
        | **terceroidtype** | Clave para establecer el tipo de identificación del tercero en el país de residencia. | No |
        | **terceroid** | Número de identificación del tercero en el país de residencia.
        | **cupon** | Identificador que especifica si tiene minoración de la base imponible por la concesión de cupones, bonificaciones o descuentos cuando solo se expide el original de la factura. Este campo es necesario porque contribuye a completar el detalle de la tipología de la factura. Si no se informa este campo se entenderá que tiene valor “N”. | No |
        | **impuesto**<br>(detalle desglose) | Impuesto de aplicación. Si no se informa este campo se entenderá que el impuesto de aplicación es el IVA. Este campo es necesario porque contribuye a completar el detalle de la tipología de la factura.  Opciones: <br> <b>01</b> - IVA <br> <b>02</b> - IPSI <br> <b>03</b> - IGIC <br> <b>05</b> - Otros | No |
        | **claveregimen**<br>(detalle desglose) | Clave que identificará el tipo de régimen del impuesto o una operación con trascendencia tributaria. | No |
        | **calificacionoperacion**<br>(detalle desglose) | Clave de la operación sujeta y no exenta o de la operación no sujeta.  Opciones: <br> <b>S1</b> - Operación Sujeta y No exenta - Sin inversión del sujeto pasivo <br> <b>S2</b> - Operación Sujeta y No exenta - Con Inversión del sujeto pasivo <br> <b>N1</b> - Operación No Sujeta artículo 7, 14, otros <br> <b>N2</b> - Operación No Sujeta por Reglas de localización | Sí |
        | **operacionexenta**<br>(detalle desglose) | Campo que especifica la causa de exención.<br> <b>E1</b> - Exenta por el artículo 20<br> <b>E2</b> - Exenta por el artículo 21<br> <b>E3</b> - Exenta por el artículo 22<br> <b>E4</b> - Exenta por los artículos 23 y 24<br> <b>E5</b> - Exenta por el artículo 25<br> <b>E6</b> - Exenta por otros | Sí |
        | **tipoimpositivo**<br>(detalle desglose) | Porcentaje aplicado sobre la base imponible para calcular la cuota. | No |
        | **baseimponibleoimportenosujeto**<br>(detalle desglose) | Magnitud dineraria sobre la que se aplica el tipo impositivo / Importe no sujeto. | Sí |
        | **baseimponibleacoste**<br>(detalle desglose) | Magnitud dineraria sobre la que se aplica el tipo impositivo en régimen especial de grupos nivel avanzado. | No |
        | **cuotarepercutida**<br>(detalle desglose) | Cuota resultante de aplicar a la base imponible el tipo impositivo. | No |
        | **tiporecargoequivalencia**<br>(detalle desglose) | Porcentaje asociado en función del impuesto y tipo impositivo | No |
        | **cuotarecargoequivalencia**<br>(detalle desglose) | Cuota resultante de aplicar a la base imponible el tipo de recargo de equivalencia. | No |
        | **cuotatotal** | Importe total de la cuota (sumatorio de la Cuota Repercutida y Cuota de Recargo de Equivalencia).  | Sí |
        | **importetotal** | Importe total de la factura.  | Sí |

        ### Pasos desplegados por la petición: 
        1. Devuelve JSON con la siguiente información: 

              | Campo               |Descripcion              |
              |---------------------|-------------------------|
              |**idemisorFactura**  |Número de identificación fiscal (NIF) del obligado a expedir la factura|
              | **numseriefactura** | Nº Serie + Nº Factura que identifica a la factura emitida. |
              | **fechaexpedicionfactura** | Fecha de expedición de la factura. |
              | **codigo** <br>(solo en caso de error) | Valores posibles: <br> <b>1</b> - NIF el emisor no coincide con el asociado a la apiKey<br> <b>2</b> - Factura duplicada<br> <b>3</b> - NIF destinatario no identificado en el censo de la AEAT<br> <b>4</b> - Error de base de datos  |
              | **descripcion** <br>(solo en caso de error) | Descripción del error. |
              | **estado** | Correcta o incorrecta. En caso de ser incorrecta, el registro no se incorpora a la cola de envío. |
        
        2. Las facturas con estado = Correcta, se incorporan a la BDD de PortalSIF y, por tanto, a cola de envío a la AEAT.
      parameters:
        - name: X-Api-Key
          in: header
          required: true
          schema:
            type: string    
        - name: X-Secret-Key
          in: header
          required: true
          schema:
            type: string
      requestBody:
        description: "El body de la petición tendrá el formato del ejemplo (deben respetarse las mayúsculas y minúsculas en el nombre de los objetos y sus propiedades)."
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/facturas'
      responses:
        '201':
          description: "Created (proceso finalizado correctamente)"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/estadofacturas'
        '401':
          description: "No autorizado"
        '500':
          description: "Internal Server Error"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
      security:
        - ApiKeyAuth: []
          SecretKeyAuth: []

  /facturas/lista/{fechaInicio}/{fechaFin}:
    get:
      tags:
        - "facturas"
      summary: "Consulta de las facturas grabadas en la BDD de PortalSIF."
      description: | 
        Obtiene de la BDD los registros de facturación de la empresa identificada en la apikey para un determinado intervalo de fechas.   

        ### Pasos desplegados por la petición: 
        Devuelve JSON con la siguiente información
        | Campo               |Descripcion              |
        |---------------------|-------------------------|
        |**csv**  |Código seguro de verificación|
        |**encadenada**  |S/N está correctamente encadenada|
        |**idemisorfactura**  |Número de identificación fiscal (NIF) del obligado a expedir la factura|
        |**nombrerepresentante**  |Nombre del representante del obligado a expedir la factura|        
        |**nifrepresentante**  |Número de identificación fiscal (NIF) del representante del obligado a expedir la factura|                
        | **numseriefactura** | Nº Serie + Nº Factura que identifica a la factura emitida. |
        | **fechaexpedicionfactura** | Fecha de expedición de la factura. |
        | **refexterna** | Dato enviado en el punto de entrada /facturas/alta |
        | **nombrerazonemisor** | Nombre-razón social del obligado a expedir la factura. |
        | **anulacion** | Indicador que especifica si se trata de una anulación de un registro de facturación con alta previamente generado. Si no se informa, tiene valor "N" (Alta Normal-Inicial). |
        | **subsanacion** | Indicador que especifica si se trata de una subsanación de un registro de facturación de alta previamente generado. Si no se informa, tiene valor "N" (Alta Normal-Inicial). |
        | **rechazoprevio** | Indicador que especifica si se está generando un nuevo registro de facturación de alta subsanado tras haber sido rechazado en el último envío. Si no se informa o el registro de facturación original resultó aceptado o aceptado con errores, tiene valor "N". Los otros posibles valores son "X" cuando el registro de facturación original ha sido rechazado o "S" cuando existe una subsanación previamente rechazada. |
        | **sinregistroprevio** | Indicador que especifica que se trata de la anulación de un registro de facturación de alta (o subsanación de un registro de facturación de anulación previo) cuando este no existe en la AEAT (o en el propio sistema informático, si así procede indicar). Si no se informa este campo se entenderá que tiene valor "N". Este campo forma parte del detalle de las circunstancias de generación de los registros de facturación. | 
        | **tipofactura** | Especificación del tipo de factura: factura completa, simplificada, emitida en sustitución de facturas simplificadas o rectificativa. Opciones: <br> <b>F1</b> - Factura completa <br> <b>F2</b> - Factura Simplificada <br> <b>F3</b> - Factura en sustitución de facturas simplificadas <br> <b>R1</b> - Rectificativa (Error fundado en derecho y Art. 80 Uno Dos y Seis LIVA) <br> <b>R2</b> - Rectificativa (Art. 80.3)<br> <b>R3</b> - Rectificativa (Art. 80.4)<br> <b>R4</b> - Rectificativa (Resto)<br> <b>R5</b> - Rectificativa en facturas simplificadas |
        | **tiporectificativa** | Indica si el tipo de factura rectificativa es por sustitución o diferencia.Opciones:<br><b>S</b> - Por sustitución<br><b>I</b> - Por diferencias |
        | **facturasrectificadas** | Información de facturas rectificadas incluyendo <br> idemisorfactura, numseriefactura, y fechaexpedicionfactura. |
        | **facturassustituidas** | Información de facturas sustituidas incluyendo <br> idemisorfactura, numseriefactura, y fechaexpedicionfactura. |
        | **baserectificada** | Base imponible de la factura. |
        | **cuotarectificada** | Cuota repercutida o soportada de la factura. |
        | **cuotarecargorectificado** | Cuota recargo de equivalencia de la factura. |
        | **fechaoperacion** | Fecha en la que se ha realizado la operación (si difiere de la fecha de expedición). |
        | **descripcionoperacion** | Descripción del objeto de la factura. |
        | **simplificadaArt7273** | Factura simplificada Art. 7.2 y 7.3 del RD 1619/2012. Si no se informa, se asume valor “N". |
        | **sinidentifdestinatarioart61d** | Factura sin identificación del destinatario según Art. 6.1.d) RD 1619/2012. Si no se informa, se asume valor “N". |
        | **macrodato** | Identificador para facturas con base o importe superior al umbral especificado. Si no se informa, se asume valor “N". |
        | **emitidaporterceroodestinatario** | Identificador si la factura ha sido expedida por un tercero o el destinatario. |
        | **terceronombrerazon** | Nombre-razón social del tercero que expide la factura. |
        | **terceronif** | NIF del tercero que expide la factura. |
        | **tercerocodigopais** | Código del país del tercero que expide la factura. |
        | **terceroidtype** | Clave para establecer el tipo de identificación del tercero en el país de residencia. |
        | **terceroid** | Número de identificación del tercero en el país de residencia.|
        | **cupon** | Identificador que especifica si tiene minoración de la base imponible por la concesión de cupones, bonificaciones o descuentos cuando solo se expide el original de la factura. Este campo es necesario porque contribuye a completar el detalle de la tipología de la factura. Si no se informa este campo se entenderá que tiene valor “N”. |
        | **cuotatotal** | Importe total de la cuota (sumatorio de la Cuota Repercutida y Cuota de Recargo de Equivalencia).|
        | **importetotal** |Importe total de la factura. Se detallará la forma de calcularlo en la documentación correspondiente en la sede electrónica de la AEAT (documento de validaciones...)|
        | **cadenaprimerregistro"** |Indicador que especifica que no existe registro de facturación anterior en este sistema informático por tratarse del primer registro de facturación generado en él. En este caso, se informará con el valor "S". Si no se informa este campo se entenderá que no es el primer registro de facturación, en cuyo caso es obligatorio informar los campos de que consta «RegistroAnterior».| 
        | **cadenaidemisorfactura"** |NIF del obligado a expedir la factura a que se refiere el registro de facturación anterior (sea de alta o de anulación) generado en este sistema informático.| 
        | **cadenanumseriefactura** |Nº Serie+Nº Factura que identifica a la factura a que se refiere el registro de facturación anterior (sea de alta o de anulación) generado en este sistema informático| 
        | **cadenafechaexpedicionfactura** |Fecha de expedición de la factura a que se refiere el registro de facturación anterior (sea de alta o de anulación) generado en este sistema informático.| 
        | **cadenahuella** |Primeros 64 caracteres de la huella o «hash» del registro de facturación anterior (sea de alta o de anulación) generado en este sistema informático.| 
        | **huella** |Huella generada para el registro de facturación|  
        | **enviada** | Indica si el registro de facturación se ha enviado al sistema VERIFACTU de la AEAT, con independencia de si este ha resultado correcto o incorrecto. |
        | **fechaportalsif** | Fecha de subida del registro de facturación en la BDD de PortalSIF. |
        | **fechahorahusoenregistro** | Fecha, hora y huso horario de generación del registro de facturación en la BDD de la AEAT. |
        | **estadoregistro** | Especifica si el registro de facturación enviado ha sido admitido correctamente, ha sido rechazado, o se ha aceptado de forma parcial. |
        | **codigoerrorregistro** | Código que identifica el tipo de error producido en el registro de facturación. |
        | **descripcionerrorregistro** | Descripción del error producido en un registro de facturación. |
        | **idfenvios** ||
        | **idfacturasdesglose**<br>(detalle desglose) ||
        | **idffacturas**<br>(detalle desglose) ||
        | **impuesto**<br>(detalle desglose) | Impuesto de aplicación. Si no se informa este campo se entenderá que el impuesto de aplicación es el IVA. Este campo es necesario porque contribuye a completar el detalle de la tipología de la factura.  Opciones: <br> <b>01</b> - IVA <br> <b>02</b> - IPSI <br> <b>03</b> - IGIC <br> <b>05</b> - Otros |
        | **claveregimen**<br>(detalle desglose) | Clave que identificará el tipo de régimen del impuesto o una operación con trascendencia tributaria. |
        | **calificacionoperacion**<br>(detalle desglose) | Clave de la operación sujeta y no exenta o de la operación no sujeta.  Opciones: <br> <b>S1</b> - Operación Sujeta y No exenta - Sin inversión del sujeto pasivo <br> <b>S2</b> - Operación Sujeta y No exenta - Con Inversión del sujeto pasivo <br> <b>N1</b> - Operación No Sujeta artículo 7, 14, otros <br> <b>N2</b> - Operación No Sujeta por Reglas de localización |
        | **operacionexenta**<br>(detalle desglose) | Campo que especifica la causa de exención.<br> <b>E1</b> - Exenta por el artículo 20<br> <b>E2</b> - Exenta por el artículo 21<br> <b>E3</b> - Exenta por el artículo 22<br> <b>E4</b> - Exenta por los artículos 23 y 24<br> <b>E5</b> - Exenta por el artículo 25<br> <b>E6</b> - Exenta por otros |
        | **tipoimpositivo**<br>(detalle desglose) | Porcentaje aplicado sobre la base imponible para calcular la cuota. |
        | **baseimponibleoimportenosujeto**<br>(detalle desglose) | Magnitud dineraria sobre la que se aplica el tipo impositivo / Importe no sujeto. |
        | **baseimponibleacoste**<br>(detalle desglose) | Magnitud dineraria sobre la que se aplica el tipo impositivo en régimen especial de grupos nivel avanzado. |
        | **cuotarepercutida**<br>(detalle desglose) | Cuota resultante de aplicar a la base imponible el tipo impositivo. |
        | **tiporecargoequivalencia**<br>(detalle desglose) | Porcentaje asociado en función del impuesto y tipo impositivo |
        | **cuotarecargoequivalencia**<br>(detalle desglose) | Cuota resultante de aplicar a la base imponible el tipo de recargo de equivalencia. |
      parameters:
        - name: X-Api-Key
          in: header
          required: true
          schema:
            type: string    
        - name: X-Secret-Key
          in: header
          required: true
          schema:
            type: string                             
        - name: fechaInicio
          in: path
          required: true
          description: "Fecha de inicio del rango (formato: DD-MM-YYYY). Si no se especifica, se incluyen todas las facturas desde el inicio."
          schema:
            type: string
            format: date
            example: "01-12-2024"
        - name: fechaFin
          in: path
          required: true
          description: "Fecha de fin del rango (formato: DD-MM-YYYY). Si no se especifica, se incluyen todas las facturas hasta la fecha actual."
          schema:
            type: string
            format: date
            example: "31-12-2024"

      responses:
        '200':
          description: OK      
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/facturasget'
        '401':
          description: "No autorizado"
          

  /facturas/lista_id/{numseriefactura}/{fechaexpedicionfactura}:
    get:
      tags:
        - "facturas"
      summary: "Consulta de las facturas grabadas en la BDD de PortalSIF."
      description: | 
        Obtiene de la BDD los registros de facturación correspondientes a un idfactura de la empresa identificada en la apikey.   
      parameters:
        - name: X-Api-Key
          in: header
          required: true
          schema:
            type: string    
        - name: X-Secret-Key
          in: header
          required: true
          schema:
            type: string                             
        - name: numseriefactura
          in: path
          required: true
          description: "Nº Serie + Nº Factura que identifica a la factura emitida."
          schema:
            type: string
            example: "1"
        - name: fechaexpedicionfactura
          in: path
          required: true
          description: "Fecha de expedición de la factura. (formato: DD-MM-YYYY)."
          schema:
            type: string
            format: date
            example: "31-12-2024"

      responses:
        '200':
          description: OK      
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/facturasget'
        '401':
          description: "No autorizado"

  /facturas/qr/{numseriefactura}/{fechaexpedicionfactura}:
    get:
      tags:
        - "facturas"
      summary: "Obtiene png de qr para una factura dada."
      description: | 
        Obtiene png de qr para una factura dada.
      parameters:
        - name: X-Api-Key
          in: header
          required: true
          schema:
            type: string    
        - name: X-Secret-Key
          in: header
          required: true
          schema:
            type: string                             
        - name: numseriefactura
          in: path
          required: true
          description: "Nº Serie + Nº Factura que identifica a la factura emitida."
          schema:
            type: string
            example: "1"
        - name: fechaexpedicionfactura
          in: path
          required: true
          description: "Fecha de expedición de la factura. (formato: DD-MM-YYYY)."
          schema:
            type: string
            format: date
            example: "31-12-2024"

      responses:
        '200':
          description: OK      
          content:
            image/png:
              schema:
                $ref: '#/components/schemas/qr'
        '401':
          description: "No autorizado"          
