Files
AR-Shipdesign/AR_ShipDesign_prompt.md
T
alro65 0dbc2a4518 v0.1-sprint0: Esqueleto completo AR-ShipDesign
- Estructura completa de carpetas (236 módulos stub + implementados)
- pyproject.toml, requirements, .gitignore, LICENSE (propietario)
- core/project.py: serialización .arsd (ZIP con JSON)
- core/units.py: conversiones SI <-> imperial completas
- ui/main_window.py: layout DELFTship-style con todos los paneles
  - Árbol de proyecto (dock izquierda)
  - Tabs de módulos (centro)
  - Panel de propiedades (dock derecha)
  - Panel hidrostáticos en vivo (inferior, fijo)
- ui/i18n: español e inglés
- ui/themes: tema claro y oscuro
- utils/logger.py, settings.py, validation.py
- data/liquids.json: 15 líquidos navales
- data/stability_criteria.json: IMO IS Code 2008, A.749(18), USCG
- tests/test_startup.py: 12 tests, todos PASSED
- Módulo scantling/ ISO 12215 (stubs Sprint 2.5)
- Módulo fabrication/molds/ para moldes FRP (stubs Sprint 13B)
- Módulo fabrication/ para CNC plasma/router/laser (stubs Sprint 13)
2026-05-26 22:10:18 -04:00

51 KiB
Raw Blame History

Prompt para Claude Code — Proyecto AR-ShipDesign

Instrucciones para Álvaro (no para Code): Copia este documento ENTERO y pégalo como primer mensaje en una nueva conversación de Claude Code. Antes de pegarlo, abre Code en una carpeta neutra (no dentro de D:/AR-ShipDesign — él la usará). Si tienes Python 3.11+ instalado en Windows, mejor.


1. Quién eres y qué vas a construir

Eres mi co-arquitecto naval y desarrollador senior en Python. Vamos a construir AR-ShipDesign, una aplicación de escritorio para Windows que sea la herramienta de diseño naval que siempre quise tener: lo mejor de Maxsurf (rigurosidad técnica, suite de módulos integrados, transformación paramétrica) con la UX amigable de DELFTship (árbol de capas a la izquierda, vista 3D al centro, propiedades a la derecha, hidrostáticos siempre visibles abajo, wizards paso a paso).

El software debe cubrir el ciclo de diseño preliminar completo de un buque, abarcando tanto embarcaciones a motor (desplazamiento, semi-planeo, planeo) como veleros (monocascos y multicascos), e incluyendo todos los sistemas del buque: propulsión y potencia, eléctrico, combustible y lubricación, agua dulce y sanitario, lastre y achique, gobierno, contraincendios, HVAC.

Es un proyecto a largo plazo. No tienes que terminar todo en una sesión. Trabajaremos por hitos (sprints). Tu primera tarea es entender este documento, prepararme el entorno, y luego ejecutar el Sprint 0 (esqueleto del proyecto + ventana principal vacía + sistema de proyecto funcional). Después, sprint por sprint según el orden que está al final.


2. Ubicación del proyecto

Todo va en D:/AR-ShipDesign/.

  • La carpeta ya existe vacía. Úsala.
  • Si tiene contenido previo, pregúntame antes de tocar nada.
  • Inicializa Git desde el primer commit. Cada sprint termina con un commit etiquetado (v0.1-sprint0, v0.2-sprint1, etc.).

3. Pila tecnológica

Capa Herramienta Por qué
Lenguaje Python 3.11+ Ecosistema científico maduro
GUI PySide6 (Qt 6) Profesional, gratis (LGPL), look nativo Windows
Visualización 3D PyVista + VTK embebido en Qt Calidad pro sin escribir OpenGL crudo
Gráficos 2D pyqtgraph Más rápido que matplotlib para interactivo
NURBS / B-splines geomdl (NURBS-Python) Pura Python, sin dependencias compiladas
Geometría avanzada / IGES-STEP pythonocc-core Opcional (si está instalado), behind feature flag
Cálculo numérico numpy, scipy Estándar
Tabular pandas Estándar
Excel openpyxl Lectura/escritura
DXF ezdxf Lectura/escritura
Mallas / STL / OBJ trimesh Operaciones booleanas, cierre de mallas
PDF reportlab Reportes técnicos
Persistencia proyecto Formato propio .arsd ZIP con JSONs + meshes binarios
Empaquetado final PyInstaller .exe distribuible
Tests pytest + benchmarks Validación contra cascos canónicos

Reglas de implementación:

  • SI estricto internamente (m, kg, s, N, Pa, W). Conversión a unidades imperiales solo en la UI cuando el usuario lo pida.
  • Idioma: español por defecto, inglés como segunda opción. Strings centralizados en arshipdesign/ui/i18n/es.json y en.json.
  • Type hints obligatorios en todos los módulos del core.
  • Docstrings estilo NumPy con referencia bibliográfica al final cuando se implementa una fórmula del estado del arte.
  • Sin red, sin telemetría, sin licencias online. El software corre offline.
  • Logging con logging estándar, niveles configurables, archivo rotativo en %APPDATA%/ARShipDesign/logs/.
  • Configuración del usuario vía QSettings (preferencias, recientes, idioma, tema).
  • Soporta proyectos con archivos relativos (que el .arsd se pueda mover entre PCs sin romper referencias).

4. Estructura de carpetas del proyecto

Crea exactamente esta estructura. Cuando un módulo aún no esté implementado, crea el archivo con un docstring que diga "Stub. Implementación en Sprint X" y un raise NotImplementedError. Esto deja la navegación del proyecto coherente desde el día 1.

