> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tupana.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Enrolar Usuario Autorizado

> Enrola un usuario autorizado del SII para emitir boletas de honorarios

## Endpoints disponibles

Este endpoint está disponible en dos formatos:

* **`PATCH /v1/honorary/authorized-users/`** (recomendado): El `master_entity_id` y `rut` se proporcionan en el body o query parameters
* **`PATCH /v1/honorary/master-entities/{master_entity_id}/authorized-users/{rut}/`**: El `master_entity_id` y `rut` se proporcionan en la ruta (mantiene compatibilidad)

## Qué hace

Enrola un usuario autorizado del SII para emitir boletas de honorarios. El `master_entity_id` y `rut` pueden proporcionarse en el body, query parameters, o en la ruta (según el endpoint usado). Para desenrolar un usuario, usa el endpoint de [Desenrolar Usuario Autorizado](/api-reference/honorary/unenroll).

### Enrolar (action="enroll" o sin action)

Enrola un usuario autorizado del SII para que pueda emitir boletas de honorarios desde la cuenta del usuario para una entidad emisora específica. Al enrolar:

1. Valida que el RUT esté en el **caché local** de autorizados de la entidad (poblado por [Sincronizar Usuarios Autorizados](/api-reference/honorary/authorized-users-sync), no consulta el SII en el momento)
2. Extrae el nombre real del usuario tal como quedó registrado en la última sincronización
3. Crea una nueva entidad con la razón social completa
4. Asocia la entidad al usuario y a la credencial de la entidad emisora

## Ejemplos de uso

* Permitir que un contador emita boletas de honorarios para una empresa específica
* Agregar un nuevo autorizador al sistema después de verificar sus permisos en el SII
* Configurar usuarios para emisión de boletas en una entidad emisora específica

## Reglas de negocio

### Acción por defecto

Este endpoint está diseñado para enrolar usuarios. Si no se especifica el parámetro `action` en el body, el sistema asume que se quiere enrolar el usuario. Para desenrolar un usuario, usa el endpoint de [Desenrolar Usuario Autorizado](/api-reference/honorary/unenroll).

### Validación automática

El RUT debe existir en el caché local de autorizados (última sincronización exitosa con el SII). Si el RUT no está en el caché, la operación falla — con dos mensajes posibles:

* **La entidad nunca fue sincronizada**: pide sincronizar primero (ver [Sincronizar Usuarios Autorizados](/api-reference/honorary/authorized-users-sync)).
* **La entidad sí fue sincronizada, pero el RUT no aparece** en el listado del SII: el RUT simplemente no está autorizado.

### Creación de entidad automática

Si el usuario no tiene una entidad asociada, se crea automáticamente. El nombre de la entidad se obtiene del registro del SII para garantizar exactitud. La entidad se asocia tanto al usuario como a la credencial de la entidad emisora.

### Usuario ya enrolado

Si el usuario ya está enrolado, la operación retorna un estado especial indicando que ya estaba enrolado, pero no falla. Esto permite que el frontend muestre el estado correcto sin generar errores.

### Actualización del contexto

Después del enrolamiento exitoso, el frontend debe actualizar el contexto de entidades. La nueva entidad aparecerá en el selector de empresas con su nombre real obtenido del SII.

## Consideraciones importantes

* Requiere credenciales SII válidas para validar la autorización
* El nombre se obtiene directamente del SII para garantizar exactitud
* Una vez enrolado, el usuario puede emitir boletas desde esa cuenta
* El enrolamiento es reversible mediante el endpoint de desenrolar


## OpenAPI

````yaml PATCH /honorary/authorized-users/
openapi: 3.0.0
info:
  title: Tupana API
  description: API para integración con el sistema Tupana - Facturación Electrónica
  version: 1.0.0
servers:
  - url: https://api.tupana.ai/v1
    description: Servidor de producción
security:
  - apiKeyAuth: []
