CaseFilter
Builder fluido y objeto de búsqueda de casos en Shori.
Actúa como builder fluido y como el objeto que se serializa
directamente al API de Shori. No necesitas llamar .build() para usarlo.
Campos requeridos
workingSubStateId — UUID(s) del sub-estado de trabajo.
Obligatorio: #build() lanza ValidationException si no se especifica.
Obtén los IDs de estados abiertos con ShoriUtils.openStatesIds(producto).
Campos opcionales
casoTypeId— UUID del tipo de caso (producto)primaryLevelId— UUID del servicio (nivel primario)secondaryLevelId— UUID del proceso (nivel secundario)casoId/casoNumber— UUID o número de casocreatedAt— filtro de fecha de creacióncasoData— filtros sobre campos del formulariopageNumber— default0pageSize— default20orderBy— default"createdAt"sortDirection— defaultSortDirection#DESC
Uso directo (recomendado)
List casos = client.caso().search(
CaseFilter.builder()
.casoTypeId(FilterOperator.EQ, "tipo-documentId")
.workingSubStateId(FilterOperator.IN, "estado-abierto-1", "estado-abierto-2")
.dataField("nombreCliente", FilterOperator.LIKE, "García")
.pageSize(20)
.build()
);
Uso con .build() (equivalente, más explícito)
CaseFilter filter = CaseFilter.builder()
.casoTypeId(FilterOperator.EQ, "tipo-documentId")
.pageSize(20)
.build(); // build() retorna 'this', no crea otro objeto
client.caso().search(filter);
client.caso().searchAll(filter);
Operadores disponibles
FilterOperator.EQ → "campo igual a valor"
FilterOperator.NE → "campo distinto de valor"
FilterOperator.GT / GE → "campo mayor / mayor o igual"
FilterOperator.LT / LE → "campo menor / menor o igual"
FilterOperator.IN → "campo en lista de valores"
FilterOperator.NOT_IN → "campo no en lista"
FilterOperator.BETWEEN → "campo entre dos valores"
FilterOperator.LIKE → "campo contiene texto"
FilterOperator.LIKE_AFTER → "campo empieza con texto"
FilterOperator.LIKE_BEFORE → "campo termina con texto"
FilterOperator.IS_NULL → "campo es nulo"
FilterOperator.IS_NOT_NULL → "campo no es nulo"
Campos
| Campo | Tipo | Restricciones | Descripción |
|---|---|---|---|
casoId | String | Opcional | UUID del caso |
casoTypeId | String | Opcional | UUID del producto |
primaryLevelId | String | Opcional | UUID del servicio |
secondaryLevelId | String | Opcional | UUID del proceso |
workingSubStateId | String | Opcional | UUID del estado |
pagination | PaginationRequest | Opcional | Paginación |
createdAt | String | Opcional | Fecha de creación |
casoData | List<SearchCaseDataRequest> | Opcional | Data del caso |
Metodos
builder()
Crea un nuevo builder de filtros.
Retorna: Nueva instancia de CaseFilter lista para configurar
casoNumber(FilterOperator operator, String... values)
Filtra por número de caso con el operador especificado.
Parametros:
operator— Operador de comparaciónvalues— Valores a comparar
casoNumber(String... values)
Filtra por número de caso usando el operador IN por defecto.
Parametros:
values— Uno o más IDs de caso
casoTypeId(FilterOperator operator, String... values)
Filtra por tipo de caso con el operador especificado.
Parametros:
operator— Operador de comparaciónvalues— UUID(s) del tipo de caso
casoTypeId(String... values)
Filtra por tipo de caso usando el operador IN por defecto.
Parametros:
values— Uno o más UUIDs de tipo de caso
primaryLevelId(FilterOperator operator, String... values)
Filtra por nivel primario con el operador especificado.
Parametros:
operator— Operador de comparaciónvalues— UUID(s) del nivel primario
primaryLevelId(String... values)
Filtra por nivel primario usando el operador IN por defecto.
Parametros:
values— Uno o más UUIDs de nivel primario
secondaryLevelId(FilterOperator operator, String... values)
Filtra por nivel secundario con el operador especificado.
Parametros:
operator— Operador de comparaciónvalues— UUID(s) del nivel secundario
secondaryLevelId(String... values)
Filtra por nivel secundario usando el operador IN por defecto.
Parametros:
values— Uno o más UUIDs de nivel secundario
workingSubStateId(FilterOperator operator, String... values)
Filtra por sub-estado de trabajo con el operador especificado. Útil para buscar casos en estados específicos del flujo.
// Casos en estados abiertos
.workingSubStateId(FilterOperator.IN, "estado-1-documentId", "estado-2-documentId")
// Un estado exacto
.workingSubStateId(FilterOperator.EQ, "estado-cerrado-documentId")
Parametros:
operator— Operador de comparaciónvalues— UUID(s) del sub-estado
workingSubStateId(String... values)
Filtra por sub-estado de trabajo usando el operador IN por defecto.
Parametros:
values— Uno o más UUIDs de sub-estado
createdAt(String startDate, String endDate, String timeZone)
Filtra casos por rango de fecha de creación, convirtiendo las fechas locales a UTC.
Internamente aplica el operador BETWEEN con el inicio del día en la
zona horaria indicada y el fin del último milisegundo del día de fin.
// Casos creados en enero 2024 (en zona Lima)
CaseFilter.builder()
.createdAt("2024-01-01", "2024-01-31", "America/Lima")
.casoTypeId(FilterOperator.EQ, "tipo-documentId")
.build();
Parametros:
startDate— Fecha de inicio en formatoyyyy-MM-ddendDate— Fecha de fin en formatoyyyy-MM-dd(inclusive)timeZone— Zona horaria local del usuario (ej:"America/Lima","America/Bogota","Europe/Madrid")
Retorna: Este builder para encadenamiento
createdAtFrom(String startDate, String timeZone)
Filtra casos creados desde la fecha indicada en adelante (GE).
// Casos creados desde el 1 de enero 2024
.createdAtFrom("2024-01-01", "America/Lima")
Parametros:
startDate— Fecha de inicio en formatoyyyy-MM-ddtimeZone— Zona horaria local
Retorna: Este builder para encadenamiento
createdAtTo(String endDate, String timeZone)
Filtra casos creados hasta la fecha indicada (LE).
// Casos creados hasta el 31 de diciembre 2024
.createdAtTo("2024-12-31", "America/Lima")
Parametros:
endDate— Fecha de fin en formatoyyyy-MM-dd(inclusive)timeZone— Zona horaria local
Retorna: Este builder para encadenamiento
dataField(String fieldId, FilterOperator operator, String... values)
Agrega un filtro sobre un campo dinámico del formulario del caso (casoData).
Permite filtrar por cualquier campo del formulario definido en el tipo de caso.
CaseFilter.builder()
.dataField("nombreCliente", FilterOperator.LIKE, "García")
.dataField("fechaCreacion", FilterOperator.BETWEEN, "2024-01-01", "2024-12-31")
.dataField("monto", FilterOperator.GT, "1000")
.dataField("estado", FilterOperator.IN, "PENDIENTE", "EN_PROCESO")
.dataField("campoOpcional", FilterOperator.IS_NULL)
Parametros:
fieldId— ID del campo del formulario a filtraroperator— Operador de comparación a aplicarvalues— Valores del filtro (vacío para IS_NULL/IS_NOT_NULL)
Retorna: Este builder para encadenamiento
dataEquals(String fieldId, String value)
Filtro exacto (EQ) sobre un campo de datos.
dataLike(String fieldId, String value)
Filtro LIKE sobre un campo de datos.
dataStartsWith(String fieldId, String value)
Filtro "empieza con" (LIKE_AFTER) sobre un campo de datos.
dataBetween(String fieldId, String from, String to)
Filtro BETWEEN sobre un campo de datos.
dataIn(String fieldId, String... values)
Filtro IN sobre un campo de datos.
dataIsNull(String fieldId)
Filtro IS_NULL sobre un campo de dato.
dataIsNotNull(String fieldId)
Filtro IS_NOT_NULL sobre un campo de dato.
pageNumber(int pageNumber)
Configura el número de página.
Por defecto: 0.
filter.pageNumber(0);
Parametros:
pageNumber— número de página basado en cero.
Retorna: la misma instancia del filtro.
pageSize(int pageSize)
Establece el tamaño de página.
Por defecto: 20.
filter.pageSize(50);
Parametros:
pageSize— cantidad de registros por página
Retorna: la misma instancia del filtro.
orderBy(String orderBy)
Establece el campo por el que se ordenan los resultados.
Por defecto: "createdAt".
Parametros:
orderBy— nombre del campo de ordenamiento
Retorna: Este builder para encadenamiento
sortDirection(SortDirection sortDirection)
Establece la dirección del ordenamiento.
Por defecto: SortDirection#DESC.
CaseFilter.builder()
.casoTypeId(FilterOperator.EQ, "tipo-documentId")
.orderBy("createdAt")
.sortDirection(SortDirection.ASC)
.build();
Parametros:
sortDirection—SortDirection#ASCoSortDirection#DESC
Retorna: Este builder para encadenamiento
build()
Valida y retorna este mismo objeto (el builder ES el filtro).
Si se llama sin .build(), el filtro también es válido como argumento
directo en search() y searchAll(). En ese caso la validación
ocurre en CaseModule al llamar applyDefaultInOperators().
Retorna: this
Lanza:
ValidationException— siworkingSubStateIdno fue especificado
applyDefaultInOperators()
Aplica el operador "in:" a los campos que NO tienen ya un operador aplicado. Llamado internamente por CaseModule antes de enviar al API.
nextPage()
Avanza a la siguiente página (usado en paginación recursiva).
copyForNextPage()
Retorna una copia de este filtro para paginación.