# Manual de administración

Guía de uso diario del Sistema Integral de Proveeduría Municipal, ordenada por el flujo real
de trabajo: del alta de catálogos hasta la emisión de una orden y la consulta de reportes.

---

## 1. Acceso y sesión

Ingrese en `/login` con el usuario y la contraseña asignados por el administrador del sistema.

- La sesión se cierra automáticamente tras **60 minutos de inactividad** (configurable en
  *Configuración → Administración*).
- Los intentos de acceso fallidos quedan registrados y, tras varios consecutivos, la cuenta
  se bloquea temporalmente.
- Puede cambiar su contraseña en **Mi perfil**. Al hacer clic en el avatar de la barra superior
  también accede a su perfil y a la configuración.

### La interfaz

- **Barra lateral**: navegación por secciones. En pantallas de menos de 900 px se oculta sola y
  se abre con el botón del menú.
- **Modo claro y oscuro**: el botón de la barra superior alterna entre ambos. La preferencia
  se recuerda en el navegador; el modo predeterminado del sistema se define en *Configuración*.
- **Colores institucionales**: los usa la barra lateral, los botones primarios y los acentos.
  Se cambian en *Configuración → Identidad institucional*.

---

## 2. Catálogos

El orden correcto de captura es: **departamento → proveedor → partida presupuestal → orden**.

### 2.1 Departamentos

*Catálogos → Departamentos*.

Alta con nombre, código opcional y responsable opcional. El nombre es único.

El departamento es el **centro de costo**: indica quién pide el bien o el servicio. No es el
dueño del presupuesto, porque las partidas presupuestales son un catálogo global.

Un departamento con órdenes, vales o personas asociadas **no se elimina**: se desactiva, para no
romper la trazabilidad de los documentos ya emitidos.

### 2.2 Ejercicios fiscales y unidades de medida

*Catálogos → Catálogos*.

- **Ejercicios fiscales**: año (único), nombre, fecha de inicio y fin. Solo puede haber un
  ejercicio con el mismo año.
- **Unidades de medida**: nombre y abreviatura (única). Vienen preconfiguradas Pieza, Caja,
  Paquete, Litro, Kilogramo, Metro, Servicio, Bolsa, Tambor y Saco. Puede desactivar las que
  no se utilicen, pero no eliminarlas: aparecen en órdenes ya emitidas.

### 2.3 Partidas presupuestales

*Catálogos → Partidas presupuestales*.

Las partidas son un **catálogo global de la administración**: no pertenecen a ningún
departamento. Siguen la estructura del *Presupuesto de Egresos* y tienen tres niveles:

| Nivel | Ejemplo | Para qué sirve |
|---|---|---|
| **Capítulo** | `1000 SERVICIOS PERSONALES` | Agrupar y reportar |
| **Concepto** | `1100 REMUNERACIONES AL PERSONAL…` | Agrupar y reportar |
| **Partida genérica** | `111 Dietas` | **Es la que se asigna a una orden de compra** |

El catálogo se repite por **ejercicio fiscal**: la partida `211` de 2026 y la de 2027 son
filas distintas con su propio presupuesto. Dentro de un ejercicio, el número de partida es
único.

El catálogo oficial del ejercicio 2026 (8 capítulos, 39 conceptos y 121 partidas genéricas,
por un total de $1,024,569,217.00) viene cargado con el sistema y se puede recargar en
cualquier momento con `php tools\cargar-presupuesto.php`, que **no sobrescribe** los ajustes
que el administrador haya hecho.

| Dato | Descripción |
|---|---|
| Presupuesto autorizado | Monto inicial aprobado |
| Ampliaciones | Sumas registradas como ampliación |
| Reducciones | Restricciones registradas como reducción |
| Presupuesto vigente | `autorizado + ampliaciones − reducciones` |
| Gastado (comprometido) | Importe de las órdenes **emitidas** vinculadas a la partida |
| Disponible | `vigente − comprometido` |

En un capítulo o un concepto, el vigente, el gastado y el disponible son la **suma de sus
partidas hijas**: son agrupadores, no bolsas propias. Por eso solo las partidas genéricas
admiten ampliación o reducción.

> **Importante:** la columna «Gastado» representa el presupuesto **comprometido mediante órdenes
> de compra**, no pagos efectivamente realizados. El sistema todavía no lleva un módulo de pagos.

**Para modificar el presupuesto autorizado** no se edita el campo en silencio: se registra una
**ampliación** o una **reducción** con su motivo, y ambos quedan en el historial de movimientos.
Así siempre se puede saber de dónde vino cada peso.

La reducción no puede dejar el presupuesto vigente en negativo.

---

### 2.4 Importar catálogos en lote

