Skip to main content
Technician movements record the daily flow of spare parts to and from field technicians, providing visibility into what parts each technician has and linking them to specific work orders.

Overview

Every time a technician takes parts for a repair or returns unused parts, a movement is recorded. This ensures the inventory system stays accurate and parts can be tracked through the repair lifecycle.

Load Parts

Record parts given to technicians

Unload Returns

Track parts returned after jobs

Order Tracking

Link movements to work orders

Movement Structure

interface MovimientoTecnico {
  // Movement identifiers
  id_movimientos_tecnicos: string;
  id_localizacion: string;
  id_repuesto: string;
  id_usuario_responsable: string;   // Who recorded it
  id_tecnico_asignado: string;      // Technician receiving/returning
  
  // Movement details
  concepto: ConceptoMovimiento;
  tipo: TipoMovimiento;
  cantidad: number;
  fecha: string;
  numero_orden: number;
  descargada: boolean;              // Inventory already updated?
  
  // Related data (from joins)
  referencia: string;
  nombre_repuesto: string;
  url_imagen: string;
  nombre_localizacion: string;
  nombre_responsable: string;
  nombre_tecnico: string;
}

Movement Types

Load Movement (Salida)

When a technician takes parts:
type TipoMovimiento = 'salida';
type ConceptoMovimiento = 
  | 'salida'        // General checkout
  | 'garantia'      // Warranty replacement
  | 'prestamo'      // Loan to technician
  | 'cotizacion';   // For customer quote
1

Select Technician

Choose the technician who will receive the parts
2

Select Spare Part

Choose the part from inventory
3

Enter Quantity

Specify how many units
4

Link Work Order

Enter the order number this is for
5

Set Concept

Specify the reason (repair, warranty, etc.)
6

Save Movement

System records but doesn’t update inventory yet
Load movements are initially saved with descargada = false. This means the parts are “allocated” to the technician but haven’t been deducted from inventory yet. This gives flexibility to cancel if the technician doesn’t actually take the parts.

Discharge/Unload

To actually deduct from inventory:
1

Find Load Movement

Locate the movement to discharge
2

Confirm Quantity

Verify the technician actually took those parts
3

Set Discharged

Mark descargada = true
4

Update Inventory

System automatically deducts quantity from location stock
5

Log Audit Trail

Movement appears in inventory history

Return Movement (Ingreso)

When a technician returns unused parts:
type TipoMovimiento = 'ingreso';
type ConceptoMovimiento = 'devolucion';
1

Select Technician

Choose who is returning parts
2

Select Spare Part

Identify what’s being returned
3

Enter Quantity

Specify return quantity
4

Reference Original Order

Link to the work order
5

Save Return

System automatically adds quantity back to inventory
Returns should match previous load movements. Verify the technician actually had these parts before accepting returns to prevent inventory inflation.

Sale Movement (Venta)

When parts are sold directly:
type TipoMovimiento = 'venta';
type ConceptoMovimiento = 'venta';
Sales immediately deduct from inventory and don’t require a discharge step.

Movement Concepts

The concepto field provides detailed context:
ConceptDescriptionTypical Type
salidaGeneral technician checkoutsalida
ingresoParts arrival from supplieringreso
ventaDirect sale to customerventa
garantiaWarranty replacement partsalida
prestamoLoan between technicianssalida
cotizacionParts for customer estimatesalida
devolucionReturn of unused partsingreso

Tracking Technician Inventory

You can view what parts each technician currently has:
  1. Active Loads: Movements with descargada = true and type salida
  2. Subtract Returns: Movements with type ingreso (returns)
  3. Net Quantity: Total parts currently with technician
