openapi: 3.1.0
info:
  title: Signt
  description: >
    ### Descripción

    Servicio para generar documentos digitales totalmente customizables y poder
    firmarlos con NOM 151
  version: stable
servers:
  - url: https://api.test.rem.tools/signt
    description: Sandbox Environment
tags:
  - name: templates
    description: >
      Con estos endpoint se manejan todos los templates que son la base para la
      construcción de documentos,

      desde la creación de la base a través de un documento PDF así como el
      nombre y la descripción

      del propósito de este template.
    x-displayName: Templates
  - name: template-elements
    description: >
      Con estos endpoint se manejan todos los elementos de los templates para
      indicar los campos

      personalizables de los documentos, desde imágenes, texto y hasta firmas
      así como las posiciones

      en el documento de estos.
    x-displayName: Elementos de Template
  - name: documents
    description: >
      Manejo de los documentos ya sean creados a partir de templates o
      documentos externos.
    x-displayName: Documentos
  - name: external-documents
    description: >
      En este apartado se se crean documentos a partir de PDFs ya generados,
      solo para que se

      añadan las firmas de los firmantes.
    x-displayName: Creación de Documentos
  - name: digital-signature
    description: |
      Endpoints para el manejo de elementos relacionados con la firma digital
    x-displayName: Proceso de firmado
  - name: document-elements
    description: >
      Apartado para el manejo de los valores que toman los campos a llenar de un
      template para un documento en específico
    x-displayName: Elementos de Documento
  - name: signers
    description: >
      En este apartado se manejan los firmantes para cada documento así como la
      creación de token para

      el uso de los accesos públicos
    x-displayName: Firmantes
  - name: reviewers
    description: >
      En este apartado se manejan los revisores para cada documento, estos
      pueden ser asignados a un documento

      para que puedan aprobarlo o rechazarlo, así como el tiempo que tienen para
      aprobarlo.
    x-displayName: Revisores
  - name: document-events
    description: >
      En este apartado se pueden modificar los elementos del historial de
      eventos que aparecen en

      la hoja extra de los documentos certificados con NOM 151, estos pueden
      incluir texto acompañado

      de imágenes para una mejor interpretación.
    x-displayName: Eventos de Documento
  - name: endorsements
    description: >
      En este apartado se pueden crear los endosos para los documentos, para que
      estos puedan ser

      transmitidos a otras personas o empresas, así como la creación de un token
      en blockchain para

      la verificación de estos endosos.
    x-displayName: Endosos
  - name: batch-processes
    description: >
      En este apartado se pueden crear procesos por lotes para la firma de
      documentos y endosos con

      FIEL
    x-displayName: Procesos por Lotes
  - name: external
    description: >
      En este apartado se sellan documentos solo con los certificados y no se
      almacena ningún archivo

      de los documentos sellados, solo se guardan los datos referentes a los
      certificados y

      los hash de los documentos
    x-displayName: NOM 151
  - name: batch-processes
    description: |
      En este apartado se pueden firmar documentos con FIEL de manera masiva
    x-displayName: Batch
  - name: public
    description: Endpoints que no requieren autorización del ApiKey de Rem-Tools
    x-displayName: Público
  - name: webhooks
    description: >-
      Webhooks que se envían al configurar el campo callback_url en los
      documentos
    x-displayName: Webhooks
x-tagGroups:
  - name: Manejo de Templates
    tags:
      - templates
      - template-elements
  - name: Manejo de Documentos
    tags:
      - documents
      - document-elements
      - document-events
  - name: Documentos Externos
    tags:
      - external-documents
  - name: Firma Digital
    tags:
      - digital-signature
      - signers
      - reviewers
  - name: Otros
    tags:
      - external
      - batch-processes
      - public
      - webhooks
  - name: Endosos
    tags:
      - endorsements
  - name: Procesos por Lotes
    tags:
      - batch-processes
