deb04c9315
Sprint 0 completo del producto VMS-Sailor (Vessel Management System integrado para buques 30-40m). Brief de referencia en VMS_Sailor_v2_Parte_*.md (intacto). Core (vmssailor.core, 95.17% coverage, 99 tests verde): - ShipCoord: sistema naval x_pp/y_cl/z_bl frozen - Vessel, Deck, Bulkhead - Equipment, EquipmentModel, Sensor, EquipmentSpec - Tag, AlarmConfig, TagBinding, Scaling - CardInstance, Bus, Topology con validacion 21 puntos I/O AR-NMEA-IO-v1.0 - Alarm, PermissiveRule, Condition - Project agregado raiz con validacion cross-entity - Persistencia portable .vmsproj (SQLite) con roundtrip verificable Biblioteca curada seed (vmssailor.library): - systems_catalog.json completo (catalogo maestro Parte 1 sec 7) - 2 vessels: Sunseeker 76, Ferretti 850 - 2 motores: MTU 12V 2000 M96, Volvo D13-900 - 1 genset: Northern Lights M65C13 - yacht_motor_planeo.yaml (reglas heuristicas) - TODO marcado data_source=seed_estimate - requiere validacion datasheets Tools: - vms-validate-library: CLI valida biblioteca completa - vms-generate-test-project: CLI demo + verificacion roundtrip persistencia Design System + 8 mockups HTML estaticos: - docs/design_system.md (paleta Deep Ocean, gradientes, typography, motion) - docs/brand/ (logo + variantes SVG) - docs/mockups/splash, studio_main, runtime_overview, runtime_mimic_fuel (P&ID animado), runtime_alarms, runtime_trim (panel estrella con horizonte artificial), mobile_overview, mobile_trim - docs/mockups/index.html (galeria) Firmware (Sprint 12+ implementacion): - firmware/ar_nmea_io_v1/src/config/pinout.h con macros GPIO Decisiones autonomas documentadas en docs/decisions_sprint0.md. Stack: Python 3.11 + uv + Pydantic v2 + SQLite stdlib + hatchling + pytest 9 + ruff + mypy. Sin PySide6, FastAPI, Flutter ni firmware funcional (entran en sprints siguientes). Criterio de aceptacion Sprint 0: cumplido. - uv sync: OK - pytest: 99/99 verde - cov vmssailor.core: 95.17% (objetivo >=80%) - ruff: clean - vms-validate-library: OK - vms-generate-test-project: INTEGRIDAD OK Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
152 lines
8.9 KiB
JSON
152 lines
8.9 KiB
JSON
{
|
|
"_meta": {
|
|
"version": 1,
|
|
"source": "VMS_Sailor_v2_Parte_01.md section 7",
|
|
"notes": "Catálogo maestro completo. Sirve de checklist para el wizard del Studio (paso 4). Lo que el integrador marca define el menú lateral del Runtime. SystemId values deben coincidir con vmssailor.core.enums.SystemId."
|
|
},
|
|
"categories": [
|
|
{
|
|
"id": "propulsion",
|
|
"name": "Propulsión y maquinaria",
|
|
"systems": [
|
|
{ "id": "main_engine", "name": "Máquina principal", "name_en": "Main engine", "default_for": ["yacht_motor", "fishing", "patrol", "ferry", "offshore_support"] },
|
|
{ "id": "transmission", "name": "Transmisiones / reductoras", "name_en": "Transmissions" },
|
|
{ "id": "shaft_propeller", "name": "Ejes y hélices", "name_en": "Shafts & propellers" },
|
|
{ "id": "thruster", "name": "Hélices de proa/popa", "name_en": "Bow/stern thrusters" }
|
|
]
|
|
},
|
|
{
|
|
"id": "maneuvering",
|
|
"name": "Maniobra y trimado",
|
|
"systems": [
|
|
{ "id": "trim_sterndrive", "name": "Trim de motores / sterndrives", "name_en": "Engine trim" },
|
|
{ "id": "trim_tabs", "name": "Trim tabs", "name_en": "Trim tabs (Bennett, Lenco)" },
|
|
{ "id": "cpp", "name": "Hélices de paso variable", "name_en": "Controllable Pitch Propellers" },
|
|
{ "id": "gyrostabilizer", "name": "Estabilizadores girostáticos", "name_en": "Gyrostabilizers (Seakeeper, Quick MC²)" },
|
|
{ "id": "fin_stabilizer", "name": "Estabilizadores de aletas activas", "name_en": "Active fin stabilizers" },
|
|
{ "id": "joystick_docking", "name": "Joystick docking", "name_en": "Joystick docking" }
|
|
]
|
|
},
|
|
{
|
|
"id": "electrical_generation",
|
|
"name": "Generación eléctrica",
|
|
"systems": [
|
|
{ "id": "genset", "name": "Gensets diésel", "name_en": "Diesel gensets", "default_for": ["yacht_motor", "fishing", "patrol", "ferry", "offshore_support"] },
|
|
{ "id": "shore_power", "name": "Shore power con transferencia", "name_en": "Shore power with ATS" },
|
|
{ "id": "inverter_charger", "name": "Inversores/cargadores combinados", "name_en": "Inverter/chargers (Victron, Mastervolt)" },
|
|
{ "id": "battery_bank", "name": "Bancos de baterías litio con BMS", "name_en": "Lithium battery banks with BMS" },
|
|
{ "id": "msb", "name": "Cuadros principales (MSB)", "name_en": "Main switchboards", "default_for": ["yacht_motor", "fishing", "patrol", "ferry"] },
|
|
{ "id": "esb", "name": "Cuadros de emergencia (ESB)", "name_en": "Emergency switchboards" },
|
|
{ "id": "ups", "name": "UPS", "name_en": "UPS" },
|
|
{ "id": "solar", "name": "Paneles solares + MPPT", "name_en": "Solar + MPPT" },
|
|
{ "id": "smart_dc_busbar", "name": "Smart busbars DC", "name_en": "Smart DC busbars (Lynx Smart BMS)" },
|
|
{ "id": "smart_panel", "name": "Tableros inteligentes con monitoreo", "name_en": "Smart panels with embedded monitoring" }
|
|
]
|
|
},
|
|
{
|
|
"id": "electrical_isolation",
|
|
"name": "Aislamiento eléctrico",
|
|
"systems": [
|
|
{ "id": "sectionalizing", "name": "Aislamiento por sectores", "name_en": "Sectionalizing" },
|
|
{ "id": "emergency_isolation", "name": "Aislamiento total de emergencia", "name_en": "Total emergency isolation" },
|
|
{ "id": "breakers", "name": "Breakers configurables", "name_en": "Configurable breakers" },
|
|
{ "id": "lockout_tagout", "name": "Lockout-tagout digital", "name_en": "Digital lockout-tagout" }
|
|
]
|
|
},
|
|
{
|
|
"id": "fluids",
|
|
"name": "Fluidos del buque",
|
|
"systems": [
|
|
{ "id": "fuel", "name": "Combustible (DO/MDO)", "name_en": "Fuel oil", "default_for": ["yacht_motor", "fishing", "patrol", "ferry", "offshore_support"] },
|
|
{ "id": "lube_oil", "name": "Aceite lubricante", "name_en": "Lube oil" },
|
|
{ "id": "hydraulic_oil", "name": "Aceite hidráulico", "name_en": "Hydraulic oil" },
|
|
{ "id": "fw_cooling", "name": "Refrigeración agua dulce", "name_en": "Fresh water cooling" },
|
|
{ "id": "sw_cooling", "name": "Refrigeración agua salada", "name_en": "Sea water cooling" },
|
|
{ "id": "starting_air", "name": "Aire de arranque / aire comprimido", "name_en": "Starting / compressed air" },
|
|
{ "id": "bilge", "name": "Sentinas", "name_en": "Bilge", "default_for": ["yacht_motor", "fishing", "patrol", "ferry", "offshore_support"] },
|
|
{ "id": "ballast", "name": "Lastre", "name_en": "Ballast" },
|
|
{ "id": "grey_water", "name": "Aguas grises", "name_en": "Grey water" },
|
|
{ "id": "black_water", "name": "Aguas negras", "name_en": "Black water" },
|
|
{ "id": "potable_water", "name": "Agua potable", "name_en": "Potable water", "default_for": ["yacht_motor", "ferry"] },
|
|
{ "id": "sw_service", "name": "Agua salada de servicio", "name_en": "Sea water service" },
|
|
{ "id": "watermaker", "name": "Watermaker", "name_en": "Watermaker (desalinator)" }
|
|
]
|
|
},
|
|
{
|
|
"id": "safety",
|
|
"name": "Seguridad",
|
|
"systems": [
|
|
{ "id": "fire_detection", "name": "Detección de incendio", "name_en": "Fire detection", "default_for": ["yacht_motor", "fishing", "patrol", "ferry", "offshore_support"] },
|
|
{ "id": "fire_extinguishing", "name": "Extinción (CO₂, HiFog, espuma)", "name_en": "Fire extinguishing" },
|
|
{ "id": "fifi_external", "name": "FiFi externo", "name_en": "External FiFi monitors" },
|
|
{ "id": "emergency_bilge", "name": "Achique de emergencia", "name_en": "Emergency bilge" },
|
|
{ "id": "gas_detection", "name": "Detección de gases", "name_en": "Gas detection" },
|
|
{ "id": "mob", "name": "Hombre al agua (MOB)", "name_en": "Man overboard" }
|
|
]
|
|
},
|
|
{
|
|
"id": "environment",
|
|
"name": "Ambiente y confort",
|
|
"systems": [
|
|
{ "id": "hvac", "name": "HVAC / aire acondicionado", "name_en": "HVAC", "default_for": ["yacht_motor", "ferry"] },
|
|
{ "id": "engine_vent", "name": "Ventilación de máquinas", "name_en": "Engine room ventilation", "default_for": ["yacht_motor", "fishing", "patrol", "ferry", "offshore_support"] },
|
|
{ "id": "heating", "name": "Calefacción", "name_en": "Heating" },
|
|
{ "id": "refrigeration", "name": "Refrigeración (cámaras, neveras)", "name_en": "Refrigeration" }
|
|
]
|
|
},
|
|
{
|
|
"id": "lighting",
|
|
"name": "Iluminación",
|
|
"systems": [
|
|
{ "id": "nav_lights", "name": "Luces de navegación", "name_en": "Navigation lights", "default_for": ["yacht_motor", "fishing", "patrol", "ferry", "offshore_support"] },
|
|
{ "id": "deck_lights", "name": "Luces de cubierta", "name_en": "Deck lights" },
|
|
{ "id": "interior_lights", "name": "Luces interiores por sector", "name_en": "Interior lights" },
|
|
{ "id": "emergency_lights", "name": "Luces de emergencia", "name_en": "Emergency lights" },
|
|
{ "id": "searchlights", "name": "Reflectores", "name_en": "Searchlights" }
|
|
]
|
|
},
|
|
{
|
|
"id": "structural_tanks",
|
|
"name": "Tanques estructurales",
|
|
"systems": [
|
|
{ "id": "fuel_tanks", "name": "Tanques de combustible", "name_en": "Fuel tanks", "default_for": ["yacht_motor", "fishing", "patrol", "ferry", "offshore_support"] },
|
|
{ "id": "water_tanks", "name": "Tanques de agua", "name_en": "Water tanks" },
|
|
{ "id": "grey_black_tanks", "name": "Tanques de aguas grises/negras", "name_en": "Grey/black water tanks" },
|
|
{ "id": "voids", "name": "Voids", "name_en": "Voids" },
|
|
{ "id": "cofferdams", "name": "Cofferdams", "name_en": "Cofferdams" }
|
|
]
|
|
},
|
|
{
|
|
"id": "deck_maneuvering",
|
|
"name": "Cubierta y maniobra",
|
|
"systems": [
|
|
{ "id": "windlass", "name": "Cabrestantes / molinetes", "name_en": "Windlasses" },
|
|
{ "id": "anchor_system", "name": "Sistema de anclas", "name_en": "Anchor system" },
|
|
{ "id": "mooring", "name": "Sistema de amarre", "name_en": "Mooring system" },
|
|
{ "id": "davits", "name": "Davits / pescantes", "name_en": "Davits" },
|
|
{ "id": "gangway", "name": "Pasarelas / portalones", "name_en": "Gangways" },
|
|
{ "id": "crane", "name": "Grúas", "name_en": "Cranes" }
|
|
]
|
|
},
|
|
{
|
|
"id": "vessel_specific",
|
|
"name": "Específicos por tipo de buque",
|
|
"systems": [
|
|
{ "id": "fishing_machinery", "name": "Maquinaria de pesca", "name_en": "Fishing machinery", "default_for": ["fishing"] },
|
|
{ "id": "large_fridge_holds", "name": "Cámaras frigoríficas grandes", "name_en": "Large refrigerated holds", "default_for": ["fishing"] },
|
|
{ "id": "rov", "name": "ROV / equipos sumergibles", "name_en": "ROV / submersibles", "default_for": ["offshore_support"] },
|
|
{ "id": "diving_system", "name": "Sistema de buceo", "name_en": "Diving system" }
|
|
]
|
|
}
|
|
],
|
|
"_excluded_from_vms_sailor": {
|
|
"note": "Estos pertenecen al AR-ECDIS, NO se incluyen en el VMS-Sailor.",
|
|
"items": [
|
|
"ECDIS / radar / AIS",
|
|
"Piloto automático",
|
|
"Comunicaciones VHF/HF/SatCom",
|
|
"GPS y sensores de actitud (vienen del AR-ECDIS por NMEA 2000)"
|
|
]
|
|
}
|
|
}
|