🔎 shori-search-cases
Busca casos en Shori con filtros avanzados y completamente configurables. Soporta filtros de ID con operadores, fechas, campos dinámicos del formulario (dataField), ordenamiento y paginación. Todos los campos son opcionales.
Diagrama del nodo
Campos del formulario
Filtros de ID — con operador configurable
| Campo | Operadores | Descripción |
|---|---|---|
| Número de Caso | EQ / IN / NOT IN | UUID del caso |
| Tipo de Caso | EQ / IN / NOT IN | UUID del tipo de caso |
| SubEstado | EQ / IN / NOT IN | UUID del subestado |
| Nivel Primario | EQ / IN / NOT IN | UUID del nivel primario (servicio) |
| Nivel Secundario | EQ / IN / NOT IN | UUID del nivel secundario (proceso) |
Para múltiples valores usa comas: uuid1,uuid2,uuid3
Filtros de Fecha
| Campo | Tipo | Descripción |
|---|---|---|
| Desde | YYYY-MM-DD | Fecha inicio de creación |
| Hasta | YYYY-MM-DD | Fecha fin de creación |
| Zona Horaria | string | Ej: America/Lima. Requerido si usas fechas |
Filtros de datos del formulario (dataField)
Sección dinámica — agrega tantas filas como necesites. Cada fila tiene:
- fieldId — nombre del campo en el formulario del caso
- Operador — ver tabla de operadores completa abajo
- Valor — valor del filtro
Paginación y ordenamiento
| Campo | Default | Descripción |
|---|---|---|
| Ordenar por | createdAt | Campo de ordenamiento |
| Dirección | DESC | ASC o DESC |
| Tamaño página | 20 | Resultados por página (máx 200) |
| Nº página | 0 | Página (0-indexado) |
| Traer todos | false | Pagina automáticamente y retorna todo |
Uso desde nodo function
Todos los campos se pueden pasar dinámicamente desde msg.payload. El formulario tiene prioridad — si un campo está vacío en el formulario, se lee de msg.payload automáticamente.
// Nodo function antes del shori-search-cases:
msg.payload = {
// Campos ID — string directo o { op, value }
casoTypeId: { op: "eq", value: "uuid-tipo" },
workingSubStateId: { op: "in", value: "uuid1,uuid2,uuid3" },
primaryLevelId: { op: "notin", value: "uuid-excluido" },
casoNumber: { op: "eq", value: "uuid-caso" },
// Fechas (timeZone requerido si usas fechas)
createdAtFrom: "2025-01-01",
createdAtTo: "2025-01-31",
timeZone: "America/Lima",
// dataField — filtros de campos del formulario del caso
dataField: [
{ fieldId: "nombreCliente", op: "lk", value: "García" },
{ fieldId: "estado", op: "eq", value: "ACTIVO" },
{ fieldId: "monto", op: "bt", value: "1000,5000" },
{ fieldId: "tipoDoc", op: "in", value: "DNI,RUC" },
{ fieldId: "deletedAt", op: "null" }
],
// Paginación
pageSize: 20,
pageNumber: 0,
orderBy: "createdAt",
sortDirection: "DESC",
fetchAll: false
};
return msg;
Operadores disponibles
| Código | Nombre | Descripción | Ejemplo |
|---|---|---|---|
eq | EQ | Igual a | { op: "eq", value: "uuid" } |
ne | NE | Distinto de | { op: "ne", value: "uuid" } |
gt | GT | Mayor que | { op: "gt", value: "100" } |
ge | GE | Mayor o igual | { op: "ge", value: "100" } |
lt | LT | Menor que | { op: "lt", value: "100" } |
le | LE | Menor o igual | { op: "le", value: "100" } |
in | IN | En la lista | { op: "in", value: "a,b,c" } |
notin | NOT IN | No en la lista | { op: "notin", value: "a,b" } |
bt | BETWEEN | Entre dos valores | { op: "bt", value: "10,50" } |
lk | LIKE | Contiene | { op: "lk", value: "García" } |
lkb | LIKE_BEFORE | Termina en | { op: "lkb", value: "García" } |
lka | LIKE_AFTER | Empieza en | { op: "lka", value: "García" } |
null | IS NULL | Campo nulo | { op: "null" } |
notnull | IS NOT NULL | Campo no nulo | { op: "notnull" } |
Operadores para campos ID (formulario)
Los campos de ID (casoTypeId, workingSubStateId, etc.) solo soportan EQ, IN y NOT IN desde el formulario. Para dataField puedes usar todos los operadores de la tabla.
Salidas
| Salida | Campo | Descripción |
|---|---|---|
| 1 (éxito) | msg.payload | { casoResponse: CasoSearchResponse[], count: number } o array si fetchAll=true |
| 2 (error) | msg.error | { message, name, stack } |
Ejemplos
Ejemplo 1 — Búsqueda básica con valores en el formulario
Ejemplo 2 — Búsqueda dinámica desde nodo function con dataField
Ejemplo 3 — Traer todos los casos con paginación automática
Equivalente en código
import { CaseFilter, FilterOperator } from "shori-sdk-ts";
const result = await client.caso().search(
CaseFilter.builder()
.casoTypeId(FilterOperator.EQ, "uuid-tipo")
.workingSubStateId(FilterOperator.IN, "uuid1", "uuid2")
.dataField("nombreCliente", FilterOperator.LIKE, "García")
.createdAt("2025-01-01", "2025-01-31", "America/Lima")
.pageSize(20)
.build()
);