*Catálogos → Proveedores / Departamentos / Partidas presupuestales → botón «Importar»*.

Cuando el municipio ya tiene sus catálogos en una hoja de cálculo, no hace falta capturarlos uno
por uno. Desde el botón **«Importar»** de cada listado se llega a una pantalla donde se carga un
archivo (CSV, TXT o XLSX) y el sistema lo revisa **renglón por renglón antes de escribir nada**.

El flujo siempre es el mismo, en tres pasos:

1. **Cargar el archivo.** Se elige el catálogo y se sube el archivo. La pantalla muestra las
   columnas que se esperan y una fila de ejemplo.
2. **Revisión previa.** El sistema indica, por cada renglón, si el registro se va a **crear**,
   a **actualizar** o si tiene **error**, con el motivo. Nada se ha escrito todavía.
3. **Importar.** Se confirma y el sistema escribe los registros válidos.

La carga se hace en una **zona de arrastre**: se suelta el archivo encima o se hace clic en la zona
para buscarlo. Debajo aparece el nombre y el tamaño del archivo, con un botón **«Quitar»** para
cambiarlo. Mientras el archivo viaja al servidor, una **barra de progreso** indica el avance real de
la carga; cuando el archivo ya llegó, la barra pasa a modo «En curso» durante la revisión del
contenido y termina al 100 % con el detalle de lo leído. La misma barra se usa en el paso 3, cuando
se escriben los registros.

Si un renglón falla, **no se aplica ninguno**: la importación es una sola operación. Se corrige el
archivo y se vuelve a subir.

Quién puede hacerlo: el **Superadministrador** y **Administración de Proveeduría**, y cualquier
rol propio al que se le conceda el permiso «Importar» del catálogo correspondiente.

#### 2.4.1 Formato del archivo

La primera fila debe traer los **encabezados**. El sistema reconoce las columnas aunque estén
escritas con mayúsculas, sin acentos o con guiones: `RFC`, `rfc` y `Rfc` son la misma columna. Si
el archivo viene de Excel en español, se acepta con `,` o con `;` como separador, y también en
codificación Windows-1252.

Lo más seguro es **descargar la plantilla** del catálogo: trae los encabezados exactos y una fila
de ejemplo. El flujo natural es exportar el catálogo actual, corregirlo en Excel y volverlo a
subir.

#### 2.4.2 Columnas de cada catálogo

**Proveedores** (se identifica por RFC; si el RFC no viene, por número de proveedor):

| Columna | Obligatoria | Nota |
|---|---|---|
| `numero_proveedor` | No | Si no viene, el sistema asigna uno `IMP-000001` y lo avisa |
| `rfc` | **Sí** | Se valida el formato (12 o 13 caracteres) |
| `nombre` | **Sí** | Nombre o razón social |
| `rubro`, `telefono`, `direccion`, `ciudad`, `estado`, `codigo_postal`, `email`, `contacto`, `rupc`, `observaciones` | No | Se escriben tal cual |
| `fecha_registro` | No | Se acepta `AAAA-MM-DD` o `DD/MM/AAAA` |
| `opinion_32d`, `aplica_5_al_millar` | No | `Sí` / `No` |
| `fecha_opinion_32d` | No | Vigencia de la opinión 32-D |
| `activo` | No | `Activo` / `Inactivo` |

Al **actualizar** un proveedor solo se sobrescriben las columnas informadas: una celda vacía no
borra el dato que ya estaba. Un proveedor dado de baja no se reactiva solo: se avisa.

**Departamentos** (se identifican por nombre):

| Columna | Obligatoria | Nota |
|---|---|---|
| `nombre` | **Sí** | Es la clave del registro |
| `codigo`, `responsable` | No | |
| `activo` | No | `Activo` / `Inactivo` |

**Partidas presupuestales** (se identifican por ejercicio fiscal + número de partida):

| Columna | Obligatoria | Nota |
|---|---|---|
| `ejercicio` | **Sí** | Año, p. ej. `2026`. Si el ejercicio no existe, el renglón se rechaza |
| `numero` | **Sí** | Número de partida |
| `descripcion` | **Sí** | |
| `nivel` | No | `capitulo`, `concepto` o `partida` (por defecto, `partida`) |
| `capitulo`, `concepto` | No | Códigos del capítulo y del concepto |
| `presupuesto` | No | Presupuesto autorizado; solo se escribe al **crear** la partida |
| `activo` | No | `Activa` / `Inactiva` |

> **Importante:** el presupuesto autorizado **nunca se sobrescribe**. Si la partida ya existe y
> el archivo trae un monto distinto, el renglón se rechaza con un mensaje que remite a la ficha de
> la partida, donde la ampliación o la reducción se registran como movimiento. Los capítulos y los
> conceptos son agrupadores: no llevan presupuesto propio.

