openapi: 3.0.0
info:
  title: Facturación electrónica Apolo1
  description: Servicio de certificación y facturación electrónica en SII integrado a sistema Apolo1.
  version: 0.0.1
servers:
  - url: https://www.facturacion-electronica-api.dev
tags:
  - name: "Certificación"
    description: "Rutas correspondientes al ambiente de certificación."
  - name: "Producción"
    description: "Rutas correspondientes al ambiente de producción."
  - name: "Comunes"
    description: "Rutas comunes para los ambientes de certificación y producción."
paths:
  /api/certificador/generar-dte/set-basico:
    post:
      tags:
        - "Certificación"
      description: Genera DTE en formato XML en base a set básico de pruebas.
      operationId: "setBasico"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document:
                  type: string
                  format: binary
                  description: Set básico en formato .txt extraidos desde el set de pruebas.
                inputs:
                  type: object
                  description: Json con los datos para la carátula, emisor y receptor.
                  properties:
                    caratula:
                      $ref: '#/components/schemas/Caratula'
                    emisor:
                      $ref: '#/components/schemas/Emisor'
                    receptor:
                      $ref: '#/components/schemas/Receptor'
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/factura-exenta:
    post:
      tags:
        - "Certificación"
      description: Genera DTE en formato XML en base a facturas exentas.
      operationId: "facturaExenta"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document:
                  type: string
                  format: binary
                  description: Facturas exentas en formato .txt extraidas desde el set de pruebas.
                inputs:
                  type: object
                  description: Json con los datos para la carátula, emisor y receptor.
                  properties:
                    caratula:
                      $ref: '#/components/schemas/Caratula'
                    emisor:
                      $ref: '#/components/schemas/Emisor'
                    receptor:
                      $ref: '#/components/schemas/Receptor'
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/guia-despacho:
    post:
      tags:
        - "Certificación"
      description: Genera DTE en formato XML en base a guias de despacho.
      operationId: "guiaDespacho"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document:
                  type: string
                  format: binary
                  description: Guias de despacho en formato .txt extraidos desde el set de pruebas.
                inputs:
                  type: object
                  description: Json con los datos para la carátula, emisor y receptor.
                  properties:
                    caratula:
                      $ref: '#/components/schemas/Caratula'
                    emisor:
                      $ref: '#/components/schemas/Emisor'
                    receptor:
                      $ref: '#/components/schemas/Receptor'
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/libro-de-ventas:
    post:
      tags:
        - "Certificación"
      description: Genera DTE en formato XML en base a libro de ventas.
      operationId: "libroDeVentas"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document:
                  type: string
                  format: binary
                  description: Libro de ventas en formato .csv
                inputs:
                  type: object
                  description: Json con los datos para la carátula.
                  properties:
                    caratula:
                      $ref: '#/components/schemas/CaratulaLibros'
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/libro-de-compras:
    post:
      tags:
        - "Certificación"
      description: Genera DTE en formato XML en base a libro de compras.
      operationId: "libroDeCompras"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document:
                  type: string
                  format: binary
                  description: Libro de compras en formato .csv
                inputs:
                  type: object
                  description: Json con los datos para la carátula.
                  properties:
                    caratula:
                      $ref: '#/components/schemas/CaratulaLibros'
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/libro-guias-despacho:
    post:
      tags:
        - "Certificación"
      description: Genera DTE en formato XML en base a libro de guias de despacho.
      operationId: "libroGuiasDespacho"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document:
                  type: string
                  format: binary
                  description: Libro de guias de despacho en formato .csv
                inputs:
                  type: object
                  description: Json con los datos para la carátula.
                  properties:
                    caratula:
                      $ref: '#/components/schemas/CaratulaLibroGuias'
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/simulacion:
    post:
      tags:
        - "Certificación"
      description: Genera DTE en formato XML en base a dtes reales.
      operationId: "simulacion"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                documents:
                  type: array
                  description: Json con los datos del dte.
                  items:
                    $ref: '#/components/schemas/DteProd'
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/intercambio-informacion/envio-recibos:
    post:
      tags:
        - "Certificación"
      description: Realiza intercambio de información con SII.
      operationId: "envioRecibos"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                documents:
                  type: string
                  format: binary
                  description: Archivo de ENVIO_DTE en formato .xml descargado desde SII.
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/intercambio-informacion/recepcion-recibos:
    post:
      tags:
        - "Certificación"
      description: Realiza intercambio de información con SII.
      operationId: "recepcionRecibos"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                documents:
                  type: string
                  format: binary
                  description: Archivo de ENVIO_DTE en formato .xml descargado desde SII.
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/intercambio-informacion/resultado-dte:
    post:
      tags:
        - "Certificación"
      description: Realiza intercambio de información con SII.
      operationId: "resultadoDte"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                documents:
                  type: string
                  format: binary
                  description: Archivo de ENVIO_DTE en formato .xml descargado desde SII.
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/generar-dte/muestras-impresas:
    post:
      tags:
        - "Certificación"
      description: Generación de documentos impresos en formato PDF.
      operationId: "muestrasImpresas"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                documents:
                  type: string
                  format: binary
                  description: Archivo XML generado en la etapa de simulación.
                cedible:
                  type: boolean
                  description: Casilla para generar una muestra impresa cedible del documento enviado.
      responses:
        "200":
          description: "Ok."
        "401":
          description: "No autorizado."
        "422":
          description: "Error de validación."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/certificador/folios:
    get:
      tags:
        - "Certificación"
      description: Obtiene la información de los folios de certificación guardados en el API.
      operationId: "obtenerFoliosCert"
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulGetFoliosResponse"
                example:
                  message: "Información obtenida correctamente."
                  data:
                    id: 1
                    assigned_name: "IUkUMmMKQNyVTKCxTjYBXYnlQF0dIR0TkTIko9Eb.xml"
                    original_name: "Folios-factura-electronica.xml"
                    since: 1
                    until: 20
                    dte_type_id: 2
                    active: 1
                    created_at: "2020-10-26T04:31:41.000000Z"
                    updated_at: "2020-10-26T04:31:41.000000Z"
                    dte_type:
                      id: 2
                      name: "Factura electrónica"
                      code: 33
                      created_at: "2020-10-26T01:30:06.000000Z"
                      updated_at: "2020-10-26T01:30:06.000000Z"
                  code: 200
                  date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado."
        "404":
          description: "Folios no encontrados"
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor"
    post:
      tags:
        - "Certificación"
      description: Guarda y registra en base de datos los folios de certificación que suba el cliente.
      operationId: "guardarFoliosCert"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                folios:
                  type: string
                  format: binary
                  description: Archivo xml de folios.
              required:
                - folios
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulStoreResponse"
                example:
                  message: "Se ha guardado el archivo de folios 'nombre-folios.xml' correctamente."
                  code: 200
                  date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado."
        "405":
          description: "Método no válido"
        "422":
          description: "Error de validación"
        "500":
          description: "Error interno del servidor"
  /api/certificador/folios/utilizados:
    get:
      tags:
        - "Certificación"
      description: Obtiene la información de los folios utilizados en certificación.
      operationId: "obtenerFoliosUtilizadosCert"
      parameters:
        - name: page
          in: query
          required: true
          description: Numero de página a acceder.
          schema:
            type: integer
            format: int64
            minimum: 1
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulGetFoliosResponse"
                example:
                  message: "Información obtenida correctamente."
                  data:
                    current_page: 1
                    data:
                      id: 1
                      dte_type_id: 2
                      sii_shipping_id: 1
                      folio_id: 1
                      folio_number: 1
                      created_at: "2020-10-26T04:32:31.000000Z"
                      updated_at: "2020-10-26T04:32:31.000000Z"
                      folio:
                        id: 1
                        assigned_name: "IUkUMmMKQNyVTKCxTjYBXYnlQF0dIR0TkTIko9Eb.xml"
                        original_name: "Folios-factura-electronica.xml"
                        since: 1
                        until: 20
                        dte_type_id: 2
                        active: 1
                        created_at: "2020-10-26T04:31:41.000000Z"
                        updated_at: "2020-10-26T04:31:41.000000Z"
                      first_page_url: "http://localhost:8000/folios/utilizados?page=1"
                      from: 1
                      last_page: 17
                      last_page_url: "http://localhost:8000/folios/utilizados?page=17"
                      next_page_url: "http://localhost:8000/folios/utilizados?page=2"
                      path: "http://localhost:8000/folios/utilizados"
                      per_page: 1
                      prev_page_url: null
                      to: 1
                      total: 17
                  code: 200
                  date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado."
        "404":
          description: "Folios no encontrados."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/facturador/generar-dte:
    post:
      tags:
        - "Producción"
      description: Genera DTE en formato XML y PDF para ambiente de producción y lo envía automaticamente a SII.
      operationId: "generarDTE"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                documents:
                  type: array
                  description: Json con los datos del o los dtes.
                  items:
                    $ref: '#/components/schemas/DteProd'
      responses:
        "200":
          description: "Ok"
        "401":
          description: "No autorizado."
        "405":
          description: "Método no válido"
        "422":
          description: "Error de validación"
        "500":
          description: "Error interno del servidor"
  /api/facturador/folios:
    get:
      tags:
        - "Producción"
      description: Obtiene la información de los folios guardados de producción en el API.
      operationId: "obtenerFoliosProd"
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulGetFoliosResponse"
                example:
                  message: "Información obtenida correctamente."
                  data:
                    id: 1
                    assigned_name: "IUkUMmMKQNyVTKCxTjYBXYnlQF0dIR0TkTIko9Eb.xml"
                    original_name: "Folios-factura-electronica.xml"
                    since: 1
                    until: 20
                    dte_type_id: 2
                    active: 1
                    created_at: "2020-10-26T04:31:41.000000Z"
                    updated_at: "2020-10-26T04:31:41.000000Z"
                    dte_type:
                      id: 2
                      name: "Factura electrónica"
                      code: 33
                      created_at: "2020-10-26T01:30:06.000000Z"
                      updated_at: "2020-10-26T01:30:06.000000Z"
                  code: 200
                  date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado."
        "405":
          description: "Método no válido."
        "404":
          description: "Folios no encontrados"
        "500":
          description: "Error interno del servidor"
    post:
      tags:
        - "Producción"
      description: Guarda y registra en base de datos los folios de producción que suba el cliente.
      operationId: "guardarFoliosProd"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                folios:
                  type: string
                  format: binary
                  description: Archivo xml de folios.
              required:
                - folios
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulStoreResponse"
                example:
                  message: "Se ha guardado el archivo de folios 'nombre-folios.xml' correctamente."
                  code: 200
                  date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado."
        "405":
          description: "Método no válido."
        "422":
          description: "Error de validación."
        "500":
          description: "Error interno del servidor."
  /api/facturador/folios/utilizados:
    get:
      tags:
        - "Producción"
      description: Obtiene la información de los folios utilizados de producción.
      operationId: "obtenerFoliosUtilizadosProd"
      parameters:
        - name: page
          in: query
          required: true
          description: Numero de página a acceder.
          schema:
            type: integer
            format: int64
            minimum: 1
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulGetFoliosResponse"
                example:
                  message: "Información obtenida correctamente."
                  data:
                    current_page: 1
                    data:
                      id: 1
                      dte_type_id: 2
                      sii_shipping_id: 1
                      folio_id: 1
                      folio_number: 1
                      created_at: "2020-10-26T04:32:31.000000Z"
                      updated_at: "2020-10-26T04:32:31.000000Z"
                      folio:
                        id: 1
                        assigned_name: "IUkUMmMKQNyVTKCxTjYBXYnlQF0dIR0TkTIko9Eb.xml"
                        original_name: "Folios-factura-electronica.xml"
                        since: 1
                        until: 20
                        dte_type_id: 2
                        active: 1
                        created_at: "2020-10-26T04:31:41.000000Z"
                        updated_at: "2020-10-26T04:31:41.000000Z"
                      first_page_url: "http://localhost:8000/folios/utilizados?page=1"
                      from: 1
                      last_page: 17
                      last_page_url: "http://localhost:8000/folios/utilizados?page=17"
                      next_page_url: "http://localhost:8000/folios/utilizados?page=2"
                      path: "http://localhost:8000/folios/utilizados"
                      per_page: 1
                      prev_page_url: null
                      to: 1
                      total: 17
                  code: 200
                  date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado."
        "404":
          description: "Folios no encontrados."
        "405":
          description: "Método no válido."
        "500":
          description: "Error interno del servidor."
  /api/facturador/descargar/zip:
    get:
      tags:
        - "Producción"
      description: Descarga los archivos generados para una factura(xml, pdf, copia cedible)
      operationId: "descargarZIP"
      parameters:
        - name: dte-id
          in: query
          required: true
          description: Id del DTE generado.
          schema:
            type: integer
            format: int64
            minimum: 1
      responses:
        "200":
          description: "Ok"
          content:
            application/zip:
              schema:
                type: string
                format: binary
        "401":
          description: "No autorizado."
        "405":
          description: "Método no válido."
        "422":
          description: "Error de validación."
        "500":
          description: "Error interno del servidor."
  /api/facturador/descargar/pdf:
    get:
      tags:
        - "Producción"
      description: Descarga el archivo pdf generado de una factura
      operationId: "descargarPDF"
      parameters:
        - name: dte-id
          in: query
          required: true
          description: Id del DTE generado.
          schema:
            type: integer
            format: int64
            minimum: 1
      responses:
        "200":
          description: "Ok"
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        "401":
          description: "No autorizado."
        "405":
          description: "Método no válido."
        "422":
          description: "Error de validación."
        "500":
          description: "Error interno del servidor"
  /api/facturador/descargar/xml:
    get:
      tags:
        - "Producción"
      description: Descarga el archivo xml generado de una factura
      operationId: "descargarXML"
      parameters:
        - name: dte-id
          in: query
          required: true
          description: Id del DTE generado.
          schema:
            type: integer
            format: int64
            minimum: 1
      responses:
        "200":
          description: "Ok"
          content:
            application/xml:
              schema:
                type: string
                format: binary
        "401":
          description: "No autorizado."
        "405":
          description: "Método no válido."
        "422":
          description: "Error de validación."
        "500":
          description: "Error interno del servidor"
  /api/registrar:
    post:
      tags:
        - "Comunes"
      description: Registra un cliente en el API.
      operationId: "registrarCliente"
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: "Nombre del cliente"
                email:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: "Correo electronico del cliente"
                company_rut:
                  type: string
                  minimum: 1
                  maximum: 11
                  description: "Rut del cliente(empresa)"
                representative_rut:
                  type: string
                  minimum: 1
                  maximum: 11
                  description: "Rut del representante(usuario)"
                password:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: "Contraseña para autenticarse del cliente"
                logo:
                  type: string
                  format: binary
                  description: Imagen de logo con dimensiones mínimas de 500px de alto y ancho.
              required:
                - name
                - email
                - company_rut
                - representative_rut
                - password
                - logo
      responses:
        "201":
          description: "Created"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulStoreResponse"
                example:
                  message: "Se ha registrado el usuario correctamente."
                  code: 201
                  date: "2020-10-28 19:09:08"
        "405":
          description: "Método no válido"
        "422":
          description: "Error de validación"
        "500":
          description: "Error interno del servidor"
  /api/login:
    post:
      tags:
        - "Comunes"
      description: Autenticar un cliente en el API.
      operationId: "autenticarCliente"
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: "Correo electrónico del cliente."
                password:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: "Contraseña del cliente para autenticarse."
              required:
                - email
                - password
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/Token"
                example:
                  token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAwMFwvYXBpXC9sb2dpbiIsImlhdCI6MTYxNjA5Njg0MSwiZXhwIjoxNjE2MTAwNDQxLCJuYmYiOjE2MTYwOTY4NDEsImp0aSI6IktLaFBDSTB3aW5IaDR0aW4iLCJzdWIiOjEsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjciLCJ1c2VyX2lkIjoxfQ.crDoNue627Hry57zTmgNp5uEwmu-9MMOtoBp0L9p-1o"
                  toke_type: "bearer"
                  expires_in: "3600"
        "401":
          description: "Cliente no autorizado"
        "405":
          description: "Método no válido"
        "422":
          description: "Error de validación"
        "500":
          description: "Error interno del servidor"
  /api/certificado:
    get:
      tags:
        - "Comunes"
      description: Obtiene la información del certificado guardado en API.
      operationId: "obtenerCertificado"
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulGetCertificateResponse"
              example:
                message: "Información obtenida correctamente."
                data:
                  id: 1
                  assigned_name: "certificado.p12"
                  original_name: "Certificado_msf_2020-2023.p12"
                  exp_date: "2023-04-28 19:11:00"
                  email: "maximiliano.sanchez@websup.cl"
                  cn_name: "MAXIMILIANO SÁNCHEZ  FAZIO"
                code: 200
                date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado"
        "404":
          description: "Certificado no encontrado"
        "405":
          description: "Método no válido"
        "500":
          description: "Error interno del servidor"
    post:
      tags:
        - "Comunes"
      description: Guarda y registra en base de datos el certificado y contraseña del cliente.
      operationId: "guardadoCertificado"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                firmaElectronica:
                  type: string
                  format: binary
                  description: Archivo en formato .p12 correspondiente al certificado digital.
                password:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: Contraseña del certificado digital
              required:
                - firmaElectronica
                - password
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulGetCertificateResponse"
              example:
                message: "Se ha guardado el certificado 'nombre-certificado.p12' correctamente."
                code: 200
                date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado"
        "405":
          description: "Método no válido"
        "422":
          description: "Error de validación"
        "500":
          description: "Error interno del servidor"
    delete:
      tags:
        - "Comunes"
      description: Elimina el certificado del cliente, según el id que se envíe.
      operationId: "eliminarCertificado"
      parameters:
        - name: id
          in: query
          required: true
          description: Id de certificado.
          schema:
            type: integer
            format: int64
            minimum: 1
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulGetCertificateResponse"
              example:
                message: "Certificado eliminado correctamente."
                code: 200
                date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado"
        "404":
          description: "Registro no encontrado"
        "405":
          description: "Método no válido"
        "422":
          description: "Error de validación"
        "500":
          description: "Error interno del servidor"
  /api/estado-envio-dte:
    get:
      tags:
        - "Comunes"
      description: Consulta al SII por el estado de un envio de DTE
      operationId: "consultarEnvioDTE"
      parameters:
        - name: track-id
          in: query
          required: true
          description: Track id del envío.
          schema:
            type: integer
            format: int64
            minimum: 1
      responses:
        "200":
          description: "Ok"
          content:
            application/json:
              schema:
                type: "object"
                items:
                  $ref: "#/components/schemas/SuccessfulGetEstadoEnvioResponse"
              example:
                message: "Consulta de estado exitosa"
                data:
                  estado: "EPR"
                  error_code: ""
                  glosa: "Envió Procesado"
                  numero_atencion: "123141"
                  track_id: "103497870"
                code: 200
                date: "2020-10-28 19:09:08"
        "401":
          description: "No autorizado"
        "404":
          description: "Envío no encontrado"
        "405":
          description: "Método no válido"
        "500":
          description: "Error interno del servidor"
  /api/actualizar/usuario:
    post:
      tags:
        - "Comunes"
      description: Actualiza datos del usuario
      operationId: "actualizarUsuario"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: "Nombre del cliente"
                email:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: "Correo electronico del cliente"
                company_rut:
                  type: string
                  minimum: 1
                  maximum: 11
                  description: "Rut del cliente(empresa)"
                representative_rut:
                  type: string
                  minimum: 1
                  maximum: 11
                  description: "Rut del representante(usuario)"
                password:
                  type: string
                  minimum: 1
                  maximum: 20
                  description: "Contraseña para autenticarse del cliente"
                logo:
                  type: string
                  format: binary
                  description: Imagen de logo con dimensiones mínimas de 500px de alto y ancho.
      responses:
        "200":
          description: "Ok"
        "401":
          description: "No autorizado"
        "422":
          description: "Error de validación"
        "405":
          description: "Método no válido"
        "500":
          description: "Error interno del servidor"
  /api/dividir/set-pruebas:
    post:
      tags:
        - "Comunes"
      description: Divide set de pruebas entregado por SII en archivos de sets por tipo.
      operationId: "dividirSetPruebas"
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document:
                  type: string
                  format: binary
                  description: Archivo de set de pruebas entregado por SII.
      responses:
        "200":
          description: "Ok"
        "401":
          description: "No autorizado"
        "422":
          description: "Error de validación"
        "405":
          description: "Método no válido"
        "500":
          description: "Error interno del servidor"
