Miniproyecto recomendado · Bloque 2
MP-B2-R · Media-alta
Validador de expedientes internos
Construye una API pequeña que admita expedientes sintéticos, los valide y publique una representación segura antes de incorporar persistencia.
Este encargo no publica solución. Trabaja en un workspace temporal, conserva evidencia de cada hito y pide revisión contra los criterios.
Contexto
Un equipo recibe expedientes JSON de varias áreas. Algunos contienen campos ausentes, null explícito, estados desconocidos o periodos imposibles.
Necesita crear, consultar y filtrar expedientes en memoria, con un contrato público estable y errores que permitan corregir cada petición.
Entorno: Python 3.10+, uv, FastAPI y Pydantic 2 en un workspace temporal; colección reiniciable en memoria.
Reinicio: Detener el proceso elimina el estado; para reinicio completo, borrar el workspace y volver a descargar starter y dataset.
Paquete de trabajo
- Starter del miniproyectoEstructura funcional, TODOs, requests y contrato de error sin implementación final.
- Dataset D-EXPEDIENTES16 expedientes sintéticos con casos válidos y anomalías no etiquetadas.
- Brief y rúbricaAlcance, hitos, evidencia y criterios de aceptación.
Requisitos funcionales
- `POST /expedientes` crea un recurso en memoria a partir de JSON.
- `GET /expedientes/{expediente_id}` devuelve su representación pública o un error estable.
- `GET /expedientes` admite filtros opcionales de estado y área, además de límite acotado.
- Los modelos incluyen al menos un enum, un objeto anidado, restricciones de campo y una regla cruzada.
- Create, update opcional y public son contratos separados.
- La creación devuelve `201`, `Location` y el modelo público.
- Conflicto, ausencia y validación tienen formas públicas consistentes.
- OpenAPI describe modelos, operaciones y respuestas relevantes.
Hitos
Hito 1 · Ejecutar y observar
- Arranca el starter, conserva el OpenAPI inicial y verifica `/health`.
- Clasifica cada requisito por fuente HTTP y resultado observable.
Hito 2 · Modelar y validar
- Diseña modelos anidados, enums y reglas sin consultar estado externo.
- Ejecuta el dataset y registra ubicaciones de error.
Hito 3 · Operar en memoria
- Implementa creación, consulta y listado filtrado.
- Separa duplicados y ausencias de los fallos Pydantic.
Hito 4 · Cerrar el contrato
- Aplica modelos públicos, status, Location y manejadores.
- Revisa OpenAPI y ejecuta la matriz completa desde estado limpio.
Entrega y evidencia
- Código ejecutable y `README` de arranque.
- OpenAPI guardado como evidencia.
- Matriz de al menos 10 peticiones: casos felices, límites y errores.
- Nota de diseño con tres decisiones y dos límites reconocidos.
- Repositorio de trabajo temporal con comandos de arranque documentados.
- OpenAPI final y matriz de peticiones válidas e inválidas.
- Informe breve de decisiones sobre fuentes, modelos, estados y errores.
Revisión: con Codex contra esta página; no existe una respuesta oficial oculta.
Criterios de aceptación
- Los 16 documentos pueden clasificarse por resultado sin modificar el dataset.
- Ningún campo interno aparece en las respuestas públicas.
- Ausente y null tienen comportamiento documentado.
- Los errores de validación conservan ubicación y no reflejan datos sensibles.
- Reiniciar el proceso devuelve el sistema a un estado conocido.
- No aparecen base de datos, login, Docker, routers o servicios prematuros.
Pistas graduadas
Pista 1 · Matriz de propiedad
- Marca cada campo como asignado por cliente, servidor o estado interno.
- Deriva create y public de esa matriz, no de un único modelo universal.
Pista 2 · Dataset como evidencia
- No corrijas los JSON anómalos: deben demostrar cómo responde tu frontera.
- Compara la localización del error con el campo que esperabas rechazar.
Extensión opcional
- Solo después de aceptar el núcleo, permite adjuntar un documento mediante multipart.
- Mantén la metadata como una parte de formulario y valídala explícitamente.
Fuera de alcance
- Base de datos, archivos persistentes o migraciones.
- Usuarios, autenticación, autorización o secretos.
- Docker, despliegue, workers o colas.
- APIRouter, capa de servicios o patrón repositorio.
- Pruebas automatizadas exhaustivas; la matriz manual es la evidencia de este bloque.