---

## 2.5 Requerimientos de compra

*Operación → Requerimientos de compra*.

Es el formato en papel que captura el área que necesita comprar. El
departamento lo llena en el sistema y proveeduría lo convierte en una orden de
compra. Reproduce el formato institucional: folio, fecha, área solicitante,
responsable, extensión, la tabla de producto/especificaciones/unidad/cantidad,
el anexo de muestra, las observaciones y las cuatro firmas.

### 2.5.1 Capturar un requerimiento

1. **Requerimientos de compra → Nuevo requerimiento**.
2. Se captura el **área solicitante** (el sistema la toma de su cuenta si solo
   tiene una), la **fecha**, el **nombre del responsable** y su **extensión**.
3. Se marca si **acompaña muestra** y se escriben las **observaciones**.
4. Se agregan los renglones: **producto o servicio**, **descripción
   (especificaciones)**, **unidad** y **cantidad**.
5. **Guardar borrador** deja el requerimiento sin folio; **Enviar a revisión**
   lo manda a proveeduría y **le reserva el folio** (REQ-000001).

Mientras es borrador se puede editar o cancelar. Una vez enviado, ya no se
modifica: se **autoriza** o se **cancela** (con motivo).

### 2.5.2 Revisión y conversión

Quien autoriza (proveeduría o el operador de compras) revisa el requerimiento
y, cuando está conforme, elige **Convertir en orden de compra**: se indica el
**proveedor** y la **partida presupuestal**, y el sistema crea la orden **en
borrador** con los renglones copiados, su fecha y el folio del requerimiento
como referencia. A partir de ahí, la orden se maneja como cualquier otra
(*Operación → Órdenes de compra*): se le ponen los precios y se emite.

> **Importante:** el requerimiento **no compromete presupuesto**. El dinero se
> compromete cuando se **emite** la orden de compra, no cuando se convierte el
> requerimiento. Un requerimiento no movido no descuenta nada del presupuesto.

### 2.5.3 Quién puede hacer qué

| Acción | Quién |
|---|---|
| Capturar, editar y enviar | El área solicitante (jefe de departamento) y proveeduría |
| Autorizar | Administración de Proveeduría y el operador de compras |
| Convertir en orden de compra | Administración de Proveeduría y el operador de compras |
| Cancelar | Administración de Proveeduría y el operador de compras |
| Consultar todo | Administración de Proveeduría, operador, auditor |
| Ver los suyos | Cada área ve únicamente los requerimientos de su departamento |

---

## 2.6 Documentación de las órdenes de compra

*Órdenes de compra → una orden → Documentación*.

Cada orden puede llevar archivados sus documentos de respaldo: la factura, el
contrato, el acta de entrega, la cotización, la garantía o cualquier otro
documento. Así todo lo que respalda una compra queda junto a la compra, sin
carpetas dispersas ni nombres de archivo perdidos.

### 2.6.1 Adjuntar un documento

1. Abra la orden de compra y baje a la sección **Documentación**.
2. Pulse **Adjuntar documento**.
3. Elija el **tipo**: Factura, Contrato, Acta de entrega, Cotización, Garantía
   u Otro documento.
4. Seleccione el archivo (PDF, JPG o PNG, hasta 10 MB).
5. Si el tipo es **Factura**, capture el **folio**, la **fecha** y el **monto
   facturado**. En los demás tipos estos campos no se usan.
6. Escriba, si aplica, las observaciones y pulse **Adjuntar documento**.

La barra de progreso muestra el avance real de la subida. Al terminar, la tabla
de la orden ya incluye el documento: no hace falta recargar la página.

### 2.6.2 Control de la facturación

- **Aviso de factura repetida**: si la orden ya tenía una factura, el sistema
  avisa cuántos folios había y cuáles son. No bloquea el archivo: una orden
  puede recibir más de una factura.
- **Conciliación**: la franja superior compara el **facturado** contra el
  **total de la orden**. En verde cuando coinciden; en amarillo, con la
  diferencia, cuando no.
- El monto de la factura **no cambia** los importes de la orden ni el
  presupuesto: la orden se mide por sus conceptos.

### 2.6.3 Consultar y eliminar

- **Descargar**: el botón de la columna de acciones entrega el archivo con su
  nombre original. Solo quien puede ver la orden puede descargarlo.
- **Eliminar**: el botón de la papelera pide confirmación y borra el archivo y
  su registro. La operación queda anotada en la **bitácora**.

### 2.6.4 Quién puede hacer qué

