Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
planilla-so-be
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Mauro Paolo Josue Zuñiga Mallqui
planilla-so-be
Commits
1f90f370
Commit
1f90f370
authored
Sep 08, 2026
by
Vanesa Puma Yamo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
se agrega modificaciones en retenciones efectuadas
parent
ca8f256f
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
109 additions
and
0 deletions
+109
-0
endpoint-filtros.md
docs/endpoint-filtros.md
+109
-0
No files found.
docs/endpoint-filtros.md
0 → 100644
View file @
1f90f370
# Endpoint `/api/v1/filtros`
Devuelve catálogos (área, subárea, cargo, local) para poblar los dropdowns de la grilla de
renta de quinta. Es un único endpoint parametrizado por tipo, no cuatro endpoints separados.
## Contrato
```
GET /api/v1/filtros?tipo={TIPO}
```
### Parámetro
| Nombre | Tipo | Obligatorio | Valores válidos |
|---|---|---|---|
|
`tipo`
| string (enum) | Sí |
`AREA`
,
`SUBAREA`
,
`CARGO`
,
`LOCAL`
|
### Respuesta `200 OK`
Array de objetos
`{ id, text }`
:
```
json
[
{
"id"
:
1
,
"text"
:
"ADMINISTRACION"
},
{
"id"
:
2
,
"text"
:
"ACADEMICO"
}
]
```
-
`id`
:
`Integer`
— el código/id real de la tabla origen (p. ej.
`codarea`
,
`id_subarea`
,
`codcargo`
,
`id_local`
).
-
`text`
:
`String`
— la descripción a mostrar en el dropdown.
Orden: alfabético por
`text`
.
### Errores
Si
`tipo`
viene vacío/ausente →
`400`
con el shape estándar de error del proyecto:
```
json
{
"timestamp"
:
"2026-09-04T12:00:00Z"
,
"status"
:
400
,
"message"
:
"Falta el parámetro obligatorio 'tipo'"
}
```
Si
`tipo`
viene con un valor que no es del enum (p. ej.
`?tipo=FOO`
) →
`400`
:
```
json
{
"timestamp"
:
"2026-09-04T12:00:00Z"
,
"status"
:
400
,
"message"
:
"El parámetro 'tipo' debe ser numérico"
}
```
> Nota: ese mensaje está pensado originalmente para parámetros numéricos; para un enum
> inválido el mensaje puede no ser 100% preciso, pero el status 400 y el shape sí aplican.
## Ejemplos de uso
```
bash
curl
"http://localhost:8080/api/v1/filtros?tipo=AREA"
curl
"http://localhost:8080/api/v1/filtros?tipo=SUBAREA"
curl
"http://localhost:8080/api/v1/filtros?tipo=CARGO"
curl
"http://localhost:8080/api/v1/filtros?tipo=LOCAL"
```
Ejemplo con
`fetch`
en frontend:
```
ts
async
function
cargarCatalogo
(
tipo
:
"AREA"
|
"SUBAREA"
|
"CARGO"
|
"LOCAL"
)
{
const
res
=
await
fetch
(
`/api/v1/filtros?tipo=
${
tipo
}
`
);
if
(
!
res
.
ok
)
throw
new
Error
(
"Error cargando catálogo"
);
return
res
.
json
()
as
Promise
<
{
id
:
number
;
text
:
string
}[]
>
;
}
```
## Relación con la grilla de renta de quinta
Los
`id`
devueltos por este endpoint son los mismos valores que se envían como filtros
numéricos a
`GET /api/v1/renta-quinta`
(
`areaGeneral`
,
`subArea`
,
`cargo`
,
`sede`
/local, etc.).
El flujo típico es: poblar el dropdown con
`/api/v1/filtros?tipo=AREA`
, y al elegir una opción
mandar su
`id`
como filtro a la grilla.
> Importante (contexto de este proyecto): actualmente las columnas de filtro en
> `planilla.renta_quinta` guardan **texto** (`sede='BARRANCO'`), no el id numérico del
> catálogo, así que el filtro numérico no siempre matchea. Si replicás este patrón en otro
> proyecto, verificá si tu tabla de hechos filtra por id o por texto antes de copiar ese
> comportamiento.
## Cómo replicarlo en otro proyecto
Piezas mínimas:
1.
**Enum de tipos**
(
`TipoFiltro`
): uno por catálogo que quieras exponer.
2.
**DTO de salida**
(
`FiltroItemDTO`
): record simple
`{ id, text }`
— genérico, sirve para
cualquier catálogo tipo lookup.
3.
**Service**
con un
`switch`
que arma el SQL/query según el tipo y devuelve
`List<FiltroItemDTO>`
.
-
En este proyecto se usa
`JdbcTemplate`
con SQL nativo porque las tablas origen son
*foreign tables*
(FDW) que Hibernate no valida como
`@Entity`
. Si tus catálogos son
tablas normales, podés mapearlos como entities/repositories JPA en vez de SQL nativo.
4.
**Controller**
con un único
`GET`
que recibe
`tipo`
como
`@RequestParam`
(enum) y delega al
service.
5.
**Manejo de errores**
: parámetro ausente → 400 con mensaje claro; valor de enum inválido →
400 (Spring lo resuelve solo al bindear el
`@RequestParam`
a un enum).
Ventaja de este diseño: agregar un catálogo nuevo es solo un
`case`
más en el
`switch`
del
service y un valor más en el enum — no un controller/endpoint nuevo por catálogo.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment