> ## 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.

# Desenrolar Usuario Autorizado

> 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. Para desenrolar, usa el endpoint de desenrolar.

## Qué hace

Remueve la autorización de un usuario para emitir boletas de honorarios desde una entidad emisora específica. Este endpoint usa el mismo método **PATCH** que enrolar, pero con `action="unenroll"` en el body. Al desenrolar:

1. Valida que el usuario esté actualmente enrolado para esa entidad
2. Desasocia la entidad del usuario
3. Desasocia la entidad de la credencial emisora
4. El usuario ya no puede emitir boletas desde esa cuenta para esa entidad

## Ejemplos de uso

* Remover permisos de un contador que ya no trabaja con una empresa específica
* Desautorizar un usuario temporalmente para una entidad
* Limpiar autorizadores inactivos del sistema
* Cambiar permisos de emisión de boletas para una entidad específica

## Reglas de negocio

### Acción requerida

Para desenrolar un usuario, se debe especificar explícitamente `action="unenroll"` en el body. Este endpoint usa el mismo método PATCH que enrolar, diferenciándose solo por el parámetro de acción.

### Validación de permisos

Solo el usuario que tiene acceso a la entidad emisora puede desenrolar. Se verifica que el usuario tenga acceso a la entidad emisora y que el usuario esté actualmente enrolado antes de proceder.

### Desasociación completa

Se remueve la asociación usuario-entidad y la asociación entidad-credencial. La entidad puede permanecer en el sistema pero sin permisos de emisión para ese usuario específico.

### Actualización del contexto

Después del desenrolamiento, el frontend debe actualizar el contexto. La entidad desaparecerá del selector de empresas para ese usuario y el estado de enrolamiento en la lista de autorizados cambiará a no enrolado.

## Consideraciones importantes

* Operación reversible: el usuario puede ser reenrolado manualmente si es necesario
* No elimina la entidad del sistema, solo remueve permisos de emisión
* Requiere los mismos permisos que para enrolar
* Actualiza automáticamente el estado en la lista de autorizados

## Relación con otros endpoints

* **GET /v1/honorary/authorized-users/?master\_entity\_id={id}**: Lista usuarios y su estado de enrolamiento (recomendado)
* **GET /v1/honorary/master-entities/{master_entity_id}/authorized-users/**: Lista usuarios y su estado de enrolamiento (compatibilidad)
* **PATCH /v1/honorary/authorized-users/** con `action="enroll"`: Operación inversa (enrolar, recomendado, master\_entity\_id y rut en body)
* **PATCH /v1/honorary/authorized-users/** con \`action="unenroll"\*\*: Esta operación (desenrolar, recomendado, master\_entity\_id y rut en body)
* **PATCH /v1/honorary/master-entities/{master_entity_id}/authorized-users/{rut}/** con `action="enroll"`: Operación inversa (enrolar, compatibilidad)
* **PATCH /v1/honorary/master-entities/{master_entity_id}/authorized-users/{rut}/** con `action="unenroll"`: Esta operación (desenrolar, compatibilidad)


## OpenAPI

````yaml PATCH /honorary/master-entities/{master_entity_id}/authorized-users/{rut}/
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/master-entities/{master_entity_id}/authorized-users/{rut}/:
    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. Para desenrolar, usa el
        endpoint de desenrolar.
      parameters:
        - name: master_entity_id
          in: path
          required: true
          schema:
            type: integer
            description: ID de la entidad emisora
          description: ID de la entidad emisora
        - name: rut
          in: path
          required: true
          schema:
            type: string
            description: RUT del usuario autorizado
          description: RUT del usuario a gestionar (con o sin formato)
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: string
                  enum:
                    - enroll
                    - unenroll
                  description: Acción a realizar. Por defecto 'enroll'
                  default: enroll
                  example: enroll
      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: >-
                          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)

````