D:/AR-ShipDesign/
├── README.md
├── LICENSE.txt
├── CHANGELOG.md
├── pyproject.toml
├── requirements.txt
├── requirements-dev.txt
├── .gitignore
├── .env.example
├── main.py                          # entry point
│
├── arshipdesign/
│   ├── __init__.py                  # versión: __version__
│   │
│   ├── core/                        # MODELO DE DATOS (sin UI)
│   │   ├── project.py               # raíz del proyecto, serialización .arsd
│   │   ├── ship.py                  # clase Ship (raíz del modelo)
│   │   ├── hull.py                  # geometría del casco (NURBS)
│   │   ├── appendage.py             # quilla, timón, bulbo, skeg, foils
│   │   ├── superstructure.py
│   │   ├── offsets.py               # tabla de offsets
│   │   ├── waterplane.py
│   │   ├── section.py
│   │   ├── compartment.py           # bodegas, espacios secos
│   │   ├── tank.py                  # tanques con líquido
│   │   ├── liquid.py                # base de datos de líquidos
│   │   ├── weight_item.py           # ítem de peso puntual
│   │   ├── lightship.py             # peso en rosca
│   │   ├── loadcase.py              # condiciones de carga
│   │   ├── rig.py                   # aparejo del velero (mástil, jarcia, velas)
│   │   ├── sail.py                  # velas individuales (main, jib, spi…)
│   │   ├── engine.py                # motor (datos del fabricante, curva)
│   │   ├── propeller.py             # hélice
│   │   ├── gear.py                  # reductora
│   │   ├── generator.py             # genset
│   │   ├── battery.py               # banco de baterías
│   │   ├── electrical_load.py       # consumidor eléctrico
│   │   ├── pipe.py                  # tubería de un sistema
│   │   ├── valve.py
│   │   ├── pump.py
│   │   ├── system.py                # sistema del buque (combustible, fw, etc.)
│   │   └── units.py                 # conversiones SI ↔ imperial
│   │
│   ├── geometry/                    # OPERACIONES GEOMÉTRICAS
│   │   ├── nurbs_surface.py         # wrapper sobre geomdl
│   │   ├── nurbs_curve.py
│   │   ├── mesh.py                  # malla triangular para cálculos
│   │   ├── slicer.py                # corte por planos
│   │   ├── intersection.py
│   │   ├── fairing.py               # análisis de curvatura
│   │   ├── boolean.py               # operaciones booleanas con trimesh
│   │   └── fitting.py               # ajuste de NURBS a offsets
│   │
│   ├── hydrostatics/                # MOTOR DE CÁLCULO PRINCIPAL
│   │   ├── integrator.py            # Simpson 1/3, 3/8, trapezoidal, Gauss
│   │   ├── upright.py               # hidrostáticos en posición vertical
│   │   ├── heeled.py                # equilibrio escorado
│   │   ├── trim.py                  # equilibrio con asiento
│   │   ├── free_floating.py         # equilibrio libre 3DOF
│   │   ├── coefficients.py          # Cb, Cp, Cw, Cm, Cws
│   │   ├── curves_of_form.py        # las "Curvas Hidrostáticas"
│   │   └── bonjean.py               # curvas de Bonjean
│   │
│   ├── stability/
│   │   ├── intact.py                # estabilidad intacta, GZ vs heel
│   │   ├── damage.py                # estabilidad en avería
│   │   ├── criteria.py              # IMO IS Code 2008, MSC.267(85)
│   │   ├── floodable_length.py
│   │   ├── downflooding.py
│   │   └── weather.py               # criterio meteorológico
│   │
│   ├── tanks/                       # MÓDULO DE TANQUES (DELFTship-style)
│   │   ├── tank_definition.py
│   │   ├── sounding_table.py        # tablas de sondaje
│   │   ├── ullage.py                # tablas de vacío
│   │   ├── fsm.py                   # Free Surface Moment
│   │   ├── capacity_plan.py         # plan de capacidades
│   │   ├── trim_correction.py       # corrección por trim
│   │   ├── temperature_correction.py
│   │   └── tank_calibration.py
│   │
│   ├── resistance/
│   │   ├── holtrop_mennen.py        # Holtrop & Mennen 1984 (motor)
│   │   ├── savitsky.py              # planeadores
│   │   ├── van_oortmerssen.py       # embarcaciones pequeñas
│   │   ├── compton.py               # semi-planeo
│   │   ├── dsyhs.py                 # Delft Systematic Yacht Hull Series (veleros)
│   │   ├── effective_power.py       # PE = RT · V
│   │   └── added_resistance.py      # resistencia añadida en olas
│   │
│   ├── propulsion/
│   │   ├── wageningen_b.py          # Serie B Wageningen (KT, KQ, η)
│   │   ├── propeller_design.py      # diseño/selección de hélice
│   │   ├── propeller_matching.py    # matching motor-hélice
│   │   ├── cavitation.py            # criterios de cavitación (Burrill, Keller)
│   │   ├── shaft_line.py            # eje, soportes, alineación
│   │   ├── waterjet.py              # propulsión por chorro
│   │   ├── pod.py                   # propulsión azimutal
│   │   └── electric_drive.py        # propulsión eléctrica/híbrida
│   │
│   ├── engines/                     # CATÁLOGO DE MOTORES Y SELECCIÓN
│   │   ├── engine_db.py             # catálogo (datos genéricos por familia)
│   │   ├── engine_curve.py          # curva BHP vs RPM, SFOC vs carga
│   │   ├── engine_selection.py      # algoritmo de selección por potencia
│   │   ├── fuel_consumption.py      # consumo en cada modo operativo
│   │   ├── nox_emissions.py         # emisiones IMO Tier I/II/III
│   │   └── operating_profile.py     # perfil operativo (% tiempo a cada velocidad)
│   │
│   ├── sailing/                     # MÓDULO PARA VELEROS
│   │   ├── vpp.py                   # Velocity Prediction Program (núcleo)
│   │   ├── aero_model.py            # modelo aerodinámico (ORC-style)
│   │   ├── hydro_model.py           # hidrodinámica del velero (DSYHS)
│   │   ├── sail_coefficients.py     # CL, CD por tipo de vela y AWA
│   │   ├── rig_geometry.py          # geometría del aparejo
│   │   ├── stability_sailing.py     # momento adrizante, ángulo de escora
│   │   ├── polar_diagram.py         # diagrama polar de velocidad
│   │   ├── handicap_orc.py          # cálculo de rating ORC simplificado
│   │   └── multihull.py             # catamarán/trimarán específico
│   │
│   ├── seakeeping/
│   │   ├── strip_theory.py          # Salvesen-Tuck-Faltinsen
│   │   ├── rao.py                   # Response Amplitude Operators
│   │   ├── spectra.py               # ITTC, JONSWAP, Pierson-Moskowitz
│   │   ├── short_term.py            # respuestas en mar corto
│   │   ├── slamming.py              # probabilidad de pantocazo
│   │   ├── deck_wetness.py
│   │   └── motion_sickness.py       # MSI según ISO 2631
│   │
│   ├── systems/                     # SISTEMAS DEL BUQUE
│   │   ├── electrical/
│   │   │   ├── load_analysis.py     # EPLA por modo operativo
│   │   │   ├── generator_sizing.py  # selección de gensets
│   │   │   ├── battery_sizing.py    # banco de baterías
│   │   │   ├── one_line_diagram.py  # diagrama unifilar
│   │   │   ├── cable_sizing.py      # dimensionamiento de cables
│   │   │   ├── short_circuit.py     # cortocircuito básico
│   │   │   └── shore_power.py
│   │   ├── fuel/
│   │   │   ├── fuel_system.py       # diagrama, capacidades, autonomía
│   │   │   ├── autonomy.py          # cálculo de autonomía (rango)
│   │   │   ├── transfer_pumps.py
│   │   │   └── day_tank.py
│   │   ├── lub_oil/
│   │   │   └── lub_oil_system.py
│   │   ├── freshwater/
│   │   │   ├── fw_system.py         # consumo, tanques, hidróforo
│   │   │   ├── hot_water.py
│   │   │   └── watermaker.py        # osmosis inversa
│   │   ├── sanitary/
│   │   │   ├── greywater.py
│   │   │   ├── blackwater.py
│   │   │   └── stp.py               # planta de tratamiento
│   │   ├── ballast/
│   │   │   ├── ballast_system.py
│   │   │   └── ballast_pumps.py
│   │   ├── bilge/
│   │   │   ├── bilge_system.py      # achique
│   │   │   ├── oily_water_separator.py
│   │   │   └── bilge_pumps.py
│   │   ├── firefighting/
│   │   │   ├── fire_main.py         # agua salada presurizada
│   │   │   ├── foam_system.py
│   │   │   ├── co2_system.py
│   │   │   ├── sprinkler.py
│   │   │   ├── detection.py
│   │   │   └── classification.py    # zonas A60, B15, etc.
│   │   ├── hvac/
│   │   │   ├── heat_balance.py      # cargas térmicas por espacio
│   │   │   ├── duct_sizing.py
│   │   │   ├── chiller_sizing.py
│   │   │   └── ventilation.py
│   │   ├── steering/
│   │   │   ├── rudder_design.py     # área, perfil, fuerza
│   │   │   ├── steering_gear.py     # potencia del servo
│   │   │   └── thrusters.py         # impulsores transversales
│   │   ├── anchoring/
│   │   │   ├── anchor_selection.py
│   │   │   ├── chain_locker.py
│   │   │   └── windlass.py
│   │   └── compressed_air/
│   │       └── compressed_air.py
│   │
│   ├── io/                          # IMPORT / EXPORT
│   │   ├── offsets_csv.py
│   │   ├── offsets_excel.py
│   │   ├── dxf_reader.py
│   │   ├── dxf_writer.py
│   │   ├── iges_reader.py           # con pythonocc, opcional
│   │   ├── iges_writer.py
│   │   ├── step_io.py
│   │   ├── stl_export.py
│   │   ├── obj_export.py
│   │   ├── rhino_3dm.py             # opcional (rhino3dm-py)
│   │   ├── delftship_fbm.py         # importar .fbm de DELFTship
│   │   ├── maxsurf_msd.py           # importar .msd si es posible (puede ser parcial)
│   │   ├── project_serializer.py    # formato .arsd
│   │   └── pdf_export.py
│   │
│   ├── parametric/                  # GENERACIÓN PARAMÉTRICA
│   │   ├── wizard_workboat.py       # casco con espejo
│   │   ├── wizard_cruiser.py        # crucero a motor
│   │   ├── wizard_sailing_mono.py   # velero monocasco
│   │   ├── wizard_sailing_cat.py    # catamarán
│   │   ├── wizard_planing.py        # planeador
│   │   ├── series60.py              # generador serie 60
│   │   ├── wigley.py                # casco matemático Wigley
│   │   ├── kcs.py                   # KRISO Container Ship
│   │   ├── dtmb5415.py              # DTMB 5415 (caso militar)
│   │   └── lackenby_transform.py    # transformación paramétrica
│   │
│   ├── reports/
│   │   ├── hydrostatic_report.py
│   │   ├── stability_booklet.py     # booklet completo
│   │   ├── capacity_plan_report.py
│   │   ├── lines_plan.py            # plano de líneas (PDF y DXF)
│   │   ├── general_arrangement.py   # plano de disposición general
│   │   ├── resistance_powering.py
│   │   ├── electrical_balance.py    # balance eléctrico
│   │   ├── system_diagrams.py       # P&IDs simplificados
│   │   ├── vpp_report.py            # polar diagram + tabla para velero
│   │   └── pdf_builder.py           # constructor común
│   │
│   ├── ui/                          # TODA LA UI Qt
│   │   ├── main_window.py
│   │   ├── i18n/
│   │   │   ├── es.json
│   │   │   └── en.json
│   │   ├── themes/
│   │   │   ├── light.qss
│   │   │   └── dark.qss
│   │   ├── icons/                   # SVG
│   │   ├── widgets/
│   │   │   ├── viewer_3d.py
│   │   │   ├── viewer_lines.py      # plano de líneas 2D
│   │   │   ├── viewer_polar.py      # polar diagram velero
│   │   │   ├── tree_panel.py
│   │   │   ├── properties_panel.py
│   │   │   ├── hydrostatics_panel.py  # panel fijo abajo, siempre visible
│   │   │   ├── offsets_editor.py
│   │   │   ├── tank_editor.py
│   │   │   ├── loadcase_editor.py
│   │   │   ├── rig_editor.py
│   │   │   ├── engine_picker.py
│   │   │   ├── propeller_designer.py
│   │   │   ├── electrical_load_table.py
│   │   │   ├── system_diagram_canvas.py  # canvas para diagramas unifilares y P&ID
│   │   │   └── curve_plotter.py
│   │   ├── dialogs/
│   │   │   ├── new_project.py
│   │   │   ├── wizards.py
│   │   │   ├── stability_criteria_picker.py
│   │   │   ├── liquid_picker.py
│   │   │   ├── preferences.py
│   │   │   └── about.py
│   │   ├── commands/                # patrón Command para Undo/Redo
│   │   │   ├── command.py
│   │   │   ├── modify_hull.py
│   │   │   ├── add_tank.py
│   │   │   └── ...
│   │   └── shortcuts.py             # atajos de teclado centralizados
│   │
│   └── utils/
│       ├── logger.py
│       ├── settings.py
│       ├── async_runner.py          # QThreadPool para cálculos largos
│       └── validation.py
│
├── data/
│   ├── liquids.json
│   ├── stability_criteria.json
│   ├── engine_catalog.json          # catálogo genérico de motores
│   ├── propeller_series/
│   │   └── wageningen_b.json
│   ├── steel_grades.json
│   ├── benchmarks/                  # cascos de validación
│   │   ├── wigley_hull.csv
│   │   ├── series60_cb070.csv
│   │   ├── kcs.csv
│   │   ├── dtmb5415.csv
│   │   ├── delft_372.csv            # Delft Systematic Yacht Series
│   │   └── README.md
│   ├── icons_class/                 # iconos para diagramas (bombas, válvulas, etc.)
│   └── templates/
│       ├── lightship_workboat.json
│       ├── lightship_yacht.json
│       └── default_loadcases.json
│
├── tests/
│   ├── conftest.py
│   ├── test_integrator.py
│   ├── test_hydrostatics_wigley.py
│   ├── test_hydrostatics_series60.py
│   ├── test_gz_curve_imo.py
│   ├── test_holtrop.py
│   ├── test_savitsky.py
│   ├── test_dsyhs.py
│   ├── test_vpp.py
│   ├── test_tank_calculations.py
│   ├── test_capacity_plan.py
│   ├── test_offsets_io.py
│   ├── test_dxf_io.py
│   ├── test_project_serialization.py
│   ├── test_propeller_matching.py
│   ├── test_electrical_load.py
│   └── test_engine_selection.py
│
└── docs/
    ├── user_manual.md
    ├── theory_manual.md             # FÓRMULAS + REFERENCIAS BIBLIOGRÁFICAS
    ├── validation_report.md         # validación contra cascos canónicos
    ├── developer_guide.md
    └── changelog_internal.md

