📘 GUÍA DE PROMPTS PARA EL PROYECTO FINAL: RUTA A (INGENIERÍA CIVIL)

Objetivo del proyecto: Desarrollar, versionar y desplegar una aplicación web multipágina en Streamlit que utilice SymPy para resolver estática estructural, calcular reacciones en apoyos y generar automáticamente los diagramas de Fuerza Cortante V(x) y Momento Flector M(x) de vigas isostáticas.

Instrucciones de uso para el estudiante: Copia y pega cada Prompt en el orden indicado. Espera la respuesta, implementa el código en VSCode, ejecuta streamlit run app.py para probar, haz commit a GitHub y solo entonces avanza al siguiente prompt. Si aparece un error, copia el Traceback completo y pide corrección antes de continuar.


🔧 FASE 0: Configuración del Entorno de Desarrollo

(Descargas, instalación y preparación de VSCode)

Prompt 0.1:

Actúa como un Ingeniero de Software Senior y mentor técnico. Soy estudiante de Ingeniería Civil y necesito configurar mi equipo Windows/macOS desde cero para desarrollar una app en Streamlit con cálculo simbólico. Guíame paso a paso para: 1) Instalar Python 3.10+ (marcando agregar al PATH). 2) Instalar VSCode y las extensiones obligatorias: Python, Pylance, GitLens, Streamlit y Jupyter. 3) Instalar Git y configurar usuario/correo en terminal. 4) Verificar cada instalación con comandos exactos. Entregame solo los pasos claros, sin información redundante.


📁 FASE 1: Estructura del Proyecto y Control de Versiones

(Repositorio, archivos base y organización multipágina)

Prompt 1.1:

Voy a crear un repositorio local llamado “AnalisisEstructural_Civil”. Guíame con los comandos exactos de terminal para: 1) Crear la carpeta del proyecto y entrar a ella. 2) Inicializar Git y vincularlo a un nuevo repositorio remoto en GitHub (déjame el placeholder para la URL). 3) Crear la estructura de archivos y carpetas requerida por Streamlit multipágina: app.py, backend_estructural.py, requirements.txt, .gitignore (optimizado para Python y VSCode), README.md, y una carpeta pages/ con dos archivos vacíos: 1_Calculo_Reacciones.py y 2_Diagramas_Cortante_Momento.py. 4) Hacer el primer commit inicial y subirlo a GitHub. Dame los comandos uno por uno con explicación breve.


⚙️ FASE 2: Backend (Lógica Simbólica y Estática con SymPy)

(Módulo Python reutilizable con continuum_mechanics)

Prompt 2.1:

Actúa como un Ingeniero Civil experto en Estática Computacional y Python. Necesito crear backend_estructural.py que encapsule la lógica de SymPy para vigas simplemente apoyadas. Genera el código completo con type hints, docstrings y validaciones para:

  1. crear_viga_simbolica(L: float, carga_puntual_P: float, x_P: float, carga_distribuida_w: float) -> sp.physics.continuum_mechanics.Beam
  • Usa sp.symbols(‘E I’) para propiedades.
  • Aplica reacciones en x=0 y x=L con apply_load(…, -1).
  • Aplica P en x_P y w desde 0 hasta L con apply_load(…, 0, end=L).
  • Define bc_deflection en [(0,0), (L,0)] y ejecuta solve_for_reaction_loads(). Retorna el objeto viga.
  1. extraer_ecuaciones_internas(viga) -> dict[str, sp.Expr]
  • Retorna {‘Vx’: viga.shear_force(), ‘Mx’: viga.bending_moment()}.
  1. generar_datos_plot(viga, x_max: float, n_puntos: int = 200) -> tuple[np.ndarray, np.ndarray, np.ndarray]
  • Usa sp.lambdify para convertir V(x) y M(x) en funciones numéricas.
  • Retorna arrays x, V, M listos para Matplotlib. Maneja casos donde la expresión sea constante.