components:
  schemas:
    Caratula:
      type: object
      properties:
        rutEnvia:
          type: string
        rutReceptor:
          type: string
        fchResol:
          type: string
        nroResol:
          type: string
      example:
        rutEnvia: "12345678-9"
        rutReceptor: "98765432-1"
        fchResol: "2020-08-21"
        nroResol: "0"
    Emisor:
      type: object
      properties:
        rutEmisor:
          type: string
        rznSoc:
          type: string
        giroEmis:
          type: string
        acteco:
          type: string
        dirOrigen:
          type: string
        cmnaOrigen:
          type: string
      example:
        rutEmisor: "76267813-6"
        rznSoc: "TECNOLOGIA DE LA INFORMACION WEDEV LIMITADA"
        giroEmis: "CONSTR.PAGINAS WEB SISTEMAS DE ADM.INFORMAY PORTALES INT. ASS.TEC.COMP"
        acteco: "702000"
        dirOrigen: "11 ORIENTE 2448   PARQUE TOBALABA"
        comnaOrigen: "PENALOLEN"
    Receptor:
      type: object
      properties:
        rutRecep:
          type: string
        rznSocRecep:
          type: string
        giroRecep:
          type: string
        dirRecep:
          type: string
        cmnaRecep:
          type: string
      example:
        rutRecep: "76042014-K"
        rznSocRecep: "WALMART CHILE S.A."
        giroRecep: "FABRICACION DE INSTRUMENTOS Y MATERIALES"
        dirRecep: "AV. EDUARDO FREI MONTALVA 8301"
        cmnaRecep: "QUILICURA"
    CaratulaLibros:
      properties:
        rutEmisorLibro:
          type: string
        rutEnvia:
          type: string
        periodoTributario:
          type: string
        fchResol:
          type: string
        nroResol:
          type: string
        tipoOperacion:
          type: string
        tipoLibro:
          type: string
        tipoEnvio:
          type: string
        folioNotificacion:
          type: string
    CaratulaLibroGuias:
      properties:
        rutEmisorLibro:
          type: string
        fchResol:
          type: string
        nroResol:
          type: string
        folioNotificacion:
          type: string
        periodoTributario:
          type: string
    Factura:
      properties:
        Encabezado:
          $ref: "#/components/schemas/Encabezado"
        Detalle:
          $ref: "#/components/schemas/Detalle"
    NotaCredito:
      properties:
        Encabezado:
          $ref: "#/components/schemas/Encabezado"
        Detalle:
          $ref: "#/components/schemas/Detalle"
        Referencia:
          $ref: "#/components/schemas/Referencia"
    Referencia:
      type: array
      items:
        type: object
        properties:
          TpoDocRef:
            type: integer
          FolioRef:
            type: integer
          CodRef:
            type: integer
          RazonRef:
            type: string
        example:
          TpoDocRef: "61"
          FolioRef: "111"
          CodRef: "1"
          RazonRef: "ANULA DOCUMENTO DE LA REFERENCIA"
    DteProd:
      properties:
        Caratula:
          $ref: "#/components/schemas/Caratula"
        Encabezado:
          $ref: "#/components/schemas/Encabezado"
        Emisor:
          $ref: "#/components/schemas/Emisor"
        Receptor:
          $ref: "#/components/schemas/Receptor"
        Detalle:
          $ref: "#/components/schemas/Detalle"
    Encabezado:
      type: object
      properties:
        IdDoc:
          type: object
          properties:
            TipoDTE:
              type: integer
          example:
            TipoDTE: "33"
    Detalle:
      type: array
      items:
        type: object
        properties:
          NmbItem:
            type: string
          QtyItem:
            type: integer
          PrcItem:
            type: integer
        example:
          NmbItem: "wup 100"
          QtyItem: "1"
          PrcItem: "10"
    Token:
      type: "object"
      properties:
        token:
          type: "string"
        token_type:
          type: "string"
        expires_in:
          type: "integer"
          format: "int32"
    SuccessfulStoreResponse:
      type: "object"
      properties:
        message:
          type: "string"
        code:
          type: "integer"
          format: "int32"
        date:
          type: "string"
    SuccessfulGetFoliosResponse:
      type: "object"
      properties:
        message:
          type: "string"
        data:
          $ref: "#/components/schemas/Folio"
        code:
          type: "integer"
          format: "int32"
        date:
          type: "string"
    SuccessfulGetCertificateResponse:
      type: "object"
      properties:
        message:
          type: "string"
        data:
          $ref: "#/components/schemas/Certificate"
        code:
          type: "integer"
          format: "int32"
        date:
          type: "string"
    SuccessfulGetEstadoEnvioResponse:
      type: "object"
      properties:
        message:
          type: "string"
        data:
          $ref: "#/components/schemas/EstadoEnvio"
        code:
          type: "integer"
          format: "int32"
        date:
          type: "string"
    Certificate:
      type: "object"
      properties:
        id:
          type: "integer"
          format: "int32"
        assigned_name:
          type: "string"
        original_name:
          type: "string"
        exp_date:
          type: "string"
        email:
          type: "string"
        cn_name:
          type: "string"
    Folio:
      type: "object"
      properties:
        id:
          type: "integer"
          format: "int32"
        assigned_name:
          type: "string"
        original_name:
          type: "string"
        since:
          type: "integer"
        until:
          type: "integer"
        dte_type_id:
          type: "integer"
        active:
          type: "integer"
        created_at:
          type: "string"
        updated_at:
          type: "string"
        dte_type:
          $ref: "#/components/schemas/DteType"
    DteType:
      type: "object"
      properties:
        id:
          type: "integer"
          format: "int32"
        name:
          type: "string"
        code:
          type: "integer"
        created_at:
          type: "string"
        updated_at:
          type: "string"
    EstadoEnvio:
      type: "object"
      properties:
        estado:
          type: "string"
        error_code:
          type: "string"
        glosa:
          type: "string"
        numero_atencion:
          type: "string"
        track_id:
          type: "string"
  securitySchemes:
    Bearer:
      type: apiKey
      name: Authorization
      in: header
security:
  - Bearer: []