5. Layout de la ventana principal (UX inspirada en DELFTship)

┌──────────────────────────────────────────────────────────────────────────┐
│ Archivo | Editar | Ver | Modelo | Análisis | Sistemas | Reportes | Ayuda │
├──────────────────────────────────────────────────────────────────────────┤
│ 🗎  💾  ↩  ↪  | 🔍 🚢 wizard | ⚙ unidades | ☀/🌙 tema | español ▾       │
├────────────┬──────────────────────────────────────┬──────────────────────┤
│            │                                      │                      │
│ 📁 Project │                                      │ Propiedades del      │
│  ▾ Ship    │                                      │ ítem seleccionado    │
│   ▾ Casco  │                                      │                      │
│    Surf 1  │     Vista 3D principal (PyVista)     │ Loa  : 24.50 m       │
│    Surf 2  │                                      │ Lpp  : 23.40 m       │
│   ▾ Apend. │     • orbit / zoom / pan             │ B    :  6.00 m       │
│    Quilla  │     • toggle waterlines              │ T    :  3.20 m       │
│    Timón   │     • toggle sections                │ D    :  3.80 m       │
│   ▾ Tanques│     • shaded / wireframe / hidden    │ ...                  │
│    FO 1 P  │     • measure tool                   │                      │
│    FO 1 S  │     • clipping plane                 │                      │
│    FW 1    │                                      │                      │
│   ▾ Bodeg. │                                      │                      │
│   ▾ Casos  │                                      │                      │
│    Light   │                                      │                      │
│    Full    │                                      │                      │
│    Ballast │                                      │                      │
│   ▾ Aparejo│                                      │                      │
│    Mástil  │                                      │                      │
│    Mayor   │                                      │                      │
│   ▾ Motor  │                                      │                      │
│   ▾ Sist.  │                                      │                      │
│    Eléct.  │                                      │                      │
│    Combust │                                      │                      │
│    F.W.    │                                      │                      │
│    Achique │                                      │                      │
│    Lastre  │                                      │                      │
│    CI      │                                      │                      │
│    HVAC    │                                      │                      │
├────────────┴──────────────────────────────────────┴──────────────────────┤
│ HIDROSTÁTICOS EN VIVO (siempre visible):                                  │
│ T=[3.20 m ▾]  Δ=2845 t  LCB=12.30  KB=1.85  KMT=4.20  GMT=1.05           │
│ TPC=8.2 t/cm  MCT=42.5  Cb=0.682  Cw=0.821  Cm=0.985  ⚠ IMO OK           │
├──────────────────────────────────────────────────────────────────────────┤
│ Tabs: [3D] [Líneas] [Offsets] [Curvas] [Tanques] [Capacidad]              │
│       [Estabilidad GZ] [Resistencia] [Propulsión] [VPP] [Movimientos]    │
│       [Eléctrico] [Combustible] [F.W.] [Achique] [CI] [HVAC] [Reporte]   │
└──────────────────────────────────────────────────────────────────────────┘

