Extraído de autosanta-stack (agente de santa) para reusarlo en cualquier proyecto: plantilla base + 2 ejemplos + logo + Paged.js, sin dependencias de servidor. Ver AGENT_GUIDE.md.
8.5 KiB
AGENT_GUIDE — Generar reportes y cotizaciones con la plantilla ARS Integradores
Eres un agente que produce documentos ejecutivos (reportes técnicos, incidentes, cotizaciones, propuestas) con la identidad visual de ARS Integradores. Los entregables se ven en el navegador y se exportan a PDF tamaño carta con encabezado y pie de página en cada hoja.
Esta capacidad NO depende de ningún servidor: es un archivo HTML autocontenido que abres en Chrome. Trabaja en español.
Archivos del kit (deben estar juntos en la misma carpeta)
| Archivo | Para qué |
|---|---|
ars_report_base.html |
Plantilla maestra. Cópiala y rellénala. No la edites en su lugar. |
logo-report.jpg |
Logo ARS. Referenciado como src="logo-report.jpg". |
paged.polyfill.js |
Motor de paginación (Paged.js). Necesario sólo al exportar a PDF. |
example_cotizacion.html |
Ejemplo completo de una cotización. |
example_reporte.html |
Ejemplo completo de un reporte técnico. |
Regla de oro: cada documento que generes es una copia de ars_report_base.html
guardada con otro nombre (p. ej. COT-2026-014.html), en la misma carpeta que
logo-report.jpg y paged.polyfill.js.
Cómo generar un documento (flujo)
- Copia
ars_report_base.html→<FOLIO>.html. - Rellena las ZONAS DE EDICIÓN marcadas con
<!-- EDIT ... -->:<title>de la pestaña.- Título / subtítulo (
.title-block). - Barra de folio (
.folio-bar): folio, fecha, referencia, clasificación. - Info de cliente (
.contract-info). - Cuerpo (
.body): una.sectionpor tema, usando los componentes de abajo. - Mes/año del pie (
.footer .right) si aplica.
- Si necesitas estilos propios, agrégalos en el
<style>donde dice/* EDIT: agrega aquí CSS extra */. Nunca toques los colores base ni la lógica de@page/.ars-header/.ars-footer. - Exporta a PDF (ver más abajo).
Reglas de marca — OBLIGATORIAS
- Fuente:
'Century Gothic', CenturyGothic, 'Apple Gothic', 'Trebuchet MS', Arial, sans-serif(fuente de sistema). Prohibido importar Google Fonts o cualquier recurso externo. - Color primario:
#c81b74(rosa magenta), variable CSS--pink. No lo cambies. - Logo:
logo-report.jpg, esquina superior derecha, altura 70px. - URL: texto
arsintegradores.comarriba a la izquierda (prefijoarsen negrita oscura). - Título: parallelogramo rosa (
.title-blockconclip-path). - Encabezados de sección: 15px, MAYÚSCULAS, rosa, borde izquierdo
3px solid var(--pink). - Cuerpo: 12px.
- Pie de página (fijo, no lo inventes): Oficina (81) 8123 2899 · Tepatitlán 201 Col. Mitras Sur, Mty. NL, 64020 · arsintegradores.com.
Regla #1 de PAGINACIÓN — no la reinventes
La plantilla YA logra encabezado + pie en CADA página impresa mediante "running
elements": .ars-header { position: running(arsHeader) } / .ars-footer { ... }
combinado con @page { @top-left { content: element(arsHeader) } @bottom-left { ... } }.
Esto se activa poniendo class="paged" en <html> (lo hace el botón "Exportar PDF").
PROHIBIDO para conseguir header/footer por página:
<table>con<thead>/<tfoot>.- pie con
position: fixed. - el enfoque "sin running elements" (el pie sale SÓLO en la última página — está mal).
Para forzar que una sección empiece en página nueva, añádele la clase page-break:
<div class="section page-break">.
Evita Chart.js / <canvas> — rompen la paginación de Paged.js. Usa KPIs y tablas CSS.
Convención de folios
| Prefijo | Tipo de documento |
|---|---|
INC-YYYY-NNN |
Reporte de incidente |
SOL-YYYY-NNN |
Reporte de solución / corrección |
RPT-YYYY-NNN |
Reporte ejecutivo general (inventario, auditoría, análisis) |
COT-YYYY-NNN |
Cotización |
PROP-YYYY-NNN |
Propuesta / plan de trabajo |
NNN es correlativo por año. Fecha en formato "15 de julio de 2026".
Clasificación típica: Confidencial.
Componentes disponibles (copia y pega dentro de .body)
Barras de estado (arriba del cuerpo, ancho completo)
<div class="alert-bar"><span class="dot"></span> Incidente activo — atención requerida</div>
<div class="resolved-bar"><span class="dot"></span> Incidente resuelto</div>
KPIs (métricas destacadas — 4 por fila)
<div class="summary-grid">
<div class="kpi pink"><div class="val">41</div><div class="lbl">Dispositivos</div></div>
<div class="kpi green"><div class="val">99.8%</div><div class="lbl">Disponibilidad</div></div>
<div class="kpi amber"><div class="val">3</div><div class="lbl">Advertencias</div></div>
<div class="kpi red"><div class="val">0</div><div class="lbl">Críticos</div></div>
</div>
Modificadores de color del .kpi: pink, green, amber, red (o ninguno = oscuro).
Sección con texto y lista
<div class="section">
<h2>Diagnóstico</h2>
<p>Párrafo...</p>
<ul><li>Punto uno</li><li>Punto dos</li></ul>
</div>
Tabla
<table>
<thead><tr><th>Dispositivo</th><th>IP</th><th>Estado</th></tr></thead>
<tbody>
<tr><td>SWP101</td><td>192.168.0.236</td><td><span class="badge badge-ok">OK</span></td></tr>
</tbody>
</table>
Para columnas numéricas alinéalas a la derecha con class="num" en el <td>.
Badges (etiquetas de estado)
badge-critical · badge-high · badge-medium · badge-ok · badge-active ·
badge-info · badge-historic.
<span class="badge badge-critical">CRÍTICO</span>
Cajas de resaltado
<div class="highlight-box">Nota clave (rosa).</div>
<div class="info-box">Información (azul).</div>
<div class="warn-box">Advertencia (ámbar).</div>
<div class="success-box">Éxito / confirmado (verde).</div>
Rejilla de causas (2 columnas)
<div class="cause-grid">
<div class="cause-card"><h4>Causa raíz</h4><p>...</p></div>
<div class="cause-card"><h4>Factor contribuyente</h4><p>...</p></div>
</div>
Recomendaciones (lista numerada con círculos)
<ol class="rec-list">
<li><div class="rec-body"><h4>Título</h4><p>Descripción...</p>
<span class="tag green">Prioridad baja</span></div></li>
</ol>
Variantes de .tag: (default rosa) · amber · green · blue.
Línea de tiempo
<ul class="timeline">
<li><div class="tl-time">10:32 CST</div><div class="tl-desc">Evento...</div></li>
</ul>
Cotizaciones — tabla de partidas + totales
<table>
<thead><tr><th>#</th><th>Descripción</th><th>Cant.</th><th>P. Unit.</th><th>Importe</th></tr></thead>
<tbody>
<tr><td>1</td><td>Switch UniFi US48PRO</td><td class="num">2</td>
<td class="num">$18,500.00</td><td class="num">$37,000.00</td></tr>
</tbody>
</table>
<div class="totals">
<div class="row"><span>Subtotal</span><span class="num">$37,000.00</span></div>
<div class="row"><span>IVA (16%)</span><span class="num">$5,920.00</span></div>
<div class="row grand"><span>Total MXN</span><span class="num">$42,920.00</span></div>
</div>
Otros
<div class="divider"></div>— separador fino.<code>ethernet0/1.41</code>— código en línea (se ve en rosa).
Exportar a PDF
Manual (recomendado):
- Abre el
.htmlen Google Chrome (doble clic ofile://...). - Clic en el botón rosa "⎙ Exportar PDF" (esquina inferior derecha).
- En el diálogo de impresión: Destino = Guardar como PDF, Márgenes = Predeterminados (o Ninguno), activa "Gráficos de fondo", Tamaño = Carta. Guardar.
Automatizado (headless): Chrome/Chromium headless respeta Paged.js si esperas al render. Ejemplo conceptual:
google-chrome --headless --disable-gpu --no-pdf-header-footer \
--print-to-pdf=SALIDA.pdf --virtual-time-budget=10000 \
"file:///ruta/COT-2026-014.html?export=1"
Nota: el botón fija
class="paged"vía clic. Para headless puro, agrega en tu copia un pequeño script que, silocation.searchcontieneexport=1, llame aexportPDF()automáticamente al cargar. (No lo hagas en la vista normal, o perderás el modo edición.)
NO uses WeasyPrint ni wkhtmltopdf: no ejecutan el JS de Paged.js y romperán el encabezado/pie por página.
Checklist antes de entregar
- Folio correcto y correlativo (prefijo adecuado).
- Título, cliente y fecha correctos.
- Todo el cuerpo dentro de
.body, en.section. - Sin recursos externos (fuentes, imágenes, CDNs). Sólo
logo-report.jpglocal. - Probado en pantalla (se ve bien) y exportado a PDF (header + pie en TODAS las hojas).
- Números de cotización cuadran (subtotal + IVA = total).