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

# Tabla única de mantenciones

> Una fila por mantención y activo, de una vez o recurrente, más las órdenes de trabajo completadas sin mantención programada (#3663). Paginada, filtrada y ordenada en el servidor. Antes de leer evalúa las programaciones del cliente: los estados y los pospuestos vencidos quedan al día. Las mantenciones ignoradas no aparecen.



## OpenAPI

````yaml /openapi.json get /api/maintenance/upcoming-items/table
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 - Vehículos
    description: Operaciones relacionadas con tipos de vehículos
  - 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 - 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)
paths:
  /api/maintenance/upcoming-items/table:
    get:
      tags:
        - Mantenimiento - Próximos
      summary: Tabla única de mantenciones
      description: >-
        Una fila por mantención y activo, de una vez o recurrente, más las
        órdenes de trabajo completadas sin mantención programada (#3663).
        Paginada, filtrada y ordenada en el servidor. Antes de leer evalúa las
        programaciones del cliente: los estados y los pospuestos vencidos quedan
        al día. Las mantenciones ignoradas no aparecen.
      parameters:
        - name: page
          in: query
          schema:
            type: integer
            minimum: 1
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
        - name: type
          in: query
          description: Una vez, se repite, u orden de trabajo sin mantención programada.
          schema:
            type: string
            enum:
              - once
              - repeat
              - unscheduled
        - name: state
          in: query
          schema:
            type: string
            enum:
              - ok
              - due_soon
              - overdue
              - done
        - name: assetId
          in: query
          schema:
            type: string
        - name: search
          in: query
          description: Nombre o patente del activo, o nombre de la mantención.
          schema:
            type: string
        - name: sortBy
          in: query
          schema:
            type: string
            enum:
              - dueAt
              - asset
              - title
            default: dueAt
        - name: sortDirection
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
            default: asc
      responses:
        '200':
          description: Página de la tabla
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    type: object
                    required:
                      - data
                      - pagination
                    properties:
                      data:
                        type: array
                        items:
                          type: object
                          description: >-
                            Fila de la tabla «Mantenciones»: una mantención de
                            un activo (de una vez o recurrente) o una orden de
                            trabajo completada sin mantención programada.
                          required:
                            - id
                            - source
                            - asset
                            - title
                            - state
                          properties:
                            id:
                              type: string
                              description: Id del ítem de mantención.
                            source:
                              type: string
                              enum:
                                - schedule
                                - work_order
                            asset:
                              type: object
                              required:
                                - id
                                - name
                              properties:
                                id:
                                  type: string
                                name:
                                  type: string
                                plate:
                                  type: string
                            title:
                              type: string
                              example: Cambio de aceite
                            schedule:
                              type: object
                              description: >-
                                Programación que genera la fila, con su tipo y
                                las condiciones de su rama (intervalos si se
                                repite, valores absolutos si es de una vez). No
                                viene en las filas de OT.
                              required:
                                - id
                                - recurrence
                                - conditions
                              properties:
                                id:
                                  type: string
                                recurrence:
                                  type: string
                                  enum:
                                    - once
                                    - repeat
                                  description: >-
                                    «Una vez» (`once`) o «Se repite» (`repeat`).
                                    Sin el campo, la programación se repite (las
                                    anteriores a #3663 y el MCP). Se elige al
                                    crear y 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
                            state:
                              type: string
                              enum:
                                - ok
                                - due_soon
                                - overdue
                                - done
                            dueDate:
                              type: string
                              format: date-time
                            scheduledAtValue:
                              type: number
                              description: Km u horas a los que vence.
                            dueInValue:
                              type: number
                              description: >-
                                Cuánto falta (negativo si se pasó), en km o en
                                horas.
                            snoozedUntil:
                              type: string
                              format: date-time
                              description: Solo si está pospuesta.
                            workOrder:
                              type: object
                              description: >-
                                La OT abierta que cubre la fila, o la que la
                                cerró.
                              required:
                                - id
                                - status
                              properties:
                                id:
                                  type: string
                                number:
                                  type: integer
                                status:
                                  type: string
                            completedAt:
                              type: string
                              format: date-time
                              description: Cuándo quedó hecha.
                      pagination:
                        type: object
                        required:
                          - page
                          - limit
                          - total
                          - totalPages
                        properties:
                          page:
                            type: integer
                          limit:
                            type: integer
                          total:
                            type: integer
                          totalPages:
                            type: integer
        '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
        '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.