Reglas de UX irrenunciables:

  1. Auto-recálculo del panel hidrostático en <200 ms al cambiar el calado o el modelo.
  2. Undo/Redo robusto (Ctrl+Z hasta 50 pasos, historial visible).
  3. Unidades configurables en UI, SI internamente.
  4. Tooltips con la fórmula en hover de cualquier campo calculado (p.ej. KMT → "KMT = KB + IT/∇").
  5. Drag & drop de offsets, IGES, DXF sobre la ventana.
  6. Wizards paso a paso para cada tipo de embarcación.
  7. Validación visual del modelo: panel rojo con problemas concretos + botón "intentar corregir".
  8. Hidrostáticos en vivo abajo, siempre visible, no se puede ocultar (en lateral si la pantalla es chica).
  9. Indicador "⚠ IMO" en verde/amarillo/rojo según cumplimiento del último caso de carga activo.

6. Módulo HIDROSTÁTICOS (el motor que alimenta todo)

Para cualquier calado/asiento/escora, sobre la malla triangular del casco con regla de Simpson 1/3 (fallback 3/8 cuando estaciones no son impares, trapezoidal para mallas irregulares):

Símbolo Nombre Fórmula
Volumen desplazado ∫∫∫ dV
Δ Desplazamiento ρ · ∇
Aw Área del plano de flotación ∫∫ dA en z=T
Cw Coef. plano flotación Aw / (Lwl · B)
Am Área cuaderna maestra ∫ y dz en x=Lpp/2
Cm Coef. cuaderna maestra Am / (B · T)
Cb Coef. de bloque ∇ / (Lwl · B · T)
Cp Coef. prismático Cb / Cm
S Superficie mojada ∫∫ dS
LCB Centro long. carena ∫∫∫ x dV / ∇
KB (VCB) Centro vert. carena ∫∫∫ z dV / ∇
LCF Centro long. flotación ∫∫ x dA / Aw
IT Inercia transv. de Aw ∫∫ y² dA
IL Inercia long. de Aw ∫∫ (xxF)² dA
BMT Radio metac. transv. IT / ∇
BML Radio metac. long. IL / ∇
KMT Altura metac. transv. KB + BMT
KML Altura metac. long. KB + BML
TPC Toneladas por cm inmersión Aw · ρ / 100
MCT (MTC) Momento para cambiar asiento 1 cm Δ · GML / (100 · Lpp)
WSA Wetted Surface Area S
Cws Coef. superficie mojada S / √(∇ · Lwl)

Salidas obligatorias del módulo:

  • Curvas de Forma (los 12-15 parámetros vs calado en una gráfica multi-escala).
  • Curvas de Bonjean (área seccional vs calado, por estación).
  • Resolutor de equilibrio libre 3 GDL (heave + trim + heel) con scipy.optimize.fsolve o Newton-Raphson, tolerancia configurable.

7. Estabilidad y curva GZ

  • GZ vs escora de 0° a 90° en pasos de 5° (configurable). En cada ángulo: mantener Δ constante, reequilibrar trim, calcular B', GZ = brazo horizontal G→vertical de B'.
  • Salidas: curva GZ, GZmax y ángulo, rango de estabilidad positiva, ángulo de inundación progresiva, área bajo curva.
  • Criterios IMO IS Code 2008 (MSC.267(85)):
    • A(0→30°) ≥ 0.055 m·rad
    • A(0→40°) ≥ 0.090 m·rad
    • A(30→40°) ≥ 0.030 m·rad
    • GZ(30°) ≥ 0.20 m
    • Ángulo de GZmax ≥ 25°
    • GMT inicial ≥ 0.15 m
  • Criterio meteorológico A.749(18).
  • Criterios extra: USCG, ABS, RINA — configurables en data/stability_criteria.json.
  • Estabilidad en avería (determinística): por compartimento, permeabilidad configurable, método de pérdida de flotabilidad.
  • Floodable length curve.

