Diagramas de Flujo del Sistema

Sistema Recinto Funeral v3 · Módulos de Serialización y Traslado de Inventario

📊 Descargar PowerPoint (.pptx)

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