Sistema de Movimientos - Modulo Expedientes
Tipos de Movimiento
-- Enum para tipos de movimiento
CREATE TYPE movement_type AS ENUM (
'creation', -- Creacion inicial del expediente
'transfer', -- Transferencia a otro sector administrador
'assignment', -- Asignacion de permisos a sector
'assignment_close', -- Cierre de asignacion
'status_change', -- Cambio de estado del expediente
'document_link', -- Vinculacion de documento oficial al expediente
'subsanacion', -- Subsanacion de documento erroneo
'document_proposal', -- Propuesta de documento borrador
'document_proposal_reject' -- Rechazo de propuesta de documento
);
Estructura de Movimientos
CREATE TABLE case_movements (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
case_id UUID NOT NULL REFERENCES cases(id),
type movement_type NOT NULL,
user_id UUID REFERENCES users(id),
creator_sector_id UUID NOT NULL REFERENCES sectors(id),
admin_sector_id UUID NOT NULL REFERENCES sectors(id),
assigned_sector_id UUID REFERENCES sectors(id),
assigned_user_id UUID REFERENCES users(id),
reason VARCHAR(200) NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT true,
closed_at TIMESTAMPTZ,
closing_reason VARCHAR(200),
closed_by UUID REFERENCES users(id),
supporting_document_id UUID REFERENCES official_documents(id),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
| Columna |
Tipo de Dato |
Descripcion |
id |
uuid |
PK - Identificador unico del movimiento. |
case_id |
uuid |
FK - Expediente al que pertenece (cases). |
type |
movement_type |
Tipo de movimiento realizado. |
user_id |
uuid |
FK - Usuario que realizo el movimiento (users). |
creator_sector_id |
uuid |
FK - Sector que inicio el movimiento (sectors). |
admin_sector_id |
uuid |
FK - Sector administrador actual del expediente (sectors). |
assigned_sector_id |
uuid |
FK - Sector al que se asigna (si aplica). |
assigned_user_id |
uuid |
FK - Usuario al que se asigna (si aplica). |
reason |
varchar(200) |
Motivo del movimiento. |
is_active |
boolean |
true si el movimiento esta activo. |
closed_at |
timestamptz |
Fecha de cierre del movimiento. |
closing_reason |
varchar(200) |
Razon del cierre. |
closed_by |
uuid |
Usuario que cerro el movimiento. |
supporting_document_id |
uuid |
FK - Documento oficial de respaldo (ej. Caratula, Pase de Vista). |
created_at |
timestamptz |
Fecha de creacion del movimiento. |
Indices de Rendimiento
CREATE INDEX idx_case_movements_case ON case_movements(case_id);
CREATE INDEX idx_case_movements_assigned ON case_movements(assigned_sector_id);
CREATE INDEX idx_case_movements_case_at ON case_movements(case_id, created_at DESC);
Ejemplos de Movimientos
1. Creacion de Expediente
{
"case_id": "550e8400-...",
"type": "creation",
"user_id": "123e4567-...",
"creator_sector_id": "f47ac10b-...",
"admin_sector_id": "f47ac10b-...",
"reason": "Cargar documentacion",
"is_active": false,
"closed_at": "2025-08-26T09:15:01Z",
"closing_reason": "Creacion completada automaticamente",
"supporting_document_id": "550e8400-..."
}
2. Transferencia de Expediente
{
"case_id": "550e8400-...",
"type": "transfer",
"user_id": "123e4567-...",
"creator_sector_id": "f47ac10b-...",
"admin_sector_id": "b2c3d4e5-...",
"reason": "Transferencia para dictamen legal",
"is_active": false,
"closed_at": "2025-08-26T14:30:01Z",
"closing_reason": "Transferencia completada automaticamente",
"supporting_document_id": "550e8400-..."
}
3. Asignacion de Sector
{
"case_id": "550e8400-...",
"type": "assignment",
"user_id": "123e4567-...",
"creator_sector_id": "f47ac10b-...",
"admin_sector_id": "f47ac10b-...",
"assigned_sector_id": "c3d4e5f6-...",
"assigned_user_id": "d4e5f6g7-...",
"reason": "Asignacion para informe tecnico",
"is_active": true
}
4. Vinculacion de Documento
{
"case_id": "550e8400-...",
"type": "document_link",
"user_id": "123e4567-...",
"creator_sector_id": "f47ac10b-...",
"admin_sector_id": "f47ac10b-...",
"reason": "Vinculacion de informe tecnico IF-2025-000042",
"supporting_document_id": "770e8400-...",
"is_active": false,
"closed_at": "2025-08-26T16:00:01Z"
}