8. TANQUES (lo bueno de DELFTship)

Esta es la parte donde el software gratuito típicamente flojea. Hacerla bien.

8.1 Definición de tanque

  • Geometría:
    • Prismático (6 planos): caso fácil.
    • Con forma de casco (límite exterior = superficie del casco): wing tanks, double bottom.
    • Arbitrario (malla triangular cerrada): casos complejos.
  • Tipo: HFO, MGO, LO, FW, SW lastre, agua gris, agua negra, sentina, carga líquida, vacío.
  • Líquido desde data/liquids.json (ver §8.4), override permitido.
  • Capacidad 100% (volumen geométrico calculado).
  • Capacidad operativa (98% combustibles, 95% agua, 100% carga estiba).
  • Nivel actual (intercambiable: % / m³ / t / sondaje).
  • Posición de boca de medición (para que las tablas de sondaje reflejen el sensor real).
  • Permeabilidad (avería): 0.95 líquidos, 0.85 carga seca, 0.95 máquinas, 0.60 acomodación.

8.2 Cálculos por tanque

  1. Tabla de sondaje: cada cm (config) desde el fondo: V, peso, LCG, TCG, VCG del contenido, FSM, IT del líquido.
  2. Tabla de ullage (equivalente desde el techo).
  3. Curva de FSM vs nivel.
  4. Corrección por trim (las tablas dependen del asiento).
  5. Corrección por temperatura (para combustibles, expansión).
  6. Validación: detección de intersecciones entre tanques, tanques fuera del casco, mal cerrados.

8.3 Integración con estabilidad

En cada LoadCase:

  • Sumar pesos (lightship + cargas + líquidos).
  • Calcular LCG/TCG/VCG combinado.
  • GG' (corrección FSM) = Σ(FSMi · ρi) / Δ.
  • GMT corregido = GMT GG'.
  • Reportar equilibrio + estabilidad + cumplimiento criterios.

8.4 data/liquids.json precarga

{
  "HFO":  {"name": "Heavy Fuel Oil",       "density_kg_m3": 991,  "viscosity_cSt": 380},
  "MGO":  {"name": "Marine Gas Oil",       "density_kg_m3": 890,  "viscosity_cSt": 6},
  "MDO":  {"name": "Marine Diesel Oil",    "density_kg_m3": 870,  "viscosity_cSt": 11},
  "LSFO": {"name": "Low Sulphur Fuel Oil", "density_kg_m3": 985,  "viscosity_cSt": 180},
  "LO":   {"name": "Lubricating Oil",      "density_kg_m3": 920,  "viscosity_cSt": 100},
  "HO":   {"name": "Hydraulic Oil",        "density_kg_m3": 875,  "viscosity_cSt": 46},
  "FW":   {"name": "Fresh Water",          "density_kg_m3": 1000, "viscosity_cSt": 1.0},
  "SW":   {"name": "Sea Water (ballast)",  "density_kg_m3": 1025, "viscosity_cSt": 1.05},
  "DW":   {"name": "Distilled Water",      "density_kg_m3": 999,  "viscosity_cSt": 1.0},
  "SLP":  {"name": "Slop / Bilge",         "density_kg_m3": 1010, "viscosity_cSt": 5},
  "SEW":  {"name": "Sewage",               "density_kg_m3": 1010, "viscosity_cSt": 3},
  "URE":  {"name": "Urea 40% (SCR)",       "density_kg_m3": 1090, "viscosity_cSt": 1.4}
}

9. RESISTENCIA — múltiples métodos según tipo de buque

Selección automática del método según parámetros (con override manual):

Método Aplicabilidad
Holtrop & Mennen 1984 Cascos de desplazamiento convencionales, 0.05 < Fr < 0.45
Van Oortmerssen 1971 Embarcaciones pequeñas Lwl 880 m, desplazamiento
Compton 1986 Semi-planeo 0.4 < Fr < 0.9
Savitsky 1964 Planeadores prismáticos, Fr_∇ > 1.0
Delft Systematic Yacht Hull Series (DSYHS) Veleros (KeuningSonnenberg)
MercierSavitsky Round bilge planing

9.1 Holtrop & Mennen 1984 (detalle obligatorio)

Implementar con todos los componentes:

  • RF (ITTC-57): CF = 0.075 / (log₁₀ Rn 2)²
  • (1+k) factor de forma (fórmula de Holtrop, c14)
  • RAPP apéndices (con factores 1+k2 por apéndice)
  • RW olas (con c1…c17 según Fr y Cp)
  • RB bulbo de proa
  • RTR espejo de popa
  • RA corrección modelo-buque (CA)
  • RT = (1+k)·RF + RAPP + RW + RB + RTR + RA
  • PE = RT · V

Inputs derivados automáticamente del modelo: L, B, T, Cb, Cp, Cm, Cw, ∇, S, LCB%, AT (transom), ABT y hB (bulbo).

Salida: curva RT y PE vs V (Fr 0.05 → 0.45 o rango definido).

Referencia: Holtrop J., 1984, "A statistical re-analysis of resistance and propulsion data", ISP Vol. 31.

9.2 DSYHS (veleros)

Para veleros usar la regresión de Delft (KeuningSonnenberg 1998 y actualizaciones):

  • Resistencia residual del casco desnudo (upright).
  • Incremento por escora (heel drag).
  • Resistencia inducida por sideforce (apéndices).
  • Resistencia añadida en olas.

Parámetros geométricos requeridos: Lwl, Bwl, Tc (canoe body), ∇c, LCB%, LCF%, Cp, Aw, S, BTR (beam-to-draft ratio).


10. PROPULSIÓN

10.1 Serie B Wageningen

Implementar coeficientes KT, KQ vs J para:

  • Número de palas Z = 2, 3, 4, 5, 6, 7
  • Relación área expandida/disco AE/A0 = 0.30 → 1.05
  • Relación paso/diámetro P/D = 0.5 → 1.4

Fórmulas polinómicas Oosterveldvan Oossanen (con corrección de Reynolds).

10.2 Matching motor-hélice

Algoritmo:

  1. Dado RT(V) y selección de hélice (D, P/D, AE/A0, Z).
  2. Calcular wake fraction w y thrust deduction t (Holtrop).
  3. Resolver punto de operación: T(1t) = RT, encontrar n (rpm de hélice).
  4. Calcular Q, PD (delivered power), aplicar eficiencias (η_S eje, η_R relativo rotacional, η_G reductora).
  5. PB (brake power) = PD / (η_S · η_G).
  6. Comparar con curva del motor a ese rpm.