Incluye un bloque if name == “main”: con prueba: L=6m, P=20kN en x=3m, w=5kN/m. Imprime reacciones y verifica que ΣFy=0.`


🖥️ FASE 3: Frontend Multipágina en Streamlit

(Interfaz gráfica, navegación y visualización técnica)

Prompt 3.1 (Página Principal):

Programa app.py. Crea una página de bienvenida profesional para mi app “Analizador Estructural con SymPy”. Usa Streamlit para mostrar: 1) Título y subtítulo con st.title y st.markdown. 2) Explicación técnica del propósito (2 párrafos sobre estática computacional). 3) Barra lateral (st.sidebar) con st.page_link para navegar a las páginas de cálculo. 4) Un st.info con el estado del proyecto. Diseño limpio, colores institucionales y comentarios en español.

Prompt 3.2 (Página 1 - Reacciones):

Programa pages/1_Calculo_Reacciones.py. Debe importar backend_estructural.py. Crea inputs con st.number_input: Longitud Viga (m), Carga Puntual P (kN), Posición de P (m), Carga Distribuida w (kN/m). Valida que posición < longitud. Al presionar “Calcular Reacciones”, ejecuta la función del backend y muestra en st.columns tres st.metric: R_A (kN), R_B (kN) y ΣFy (verificación de equilibrio). Usa st.latex() para mostrar las ecuaciones simbólicas de equilibrio resueltas. Si hay error, muéstralo con st.error.

Prompt 3.3 (Página 2 - Diagramas):

Programa pages/2_Diagramas_Cortante_Momento.py. Debe importar backend_estructural.py y reutilizar los mismos inputs (o recuperarlos con st.session_state). Al calcular, usa generar_datos_plot() para obtener arrays x, V, M. Genera dos subplots con matplotlib: 1) Diagrama de Fuerza Cortante V(x) (línea roja, relleno bajo curva). 2) Diagrama de Momento Flector M(x) (línea azul, relleno bajo curva). Añade grid, ejes etiquetados en kN y kN·m, y una línea vertical punteada donde V(x) cruza por cero. Renderiza con st.pyplot(fig). Agrega st.expander(“📘 Fundamento Teórico”) explicando la relación integral/derivada entre q(x), V(x) y M(x), y por qué el momento máximo ocurre cuando V=0.


☁️ FASE 4: Empaquetado, Git y Despliegue en Streamlit Cloud

(Entorno virtual, requisitos y publicación)

Prompt 4.1:

Guíame para preparar el proyecto para despliegue. 1) Comandos para crear y activar un entorno virtual .venv en VSCode (Windows/macOS). 2) Instrucciones para instalar streamlit, sympy, matplotlib y numpy solo en ese entorno. 3) Comando exacto para generar requirements.txt automáticamente. 4) Secuencia de Git para commit y push a main. 5) Pasos detallados para desplegar en Streamlit Community Cloud (repo, rama, main file). Asegúrate de mencionar que SymPy y Matplotlib deben estar explícitamente en requirements.txt para que el servidor los instale.

Prompt 4.2 (Optimización Final para Rúbrica):

Revisa mentalmente la rúbrica de mi proyecto final: Lógica Matemática (30%), Interactividad/Frontend (20%), Visualización Gráfica (20%), Ingeniería de Software/Despliegue (10%) y Sustentación (20%). Sugiere 3 mejoras concretas en mi código actual para asegurar la máxima puntuación. Dame los fragmentos de código exactos para: 1) Envolver los inputs en st.form() para evitar recálculos innecesarios. 2) Formatear ejes y leyendas de Matplotlib con estilo profesional (font size, grid alpha, units). 3) Estructura de README.md orientada a sustentación (teoría, instalación, uso, limitaciones del modelo isostático).


📋 CHECKLIST DE ENTREGA (Alineado a tu Rúbrica)

Criterio Verificación en la App
Lógica y Precisión Matemática (30%) backend_estructural.py usa SymPy correctamente. Reacciones verifican ΣFy=0 y ΣM=0. Sin errores de tipo o dominio. Manejo de cargas puntuales y distribuidas según apply_load().
Interactividad y Diseño (20%) Navegación multipágina fluida. Uso de st.sidebar, st.columns, st.metric, st.form(). Inputs validados y botón de cálculo intuitivo.
Visualización Gráfica (20%) Diagramas V(x) y M(x) generados con Matplotlib, ejes etiquetados, unidades técnicas, línea vertical en V=0 resaltada. Renderizado estable en st.pyplot().
Ingeniería de Software (10%) Repo en GitHub con .venv ignorado, requirements.txt exacto (sympy, matplotlib, streamlit, numpy), .gitignore completo, README.md profesional. URL pública activa.
Sustentación y Dominio (20%) Estudiante puede explicar: diferencia entre cálculo simbólico vs numérico, significado físico de apply_load(orden), relación dM/dx = V, y cómo la app acelera el pre-dimensionamiento estructural.

💡 Nota pedagógica para tu clase:

Esta guía está diseñada para que los estudiantes internalicen el flujo profesional:

Entorno → Backend Simbólico → Frontend Interactivo → Despliegue.

Se recomienda encarecidamente que no avancen al siguiente prompt sin haber ejecutado y hecho commit del anterior.

Esto refuerza la disciplina de control de versiones y reduce la frustración ante errores acumulados.

Durante la sustentación, cuiden su capacidad para conectar la salida visual de la app con los conceptos de Estática y Resistencia de Materiales que ya han visto en su malla curricular.