| Acción | Quién |
|---|---|
| Consultar y descargar | Quien tenga permiso de ver órdenes de compra |
| Adjuntar y eliminar | Quien tenga el permiso **Adjuntar documentos** de órdenes |
| Asignar ese permiso | Administración del sistema, desde **Usuarios y roles** |

> Los archivos se guardan fuera de la carpeta pública del sitio: no se pueden
> abrir con un enlace directo, solo desde el sistema y con sesión iniciada.

---

## 2.7 Ajuste de entrega de las órdenes de compra

*Órdenes de compra → una orden emitida → Ajuste de entrega*.

### 2.7.1 Antes de emitir: el precio unitario es obligatorio

Una orden **no se emite** si alguno de sus conceptos no tiene precio unitario.
Al pulsar **Emitir orden**, el sistema lo avisa en el resumen de emisión,
nombra los conceptos que falta y no deja confirmar: primero hay que capturar
el precio.

El borrador **sí** se puede guardar sin precio. Es normal en una orden que
viene de un requerimiento: ahí los precios los elige el operador de compras.

### 2.7.2 En el borrador: cancelar un concepto

En el formulario de la orden, cada concepto tiene dos acciones:

- **Cancelar producto** (círculo tachado): el concepto **no se elimina**.
  Queda en la orden marcado como *Cancelado*, con su motivo, y deja de contar
  para los totales. Si el producto aparece después, se **reactiva**.
- **Eliminar concepto** (equis): quita la fila del borrador. Es para
  conceptos que se capturaron por error; en un borrador nada está comprometido
  todavía.

### 2.7.3 Después de emitir: el ajuste de entrega

Cuando el proveedor entrega menos de lo pedido, o no surtió un producto, la
orden emitida se corrige desde la sección **Ajuste de entrega**:

1. En la columna **Cantidad a facturar**, escriba lo que realmente se entregó.
   Solo se puede **reducir**: aumentar la cantidad comprometería dinero
   adicional y corresponde a una orden nueva.
2. Si un producto no se encontró, pulse **Cancelar producto**. El renglón no se
   borra: queda cancelado con su motivo.
3. Escriba el **motivo del ajuste** y pulse **Aplicar ajuste**.

Qué pasa al aplicarlo:

- La orden se recalcula: los totales reflejan lo que realmente se compra, y la
  factura se concilia contra ese total.
- **Lo que ya no se compra vuelve a la partida presupuestal**: el producto
  cancelado deja de estar descontado del presupuesto y queda registrado como
  movimiento de liberación en la partida.
- El **vale de salida** se actualiza con las cantidades nuevas **solo si el
  almacén todavía no lo ha entregado**. Un vale ya entregado no se modifica:
  es el registro físico de lo que salió.
- El ajuste queda en el **historial** de la orden y en la **bitácora**.

Un ajuste **nunca aumenta** la cantidad y **no puede cancelar todos** los
conceptos: para cancelar la orden completa existe la cancelación con motivo.

### 2.7.4 Quién puede hacer qué

| Acción | Quién |
|---|---|
| Cancelar un concepto en el borrador | Quien pueda editar la orden |
| Aplicar el ajuste de entrega | Quien tenga el permiso **Ajustar entregas** de órdenes |
| Asignar ese permiso | Administración del sistema, desde **Usuarios y roles** |

> El permiso **Ajustar entregas** es propio: el operador de compras lo lleva
> de fábrica, pero se puede quitar o añadir por rol.

---

## 3. Proveedores

*Catálogos → Proveedores*.

### 3.1 Datos obligatorios

| Campo | Uso |
|---|---|
| **No. de Proveedor** | Identificador único e irrepetible dentro del municipio |
| **Nombre / Razón Social** | Nombre completo del proveedor |
| **RFC** | Registro Federal de Contribuyentes (formato validado) |
| **Rubro** | Actividad comercial; alimenta el filtro del listado |
| **Teléfono** | Contacto |
| **Domicilio** | Calle, número, colonia |
| **Ciudad** | Localidad |
| **RUPC** | Registro Único de Proveedores y Contratistas |
| **Fecha de Registro** | Fecha de alta en el padrón |
| **Contacto (Nombre)** | Persona de contacto |
| **Opinión 32-D** | Casilla: cuenta con la documentación de cumplimiento |
| **5 al Millar** | Casilla: el proveedor aplica la retención del 5 al millar |

Opcionales: correo electrónico, código postal, estado o entidad federativa, observaciones.

### 3.2 Reglas importantes

- El número de proveedor y el RFC no pueden repetirse.
- La **Opinión 32-D** es información de cumplimiento documental. Puede registrar la fecha de
  vigencia y, en el futuro, los documentos de respaldo.
