Saltar al contenido principal

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 caso
  • createdAt — filtro de fecha de creación
  • casoData — filtros sobre campos del formulario
  • pageNumber — default 0
  • pageSize — default 20
  • orderBy — default "createdAt"
  • sortDirection — default SortDirection#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

CampoTipoRestriccionesDescripción
casoIdStringOpcionalUUID del caso
casoTypeIdStringOpcionalUUID del producto
primaryLevelIdStringOpcionalUUID del servicio
secondaryLevelIdStringOpcionalUUID del proceso
workingSubStateIdStringOpcionalUUID del estado
paginationPaginationRequestOpcionalPaginación
createdAtStringOpcionalFecha de creación
casoDataList<SearchCaseDataRequest>OpcionalData 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ón
  • values — 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ón
  • values — 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ón
  • values — 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ón
  • values — 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ón
  • values — 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 formato yyyy-MM-dd
  • endDate — Fecha de fin en formato yyyy-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 formato yyyy-MM-dd
  • timeZone — 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 formato yyyy-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 filtrar
  • operator — Operador de comparación a aplicar
  • values — 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:

  • sortDirectionSortDirection#ASC o SortDirection#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 — si workingSubStateId no 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.