Saltar al contenido principal

🔎 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

CampoOperadoresDescripción
Número de CasoEQ / IN / NOT INUUID del caso
Tipo de CasoEQ / IN / NOT INUUID del tipo de caso
SubEstadoEQ / IN / NOT INUUID del subestado
Nivel PrimarioEQ / IN / NOT INUUID del nivel primario (servicio)
Nivel SecundarioEQ / IN / NOT INUUID del nivel secundario (proceso)

Para múltiples valores usa comas: uuid1,uuid2,uuid3

Filtros de Fecha

CampoTipoDescripción
DesdeYYYY-MM-DDFecha inicio de creación
HastaYYYY-MM-DDFecha fin de creación
Zona HorariastringEj: 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

CampoDefaultDescripción
Ordenar porcreatedAtCampo de ordenamiento
DirecciónDESCASC o DESC
Tamaño página20Resultados por página (máx 200)
Nº página0Página (0-indexado)
Traer todosfalsePagina 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ódigoNombreDescripciónEjemplo
eqEQIgual a{ op: "eq", value: "uuid" }
neNEDistinto de{ op: "ne", value: "uuid" }
gtGTMayor que{ op: "gt", value: "100" }
geGEMayor o igual{ op: "ge", value: "100" }
ltLTMenor que{ op: "lt", value: "100" }
leLEMenor o igual{ op: "le", value: "100" }
inINEn la lista{ op: "in", value: "a,b,c" }
notinNOT INNo en la lista{ op: "notin", value: "a,b" }
btBETWEENEntre dos valores{ op: "bt", value: "10,50" }
lkLIKEContiene{ op: "lk", value: "García" }
lkbLIKE_BEFORETermina en{ op: "lkb", value: "García" }
lkaLIKE_AFTEREmpieza en{ op: "lka", value: "García" }
nullIS NULLCampo nulo{ op: "null" }
notnullIS NOT NULLCampo 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

SalidaCampoDescripció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()
);