- El **5 al Millar** se guarda como característica del proveedor. **El sistema no descuenta
  automáticamente** ese porcentaje de los totales: la regla fiscal debe definirse y documentarse
  antes de aplicarse.
- Un proveedor que ya tiene órdenes **no se elimina**, se desactiva.

### 3.3 Funciones del listado

Búsqueda instantánea por nombre, número o RFC; filtros por rubro y estatus; ordenamiento por
columnas; exportación a Excel/CSV; y acceso a la **ficha del proveedor**, que muestra sus datos
y el historial de órdenes.

---

## 4. Órdenes de compra

*Operación → Órdenes de compra*.

### 4.1 Estados

| Estado | Qué significa | Qué puede hacer |
|---|---|---|
| **Borrador** | En captura. No afecta el presupuesto y su folio aún no existe. | Editar, duplicar, eliminar |
| **Emitida** | Documento oficial con folio definitivo. Compromete presupuesto y generó su vale. | Imprimir, descargar PDF, cancelar |
| **Cancelada** | Se conserva con su motivo. El presupuesto fue devuelto. | Consultar, imprimir (marcada como cancelada) |

### 4.2 Captura

1. **Proveedor**: selector con búsqueda entre los proveedores activos. Al elegirlo se muestran
   su número, RFC, contacto, RUPC, Opinión 32-D y 5 al Millar.
2. **Departamento**: selector de departamentos activos. Es el **centro de costo**: indica quién
   pide el bien, no de qué bolsa se paga.
3. **Partida presupuestal**: selector del catálogo global, agrupado por capítulo, con búsqueda
   por código o descripción. Muestra el presupuesto vigente, gastado y disponible de la partida.
4. **Fecha**: por defecto, la fecha actual.
5. **Número de requisición**: opcional.
6. **Conceptos**: tabla dinámica. Cantidad, unidad, descripción, precio unitario, IVA e importe.
   Puede agregar y quitar renglones sin límite. El IVA se marca por concepto: cada renglón
   es gravado o no.
7. **Totales**: subtotal, IVA y total se calculan al instante. El backend los recalcula al guardar
   y al emitir: la cifra que manda siempre es la del servidor.

### 4.3 Antes de emitir

Se muestra un resumen con proveedor, departamento, partida, conceptos, impuestos, total y el
**saldo que quedaría después de emitir**.

- Si el total **no excede** el disponible, puede emitir.
- Si el total **excede** el disponible, el sistema lo impide y le dice exactamente cuántos pesos
  faltan. Solo es posible emitir con una **autorización excepcional** registrada previamente
  en la partida, que queda auditada.

### 4.4 Al emitir

En una sola transacción:

1. se asigna el **folio definitivo** (por ejemplo `000001`);
2. se registra el movimiento de **compromiso** presupuestal;
3. se genera el **vale de salida** con su propio folio (por ejemplo `VSA-000001`);
4. la orden queda emitida y consultable con sus dos documentos.

Si algo falla, no queda ningún registro parcial.

### 4.5 Cancelar

*Operación → Órdenes → ⋯ → Cancelar*. Se solicita el motivo (obligatorio) y se confirma.
El sistema registra el movimiento inverso, devuelve el presupuesto y marca el vale como cancelado.
Ni la orden ni el vale se borran: ambos permanecen en el historial.

### 4.6 Otras acciones

- **Vista previa / Descargar PDF / Imprimir**: abren el documento institucional.
- **Duplicar**: crea una nueva orden en borrador con los mismos conceptos, lista para ajustar.
- **Vale relacionado**: abre el vale de esa orden.
- **Historial**: línea de tiempo con creación, emisión y cancelación, con usuario y fecha.

---

## 5. Vales de salida

*Operación → Vales de salida*.

El vale se genera **automáticamente** al emitir una orden: no se captura a mano.

- Listado con búsqueda por folio, por número de orden, filtro por departamento, estado y rango
  de fechas, además de exportación a Excel/CSV.
- La ficha muestra el encabezado, los datos generales, el detalle de conceptos y las tres firmas
  (**RECIBÍ**, **ENTREGÓ EN MOSTRADOR**, **JEFE DE PROVEEDURÍA**).
- Enlace directo a la orden de compra y viceversa.
- Si la orden se cancela, el vale se marca como cancelado y se conserva.

### Marcar el vale como entregado

Cuando el almacén entrega la mercancía o el servicio, el vale se marca como **entregado**:

- Botón **Entregar** en cada fila del listado, o **Marcar como entregada** en la ficha del vale.
- Pide confirmación y anota **quién entregó** y **en qué fecha y hora**.
- El estado del vale pasa a *Entregado* y la ficha muestra el aviso de entrega con los datos.
- El vale impreso incluye una línea con la fecha de entrega y el nombre de quien la realizó.