Salida: punto de operación óptimo, curvas de KT, KQ, η, demanda vs disponible.

10.3 Cavitación

  • Criterio de Burrill (gráfico σ vs τc).
  • Criterio de Keller (mínimo AE/A0 para evitar cavitación).
  • Alerta visual cuando el diseño viola alguno.

10.4 Otros propulsores

  • Waterjet: cálculo simplificado de empuje vs caudal y velocidad.
  • Pod azimutal: con factor de degradación frente a hélice convencional.
  • Propulsión eléctrica/híbrida: cálculo de potencia eléctrica requerida, factor de carga, eficiencia de motor eléctrico, gestión de batería.

11. MOTORES y dimensionamiento

11.1 Catálogo data/engine_catalog.json

Catálogo genérico por familia (no fabricante específico para evitar IP). Datos típicos:

{
  "high_speed_diesel": {
    "rpm_range": [1500, 2400],
    "bhp_range_kw": [50, 1500],
    "sfoc_at_85_kw_kwh": 215,
    "weight_kg_per_kw": 3.5,
    "applications": ["yates", "workboats", "patrulleras"]
  },
  "medium_speed_diesel": {
    "rpm_range": [600, 1200],
    "bhp_range_kw": [500, 8000],
    "sfoc_at_85_kw_kwh": 195,
    "weight_kg_per_kw": 12,
    "applications": ["ferries", "OSV", "cargo pequeño"]
  },
  "low_speed_two_stroke": {
    "rpm_range": [70, 180],
    "bhp_range_kw": [3000, 80000],
    "sfoc_at_85_kw_kwh": 165,
    "weight_kg_per_kw": 38,
    "applications": ["bulk carrier", "tanker", "container"]
  },
  "outboard_petrol": {...},
  "outboard_electric": {...},
  "gas_turbine": {...},
  "dual_fuel": {...},
  "fuel_cell_h2": {...}
}

11.2 Algoritmo de selección

Inputs: PB requerida al MCR, velocidad de servicio, perfil operativo (% del tiempo a cada V).

Salida ranked:

  1. Familia recomendada.
  2. Cantidad de motores (1, 2, 4).
  3. Rango de rpm óptimo para matching con hélice.
  4. SFOC promedio sobre el perfil operativo → consumo en t/día y rango / autonomía.
  5. Peso seco estimado.

11.3 Curva de consumo

SFOC vs % carga del motor (curva en U típica con mínimo cerca del 80%). Salidas:

  • Consumo en cada modo (en puerto, maniobra, navegación, full ahead).
  • Autonomía: rango_nm = (capacidad_FO · 1000 / consumo_horario · ηtransfer) · V_servicio
  • CO₂ emitido por viaje (factor 3.114 kg CO₂ / kg HFO).
  • NOx: comparación con límite IMO Tier I/II/III según año y zona.

12. VELEROS — Módulo VPP completo

12.1 Arquitectura del VPP

Sigue el esquema clásico (ORC y Maxsurf VPP):

Loop de equilibrio para cada (TWS, TWA):

  1. Estimar velocidad inicial Vboat.
  2. Calcular AWA y AWS (viento aparente) a partir de TWS, TWA, Vboat.
  3. Modelo aerodinámico → fuerza propulsiva, fuerza lateral (heeling force), momento escorante.
  4. Modelo hidrodinámico → resistencia total (upright + heel + induced + added wave) y sideforce de apéndices.
  5. Balance de fuerzas:
    • ΣFlongitudinal = 0 → F_drive = R_total
    • ΣFlateral = 0 → F_side_sails = F_side_apéndices (define leeway angle β)
    • ΣMroll = 0 → Heeling moment = Righting moment (define φ ángulo de escora)
  6. Si no balancea, ajustar Vboat y volver al paso 2.
  7. Para optimizar VMG, iterar también sobre reef (rizado) y flat (planitud de vela).

12.2 Modelo aerodinámico (estilo ORC)

Coeficientes CL y CD por tipo de vela vs AWA:

  • Main + jib (upwind)
  • Main + genoa
  • Main + spinnaker (downwind asimétrico)
  • Main + code zero

Cada vela: Cl_max, Cd_min, curvas tabuladas. Compatible con la documentación pública del ORC VPP 2023.

Escalado con altura del centro de esfuerzo (CE), corrección por gradiente de viento (perfil logarítmico atmosférico).

12.3 Modelo hidrodinámico

  • DSYHS (KeuningSonnenberg) para resistencia upright del canoe body.
  • Heel drag por incremento de WSA y cambio de forma de carena al escorar.
  • Induced drag del keel y timón (teoría de Glauert).
  • Added wave resistance (regresión de Gerritsma).

12.4 Estabilidad del velero

Momento adrizante con corrección por:

  • Velocidad (loss of stability with speed).
  • Movimiento de tripulación (crew on rail).
  • Vela arrizada / flat factor.

12.5 Salidas

  • Polar diagram interactivo (TWA radial, V boat radial, TWS curvas).
  • Tabla de velocidades TWS × TWA (igual que ORC).
  • VMG upwind y downwind con TWA óptimo.
  • Curvas de target speed para regata.
  • Rating ORC simplificado (estimación, no certificado).

12.6 Multicascos

Catamarán/trimarán: balance lateral diferente (no escora, levanta casco a barlovento). Hidrodinámica por casco individual + interferencia. Momento de vuelco (capsize moment) en lugar de adrizamiento.


13. SEAKEEPING (predicción de movimientos)

Strip theory SalvesenTuckFaltinsen (1970) para los 6 GDL.

Outputs:

  • RAOs por modo, vs ω y rumbo respecto a olas.
  • Espectros: ITTC, PiersonMoskowitz, JONSWAP (parametrizable Hs, Tp, γ).
  • Respuestas a corto plazo: significant motion, máximo esperado en N ciclos.
  • Probabilidad de slamming, deck wetness, propeller emergence.
  • MSI (Motion Sickness Incidence) según ISO 2631.
  • Gráficas polares de movimientos vs rumbo.

14. SISTEMAS DEL BUQUE

Cada sistema tiene su propia tab en la UI, su propio modelo de datos en core/, su propio motor de cálculo en systems/, y su propio reporte en reports/.

14.1 Sistema ELÉCTRICO