Technician: Juan PérezLoads (Salidas descargadas):
  • 2023-03-01: +5 brake pads (Order #1234)
  • 2023-03-02: +3 cables (Order #1240)
Returns (Ingresos):
  • 2023-03-01: -2 brake pads (Order #1234 - unused)
Current inventory:
  • Brake pads: 3
  • Cables: 3

Work Order Association

Every movement links to a work order via numero_orden. This enables:
  • Cost Tracking: See all parts used on a specific job
  • Part History: Track which technician used which parts
  • Billing: Generate accurate invoices including parts
  • Warranty Claims: Identify parts used if a repair fails
1

View Order Details

Look up order by number
2

See Part Usage

View all movements linked to that order
3

Calculate Costs

Sum quantities and part costs
4

Verify Work

Confirm appropriate parts were used
Find movements with multiple filters:
interface MovementFilters {
  page: number;
  pageSize: number;
  technicianId?: string;     // Specific technician
  startDate?: string;        // Date range start
  endDate?: string;          // Date range end
  orderNumber?: string;      // Specific order
  concept?: string;          // Movement concept
  downloaded?: string;       // 'true', 'false', or 'all'
}

Common Queries

Technician's Open Loads

Filter by technician + descargada = false

Order Parts List

Filter by order number

Pending Discharges

Filter all movements with descargada = false

Today's Activity

Filter by today’s date

Movement Details Modal

View complete information about any movement:
interface MovementDetailsModalProps {
  movement: MovimientoTecnico | null;
  open: boolean;
  onOpenChange: (open: boolean) => void;
}
Displays:
  • Full part details with image
  • Technician and responsible user
  • Order number and date
  • Concept and type
  • Discharge status
  • Location information
  • Timestamps

Editing Movements

Correct mistakes before discharge:
interface MovimientoEdicion {
  id_movimientos_tecnicos: string;
  id_repuesto: string;
  repuesto_referencia: string;
  repuesto_nombre: string;
  id_tecnico_asignado: string;
  tipo: TipoMovimiento;
  concepto: ConceptoMovimiento;
  cantidad: number;
  numero_orden: number;
}
Only undischarged movements (descargada = false) can be edited. Once a movement has updated inventory, it cannot be modified - create a correcting movement instead.

Inventory Impact

Load/Salida (Discharge)

Inventory -= cantidad

Return/Ingreso

Inventory += cantidad

Sale/Venta

Inventory -= cantidad
All changes are logged in logs_inventario with:
  • Movement ID as reference
  • Technician name
  • Order number
  • Full traceability

Permissions

ActionRequired Permission
Create movementcreate_movement
Edit movementedit_movement
Discharge movementdischarge_movement
Delete movementdelete_movement
View movementsview_movements
View all techniciansview_all_technicians

Best Practices

1

Load Before the Job

Create load movements before technician leaves, but discharge only when they actually take the parts
2

Accurate Order Numbers

Always enter the correct work order number for traceability
3

Process Returns Promptly

Record returns the same day to keep inventory accurate
4

Discharge Regularly

Don’t let undischarged loads accumulate - process them daily
5

Verify Quantities

Double-check quantities before discharging to prevent inventory errors

Common Workflows

Morning routine:
  1. Supervisor reviews the day’s work orders
  2. Creates load movements for needed parts
  3. Technicians pick up parts from warehouse
  4. Supervisor verifies and discharges movements
  5. Inventory is updated, technicians leave for jobs
Evening routine:
  1. Technicians return to shop
  2. Supervisor collects unused parts
  3. Creates return movements for each technician
  4. Inventory automatically updated
  5. Parts available for next day
When a part fails:
  1. Create load movement with concepto = 'garantia'
  2. Link to warranty claim ID in notes
  3. Technician installs replacement
  4. Discharge the movement
  5. Failed part returned separately via warranty flow

Reporting

Generate insights from movement data:
  • Technician Usage: Who uses which parts most frequently
  • Part Velocity: How quickly parts move through technicians
  • Order Costs: Total part costs per work order
  • Return Rates: Which parts get returned most often
  • Pending Discharges: Outstanding movements needing action

Build docs developers (and LLMs) love