Solo puede hacerlo quien tenga el permiso **vouchers.deliver** (lo tiene el Encargado de Almacén y
los roles con acceso completo). Un vale ya entregado no se vuelve a marcar, y un vale cancelado
tampoco: si hubo un error, se cancela la orden y se emite otra.

> Marcar la entrega **no vuelve a descontar presupuesto**: el importe se compromete al emitir la
> orden de compra, no al entregar la mercancía. El vale sigue siendo un **documento administrativo
> de salida**: esta versión **no descuenta existencias de inventario**.

---

## 6. Reportes

*Análisis → Reportes*.

Trece reportes disponibles, todos con filtros de rango de fechas, departamento, proveedor,
ejercicio fiscal y número de partida:

1. Órdenes de compra por periodo
2. Compras realizadas por proveedor
3. Compras realizadas por departamento
4. Gastado por partida presupuestal
5. Gastado por partida y departamento
6. Gasto acumulado por departamento y partida
7. **Artículos y servicios comprados**
8. Presupuesto autorizado contra gastado
9. Presupuesto disponible por capítulo
10. Órdenes canceladas
11. Vales de salida emitidos
12. Historial de movimientos presupuestales
13. Resumen general del ejercicio fiscal

Cada reporte se puede descargar en **PDF** (para imprimir o archivar) o en **Excel/CSV**
(para continuar el análisis). Los importes de documentos cancelados no se suman al gasto vigente.

### 6.1 Consultar qué se ha comprado

El reporte **«Artículos y servicios comprados»** es uno por cada concepto comprado, con su
orden, su proveedor, su departamento, su partida, la cantidad, el precio unitario, el IVA y el
importe. Admite una **búsqueda por texto libre**: escriba «llantas rin 15» y la lista le sale
con el proveedor y el precio de cada artículo.

### 6.2 Ver quién consumió de cada partida

El presupuesto de una partida es global, así que el sistema guarda **quién consumió de cada
bolsa**:

- En la **ficha de una partida** (*Partidas presupuestales → Movimientos*) está el bloque
  «Gasto por departamento»: cuántos órdenes puso cada departamento y qué porcentaje de la
  partida representa.
- El reporte **«Gasto acumulado por departamento y partida»** lleva lo mismo de todo el
  ejercicio, y se filtra por departamento, ejercicio y partida. A diferencia de los demás, este
  reporte **no se acota por fechas**: es la suma del ejercicio.

---

## 6 bis. Asistente de reportes con inteligencia artificial

*Análisis → Asistente de IA*.

Permite preguntar en lenguaje natural sobre el gasto, el presupuesto y las órdenes de compra, y
obtener un informe redactado con los datos reales del sistema.

### Cómo funciona

El asistente **no escribe consultas**. Cuando el modelo necesita información, pide una de las
herramientas del catálogo y **el sistema ejecuta la consulta ya probada del módulo de Reportes**;
después, el modelo redacta el análisis con esos datos.

La consecuencia importante: **las cifras las calcula el sistema, no el modelo**. Si el modelo
redacta mal un importe, ese importe no llega a la tabla del informe: la tabla la compone el
backend con los datos que consultó.

### Herramientas disponibles

Resumen del ejercicio · compromiso por partida · gastado por partida y departamento · gasto por
departamento y partida · artículos y servicios comprados · presupuesto disponible por capítulo ·
presupuesto contra comprometido por partida · órdenes del periodo · compras por proveedor ·
compras por departamento · órdenes canceladas · vales emitidos · movimientos presupuestales ·
catálogos (departamentos, proveedores y ejercicios para resolver nombres).

> El presupuesto es **global por ejercicio fiscal**: el filtro por departamento acota las
> **órdenes** (el departamento es el centro de costo) y no las partidas.

El asistente también admite una **búsqueda por texto libre** sobre la descripción del artículo
comprado: «¿cuántas llantas rin 15 se han comprado?» devuelve el listado con su proveedor, su
precio unitario, su partida y su importe.

### Qué sale del servidor

El asistente envía información al proveedor de IA. El nivel lo define el administrador en
*Configuración → Inteligencia artificial*:

| Nivel | Qué sale |
|---|---|
| **Solo agregados** | Conteos, totales y saldos. Ninguna fila de detalle. |
| **Agregados y detalle operativo** | Además: folios, proveedor, departamento y partida. Sin datos personales. |
| **Detalle completo** | Todo, incluido el usuario que registró cada movimiento. |

El recorte se aplica **en el servidor, antes de enviar nada**. En el informe y en la bitácora
queda registrado qué datos se consultaron.

### Configuración

*Configuración → Inteligencia artificial*. Requiere el permiso de configuración del sistema.