Electrical Power Load Analysis (EPLA) clásico:

  • Lista de consumidores eléctricos (luces, bombas, motores auxiliares, electrónica, HVAC, cocina, etc.) con:
    • Potencia conectada (kW)
    • Tensión (24V DC / 230V AC / 400V AC / 690V AC)
    • Factor de carga (LF) por modo operativo
    • Factor de simultaneidad
  • Modos operativos configurables:
    • En puerto, sin carga
    • En puerto, cargando/descargando
    • Maniobra
    • Navegación normal
    • Navegación con mal tiempo
    • Emergencia
  • Cálculo automático por modo: ΣP · LF · KS = demanda eléctrica del modo.
  • Selección de generadores: número, potencia, redundancia (uno fuera de servicio debe cubrir el modo crítico).
  • Banco de baterías (yates, eléctricos): capacidad Ah, autonomía a hotel load, recarga.
  • Diagrama unifilar dibujado en canvas Qt: barras principal/emergencia, breakers, transformadores, consumidores agrupados.
  • Cable sizing simplificado por corriente de carga, longitud y caída de tensión (≤3% en main, ≤1% en lighting).
  • Cortocircuito básico (Icc en barras principales).
  • Reporte "Electrical Load Balance" estilo clasificadora.

14.2 Sistema de COMBUSTIBLE

  • Tanques de almacenamiento + tanque de servicio diario (day tank) + tanque de sedimentación.
  • Bombas de trasiego (capacidad mínima: llenar day tank en 30 min).
  • Separadoras (purificadoras) — capacidad según caudal de motor + margen.
  • Tubería con diámetros calculados por velocidad de fluido (~1 m/s succión, ~2 m/s descarga).
  • Autonomía: con perfil operativo y consumo de motor → días de navegación, rango en mn.
  • Diagrama P&ID simplificado.

14.3 Sistema de LUBRICACIÓN

  • Carter del motor + tanque de almacenamiento + tanque de lodos.
  • Bomba de lubricación, enfriador, filtros.
  • Cálculo de tiempo entre cambios según horas de operación.

14.4 Sistema de AGUA DULCE

  • Consumo per cápita: 120-200 L/persona/día (configurable según tipo de buque).
  • Tanques + hidróforo + calentador.
  • Watermaker (osmosis inversa): caudal vs consumo + margen, energía consumida (~3-4 kWh/m³).
  • Dimensionamiento de tanques para autonomía con/sin watermaker.

14.5 Sistema SANITARIO (aguas grises y negras)

  • Tanques de retención (capacidad mínima según MARPOL Anexo IV).
  • STP (Sewage Treatment Plant) o tanque de retención + descarga en puerto.
  • Conexiones a tierra.

14.6 Sistema de LASTRE

  • Tanques de lastre + bombas de lastre.
  • Diagrama de lastre para transición entre casos de carga.
  • Cumplimiento Ballast Water Management Convention (D-1/D-2) — solo nota informativa.

14.7 Sistema de ACHIQUE (BILGE)

  • Bomba principal + emergencia.
  • Capacidad mínima según clasificadora (típico: vaciar el compartimento más grande en 2 horas).
  • Separador de sentinas (OWS) — 15 ppm IMO.
  • Diagrama de tuberías por compartimento.

14.8 Sistema CONTRAINCENDIOS

  • Fire main (agua salada presurizada): bombas principales + emergencia, hidrantes, mangueras, lanzas, presión mínima en hidrante más alejado (típico 3.5 bar).
  • Sistema fijo: CO₂ para cámara de máquinas (5-7% volumen), espuma para tanques de combustible.
  • Sprinklers en acomodaciones (clase B).
  • Detección: humo, calor, llama; zonas A60/A30/B15.
  • Esquema de clasificación de mamparos por zona.
  • Cálculo: capacidad de bomba CI = mínimo 2 chorros simultáneos en hidrante más desfavorable.

14.9 Sistema HVAC

  • Heat balance por espacio: cargas sensibles + latentes + ganancia/pérdida por mamparos.
  • Condiciones ambientales: ASHRAE (verano 35°C/27°C húmedo, invierno -10°C) — configurables.
  • Caudal de aire por espacio (renovaciones/hora según uso).
  • Dimensionamiento de chiller: kW frigoríficos + margen 15%.
  • Ductos: velocidades 4-6 m/s en main, 2-3 m/s en ramificaciones.
  • Reporte de cargas por compartimento.

14.10 Sistema de GOBIERNO

  • Diseño del timón: área (regla típica A_R = c · L · T donde c = 1.52.5% para mercante, 4-6% para velero).
  • Fuerza en el timón a velocidad máxima (fórmula de Joessel modificada).
  • Steering gear: torque requerido, potencia hidráulica, tiempo de banda-a-banda (≤28 s a max ahead según SOLAS).
  • Thrusters transversales: empuje requerido para vientos cruzados típicos.

15. IMPORTACIÓN / EXPORTACIÓN

15.1 Tabla de offsets

Aceptar CSV/Excel en dos formatos:

  1. Largo (3 columnas: Station, Waterline, HalfBreadth).
  2. Matricial (filas = estaciones, columnas = WL, celdas = semi-mangas).

Wizard: previsualización con detección automática del formato; si falla, asistente paso a paso.

Ajustar superficies NURBS por mínimos cuadrados con geomdl.fitting.approximate_surface.

15.2 Otros formatos

  • IGES: lectura/escritura con pythonocc-core (opcional).
  • STEP: lectura/escritura idem.
  • DXF: polylines 3D que representan WL/sections/buttocks → reconstrucción por skinning.
  • STL/OBJ: malla triangular (export para CFD externo o impresión).
  • Rhino 3DM: con rhino3dm-py (opcional).
  • DELFTship .fbm: lectura best-effort (formato binario propio).
  • Maxsurf .msd: lectura parcial best-effort.

15.3 Wizards paramétricos

  • Casco con espejo (workboat).
  • Crucero a motor (yate de desplazamiento).
  • Planeador (semi-V, hard chine).
  • Velero monocasco moderno.
  • Catamarán.
  • Serie 60 (Cb objetivo).
  • Wigley (validación).
  • DTMB 5415 (validación militar).

15.4 Exportación

  • DXF 2D (plano de líneas con cajetín, escala, cotas, estilo astillero).
  • DXF 3D (wireframe).
  • IGES, STEP, STL, OBJ, CSV.
  • PDF de reportes.

16. CASOS DE CARGA (LoadCase)

Cada LoadCase agrega:

  • Lightship: peso en rosca con LCG/TCG/VCG, radios de giro (kxx, kyy, kzz).
  • Deadweight items: lista de pesos (tripulación, provisiones, equipo, stores) con posición.
  • Cargo: bodegas con peso y CG o densidad y nivel.
  • Tanques: nivel de cada uno.
  • Trim correctors / constants.

Motor → equilibrio + reporte:

  • Calado en proa, popa, medio, en perpendiculares.
  • Trim, heel.
  • Δ, GMT, GMT corregido por FSM.
  • Reserva de flotabilidad.
  • Cumplimiento criterios IMO (verde/amarillo/rojo).

Plantillas predefinidas: Lightship, Departure full, Arrival full, Departure ballast, Arrival ballast.


