Usuario: {{ currentUser.username }}
Rol: {{ currentUser.role }}
No hay clientes registrados.
ID: {{ selectedClientFromSubmenu.id }}
Nombre: {{ selectedClientFromSubmenu.nombre }}
Domicilio: {{ selectedClientFromSubmenu.domicilio || 'N/A' }}
Teléfono: {{ selectedClientFromSubmenu.telefono || 'N/A' }}
Email: {{ selectedClientFromSubmenu.email || 'N/A' }}
Sin vehículos registrados.
{{ day.dayNameShort }}
{{ day.dayOfMonth }}
{{ event.tarea }}
{{ event.horaProgramada }} - {{ event.vehiculoPatente }}
{{ event.tarea }}
{{ event.horaProgramada }} - {{ event.vehiculoPatente }}
{{ addEventForm.clienteNombre }} - {{ addEventForm.vehiculoDescripcion }} ({{ addEventForm.vehiculoPatente }})
No hay órdenes de trabajo activas en este momento.
No tienes órdenes asignadas activas.
No se completaron órdenes de trabajo hoy.
No se encontraron vehículos o clientes con esos criterios.
{{ item.vehiculo?.patente || 'N/A' }} - {{ item.vehiculo?.marca || 'N/A' }} {{ item.vehiculo?.modelo || 'N/A' }} ({{item.vehiculo?.anio || 'N/A'}})
Cliente: {{ item.cliente?.nombre || 'N/A' }} (ID: {{ item.cliente?.id || 'N/A' }})
Cliente: {{ newOrdenMantenimiento.cliente?.nombre || 'N/A' }} (ID: {{ newOrdenMantenimiento.cliente?.id || 'N/A' }})
Vehículo: {{ newOrdenMantenimiento.vehiculo?.patente || 'N/A' }} - {{ newOrdenMantenimiento.vehiculo?.marca || 'N/A' }} {{ newOrdenMantenimiento.vehiculo?.modelo || 'N/A' }} ({{newOrdenMantenimiento.vehiculo?.anio || 'N/A'}}) - {{ newOrdenMantenimiento.vehiculo?.kilometraje ? newOrdenMantenimiento.vehiculo.kilometraje.toLocaleString() + ' km' : 'N/A km' }} - Comb: {{ newOrdenMantenimiento.vehiculo?.tipoCombustible || 'N/A' }}
Fecha de Ingreso: {{ formatDate(newOrdenMantenimiento.fechaEntrada) }}
Kilometraje Actual:
No hay técnicos cargados en el sistema.
No hay tareas agregadas a esta orden.
| Producto | Cant. | P. Unit. | Subtotal | |
|---|---|---|---|---|
| {{ mat.nombre_item }} | {{ mat.cantidad }} | ${{ Number(mat.precio_unitario).toFixed(2) }} | ${{ (mat.cantidad * Number(mat.precio_unitario)).toFixed(2) }} | |
| Total materiales: | ${{ otMaterialesTotalCalc.toFixed(2) }} | |||
Sin materiales registrados. ⚠ Requerido antes de completar.
Km de entrada: {{ newOrdenMantenimiento.kilometrajeEntrada ? newOrdenMantenimiento.kilometrajeEntrada.toLocaleString() + ' km' : 'No registrado' }}
No hay órdenes disponibles para tomar en este momento.
Todavía no tienes órdenes tomadas.
| OT | Tarea | Cliente / Vehículo | Estado | Acción |
|---|---|---|---|---|
| {{ tarea.ordenId }} |
{{ tarea.nombre }} {{ tarea.comentario }} |
{{ tarea.clienteNombre }} {{ tarea.vehiculoPatente }} |
{{ tarea.completado ? 'Completada' : 'Pendiente' }} |
No hay tareas para los filtros seleccionados.
No se encontraron empleados con esos criterios.
{{ empleado.nombreCompleto }} (ID: {{ empleado.id }})
BAJAPuesto: {{ empleado.puesto || 'No especificado' }}
CUIL: {{ empleado.cuil || 'N/A' }}
Fecha Ingreso: {{ empleado.fechaIngreso ? formatDate(empleado.fechaIngreso) : 'N/A' }}
Fecha Baja: {{ formatDate(empleado.fechaBaja) }}
Antigüedad: {{ empleado.antiguedad || 'N/A' }}
Días de Vacaciones: {{ calcularDiasVacaciones(empleado.fechaIngreso, empleado.fechaBaja) }} días
{{ verEmpleadosBaja ? 'No hay empleados dados de baja.' : 'No hay empleados activos registrados.' }}
Empleado dado de baja
Este empleado fue dado de baja el {{ formatDate(newEmpleado.fechaBaja) }}. No es posible cargar nuevas licencias. El historial se muestra a continuación solo para consulta.
Días Anuales Otorgados: {{ newEmpleado.diasVacacionesAnualesOtorgados }} días
Días Utilizados (Periodo Actual): {{ newEmpleado.diasVacacionesUtilizados }} días
Días Disponibles: {{ newEmpleado.diasVacacionesAnualesOtorgados - newEmpleado.diasVacacionesUtilizados }} días
Nota: Los días otorgados se basan en la antigüedad calculada. El descuento de vacaciones se aplica al guardar una licencia de tipo "Vacaciones".
No hay licencias registradas para este empleado.
Nombre: {{ newEmpleado.nombreCompleto || 'N/A' }}
DNI: {{ newEmpleado.dni || 'N/A' }}
CUIL: {{ newEmpleado.cuil || 'N/A' }}
Nacimiento: {{ newEmpleado.fechaNacimiento ? formatDate(newEmpleado.fechaNacimiento) : 'N/A' }}
Domicilio: {{ newEmpleado.domicilio || 'N/A' }}
Localidad: {{ newEmpleado.localidad || 'N/A' }}
Código Postal: {{ newEmpleado.codigoPostal || 'N/A' }}
Teléfono: {{ newEmpleado.telefono || 'N/A' }}
Email: {{ newEmpleado.email || 'N/A' }}
Puesto: {{ newEmpleado.puesto || 'N/A' }}
Fecha de Ingreso: {{ newEmpleado.fechaIngreso ? formatDate(newEmpleado.fechaIngreso) : 'N/A' }}
Fecha de Baja: {{ newEmpleado.fechaBaja ? formatDate(newEmpleado.fechaBaja) : 'N/A' }}
Antigüedad: {{ newEmpleado.antiguedad || 'N/A' }}
Tipo de Contrato: {{ newEmpleado.tipoContrato || 'N/A' }}
Forma de Pago: {{ newEmpleado.formaPago || 'N/A' }}
Vacaciones Otorgadas: {{ newEmpleado.diasVacacionesAnualesOtorgados ?? 0 }} días
Vacaciones Utilizadas: {{ newEmpleado.diasVacacionesUtilizados ?? 0 }} días
Vacaciones Disponibles: {{ (newEmpleado.diasVacacionesAnualesOtorgados ?? 0) - (newEmpleado.diasVacacionesUtilizados ?? 0) }} días
Obra Social: {{ newEmpleado.obraSocial?.nombre || 'N/A' }}
N° Afiliado: {{ newEmpleado.obraSocial?.numeroAfiliado || 'N/A' }}
Banco: {{ newEmpleado.datosBancarios?.banco || 'N/A' }}
CBU/CVU: {{ newEmpleado.datosBancarios?.cbu || 'N/A' }}
Alias: {{ newEmpleado.datosBancarios?.alias || 'N/A' }}
ART: {{ newEmpleado.art?.nombre || 'N/A' }}
N° Póliza/Socio ART: {{ newEmpleado.art?.numeroSocio || 'N/A' }}
No hay licencias registradas para este empleado.
{{ item.vehiculo?.patente || 'N/A' }} - {{ item.vehiculo?.marca || 'N/A' }} {{ item.vehiculo?.modelo || 'N/A' }}
Cliente: {{ item.cliente?.nombre || 'N/A' }} (ID: {{ item.cliente?.id || 'N/A' }})
No se encontraron vehículos con esos criterios.
No hay servicios completados recientemente.
Cliente: {{ vehiculoSeleccionadoGlobal.cliente?.nombre || 'N/A' }}
ID Cliente: {{ vehiculoSeleccionadoGlobal.cliente?.id || 'N/A' }}
Domicilio: {{ vehiculoSeleccionadoGlobal.cliente?.domicilio || 'N/A' }}
Teléfono: {{ vehiculoSeleccionadoGlobal.cliente?.telefono || 'N/A' }}
Email: {{ vehiculoSeleccionadoGlobal.cliente?.email || 'N/A' }}
Patente: {{ vehiculoSeleccionadoGlobal.vehiculo?.patente || 'N/A' }}
Marca: {{ vehiculoSeleccionadoGlobal.vehiculo?.marca || 'N/A' }}
Modelo: {{ vehiculoSeleccionadoGlobal.vehiculo?.modelo || 'N/A' }}
Año: {{ vehiculoSeleccionadoGlobal.vehiculo?.anio || 'N/A' }}
Kilometraje: {{ vehiculoSeleccionadoGlobal.vehiculo?.kilometraje ? vehiculoSeleccionadoGlobal.vehiculo.kilometraje.toLocaleString() + ' km' : 'N/A' }}
Combustible: {{ vehiculoSeleccionadoGlobal.vehiculo?.tipoCombustible || vehiculoSeleccionadoGlobal.vehiculo?.tipo_combustible || 'N/A' }}
Patente: {{ vehiculoSeleccionadoGlobal.vehiculo?.patente }} (no editable)
Orden ID: {{ orden.id }} - Fecha Ingreso: {{ orden.fechaEntrada }}
Estado: {{ orden.estado }}
Obs: {{ tarea.comentario }}
No hay historial de mantenimiento registrado para este vehículo.
Cuando está activo, las órdenes de trabajo deben tener al menos un material registrado antes de completarse.
| ID | Cód. Parte | Nombre | Marca | Categoría | Ubic. | Stock | Mín. | P.Compra | P.Venta | Proveedor | Acciones |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ item.id }} | {{ item.numero_parte || '—' }} | {{ item.nombre }} | {{ item.marca_repuesto || '—' }} | {{ item.categoria }} — | {{ item.ubicacion_deposito || '—' }} | {{ item.stock }} ↓ {{ item.unidad_medida || 'un.' }} | {{ item.stock_minimo || 0 }} | $ {{ item.precio_compra ? Number(item.precio_compra).toFixed(2) : '—' }} | {{ item.precio_venta ? '$ ' + Number(item.precio_venta).toFixed(2) : '—' }} | {{ item.proveedor_nombre || item.proveedor_id || '—' }} |
No hay productos en el inventario. Agregue el primero o importe desde Excel.
No hay productos que coincidan con los filtros.
Columnas: ID_Producto (opcional),
Nombre,
Categoria,
Stock,
StockMinimo,
PrecioCompra,
PrecioVenta,
NumeroParte,
MarcaRepuesto,
UnidadMedida,
UbicacionDeposito,
Compatibilidad,
ProveedorID.
{{ inventarioAlertas.length }} producto(s) con stock igual o por debajo del mínimo configurado.
costo × (1+gan%) × (1+IVA%)
{{ inventarioMovimientoItemNombre }}
Stock actual: {{ inventarioMovimientoItemStock }}
Stock actual: {{ inventarioMovimientoItemStock }} → nuevo valor: {{ movimientoForm.cantidad || '?' }}
{{ inventarioHistorialItemNombre }}
| Fecha | Tipo | Cant. | Ant. | Post. | Motivo | OT |
|---|---|---|---|---|---|---|
| {{ mov.fecha ? mov.fecha.slice(0,16).replace('T',' ') : '—' }} | {{ mov.tipo }} | {{ mov.tipo === 'salida' ? '-' : (mov.tipo === 'ajuste' ? '→' : '+') }}{{ mov.cantidad }} | {{ mov.stock_anterior }} | {{ mov.stock_posterior }} | {{ mov.motivo || '—' }} | {{ mov.orden_trabajo_id || '—' }} |
Actualizado: {{ formatDateTime(dashboardReportes.generatedAt) }}
Órdenes Mes
{{ dashboardReportes.kpis.ordenesMesActual }}
vs mes anterior: {{ formatVariacion(dashboardReportes.kpis.variacionMensualPct) }}
Completadas Mes
{{ dashboardReportes.kpis.completadasMesActual }}
Cumplimiento: {{ dashboardReportes.kpis.tasaCumplimientoMesPct.toFixed(2) }}%
Mat. Mes ($)
${{ Number(dashboardReportes.kpis.costoMaterialesMesActual).toLocaleString('es-AR', {minimumFractionDigits:0, maximumFractionDigits:0}) }}
Costo materiales en OTs completadas
Servicios Prog. Mes
{{ dashboardReportes.kpis.serviciosProgramadosMesActual }}
Agenda del mes en curso
Órdenes Año
{{ dashboardReportes.kpis.ordenesAnioActual }}
vs año anterior: {{ formatVariacion(dashboardReportes.kpis.variacionAnualPct) }}
Completadas Año
{{ dashboardReportes.kpis.completadasAnioActual }}
Completadas + entregadas
Mat. Año ($)
${{ Number(dashboardReportes.kpis.costoMaterialesAnioActual).toLocaleString('es-AR', {minimumFractionDigits:0, maximumFractionDigits:0}) }}
Costo materiales en el año
Alertas de Tendencia
{{ alerta.titulo }}
{{ alerta.descripcion }}
Top Técnicos (Mes)
Sin registros este mes.
#{{ idx + 1 }} {{ t.tecnico_nombre }}
Completadas: {{ t.ordenes_completadas }} | Prom. cierre: {{ t.promedio_dias_cierre || 0 }} d
Gráfico de Tareas Más Realizadas (Mes actual)
Lógica: OT + tipo de trabajo + categoría + tarea específica.
Top {{ dashboardReportes.tareasMasRealizadasMes.length }}
Sin resultados para los filtros seleccionados en el mes actual.
Mejor mes (ingresadas)
{{ dashboardResumenMensual.mejorMes.periodo }}: {{ dashboardResumenMensual.mejorMes.ordenes_ingresadas }}
Sin datos
Mes más bajo (ingresadas)
{{ dashboardResumenMensual.peorMes.periodo }}: {{ dashboardResumenMensual.peorMes.ordenes_ingresadas }}
Sin datos
Cumplimiento promedio
{{ dashboardResumenMensual.promedioCumplimientoPct.toFixed(2) }}%
Comparativo mensual (ingresadas, completadas, programadas)
Comparativo anual por barras
| Año | Ingresadas | Completadas | Programadas | Var. Ingresadas |
|---|---|---|---|---|
| {{ y.anio }} | {{ y.ordenes_ingresadas }} | {{ y.ordenes_completadas }} | {{ y.servicios_programados }} | {{ formatVariacion(y.variacion_ingresadas_pct) }} |
Distribución de Estados (Mes actual)
Sin datos
Distribución de Estados (Año actual)
Sin datos
Top Técnicos (Año)
Sin registros este año.
#{{ idx + 1 }} {{ t.tecnico_nombre }}
Completadas: {{ t.ordenes_completadas }} | Prom. cierre: {{ t.promedio_dias_cierre || 0 }} d
| Fecha | OT | Acción | Técnico | Usuario | Rol |
|---|---|---|---|---|---|
| {{ formatDateTime(evento.fecha_evento) }} | {{ evento.orden_id }} | {{ evento.accion }} | {{ evento.tecnico_id || 'N/A' }} | {{ evento.username || 'N/A' }} | {{ evento.rol || 'N/A' }} |
No hay eventos para los filtros seleccionados.
Total registros: {{ auditoriaTotal }}
| Username | Rol | Módulos Usuario | Empleado Asociado | Estado | Acciones |
|---|---|---|---|---|---|
| {{ user.username }} | {{ user.role }} | {{ user.modulos.length }} módulos Por rol (sin override) | {{ getEmpleadoNombre(user.empleado_id) }} | {{ user.is_active ? 'Activo' : 'Inactivo' }} |
No se encontraron usuarios con los criterios de búsqueda.
Si no seleccionas módulos, el usuario hereda permisos por su rol.
Define qué módulos puede acceder cada rol. Los cambios aplican a todos los usuarios que usen ese rol sin asignación individual.
El nombre se normalizará a minúsculas sin espacios. Los roles del sistema (admin, tecnico, recepcionista) no pueden duplicarse.
El rol admin siempre tiene acceso total independientemente de esta configuración.
{{ (permisosEditando[roleInfo.name] || []).length }} de {{ permisosData.modulos.length }} módulos activos