paths:
  /templates:
    get:
      operationId: getTemplates
      security:
        - apiKeyAuth: []
      parameters:
        - in: query
          name: search
          schema:
            type: string
            example: test
      tags:
        - templates
      summary: Obtener una lista de templates
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/templates?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/templates?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/templates
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Template'
    post:
      operationId: createTemplate
      security:
        - apiKeyAuth: []
      summary: Crear un nuevo templete
      tags:
        - templates
      requestBody:
        description: Una petición multipart/form-data para crear un template
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del template
                  example: Template example
                description:
                  type: string
                  description: Descripción del template
                  example: Template usado de ejemplo
                template:
                  type: string
                  description: El archivo PDF del template
                  format: binary
                template_tmp_id:
                  type: string
                  format: uuid
                  description: >-
                    Uuid del archivo si se subio con el api de archivos
                    temporales
            encoding:
              template:
                contentType: application/pdf
      responses:
        '201':
          description: Template creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    allOf:
                      - $ref: '#/components/schemas/Template'
                      - type: object
                        properties:
                          template:
                            type: string
                            description: URL temporal para descargar el template
                            example: >-
                              https://signt-platform-storage.s3.us-west-2.amazonaws.com/13/Cara%CC%81tula-de-Contrato.pdf?response-content-type=application%2Foctet-stream&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIG%2Bpoy2pJzlOR%2FZv3gxPAliR24keVQo%2BLAGpv6H1jSs7AiEAmeEmkSVZ2IK4rYBf6rIfEnOsEXXzDZVb0%2FQj70oQ%2Bpoq2gEIMhABGgwwMDE4OTU1NjA3NTkiDD%2BEpbp%2BPi8C1l7ftCq3ASAJ33pCCMEKu%2FnMaFE66YLK5vEIUGeHu2KAo2Gyj8QELB4PKc7dm%2BRXVl407jpFpwVvvvqioh86Mwg0GphoTkPiguEQwXMMI1Z1ZzOu93ozLWg0h2YfcF8b4qU3rRbR5Un0WehwfjCThzJXRFoFfcvFhKzLswBDR3D9LGowokJb0x7hOcK9bGTmBz2A0MtknXliffuIstawdkR%2BWjD2pM69hBPpbWmFU82uObuX%2Fc7qwOvkXIzGbDDQ28iCBjrhAVVyL517jKJ4zpMFwY%2BXgeREpWmCiHeVyktsav%2F9A69CoORunRtQmTP1OrpMU3%2BOev7y875JqlgsgGra4ozecQYhrRcu1l59El1vIWQ%2FeGHq%2BaieTV2LLoDcdXxM%2F72S2daShR%2FeWcydKUxbIRqmrwYhDHXWUjCPFRYqmTn1SgKEn6EKlOjdwWEXAml1eF4ufkIaGte1rX%2Bo%2FKMegtZ9gI0cb%2BotnPvGpovmzRhKaN%2FTnP6OPVkiooeC94xsWA6jF2fZG9ZHiSZL6HrtVV0sCSezVDLy1nBx7ik%2Bo0HycEt3kQ%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQA4H36Y3RAUEDLOH%2F20210317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210317T172740Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Signature=0949718ab552c4add436b6e2d52326fa41440ce8b595398e28f4970262d8cffe
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      name:
                        - The name field is required.
  /templates/{id}:
    get:
      operationId: showTemplate
      security:
        - apiKeyAuth: []
      summary: Obtener los detalles de un template
      tags:
        - templates
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            description: El ID del template
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    allOf:
                      - $ref: '#/components/schemas/Template'
                      - type: object
                        properties:
                          template:
                            type: string
                            description: URL temporal para descargar el template
                            example: >-
                              https://signt-platform-storage.s3.us-west-2.amazonaws.com/13/Cara%CC%81tula-de-Contrato.pdf?response-content-type=application%2Foctet-stream&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIG%2Bpoy2pJzlOR%2FZv3gxPAliR24keVQo%2BLAGpv6H1jSs7AiEAmeEmkSVZ2IK4rYBf6rIfEnOsEXXzDZVb0%2FQj70oQ%2Bpoq2gEIMhABGgwwMDE4OTU1NjA3NTkiDD%2BEpbp%2BPi8C1l7ftCq3ASAJ33pCCMEKu%2FnMaFE66YLK5vEIUGeHu2KAo2Gyj8QELB4PKc7dm%2BRXVl407jpFpwVvvvqioh86Mwg0GphoTkPiguEQwXMMI1Z1ZzOu93ozLWg0h2YfcF8b4qU3rRbR5Un0WehwfjCThzJXRFoFfcvFhKzLswBDR3D9LGowokJb0x7hOcK9bGTmBz2A0MtknXliffuIstawdkR%2BWjD2pM69hBPpbWmFU82uObuX%2Fc7qwOvkXIzGbDDQ28iCBjrhAVVyL517jKJ4zpMFwY%2BXgeREpWmCiHeVyktsav%2F9A69CoORunRtQmTP1OrpMU3%2BOev7y875JqlgsgGra4ozecQYhrRcu1l59El1vIWQ%2FeGHq%2BaieTV2LLoDcdXxM%2F72S2daShR%2FeWcydKUxbIRqmrwYhDHXWUjCPFRYqmTn1SgKEn6EKlOjdwWEXAml1eF4ufkIaGte1rX%2Bo%2FKMegtZ9gI0cb%2BotnPvGpovmzRhKaN%2FTnP6OPVkiooeC94xsWA6jF2fZG9ZHiSZL6HrtVV0sCSezVDLy1nBx7ik%2Bo0HycEt3kQ%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQA4H36Y3RAUEDLOH%2F20210317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210317T172740Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Signature=0949718ab552c4add436b6e2d52326fa41440ce8b595398e28f4970262d8cffe
                          elements:
                            type: array
                            description: Arreglo de campos del template
                            items:
                              $ref: '#/components/schemas/TemplateElement'
        '404':
          description: No se encontró el template solicitado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el template
                    example: No query results for model [App\Models\Template] 5
    put:
      operationId: updateTemplate
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del template
      summary: Actualizar un template
      tags:
        - templates
      requestBody:
        description: Una petición multipart/form-data para actualizar template
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: Template ejemplo
                description:
                  type: string
                  example: Template ejemplo
                template:
                  type: string
                  format: binary
            encoding:
              template:
                contentType: application/pdf
      responses:
        '200':
          description: Template actualizado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    allOf:
                      - $ref: '#/components/schemas/Template'
                      - type: object
                        properties:
                          elements:
                            type: array
                            description: Arreglo de campos del template
                            items:
                              $ref: '#/components/schemas/TemplateElement'
        '404':
          description: No se encontró el template solicitado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el template
                    example: No query results for model [App\Models\Template] 5
    delete:
      operationId: deleteTemplate
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del template
      summary: Borrar un template
      tags:
        - templates
      responses:
        '200':
          description: Template borrado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa true
                    example: true
                  result:
                    type: string
                    description: Borrado del template
                    example: Ok
        '404':
          description: No se encontró el template solicitado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el template
                    example: No query results for model [App\Models\Template] 5
  /templates/{id}/change-base-file:
    post:
      operationId: changeTemplateBaseFile
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del template
      summary: Cambiar el archivo base de un template
      tags:
        - templates
      requestBody:
        description: >-
          Una petición multipart/form-data para cambiar el archivo base del
          template
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                template:
                  type: string
                  format: binary
            encoding:
              template:
                contentType: application/pdf
      responses:
        '200':
          description: Template actualizado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    allOf:
                      - $ref: '#/components/schemas/Template'
                      - type: object
                        properties:
                          template:
                            type: string
                            description: >-
                              URL temporal para descargar el template
                              actualizado
                            example: >-
                              https://signt-platform-storage.s3.us-west-2.amazonaws.com/13/Cara%CC%81tula-de-Contrato.pdf?response-content-type=application%2Foctet-stream&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIG%2Bpoy2pJzlOR%2FZv3gxPAliR24keVQo%2BLAGpv6H1jSs7AiEAmeEmkSVZ2IK4rYBf6rIfEnOsEXXzDZVb0%2FQj70oQ%2Bpoq2gEIMhABGgwwMDE4OTU1NjA3NTkiDD%2BEpbp%2BPi8C1l
        '404':
          description: No se encontró el template solicitado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el template
                    example: No query results for model [App\Models\Template] 5
  /documents:
    get:
      operationId: getDocuments
      security:
        - apiKeyAuth: []
      parameters:
        - in: query
          name: search
          schema:
            type: string
            example: test
      summary: Obtener una lista de documentos
      tags:
        - documents
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/documents?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/documents?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/documents
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Document'
    post:
      operationId: createDocument
      security:
        - apiKeyAuth: []
      summary: Crear un nuevo documento
      tags:
        - documents
      requestBody:
        description: Una petición application/json para crear un document
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: El nombre del Documento
                  example: Documento ejemplo
                template_id:
                  type: string
                  description: El ID del template relacionado con el documento
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                send_email:
                  type: boolean
                  description: >-
                    Envía un email a todos los firmantes registrados después de
                    sellar con nom 151
                  example: true
                autosigning:
                  type: boolean
                  description: >-
                    Bandera que indica si se firmara con NOM 151 el documento al
                    terminar los usuarios de firmar
                  example: false
                callback_url:
                  type: string
                  description: >-
                    URL en caso de que se quiera hacer llegar el documento al
                    terminar el firmado de NOM 151.
                  example: http://example.com
                expires_in:
                  type: integer
                  description: >-
                    Tiempo en minutos que durarán los tokens vinculados a este
                    documento
                  example: 15
                elements:
                  type: array
                  description: Elementos del documento llenados, solo tipo Text
                  items:
                    type: object
                    properties:
                      template_element_id:
                        type: string
                        description: >-
                          El ID del elemento de template relacionado, solo
                          elementos de template tipo texto
                        example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                      value:
                        type: string
                        description: Valor de texto del elemento
                        example: '%16'
      responses:
        '201':
          description: Documento creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    allOf:
                      - $ref: '#/components/schemas/Document'
                      - type: object
                        properties:
                          elements:
                            type: array
                            description: Elementos del documento llenados
                            items:
                              $ref: '#/components/schemas/DocumentElement'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      name:
                        - The name field is required.
  /documents/create-from-file:
    post:
      operationId: createDocumentFromFile
      security:
        - apiKeyAuth: []
      summary: Crear un nuevo documento en base a un archivo
      tags:
        - external-documents
      requestBody:
        description: Una petición multipart/form-data para crear un documento
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document_name:
                  type: string
                  example: Document example
                file:
                  type: string
                  format: binary
                send_email:
                  type: boolean
                  example: true
                autosigning:
                  type: boolean
                  description: >-
                    Bandera que indica si se firmara con NOM 151 el documento al
                    terminar los usuarios de firmar
                  example: false
                callback_url:
                  type: string
                  description: >-
                    URL en caso de que se quiera hacer llegar el documento al
                    terminar el firmado de NOM 151.
                  example: http://example.com
                expires_in:
                  type: integer
                  example: 15
            encoding:
              file:
                contentType: application/pdf
      responses:
        '200':
          description: Documento creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Document'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      document_name:
                        - The document name field is required.
  /documents/verify/sign:
    post:
      operationId: verifyDocument
      security:
        - apiKeyAuth: []
      summary: Verifica que un documento haya sido firmado
      tags:
        - digital-signature
      requestBody:
        description: Una petición multipart/form-data con el documento a validar
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: Archivo PDF a verificar
                file_tmp_id:
                  type: string
                  format: uuid
                  description: >-
                    Uuid del archivo si se subio con el api de archivos
                    temporales
                sha256:
                  type: string
                  format: sha256
                  example: >-
                    65f45505a560f8aefbfc0ac31ffcddab1183b144b607df41c7b3c3424c05d4e9
            encoding:
              file:
                contentType: application/pdf
      responses:
        '200':
          description: Validación exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      match:
                        type: boolean
                        description: Verificación que el documento no ha sido modificado
                        example: true
                      hash:
                        type: string
                        description: Hash sha256 del documento verificado
                        example: >-
                          f65cf09147392b539fd7fb12d6d8c2b6ffd3f403166e577bcfa04ec9fe0aadde
                      timestamp_info:
                        type: string
                        description: Información del obtenida del certificado de NOM 151
                        example: "signer cert serial number: 2A\r\nsigner cert issuer: L=Alvaro Obregon,ST=Ciudad de Mexico,C=MX,PostalCode=01030,STREET=Insurgentes Sur 1940\\, Col. Florida,CN=Autoridad Certificadora Raiz Segunda de Secretaria de Economia,OU=Direccion General de Normatividad Mercantil,O=Secretaria de Economia,E=acr2se@economia.gob.mx\r\ngenTime: 2021-08-24T21:28:57Z\r\ncertificates count: 1\r\nall certificates: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc; SKI=c2c859d69b38a1c13aa1bdab038e60bb32300210\r\nembedded certificate: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc; SKI=c2c859d69b38a1c13aa1bdab038e60bb32300210\r\nadding to certificate chain: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc\r\n1.2.840.113549.1.9.4=<Set oid='1.2.840.113549.1.9.4' name='pkcs9_messageDigest'></Set>\r\n1.2.840.113549.1.9.3=<Set oid='1.2.840.113549.1.9.3' name='pkcs9_contentType'></Set>\r\n1.2.840.113549.1.9.52=<Set oid='1.2.840.113549.1.9.52'></Set>\r\n1.2.840.113549.1.9.5=<Set oid='1.2.840.113549.1.9.5' name='pkcs9_signingTime'></Set>\r\n1.2.840.113549.1.9.16.2.47=<Set oid='1.2.840.113549.1.9.16.2.47' name='id_aa_signingCertificateV2'></Set>\r\n"
                      document:
                        $ref: '#/components/schemas/Document'
        '404':
          description: Documento no encontrado en el registro
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el documento
                    example: Document PDF not found
  /documents/verify/fiel-document:
    post:
      operationId: verifyFielDocument
      summary: Verificar documento firmado con FIEL
      tags:
        - documents
      security:
        - apiKeyAuth: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              oneOf:
                - type: object
                  properties:
                    file:
                      type: string
                      format: binary
                      description: archivo pdf a verificar, tamaño maximo 2mb
                - type: object
                  properties:
                    file_tmp_id:
                      type: string
                      format: uuid
                      description: >-
                        Uuid del archivo almacenado con el api de archivos
                        temporales
      responses:
        '200':
          description: Documento validado con exito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  result:
                    type: object
                    properties:
                      match:
                        type: boolean
                        description: Verificación que el documento no ha sido modificado
                        example: true
                      hash:
                        type: string
                        description: Hash sha256 del documento verificado
                        example: >-
                          f65cf09147392b539fd7fb12d6d8c2b6ffd3f403166e577bcfa04ec9fe0aadde
                      timestamp_info:
                        type: string
                        description: Información del obtenida del certificado de NOM 151
                        example: "signer cert serial number: 2A\r\nsigner cert issuer: L=Alvaro Obregon,ST=Ciudad de Mexico,C=MX,PostalCode=01030,STREET=Insurgentes Sur 1940\\, Col. Florida,CN=Autoridad Certificadora Raiz Segunda de Secretaria de Economia,OU=Direccion General de Normatividad Mercantil,O=Secretaria de Economia,E=acr2se@economia.gob.mx\r\ngenTime: 2021-08-24T21:28:57Z\r\ncertificates count: 1\r\nall certificates: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc; SKI=c2c859d69b38a1c13aa1bdab038e60bb32300210\r\nembedded certificate: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc; SKI=c2c859d69b38a1c13aa1bdab038e60bb32300210\r\nadding to certificate chain: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc\r\n1.2.840.113549.1.9.4=<Set oid='1.2.840.113549.1.9.4' name='pkcs9_messageDigest'></Set>\r\n1.2.840.113549.1.9.3=<Set oid='1.2.840.113549.1.9.3' name='pkcs9_contentType'></Set>\r\n1.2.840.113549.1.9.52=<Set oid='1.2.840.113549.1.9.52'></Set>\r\n1.2.840.113549.1.9.5=<Set oid='1.2.840.113549.1.9.5' name='pkcs9_signingTime'></Set>\r\n1.2.840.113549.1.9.16.2.47=<Set oid='1.2.840.113549.1.9.16.2.47' name='id_aa_signingCertificateV2'></Set>\r\n"
                      document:
                        $ref: '#/components/schemas/Document'
        '400':
          description: Documento no firmado con NOM 151
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se ha firmado el documento
                    example: Document has not been signed
        '404':
          description: Documento no encontrado en el registro
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el documento
                    example: Document PDF not found
  /documents/verify/fiel-signature:
    post:
      operationId: verifyFielSignature
      summary: Verificar firma FIEL en un documento
      tags:
        - documents
      security:
        - apiKeyAuth: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                signature:
                  type: string
                  format: base64
                  description: >-
                    Sello digital de la firma FIEL que aparece en el documento
                    descriptivo
                cer:
                  type: string
                  format: binary
                  description: Archivo .cer de la FIEL que se desea validar
                fiel_document:
                  type: string
                  format: binary
                  description: Archivo pdf que se firma con la fiel
                fiel_doc_tmp_id:
                  type: string
                  format: uuid
                  description: >-
                    Uuid del archivo si se subio con el api de archivos
                    temporales
      responses:
        '200':
          description: Firma FIEL verificada
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  result:
                    type: object
                    properties:
                      match:
                        type: boolean
                        example: true
                        description: >-
                          Indica si el sello digital y el archivo .cer
                          corresponden con una firma del archivo PDF
        '400':
          description: No se pudo validar la firma
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se ha firmado el documento
                    example: >-
                      Could not verify signature, please check your certificate
                      and digital signature.
  /documents/{id}:
    get:
      operationId: showDocument
      security:
        - apiKeyAuth: []
      summary: Obtener los detalles de un documento
      tags:
        - documents
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del Documento
        - in: query
          name: with_template_elems
          schema:
            type: boolean
            example: false
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: array
                    items:
                      allOf:
                        - $ref: '#/components/schemas/Document'
                        - type: object
                          properties:
                            elements:
                              $ref: '#/components/schemas/DocumentElement'
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el documento
                    example: No query results for model [App\Models\Document] 8
    put:
      operationId: updateDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del Documento
      summary: Actualizar un document
      tags:
        - documents
      requestBody:
        description: Una petición application/json para actualizar un documento
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: El nombre del Documento
                  example: Documento ejemplo
                template_id:
                  type: string
                  description: El ID del template relacionado a este documento
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                send_email:
                  type: boolean
                  description: >-
                    Envía un email a todos los firmantes registrados después de
                    sellar con nom 151
                  example: true
                autosigning:
                  type: boolean
                  description: >-
                    Bandera que indica si se firmara con NOM 151 el documento al
                    terminar los usuarios de firmar
                  example: false
                callback_url:
                  type: string
                  description: >-
                    URL en caso de que se quiera hacer llegar el documento al
                    terminar el firmado de NOM 151.
                  example: http://example.com
                expires_in:
                  type: integer
                  description: >-
                    Tiempo en minutos que durarán los tokens vinculados a este
                    documento
                  example: 15
      responses:
        '200':
          description: Documento actualizado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Document'
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  error:
                    type: string
                    description: Informe del error que no se encontró el documento
                    example: No query results for model [App\Models\Document] 8
    delete:
      operationId: deleteDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del Documento
      summary: Borrar un document
      tags:
        - documents
      responses:
        '200':
          description: Documento eliminado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    description: Documento borrado
                    example: Ok
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el documento
                    example: No query results for model [App\Models\Document] 8
  /documents/{id}/sign:
    get:
      operationId: signDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del documento
      summary: Firma un documento con la NOM 151
      tags:
        - digital-signature
      responses:
        '200':
          description: Documento firmado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: true
                  result:
                    oneOf:
                      - type: object
                        properties:
                          document_url:
                            type: string
                            description: URL temporal de descarga
                            example: >-
                              https://signt-platform-storage.s3.us-west-2.amazonaws.com/36/Caratula-16-marzo.pdf?response-content-type=application%2Foctet-stream&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIG%2Bpoy2pJzlOR%2FZv3gxPAliR24keVQo%2BLAGpv6H1jSs7AiEAmeEmkSVZ2IK4rYBf6rIfEnOsEXXzDZVb0%2FQj70oQ%2Bpoq2gEIMhABGgwwMDE4OTU1NjA3NTkiDD%2BEpbp%2BPi8C1l7ftCq3ASAJ33pCCMEKu%2FnMaFE66YLK5vEIUGeHu2KAo2Gyj8QELB4PKc7dm%2BRXVl407jpFpwVvvvqioh86Mwg0GphoTkPiguEQwXMMI1Z1ZzOu93ozLWg0h2YfcF8b4qU3rRbR5Un0WehwfjCThzJXRFoFfcvFhKzLswBDR3D9LGowokJb0x7hOcK9bGTmBz2A0MtknXliffuIstawdkR%2BWjD2pM69hBPpbWmFU82uObuX%2Fc7qwOvkXIzGbDDQ28iCBjrhAVVyL517jKJ4zpMFwY%2BXgeREpWmCiHeVyktsav%2F9A69CoORunRtQmTP1OrpMU3%2BOev7y875JqlgsgGra4ozecQYhrRcu1l59El1vIWQ%2FeGHq%2BaieTV2LLoDcdXxM%2F72S2daShR%2FeWcydKUxbIRqmrwYhDHXWUjCPFRYqmTn1SgKEn6EKlOjdwWEXAml1eF4ufkIaGte1rX%2Bo%2FKMegtZ9gI0cb%2BotnPvGpovmzRhKaN%2FTnP6OPVkiooeC94xsWA6jF2fZG9ZHiSZL6HrtVV0sCSezVDLy1nBx7ik%2Bo0HycEt3kQ%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQA4H36Y3RAUEDLOH%2F20210317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210317T183753Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Signature=5ce29670aede42e0925adfa22747ac63ac2142d46a4a345f4c3e9822a425e2fc
                          asn1_base64:
                            type: string
                            description: Base64 del certificado de la NOM 151
                            example: >-
                              MIIOTjADAgEAMIIORQYJKoZIhvcNAQcCoIIONjCCDjICAQMxDzANBglghkgBZQMEAgEFADCCAZ0GCyqGSIb3DQEJEAEEoIIBjASCAYgwggGEAgEBBg5gg2RlCoI8AgQBAgEBADAxMA0GCWCGSAFlAwQCAQUABCDL/nUHR5a/NXAMwSTA0xXb1SUe1dgBjp4/0piO3aCm6QIIXaNFucr/l38YDzIwMjEwODI0MjEyODU3WjAEgAIB9AIEb4J7t6CCAROkggEPMIIBCzEpMCcGCSqGSIb3DQEJARYaYWNlZGljb21teEBlZGljb21ncm91cC5jb20xLjAsBgNVBAoMJUVkaWNvbXVuaWNhY2lvbmVzIE1leGljbyBTLkEuIGRlIEMuVi4xDDAKBgNVBAsMA1RTQTEUMBIGA1UEAwwLVFNBRURJQ09NTVgxPTA7BgNVBAkMNEF2ZGEuIFBhc2VvIGRlIGxhIFJlZm9ybWEgNDgzIFBpc29zIDI1LTI3IEN1YXVodGVtb2MxDjAMBgNVBBETBTA2NTAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQQ2l1ZGFkIGRlIE1leGljbzETMBEGA1UEBwwKQ3VhdWh0ZW1vY6CCCCYwgggiMIIGCqADAgECAgEqMA0GCSqGSIb3DQEBCwUAMIIBRTEXMBUGA1UEBxMOQWx2YXJvIE9icmVnb24xGTAXBgNVBAgTEENpdWRhZCBkZSBNZXhpY28xCzAJBgNVBAYTAk1YMQ4wDAYDVQQREwUwMTAzMDErMCkGA1UECRMiSW5zdXJnZW50ZXMgU3VyIDE5NDAsIENvbC4gRmxvcmlkYTFHMEUGA1UEAxM+QXV0b3JpZGFkIENlcnRpZmljYWRvcmEgUmFpeiBTZWd1bmRhIGRlIFNlY3JldGFyaWEgZGUgRWNvbm9taWExNDAyBgNVBAsTK0RpcmVjY2lvbiBHZW5lcmFsIGRlIE5vcm1hdGl2aWRhZCBNZXJjYW50aWwxHzAdBgNVBAoTFlNlY3JldGFyaWEgZGUgRWNvbm9taWExJTAjBgkqhkiG9w0BCQEWFmFjcjJzZUBlY29ub21pYS5nb2IubXgwHhcNMTcwNzE5MDAwMDAwWhcNMjkwNzE5MDAwMDAwWjCCAQsxEzARBgNVBAcTCkN1YXVodGVtb2MxGTAXBgNVBAgTEENpdWRhZCBkZSBNZXhpY28xCzAJBgNVBAYTAk1YMQ4wDAYDVQQREwUwNjUwMDE9MDsGA1UECRM0QXZkYS4gUGFzZW8gZGUgbGEgUmVmb3JtYSA0ODMgUGlzb3MgMjUtMjcgQ3VhdWh0ZW1vYzEUMBIGA1UEAxMLVFNBRURJQ09NTVgxDDAKBgNVBAsTA1RTQTEuMCwGA1UEChMlRWRpY29tdW5pY2FjaW9uZXMgTWV4aWNvIFMuQS4gZGUgQy5WLjEpMCcGCSqGSIb3DQEJARYaYWNlZGljb21teEBlZGljb21ncm91cC5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDQ6yDMNi2cCZVayeaD0nQKyNTJe5OeMzg9QSx0IeniTTzbwyn17xscEOFidtSWdFNoPCjKkYGIdiMgqciMqrX9w9sbig0KsHNvx49yds3Dg6fGNNIfYy+KCMGpVZQGqPNI6ol72fync2lpa0Qdwc9fX5BTJ5YemrifPLd7GtyXOrAHOvYi+cllZs39Gkz08eafVz6jjFrAZPQoSVdDcONqRjh96NvfYiiWnmP078LkBADJ+BFk0Sdvqc3s0i1x6SwYXXwGOmzcAiXDBMDnDRhr9jfK2njTooDNEosG6J5mXEC/corssX5KHpvSFFbYMeI/l8exHp3I6TsfqsEWf2C8Y4LSeQEXKH//G2kwnZxAUj2eJhpGq0hBUnFobiJXnA6WAqo48KxrS0A8sXpqElPsM4ZSGU3TDXh06Ckns26Bni4B642ZF2sSCjDbVbKkzV8zQAKDkUPtdsfqiOthXmaKAJqYCQHibIrHQNQ5pkZkN46wTk5jx4SfDp4qd/IES8fj7imH3oMm21Mi5UzPpprFIwSweVRc4H0PG0oW2F0MWixrFyEFDemel4fzNhgbzYEUb4PsOqU/E0IM0cVn4iyszpNGD9RninKDnPsKpIYub+FnFF8iN9FYU+oiFjFJQicYB0KEg8Hz3lUQ8y9uibjKxrZ/ROE6Obkm+R2Q7NAgNwIDAQABo4IBUTCCAU0wHwYDVR0jBBgwFoAUEIEpKsESDXLNNYK1IVhZbvegSgYwHQYDVR0OBBYEFMLIWdabOKHBOqG9qwOOYLsyMAIQMD0GCCsGAQUFBwEBBDEwLzAtBggrBgEFBQcwAYYhaHR0cDovL29jc3AuZWNvbm9taWEuZ29iLm14OjgwODIvMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHBzOi8vd3d3LmFjcjJzZS5lY29ub21pYS5nb2IubXgvZWNvbm9taWEuY3JsMFEGA1UdIARKMEgwRgYJYINkZQqCPAoBMDkwNwYIKwYBBQUHAgEWK2h0dHBzOi8vd3d3LmFjcjJzZS5lY29ub21pYS5nb2IubXgvY3BzLmh0bWwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDwYDVR0TAQH/BAUwAwIBADAOBgNVHQ8BAf8EBAMCA+gwDQYJKoZIhvcNAQELBQADggIBAD9H7JOu2ViJ9M0hfLw9KBx7TKCJnlVaaCaJ/hAJC2XuZBjOP1JZ2+zZEYLOW/PqX5nFKM4LuKjQ4jkS89kqUWPT05NdKGScFRxKXkUkv0y/skyjXOl0HXxJIx4j+oP0Y3zLx8H5uiYSVSNl9oCqCHA2jCxMK9R1wRacG//MgoNamcnLY252co+JzwHLUjd0Mje0wE2PVDfJZUJBfPLkDirmnMtI0pFk6DA0I3QMQ7glvF5E3tLtMA/v5egQi05bVVrFxjFz1tmr1kCe40l4CmFGijA5Ye3c80CCiU6v0fdYCyTs3fQB45njd7u0nMQvc9XOIVNH3vjAALFc63lv0tL8cehCCBrhbadfJkayQsXOsnJiCHapZK+mzGB7169ilqNa35+XdnptFBO7xuEnkga59MxwguqVPs/RjePt4BgEzuP/0hgJPJtNCn2RK6h3TfK0/OwxF980xAPUQF8yZ4WcPN9KrcKkhZa7Fgej9rcD90VVGEROJ9C9yqi5S4M2ZQF3DHPX1YjnCier5cnQbNZWLo4j8p6ZFbnq3DsRtgDK3GDXLHIaFiGhWuPqlet2jjc9TwF2VIu6EL8EZ8K9Tu+fDqXXnQeg1spfODq6+PcyFD3AojDrhMlknmhuzZxkNQwuFrLQoka7mdTvgPBphJUJc8l0BY9sobrNJzJyy7T/MYIETzCCBEsCAQEwggFMMIIBRTEXMBUGA1UEBxMOQWx2YXJvIE9icmVnb24xGTAXBgNVBAgTEENpdWRhZCBkZSBNZXhpY28xCzAJBgNVBAYTAk1YMQ4wDAYDVQQREwUwMTAzMDErMCkGA1UECRMiSW5zdXJnZW50ZXMgU3VyIDE5NDAsIENvbC4gRmxvcmlkYTFHMEUGA1UEAxM+QXV0b3JpZGFkIENlcnRpZmljYWRvcmEgUmFpeiBTZWd1bmRhIGRlIFNlY3JldGFyaWEgZGUgRWNvbm9taWExNDAyBgNVBAsTK0RpcmVjY2lvbiBHZW5lcmFsIGRlIE5vcm1hdGl2aWRhZCBNZXJjYW50aWwxHzAdBgNVBAoTFlNlY3JldGFyaWEgZGUgRWNvbm9taWExJTAjBgkqhkiG9w0BCQEWFmFjcjJzZUBlY29ub21pYS5nb2IubXgCASowDQYJYIZIAWUDBAIBBQCggdMwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMTA4MjQyMTI4NTdaMC0GCSqGSIb3DQEJNDEgMB4wDQYJYIZIAWUDBAIBBQChDQYJKoZIhvcNAQELBQAwLwYJKoZIhvcNAQkEMSIEIHPxsMgHoCDXdi4AI/S4UlUNOS2AAJsMdCn9zNY+fMmPMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIINpfkuYKAs69giW6OG4XHFNJ6kzfgjsXq17VZzlL0NxMA0GCSqGSIb3DQEBCwUABIICACXO4JTlcaZcbxOd23Lf66bE63dshpCxzJ3zNUvc9u1kpWui4ObPdYhWdxbWuoEGGmsQZi2P8/acNWnu824+240b5G1M0/npgB8jr6uWa9LmhENms53IroHq5UC589T1wSAV28JjsDHVnQ+jfqJF7x+LxLcc5uUcwLWuQJVc468EHxM1bE/tEacc50q3QtclBolYQNWQHn8U29Won0iTQXBnSiUn4nAXjv+BP+lvOD2RFtSMRriaEAA/WVNfRwKLy0oz5UXldxpVfKuKx2xoT0h/Bk8TZBgDGMb3e9P28gOcglpMefd1L59XzL6VLwSP05EysK1uF/YJ5xoNkmLlB6JgfhS4OEojO9GAvlpdFEPsRMzMjcEv1G0f7VRGB16I1KEQLMO20aXamsp9Vl0Gqbtq1yYOGcMq44xosPgjOxo0G53PTu5QH+Qy1lzymOE1hH/BqsaxJwonGkfaiMDx7u5vCy1DAao/ssTOvLhUU5Gktj4lfjB/2N2xSyoxg+LZ27/g5+T8ZW6yMmdlK/SOpyJoA6362g59nBHcPN7LxbDIaJjABjcs5qsL5tSqHym9vDf4cvn6xxnYB9K6t7SfoVvbu6E1tkRl66kWem7SKPo6jYYCiwxdfU09z0Ub8vIzKGjiZKTJZK3WAY2Hh050yrInqDEb84gPrtuseE07y6l8
                      - type: string
                        description: if callback_url is configured
                        example: Webhook created
        '400':
          description: Error el documento no ha sido generado o ya ha sido firmado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Descripción del error
                    example: Document has not been generated
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 8
  /documents/{id}/generate:
    get:
      operationId: generateDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del documento
      summary: >-
        Genera un documento que ha sido completamente llenado y lo almacena en
        la nube
      tags:
        - digital-signature
      responses:
        '200':
          description: Documento generado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: true
                  result:
                    oneOf:
                      - type: object
                        properties:
                          document_url:
                            type: string
                            description: URL temporal de descarga
                            example: >-
                              https://signt-platform-storage.s3.us-west-2.amazonaws.com/36/Caratula-16-marzo.pdf?response-content-type=application%2Foctet-stream&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIG%2Bpoy2pJzlOR%2FZv3gxPAliR24keVQo%2BLAGpv6H1jSs7AiEAmeEmkSVZ2IK4rYBf6rIfEnOsEXXzDZVb0%2FQj70oQ%2Bpoq2gEIMhABGgwwMDE4OTU1NjA3NTkiDD%2BEpbp%2BPi8C1l7ftCq3ASAJ33pCCMEKu%2FnMaFE66YLK5vEIUGeHu2KAo2Gyj8QELB4PKc7dm%2BRXVl407jpFpwVvvvqioh86Mwg0GphoTkPiguEQwXMMI1Z1ZzOu93ozLWg0h2YfcF8b4qU3rRbR5Un0WehwfjCThzJXRFoFfcvFhKzLswBDR3D9LGowokJb0x7hOcK9bGTmBz2A0MtknXliffuIstawdkR%2BWjD2pM69hBPpbWmFU82uObuX%2Fc7qwOvkXIzGbDDQ28iCBjrhAVVyL517jKJ4zpMFwY%2BXgeREpWmCiHeVyktsav%2F9A69CoORunRtQmTP1OrpMU3%2BOev7y875JqlgsgGra4ozecQYhrRcu1l59El1vIWQ%2FeGHq%2BaieTV2LLoDcdXxM%2F72S2daShR%2FeWcydKUxbIRqmrwYhDHXWUjCPFRYqmTn1SgKEn6EKlOjdwWEXAml1eF4ufkIaGte1rX%2Bo%2FKMegtZ9gI0cb%2BotnPvGpovmzRhKaN%2FTnP6OPVkiooeC94xsWA6jF2fZG9ZHiSZL6HrtVV0sCSezVDLy1nBx7ik%2Bo0HycEt3kQ%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQA4H36Y3RAUEDLOH%2F20210317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210317T183753Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Signature=5ce29670aede42e0925adfa22747ac63ac2142d46a4a345f4c3e9822a425e2fc
                      - type: string
                        description: if callback_url is configured
                        example: Webhook created
        '400':
          description: Error el documento tiene campos faltantes
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: object
                    properties:
                      missing_fields:
                        type: array
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                              description: Nombre del campo faltante
                              example: Fecha renovación
                            template_element_id:
                              type: string
                              description: Id del elemento del template faltante
                              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 8
  /documents/{id}/download:
    get:
      operationId: downloadDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del Documento
      summary: Obtener una URL temporal del documento que ya ha sido generado
      tags:
        - documents
      responses:
        '200':
          description: URL temporal creada con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: true
                  result:
                    type: object
                    properties:
                      document_url:
                        type: string
                        description: URL temporal de descarga
                        example: >-
                          https://signt-platform-storage.s3.us-west-2.amazonaws.com/36/Caratula-16-marzo.pdf?response-content-type=application%2Foctet-stream&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIG%2Bpoy2pJzlOR%2FZv3gxPAliR24keVQo%2BLAGpv6H1jSs7AiEAmeEmkSVZ2IK4rYBf6rIfEnOsEXXzDZVb0%2FQj70oQ%2Bpoq2gEIMhABGgwwMDE4OTU1NjA3NTkiDD%2BEpbp%2BPi8C1l7ftCq3ASAJ33pCCMEKu%2FnMaFE66YLK5vEIUGeHu2KAo2Gyj8QELB4PKc7dm%2BRXVl407jpFpwVvvvqioh86Mwg0GphoTkPiguEQwXMMI1Z1ZzOu93ozLWg0h2YfcF8b4qU3rRbR5Un0WehwfjCThzJXRFoFfcvFhKzLswBDR3D9LGowokJb0x7hOcK9bGTmBz2A0MtknXliffuIstawdkR%2BWjD2pM69hBPpbWmFU82uObuX%2Fc7qwOvkXIzGbDDQ28iCBjrhAVVyL517jKJ4zpMFwY%2BXgeREpWmCiHeVyktsav%2F9A69CoORunRtQmTP1OrpMU3%2BOev7y875JqlgsgGra4ozecQYhrRcu1l59El1vIWQ%2FeGHq%2BaieTV2LLoDcdXxM%2F72S2daShR%2FeWcydKUxbIRqmrwYhDHXWUjCPFRYqmTn1SgKEn6EKlOjdwWEXAml1eF4ufkIaGte1rX%2Bo%2FKMegtZ9gI0cb%2BotnPvGpovmzRhKaN%2FTnP6OPVkiooeC94xsWA6jF2fZG9ZHiSZL6HrtVV0sCSezVDLy1nBx7ik%2Bo0HycEt3kQ%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQA4H36Y3RAUEDLOH%2F20210317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210317T183753Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Signature=5ce29670aede42e0925adfa22747ac63ac2142d46a4a345f4c3e9822a425e2fc
        '400':
          description: Error el documento no ha sido generado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Descripción del error
                    example: Document has not been generated
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 8
  /documents/{id}/public-token:
    get:
      operationId: createDocumentToken
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del Documento
      summary: >-
        Obtener un token para acceder temporalmente a un documento de manera
        pública
      tags:
        - documents
      responses:
        '200':
          description: Token creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: true
                  result:
                    type: object
                    properties:
                      token:
                        type: string
                        description: Token para acceder públicamente al documento
                        example: 123|wWriJkT0VrduQAGHsNbiw5sG7tig5Z2BGu0kzWSR
                      expiration:
                        type: string
                        description: Fecha de expiración del token
                        example: '2021-04-07T15:14:19.000000Z'
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 8
  /documents/{id}/preview:
    get:
      operationId: getDocumentPreview
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El id para Identificar el Documento públicamente
      summary: Obtener el preview del documento PDF
      tags:
        - documents
      responses:
        '200':
          description: Preview creado con éxito
          content:
            application/pdf:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: string
                    description: Preview del documento en formato PDF
                    example: >-
                      https://signt-platform-storage.s3.us-west-2.amazonaws.com/36/Caratula-16-marzo.pdf?response-content-type=application%2Foctet-stream&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ
  /documents/{id}/add-sign-fields:
    post:
      operationId: addSignFieldsToDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El id para Identificar el Documento públicamente
      summary: Agrega campos de firma a un documento creado desde un archivo
      tags:
        - external-documents
      requestBody:
        description: >-
          Una petición application/json para crear los firmantes del documento
          creado desde PDF
        content:
          application/json:
            schema:
              type: object
              properties:
                signers:
                  type: array
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                        example: Juan Perez
                      email:
                        type: string
                        example: test@test.com
                      phone_number:
                        type: string
                        example: '5215555555555'
                        description: Número de teléfono del firmante 10 o 12 dígitos
                      country:
                        type: string
                        example: MX
                      state:
                        type: string
                        example: Ciudad de México
                      locality:
                        type: string
                        example: Xochimilco
                      organization:
                        type: string
                        example: Comp_Test
                      is_fiel_signature:
                        type: boolean
                        example: false
                        description: Indica si el firmante firmara con fiel
                      password:
                        type: string
                        maxLength: 10
                        example: '123456'
                      include_name_in_signature:
                        type: boolean
                        description: >-
                          true en caso de que el nombre del firmante se incluya
                          en la firma
                        example: false
                      expires_in:
                        type: integer
                        description: >-
                          Tiempo en minutos que durarán los tokens vinculados a
                          este signer
                        example: 15
                      external_person_id:
                        type: string
                        example: null
                      meta_signs:
                        type: array
                        items:
                          type: object
                          properties:
                            page:
                              type: integer
                              minimum: 1
                              description: >-
                                Pagina donde se insertará el elemento del
                                template
                              example: 1
                            is_default:
                              type: boolean
                              description: Usa la posición por default en la página.
                              example: false
                            top:
                              type: number
                              minimum: 0
                              description: >-
                                Posición desde arriba para insertar el elemento
                                en la página
                              example: 20
                            left:
                              type: number
                              minimum: 0
                              description: >-
                                Posición desde la izquierda para insertar el
                                elemento en la página
                              example: 20
                            width:
                              type: number
                              minimum: 0
                              description: Ancho que ocupará el elemento en la página
                              example: 50
                            height:
                              type: number
                              minimum: 0
                              description: Altura que ocupará el elemento en la página
                              example: 20
      responses:
        '200':
          description: Campos de firma agregados con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: Identificador del signer
                          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                        name:
                          type: string
                          description: Nombre del signer
                          example: Test Signer
                        document_id:
                          type: string
                          description: >-
                            Identificador del documento al que pertenece el
                            signer
                          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                        created_at:
                          type: string
                          description: Fecha de creación del signer
                          example: '2021-04-07T15:14:19.000000Z'
                        updated_at:
                          type: string
                          description: Fecha de actualización del signer
                          example: '2021-04-07T15:14:19.000000Z'
                        token:
                          type: string
                          description: Token para acceso público del signer
                          example: 126|O0mzWkpVauNj6kXy3HFBvwa7mJnfDAqKZCF4sCFL
                        expiration_date:
                          type: string
                          description: Fecha de expiración del token
                          example: '2021-04-07T15:14:19.000000Z'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    description: El documento ya ha sido firmado
                    example:
                      success: false
                      error: Document has already been signed, can't make changes
                  - type: object
                    description: Error de validación
                    example:
                      success: false
                      error:
                        signers.0.meta_signs.0.top:
                          - The signers.0.meta_signs.0.top must be a number.
  /documents/{id}/resend-emails:
    get:
      operationId: resendDocumentEmail
      summary: >-
        Si el documento ya ha sido firmado con NOM 151 se renviaran los archivos
        por email a los firmantes
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El id para Identificar el Documento
      tags:
        - documents
      responses:
        '200':
          description: Emails encolados para su envio
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 100
  /documents/{id}/fill-elements:
    post:
      operationId: fillDocumentElements
      summary: Llenar los elementos de texto del documento
      tags:
        - documents
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El id para Identificar el Documento
      requestBody:
        description: >-
          Una peticion application/json para llenar los elementos de tipo texto
          del document en batch
        content:
          application/json:
            schema:
              type: object
              properties:
                fields:
                  type: object
                  description: >-
                    Objeto donde las key son los id del elemento del template y
                    el value es el valor del elemento para el documento
                  example:
                    1319186-a4a0-4497-a3c9-ebdbdaca0159: Test
      responses:
        '200':
          description: Campos de firma agregados con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: array
                    items:
                      type: object
                      properties:
                        template_element_id:
                          type: string
                          description: El ID del elemento del template relacionado
                          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                        document_id:
                          type: string
                          description: El ID del documento relacionado
                          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                        value:
                          type: string
                          description: El valor en texto del elemento de documento
                          example: Texto ejemplo
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    description: El documento ya ha sido firmado
                    example:
                      success: false
                      error: Document has already been signed, can't make changes
                  - type: object
                    description: Error de validación
                    example:
                      success: false
                      error:
                        fields:
                          - The fields must have at least 1 items.
  /documents/{id}/add-signers:
    post:
      operationId: addSignersToDocument
      summary: Agregar firmantes permanentes al documento
      security:
        - apiKeyAuth: []
      tags:
        - documents
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El id para Identificar el Documento
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                signers:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: Id del firmante permanente
                        example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                      password:
                        type: string
                        example: '12345'
                        description: >-
                          Contraseña para proteger el certificado de la firma
                          digital
                      expires_in:
                        type: integer
                        description: >-
                          Tiempo en minutos que durarán los tokens vinculados a
                          este firmante
                        example: 15
                      only_digital_signature:
                        type: boolean
                        description: >-
                          true en caso de que la firma autografa no se ponga en
                          el documento
                        example: false
                      is_fiel_signature:
                        type: boolean
                        description: >-
                          true si la forma de firmar para este firmante es con
                          FIEL
                        example: false
                      elements:
                        type: array
                        description: Arreglo de elementos que el firmante debe firmar
                        example:
                          - 51319186-a4a0-4497-a3c9-ebdbdaca0159
                          - 78932121-c7b0-4497-c9c4-abdfcaca9874
                        items:
                          type: string
                          description: >-
                            Identificador del elemento del template que
                            representa el espacio que se desea llenar
      responses:
        '200':
          description: Firmantes agregados con exito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: array
                    items:
                      $ref: '#/components/schemas/Signer'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    description: El documento ya ha sido firmado
                    example:
                      success: false
                      error: Document has already been signed, can't make changes
                  - type: object
                    description: Error de validación
                    example:
                      success: false
                      error:
                        signers.0.password:
                          - The signers.0.password is required
  /documents/{id}/remove-signer:
    delete:
      operationId: removeSignerFromDocument
      summary: Remover firmante del documento
      tags:
        - documents
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El id para Identificar el Documento
        - in: query
          name: signer_id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: Id del firmante que se desea quitar del documento
      responses:
        '200':
          description: Firmante removido con exito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 100
  /documents/{id}/duplicate:
    post:
      operationId: duplicateDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El id para Identificar el Documento a duplicar
      summary: Duplicar un documento existente creado desde un archivo
      tags:
        - documents
      requestBody:
        description: Una petición application/json para duplicar un documento
        content:
          application/json:
            schema:
              type: object
              properties:
                duplicate_signers:
                  type: boolean
                  description: >-
                    Indica si se deben duplicar los firmantes del documento
                    original
                  example: true
                document_name:
                  type: string
                  description: Nombre del nuevo documento duplicado
                  example: Documento Duplicado
                send_email:
                  type: boolean
                  description: >-
                    Indica si se debe enviar un email a los firmantes del
                    documento duplicado
                  example: true
                expires_in:
                  type: integer
                  description: >-
                    Tiempo en minutos que durarán los tokens vinculados a los
                    firmantes del documento duplicado
                  example: 15
                callback_url:
                  type: string
                  description: >-
                    URL a la que se enviará una notificación cuando el documento
                    sea firmado
                  example: https://example.com/callback
                autosigning:
                  type: boolean
                  description: >-
                    Indica si el documento debe ser firmado automáticamente por
                    los firmantes
                  example: false
      responses:
        '200':
          description: Documento duplicado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    allOf:
                      - type: object
                        properties:
                          signersDuplicated:
                            type: array
                            items:
                              $ref: '#/components/schemas/Signer'
                      - $ref: '#/components/schemas/Document'
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 100
  /documents/{id}/approvals:
    get:
      operationId: getDocumentApprovals
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de aprobaciones de un documento
      tags:
        - documents
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: array
                    items:
                      type: object
                      allOf:
                        - $ref: '#/components/schemas/Document'
                        - type: object
                          properties:
                            approvals:
                              type: array
                              items:
                                allOf:
                                  - $ref: '#/components/schemas/Approval'
                                  - type: object
                                    properties:
                                      reviewer:
                                        $ref: '#/components/schemas/Reviewer'
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 100
  /documents/{id}/send-approval-requests:
    post:
      operationId: sendDocumentApprovalRequests
      security:
        - apiKeyAuth: []
      summary: Enviar solicitudes de aprobación para un documento
      tags:
        - documents
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El id para Identificar el Documento
      requestBody:
        description: Una petición application/json para enviar solicitudes de aprobación
        content:
          application/json:
            schema:
              type: object
              properties:
                time_to_approve:
                  type: integer
                  example: 86400
                  description: >-
                    Tiempo en minutos que el revisor tiene para aprobar el
                    documento
                reset_approvals:
                  type: boolean
                  example: false
                  description: Indica si se deben reiniciar las aprobaciones existentes
      responses:
        '200':
          description: Solicitudes de aprobación enviadas con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      message:
                        type: string
                        example: Approval requests sent successfully
                      reviewers_count:
                        type: integer
                        example: 5
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document] 100
  /document-elements:
    get:
      operationId: getDocumentElements
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de elementos de documentos
      tags:
        - document-elements
      parameters:
        - in: query
          name: document_id
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/document-elements?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/document-elements?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/document-elements
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/DocumentElement'
    post:
      operationId: createDocumentElement
      security:
        - apiKeyAuth: []
      summary: Crear un nuevo elemento de documento
      tags:
        - document-elements
      requestBody:
        description: Una petición multipart/form-data para crear un elemento de documento
        content:
          multipart/form-data:
            schema:
              oneOf:
                - type: object
                  properties:
                    template_element_id:
                      type: string
                      description: El ID del elemento del template relacionado
                      example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    document_id:
                      type: string
                      description: El ID del documento relacionado
                      example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    value:
                      type: string
                      format: binary
                      description: La imagen a insertar en el documento
                - type: object
                  properties:
                    template_element_id:
                      type: string
                      description: El ID del elemento del template relacionado
                      example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    document_id:
                      type: string
                      description: El ID del documento relacionado
                      example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    value:
                      type: string
                      description: El valor en texto del elemento de documento
                      example: Texto ejemplo
      responses:
        '201':
          description: Elemento de documento creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/DocumentElement'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      document_id:
                        - The document id field is required.
  /document-elements/{id}:
    get:
      operationId: showDocumentElement
      security:
        - apiKeyAuth: []
      summary: Obtener los detalles de un elemento de documento
      tags:
        - document-elements
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del elemento de documento
      responses:
        '200':
          description: Elemento de documento obtenido con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/DocumentElement'
        '404':
          description: Elemento de documento con no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Elemento de documento no encontrado
                    example: >-
                      No query results for model [App\Models\DocumentElement]
                      100
    put:
      operationId: updateDocumentElement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del elemento de documento
      summary: Actualizar un elemento de documento
      tags:
        - document-elements
      requestBody:
        description: Una petición application/json para actualizar un elemento de documento
        content:
          application/json:
            schema:
              oneOf:
                - type: object
                  properties:
                    template_element_id:
                      type: string
                      description: El ID del elemento del template relacionado
                      example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    document_id:
                      type: string
                      description: El ID del documento relacionado
                      example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    value:
                      type: string
                      format: binary
                      description: La imagen a insertar en el documento
                - type: object
                  properties:
                    template_element_id:
                      type: string
                      description: El ID del elemento del template relacionado
                      example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    document_id:
                      type: string
                      description: El ID del documento relacionado
                      example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    value:
                      type: string
                      description: El valor en texto del elemento de documento
                      example: Texto ejemplo
      responses:
        '200':
          description: Elemento de documento actualizado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito operación
                    example: true
                  result:
                    $ref: '#/components/schemas/DocumentElement'
        '404':
          description: Elemento de documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Elemento de documento no encontrado
                    example: >-
                      No query results for model [App\Models\DocumentElement]
                      100
    delete:
      operationId: deleteDocumentElement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del elemento de documento
      summary: Borrar un elemento de documento
      tags:
        - document-elements
      responses:
        '200':
          description: Elemento de documento borrado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa true
                    example: true
                  result:
                    type: string
                    description: Elemento de documento borrado
                    example: Ok
        '404':
          description: Elemento de documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito de la operación
                    example: false
                  error:
                    type: string
                    description: Elemento de documento no encontrado
                    example: >-
                      No query results for model [App\Models\DocumentElement]
                      100
  /template-elements:
    get:
      operationId: getTemplateElements
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de elementos de template
      tags:
        - template-elements
      parameters:
        - in: query
          name: template_id
          schema:
            type: string
            description: Template relacionado
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/template-elements?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/template-elements?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/template-elements
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/TemplateElement'
    post:
      operationId: createTemplateElement
      security:
        - apiKeyAuth: []
      summary: Crear un elemento de template
      tags:
        - template-elements
      requestBody:
        description: Una petición application/json para crear un elemento de template
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del elemento de template
                  example: Campo Nombre
                type:
                  example: 3
                  oneOf:
                    - type: integer
                      title: Texto (1)
                      description: Elemento de tipo texto
                      default: 1
                      example: 1
                    - type: integer
                      title: Imagen (2)
                      description: Elemento de tipo imagen
                      default: 2
                      example: 2
                    - type: integer
                      title: Firma (3)
                      description: Elemento de tipo firma
                      default: 3
                      example: 3
                page:
                  type: integer
                  minimum: 1
                  description: Pagina donde se insertará el elemento del template
                  example: 1
                top:
                  type: number
                  minimum: 0
                  description: Posición desde arriba para insertar el elemento en la página
                  example: 20
                left:
                  type: number
                  minimum: 0
                  description: >-
                    Posición desde la izquierda para insertar el elemento en la
                    página
                  example: 20
                width:
                  type: number
                  minimum: 0
                  description: Ancho que ocupará el elemento en la página
                  example: 50
                height:
                  type: number
                  minimum: 0
                  description: Altura que ocupará el elemento en la página
                  example: 20
                metadata:
                  type: object
                  description: Metadata de un elemento de tipo Texto
                  properties:
                    font:
                      oneOf:
                        - type: string
                          title: times
                          description: Fuente Times
                        - type: string
                          title: courier
                          description: Fuente courier
                        - type: string
                          title: helvetica
                          description: Fuente helvetica
                        - type: string
                          title: symbol
                          description: Fuente symbol
                        - type: string
                          title: zapfdingbats
                          description: Fuente zapfdingbats
                    font_size:
                      type: integer
                      description: Tamaño de la fuente en puntos
                      example: 12
                    font_style:
                      type: string
                      description: >
                        Estilo de fuente con una de las opciones o la
                        combinación de estas: Negritas (B), Italica (I),

                        Subrayado (U), Tachado (D), Overline (O)
                      example: BI
                    text_align:
                      oneOf:
                        - type: string
                          description: Alinedo Izaquierda
                          title: Izquierda (L)
                        - type: string
                          description: Alinedo Centro
                          title: Centro (C)
                        - type: string
                          description: Alinedo Derecha
                          title: Derecha (R)
                        - type: string
                          description: Alinedo Justificado
                          title: Justificado (J)
                      type: string
                      description: Alineación del texto
                      example: J
                    line_height:
                      type: number
                      description: >-
                        Altura de cada línea del texto con respecto al tamaño de
                        la fuente
                      example: 1.25
                    font_color_rgb:
                      type: array
                      description: Color de fuente en RGB
                      minLength: 3
                      maxLength: 3
                      example:
                        - 0
                        - 0
                        - 0
                      items:
                        type: integer
                        minimum: 0
                        maximum: 255
                rules:
                  type: array
                  description: >-
                    Reglas de validación para el valor del elemento, referirse a
                    la validación de laravel
                  example:
                    - required
                    - string
                    - max:10
                  items:
                    type: string
                template_id:
                  type: string
                  description: El ID del template relacionado
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '201':
          description: Elemento de template creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Éxito operación
                    example: true
                  result:
                    $ref: '#/components/schemas/TemplateElement'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      document_id:
                        - The document id field is required.
  /template-elements/{id}:
    get:
      operationId: showTemplateElement
      security:
        - apiKeyAuth: []
      summary: Obtener los detalles de un elemento de template
      tags:
        - template-elements
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del elemento de template
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/TemplateElement'
        '404':
          description: Elemento de template no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Elemento de template no encontrado
                    example: No query results for model [App\Models\TemplateElement] 50
    put:
      operationId: updateTemplateElement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del elementos template
      summary: Actualizar un elemento de template
      tags:
        - template-elements
      requestBody:
        description: Una petición application/json para actualizar un elemento de template
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del elemento de template
                  example: Campo Nombre
                type:
                  type: integer
                  description: >-
                    Tipo de elemento de template type 1 = Text, type 2 = Image,
                    type 3 = Firma
                  example: 1
                page:
                  type: integer
                  minimum: 1
                  description: Pagina donde se insertará el elemento del template
                  example: 1
                top:
                  type: number
                  minimum: 0
                  description: Posición desde arriba para insertar el elemento en la página
                  example: 20
                left:
                  type: number
                  minimum: 0
                  description: >-
                    Posición desde la izquierda para insertar el elemento en la
                    página
                  example: 20
                width:
                  type: number
                  minimum: 0
                  description: Ancho que ocupará el elemento en la página
                  example: 50
                height:
                  type: number
                  minimum: 0
                  description: Altura que ocupará el elemento en la página
                  example: 20
                metadata:
                  type: object
                  description: Metadata de un elemento de tipo Texto
                  properties:
                    font:
                      oneOf:
                        - type: string
                          title: times
                          description: Fuente Times
                        - type: string
                          title: courier
                          description: Fuente courier
                        - type: string
                          title: helvetica
                          description: Fuente helvetica
                        - type: string
                          title: symbol
                          description: Fuente symbol
                        - type: string
                          title: zapfdingbats
                          description: Fuente zapfdingbats
                    font_size:
                      type: integer
                      description: Tamaño de la fuente en puntos
                      example: 12
                    font_style:
                      type: string
                      description: >
                        Estilo de fuente con una de las opciones o la
                        combinación de estas: Negritas (B), Italica (I),

                        Subrayado (U), Tachado (D), Overline (O)
                      example: BI
                    text_align:
                      oneOf:
                        - type: string
                          description: Alinedo Izaquierda
                          title: Izquierda (L)
                        - type: string
                          description: Alinedo Centro
                          title: Centro (C)
                        - type: string
                          description: Alinedo Derecha
                          title: Derecha (R)
                        - type: string
                          description: Alinedo Justificado
                          title: Justificado (J)
                      type: string
                      description: Alineación del texto
                      example: J
                    line_height:
                      type: number
                      description: >-
                        Altura de cada línea del texto con respecto al tamaño de
                        la fuente
                      example: 1.25
                    font_color_rgb:
                      type: array
                      description: Color de fuente en RGB
                      minLength: 3
                      maxLength: 3
                      example:
                        - 0
                        - 0
                        - 0
                      items:
                        type: integer
                        minimum: 0
                        maximum: 255
                rules:
                  type: array
                  description: >-
                    Reglas de validación para el valor del elemento, referirse a
                    la validación de laravel
                  example:
                    - required
                    - max:50
                  items:
                    type: string
                template_id:
                  type: string
                  description: El ID del template relacionado
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '200':
          description: Elemento de template actualizado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  result:
                    $ref: '#/components/schemas/TemplateElement'
        '404':
          description: Elemento de template no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Elemento de template no encontrado
                    example: No query results for model [App\Models\TemplateElement] 50
    delete:
      operationId: deleteTemplateElement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del elemento de template
      summary: Borrar un elemento de template
      tags:
        - template-elements
      responses:
        '200':
          description: Elemento de template borrado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa true
                    example: true
                  result:
                    type: string
                    description: Elemento de template borrado
                    example: Ok
        '404':
          description: Elemento de template no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Elemento de template no encontrado
                    example: No query results for model [App\Models\TemplateElement] 50
  /template-elements/{id}/set-default-image:
    put:
      operationId: setDefaultImage
      summary: Establecer una imagen por defecto para un elemento de template
      tags:
        - template-elements
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del elemento de template, debe ser de tipo imagen
      requestBody:
        description: >-
          Una petición multipart/form-data para establecer una imagen por
          defecto
        content:
          application/json:
            schema:
              type: object
              properties:
                default_value:
                  type: string
                  format: binary
                  description: La imagen a establecer como por defecto
      responses:
        '200':
          description: Elemento de template actualizado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  result:
                    $ref: '#/components/schemas/TemplateElement'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      default_value:
                        - The default value field is required.
        '404':
          description: Elemento de template no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Elemento de template no encontrado
                    example: No query results for model [App\Models\TemplateElement] 50
  /signers:
    get:
      operationId: getSigners
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de todos los firmantes registrados
      tags:
        - signers
      parameters:
        - in: query
          name: document_id
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        - in: query
          name: is_permanent
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
          description: Filtrar los firmantes si son permanentes o temporales
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/signers?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/signers?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/signers
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          allOf:
                            - $ref: '#/components/schemas/Signer'
                            - type: object
                              properties:
                                fillable_elements:
                                  type: array
                                  description: >-
                                    Arreglo de elementos que tiene que firmar el
                                    firmante
                                  items:
                                    $ref: '#/components/schemas/FillableElement'
        '404':
          description: Documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Documento no encontrado
                    example: No query results for model [App\Models\Document].
    post:
      operationId: createSigner
      security:
        - apiKeyAuth: []
      summary: Crea un nuevo firmante para un documento
      tags:
        - signers
      requestBody:
        description: Una petición application/json para crear un firmante
        content:
          application/json:
            schema:
              type: object
              properties:
                document_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                  description: >-
                    Identificador del documento relacionado al firmante if null
                    se creara un firmante permanente
                name:
                  type: string
                  example: Test Firmante
                email:
                  type: string
                  example: test@example.com
                phone_number:
                  type: string
                  example: '5215555555555'
                  description: Número de teléfono del firmante 10 o 12 dígitos
                password:
                  type: string
                  example: '12345'
                  description: Contraseña para proteger el certificado de la firma digital
                expires_in:
                  type: integer
                  description: >-
                    Tiempo en minutos que durarán los tokens vinculados a este
                    firmante
                  example: 15
                public_key:
                  type: string
                  example: sd123cb1x3c2b1n3vb2m1v32b1mv3213cb8m312m1bn3
                  description: >-
                    Clave pública de la wallet (Eclipse Network) del firmante,
                    para realizar o recibir endosos
                country:
                  type: string
                  maxLength: 2
                  minLength: 2
                  example: MX
                state:
                  type: string
                  example: México City
                locality:
                  type: string
                  example: Iztapalapa
                organization:
                  type: string
                  example: rem-tools
                person_id:
                  type: string
                  format: uuid
                  description: >-
                    Id de una persona registrada en la plataforma people
                    vinculada al mismo cliente, en caso de estar presente se
                    tomaran los datos de nombre y email de la misma, en caso de
                    estar dispinibles.
                  example: 51234686-a4a0-4497-a3c9-ebdbdaca0159
                external_person_id:
                  type: string
                  example: 1a3sd51fsd32g1sdg5
                only_digital_signature:
                  type: boolean
                  description: >-
                    true en caso de que la firma autografa no se ponga en el
                    documento
                  example: false
                include_name_in_signature:
                  type: boolean
                  description: >-
                    true en caso de que el nombre del firmante se incluya en la
                    firma
                  example: false
                is_fiel_signature:
                  type: boolean
                  description: true si la forma de firmar para este firmante es con FIEL
                  example: false
                elements:
                  type: array
                  description: Arreglo de elementos que el firmante debe firmar
                  example:
                    - 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    - 78932121-c7b0-4497-c9c4-abdfcaca9874
                  items:
                    type: string
                    description: >-
                      Identificador del elemento del template que representa el
                      espacio que se desea llenar
      responses:
        '201':
          description: Firmante creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    allOf:
                      - $ref: '#/components/schemas/Signer'
                      - type: object
                        properties:
                          fillable_elements:
                            type: array
                            description: >-
                              Arreglo de elementos que tiene que firmar el
                              firmante
                            items:
                              $ref: '#/components/schemas/FillableElement'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      document_id:
                        - The document id field is required.
  /signers/search-by-external-id:
    get:
      operationId: getSignersByExternalId
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de todos los firmantes con el id externo
      tags:
        - signers
      parameters:
        - in: query
          name: external_id
          required: true
          schema:
            type: string
            example: lsdgbsjdfnpqwe
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: array
                    items:
                      oneOf:
                        - allOf:
                            - $ref: '#/components/schemas/Signer'
                            - type: object
                              properties:
                                document:
                                  description: Documento relacionado con el firmante
                                  $ref: '#/components/schemas/Document'
                        - allOf:
                            - $ref: '#/components/schemas/Signer'
                            - type: object
                              properties:
                                documents:
                                  type: array
                                  items:
                                    description: Documento relacionado con el firmante
                                    $ref: '#/components/schemas/Document'
  /signers/search-by-person-id:
    get:
      operationId: getSignersByPersonId
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de todos los firmantes con el id externo
      tags:
        - signers
      parameters:
        - in: query
          name: external_id
          required: true
          schema:
            type: string
            example: lsdgbsjdfnpqwe
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: array
                    items:
                      oneOf:
                        - allOf:
                            - $ref: '#/components/schemas/Signer'
                            - type: object
                              properties:
                                document:
                                  description: Documento relacionado con el firmante
                                  $ref: '#/components/schemas/Document'
                        - allOf:
                            - $ref: '#/components/schemas/Signer'
                            - type: object
                              properties:
                                documents:
                                  type: array
                                  items:
                                    description: Documento relacionado con el firmante
                                    $ref: '#/components/schemas/Document'
  /signers/{id}:
    get:
      operationId: showSigner
      security:
        - apiKeyAuth: []
      summary: Obtener los detalles de un firmante
      tags:
        - signers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del firmante
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: array
                    items:
                      oneOf:
                        - allOf:
                            - $ref: '#/components/schemas/Signer'
                            - type: object
                              properties:
                                document:
                                  description: Documento relacionado con el firmante
                                  $ref: '#/components/schemas/Document'
                        - allOf:
                            - $ref: '#/components/schemas/Signer'
                            - type: object
                              properties:
                                documents:
                                  type: array
                                  items:
                                    description: Documento relacionado con el firmante
                                    $ref: '#/components/schemas/Document'
        '404':
          description: Firmante no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el firmante
                    example: No query results for model [App\Models\Signer].
    put:
      operationId: updateSigner
      security:
        - apiKeyAuth: []
      summary: Actualiza los detalles de un firmante
      tags:
        - signers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del firmante
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del firmante
                  example: Test Firmante
                email:
                  type: string
                  example: test@example.com
                expires_in:
                  type: integer
                  description: >-
                    Tiempo en minutos que durarán los tokens vinculados a este
                    firmante
                  example: 15
                public_key:
                  type: string
                  example: sd123cb1x3c2b1n3vb2m1v32b1mv3213cb8m312m1bn3
                  description: >-
                    Clave pública de la wallet (Eclipse Network) del firmante,
                    para realizar o recibir endosos
      responses:
        '200':
          description: Firmante actualizado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Signer'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      name:
                        - The name may not be greater than 255 characters.
        '404':
          description: Firmante no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el firmante
                    example: No query results for model [App\Models\Signer].
    delete:
      operationId: deleteSigner
      security:
        - apiKeyAuth: []
      summary: Elimina un firmante
      tags:
        - signers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del firmante
      responses:
        '200':
          description: Firmante eliminado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    description: Firmante borrado
                    example: Ok
        '404':
          description: Firmante no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el firmante
                    example: No query results for model [App\Models\Signer] 2
  /signers/{id}/documents:
    get:
      operationId: getPermanentSignerDocuments
      security:
        - apiKeyAuth: []
      summary: Obtiene los documentos de los firmantes permanentes
      tags:
        - signers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del firmante permanente
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/signers/51319186-a4a0-4497-a3c9-ebdbdaca0159/documents?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: null
                      path:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/signers/51319186-a4a0-4497-a3c9-ebdbdaca0159/documents
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Document'
        '404':
          description: Firmante no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el firmante
                    example: No query results for model [App\Models\Signer] 2
  /signers/{id}/create-token:
    get:
      operationId: createSignerToken
      security:
        - apiKeyAuth: []
      summary: Crea un token de acceso público para este firmante
      tags:
        - signers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del firmante
      responses:
        '200':
          description: Token creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    allOf:
                      - $ref: '#/components/schemas/Signer'
                      - type: object
                        properties:
                          token:
                            type: string
                            description: Token para firmar públicamente
                            example: 125|Nghx5nhUndSnCjQVQqNd4iKeTfaxbg86mBpSktKS
                          expiration_token:
                            type: string
                            description: Fecha de expiración del token
                            example: '2021-08-04T15:14:56.000000Z'
                          fillable_elements:
                            type: array
                            description: >-
                              Arreglo de elementos que tiene que firmar el
                              firmante
                            items:
                              $ref: '#/components/schemas/FillableElement'
        '404':
          description: Firmante no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el firmante
                    example: No query results for model [App\Models\Signer] 2
  /signers/{id}/add-signature:
    post:
      operationId: signerSignDocument
      security:
        - apiKeyAuth: []
      summary: Agrega la firma digital de este firmante al documento
      tags:
        - signers
        - digital-signature
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del firmante
      requestBody:
        description: Una petición application/json para crear la firma
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                value:
                  type: string
                  format: binary
                  description: >-
                    La imagen a insertar en el documento, formatos aceptados
                    png,jpg,jpeg,svg
                password:
                  type: string
                  description: Clave para del certificado del usuario
                  example: '457981'
      responses:
        '200':
          description: Firma agregada con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Signer'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      value:
                        - The value field is required.
  /signers/{id}/sign-with-fiel:
    post:
      operationId: signerSignWithFiel
      security:
        - apiKeyAuth: []
      summary: Firmar con FIEL
      tags:
        - signers
        - digital-signature
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del firmante
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                password:
                  type: string
                  description: Contraseña de la FIEL
                cer:
                  type: string
                  format: binary
                  description: Archivo .cer de la FIEL
                key:
                  type: string
                  format: binary
                  description: Archivo .key de la FIEL
                message:
                  type: string
                  format: html
                  description: >-
                    Mensaje custom que aparecera junto a los detalles de la
                    firma
      responses:
        '200':
          description: Firma agregada con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Signer'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      password:
                        - The password field is required.
  /signers/{id}/endorse:
    post:
      operationId: signerEndorse
      security:
        - apiKeyAuth: []
      summary: Firmar un endoso
      tags:
        - signers
        - endorsements
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: El ID del firmante
      requestBody:
        description: Una petición application/json para endosar un firmante
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                endorsement_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                  description: Id del endoso que se desea aplicar al firmante
                wallet_private_key:
                  type: string
                  description: Clave privada de la wallet del firmante
                  example: >-
                    0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
                fiel_password:
                  type: string
                  description: Clave de la FIEL del firmante
                  example: '12345'
                cer:
                  type: string
                  format: binary
                  description: Archivo .cer de la FIEL del firmante
                key:
                  type: string
                  format: binary
                  description: Archivo .key de la FIEL del firmante
                message:
                  type: string
                  format: html
                  description: >-
                    Mensaje custom que aparecera junto a los detalles de la
                    firma
      responses:
        '200':
          description: Endoso aplicado con éxito al firmante
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Endorsement'
        '404':
          description: Endoso no encontrado o firmante no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: >-
                      Informe del error que no se encontró el endoso o el
                      firmante
                    example: No query results for model [App\Models\Signer] 2
  /reviewers:
    get:
      operationId: getReviewers
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de todos los revisores registrados
      tags:
        - reviewers
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/reviewers?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/reviewers?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/reviewers
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Reviewer'
    post:
      operationId: createReviewer
      security:
        - apiKeyAuth: []
      summary: Crea un nuevo revisor
      tags:
        - reviewers
      requestBody:
        description: Una petición application/json para crear un revisor
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: Test Revisor
                email:
                  type: string
                  example: test.revisor@example.com
                type:
                  type: string
                  example: document
                  description: (Opcional) Tipo de revisor, puede ser document o endorsement
                  enum:
                    - document
                    - endorsement
                reviewable_id:
                  type: string
                  example: 12345678-1234-1234-1234-123456789012
                  description: (Opcional) Id del documento o endoso que el revisor revisará
      responses:
        '200':
          description: Revisor creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Reviewer'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - El campo 'name' es obligatorio
                      - El campo 'email' debe ser un correo electrónico válido
  /reviewers/{id}:
    get:
      operationId: showReviewer
      security:
        - apiKeyAuth: []
      summary: Obtener los detalles de un revisor
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      responses:
        '200':
          description: Detalles del revisor
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Reviewer'
        '404':
          description: Revisor no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - El revisor no fue encontrado
    put:
      operationId: updateReviewer
      security:
        - apiKeyAuth: []
      summary: Actualiza los detalles de un revisor
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      requestBody:
        description: Una petición application/json para actualizar un revisor
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: Test Revisor Actualizado
                email:
                  type: string
                  example: test.revisor@ejemplo.com
                  format: email
                  minLength: 5
                  maxLength: 100
      responses:
        '200':
          description: Revisor actualizado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Reviewer'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - El campo 'name' es obligatorio
    delete:
      operationId: deleteReviewer
      security:
        - apiKeyAuth: []
      summary: Elimina un revisor
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      responses:
        '200':
          description: Revisor eliminado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    description: Mensaje de confirmación de eliminación
                    example: Revisor eliminado con éxito
        '404':
          description: Revisor no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - Revisor no encontrado
  /reviewers/{id}/approvals:
    get:
      operationId: getReviewerApprovals
      security:
        - apiKeyAuth: []
      summary: Obtener las aprobaciones de un revisor
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/reviewers/12345678-1234-1234-1234-123456789012/approvals?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: null
                      path:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/reviewers/12345678-1234-1234-1234-123456789012/approvals
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                              example: 1
                            reviewer_id:
                              type: string
                              example: 12345678-1234-1234-1234-123456789012
                            approvable_type:
                              type: string
                              example: App\Models\Document
                            approvable_id:
                              type: string
                              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                            status:
                              type: string
                              example: pending
                              enum:
                                - pending
                                - in_progress
                                - approved
                                - rejected
                            created_at:
                              type: string
                              format: date-time
                              example: '2023-10-01T12:00:00.000000Z'
                            updated_at:
                              type: string
                              format: date-time
                              example: '2023-10-01T12:00:00.000000Z'
                            approved_at:
                              type: string
                              format: date-time
                              example: null
                            rejected_at:
                              type: string
                              format: date-time
                              example: null
                            comments:
                              type: string
                              example: Revisión inicial del documento
                            approvable:
                              type: object
                              properties:
                                id:
                                  type: string
                                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                                name:
                                  type: string
                                  example: Documento de prueba
        '404':
          description: Revisor no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - Revisor no encontrado
  /reviewers/{id}/add-to-document:
    post:
      operationId: addReviewerToDocument
      security:
        - apiKeyAuth: []
      summary: Agrega un revisor a un documento
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      requestBody:
        description: Una petición application/json para agregar un revisor a un documento
        content:
          application/json:
            schema:
              type: object
              properties:
                document_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                  description: Id del documento al que se agregará el revisor
      responses:
        '200':
          description: Revisor agregado al documento con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Approval'
        '404':
          description: Revisor o documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - Revisor o documento no encontrado
  /reviewers/{id}/remove-from-document:
    post:
      operationId: removeReviewerFromDocument
      security:
        - apiKeyAuth: []
      summary: Elimina un revisor de un documento
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      requestBody:
        description: Una petición application/json para eliminar un revisor de un documento
        content:
          application/json:
            schema:
              type: object
              properties:
                document_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                  description: Id del documento del que se eliminará el revisor
      responses:
        '200':
          description: Revisor eliminado del documento con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '404':
          description: Revisor o documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - Revisor o documento no encontrado
  /reviewers/{id}/add-to-endorsement':
    post:
      operationId: addReviewerToEndorsement
      security:
        - apiKeyAuth: []
      summary: Agrega un revisor a una aprobación de endoso
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      requestBody:
        description: >-
          Una petición application/json para agregar un revisor a una aprobación
          de endoso
        content:
          application/json:
            schema:
              type: object
              properties:
                endorsement_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                  description: Id del endoso al que se agregará el revisor
      responses:
        '200':
          description: Revisor agregado al endoso con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Approval'
        '404':
          description: Revisor o endoso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - Revisor o endoso no encontrado
  /reviewers/{id}/remove-from-endorsement:
    post:
      operationId: removeReviewerFromEndorsement
      security:
        - apiKeyAuth: []
      summary: Elimina un revisor de una aprobación de endoso
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      requestBody:
        description: >-
          Una petición application/json para eliminar un revisor de una
          aprobación de endoso
        content:
          application/json:
            schema:
              type: object
              properties:
                endorsement_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                  description: Id del endoso del que se eliminará el revisor
      responses:
        '200':
          description: Revisor eliminado del endoso con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '404':
          description: Revisor o endoso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - Revisor o endoso no encontrado
  /reviewers/{id}/send-approval-request:
    post:
      operationId: sendReviewerApprovalRequest
      security:
        - apiKeyAuth: []
      summary: Envía una solicitud de aprobación a un revisor
      tags:
        - reviewers
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 12345678-1234-1234-1234-123456789012
          description: El ID del revisor
      requestBody:
        description: >-
          Una petición application/json para enviar una solicitud de aprobación
          al revisor
        content:
          application/json:
            schema:
              type: object
              properties:
                time_to_approve:
                  type: integer
                  example: 86400
                  description: >-
                    Tiempo en minutos que el revisor tiene para aprobar el
                    documento
      responses:
        '200':
          description: Solicitud de aprobación enviada con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Approval'
        '404':
          description: Revisor o documento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  errors:
                    type: array
                    items:
                      type: string
                    example:
                      - Revisor o documento no encontrado
  /document-events:
    get:
      operationId: getDocumentEvents
      parameters:
        - in: query
          name: document_id
          required: false
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: Id del documento de los eventos
      security:
        - apiKeyAuth: []
      summary: Obtener los eventos del documento
      tags:
        - document-events
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/document-events?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: null
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/document-events
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/DocumentEvent'
    post:
      operationId: createDocumentEvent
      security:
        - apiKeyAuth: []
      summary: Crea un evento que aparecerá en el historial del documento
      tags:
        - document-events
      requestBody:
        description: Una petición multipart/form-data para crear eventos con imágenes
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                description:
                  type: string
                  example: Validación ine
                images:
                  type: array
                  maxItems: 3
                  items:
                    type: string
                    format: binary
                event_timestamp:
                  type: string
                  example: '2021-08-10T15:30:33.867783Z'
      responses:
        '200':
          description: Evento creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/DocumentEvent'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    example:
                      document_id:
                        - The document id field is required
  /document-events/{id}:
    get:
      operationId: showDocumentEvent
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: Id del evento
      summary: Obtener el detalle del evento solicitado
      tags:
        - document-events
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentEvent'
        '404':
          description: Evento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el evento
                    example: No query results for model [App\Models\DocumentEvent] 5
    put:
      operationId: updateDocumentEvent
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: Id del evento
      summary: Actualiza la información de un evento
      tags:
        - document-events
      requestBody:
        description: Una petición application/json para actualizar un evento
        content:
          application/json:
            schema:
              type: object
              properties:
                document_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                description:
                  type: string
                  example: Validación ine
                event_timestamp:
                  type: string
                  example: '2021-03-10T19:57:06.000000Z'
      responses:
        '200':
          description: Evento actualizado con éxito
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentEvent'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    example:
                      document_id:
                        - The document id field is required
        '404':
          description: Evento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el evento
                    example: No query results for model [App\Models\DocumentEvent] 5
    delete:
      operationId: deleteDocumentEvent
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: Id del evento
      summary: Borra un evento
      tags:
        - document-events
      responses:
        '200':
          description: Evento borrado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                    description: Operacion exitosa
                  result:
                    type: string
                    example: Ok
        '404':
          description: Evento no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Evento no encontrado
                    example: No query results for model [App\Models\DocumentEvent] 5
  /endorsements:
    get:
      operationId: getEndorsements
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de todos los endosos
      tags:
        - endorsements
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/endorsements?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/endorsements?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/endorsements
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Endorsement'
    post:
      operationId: createEndorsement
      security:
        - apiKeyAuth: []
      summary: Crea un endoso
      tags:
        - endorsements
      requestBody:
        description: Una petición application/json para crear un endoso
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del endoso
                  example: Endoso de prueba
                type:
                  type: string
                  description: Tipo de endoso
                  example: guarantee
                  enum:
                    - guarantee
                    - collection
                    - ownership
                auto_certify:
                  type: boolean
                  description: Indica si el endoso se certifica automáticamente
                  example: true
                signer_id:
                  type: string
                  description: ID del firmante
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                document_id:
                  type: string
                  description: ID del documento al que se le aplicará el endoso
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                endorsement_id:
                  type: string
                  description: ID del endoso al que se le aplicará el endoso
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                endorsee_id:
                  type: string
                  description: ID del endosatario (Signer)
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '201':
          description: Endoso creado con éxito
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Endorsement'
        '422':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      name:
                        - The name field is required
  /endorsements/{id}:
    get:
      operationId: showEndorsement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del endoso
      summary: Obtener el detalle del endoso solicitado
      tags:
        - endorsements
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Endorsement'
        '404':
          description: Endoso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el endoso
                    example: >-
                      No query results for model [App\Models\Endorsement]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
    put:
      operationId: updateEndorsement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del endoso
      summary: Actualiza la información de un endoso
      tags:
        - endorsements
      requestBody:
        description: Una petición application/json para actualizar un endoso
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del endoso
                  example: Endoso de prueba actualizado
                type:
                  type: string
                  description: Tipo de endoso
                  example: endorsement_updated
                auto_certify:
                  type: boolean
                  description: Indica si el endoso se certifica automáticamente
                  example: false
                signer_id:
                  type: string
                  description: ID del firmante
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                document_id:
                  type: string
                  description: ID del documento al que se le aplicará el endoso
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                endorsement_id:
                  type: string
                  description: ID del endoso al que se le aplicará el endoso
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                endorsee_name:
                  type: string
                  description: Nombre del endosatario
                  example: Endosatario de prueba actualizado
                endorsee_public_id:
                  type: string
                  description: ID público del endosatario CURP o RFC
                  example: XAXX010101HNEXXXA
                endorsee_public_key:
                  type: string
                  description: Clave pública del endosatario
                  example: >-
                    as4cv1d25v15xdv1x32b1c5b1dfb32n1gf58mg1h32m1gh8k4g2sd3vgsdg523sd1g8
                endorsee_contact:
                  type: string
                  description: Información de contacto del endosatario
                  example: test@example.com
      responses:
        '200':
          description: Endoso actualizado con éxito
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Endorsement'
        '404':
          description: Endoso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el endoso
                    example: >-
                      No query results for model [App\Models\Endorsement]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
        '422':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      name:
                        - The name field is required
    delete:
      operationId: deleteEndorsement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del endoso
      summary: Borra un endoso
      tags:
        - endorsements
      responses:
        '200':
          description: Endoso borrado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '404':
          description: Endoso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el endoso
                    example: >-
                      No query results for model [App\Models\Endorsement]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /endorsements/{id}/certify:
    post:
      operationId: certifyEndorsement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del endoso
      summary: Certifica un endoso
      tags:
        - endorsements
      responses:
        '200':
          description: Endoso certificado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/Endorsement'
        '404':
          description: Endoso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el endoso
                    example: >-
                      No query results for model [App\Models\Endorsement]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /endorsements/{id}/download:
    get:
      operationId: downloadEndorsement
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del endoso
      summary: Descarga un endoso en formato PDF
      tags:
        - endorsements
      responses:
        '200':
          description: Endoso descargado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  endorsement_url:
                    type: string
                    description: URL publica para descargar el endoso
                    example: >-
                      https://api.test.rem.tools/signt/endorsements/51319186-a4a0-4497-a3c9-ebdbdaca0159/download
                  attachment_url:
                    type: string
                    description: URL publica para descargar el attachment
                    example: >-
                      https://api.test.rem.tools/signt/endorsements/51319186-a4a0-4497-a3c9-ebdbdaca0159/attachment
                  certificate_base64:
                    type: string
                    description: Certificado en base64
                    example: MIIC...base64...
        '404':
          description: Endoso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el endoso
                    example: >-
                      No query results for model [App\Models\Endorsement]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /endorsements/{id}/approvals:
    get:
      operationId: getEndorsementApprovals
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del endoso
      summary: Obtener las aprobaciones de un endoso
      tags:
        - endorsements
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: array
                    items:
                      type: object
                      allOf:
                        - $ref: '#/components/schemas/Endorsement'
                        - type: object
                          properties:
                            approvals:
                              type: array
                              items:
                                allOf:
                                  - $ref: '#/components/schemas/Approval'
                                  - type: object
                                    properties:
                                      reviewer:
                                        $ref: '#/components/schemas/Reviewer'
        '404':
          description: Endoso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el endoso
                    example: >-
                      No query results for model [App\Models\Endorsement]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /endorsements/{id}/send-approval-resques:
    post:
      operationId: sendEndorsementApprovalRequest
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del endoso
      summary: Envía una solicitud de aprobación para un endoso
      tags:
        - endorsements
      requestBody:
        description: Una petición application/json para enviar solicitudes de aprobación
        content:
          application/json:
            schema:
              type: object
              properties:
                time_to_approve:
                  type: integer
                  example: 86400
                  description: >-
                    Tiempo en minutos que el revisor tiene para aprobar el
                    documento
                reset_approvals:
                  type: boolean
                  example: false
                  description: Indica si se deben reiniciar las aprobaciones existentes
      responses:
        '200':
          description: Solicitud de aprobación enviada con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      message:
                        type: string
                        description: Mensaje de éxito
                        example: Solicitud de aprobación enviada con éxito
                      reviewers_count:
                        type: integer
                        description: Cantidad de revisores asignados al endoso
                        example: 3
        '404':
          description: Endoso no encontrado o no se pudo enviar la solicitud de aprobación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: >-
                      Informe del error que no se encontró el endoso o no se
                      pudo enviar la solicitud de aprobación
                    example: >-
                      No query results for model [App\Models\Endorsement]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /batch-processes:
    get:
      operationId: getBatchProcesses
      security:
        - apiKeyAuth: []
      summary: Obtener una lista de todos los procesos por lotes
      tags:
        - batch-processes
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/batch-processes?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: >-
                          https://api.test.rem.tools/signt/batch-processes?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/batch-processes
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/BatchProcess'
    post:
      operationId: createBatchProcess
      security:
        - apiKeyAuth: []
      summary: Crea un nuevo proceso por lotes para firmar documentos con FIEL
      tags:
        - batch-processes
      requestBody:
        description: Una petición application/json para crear un proceso por lotes
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del proceso por lotes
                  example: Proceso por lotes de prueba
                type:
                  type: string
                  description: Tipo de proceso por lotes
                  example: batch_process_type
                  enum:
                    - document
                    - endorsement
                signer_id:
                  type: string
                  description: ID del firmante
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                document_ids:
                  type: array
                  description: >-
                    IDs de los documentos a procesar por lotes para el tipo de
                    documento
                  items:
                    type: string
                    example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                endorsement_ids:
                  type: array
                  description: >-
                    IDs de los endosos a procesar por lotes para el tipo de
                    endoso
                  items:
                    type: string
                    example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                endorsee_id:
                  type: string
                  description: >-
                    ID del endosatario (Signer) en caso de que endosos en el
                    proceso no tengan endosatario
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '201':
          description: Proceso por lotes creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/BatchProcess'
        '422':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      name:
                        - The name field is required
  /batch-processes/{id}:
    get:
      operationId: showBatchProcess
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del proceso por lotes
      summary: Obtener el detalle del proceso por lotes solicitado
      tags:
        - batch-processes
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchProcess'
        '404':
          description: Proceso por lotes no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el proceso por lotes
                    example: >-
                      No query results for model [App\Models\BatchProcess]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
    put:
      operationId: updateBatchProcess
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del proceso por lotes
      summary: Actualiza la información de un proceso por lotes
      tags:
        - batch-processes
      requestBody:
        description: Una petición application/json para actualizar un proceso por lotes
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Nombre del proceso por lotes
                  example: Proceso por lotes de prueba actualizado
                type:
                  type: string
                  description: Tipo de proceso por lotes
                  example: batch_process_type_updated
                signer_id:
                  type: string
                  description: ID del firmante
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                document_ids:
                  type: array
                  description: >-
                    IDs de los documentos a procesar por lotes para el tipo de
                    documento
                  items:
                    type: string
                    example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                endorsement_ids:
                  type: array
                  description: >-
                    IDs de los endosos a procesar por lotes para el tipo de
                    endoso
                  items:
                    type: string
                    example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
      responses:
        '200':
          description: Proceso por lotes actualizado con éxito
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchProcess'
        '404':
          description: Proceso por lotes no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el proceso por lotes
                    example: >-
                      No query results for model [App\Models\BatchProcess]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
        '422':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      name:
                        - The name field is required
    delete:
      operationId: deleteBatchProcess
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del proceso por lotes
      summary: Borra un proceso por lotes
      tags:
        - batch-processes
      responses:
        '200':
          description: Proceso por lotes borrado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '404':
          description: Proceso por lotes no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el proceso por lotes
                    example: >-
                      No query results for model [App\Models\BatchProcess]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /batch-processes/{id}/process:
    post:
      operationId: processBatchProcess
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del proceso por lotes
      summary: Procesa un proceso por lotes
      tags:
        - batch-processes
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                wallet_private_key:
                  type: string
                  format: binary
                  description: Clave privada de la wallet para firmar endosos
                fiel_password:
                  type: string
                  description: Clave de la FIEL del firmante
                  example: '12345'
                cer:
                  type: string
                  format: binary
                  description: Archivo .cer de la FIEL del firmante
                key:
                  type: string
                  format: binary
                  description: Archivo .key de la FIEL del firmante
                message:
                  type: string
                  format: html
                  description: >-
                    Mensaje custom que aparecera junto a los detalles de la
                    firma
      responses:
        '200':
          description: Proceso por lotes procesado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      status:
                        type: string
                        description: Estado del proceso por lotes
                        example: processing
                      completed:
                        type: object
                        properties:
                          count:
                            type: integer
                            description: Cantidad de documentos o endosos procesados
                            example: 10
                          documents:
                            type: array
                            items:
                              type: string
                              description: IDs de los documentos o endosos procesados
                              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                      errors:
                        type: array
                        items:
                          type: object
                          properties:
                            message:
                              type: string
                              description: Mensaje de error
                              example: >-
                                Error al procesar el documento
                                51319186-a4a0-4497-a3c9-ebdbdaca0159
                            code:
                              type: string
                              description: Código de error
                              example: 701
        '404':
          description: Proceso por lotes no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el proceso por lotes
                    example: >-
                      No query results for model [App\Models\BatchProcess]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /batch-processes/{id}/download:
    get:
      operationId: downloadBatchProcess
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del proceso por lotes
      summary: Descarga un proceso por lotes en formato PDF
      tags:
        - batch-processes
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: Correo electrónico del usuario que solicita la descarga
                  example: test@example.com
      responses:
        '200':
          description: Proceso por lotes descargado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: string
                    example: >-
                      Creating zip file in background, you will receive an email
                      when it is ready
        '404':
          description: Proceso por lotes no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el proceso por lotes
                    example: >-
                      No query results for model [App\Models\BatchProcess]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /batch-processes/{id}/send-approval-requests:
    post:
      operationId: sendBatchProcessApprovalRequests
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
          description: ID del proceso por lotes
      summary: Envía solicitudes de aprobación para un proceso por lotes
      tags:
        - batch-processes
      requestBody:
        description: >-
          Una petición application/json para enviar solicitudes de aprobación
          para un proceso por lotes
        content:
          application/json:
            schema:
              type: object
              properties:
                time_to_approve:
                  type: integer
                  example: 86400
                  description: >-
                    Tiempo en minutos que el revisor tiene para aprobar el
                    documento
                reset_approvals:
                  type: boolean
                  example: false
                  description: Indica si se deben reiniciar las aprobaciones existentes
      responses:
        '200':
          description: Solicitudes de aprobación enviadas con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      message:
                        type: string
                        description: Mensaje de éxito
                        example: Solicitudes de aprobación enviadas con éxito
                      reviewers_count:
                        type: integer
                        description: Cantidad de revisores asignados al proceso por lotes
                        example: 3
        '404':
          description: >-
            Proceso por lotes no encontrado o no se pudo enviar la solicitud de
            aprobación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: string
                    description: >-
                      Informe del error que no se encontró el proceso por lotes
                      o no se pudo enviar la solicitud de aprobación
                    example: >-
                      No query results for model [App\Models\BatchProcess]
                      51319186-a4a0-4497-a3c9-ebdbdaca0159
  /external:
    get:
      operationId: getExternalDocument
      security:
        - apiKeyAuth: []
      summary: Consulta de documentos externos
      tags:
        - external
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      first_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/external?page=1
                      from:
                        type: integer
                        example: 1
                      next_page_url:
                        type: string
                        example: https://api.test.rem.tools/signt/external?page=2
                      path:
                        type: string
                        example: https://api.test.rem.tools/signt/external
                      per_page:
                        type: integer
                        example: 20
                      prev_page_url:
                        type: string
                        example: null
                      to:
                        type: integer
                        example: 20
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/ExternalDocument'
    post:
      operationId: createExternalDocument
      security:
        - apiKeyAuth: []
      summary: >-
        Genera un documento sellado con NOM 151 y certificados digitales para
        cada firmante
      tags:
        - external
      requestBody:
        description: Una petición multipart/form-data para sellar un archivo con NOM 151
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: Archivo que se desea firmar
                file_tmp_id:
                  type: string
                  format: uuid
                  description: >-
                    Uuid del archivo si se subio con el api de archivos
                    temporales
                signers:
                  type: array
                  description: Firmantes de este documento
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                        example: Test Firmante
                      email:
                        type: string
                        example: test@example.com
                      password:
                        type: string
                        minLength: 5
                        example: '123456'
                      country:
                        type: string
                        minLength: 2
                        maxLength: 2
                        example: MX
                      state:
                        type: string
                        example: México City
                      locality:
                        type: string
                        example: Iztapalapa
                      organization:
                        type: string
                        example: rem-tools
                      metadata:
                        type: object
      responses:
        '200':
          description: Documento firmado con éxito
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      file:
                        - The file field is required
  /external/sign-nom151:
    post:
      operationId: singNom151External
      summary: Crea una constancia de NOM 151 para el sha256 de la peticion
      security:
        - apiKeyAuth: []
      tags:
        - external
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                sha256:
                  type: string
                  format: sha256
                  maxLength: 64
                  minLength: 64
                filename:
                  type: string
                  maxLength: 255
      responses:
        '200':
          description: NOM 151 creada con exito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/ExternalDocument'
        '400':
          description: Error al crear la constancia
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    example: Document already signed.
  /external/{sha256}:
    get:
      operationId: showExternalDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: sha256
          required: true
          schema:
            type: string
            example: 65f45505a560f8aefbfc0ac31ffcddab1183b144b607df41c7b3c3424c05d4e9
          description: Hash sha256 del archivo PDF
      summary: Obtener un documento correspondiente al sha256
      tags:
        - external
      responses:
        '200':
          description: Consulta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    $ref: '#/components/schemas/ExternalDocument'
        '404':
          description: Documento externo no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el evento
                    example: No query results for ExternalDocuments
    delete:
      operationId: deleteExternalDocument
      security:
        - apiKeyAuth: []
      parameters:
        - in: path
          name: sha256
          required: true
          schema:
            type: string
            example: 65f45505a560f8aefbfc0ac31ffcddab1183b144b607df41c7b3c3424c05d4e9
          description: Hash sha256 del archivo PDF
      summary: Borra un documento correspondiente al sha256
      tags:
        - external
      responses:
        '200':
          description: Documento externo borrado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '404':
          description: Documento externo no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el evento
                    example: No query results for ExternalDocuments
  /external/verify-document:
    post:
      operationId: verifyExternalDocument
      security:
        - apiKeyAuth: []
      summary: Verifica que el documento enviado corresponda con uno registrado
      tags:
        - external
      requestBody:
        description: Una petición multipart/form-data con el documento a validar
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: Archivo que se desea validar
                file_tmp_id:
                  type: string
                  format: uuid
                  description: >-
                    Uuid del archivo si se subio con el api de archivos
                    temporales
      responses:
        '200':
          description: Validación exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      match:
                        type: boolean
                        example: true
                      document_hash:
                        type: string
                        example: >-
                          65f45505a560f8aefbfc0ac31ffcddab1183b144b607df41c7b3c3424c05d4e9
                      document:
                        $ref: '#/components/schemas/ExternalDocument'
        '404':
          description: Documento externo no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el evento
                    example: No query results for ExternalDocuments
  /external/verify-nom151:
    post:
      operationId: verifyNom151ExternalDocument
      security:
        - apiKeyAuth: []
      summary: Verifica la constancia digital a partir de el sha256 del documento
      tags:
        - external
      requestBody:
        description: Peticion application/json post
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                sha256:
                  type: string
                  format: sha256
                  example: >-
                    65f45505a560f8aefbfc0ac31ffcddab1183b144b607df41c7b3c3424c05d4e9
      responses:
        '200':
          description: Validación exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      valid:
                        type: boolean
                        example: true
                      hash:
                        type: string
                        description: Hash sha256 del documento verificado
                        example: >-
                          f65cf09147392b539fd7fb12d6d8c2b6ffd3f403166e577bcfa04ec9fe0aadde
                      timestamp_info:
                        type: string
                        description: Información del obtenida del certificado de NOM 151
                        example: "signer cert serial number: 2A\r\nsigner cert issuer: L=Alvaro Obregon,ST=Ciudad de Mexico,C=MX,PostalCode=01030,STREET=Insurgentes Sur 1940\\, Col. Florida,CN=Autoridad Certificadora Raiz Segunda de Secretaria de Economia,OU=Direccion General de Normatividad Mercantil,O=Secretaria de Economia,E=acr2se@economia.gob.mx\r\ngenTime: 2021-08-24T21:28:57Z\r\ncertificates count: 1\r\nall certificates: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc; SKI=c2c859d69b38a1c13aa1bdab038e60bb32300210\r\nembedded certificate: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc; SKI=c2c859d69b38a1c13aa1bdab038e60bb32300210\r\nadding to certificate chain: EMAILADDRESS=acedicommx@edicomgroup.com, O=Edicomunicaciones Mexico S.A. de C.V., OU=TSA, CN=TSAEDICOMMX, STREET=Avda. Paseo de la Reforma 483 Pisos 25-27 Cuauhtemoc, OID.2.5.4.17=06500, C=MX, ST=Ciudad de Mexico, L=Cuauhtemoc\r\n1.2.840.113549.1.9.4=<Set oid='1.2.840.113549.1.9.4' name='pkcs9_messageDigest'></Set>\r\n1.2.840.113549.1.9.3=<Set oid='1.2.840.113549.1.9.3' name='pkcs9_contentType'></Set>\r\n1.2.840.113549.1.9.52=<Set oid='1.2.840.113549.1.9.52'></Set>\r\n1.2.840.113549.1.9.5=<Set oid='1.2.840.113549.1.9.5' name='pkcs9_signingTime'></Set>\r\n1.2.840.113549.1.9.16.2.47=<Set oid='1.2.840.113549.1.9.16.2.47' name='id_aa_signingCertificateV2'></Set>\r\n"
                      document:
                        $ref: '#/components/schemas/ExternalDocument'
        '404':
          description: Documento externo no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: string
                    description: Informe del error que no se encontró el evento
                    example: No query results for ExternalDocuments
  /public/signer/signature:
    post:
      operationId: addSignerPublicSignature
      security:
        - bearerAuthPublicSigner: []
      summary: Agrega la firma del firmante al documento
      tags:
        - public
      requestBody:
        description: Una petición multipart/form-data para crear la firma
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                value:
                  type: string
                  format: binary
                  description: >-
                    La imagen a insertar en el documento, formatos aceptados
                    png,jpg,jpeg,svg
                finish:
                  type: boolean
                  description: Caduca el token público, 0 o 1
                  example: 0
                password:
                  type: string
                  description: Clave para del certificado del usuario
                  example: '457981'
      responses:
        '201':
          description: Firma agregada con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '403':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  error: Missing authorization token
  /public/signer/sign-with-fiel:
    post:
      operationId: addPublicFielSignature
      security:
        - bearerAuthPublicSigner: []
      summary: Firmar publicamente con la FIEL del firmante
      tags:
        - public
      requestBody:
        description: Una petición multipart/form-data para crear la firma FIEL
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                password:
                  type: string
                  description: Contraseña de la FIEL del firmante
                  example: 123456abc
                cer:
                  type: string
                  format: binary
                  description: Archivo .cer que es parte de la FIEL
                key:
                  type: string
                  format: binary
                  description: Archivo .key que es parte de la FIEL
                message:
                  type: string
                  description: >-
                    Mensaje que acompaña la fecha en que se firmo el documento
                    en el historial de eventos, no requerido
      responses:
        '200':
          description: Firma agregada con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      cer:
                        - The file cer is required
        '403':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  error: Missing authorization token
  /public/signer/document-preview:
    get:
      operationId: getPublicPreview
      security:
        - bearerAuthPublicSigner: []
      summary: Construir un preview del PDF
      tags:
        - public
      responses:
        '200':
          description: Preview generado con éxito
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '403':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  error: Missing authorization token
  /public/signer/revoke-token:
    get:
      operationId: revokeSignerToken
      security:
        - bearerAuthPublicSigner: []
      summary: Elimina el token público para dejar de hacer cambios
      tags:
        - public
      responses:
        '200':
          description: Token eliminado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    example: Ok
        '403':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  error: Missing authorization token
  /public/signer/document-info:
    get:
      operationId: getSignerPublicInfo
      security:
        - bearerAuthPublicSigner: []
      summary: Obtiene la información del documento para el firmante
      tags:
        - public
      responses:
        '200':
          description: Token eliminado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: object
                    properties:
                      document:
                        $ref: '#/components/schemas/Document'
                      sign_elements:
                        type: array
                        description: Arreglo de elementos que tiene que firmar el firmante
                        items:
                          $ref: '#/components/schemas/FillableElement'
        '403':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  error: Missing authorization token
  /public/document/upload-files:
    post:
      operationId: uploadPublicFilesToDocument
      security:
        - bearerAuthPublicDoc: []
      summary: Adjunta archivos a un documento
      tags:
        - public
      requestBody:
        description: Una petición application/json con un arreglo de URLs
        content:
          application/json:
            schema:
              type: object
              properties:
                urls:
                  type: array
                  items:
                    type: string
                    description: URL de el archivo
                    example: http://example.com/image.jpg
                paths:
                  type: array
                  items:
                    type: string
                    description: Path de S3 al archivo
                    example: /path/to/file.jpg
                collection:
                  type: string
                  example: ine
      responses:
        '200':
          description: Archivos agregados con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    type: string
                    example: Files saved
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: operación exitosa
                    example: false
                  error:
                    type: object
                    description: Errores de validación
                    example:
                      paths:
                        - The paths field is required.
        '403':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  error: Missing authorization token
  /public/document/create-signer:
    post:
      operationId: createPublicSigner
      security:
        - bearerAuthPublicDoc: []
      summary: Crea un firmante para este documento con un token para acceso público
      tags:
        - public
      requestBody:
        description: Una petición application/json para crear un firmante
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: Test Firmante
                email:
                  type: string
                  example: test@example.com
                password:
                  type: string
                  example: '12345'
                  description: Contraseña para proteger el certificado de la firma digital
                country:
                  type: string
                  maxLength: 2
                  minLength: 2
                  example: MX
                state:
                  type: string
                  example: México City
                locality:
                  type: string
                  example: Iztapalapa
                organization:
                  type: string
                  example: rem-tools
                external_person_id:
                  type: string
                  example: 1a3sd51fsd32g1sdg5
                expires_in:
                  type: integer
                  description: >-
                    Tiempo de expiración en minutos de los token vinculados, si
                    es 0 no expiran
                  example: 15
                metadata:
                  type: object
                  example: null
                elements:
                  type: array
                  example:
                    - 51319186-a4a0-4497-a3c9-ebdbdaca0159
                    - 78932121-c7b0-4497-c9c4-abdfcaca9874
                  items:
                    type: string
                    description: Id del elemento del template que representa la firma
      responses:
        '200':
          description: Firmante creado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Operacion exitosa
                    example: true
                  result:
                    allOf:
                      - $ref: '#/components/schemas/Signer'
                      - type: object
                        properties:
                          fillable_elements:
                            type: array
                            items:
                              $ref: '#/components/schemas/FillableElement'
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                    description: Operacion exitosa
                  error:
                    type: object
                    example:
                      name:
                        - The name field is required.
        '403':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  error: Missing authorization token
  /public/document/preview:
    get:
      operationId: getPublicDocumentPreview
      security:
        - bearerAuthPublicDoc: []
      summary: Construir un preview del PDF
      tags:
        - public
      responses:
        '200':
          description: Preview generado con éxito
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '403':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  error: Missing authorization token
x-webhooks:
  document-finished:
    post:
      summary: Documento terminado
      description: >-
        Webhook que se envia cuando se ha configurado el autosigning y
        callback_url en la creación del documento
      operationId: webhookFinishDocument
      tags:
        - webhooks
      requestBody:
        description: Una petición application/json con la información del documento firmado
        content:
          application/json:
            schema:
              type: object
              properties:
                resource:
                  type: string
                  description: Tipo de recurso
                  example: Document
                event:
                  type: string
                  description: Tipo de evento
                  example: Finish
                resource_id:
                  type: string
                  description: Identificador del recurso
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                payload:
                  description: Información del evento
                  type: object
                  allOf:
                    - $ref: '#/components/schemas/Document'
                    - type: object
                      properties:
                        document_url:
                          type: string
                          description: URL temporal de descarga
                          example: >-
                            https://signt-platform-storage.s3.us-west-2.amazonaws.com/36/Caratula-16-marzo.pdf?response-content-type=application%2Foctet-stream&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIG%2Bpoy2pJzlOR%2FZv3gxPAliR24keVQo%2BLAGpv6H1jSs7AiEAmeEmkSVZ2IK4rYBf6rIfEnOsEXXzDZVb0%2FQj70oQ%2Bpoq2gEIMhABGgwwMDE4OTU1NjA3NTkiDD%2BEpbp%2BPi8C1l7ftCq3ASAJ33pCCMEKu%2FnMaFE66YLK5vEIUGeHu2KAo2Gyj8QELB4PKc7dm%2BRXVl407jpFpwVvvvqioh86Mwg0GphoTkPiguEQwXMMI1Z1ZzOu93ozLWg0h2YfcF8b4qU3rRbR5Un0WehwfjCThzJXRFoFfcvFhKzLswBDR3D9LGowokJb0x7hOcK9bGTmBz2A0MtknXliffuIstawdkR%2BWjD2pM69hBPpbWmFU82uObuX%2Fc7qwOvkXIzGbDDQ28iCBjrhAVVyL517jKJ4zpMFwY%2BXgeREpWmCiHeVyktsav%2F9A69CoORunRtQmTP1OrpMU3%2BOev7y875JqlgsgGra4ozecQYhrRcu1l59El1vIWQ%2FeGHq%2BaieTV2LLoDcdXxM%2F72S2daShR%2FeWcydKUxbIRqmrwYhDHXWUjCPFRYqmTn1SgKEn6EKlOjdwWEXAml1eF4ufkIaGte1rX%2Bo%2FKMegtZ9gI0cb%2BotnPvGpovmzRhKaN%2FTnP6OPVkiooeC94xsWA6jF2fZG9ZHiSZL6HrtVV0sCSezVDLy1nBx7ik%2Bo0HycEt3kQ%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQA4H36Y3RAUEDLOH%2F20210317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210317T183753Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Signature=5ce29670aede42e0925adfa22747ac63ac2142d46a4a345f4c3e9822a425e2fc
                        signers:
                          type: array
                          description: Arreglo de firmantes del documento
                          items:
                            $ref: '#/components/schemas/Signer'
                        template:
                          $ref: '#/components/schemas/Template'
      responses:
        2XX:
          description: >-
            Regresar cualquier estatus 2XX para indicar que la información fue
            recibida
  signer-signed:
    post:
      summary: Firmante ha firmado
      description: >-
        Webhook que se envia cuando se ha configurado el callback_url y un
        firmante ha firmado de manera pública con el parámetro finish igual a 1
      operationId: webhookSignerSigned
      tags:
        - webhooks
      requestBody:
        description: Una petición application/json con la información del firmante
        content:
          application/json:
            schema:
              type: object
              properties:
                resource:
                  type: string
                  description: Tipo de recurso
                  example: Signer
                event:
                  type: string
                  description: Tipo de evento
                  example: Sign
                resource_id:
                  type: string
                  description: Identificador del recurso
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                payload:
                  description: Información del evento
                  allOf:
                    - $ref: '#/components/schemas/Signer'
      responses:
        2XX:
          description: >-
            Regresar cualquier estatus 2XX para indicar que la información fue
            recibida
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Rem-Apikey
      description: Apikey para los servicios de Rem-Tools
    bearerAuthPublicSigner:
      type: http
      scheme: bearer
      description: Token generado al crear un acceso público para un firmante
    bearerAuthPublicDoc:
      type: http
      scheme: bearer
      description: Token generado para acceso público del documento
  schemas:
    Template:
      description: Representación de un template
      type: object
      properties:
        id:
          type: string
          description: El ID del template
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        name:
          type: string
          description: Nombre del template
          example: Test
        description:
          type: string
          description: Descripción del template
          example: Template test
        pages:
          type: integer
          description: Numero de paginas del templates
          example: 5
        created_at:
          type: string
          description: Fecha de creación formato ISO
          example: '2021-03-10T00:09:30.000000Z'
        updated_at:
          type: string
          description: Última fecha de actualización formato ISO
          example: '2021-03-10T00:09:30.000000Z'
    TemplateElement:
      description: Representación de un elemento del template
      type: object
      properties:
        id:
          type: string
          description: El ID del elemento de template
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        name:
          type: string
          description: Nombre del elemento de template
          example: Campo 2
        template_id:
          type: string
          description: El ID del template relacionado
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        type:
          oneOf:
            - type: integer
              title: Text
              description: Elemento de tipo texto
              default: 1
              example: 1
            - type: integer
              title: Imagen
              description: Elemento de tipo imagen
              default: 2
              example: 2
            - type: integer
              title: Firma
              description: Elemento de tipo firma
              default: 3
              example: 3
        page:
          type: integer
          minimum: 1
          description: Pagina donde se insertará el elemento del template
          example: 1
        top:
          type: number
          minimum: 0
          description: Posición desde arriba para insertar el elemento en la página
          example: 20
        left:
          type: number
          minimum: 0
          description: Posición desde la izquierda para insertar el elemento en la página
          example: 20
        width:
          type: number
          minimum: 0
          description: Ancho que ocupará el elemento en la página
          example: 50
        height:
          type: number
          minimum: 0
          description: Altura que ocupará el elemento en la página
          example: 20
        default_value:
          type: string
          description: >-
            Valor por defecto del elemento de template, solo para elementos de
            tipo texto
          example: Valor por defecto
        metadata:
          type: object
          description: Metadata de un elemento de tipo Texto
          properties:
            font:
              example: times
              oneOf:
                - type: string
                  title: times
                  description: Fuente Times
                  example: times
                - type: string
                  title: courier
                  description: Fuente courier
                  example: courier
                - type: string
                  title: helvetica
                  description: Fuente helvetica
                  example: helvetica
                - type: string
                  title: symbol
                  description: Fuente symbol
                  example: symbol
                - type: string
                  title: zapfdingbats
                  description: Fuente zapfdingbats
                  example: zapfdingbats
            font_size:
              type: integer
              description: Tamaño de la fuente en puntos
              example: 12
            font_style:
              type: string
              description: >
                Estilo de fuente con una de las opciones o la combinación de
                estas: Negritas (B), Italica (I),

                Subrayado (U), Tachado (D), Overline (O)
              example: BI
            text_align:
              oneOf:
                - type: string
                  description: Alinedo Izaquierda
                  title: Izquierda (L)
                - type: string
                  description: Alinedo Centro
                  title: Centro (C)
                - type: string
                  description: Alinedo Derecha
                  title: Derecha (R)
                - type: string
                  description: Alinedo Justificado
                  title: Justificado (J)
              type: string
              description: Alineación del texto
              example: J
            vertical_align:
              oneOf:
                - type: string
                  description: Alinedo Arriba
                  title: Arriba (T)
                - type: string
                  description: Alinedo Centro
                  title: Centro (C)
                - type: string
                  description: Alinedo Abajo
                  title: Abajo (B)
              type: string
              description: Alineación vertical del texto, T por defecto
              example: C
            line_height:
              type: number
              description: >-
                Altura de cada línea del texto con respecto al tamaño de la
                fuente
              example: 1.25
            font_color_rgb:
              type: array
              description: Color de fuente en RGB
              minLength: 3
              maxLength: 3
              example:
                - 0
                - 0
                - 0
              items:
                type: integer
                minimum: 0
                maximum: 255
        rules:
          type: array
          description: >-
            Reglas de validación para el valor del elemento, referirse a la
            validación de laravel
          example:
            - required
            - string
            - max:50
          items:
            type: string
        created_at:
          type: string
          description: Fecha de creación formato ISO
          example: '2021-03-10T00:09:30.000000Z'
        updated_at:
          type: string
          description: Última fecha de actualización formato ISO
          example: '2021-03-10T00:09:30.000000Z'
    Document:
      title: Document
      oneOf:
        - type: object
          properties:
            id:
              type: string
              description: El ID del Documento
              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
            template_id:
              type: string
              description: El ID del template relacionado con el documento
              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
            name:
              type: string
              description: El nombre del Documento
              example: Documento ejemplo
            send_email:
              type: boolean
              description: >-
                Bandera que indica si se enviara el documento por email al
                terminar
              example: false
            autosigning:
              type: boolean
              description: >-
                Bandera que indica si se firmara con NOM 151 el documento al
                terminar los usuarios de firmar
              example: false
            callback_url:
              type: string
              description: >-
                URL en caso de que se quiera hacer llegar el documento al
                terminar el firmado de NOM 151.
              example: http://example.com
            expires_in:
              type: integer
              description: >-
                Tiempo de expiración en minutos para los tokens vinculados, si
                es 0 no tienen expiración
              example: 15
            from_file:
              type: boolean
              description: >-
                Bandera que indica que el documento fue creado de un archivo PDF
                en lugar de un template
              example: false
            created_at:
              type: string
              description: Fecha de creación formato ISO
              example: '2021-02-26T01:06:59.000000Z'
            updated_at:
              type: string
              description: Última fecha de actualización formato ISO
              example: '2021-02-26T01:06:59.000000Z'
            last_generated_at:
              type: string
              description: Última fecha en que se generó el documento formato ISO
              example: '2021-02-26T01:06:59.000000Z'
            signed_at:
              type: string
              description: Fecha en que se firmó el documento formato ISO
              example: null
            fiel_sign_started_at:
              type: string
              format: date
              description: Fecha en la que se coloco la primera firma con fiel
              example: '2021-02-26T01:06:59.000000Z'
            fiel_doc_hash:
              type: string
              format: sha256
              description: Sha256 del documento que se firmo con fiel
            asn1_base64:
              type: string
              format: base64
              description: Constancia de validez para el documento
            sha256:
              type: string
              format: sha256
              description: Sha256 del documento que contiene la hoja de tiempos
        - type: object
          properties:
            id:
              type: string
              description: El ID del Documento
              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
            template_id:
              type: string
              description: El ID del template relacionado con el documento
              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
            name:
              type: string
              description: El nombre del Documento
              example: Documento ejemplo
            send_email:
              type: boolean
              description: >-
                Bandera que indica si se enviara el documento por email al
                terminar
              example: false
            autosigning:
              type: boolean
              description: >-
                Bandera que indica si se firmara con NOM 151 el documento al
                terminar los usuarios de firmar
              example: false
            callback_url:
              type: string
              description: >-
                URL en caso de que se quiera hacer llegar el documento al
                terminar el firmado de NOM 151.
              example: http://example.com
            expires_in:
              type: integer
              description: >-
                Tiempo de expiración en minutos para los tokens vinculados, si
                es 0 no tienen expiración
              example: 15
            from_file:
              type: boolean
              description: >-
                Bandera que indica que el documento fue creado de un archivo PDF
                en lugar de un template
              example: false
            created_at:
              type: string
              description: Fecha de creación formato ISO
              example: '2021-02-26T01:06:59.000000Z'
            updated_at:
              type: string
              description: Última fecha de actualización formato ISO
              example: '2021-02-26T01:06:59.000000Z'
            last_generated_at:
              type: string
              description: Última fecha en que se generó el documento formato ISO
              example: '2021-02-26T01:06:59.000000Z'
            signed_at:
              type: string
              description: Fecha en que se firmó el documento formato ISO
              example: null
            fiel_sign_started_at:
              type: string
              format: date
              description: Fecha en la que se coloco la primera firma con fiel
              example: '2021-02-26T01:06:59.000000Z'
            fiel_doc_hash:
              type: string
              format: sha256
              description: Sha256 del documento que se firmo con fiel
            asn1_base64:
              type: string
              format: base64
              description: Constancia de validez para el documento
            sha256:
              type: string
              format: sha256
              description: Sha256 del documento que contiene la hoja de tiempos
            signature:
              type: object
              properties:
                document_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                signer_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                signed_at:
                  type: string
                  format: date
                  example: '2021-04-07T15:14:19.000000Z'
                expires_in:
                  type: integer
                  example: 100
                is_fiel_signature:
                  type: boolean
                  example: false
    DocumentElement:
      type: object
      properties:
        id:
          type: string
          description: El ID del elemento llenado del documento
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        value:
          type: string
          description: Valor en texto del elemento o extensión de la imagen
          example: Texto ejemplo
        document_id:
          type: string
          description: El ID del documento al que pertenece este elemento
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        template_element_id:
          type: string
          description: El ID del elemento de template relacionado
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        created_at:
          type: string
          description: Fecha de creación formato ISO
          example: '2021-02-26T01:06:59.000000Z'
        updated_at:
          type: string
          description: Última fecha de actualización formato ISO
          example: '2021-02-26T01:06:59.000000Z'
    Signer:
      oneOf:
        - type: object
          title: Temporary Signer
          properties:
            id:
              type: string
              description: Identificador del firmante
              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
            name:
              type: string
              description: Nombre del firmante
              example: Test Firmante
            email:
              type: string
              description: Correo electrónico del firmante
              example: test@example.com
            phone_number:
              type: string
              description: Número de teléfono del firmante 10 o 12 dígitos
              example: '5215555555555'
            document_id:
              type: string
              description: Identificador del documento al que pertenece el firmante
              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
            created_at:
              type: string
              description: Fecha de creación del firmante
              example: '2021-04-07T15:14:19.000000Z'
            updated_at:
              type: string
              description: Fecha de actualización del firmante
              example: '2021-04-07T15:14:19.000000Z'
            signed_at:
              type: string
              description: Fecha de firma del firmante
              example: '2021-04-07T15:14:19.000000Z'
            person_id:
              type: string
              format: uuid
              example: 51456456-a4a0-4497-a3c9-ebdbdaca0159
            public_key:
              type: string
              example: sd123cb1x3c2b1n3vb2m1v32b1mv3213cb8m312m1bn3
              description: >-
                Llave pública de la wallet del firmante (Eclipse Network), se
                utiliza para firmar el documento
            external_person_id:
              type: string
              example: null
            include_name_in_signature:
              type: boolean
              description: >-
                Bandera que indica si se incluye el nombre del firmante en la
                firma
              example: false
            expires_in:
              type: integer
              description: >-
                Tiempo de expiración en minutos de los token vinculados, si es 0
                no expiran
              example: 15
            metadata:
              type: object
              example: null
            is_fiel_signature:
              type: boolean
              description: Indicador de si el firmante utilizara si FIEL para firmar
              example: false
            is_permanent:
              type: boolean
              description: Bandera que indica si el firmante es permanente o temporal
              example: false
        - type: object
          title: Permanent Signer
          properties:
            id:
              type: string
              description: Identificador del firmante
              example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
            name:
              type: string
              description: Nombre del firmante
              example: Test Firmante
            email:
              type: string
              description: Correo electrónico del firmante
              example: test@example.com
            document_id:
              type: string
              description: Identificador del documento al que pertenece el firmante
              example: null
            created_at:
              type: string
              description: Fecha de creación del firmante
              example: '2021-04-07T15:14:19.000000Z'
            updated_at:
              type: string
              description: Fecha de actualización del firmante
              example: '2021-04-07T15:14:19.000000Z'
            signed_at:
              type: string
              description: Fecha de firma del firmante
              example: null
            public_key:
              type: string
              example: sd123cb1x3c2b1n3vb2m1v32b1mv3213cb8m312m1bn3
              description: >-
                Llave pública de la wallet del firmante (Eclipse Network), se
                utiliza para firmar el documento
            external_person_id:
              type: string
              example: null
            expires_in:
              type: integer
              description: >-
                Tiempo de expiración en minutos de los token vinculados, si es 0
                no expiran
              example: 0
            metadata:
              type: object
              example: null
            is_fiel_signature:
              type: boolean
              description: Indicador de si el firmante utilizara si FIEL para firmar
              example: false
            is_permanent:
              type: boolean
              description: Bandera que indica si el firmante es permanente o temporal
              example: true
            signature:
              type: object
              properties:
                document_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                signer_id:
                  type: string
                  example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
                signed_at:
                  type: string
                  format: date
                  example: '2021-04-07T15:14:19.000000Z'
                expires_in:
                  type: integer
                  example: 100
                is_fiel_signature:
                  type: boolean
                  example: false
    FillableElement:
      type: object
      properties:
        id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        signer_id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        template_element_id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        document_element_id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        filled_at:
          type: string
          description: Fecha en que se llenó este campo
          example: '2021-08-04T15:14:56.000000Z'
        created_at:
          type: string
          example: '2021-04-07T15:14:19.000000Z'
        updated_at:
          type: string
          example: '2021-04-07T15:14:19.000000Z'
    DocumentEvent:
      type: object
      properties:
        id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        document_id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        description:
          type: string
          example: Validación ine
        event_timestamp:
          type: string
          description: Fecha del evento
          example: '2021-03-10T19:57:06.000000Z'
        created_at:
          type: string
          description: Fecha de creación del elemento
          example: '2021-03-10T19:57:06.000000Z'
        updated_at:
          type: string
          description: Fecha de actualización del elemento
          example: '2021-03-10T19:57:06.000000Z'
    ExternalDocument:
      type: object
      properties:
        id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        filename:
          type: string
          example: Contrato_prueba.pdf
        sha256:
          type: string
          example: 65f45505a560f8aefbfc0ac31ffcddab1183b144b607df41c7b3c3424c05d4e9
        asn1_base64:
          type: string
          description: Certificado asn1 de NOM 151 codificado en base64
        metadata:
          type: object
          description: Metadata guardada por el usuario para el documento
          example: null
        signed_at:
          type: string
          example: '2021-07-29T18:29:05.000000Z'
        created_at:
          type: string
          example: '2021-07-29T18:29:03.000000Z'
        updated_at:
          type: string
          example: '2021-07-29T18:29:05.000000Z'
    Endorsement:
      type: object
      properties:
        id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        name:
          type: string
          example: Endoso de prueba
        type:
          type: string
          example: Endoso de prueba
        sha256:
          type: string
          example: 65f45505a560f8aefbfc0ac31ffcddab1183b144b607df41c7b3c3424c05d4e9
        auto_certify:
          type: boolean
          example: false
        signer_id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        document_id:
          type: string
          description: ID del documento relacionado
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        endorsement_id:
          type: string
          description: ID del endoso relacionado
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        original_document_id:
          type: string
          description: ID del documento original relacionado
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        endorsee_id:
          type: string
          description: ID del endosatario relacionado (Signer)
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        status:
          type: string
          description: Estado del endoso
          example: pending
        metadata:
          type: object
          description: Metadata guardada de la firma realizada por el usuario
          example: null
        signed_at:
          type: string
          description: Fecha de firma del endoso
          example: '2021-07-29T18:29:05.000000Z'
        certified_at:
          type: string
          description: Fecha de certificación del endoso
          example: '2021-07-29T18:29:05.000000Z'
        blockchain_metadata:
          type: object
          description: Metadata de la transacción en blockchain
          example: null
        certificate_base64:
          type: string
          description: Certificado de la firma en base64
          example: MIIC...
    BatchProcess:
      type: object
      description: >-
        Representación de un proceso por lotes para firmar con e.firma (FIEL)
        documentos o endosos
      properties:
        id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        type:
          type: string
          example: document
          enum:
            - document
            - endorsement
        status:
          type: string
          example: pending
          enum:
            - pending
            - processing
            - completed
            - error
    Reviewer:
      type: object
      description: Representación de un revisor de documentos
      properties:
        id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        name:
          type: string
          example: Revisor de prueba
        email:
          type: string
          example: revisor@ejemplo.com
        created_at:
          type: string
          example: '2021-07-29T18:29:05.000000Z'
        updated_at:
          type: string
          example: '2021-07-29T18:29:05.000000Z'
    Approval:
      type: object
      description: Representación de una aprobación de un revisor
      properties:
        id:
          type: integer
          example: 1
        reviewer_id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        approvable_id:
          type: string
          example: 51319186-a4a0-4497-a3c9-ebdbdaca0159
        approvable_type:
          type: string
          example: App\Models\Document
        status:
          type: string
          example: approved
          enum:
            - pending
            - in_progress
            - approved
            - rejected
        comment:
          type: string
          example: Aprobado sin cambios
        metadata:
          type: object
          description: Metadata adicional de la aprobación
          example: null
        approved_at:
          type: string
          description: Fecha de aprobación del revisor
          example: '2021-07-29T18:29:05.000000Z'
        rejected_at:
          type: string
          description: Fecha de rechazo del revisor
          example: null
        created_at:
          type: string
          example: '2021-07-29T18:29:05.000000Z'
        updated_at:
          type: string
          example: '2021-07-29T18:29:05.000000Z'