paths:
  /honorary/authorized-users/:
    patch:
      tags:
        - Honorary
      summary: Enrolar usuario autorizado
      description: >-
        Enrola un usuario autorizado del SII para emitir boletas de honorarios.
        El RUT se valida contra el caché local (poblado por POST
        .../authorized-users/sync/), no contra el SII en vivo — sincroniza
        primero si la entidad nunca fue sincronizada. El master_entity_id y rut
        se proporcionan en el body o query parameters. Para desenrolar, usa el
        endpoint de desenrolar.
      parameters:
        - name: master_entity_id
          in: query
          required: false
          schema:
            type: integer
            description: ID de la entidad emisora
          description: >-
            ID de la entidad emisora. Puede proporcionarse en query parameter o
            en el body.
        - name: rut
          in: query
          required: false
          schema:
            type: string
            description: RUT del usuario autorizado
          description: >-
            RUT del usuario a gestionar. Puede proporcionarse en query parameter
            o en el body.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                master_entity_id:
                  type: integer
                  description: >-
                    ID de la entidad emisora (requerido si no se proporciona en
                    query parameter)
                  example: 1
                rut:
                  type: string
                  description: >-
                    RUT del usuario autorizado (requerido si no se proporciona
                    en query parameter)
                  example: 12.345.678-9
                action:
                  type: string
                  enum:
                    - enroll
                    - unenroll
                  description: Acción a realizar. Por defecto 'enroll'
                  default: enroll
                  example: enroll
              required:
                - master_entity_id
                - rut
      responses:
        '200':
          description: Operación exitosa (enrolar o desenrolar)
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    description: Respuesta al enrolar
                    properties:
                      status:
                        type: string
                        enum:
                          - enrolled
                          - already_enrolled
                        description: Estado del enrolamiento
                      message:
                        type: string
                        description: Mensaje descriptivo
                      rut:
                        type: string
                        description: RUT normalizado del usuario enrolado
                      master_entity:
                        type: object
                        description: Información de la entidad creada/asociada
                        properties:
                          id:
                            type: integer
                            description: ID de la entidad
                          name:
                            type: string
                            description: Nombre completo de la entidad
                          tax_id:
                            type: string
                            description: RUT de la entidad
                    required:
                      - status
                      - message
                      - rut
                  - type: object
                    description: Respuesta al desenrolar
                    properties:
                      success:
                        type: boolean
                        description: Siempre true para respuestas exitosas
                        example: true
                      message:
                        type: string
                        description: Mensaje descriptivo del resultado
                        example: >-
                          Usuario autorizador 12345678-9 desenrolado
                          exitosamente
                      rut:
                        type: string
                        description: RUT del usuario desenrolado
                        example: 12345678-9
                    required:
                      - success
                      - message
                      - rut
        '400':
          description: Datos inválidos, usuario no autorizado, o acción inválida
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    oneOf:
                      - example: Se requiere el parámetro master_entity_id
                      - example: Se requiere el parámetro rut
                      - example: >-
                          El RUT proporcionado no está en la lista de usuarios
                          autorizadores
                      - example: >-
                          Aún no se ha sincronizado la lista de usuarios
                          autorizadores con el SII para esta entidad. Sincroniza
                          primero e inténtalo de nuevo.
                      - example: La acción debe ser 'enroll' o 'unenroll'
                      - example: El RUT proporcionado no es válido
        '403':
          description: Sin permisos para acceder a la entidad
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Usuario sin permisos para acceder a la entidad
        '404':
          description: Entidad, credencial o usuario no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    oneOf:
                      - example: No se encontró una credencial válida para la entidad
                      - example: >-
                          No se encontró una entidad con el RUT asociada al
                          usuario
        '500':
          description: Error interno del servidor
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Error al gestionar usuario autorizador
      security:
        - apiKeyAuth: []
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API Key para autenticación. Debe proporcionarse en el header
        Authorization con el formato: 'Api-Key YOUR-API-KEY' (incluye el prefijo
        'Api-Key ' seguido de tu API key)

````