17. VALIDACIÓN CONTRA BENCHMARKS

Antes de marcar un módulo como completo, validar contra cascos con valores publicados:

Casco Origen Validar
Wigley Casco matemático ∇, S, Cb, Cp analíticos
Series 60 Cb 0.70 Todd 1963 Hidrostáticos + Holtrop
KCS (KRISO Container Ship) Tokyo 2015 workshop Holtrop + CFD ref
DTMB 5415 Combatant naval Hidrostáticos + seakeeping
Delft 372 DSYHS (velero) Resistencia upright + heel

Cada test guarda el resultado en tests/benchmark_results/ y compara con tolerancia (±2% típicamente).


18. PLAN DE SPRINTS (ejecuta en este orden)

Cada sprint termina con: tests pasando, commit etiquetado, entrada en CHANGELOG.md, sección añadida a docs/user_manual.md.

Sprint 0 — Setup (esta sesión, esperable 1-2 horas)

  • Crear estructura completa de carpetas con stubs.
  • pyproject.toml, requirements.txt, .gitignore, LICENSE (MIT por defecto, pregúntame si quieres otra).
  • main.py que abra una ventana Qt vacía con menú base.
  • core/project.py con clase Project y serialización .arsd (vacía pero funcional).
  • core/units.py con conversiones SI ↔ imperial.
  • ui/main_window.py con el layout descrito en §5 (paneles vacíos pero presentes).
  • tests/conftest.py y un test trivial que valide que arranca.
  • Git init + primer commit v0.1-sprint0.
  • Entregable: la app abre, se ve el layout, archivo nuevo / guardar / abrir funcionan con .arsd vacío.

Sprint 1 — Geometría y offsets

  • geometry/nurbs_surface.py, geometry/mesh.py, geometry/slicer.py.
  • io/offsets_csv.py, io/offsets_excel.py.
  • ui/widgets/offsets_editor.py, ui/widgets/viewer_3d.py.
  • Wizard Wigley (caso de validación inmediata).
  • Entregable: cargar tabla de offsets, ver casco en 3D, ver waterlines/sections.

Sprint 2 — Hidrostáticos básicos

  • hydrostatics/integrator.py (Simpson 1/3, 3/8, trap).
  • hydrostatics/upright.py, coefficients.py, curves_of_form.py.
  • ui/widgets/hydrostatics_panel.py (panel inferior siempre visible).
  • Tests contra Wigley analítico y Series 60.
  • Entregable: panel hidrostático abajo recalcula al cambiar calado.

Sprint 3 — Equilibrio libre y estabilidad GZ

  • hydrostatics/free_floating.py, heeled.py, trim.py.
  • stability/intact.py, criteria.py.
  • ui/widgets/curve_plotter.py (pyqtgraph).
  • Entregable: curva GZ + cumplimiento IMO con semáforo.

Sprint 4 — Tanques completo

  • core/tank.py, core/liquid.py.
  • tanks/* (todos los módulos).
  • ui/widgets/tank_editor.py.
  • core/loadcase.py + integración con estabilidad.
  • Entregable: definir tanques, generar tablas de sondaje, ver capacity plan, estabilidad con FSM.

Sprint 5 — Resistencia y propulsión

  • resistance/holtrop_mennen.py, savitsky.py, van_oortmerssen.py.
  • propulsion/wageningen_b.py, propeller_matching.py.
  • engines/engine_db.py, engine_selection.py.
  • Entregable: curva RT/V, selección hélice, selección motor con consumo.

Sprint 6 — Veleros y VPP

  • core/rig.py, core/sail.py.
  • sailing/vpp.py, aero_model.py, hydro_model.py.
  • resistance/dsyhs.py.
  • ui/widgets/viewer_polar.py.
  • Entregable: polar diagram completo, tabla de velocidades estilo ORC.

Sprint 7 — Sistemas del buque

  • systems/electrical/* con EPLA y diagrama unifilar.
  • systems/fuel/* con autonomía.
  • systems/freshwater/*, bilge/*, ballast/*.
  • ui/widgets/system_diagram_canvas.py.
  • Entregable: balance eléctrico completo, autonomía calculada, diagramas básicos.

Sprint 8 — CI, HVAC, gobierno

  • systems/firefighting/*, hvac/*, steering/*, anchoring/*.
  • Entregable: dimensionamiento de timón, servo, CI, HVAC.

Sprint 9 — Seakeeping

  • seakeeping/strip_theory.py, rao.py, spectra.py.
  • Entregable: RAOs, espectros, MSI.

Sprint 10 — Reportes profesionales

  • Todos los reports/* con plantillas PDF estilo astillero.
  • Stability Booklet completo.
  • Capacity Plan.
  • Lines Plan en PDF y DXF.

Sprint 11 — IGES/STEP, paramétricos avanzados

  • io/iges_*, step_io.py con pythonocc.
  • parametric/lackenby_transform.py.
  • Wizards completos para todos los tipos.

Sprint 12 — Empaquetado y distribución

  • PyInstaller config para .exe.
  • Splash screen, icono, installer (NSIS).
  • Manual de usuario PDF.

19. REGLAS DE TRABAJO ENTRE TÚ Y YO

  1. Antes de cada sprint, resúmeme en 3-5 líneas qué vas a hacer y pídeme go/no-go.
  2. Si una decisión técnica afecta el roadmap (cambiar librería, refactor grande), pregúntame antes.
  3. Si encuentras que algo de este documento es ambiguo o contradictorio, dilo. No asumas.
  4. Si una fórmula del estado del arte tiene varias versiones publicadas, escoge la más citada o la más reciente (preferentemente Holtrop 1984 sobre Holtrop 1982; ORC VPP 2023 sobre versiones anteriores) y deja referencia explícita en el docstring.
  5. No instales dependencias pesadas (pythonocc, rhino3dm) hasta el sprint que las necesite.
  6. Commits frecuentes, mensajes descriptivos, en español.
  7. Tests obligatorios para cualquier fórmula numérica antes de declarar el sprint terminado.
  8. Documenta a medida que avanzas: docs/theory_manual.md se llena en paralelo al código, no al final.
  9. Si un cálculo es lento (>2 s) en un caso típico, muévelo a un QThreadPool para no congelar la UI.
  10. Validación visual: cualquier resultado numérico que se muestre en la UI debe poder graficarse al lado, o tener una vista que ayude a interpretarlo (el usuario debe saber leer una curva, no solo un número).

20. Empezamos

Cuando hayas leído este documento por completo:

  1. Confírmame en 5 líneas máximo qué entendiste, qué dudas tienes (si las hay), y qué vas a entregar al final del Sprint 0.
  2. Cuando te diga "go", ejecuta Sprint 0 completo y muéstrame al final cómo abrir la app y qué deberíamos ver.

¿Listo? Empecemos.