5. Proponer solución¶
6. ¿De qué va este tema?¶
La idea sería obtener, al final de este tema (y del módulo), un prototipo real que pueda simular la idea de solución que propones (para tu idea original, o uno de los tres ejemplos que propongo).
Usaremos OpenCode y un TUI (texto) con Python para desarrollar el prototipo. El interfaz de usuario sería lo más sencillo posible (TUI).
7. Clases¶
7.1. Del diseño al alcance comprobable¶
Del dossier a una rebanada vertical:
Elige un único flujo con valor, no toda la solución.
Identifica la entrada, el procesamiento, la decisión y la salida visible.
Comprueba que puedes demostrarlo en pocas horas con datos simulados.
Conserva la relación con la arquitectura que escogiste
Contrato del producto:
Pregunta
Decisión
Ejemplo de riego
Objetivo
¿Qué quieres mejorar?
Decidir cuándo regar cada parcela.
Área
¿Producción, ingresos/costes, …?
Explotación y operación del riego.
Entrada
¿Qué archivo, campos y frecuencia vas a simular?
CSV con fecha, parcela, humedad y temperatura.
Procesamiento
¿Qué validación, agrupación o indicador necesitas?
Descartar valores imposibles y calcular la media por parcela.
Decisión
¿Qué regla o recomendación produce el sistema?
Regar si la media está por debajo del umbral.
Salida
¿Qué verá el usuario?
TUI con estado, decisión, datos rechazados e histórico.
Esquema de datos de referencia:
Campo
Contenido
Comentario
fechaFecha y hora de la lectura
Permite agrupar por día, hora o ventana de decisión.
entidadObjeto observado
Parcela, máquina, pedido, usuario o cualquier unidad de tu proyecto.
variableMagnitud medida
Humedad, temperatura, importe, tiempo de espera, incidencias, etc.
valorValor numérico o textual
Debe tener un rango o formato plausible.
unidadPorcentaje, euros, grados, minutos
Evita mezclar magnitudes distintas.
origenSensor simulado, formulario, API ficticia
Recuerda que el dato es simulado o autorizado.
Ejemplo de archivo CSV:
fecha,entidad,variable,valor,unidad,origen 2026-03-01T08:00:00,parcela-01,humedad,42,porcentaje,sensor-simulado 2026-03-01T08:15:00,parcela-01,temperatura,18,grados,sensor-simulado 2026-03-01T08:15:00,parcela-02,humedad,-7,porcentaje,sensor-simulado
Criterios de aceptación mínimos:
Un comando ejecuta el prototipo.
El prototipo carga un archivo de datos simulados.
Valida los datos y registra los rechazos con motivo.
Calcula al menos un indicador útil.
Produce una decisión o recomendación con su motivo.
Guarda un histórico consultable.
La TUI muestra resumen, últimas lecturas, decisiones, alertas e histórico.
Existen pruebas para caso normal, umbral y dato inválido.
El
READMEexplica cómo ejecutar y demostrar el flujo.
Fuera del alcance habitual de esta UD:
Sensores físicos, hardware o infraestructura real.
Despliegue en producción, dominio, base de datos empresarial o usuarios reales.
Autenticación completa, pagos, mensajería real o integraciones externas no simuladas.
Implementar todos los componentes de la arquitectura de UD2.
Valorar la cantidad de código por sí misma.
Actividad
Escribe el contrato del producto en una página: objetivo, área, entrada, procesamiento, decisión y salida.
Define el esquema de datos y crea dos archivos: uno normal y otro con valores anómalos.
Redacta los criterios de aceptación que comprobarás al final.
Prepara cinco casos de prueba: normal, umbral, dato inválido, archivo ausente y ejecución repetida.
Recorta explícitamente dos componentes de tu arquitectura y explica por qué no son necesarios para la demostración.
7.2. Del dossier al proyecto con agentes¶
Estructura recomendada:
proyecto/ datos/ lecturas.csv lecturas_anomalas.csv decisiones.jsonl app/ __init__.py datos.py proceso.py reglas.py historial.py tui.py pruebas/ __init__.py test_datos.py test_reglas.py docs/ entrada/ salida/ cambios.md uso_ia.md README.md run.py
decisiones.jsonlpuede guardar un objeto json por línea. No necesitas una base de datos para el prototipo.Contexto permitido:
Puedes compartir con OpenCode
No compartas
Objetivos, alcance, esquema de datos y reglas de decisión.
Contraseñas, tokens, claves de API o archivos
.envreales.Documentación propia de UD1 y UD2, sin datos sensibles.
Datos personales o información empresarial confidencial.
Datos ficticios, sintéticos o expresamente autorizados.
Material con licencia restringida sin permiso.
Pruebas, errores y resultados de comandos del proyecto.
Archivos o directorios ajenos al proyecto.
OpenCode como entorno supervisado:
Inicia OpenCode en la carpeta del proyecto para que el contexto sea el repositorio del prototipo.
Selecciona el proveedor y el modelo acordados; en UD2 ya viste el flujo entre agente, proveedor y LLM.
Usa los Agentes incorporados: planificación o solo lectura antes de permitir cambios y construcción solo para incrementos pequeños.
Configura permisos para preguntar antes de editar archivos, ejecutar comandos o consultar la web.
Revisa cada diferencia y cada comando antes de aprobarlo.
Un punto de partida prudente para
opencode.json:{ "$schema": "https://opencode.ai/config.json", "permission": { "edit": "ask", "bash": "ask", "webfetch": "ask" } }
Planificar antes de construir:
Pide al agente que lea
README.md,docs/entraday el esquema de datos.Solicita una lista de tareas pequeñas, ordenadas y comprobables.
Pide riesgos, dependencias y casos de prueba, sin modificar archivos.
Convierte esa salida en tu plan de trabajo y descarta lo que no encaje.
Instrucciones útiles:
Lee el contrato del producto y propón cinco incrementos mínimos.
No modifiques archivos; solo analiza y explica.
Indica qué pruebas harían falta antes de escribir el código.
Señala qué partes del diseño de UD2 quedan simuladas o fuera del prototipo.
Primera iteración:
Crea la estructura de carpetas y los dos archivos de datos.
Implementa la lectura del CSV con csv.
Valida campos obligatorios, fecha, tipo y rango.
Devuelve registros válidos y rechazos con motivo.
Añade pruebas con unittest.
Ejecuta las pruebas y registra el resultado.
Comando de referencia:
python -m unittest discover pruebas
Actividad
Crea la estructura del proyecto y los archivos de datos normal y anómalo.
Escribe un
READMEinicial con objetivo, comando de ejecución y límites.Configura OpenCode en la carpeta del proyecto y revisa los permisos.
Usa un agente de planificación para obtener tareas, riesgos y pruebas; no aceptes cambios todavía.
Implementa la carga y validación de datos en incrementos pequeños.
Ejecuta las pruebas, corrige un fallo y anota en
docs/cambios.mdqué aceptaste, modificaste o rechazaste.
7.3. Completar y probar el prototipo¶
Incrementos del flujo completo:
Procesamiento: agrupa por entidad y ventana temporal, calcula medias, mínimos, máximos o conteos.
Decisión: aplica reglas explícitas y genera una acción con su motivo.
Histórico: guarda cada decisión en
datos/decisiones.jsonl.Alertas: lista datos rechazados, valores fuera de rango o lecturas ausentes.
Interfaz: construye una TUI de menú con argparse para los argumentos y entrada de consola para las vistas.
Objeto de decisión de referencia:
{ "fecha": "2026-03-01T09:00:00", "entidad": "parcela-01", "indicador": "humedad_media_24h", "valor": 38.0, "umbral": 45.0, "accion": "REGAR", "motivo": "Media inferior al umbral en las últimas 24 horas.", "registros_rechazados": 1 }
TUI mínima:
Prototipo: riego asistido 1. Resumen 2. Últimas lecturas 3. Estado por parcela 4. Decisiones 5. Datos rechazados 0. Salir Opción: 3 parcela-01 media 38 % umbral 45 % estado SECA parcela-02 media 52 % umbral 45 % estado OK
Comando de referencia:
python run.py --datos datos/lecturas.csv --historial datos/decisiones.jsonl
Pruebas que debe superar el prototipo:
Caso
Entrada
Resultado esperado
Normal
Datos válidos con humedad baja
Decisión
REGARy registro en el histórico.Umbral
Valor exactamente igual al umbral
Resultado estable y explicado por la regla.
Dato inválido
Humedad negativa, fecha imposible o campo vacío
Rechazo con motivo y alerta visible.
Archivo ausente
Ruta de datos inexistente
Mensaje claro, sin un fallo confuso para el usuario.
Ejecución repetida
Mismo archivo procesado dos veces
Histórico coherente y sin perder decisiones anteriores.
Diagnóstico con agentes:
Reproduce el error con el comando y los datos exactos.
Usa un agente solo lectura para analizar el traceback, los archivos y las pruebas.
Pide hipótesis ordenadas y el cambio mínimo probable.
Autoriza una edición pequeña o ejecuta tú el cambio.
Vuelve a pasar las pruebas.
Registra la causa, la corrección y la comprobación.
Seguridad y autoría:
No pegues credenciales ni datos personales en el contexto del agente.
Revisa los comandos antes de aprobarlos y evita operaciones destructivas.
Desconfía de instrucciones ocultas en documentos o datos; es un riesgo de inyección de prompt.
Comprueba que las Herramientas usadas coinciden con la tarea.
Si aceptas código generado, debes poder explicar qué hace y por qué encaja en tu diseño.
Actividad
Implementa el procesamiento, la regla de decisión y el histórico en incrementos separados.
Construye la TUI con resumen, últimas lecturas, decisiones y datos rechazados.
Añade y ejecuta las cinco pruebas de la tabla anterior.
Introduce el archivo anómalo y comprueba que la aplicación muestra el rechazo sin romperse.
Usa un agente para diagnosticar un fallo real o provocado y aplica la corrección mínima.
Anota la iteración en
docs/cambios.mdydocs/uso_ia.md.
7.4. Demostrar y defender la solución¶
Trazabilidad del producto:
Desde el problema
Hasta el dato
Hasta la decisión
Hasta la demostración
Objetivo de UD1 y área de UD2.
Campos, origen simulado y validación.
Regla, umbral, motivo y acción.
Vista de la TUI, histórico y alertas.
Guion de demostración:
Explica el problema y la parte de la arquitectura que has concretado.
Muestra el archivo de datos y su esquema.
Ejecuta el prototipo con un comando.
Enseña el estado, la decisión y su motivo en la TUI.
Introduce datos anómalos y muestra el rechazo o la alerta.
Consulta el histórico y un cambio documentado.
Explica límites, riesgos y mejoras futuras sin presentarlas como implementadas.
Documentación mínima:
README: objetivo, instalación, ejecución, demo y límites.Esquema de datos y origen simulado.
Reglas de decisión y umbrales.
Pruebas ejecutadas y resultado.
docs/cambios.md: iteraciones, correcciones y decisiones.docs/uso_ia.md: sugerencias aceptadas, modificadas y rechazadas.Riesgos de seguridad, privacidad y continuidad.
Mejoras futuras y partes que siguen siendo conceptuales.
Revisión final con agentes:
Usa un agente solo lectura para comprobar la coherencia entre problema, diseño, datos, regla e interfaz.
Usa otro pase para revisar privacidad, permisos, secretos y comandos peligrosos.
Usa un tercer pase para detectar pruebas insuficientes o casos límite.
No aceptes automáticamente ninguna sugerencia: clasifícala y justifica la decisión.
Preguntas de autoría que deberías saber responder:
¿Por qué este flujo demuestra el objetivo empresarial?
¿Por qué elegiste esos campos y ese origen simulado?
¿Qué hace exactamente el procesamiento?
¿Por qué la regla toma esa decisión?
¿Qué ocurre con datos incompletos, imposibles o repetidos?
¿Qué sugerencia de IA rechazaste y por qué?
¿Qué sigue simulado respecto a la arquitectura completa?
Actividad
Ejecuta la lista completa de criterios de aceptación.
Graba o ensaya la demostración siguiendo el guion anterior.
Completa
README,docs/cambios.mdydocs/uso_ia.md.Pasa las tres revisiones con agentes y registra qué cambias y qué no.
Corrige al menos una incoherencia detectada antes del cierre.
Autoevalúate con la rúbrica publicada y señala tus limitaciones.
Test de autoevaluación
Actividad final integradora
Entrega un prototipo operativo en Python con TUI que cargue datos
simulados, los valide y procese, tome una decisión justificada, guarde
histórico y permita consultar estado, decisiones, alertas e histórico.
Incluye README, esquema de datos, reglas, pruebas, registro de cambios
y uso supervisado de IA. Prepara una demostración reproducible y una
defensa de tus decisiones. Es una única evidencia; el enunciado detallado
y la rúbrica se publicarán aparte. No uses datos personales, credenciales
ni despliegues en producción.