1. Proceso de Serialización de Códigos (desde el Switch)
Ciclo completo: Activación → Lote Inicial → Recepción Stock → Solicitud (sin descuento) → Escaneo Físico y Reversión
flowchart TD
subgraph S1 ["1. Activación de Sucursal"]
A["Administrador ingresa a parametros.php"] --> B["Activa Switch en 'Configuración de Serialización'"]
B --> C["ajax/toggle_serializacion_plaza.php"]
C --> D["plazas.inventario_serializado = 1"]
end
subgraph S2 ["2. Inventario Inicial y Entradas"]
D --> E{"¿Tiene stock físico sin etiquetar?"}
E -- "Sí" --> F["Clic en 'Generar lote inicial' en inventario.php"]
F --> G["Crea registros en inventario_unidades con Lote 0 / 1"]
G --> H["Impresión de Etiquetas Térmicas (51x25mm) y pegado en ataúdes"]
E -- "No / Entradas Futuras" --> I["Registro en nueva_entrada.php"]
I --> J["Genera consecutivos automáticos por Lote en inventario_unidades"]
J --> H
end
subgraph S3 ["3. Solicitud de Servicio Funerario"]
H --> K["Operador registra servicio en nueva_solicitud.php"]
K --> L{"¿Filial Serializada?"}
L -- "Sí (Switch = 1)" --> M["Guarda expediente de Solicitud\nNO descuenta de productos_sucursales"]
L -- "No (Switch = 0)" --> N["Modo Tradicional: Descuenta cant_total - 1 de inmediato"]
end
subgraph S4 ["4. Asignación y Salida Física"]
M --> O["Operador abre asignar_producto.php"]
O --> P["Escanea Código de Barras de la unidad física"]
P --> Q{"Validación de Unidad"}
Q -- "Válida y Disponible" --> R["inventario_unidades: estado = 'ASIGNADO'"]
R --> S["productos_sucursales: cant_total = cant_total - 1"]
R --> T["Inserta en productos_asignados vinculando expediente"]
Q -- "Pertenece a otra sucursal o No disponible" --> U["Alerta de error / Bloqueo"]
end
subgraph S5 ["5. Reversión / Cambio de Ataúd (Opcional)"]
T --> V["Si se desasigna en desasignar_producto.php"]
V --> W["inventario_unidades: estado = 'DISPONIBLE'"]
W --> X["productos_sucursales: cant_total = cant_total + 1"]
W --> Y["productos_asignados: estatus = 0"]
end
style S1 fill:#f8fafc,stroke:#2563eb,stroke-width:2px
style S2 fill:#f0fdf4,stroke:#16a34a,stroke-width:2px
style S3 fill:#fffbeb,stroke:#d97706,stroke-width:2px
style S4 fill:#faf5ff,stroke:#9333ea,stroke-width:2px
style S5 fill:#fef2f2,stroke:#dc2626,stroke-width:2px
2. Proceso de Traslado de Inventario entre Filiales
Módulo traslado_inventario.php — Descuento en Origen, Suma en Destino y Trazabilidad Multi-Sucursal
flowchart TD
Start["Inicio: Clic en 'Nuevo Traslado' en traslado_inventario.php"] --> Select["Seleccionar Filial Origen y Filial Destino"]
Select --> CheckOrig{"¿Filial Origen es Serializada? (Switch = 1)"}
subgraph CasoSerializado ["Caso A: Origen Serializado (Tiene Códigos Físicos)"]
CheckOrig -- "Sí" --> ProdSer["Seleccionar Producto en Origen"]
ProdSer --> UnitsList["El sistema muestra las Unidades / Códigos DISPONIBLES"]
UnitsList --> ScanPick["Escaneo o selección de Códigos de Barras específicos (ej. 9-1A01-01)"]
ScanPick --> SaveSer["Clic en 'Guardar Traslado'"]
SaveSer --> TransSer["Transacción Atómica en Base de Datos:"]
TransSer --> StepA1["1. Inserta en traslados_inventario guardando codigos_unidades"]
TransSer --> StepA2["2. Origen: productos_sucursales.cant_total = cant_total - N"]
TransSer --> StepA3["3. Destino: productos_sucursales.cant_total = cant_total + N"]
TransSer --> StepA4["4. inventario_unidades: id_plaza_actual = Filial Destino"]
StepA4 --> FinishSer["Resultado: La etiqueta física pegada al ataúd ahora pertenece a la nueva filial y está lista para ser escaneada allá."]
end
subgraph CasoTradicional ["Caso B: Origen Tradicional (Sin Códigos)"]
CheckOrig -- "No" --> ProdTrad["Seleccionar Producto e ingresar Cantidad Numérica"]
ProdTrad --> SaveTrad["Clic en 'Guardar Traslado'"]
SaveTrad --> CheckDest{"¿Filial Destino es Serializada?"}
CheckDest -- "No (Tradicional a Tradicional)" --> TransTrad["1. Inserta en traslados_inventario\n2. Resta en Origen (cant_total - N)\n3. Suma en Destino (cant_total + N)\n(Flujo estándar sin códigos)"]
CheckDest -- "Sí (Tradicional a Serializado)" --> TransGen["1. Inserta en traslados_inventario\n2. Resta en Origen (cant_total - N)\n3. Suma en Destino (cant_total + N)\n4. Genera N registros en inventario_unidades para la filial destino (origen = 'TRASLADO')"]
TransGen --> PrintPrompt["Aviso al usuario: '🏷️ Imprimir Etiquetas Térmicas para las unidades recibidas'"]
end
style CasoSerializado fill:#eff6ff,stroke:#2563eb,stroke-width:2px
style CasoTradicional fill:#fffbeb,stroke:#d97706,stroke-width:2px