| Campo | Notas |
|---|---|
| Proveedor | OpenAI, DeepSeek, OpenRouter, un servidor local (Ollama) o cualquier endpoint compatible |
| URL base | Debe terminar en `/v1`. En OpenRouter es `https://openrouter.ai/api/v1`; sin ese `/v1` el proveedor responde 404 |
| Modelo | Identificador vigente del proveedor. En OpenRouter lleva el prefijo del proveedor: `openai/gpt-4o-mini`, `anthropic/claude-3.5-sonnet`. Sin prefijo, OpenRouter responde «model not found» |
| Clave de API | Se guarda como **secreto**: nunca se vuelve a mostrar ni sale del servidor. Déjela vacía para conservarla. Las claves de OpenRouter empiezan por `sk-or-v1-` |
| Alcance de datos | Solo agregados / Agregados y detalle / Detalle completo |
| Límite de filas | Máximo de filas por consulta (10 a 1000) |
| Límite de respuesta (tokens) | Presupuesto de la respuesta del modelo (200 a 32 000). Los modelos que «razonan» gastan tokens en pensar: con un valor bajo el informe llega cortado. El valor por defecto es 8 000 y el sistema reintenta solo si la respuesta se truncó |
| Creatividad | Vacío = valor del proveedor. Los modelos GPT-5 y superiores solo admiten 1 y el sistema omite el parámetro en esa familia |

El botón **Probar conexión** verifica la clave y el modelo sin generar reportes.

### Reportes generados

Cada consulta queda guardada en el **historial** del asistente, con su respuesta completa, el
modelo usado y las herramientas consultadas. Se puede abrir de nuevo y descargar en **PDF**
institucional. Los usuarios con el permiso `ai.history` ven el historial de todos; los demás,
solo el propio.

Todo queda en la **bitácora de auditoría**: `ai.report.generated` registra la pregunta, el
proveedor, el modelo, las herramientas consultadas y el consumo de tokens.

### Buenas prácticas

- La respuesta es un **apoyo al análisis**, no un dictamen. Las cifras son las del sistema, pero
  la interpretación corresponde a la autoridad.
- Para preguntas de un departamento o un proveedor, menciónelo en la pregunta: el asistente lo
  usa como filtro.
- Si la información no alcanza, el asistente lo dice en lugar de estimar.

### Proveedor de prueba

Para desarrollar o demostrar el asistente sin gastar créditos ni enviar información a Internet,
el sistema incluye un proveedor local simulado:

```bash
php tools/proveedor-ia-mock.php 8099
```

Y en la configuración: proveedor *Otro endpoint compatible*, URL `http://127.0.0.1:8099/v1`,
modelo `modelo-de-prueba` (sin clave).

---

## 7. Panel principal

Al iniciar sesión, el panel muestra:

- proveedores activos, departamentos, órdenes emitidas, órdenes del mes e importe total;
- presupuesto autorizado, comprometido y disponible;
- vales de salida generados;
- gráficas: órdenes por mes, gasto por departamento, distribución del presupuesto, principales
  proveedores por importe y partidas con menor presupuesto disponible;
- las últimas órdenes con folio, fecha, proveedor, departamento, importe, estado y usuario;
- accesos rápidos para crear una orden, registrar un proveedor y consultar presupuestos.

Los **Jefes de Departamento** ven únicamente la información de sus departamentos.

---

## 8. Administración

### 8.1 Usuarios y roles

*Administración → Usuarios y roles*.

Seis roles iniciales:

| Rol | Alcance |
|---|---|
| Superadministrador | Acceso total, incluida la configuración y la bitácora |
| Administrador de Proveeduría | Operación completa de proveedores, departamentos, partidas, órdenes y vales |
| Operador de Compras | Registra proveedores, elabora y emite órdenes, consulta documentos |
| Jefe de Departamento | Consulta las órdenes y presupuestos **de su departamento** |
| Encargado de Almacén | Consulta y gestiona la documentación de los vales |
| Auditor / Consulta | Solo lectura, con reportes e historial |

Al crear un usuario se le asigna un rol y, si es Jefe de Departamento, los departamentos que
puede ver. Los permisos pueden ajustarse por rol en **Roles y permisos** (el Superadministrador
siempre conserva el acceso total).

Un usuario con órdenes registradas no se elimina: se desactiva.

### 8.1 bis. Crear, ajustar y eliminar roles

*Administración → Usuarios y roles → Roles y permisos*.

**Crear un rol propio.** Con el botón **Nuevo rol** se abre una ventana con tres apartados:

- **Nombre del rol**: el que verá el usuario en la lista. Entre 3 y 80 caracteres. El sistema
  guarda además un identificador interno derivado del nombre (sin acentos ni espacios), y si ese
  identificador ya existe le añade un número.
