{{saludo}}, Taller Sandoval
{{hoy}} · Aquí tienes el resumen de hoy
{{a.mensaje}}
{{k.label}}
{{k.valor}}
{{k.delta>=0?'+':''}}{{k.delta}}{{k.isPct?' pts':'%'}} vs mes ant.
—
Análisis ejecutivo: {{dashPro.kpis.reporte}}
Ingresos vs Gastos · 6 meses
Barras apiladas (MO + Repuestos + NV) con ganancia neta (línea)
{{dashPro.ingresos_gastos_6m.reporte}}
Flujo de caja · 30 días
Proyección conservadora
Cobros esperados
{{fmt(dashPro.cashflow.cobros_esperados)}}
Gastos proyectados
{{fmt(dashPro.cashflow.total_gastos)}}
Nómina {{fmt(dashPro.cashflow.nomina_proyectada)}} + Recurrentes {{fmt(dashPro.cashflow.gastos_proyectados)}}
Flujo neto proyectado
{{fmt(dashPro.cashflow.flujo_neto)}}
{{dashPro.cashflow.reporte}}
Aging de Cuentas por Cobrar
Antigüedad de saldos pendientes
{{bucket}} días
{{fmt(monto)}}
{{dashPro.aging.counts[bucket]}} casos
| Cliente | Saldo | Días |
|---|---|---|
| {{r.cliente}} | {{fmt(r.saldo)}} | {{r.dias}}d |
| Sin CxC pendiente | ||
{{dashPro.aging.reporte}}
Métodos de pago · mes
Distribución de ingresos
{{m.metodo}}
{{fmt(m.monto)}} ({{m.pct}}%)
{{dashPro.metodos_pago.reporte}}
Top Clientes · mes
Mayor facturación
| # | Cliente | Órdenes | Total |
|---|---|---|---|
| {{i+1}} | {{c.cliente}} | {{c.ordenes}} | {{fmt(c.total)}} |
| Sin clientes | |||
{{dashPro.top_clientes.reporte}}
Top Repuestos Vendidos · mes
Ingresos y margen
| Producto | Cant | Ingresos | Margen% |
|---|---|---|---|
| {{r.nombre}} | {{r.cantidad}} | {{fmt(r.ingresos)}} | {{r.margen_pct}}% |
| Sin repuestos vendidos | |||
{{dashPro.top_repuestos.reporte}}
Rendimiento por Técnico · mes
Productividad y cierre
| Técnico | Órdenes | Cierre% | Ingresos |
|---|---|---|---|
| {{t.tecnico}} | {{t.ordenes}} ({{t.completadas}}) | {{t.tasa_cierre}}% | {{fmt(t.ingresos)}} |
| Sin actividad | |||
{{dashPro.rendimiento_tecnicos.reporte}}
Funnel de Fases · 90 días
Distribución operativa
{{f.fase}}
{{f.count}} ({{f.pct}}%)
{{dashPro.funnel_fases.reporte}}
Tendencia · 12 meses + Proyección
Ganancia neta mensual con regresión lineal
{{dashPro.tendencia_12m.reporte}}
Margen por Categoría · mes
Contribución por línea
| Categoría | Ingresos | Margen |
|---|---|---|
| {{c.categoria}} | {{fmt(c.ingresos)}} | {{c.margen_pct}}% |
{{dashPro.margen_categorias.reporte}}
◆ Resumen operativo del día
Órdenes Activas
{{dash.total_activas||0}}
Facturación del Mes
{{fmt(dashStats?.ingresos_mes||dash.ingresos_mes||0)}}
Clientes Registrados
{{dashStats?.total_clientes||0}}
Citas de Hoy
{{dash.citas_hoy||0}}
Ingresos por Semana
Semana actual
Estado de Órdenes
Pipeline
{{f}}
{{dashStats.ordenes_por_fase[f]||0}}
Alertas de Stock
{{a.nombre||a.codigo}}
{{a.stock<=0?'SIN STOCK':'Solo '+a.stock+' unidades'}}
{{dash.stock_bajo}} productos bajo mínimo
Caja Hoy
{{fmt(dashStats?.hoy_ingresos||dash.caja_hoy||0)}}
Ingresos cobrados hoy
Reporte de Ayer
{{dashStats.ordenes_vencidas}} órdenes vencidas
Ingresos de Ayer
{{fmt(dashStats.ayer_ingresos||0)}}
Órdenes + Notas de Venta
Órdenes Ayer
{{dashStats.ayer_ordenes||0}}
órdenes trabajadas
Atención Requerida
{{dashStats.ordenes_vencidas}}
órdenes >7 días sin cerrar
Estado Fases
{{fase}}
{{cant}}
Cargando dashboard...
Órdenes de Servicio
Gestión completa de órdenes de trabajo del taller
{{f}}
{{countFase(f)}}
Todas {{rows.length}}
{{f}} {{countFase(f)}}
{{ordenesFilt.length}} orden{{ordenesFilt.length!==1?'es':''}}
{{o.consecutivo}}
{{o.fecha?.slice(0,10)}}
{{o.cliente}}
{{o.placa}}
{{o.tecnico||'Sin técnico'}}
{{o.motivo?.slice(0,50)}}{{(o.motivo?.length||0)>50?'…':''}}
{{o.estado}}
{{o.estado==='ARCHIVADO'?'PAGADO':o.pago_estado}}
{{fmt(o.total)}}
Cob: {{fmt(o.cobrado||0)}}
No se encontraron órdenes
Clientes
Base de datos de clientes del taller
{{rowsFilt.length}} resultado{{rowsFilt.length!==1?'s':''}}
Vehículos
Gestión integral del parque automotor y expedientes técnicos
Inventario
Control de stock de repuestos e insumos
{{rowsFilt.length}} resultado{{rowsFilt.length!==1?'s':''}}
Citas / Agenda
Programación de citas y servicios
| Fecha | Hora | Placa | Teléfono | Motivo | Estado | Acciones |
|---|---|---|---|---|---|---|
| {{c.fecha_cita||c.fecha||'—'}} | {{c.hora||'—'}} | {{c.placa||c.vehiculo_placa||'—'}} | {{c.cliente||'—'}} | {{c.motivo?.slice(0,40)}}{{(c.motivo?.length||0)>40?'...':''}} | {{c.estado}} | |
Sin citas | ||||||
Cotizaciones
Presupuestos y propuestas de servicio
| # | Cliente | Placa | Fecha | Total | Estado | Acciones |
|---|---|---|---|---|---|---|
| {{c.id}} | {{c.nombre_cliente||c.cliente||'—'}} | {{c.placa||'—'}} | {{c.fecha?.slice(0,10)||'—'}} | {{fmt(c.total)}} | {{c.estado||'pendiente'}} | |
Sin cotizaciones | ||||||
Notas de Venta
Ventas directas de repuestos e insumos
{{rows.length}}
Total Notas
{{fmt(rows.reduce((s,n)=>s+(n.total||0),0))}}
Total Vendido
{{fmt(rows.filter(n=>n.fecha?.slice(0,10)===todayISO).reduce((s,n)=>s+(n.total||0),0))}}
Vendido Hoy
| Número | Cliente | Fecha | Subtotal | IGV | Total | Método | Estado | Acciones | |
|---|---|---|---|---|---|---|---|---|---|
| {{n.numero||n.id}} | {{n.cliente||'Consumidor Final'}} | {{n.fecha?.slice(0,10)||'—'}} | {{fmt(n.subtotal)}} | {{fmt(n.igv)}} | {{fmt(n.total)}} | {{n.metodo_pago||'—'}} | {{n.estado||'—'}} | ||
Sin notas de venta | |||||||||
Facturas / Compras
Registro de compras, gastos y mercancía
Total Compras
{{fmt(rows.reduce((s,f)=>s+(f.total||0),0))}}
{{rows.length}} facturas
Mercancía
{{fmt(rows.filter(f=>f.tipo==='mercaderia').reduce((s,f)=>s+(f.total||0),0))}}
{{rows.filter(f=>f.tipo==='mercaderia').length}} facturas
Gastos
{{fmt(rows.filter(f=>f.tipo==='gasto').reduce((s,f)=>s+(f.total||0),0))}}
{{rows.filter(f=>f.tipo==='gasto').length}} facturas
⚠️ Por Corregir
{{rows.filter(f=>f.estado==='pendiente_correccion').length}}
Subidas por Telegram
| Tipo | Proveedor / RUC | N° Factura | Fecha | Sub | IGV | Total | Acciones |
|---|---|---|---|---|---|---|---|
|
{{f.tipo==='mercaderia'?'🛒 Mercancía':'📋 Gasto'}}
✏️ CORREGIR
|
{{f.proveedor||'—'}}
RUC: {{f.ruc_proveedor}}
|
{{f.numero_factura||'—'}} | {{f.fecha||'—'}} | {{fmt(f.subtotal)}} | {{fmt(f.igv)}} | {{fmt(f.total)}} | ✅ En inventario |
Sin facturas registradas | |||||||
Créditos / Fiado
Gestión de créditos y cuentas por cobrar
| Cliente | Fecha | Total | Cobrado | Saldo | Estado | Acciones |
|---|---|---|---|---|---|---|
| {{c.cliente||c.cliente_nombre||'—'}} | {{(c.fecha_venta||c.fecha||'').slice(0,10)||'—'}} | {{fmt(c.total)}} | {{fmt((c.total||0)-(c.pendiente||0))}} | {{fmt(c.pendiente||0)}} | {{c.estado}} | |
Sin créditos | ||||||
Apertura / Cierre Caja
{{hoy}} · Control de ingresos diarios
Caja no abierta hoy
Puedes consultar el historial abajo. Abre la caja para registrar los ingresos del día {{hoy}}.
{{cajaActiva.estado==='abierto' ? 'CAJA ABIERTA' : 'CAJA CERRADA'}}
Apertura: {{cajaActiva.apertura_hora||'—'}} ·
Saldo inicial: {{fmt(cajaActiva.saldo_apertura||0)}} ·
Por: {{cajaActiva.usuario_apertura||'—'}}
Total del día
{{fmt(cajaActiva.totales?.total||0)}}
Total Día
{{fmt(cajaActiva.totales?.total||0)}}
{{cajaActiva.totales?.n_ordenes||0}} órdenes
{{fmt(cajaActiva.totales?.efectivo||0)}}
Efectivo
{{fmt(cajaActiva.totales?.yape||0)}}
Yape / Plin
{{fmt(cajaActiva.totales?.transferencia||0)}}
Transferencia
{{fmt(cajaActiva.totales?.tarjeta||0)}}
Tarjeta
{{fmt(cajaActiva.totales?.notas_venta||0)}}
Notas Venta
Distribución de Ingresos del Día
{{item.label}}
{{fmt(cajaActiva.totales?.[item.key]||0)}}
{{cajaActiva.totales?.total>0 ? Math.round((cajaActiva.totales[item.key]/cajaActiva.totales.total)*100)+'%' : '0%'}}
Sin movimientos aún hoy
Historial de Ingresos
Efectivo · Yape/Plin · Transferencia · Tarjeta
| Fecha | Efectivo | Yape / Plin | Transfer. | Tarjeta | Notas Venta | Total Día | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{row.fecha}} Hoy | {{fmt(row.efectivo||0)}} | {{fmt(row.yape||0)}} | {{fmt(row.transferencia||0)}} | {{fmt(row.tarjeta||0)}} | {{fmt(row.notas_venta||0)}} | {{fmt(row.total||0)}} | ||||||||||||||||||||||||
|
Cargando detalle...
Desglose del {{cajaDetalle.fecha}} — {{cajaDetalle.resumen.ordenes_cobradas}} órdenes · {{cajaDetalle.resumen.notas_emitidas}} notas · {{cajaDetalle.resumen.abonos_credito}} abonos
|
||||||||||||||||||||||||||||||
| Cargando historial... | ||||||||||||||||||||||||||||||
| TOTAL 30 DÍAS | {{fmt(cajaHistorial.reduce((s,r)=>s+(r.efectivo||0),0))}} | {{fmt(cajaHistorial.reduce((s,r)=>s+(r.yape||0),0))}} | {{fmt(cajaHistorial.reduce((s,r)=>s+(r.transferencia||0),0))}} | {{fmt(cajaHistorial.reduce((s,r)=>s+(r.tarjeta||0),0))}} | {{fmt(cajaHistorial.reduce((s,r)=>s+(r.notas_venta||0),0))}} | {{fmt(cajaHistorial.reduce((s,r)=>s+(r.total||0),0))}} | ||||||||||||||||||||||||
| Semana | Efectivo | Yape / Plin | Transfer. | Tarjeta | Notas Venta | Total Semana |
|---|---|---|---|---|---|---|
| {{semRow.semana}} Actual | {{fmt(semRow.efectivo)}} | {{fmt(semRow.yape)}} | {{fmt(semRow.transferencia)}} | {{fmt(semRow.tarjeta)}} | {{fmt(semRow.notas_venta)}} | {{fmt(semRow.total)}} |
| Sin datos de semanas aún. | ||||||
Historial Detallado
Ventas · Órdenes · Abonos · Cierres de caja
Ventas
{{fmt(histTotales.venta)}}
{{histCounts.venta}} eventos
Órdenes
{{fmt(histTotales.orden)}}
{{histCounts.orden}} eventos
Abonos
{{fmt(histTotales.abono)}}
{{histCounts.abono}} eventos
Cierres Caja
{{histCounts.cierre}}
registros
Total Movimientos
{{fmt((histTotales.venta||0)+(histTotales.orden||0)+(histTotales.abono||0))}}
{{histEventosFiltrados.length}} visibles
Sin movimientos en el rango seleccionado
| Tipo | Fecha | Descripción | Cliente | Método | Monto |
|---|---|---|---|---|---|
| {{histColors[e.tipo]?.lbl || e.tipo}} | {{e.fecha}} | {{e.descripcion}} | {{e.cliente}} | {{e.metodo_pago||'—'}} | — {{fmt(e.monto||0)}} |
Gastos Operacionales
Registro de ítems del inventario usados internamente por el taller (sin ganancia)
{{fmt(gastosMes)}}
Egresos del Mes
{{gastosRows.length}}
Total Registros
{{fmt(gastosRows.filter(g=>g.fecha===todayISO).reduce((s,g)=>s+(g.costo_total||0),0))}}
Egresos Hoy
Registrar Nuevo Gasto Operacional
Egreso total estimado
{{fmt((gastosForm.cantidad||1)*(gastosForm.costo_unitario||0))}}
Historial de Gastos Operacionales
| Fecha | Ítem | Descripción | Cant. | Costo Unit. | Egreso Total | Registrado por | |
|---|---|---|---|---|---|---|---|
| {{g.fecha}} |
{{g.nombre_item||'—'}}
{{g.codigo_inventario}}
|
{{g.descripcion||'—'}} | {{g.cantidad}} | {{fmt(g.costo_unitario)}} | {{fmt(g.costo_total)}} | {{g.registrado_por||'—'}} | |
| Sin registros aún. Comienza registrando el primer gasto operacional. | |||||||
Centro Financiero
Live · {{finDash.generated_at?.slice(11,16)}}
Inteligencia ejecutiva en tiempo real · cobranza, ganancia neta, proyecciones e insights
Calculando ganancias, costos y proyecciones…
Cobrado · {{finDash.label||'Periodo'}}
{{fmt(finDash.actual?.cobrado||0)}}
{{Math.abs(finDelta('cobrado').pct||0).toFixed(1)}}%
vs {{finDash.label_anterior||'antes'}}
{{finDash.actual?.n_ordenes||0}} orden(es) · Ant: {{fmt(finDash.anterior?.cobrado||0)}}
Margen Neto
{{(finDash.actual?.margen_pct||0).toFixed(1)}}%
{{Math.abs(finDelta('margen_pct').abs||0).toFixed(1)}}pp
vs antes
Saludable: ≥25% · Excelente: ≥40%
Ticket Promedio
{{fmt(finDash.actual?.ticket_promedio||0)}}
{{Math.abs(finDelta('ticket_promedio').pct||0).toFixed(1)}}%
vs antes
Ant: {{fmt(finDash.anterior?.ticket_promedio||0)}}
{{finSalud.score}}
/100
Salud Financiera del Negocio
{{finSalud.label}}
{{finSalud.descripcion}}
Run-rate Anual
{{fmt(finRunRate)}}
Eficiencia Costos
{{finEficienciaCostos}}%
Punto Equilibrio
{{fmt(finPuntoEq)}}/dia
Tendencia · Ultimos 30 dias
Cobrado · Ganancia Neta · Gastos por dia
Cobrado
Ganancia
Gastos
Mix de Ganancia · {{finDash.label||''}}
De donde viene cada sol ganado
Bruta
{{fmt((finDash.actual?.ganancia_bruta||0))}}
Mano de Obra
{{fmt(finDash.mix?.mano_obra||0)}}
{{finMixPct('mano_obra')}}% del total · 100% es ganancia
Margen Repuestos
{{fmt(finDash.mix?.rep_ganancia||0)}}
Venta {{fmt(finDash.actual?.rep_venta||0)}} - Costo {{fmt(finDash.actual?.rep_costo||0)}}
Notas de Venta
{{fmt(finDash.mix?.notas_venta||0)}}
Cobrado {{fmt(finDash.mix?.notas_pagado||0)}} · Credito {{fmt(finDash.mix?.notas_credito||0)}}
Abonos Credito
{{fmt(finDash.mix?.abonos||0)}}
Pagos sobre creditos pendientes
Como se forma la Ganancia Neta
Mano de Obra + Margen Repuestos + Notas + Abonos - Gastos
Bruta
{{fmt(finDash.actual?.ganancia_bruta||0)}}
- Gastos
{{fmt(finDash.actual?.gastos||0)}}
= Neta
{{fmt(finDash.actual?.ganancia_neta||0)}}
Proyeccion · Proximos 30 dias
Regresion lineal sobre ultimos 14 dias
Ganancia estimada
{{fmt(finDash.proyeccion?.ganancia_total_proyectada||0)}}
~ {{fmt(finDash.proyeccion?.promedio_diario_estimado||0)}}/dia
Como leerlo: linea solida = real (ultimos 14 dias), punteada = proyectado.
Si la tendencia cae, el sistema lo refleja inmediatamente.
Top Gastos por Categoria
Donde se va tu dinero · {{finDash.label||''}}
Sin gastos registrados en este periodo
{{g.categoria}} ({{g.n}})
{{fmt(g.monto)}}
Metodos de Pago Recibidos
Como te pagaron tus clientes · {{finDash.label||''}}
{{m.metodo}}
{{fmt(m.monto)}}
Cuentas por Cobrar (Aging)
Saldos pendientes por antiguedad
Total CxC
{{fmt(finDash.aging?.total||0)}}
{{finDash.aging?.n_total||0}} ordenes
{{b.rango}}
{{fmt(b.monto)}}
{{b.n}} orden(es)
Como actuar: 0-30 dias es normal · 31-60 requiere recordatorio activo · +60 dias es deuda en riesgo de perdida, gestiona inmediatamente.
Resumen Ejecutivo · {{finDash.label||''}}
Lectura para gerencia · 60 segundos
En el periodo {{(finDash.label||'').toLowerCase()}} el taller cobro
{{fmt(finDash.actual?.cobrado||0)}}
({{finDelta('cobrado').dir==='up'?'+':''}}{{(finDelta('cobrado').pct||0).toFixed(1)}}% vs {{finDash.label_anterior||'antes'}})
en {{finDash.actual?.n_ordenes||0}} ordenes,
con un ticket promedio de {{fmt(finDash.actual?.ticket_promedio||0)}}.
La ganancia neta fue {{fmt(finDash.actual?.ganancia_neta||0)}}
(margen {{(finDash.actual?.margen_pct||0).toFixed(1)}}%),
desglosada en mano de obra {{fmt(finDash.actual?.mdo||0)}},
margen de repuestos {{fmt(finDash.actual?.rep_ganancia||0)}}
y notas de venta {{fmt(finDash.actual?.cobrado_nv||0)}}.
Los gastos sumaron {{fmt(finDash.actual?.gastos||0)}}
({{finDash.actual?.gastos_nomina>finDash.actual?.gastos_facturas?'mayoritariamente nomina':'principalmente facturas de proveedores'}}).
La proyeccion a 30 dias sugiere {{fmt(finDash.proyeccion?.ganancia_total_proyectada||0)}} de ganancia neta si la tendencia se mantiene.
Detalle Diario · Ultimos 30 dias
Cada fila refleja todo lo cobrado, gastado y ganado ese dia
Sin movimientos en este rango
| Fecha | Cobrado | Mano Obra | Margen Rep. | Notas Venta | Gastos | Ganancia Neta | Ord. |
|---|---|---|---|---|---|---|---|
| {{d.fecha}} | {{fmt(d.cobrado||0)}} | {{fmt(d.mdo||0)}} | {{fmt(d.rep_ganancia||0)}} | {{fmt(d.nv||0)}} | {{fmt(d.gastos||0)}} | {{fmt(d.ganancia_neta||0)}} | {{d.n_ordenes||0}} |
| TOTAL 30d | {{fmt((finDash.historico||[]).reduce((s,d)=>s+(d.cobrado||0),0))}} | {{fmt((finDash.historico||[]).reduce((s,d)=>s+(d.mdo||0),0))}} | {{fmt((finDash.historico||[]).reduce((s,d)=>s+(d.rep_ganancia||0),0))}} | {{fmt((finDash.historico||[]).reduce((s,d)=>s+(d.nv||0),0))}} | {{fmt((finDash.historico||[]).reduce((s,d)=>s+(d.gastos||0),0))}} | {{fmt((finDash.historico||[]).reduce((s,d)=>s+(d.ganancia_neta||0),0))}} | {{(finDash.historico||[]).reduce((s,d)=>s+(d.n_ordenes||0),0)}} |
Cobrado
Suma de monto_cobrado en ordenes + monto_pagado en notas + abonos a creditos.
Ganancia Neta
Mano de obra + (precio - costo de repuestos) + notas + abonos - gastos (facturas + nomina).
Margen Neto
Ganancia neta / cobrado x 100. Saludable: >=25%. Si baja de 15% el negocio no genera utilidad.
Run-rate Anual
Proyeccion anualizada: ganancia diaria promedio x 365. Util para planeacion estrategica.
Proveedores
Gestión de proveedores y suministros del taller
{{rowsFilt.length}} resultado{{rowsFilt.length!==1?'s':''}}
Equipo de trabajo
Técnicos, recepcionistas y demás miembros. Pagos y saldos pendientes.
Activos
{{equipoResumen.trabajadores_activos}}
miembros del equipo
Nómina comprometida
S/ {{Number(equipoResumen.nomina_mensual_comprometida||0).toLocaleString('es-PE',{minimumFractionDigits:2})}}
suma de salarios
Pagado este mes
S/ {{Number(equipoResumen.pagado_mes||0).toLocaleString('es-PE',{minimumFractionDigits:2})}}
sueldos + adelantos + bonos
Pendiente del mes
S/ {{Number(equipoResumen.pendiente_mes_mensuales||0).toLocaleString('es-PE',{minimumFractionDigits:2})}}
solo mensuales
Historial de pagos — {{equipoSelected.nombre}}
{{equipoSelected.rol}} · {{equipoSelected.periodicidad}} · salario S/ {{Number(equipoSelected.salario||0).toLocaleString('es-PE',{minimumFractionDigits:2})}}
| Fecha | Tipo | Método | Observación | Monto | |
|---|---|---|---|---|---|
| {{p.fecha}} | {{p.tipo}} | {{p.metodo_pago}} | {{p.observacion||'—'}} | S/ {{Number(p.monto||0).toLocaleString('es-PE',{minimumFractionDigits:2})}} | |
| Sin pagos registrados | |||||
Usuarios
Administración de usuarios del sistema
| Nombre | Usuario | Rol | Estado | Acciones | |
|---|---|---|---|---|---|
| {{u.nombre}} | {{u.username}} | {{u.rol}} | {{u.email||'—'}} | {{u.activo?'Activo':'Inactivo'}} | |
Sin usuarios | |||||
Configuración
Parámetros del sistema SANDOVAL PRO
Términos y Condiciones
Aparecen en el link de aprobación que ve el cliente. Uno por línea.
{{(terminosTexto||'').split('\n').filter(l=>l.trim()).length}} términos configurados
Cuentas Bancarias
Aparecen en el link de aprobación que envía al cliente.
Sin cuentas registradas. Agregue al menos una para que aparezca en los presupuestos.
{{c.banco}}
{{c.titular || '—'}} · {{c.tipo}} {{c.moneda}}
Teléfono:
{{c.telefono || '—'}}Cuenta:
{{c.numero_cuenta || '—'}}CCI:
{{c.cci || '—'}}INACTIVA
{{vehEditing ? 'Editar Vehículo' : 'Registrar Vehículo'}}
{{vehEditing ? 'Modifica los datos o cambia el propietario' : 'Completa los datos y asigna un propietario'}}
1
Propietario del Vehículo
{{(cl.nombre||'?')[0].toUpperCase()}}
{{cl.nombre}}
{{cl.telefono||'Sin teléfono'}}
{{(vehClienteSel.nombre||'?')[0].toUpperCase()}}
{{vehClienteSel.nombre}}
{{vehClienteSel.telefono||'Sin teléfono'}} · ID {{vehClienteSel.id}}
Escribe al menos 2 caracteres para buscar
2
Tipo de Vehículo
3
Datos del Vehículo
{{cotizacionModal.data?.numero||'Cotización'}}
{{cotizacionModal.data?.nombre_cliente||'—'}} · {{cotizacionModal.data?.fecha?.slice(0,10)||'—'}}
Ítems
| Descripción | Cant. | P.Unit. | Subtotal | |
|---|---|---|---|---|
| {{fmt(item.subtotal)}} |
Total: {{fmt(cotizTotal)}}
Análisis ABC — Rotación de Inventario
Clasificación Pareto: A=80% volumen · B=15% · C=5% (baja rotación)
{{abcData.mensaje||'Sin datos de uso todavía. Completa órdenes de servicio para generar el análisis.'}}
{{abcData.clase_a}}
Clase A — Alta rotación
80% del volumen
{{abcData.clase_b}}
Clase B — Media
15% del volumen
{{abcData.clase_c}}
Clase C — Baja rotación
Stock muerto
| Clase | Código | Nombre | Usado | % Uso | Stock | Precio |
|---|---|---|---|---|---|---|
| {{item.clase}} | {{item.codigo}} | {{item.nombre}} | {{item.total_usado}} | {{item.pct_uso}}% | {{item.stock}} | {{fmt(item.precio)}} |
{{t.msg}}