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

# Pautas y mantenciones de un activo

> Pestaña «Pautas» de la ficha del activo. Evalúa antes las mantenciones del activo y devuelve cada pauta con sus tareas (intervalo, último servicio, próximo, cuánto falta y estado), las cifras de todas sus mantenciones abiertas y las mantenciones sueltas. Una tarea sin último servicio queda en `no_reference` («Falta el último servicio»). Responde 404 `ASSET_NOT_FOUND` si el activo no es de la empresa.



## OpenAPI

````yaml /openapi.json get /api/maintenance/assets/{assetId}/programs
openapi: 3.0.0
info:
  title: UGPS Atlas API
  version: 1.0.0
  description: >-
    Documentación de la API REST principal de UGPS Atlas (plataforma de rastreo
    GPS)
servers:
  - url: https://api.ugps.io
    description: Servidor de producción
security:
  - bearerAuth: []
  - cookieAuth: []
tags:
  - name: Auth - Autenticación
    description: Operaciones de autenticación
  - name: Usuarios - Usuarios
    description: Operaciones relacionadas con usuarios
  - name: Usuarios - Roles
    description: Operaciones relacionadas con roles
  - name: Usuarios - Permisos
    description: Operaciones relacionadas con permisos
  - name: Activos - Assets
    description: Operaciones relacionadas con activos
  - name: Activos - Tipos
    description: Operaciones relacionadas con tipos de activos
  - name: Activos - Grupos
    description: Operaciones relacionadas con grupos de activos
  - name: Activos - Campos personalizados
    description: >-
      Campos propios que cada empresa define para sus activos (nombre interno,
      tipo, reglas y opciones)
  - name: Activos - Grupos de campos
    description: Grupos que ordenan los campos personalizados de la empresa
  - name: Activos - Vehículos
    description: Operaciones relacionadas con tipos de vehículos
  - name: Activos - QR
    description: >-
      QR del activo (identidad escaneable del activo): resolver, stickers,
      reemplazo e historial
  - name: Tracking - Trackers
    description: Operaciones relacionadas con trackers
  - name: Tracking - Viajes
    description: Operaciones relacionadas con viajes y paradas
  - name: Tracking - Geocercas
    description: Operaciones relacionadas con geocercas
  - name: Alertas - Alertas
    description: Operaciones relacionadas con alertas
  - name: Alertas - Disparadores
    description: Operaciones relacionadas con disparadores de alertas
  - name: Alertas - Notificaciones
    description: Operaciones relacionadas con notificaciones
  - name: Clientes - Clientes
    description: Operaciones relacionadas con clientes
  - name: Clientes - Restricciones
    description: Operaciones relacionadas con restricciones
  - name: Integraciones - Flespi
    description: Operaciones relacionadas con Flespi
  - name: Otros - Conductores
    description: Operaciones relacionadas con conductores
  - name: Formularios dinámicos
    description: Plantillas de formulario propias de Atlas, asignables a activos
  - name: Inspecciones
    description: >-
      Inspecciones de activos enviadas desde la app al escanear el QR, con
      resultado apta / no apta
  - name: Otros - Capas
    description: Operaciones relacionadas con capas
  - name: User Tracker Access
    description: Operaciones de acceso personalizado a trackers por usuario
  - name: Reportes - Historial de Posiciones
    description: Estadísticas y detalle de posiciones GPS por activo
  - name: Reportes - Excesos de Velocidad
    description: Reportes de excesos de velocidad por tracker
  - name: Reportes - Ralentí
    description: Reportes de ralentí (motor encendido sin movimiento) por tracker
  - name: Reportes - Horas de Trabajo
    description: >-
      Reportes de horas de trabajo (conducción + paradas dentro de horario
      laboral) por tracker
  - name: Reportes - Última Actividad
    description: Reporte de estado de comunicación y última posición de activos
  - name: Reportes - Reportes Programados
    description: Gestión de reportes programados (CRUD)
  - name: Device Health
    description: Operaciones de salud de dispositivos del cliente
  - name: Activity Log
    description: Registro de actividad del cliente
  - name: Work - Importaciones
    description: Operaciones de importación de datos
  - name: Work - Plantillas
    description: Operaciones de plantillas de importación
  - name: Cargo - Transportistas
    description: Gestión de transportistas
  - name: Cargo - Pedidos
    description: Gestión de pedidos de carga
  - name: Cargo - Monitoreo
    description: Monitoreo en vivo de carga y transporte
  - name: Integraciones - Navixy
    description: Integración con plataforma Navixy
  - name: Mantenimiento - Dashboard
    description: Dashboard y métricas generales de mantenimiento
  - name: Mantenimiento - Proveedores
    description: Gestión de proveedores de servicio
  - name: Mantenimiento - Tareas
    description: Catálogo de tareas con que se arman las pautas de mantención
  - name: Mantenimiento - Pautas
    description: Pautas de mantención, con sus tareas del catálogo y su familia de activos
  - name: Mantenimiento - Estado
    description: Estado de mantenimiento de activos
  - name: Mantenimiento - Perfiles
    description: Perfiles de mantenimiento por activo
  - name: Mantenimiento - Fallas
    description: Gestión de fallas activas
  - name: Mantenimiento - DVIR
    description: Driver Vehicle Inspection Reports
  - name: Mantenimiento - Defectos
    description: Gestión de defectos detectados
  - name: Mantenimiento - Programaciones
    description: Programación de mantenimientos preventivos
  - name: Mantenimiento - Próximos
    description: Ítems de mantenimiento próximos
  - name: Mantenimiento - Órdenes de Trabajo
    description: Gestión de órdenes de trabajo
  - name: Mantenimiento - Registros de Servicio
    description: Registros históricos de servicios realizados
  - name: Mantenimiento - Problemas
    description: Gestión de problemas de mantenimiento
  - name: Mantenimiento - Tareas de Servicio
    description: Tareas específicas dentro de órdenes de trabajo
  - name: Mantenimiento - Inventario
    description: Gestión de partes, ubicaciones y stock
  - name: Mantenimiento - Costos
    description: Gestión y agregación de costos de mantenimiento
  - name: Trabajo - Tareas
    description: Gestión de tareas, tareas recurrentes, rutas y operaciones en lote
  - name: Trabajo - Empleados
    description: Gestión de empleados, departamentos y sus catálogos (tags, trackers)
  - name: Otros - Lugares
    description: Gestión de lugares (places) del cliente
  - name: Cargo - Activos
    description: Disponibilidad de activos de carga
  - name: Cargo - Ubicaciones
    description: Gestión de ubicaciones de carga
  - name: Cargo - Rendimiento
    description: Métricas de rendimiento de pedidos de carga
  - name: Reportes - Check-ins
    description: Reporte de check-ins de tareas
  - name: Reportes - Utilización
    description: Reporte de utilización de activos
  - name: Reportes - Visitas por Geocercas
    description: Reporte de visitas a geocercas
  - name: Reportes - Visitas por Trackers
    description: Reporte de visitas por tracker/activo
  - name: Reportes - Progreso de Geozonas
    description: Reporte de progreso de cobertura de geozonas (agricultura)
  - name: Reportes - Temperatura
    description: Reporte de temperatura por activo
  - name: Reportes - Exportación
    description: Exportación de reportes a archivo
  - name: Público - Business Time
    description: Reloj de servidor (endpoint público, sin autenticación)
  - name: Formularios
    description: Definiciones y envíos de formularios de la app
  - name: Sistema
    description: Endpoints de salud del servicio (liveness/readiness), sin autenticación
  - name: Facturación
    description: >-
      Portal del cliente — facturas publicadas de la empresa (proyección de
      Raúl)
  - name: Tienda de módulos
    description: >-
      Catálogo de módulos y productos UGPS con el estado de cada uno para el
      usuario
  - name: Soporte
    description: Portal del cliente — tickets de soporte de la empresa (proyección de Raúl)
  - name: Asistente
    description: Historial de conversaciones del Asistente de Atlas (spec
paths:
  /api/maintenance/assets/{assetId}/programs:
    get:
      tags:
        - Mantenimiento - Pautas
      summary: Pautas y mantenciones de un activo
      description: >-
        Pestaña «Pautas» de la ficha del activo. Evalúa antes las mantenciones
        del activo y devuelve cada pauta con sus tareas (intervalo, último
        servicio, próximo, cuánto falta y estado), las cifras de todas sus
        mantenciones abiertas y las mantenciones sueltas. Una tarea sin último
        servicio queda en `no_reference` («Falta el último servicio»). Responde
        404 `ASSET_NOT_FOUND` si el activo no es de la empresa.
      parameters:
        - name: assetId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Pautas del activo
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    required:
                      - dueCounts
                      - programs
                      - looseItems
                    properties:
                      dueCounts:
                        type: object
                        description: >-
                          Cifras de vencimiento de los ítems abiertos: vencidas,
                          próximas, al día y sin último servicio («Falta el
                          último servicio»: sin referencia ni Supuesto al
                          entrar, no vencen hasta tener su primera lectura). Son
                          una partición: cada ítem abierto cuenta en una sola de
                          `overdue`, `dueSoon`, `ok`, `assumedOk` y
                          `missingLastService`. `assumedLastService` cuenta
                          además todo lo supuesto (≈), en cualquier estado.
                        required:
                          - overdue
                          - dueSoon
                          - ok
                          - assumedOk
                          - missingLastService
                          - assumedLastService
                        properties:
                          overdue:
                            type: integer
                          dueSoon:
                            type: integer
                          ok:
                            type: integer
                            description: Al día con dato real, sin los supuestos (≈).
                          assumedOk:
                            type: integer
                            description: Al día con alguna referencia supuesta (≈).
                          missingLastService:
                            type: integer
                          assumedLastService:
                            type: integer
                            description: Ítems con alguna referencia supuesta (≈).
                      programs:
                        type: array
                        items:
                          type: object
                          required:
                            - id
                            - name
                            - tasks
                          properties:
                            id:
                              type: string
                            name:
                              type: string
                              example: Volvo
                            tasks:
                              type: array
                              description: >-
                                De la más urgente a las que no tienen último
                                servicio.
                              items:
                                type: object
                                description: >-
                                  Una mantención abierta del activo, de una
                                  pauta o suelta.
                                required:
                                  - itemId
                                  - scheduleId
                                  - title
                                  - taskDefinition
                                  - recurrence
                                  - conditions
                                  - lastService
                                  - dueStatus
                                  - status
                                  - referenceNeedsReview
                                properties:
                                  itemId:
                                    type: string
                                  scheduleId:
                                    type: string
                                  title:
                                    type: string
                                    example: Rotación de neumáticos
                                  taskDefinition:
                                    type: object
                                    nullable: true
                                    description: >-
                                      Tarea del catálogo; `null` en una
                                      mantención suelta.
                                    properties:
                                      id:
                                        type: string
                                      code:
                                        type: string
                                        example: ROT
                                  recurrence:
                                    type: string
                                    enum:
                                      - once
                                      - repeat
                                    description: >-
                                      Mantención no programada (`once`) o que se
                                      repite (`repeat`). Al leer, sin el campo
                                      la programación se repite (las anteriores
                                      a #3663). Desde #3875 el alta suelta solo
                                      crea `once`; las que se repiten se crean
                                      en una pauta. No cambia: la edición acepta
                                      el mismo valor y responde 409
                                      `MAINTENANCE_SCHEDULE_RECURRENCE_IMMUTABLE`
                                      si cambia.
                                  conditions:
                                    oneOf:
                                      - type: object
                                        description: >-
                                          Regla como condiciones, cada una con su
                                          propio valor; vence con la primera que
                                          se cumpla. Exige al menos una. Las
                                          lecturas la devuelven siempre, resuelta
                                          desde los campos viejos si la
                                          programación no la tiene.
                                        properties:
                                          date:
                                            type: object
                                            required:
                                              - every
                                              - unit
                                            properties:
                                              every:
                                                type: integer
                                                minimum: 1
                                              unit:
                                                type: string
                                                enum:
                                                  - days
                                                  - weeks
                                                  - months
                                              dueDate:
                                                type: string
                                                format: date
                                                description: >-
                                                  Primer vencimiento (`YYYY-MM-DD`, zona
                                                  horaria de la app). Opcional; desde el
                                                  primer cierre vence a un intervalo del
                                                  último servicio.
                                                example: '2026-11-15'
                                              remindBefore:
                                                type: integer
                                                minimum: 0
                                              remindUnit:
                                                type: string
                                                enum:
                                                  - days
                                                  - weeks
                                                  - months
                                          odometer:
                                            type: object
                                            required:
                                              - everyKm
                                            properties:
                                              everyKm:
                                                type: integer
                                                minimum: 1
                                              remindBeforeKm:
                                                type: integer
                                                minimum: 0
                                          engineHours:
                                            type: object
                                            required:
                                              - everyHours
                                            properties:
                                              everyHours:
                                                type: integer
                                                minimum: 1
                                              remindBeforeHours:
                                                type: integer
                                                minimum: 0
                                      - type: object
                                        description: >-
                                          Regla «Una vez»: las mismas casillas con
                                          valores absolutos; vence con la primera
                                          que se cumpla. Exige al menos una. La
                                          fecha puede estar en el pasado.
                                        properties:
                                          date:
                                            type: object
                                            required:
                                              - dueDate
                                            properties:
                                              dueDate:
                                                type: string
                                                format: date
                                                description: >-
                                                  Día en que vence (`YYYY-MM-DD`, zona
                                                  horaria de la app).
                                                example: '2026-11-15'
                                              remindBefore:
                                                type: integer
                                                minimum: 0
                                              remindUnit:
                                                type: string
                                                enum:
                                                  - days
                                                  - weeks
                                                  - months
                                          odometer:
                                            type: object
                                            required:
                                              - dueAtKm
                                            properties:
                                              dueAtKm:
                                                type: integer
                                                minimum: 0
                                                example: 120000
                                              remindBeforeKm:
                                                type: integer
                                                minimum: 0
                                          engineHours:
                                            type: object
                                            required:
                                              - dueAtHours
                                            properties:
                                              dueAtHours:
                                                type: integer
                                                minimum: 0
                                                example: 3000
                                              remindBeforeHours:
                                                type: integer
                                                minimum: 0
                                  lastService:
                                    type: object
                                    description: >-
                                      Último servicio de la asignación; `null`
                                      en lo que falta.
                                    properties:
                                      odometer:
                                        type: number
                                        nullable: true
                                      engineHours:
                                        type: number
                                        nullable: true
                                      date:
                                        type: string
                                        format: date-time
                                        nullable: true
                                      assumed:
                                        type: array
                                        description: >-
                                          Las referencias que son un Supuesto al
                                          entrar (≈), no un dato escrito.
                                        items:
                                          type: string
                                          enum:
                                            - odometer
                                            - engineHours
                                            - date
                                  dueStatus:
                                    type: string
                                    enum:
                                      - ok
                                      - due_soon
                                      - overdue
                                      - no_reference
                                  status:
                                    type: string
                                    enum:
                                      - pending
                                      - snoozed
                                  scheduledAtValue:
                                    type: number
                                    description: >-
                                      Km u horas a los que vence, según
                                      `readingKind`.
                                  dueInValue:
                                    type: number
                                    description: Cuánto falta (negativo si se pasó).
                                  readingKind:
                                    type: string
                                    enum:
                                      - odometer
                                      - engine_hours
                                  dueDate:
                                    type: string
                                    format: date-time
                                  referenceNeedsReview:
                                    type: boolean
                                    description: >-
                                      «Revisa el dato»: el último servicio quedó
                                      marcado para revisar o alguna referencia
                                      es un Supuesto al entrar (≈).
                      looseItems:
                        type: array
                        description: Mantenciones sueltas, fuera de las pautas.
                        items:
                          type: object
                          description: >-
                            Una mantención abierta del activo, de una pauta o
                            suelta.
                          required:
                            - itemId
                            - scheduleId
                            - title
                            - taskDefinition
                            - recurrence
                            - conditions
                            - lastService
                            - dueStatus
                            - status
                            - referenceNeedsReview
                          properties:
                            itemId:
                              type: string
                            scheduleId:
                              type: string
                            title:
                              type: string
                              example: Rotación de neumáticos
                            taskDefinition:
                              type: object
                              nullable: true
                              description: >-
                                Tarea del catálogo; `null` en una mantención
                                suelta.
                              properties:
                                id:
                                  type: string
                                code:
                                  type: string
                                  example: ROT
                            recurrence:
                              type: string
                              enum:
                                - once
                                - repeat
                              description: >-
                                Mantención no programada (`once`) o que se
                                repite (`repeat`). Al leer, sin el campo la
                                programación se repite (las anteriores a #3663).
                                Desde #3875 el alta suelta solo crea `once`; las
                                que se repiten se crean en una pauta. No cambia:
                                la edición acepta el mismo valor y responde 409
                                `MAINTENANCE_SCHEDULE_RECURRENCE_IMMUTABLE` si
                                cambia.
                            conditions:
                              oneOf:
                                - type: object
                                  description: >-
                                    Regla como condiciones, cada una con su
                                    propio valor; vence con la primera que se
                                    cumpla. Exige al menos una. Las lecturas la
                                    devuelven siempre, resuelta desde los campos
                                    viejos si la programación no la tiene.
                                  properties:
                                    date:
                                      type: object
                                      required:
                                        - every
                                        - unit
                                      properties:
                                        every:
                                          type: integer
                                          minimum: 1
                                        unit:
                                          type: string
                                          enum:
                                            - days
                                            - weeks
                                            - months
                                        dueDate:
                                          type: string
                                          format: date
                                          description: >-
                                            Primer vencimiento (`YYYY-MM-DD`, zona
                                            horaria de la app). Opcional; desde el
                                            primer cierre vence a un intervalo del
                                            último servicio.
                                          example: '2026-11-15'
                                        remindBefore:
                                          type: integer
                                          minimum: 0
                                        remindUnit:
                                          type: string
                                          enum:
                                            - days
                                            - weeks
                                            - months
                                    odometer:
                                      type: object
                                      required:
                                        - everyKm
                                      properties:
                                        everyKm:
                                          type: integer
                                          minimum: 1
                                        remindBeforeKm:
                                          type: integer
                                          minimum: 0
                                    engineHours:
                                      type: object
                                      required:
                                        - everyHours
                                      properties:
                                        everyHours:
                                          type: integer
                                          minimum: 1
                                        remindBeforeHours:
                                          type: integer
                                          minimum: 0
                                - type: object
                                  description: >-
                                    Regla «Una vez»: las mismas casillas con
                                    valores absolutos; vence con la primera que
                                    se cumpla. Exige al menos una. La fecha
                                    puede estar en el pasado.
                                  properties:
                                    date:
                                      type: object
                                      required:
                                        - dueDate
                                      properties:
                                        dueDate:
                                          type: string
                                          format: date
                                          description: >-
                                            Día en que vence (`YYYY-MM-DD`, zona
                                            horaria de la app).
                                          example: '2026-11-15'
                                        remindBefore:
                                          type: integer
                                          minimum: 0
                                        remindUnit:
                                          type: string
                                          enum:
                                            - days
                                            - weeks
                                            - months
                                    odometer:
                                      type: object
                                      required:
                                        - dueAtKm
                                      properties:
                                        dueAtKm:
                                          type: integer
                                          minimum: 0
                                          example: 120000
                                        remindBeforeKm:
                                          type: integer
                                          minimum: 0
                                    engineHours:
                                      type: object
                                      required:
                                        - dueAtHours
                                      properties:
                                        dueAtHours:
                                          type: integer
                                          minimum: 0
                                          example: 3000
                                        remindBeforeHours:
                                          type: integer
                                          minimum: 0
                            lastService:
                              type: object
                              description: >-
                                Último servicio de la asignación; `null` en lo
                                que falta.
                              properties:
                                odometer:
                                  type: number
                                  nullable: true
                                engineHours:
                                  type: number
                                  nullable: true
                                date:
                                  type: string
                                  format: date-time
                                  nullable: true
                                assumed:
                                  type: array
                                  description: >-
                                    Las referencias que son un Supuesto al
                                    entrar (≈), no un dato escrito.
                                  items:
                                    type: string
                                    enum:
                                      - odometer
                                      - engineHours
                                      - date
                            dueStatus:
                              type: string
                              enum:
                                - ok
                                - due_soon
                                - overdue
                                - no_reference
                            status:
                              type: string
                              enum:
                                - pending
                                - snoozed
                            scheduledAtValue:
                              type: number
                              description: Km u horas a los que vence, según `readingKind`.
                            dueInValue:
                              type: number
                              description: Cuánto falta (negativo si se pasó).
                            readingKind:
                              type: string
                              enum:
                                - odometer
                                - engine_hours
                            dueDate:
                              type: string
                              format: date-time
                            referenceNeedsReview:
                              type: boolean
                              description: >-
                                «Revisa el dato»: el último servicio quedó
                                marcado para revisar o alguna referencia es un
                                Supuesto al entrar (≈).
        '400':
          description: Error de validación
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      error:
                        type: string
                        example: El email es requerido
                  - type: object
                    properties:
                      status:
                        type: string
                        example: failed
                      message:
                        type: string
                        example: Error de validación
                      errors:
                        type: array
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                            message:
                              type: string
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Token inválido o expirado
        '403':
          description: Sin permisos
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: No tiene permisos para realizar esta acción
        '404':
          description: Recurso no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Recurso no encontrado
        '500':
          description: Error interno del servidor
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      message:
                        type: string
                        example: Error interno del servidor
                  - type: object
                    properties:
                      status:
                        type: string
                        example: failed
                      message:
                        type: string
                        example: Error interno del servidor
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Token de sesión Better Auth o API token (`atk_...`) en el header
        `Authorization: Bearer <token>`. Los JWT legacy ya no son válidos.
    cookieAuth:
      type: apiKey
      in: cookie
      name: better-auth.session_token
      description: >-
        Cookie de sesión Better Auth emitida al iniciar sesión en el frontend
        web. En producción el nombre lleva prefijo `__Secure-`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.