- **Descripción**: para qué sirve ese rol. Aparece bajo el nombre del rol y sirve de Recordatorio
  para quien asigne usuarios.
- **Permisos iniciales**: opcionales. Puede empezar sin permisos y ajustarlos después, o marcar
  ahora los que necesite. Las casillas marcadas se asignan al crear el rol.

Los roles propios se distinguen de los del sistema en la lista: aparecen con la marca *«propio»*.

**Ver los permisos en español.** La matriz muestra los módulos y las acciones con su nombre en
español —*Partidas presupuestales · Registrar movimientos*, *Bitácora de auditoría · Consultar*,
*Asistente de inteligencia artificial · Usar*— y debajo, en letra pequeña, el nombre técnico
(`budget.movements`, `audit.view`, `ai.use`) para quien necesite localizarlo en la base de datos o
en la documentación. La casilla **Seleccionar todo** marca o desmarca un módulo completo.

**Eliminar un rol.** El botón **Eliminar rol** aparece solo en los roles propios. Pide confirmación
y borra el rol con sus permisos. Dos casos quedan bloqueados a propósito:

- Los **roles del sistema** no se pueden eliminar (ni siquiera el Superadministrador).
- Un **rol con personas asignadas** tampoco: hay que reasignarlas antes, o esos usuarios quedarían
  sin acceso al sistema.

En ambos casos el sistema lo explica con un aviso en lugar de borrar nada.

### 8.2 Configuración

*Administración → Configuración*, en cinco pestañas:

- **Identidad institucional**: nombre del sistema, institución, departamento, logotipos, favicon,
  imagen de la pantalla de acceso, colores y modo visual predeterminado. Los cambios se aplican a
  toda la interfaz —barra lateral, pantalla de acceso, botones, gráficas y documentos PDF— en
  cuanto se guardan.
  Los logotipos conviene que sean PNG con fondo transparente: el sistema los muestra
  sobre fondo claro y también sobre el panel de color de la pantalla de acceso.
  La **imagen de la pantalla de acceso** se muestra a la izquierda del formulario de inicio de
  sesión; se recomienda una imagen vertical de buena resolución (hasta 3 MB). Si se deja vacía,
  el sistema muestra el escudo y el nombre de la institución.
- **Apariencia**: color de la barra lateral, tipo de letra y tamaño del texto. Los cambios
  se aplican a toda la aplicación de inmediato, con vista previa antes de guardar.

  | Control | Opciones |
  |---|---|
  | Color de la barra lateral | Selector visual o código hexadecimal (`#14532d`). Si el color es demasiado claro, el sistema lo oscurece solo para que el texto siga siendo legible. En modo oscuro se usa una variante más oscura del mismo tono |
  | Tipo de letra | Del sistema (recomendada), Humanista, Grotesca, Condensada, Moderna, Con serifas, Monoespaciada. Son familias del sistema: no se descarga nada de Internet |
  | Tamaño del texto | Pequeña, Normal (recomendada), Grande, Muy grande. Cambia toda la escala de forma proporcional |

- **Documentos**: prefijos y longitud de los folios, títulos y subtítulos, leyenda legal, las
  cinco etiquetas de firma, tamaño y orientación del papel y márgenes.
- **Administración**: zona horaria, moneda, IVA predeterminado, ejercicio fiscal predeterminado,
  formato de fecha, registros por página, motivos de cancelación y reglas de autorización
  extraordinaria.
- **Sistema**: versión, respaldo de la base de datos y verificación de integridad.

> Las leyendas legales y administrativas deben ser **validadas por la institución** antes de
> usarse en documentos oficiales. El campo «Nombre de quien aprueba la leyenda» existe para dejar
  constancia de esa validación.

### 8.3 Bitácora de auditoría

*Administración → Bitácora*.

Registro de solo lectura con usuario, acción, entidad, fecha, IP y descripción. Para las
operaciones críticas se guardan los valores anteriores y posteriores, consultables con el botón
«Ver cambios». Filtros por acción, entidad, usuario y rango de fechas, con exportación a CSV.

---

## 9. Buenas prácticas

- Capture la requisición **antes** de emitir la orden: el número de requisición es la referencia
  que permite dar seguimiento.
- Emita dentro del mismo ejercicio fiscal en el que está presupuestada la partida.
- No cancele una orden para «corregirla»: use **Duplicar**, ajuste el duplicado y cancele la
  original con su motivo. Así el historial queda limpio.
- Revise el panel al cierre de cada mes para detectar partidas con poco presupuesto disponible.
- Genere un respaldo desde **Configuración → Sistema** antes de cualquier actualización.
