このMCPでできること
Calculates scuba dive decompression plans, gas mixtures, gas usage, buoyancy, cylinder fills, and related diving information.
ツール
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['depth'], 'properties': {'depth': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Target (maximum) depth in m (metric) or ft (imperial). Required.'}, 'style': {'enum': ['auto', 'nitrox', 'trimix'], 'type': 'string', 'description': 'auto (default): nitrox when it meets target_end, else trimix. nitrox: no helium, END reported but not enforced. trimix: the standard fill comes from the trimix list.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Surface altitude (m or ft, per units), 0 to 10000 m (32800 ft). Default 0.'}, 'ppo2_max': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 limit in bar at the target depth, 1.0 to 1.6. Default 1.4, a working bottom-gas limit.'}, 'target_end': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Deepest equivalent narcotic depth (END) allowed at depth, in m or ft. Helium is added to meet it. Default 30 m (98 ft).'}, 'temperature': {'type': 'number', 'maximum': 104, 'minimum': -2, 'description': 'Water temperature for gas density, in °C (metric, -2 to 40) or °F (imperial, 28 to 104). Default 15 °C.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'depth', 'best_mix', 'deco_ladder', 'cap_used_bar', 'spoken_summary', 'safety_notice'], 'properties': {'depth': {'type': 'number', 'description': 'Target depth, as given.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'best_mix': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct', 'mod', 'end', 'density_g_l', 'helium_pct_for_density_limit'], 'properties': {'end': {'type': 'number', 'description': 'END at the target depth.'}, 'mod': {'type': 'number', 'description': 'MOD at cap_used_bar, whole m or ft, floored.'}, 'helium_pct': {'type': 'number', 'description': 'He %.'}, 'oxygen_pct': {'type': 'number', 'description': 'Oâ\x82\x82 %.'}, 'density_g_l': {'type': 'number', 'description': 'Gas density at the target depth, g/L to 0.1, at temperature (default 15 °C).'}, 'helium_pct_for_density_limit': {'type': ['number', 'null'], 'description': 'Only when density is over 5.2 g/L: the total helium % (Oâ\x82\x82 unchanged) that brings it to 5.2 g/L at the target depth. null when under 5.2, or when no helium fraction can.'}}, 'description': 'Richest mix: Oâ\x82\x82 floored to a whole percent, He rounded up to 0.1 (0 for nitrox).', 'additionalProperties': False}, 'deco_ladder': {'type': 'array', 'items': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct', 'switch_depth', 'role', 'why'], 'properties': {'why': {'type': 'string'}, 'role': {'enum': ['travel', 'deco', 'oxygen'], 'type': 'string'}, 'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}, 'switch_depth': {'type': 'number', 'description': 'travel: where to switch to the bottom mix on the descent. deco and oxygen: where to switch on the ascent.'}}, 'additionalProperties': False}, 'description': 'Standard travel and deco gases for this depth; empty to 30 m (100 ft).'}, 'cap_used_bar': {'type': 'number', 'description': 'PPOâ\x82\x82 limit used.'}, 'standard_mix': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct', 'mod', 'end', 'density_g_l', 'helium_pct_for_density_limit'], 'properties': {'end': {'type': 'number', 'description': 'END at the target depth.'}, 'mod': {'type': 'number', 'description': 'MOD at cap_used_bar, whole m or ft, floored.'}, 'helium_pct': {'type': 'number', 'description': 'He %.'}, 'oxygen_pct': {'type': 'number', 'description': 'Oâ\x82\x82 %.'}, 'density_g_l': {'type': 'number', 'description': 'Gas density at the target depth, g/L to 0.1, at temperature (default 15 °C).'}, 'helium_pct_for_density_limit': {'type': ['number', 'null'], 'description': 'Only when density is over 5.2 g/L: the total helium % (Oâ\x82\x82 unchanged) that brings it to 5.2 g/L at the target depth. null when under 5.2, or when no helium fraction can.'}}, 'description': 'Nearest standard fill (air, EANx28 to EANx50, 25/25 to 10/70) within the same PPOâ\x82\x82 and END limits at this depth.', 'additionalProperties': False}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['current', 'target'], 'properties': {'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'target': {'type': 'object', 'required': ['oxygen_pct', 'pressure'], 'properties': {'pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Target gauge pressure once the cylinder has cooled (bar or psi, per units).'}, 'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Target helium %, 0 to 100. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Target oxygen %, 0 to 100 (EANx32 is 32, trimix 21/35 is 21).'}}, 'description': 'The mix and settled pressure to reach.', 'additionalProperties': False}, 'current': {'type': 'object', 'required': ['oxygen_pct', 'pressure'], 'properties': {'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, as in plan_dive: al80, al40, al63, hp80, hp100, hp120, lp85, s80, single_10l, single_12l, single_15l, twin_10l, twin_12l, twin_15l, stage_11l, stage_7l, o2_3l, dil_3l. twin_ presets are a manifolded pair.'}, 'twinset': {'type': 'boolean', 'description': "true for two cylinders on a manifold, filled or breathed together: doubles the volume. Default: the preset's, else false."}, 'pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Gauge pressure now (bar or psi, per units), 0 to 500 bar (7252 psi).'}, 'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Helium % now, 0 to 100. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Oxygen % of the gas in the cylinder now, as analysed, 0 to 100. Air is 21; an empty cylinder is 21 at pressure 0.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0.5, 'description': "Metric: water volume of ONE cylinder in litres, the number stamped on the neck. Imperial: rated capacity in ft³ at rated_pressure (an AL80 is 77.4). Default: the preset's, else an AL80 (11.1 L)."}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 725, 'description': "Imperial only: the psi the capacity is rated at. Default: the preset's, else 3000. Ignored on metric."}}, 'description': 'The cylinder now: analysed mix, gauge pressure and size.', 'additionalProperties': False}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Altitude (m or ft, per units), 0 to 10000 m (32800 ft). Lowers the surface pressure the math adds to gauge readings. Default 0.'}, 'bleed_step': {'type': 'number', 'maximum': 500, 'minimum': 1, 'description': 'Gauge step the bleed pressure rounds down to (bar or psi). Default 5 bar (100 psi).'}, 'injection_order': {'enum': ['he_first', 'o2_first'], 'type': 'string', 'description': 'Order the feeds join the intake: he_first (helium, then oxygen; the default) or o2_first. Picks which intermediate analyzer reading the text leads with; both are returned.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'feasible', 'ratios', 'notes', 'spoken_summary', 'safety_notice'], 'properties': {'blend': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct'], 'properties': {'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}}, 'description': 'The intake stream the whole fill must be.', 'additionalProperties': False}, 'error': {'type': 'object', 'required': ['code', 'key', 'reason'], 'properties': {'key': {'type': 'string'}, 'code': {'type': 'string'}, 'reason': {'type': 'string'}}, 'additionalProperties': False}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'ratios': {'type': 'array', 'items': {'type': 'object', 'required': ['gas', 'fraction_pct'], 'properties': {'gas': {'enum': ['air', 'oxygen', 'helium'], 'type': 'string'}, 'fraction_pct': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'Share of the intake flow per feed.'}, 'feasible': {'type': 'boolean'}, 'safety_notice': {'type': 'string'}, 'bleed_pressure': {'type': 'number', 'description': 'Bleed the cylinder to this gauge pressure first; absent when no bleed is needed.'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}, 'analyzer_final_pct': {'type': 'number', 'description': 'Oxygen % the analyzer reads on the finished stream.'}, 'analyzer_intermediate_he_first_pct': {'type': 'number', 'description': 'He first: oxygen % after helium joins the air, before oxygen.'}, 'analyzer_intermediate_o2_first_pct': {'type': 'number', 'description': 'Oâ\x82\x82 first: oxygen % after oxygen joins the air, before helium.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'gear': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'weight'], 'properties': {'label': {'type': 'string', 'maxLength': 40, 'description': 'What it is: belt, trim pockets, backplate, torch.'}, 'weight': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': 'In-water weight, kg (lb), positive when it sinks (a 6 kg belt is 6).'}, 'ditchable': {'type': 'boolean', 'description': 'Can be dropped in an emergency. Default false.'}}, 'additionalProperties': False}, 'maxItems': 20, 'description': 'Lead and other gear. Omit to get the lead the rig needs from zero.'}, 'wing': {'type': 'object', 'properties': {'lift': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': 'Wing lift, kg (lb). Default 16 kg.'}, 'smb_lift': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': 'Emergency lift from an SMB, kg (lb); omit for none.'}, 'lift_bag_lift': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': 'Emergency lift from a lift bag, kg (lb); omit for none.'}, 'redundant_bladder_lift': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': 'Second bladder lift, kg (lb); omit for none.'}}, 'description': 'Buoyancy devices.', 'additionalProperties': False}, 'diver': {'type': 'object', 'properties': {'age': {'type': 'integer', 'maximum': 100, 'minimum': 10, 'description': 'Age in years.'}, 'sex': {'enum': ['male', 'female'], 'type': 'string', 'description': 'male or female, for the lung and body-fat estimate.'}, 'height': {'type': 'number', 'maximum': 250, 'minimum': 39, 'description': 'Height, cm (in imperial): 100 to 250 cm (39.4 to 98.4 in).'}, 'weight': {'type': 'number', 'maximum': 552, 'minimum': 20, 'description': 'Body weight, kg (lb imperial): 20 to 250 kg (44.1 to 551.2 lb).'}, 'body_offset': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': 'Personal buoyancy from an in-water weight check, kg (lb), positive floats. Wins over the estimate.'}, 'body_fat_pct': {'type': 'number', 'maximum': 60, 'minimum': 3, 'description': 'Body fat %, else estimated from height and weight.'}, 'body_offset_water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}}, 'description': 'The diver. With no body_offset but height, weight, age and sex, body buoyancy is estimated; with neither it is taken as neutral.', 'additionalProperties': False}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'exposure': {'type': 'object', 'required': ['type'], 'properties': {'cut': {'enum': ['full', 'shorty', 'farmer_john'], 'type': 'string', 'description': 'Wetsuit cut: full (default), shorty or farmer_john.'}, 'type': {'enum': ['none', 'wetsuit', 'drysuit'], 'type': 'string', 'description': 'none, wetsuit or drysuit.'}, 'hood_mm': {'type': 'number', 'maximum': 10, 'minimum': 0, 'description': 'Hood thickness in mm; 0 or omitted for none.'}, 'vest_mm': {'type': 'number', 'maximum': 10, 'minimum': 0, 'description': 'Vest or hooded vest thickness in mm; 0 or omitted for none.'}, 'neoprene': {'enum': ['soft', 'standard', 'old'], 'type': 'string', 'description': 'Wetsuit foam: soft (new, compresses most), standard (default) or old (about 20% less lift).'}, 'gloves_mm': {'type': 'number', 'maximum': 10, 'minimum': 0, 'description': 'Glove thickness in mm; 0 or omitted for none.'}, 'undersuit': {'enum': ['light', 'medium', 'heavy'], 'type': 'string', 'description': 'Drysuit undersuit: light, medium (default) or heavy.'}, 'booties_mm': {'type': 'number', 'maximum': 10, 'minimum': 0, 'description': 'Bootie thickness in mm; 0 or omitted for none.'}, 'custom_lift': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': 'Measured suit lift at the surface, kg (lb), instead of the model.'}, 'thickness_mm': {'type': 'number', 'maximum': 10, 'minimum': 0, 'description': 'Wetsuit neoprene thickness in mm (both unit systems), 0 to 10. Default 5.'}}, 'description': 'Exposure suit. Default a 5 mm full wetsuit.', 'additionalProperties': False}, 'cylinders': {'type': 'array', 'items': {'type': 'object', 'required': ['role'], 'properties': {'role': {'enum': ['single', 'twinset', 'sidemount', 'stage'], 'type': 'string', 'description': 'single, twinset (two on a manifold), sidemount (a pair, one each side) or stage (one slung cylinder; one entry per stage).'}, 'rigging': {'type': 'boolean', 'description': 'Count bands, manifold or stage hardware. Default true for twinset, sidemount and stage.'}, 'cylinder': {'type': 'string', 'maxLength': 40, 'description': 'A lookup_cylinders id (al80, steel12-232, hp100) or a plan_dive preset (al80, twin_12l, stage_11l). For twinset and sidemount name ONE cylinder of the pair. Default al80.'}, 'regulator': {'enum': ['travel', 'standard', 'cold_water', 'none'], 'type': 'string', 'description': 'Regulator on each cylinder: travel, standard, cold_water or none. Default by role: standard (single, sidemount), cold_water (twinset), travel (stage).'}, 'helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Helium % of the gas in it. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Oxygen % of the gas in it. Default 21.'}, 'cylinder_lead': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': 'Lead fixed to each cylinder (a tail or V-weight), kg (lb). Default 0.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0.5, 'description': 'For a cylinder not in the data: water litres of one cylinder, or ft³ at rated_pressure on imperial. Needs empty_buoyancy.'}, 'empty_buoyancy': {'type': 'number', 'maximum': 250, 'minimum': -100, 'description': "For a cylinder not in the data: buoyancy of one empty cylinder with its valve, kg (lb imperial), negative when it sinks. From the maker's sheet."}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 725, 'description': 'Imperial only, with cylinder_size: the psi its ft³ is rated at. Default 3000.'}, 'start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Fill at the start (bar or psi). Default: the preset fill, else the dataset working pressure.'}}, 'additionalProperties': False}, 'maxItems': 6, 'minItems': 1, 'description': 'Cylinders on the rig. Default one single AL80.'}, 'target_depth': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Deepest point of the dive (m or ft), where full cylinders are checked. Default 30 m (98 ft).'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'water', 'weight_adjustment', 'end_of_dive', 'start_of_dive', 'failure_scenarios', 'advisories', 'cylinders', 'assumptions', 'spoken_summary', 'safety_notice'], 'properties': {'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'cylinders': {'type': 'array', 'items': {'type': 'object', 'required': ['role', 'count', 'cylinder', 'name', 'start_pressure', 'oxygen_pct', 'helium_pct'], 'properties': {'name': {'type': 'string'}, 'role': {'type': 'string'}, 'count': {'type': 'number'}, 'cylinder': {'type': 'string'}, 'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}, 'start_pressure': {'type': 'number'}}, 'additionalProperties': False}}, 'advisories': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'severity', 'title', 'detail'], 'properties': {'key': {'type': 'string'}, 'title': {'type': 'string'}, 'detail': {'type': 'string'}, 'severity': {'enum': ['critical', 'warning'], 'type': 'string'}}, 'additionalProperties': False}}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'end_of_dive': {'type': 'object', 'required': ['status', 'depth', 'net_buoyancy', 'breakdown', 'message', 'explanation'], 'properties': {'depth': {'type': 'number'}, 'action': {'type': 'string'}, 'status': {'enum': ['pass', 'warning', 'fail'], 'type': 'string'}, 'message': {'type': 'string'}, 'breakdown': {'type': 'object', 'required': ['gas', 'suit_lift', 'cylinders', 'gear', 'ditchable', 'body'], 'properties': {'gas': {'type': 'number'}, 'body': {'type': 'number'}, 'gear': {'type': 'number'}, 'cylinders': {'type': 'number'}, 'ditchable': {'type': 'number'}, 'suit_lift': {'type': 'number'}}, 'additionalProperties': False}, 'explanation': {'type': 'string'}, 'net_buoyancy': {'type': 'number', 'description': 'Positive floats, negative sinks.'}}, 'additionalProperties': False}, 'safety_notice': {'type': 'string'}, 'start_of_dive': {'type': 'object', 'required': ['status', 'depth', 'net_buoyancy', 'breakdown', 'message', 'explanation'], 'properties': {'depth': {'type': 'number'}, 'action': {'type': 'string'}, 'status': {'enum': ['pass', 'warning', 'fail'], 'type': 'string'}, 'message': {'type': 'string'}, 'breakdown': {'type': 'object', 'required': ['gas', 'suit_lift', 'cylinders', 'gear', 'ditchable', 'body'], 'properties': {'gas': {'type': 'number'}, 'body': {'type': 'number'}, 'gear': {'type': 'number'}, 'cylinders': {'type': 'number'}, 'ditchable': {'type': 'number'}, 'suit_lift': {'type': 'number'}}, 'additionalProperties': False}, 'explanation': {'type': 'string'}, 'net_buoyancy': {'type': 'number', 'description': 'Positive floats, negative sinks.'}}, 'additionalProperties': False}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}, 'failure_scenarios': {'type': 'array', 'items': {'type': 'object', 'required': ['scenario', 'status', 'can_recover', 'name', 'message', 'explanation', 'recovery_options'], 'properties': {'name': {'type': 'string'}, 'status': {'enum': ['pass', 'warning', 'fail'], 'type': 'string'}, 'message': {'type': 'string'}, 'scenario': {'enum': ['flooded_suit', 'wing_failure', 'lost_stage'], 'type': 'string'}, 'can_recover': {'type': 'boolean'}, 'explanation': {'type': 'string'}, 'ditch_required': {'type': 'number'}, 'recovery_options': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'weight_adjustment': {'type': 'object', 'required': ['weight', 'action'], 'properties': {'action': {'enum': ['add', 'remove', 'none'], 'type': 'string'}, 'weight': {'type': 'number'}}, 'description': 'Lead to add or remove to be neutral at the end of the dive, to 0.5 kg.', 'additionalProperties': False}, 'flooded_suit_ditch': {'type': 'number', 'description': 'Ditchable weight needed to recover from a flooded drysuit.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['depth'], 'properties': {'depth': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Depth in m (metric) or ft (imperial), 1 to 200 m (3 to 650 ft). Required.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Surface altitude (m or ft, per units), 0 to 10000 m (0 to 32800 ft). Default 0.'}, 'helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Helium percentage, 0 to 95. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Oxygen percentage of the gas, 5 to 100. Default 21 (air). Example: 32 for EANx32.'}, 'bottom_time_min': {'type': 'number', 'maximum': 300, 'minimum': 1, 'description': 'Planned minutes at the depth after the descent, 1 to 300. When given, the answer says whether it is within the no-stop time and by how much. Example: 25 for "is 25 min at 30 m ok?".'}, 'gradient_factors': {'type': 'object', 'properties': {'low': {'type': 'number', 'maximum': 100, 'minimum': 10, 'description': 'GF low, percent, 10 to 100. Default 50.'}, 'high': {'type': 'number', 'maximum': 100, 'minimum': 10, 'description': 'GF high, percent, 10 to 100. Sets the no-stop limit. Default 80.'}}, 'description': 'Gradient factors. The no-stop time is computed at GF high.', 'additionalProperties': False}, 'previous_share_url': {'type': 'string', 'maxLength': 8000, 'description': "Repetitive dive: the share link of the previous dive's plan_dive or check_no_deco result. Send with surface_interval_min."}, 'surface_interval_min': {'type': 'number', 'maximum': 1440, 'minimum': 15, 'description': 'Repetitive dive: surface interval since the previous dive, 15 to 1440 minutes. Send with previous_share_url.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'depth', 'mix', 'no_stop_minutes', 'gf', 'ppo2', 'mod_1_4_bar', 'warnings', 'share_url', 'spoken_summary', 'safety_notice'], 'properties': {'gf': {'type': 'string', 'description': 'Gradient factors used, low/high.'}, 'mix': {'type': 'string', 'description': 'Gas as Oâ\x82\x82/He, e.g. 21/0.'}, 'ppo2': {'type': 'number', 'description': 'PPOâ\x82\x82 of the gas at the depth, bar.'}, 'depth': {'type': 'number', 'description': 'Depth, as given.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'verdict': {'enum': ['within', 'over'], 'type': 'string', 'description': 'With bottom_time_min: within or over the no-stop time.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Titles of the plan warnings at this depth (hyperoxia, hypoxia, density, END).'}, 'share_url': {'type': 'string', 'description': 'Dive Kit link to a 1-minute plan at this depth.'}, 'margin_min': {'type': ['number', 'null'], 'description': 'With bottom_time_min: minutes to spare (within) or over (over). null: no limit within the model.'}, 'mod_1_4_bar': {'type': 'number', 'description': 'MOD of the gas at 1.4 bar.'}, 'planned_min': {'type': 'number', 'description': 'bottom_time_min, as given.'}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}, 'no_stop_minutes': {'type': ['number', 'null'], 'description': 'Minutes at the depth after the descent before a stop is required, at GF high. 0: a stop is already required on arrival. null: no limit within the model.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['quantity', 'value', 'from', 'to'], 'properties': {'to': {'enum': ['bar', 'psi', 'mpa', 'l', 'cuft', 'm', 'ft', 'c', 'f', 'k', 'kg', 'lb', 'l_min', 'cuft_min', 'bar_min', 'psi_min'], 'type': 'string', 'description': 'Unit to convert to, from the same list as from: bar, psi, mpa, l, cuft, m, ft, c, f, k, kg, lb, l_min, cuft_min, bar_min, psi_min.'}, 'from': {'enum': ['bar', 'psi', 'mpa', 'l', 'cuft', 'm', 'ft', 'c', 'f', 'k', 'kg', 'lb', 'l_min', 'cuft_min', 'bar_min', 'psi_min'], 'type': 'string', 'description': 'Unit of value: bar, psi, mpa (pressure); l, cuft (volume); m, ft (depth); c, f, k (temperature); kg, lb (weight); l_min, cuft_min, bar_min, psi_min (breathing_rate).'}, 'value': {'type': 'number', 'maximum': 1000000, 'minimum': -1000000, 'description': 'The figure to convert: 0 or more, except a temperature.'}, 'quantity': {'enum': ['pressure', 'volume', 'depth', 'temperature', 'weight', 'breathing_rate'], 'type': 'string', 'description': 'Kind of figure: pressure, volume, depth, temperature, weight or breathing_rate.'}, 'cylinder_size': {'type': 'number', 'maximum': 60, 'minimum': 0.5, 'description': 'Water volume in litres of the cylinder a bar_min or psi_min rate is read on (both cylinders of a twinset, e.g. 24). Required to convert between a litres rate (l_min, cuft_min) and bar_min or psi_min; bar_min to psi_min needs none.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['quantity', 'value', 'from', 'to', 'result', 'spoken_summary', 'safety_notice'], 'properties': {'to': {'enum': ['bar', 'psi', 'mpa', 'l', 'cuft', 'm', 'ft', 'c', 'f', 'k', 'kg', 'lb', 'l_min', 'cuft_min', 'bar_min', 'psi_min'], 'type': 'string'}, 'from': {'enum': ['bar', 'psi', 'mpa', 'l', 'cuft', 'm', 'ft', 'c', 'f', 'k', 'kg', 'lb', 'l_min', 'cuft_min', 'bar_min', 'psi_min'], 'type': 'string'}, 'note': {'type': 'string'}, 'value': {'type': 'number'}, 'factor': {'type': 'number', 'description': 'Multiply by this to convert (absent for temperature, which has an offset).'}, 'result': {'type': 'number', 'description': 'The converted figure, to 4 decimals.'}, 'quantity': {'enum': ['pressure', 'volume', 'depth', 'temperature', 'weight', 'breathing_rate'], 'type': 'string'}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['receiver', 'donor'], 'properties': {'donor': {'type': 'object', 'required': ['oxygen_pct', 'pressure'], 'properties': {'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, as in plan_dive: al80, al40, al63, hp80, hp100, hp120, lp85, s80, single_10l, single_12l, single_15l, twin_10l, twin_12l, twin_15l, stage_11l, stage_7l, o2_3l, dil_3l. twin_ presets are a manifolded pair.'}, 'twinset': {'type': 'boolean', 'description': "true for two cylinders on a manifold, filled or breathed together: doubles the volume. Default: the preset's, else false."}, 'pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Gauge pressure now (bar or psi, per units), 0 to 500 bar (7252 psi).'}, 'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Helium % now, 0 to 100. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Oxygen % of the gas in the cylinder now, as analysed, 0 to 100. Air is 21; an empty cylinder is 21 at pressure 0.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0.5, 'description': "Metric: water volume of ONE cylinder in litres, the number stamped on the neck. Imperial: rated capacity in ft³ at rated_pressure (an AL80 is 77.4). Default: the preset's, else an AL80 (11.1 L)."}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 725, 'description': "Imperial only: the psi the capacity is rated at. Default: the preset's, else 3000. Ignored on metric."}}, 'description': 'The cylinder the gas comes from: analysed mix, gauge pressure, size.', 'additionalProperties': False}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'target': {'type': 'object', 'required': ['oxygen_pct'], 'properties': {'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Helium % wanted in the receiver. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Oxygen % wanted in the receiver.'}}, 'description': 'A mix to aim the receiver at; the result says where to close the valve, or why it is out of reach.', 'additionalProperties': False}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Altitude (m or ft, per units), 0 to 10000 m (32800 ft). Lowers the surface pressure the math adds to gauge readings. Default 0.'}, 'receiver': {'type': 'object', 'required': ['oxygen_pct', 'pressure'], 'properties': {'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, as in plan_dive: al80, al40, al63, hp80, hp100, hp120, lp85, s80, single_10l, single_12l, single_15l, twin_10l, twin_12l, twin_15l, stage_11l, stage_7l, o2_3l, dil_3l. twin_ presets are a manifolded pair.'}, 'twinset': {'type': 'boolean', 'description': "true for two cylinders on a manifold, filled or breathed together: doubles the volume. Default: the preset's, else false."}, 'pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Gauge pressure now (bar or psi, per units), 0 to 500 bar (7252 psi).'}, 'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Helium % now, 0 to 100. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Oxygen % of the gas in the cylinder now, as analysed, 0 to 100. Air is 21; an empty cylinder is 21 at pressure 0.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0.5, 'description': "Metric: water volume of ONE cylinder in litres, the number stamped on the neck. Imperial: rated capacity in ft³ at rated_pressure (an AL80 is 77.4). Default: the preset's, else an AL80 (11.1 L)."}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 725, 'description': "Imperial only: the psi the capacity is rated at. Default: the preset's, else 3000. Ignored on metric."}}, 'description': 'The cylinder being topped up: analysed mix, gauge pressure, size.', 'additionalProperties': False}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'feasible', 'settled_pressure', 'receiver', 'donor', 'gas_moved_pressure', 'equalized_mix', 'warnings', 'notes', 'spoken_summary', 'safety_notice'], 'properties': {'plan': {'type': 'object', 'required': ['reachable', 'reason_code', 'reason', 'stop_pressure', 'achieved', 'donor_leftover'], 'properties': {'reason': {'type': 'string'}, 'achieved': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct'], 'properties': {'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}}, 'additionalProperties': False}, 'reachable': {'type': 'boolean'}, 'reason_code': {'type': 'string'}, 'stop_pressure': {'type': 'number', 'description': "Close the valve when the receiver's gauge reads this."}, 'donor_leftover': {'type': 'number'}}, 'additionalProperties': False}, 'donor': {'type': 'object', 'required': ['role', 'pressure_before', 'pressure_after', 'oxygen_pct_after', 'helium_pct_after'], 'properties': {'role': {'enum': ['received', 'donated', 'unchanged'], 'type': 'string'}, 'pressure_after': {'type': 'number'}, 'pressure_before': {'type': 'number'}, 'helium_pct_after': {'type': 'number'}, 'oxygen_pct_after': {'type': 'number'}}, 'additionalProperties': False}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'feasible': {'type': 'boolean'}, 'receiver': {'type': 'object', 'required': ['role', 'pressure_before', 'pressure_after', 'oxygen_pct_after', 'helium_pct_after'], 'properties': {'role': {'enum': ['received', 'donated', 'unchanged'], 'type': 'string'}, 'pressure_after': {'type': 'number'}, 'pressure_before': {'type': 'number'}, 'helium_pct_after': {'type': 'number'}, 'oxygen_pct_after': {'type': 'number'}}, 'additionalProperties': False}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'equalized_mix': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct'], 'properties': {'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}}, 'description': "The receiver's mix at full equalization.", 'additionalProperties': False}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}, 'settled_pressure': {'type': 'number', 'description': 'Where both gauges meet if the valve stays open.'}, 'gas_moved_pressure': {'type': 'number', 'description': "How far the receiver's gauge rose."}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['levels', 'cylinders'], 'properties': {'ccr': {'type': 'object', 'properties': {'o2_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': 'Oxygen cylinder: litres (metric) or ft³ rated at 3000 psi (imperial). Default 3 L.'}, 'setpoints': {'type': 'object', 'properties': {'deco': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Deco setpoint in bar, used where ccr_deco_schedule has no step. Default 1.4.'}, 'bottom': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Bottom setpoint in bar, the level default. Default 1.0.'}, 'descent': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Descent setpoint in bar. Default 0.7.'}}, 'description': 'Loop setpoints in bar.', 'additionalProperties': False}, 'loop_volume': {'type': 'number', 'maximum': 15, 'minimum': 2, 'description': 'Loop volume, litres in both unit systems, 2 to 15. Default 6.'}, 'diluent_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': 'Diluent cylinder: litres (metric) or ft³ rated at 3000 psi (imperial). Default 3 L.'}, 'o2_start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Oxygen cylinder fill (bar or psi). Default 232 bar (3365 psi).'}, 'diluent_helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Onboard diluent helium percent. Default 0.'}, 'diluent_oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Onboard diluent oxygen percent. Default 21.'}, 'descent_switch_depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft) where the descent setpoint hands over to bottom, first descent only. Default 18 m (60 ft).'}, 'diluent_breathable_oc': {'type': 'boolean', 'description': 'true if the BOV or a regulator can breathe the onboard diluent open circuit. It then joins the bailout pool last. Default false.'}, 'diluent_start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Diluent cylinder fill (bar or psi). Default 232 bar (3365 psi).'}}, 'description': 'The rebreather (mode ccr only).', 'additionalProperties': False}, 'mode': {'enum': ['oc', 'ccr'], 'type': 'string', 'description': 'oc (open circuit, default) or ccr (closed-circuit rebreather). Set ccr for every rebreather plan: the ccr, ccr_deco_schedule, ccr_dilout_switches and bailout fields need it. On ccr, `cylinders` are the open-circuit bailout gases; the rig itself is in `ccr`.'}, 'ppo2': {'type': 'object', 'properties': {'min': {'type': 'number', 'maximum': 0.21, 'minimum': 0.16, 'description': 'Lowest PPOâ\x82\x82 in bar before a hypoxia warning, 0.16 to 0.21. Warnings only. Default 0.18.'}, 'max_all': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'One PPOâ\x82\x82 cap in bar for every gas, 1.0 to 1.6 (e.g. 1.4 for recreational nitrox). Sets all three bands; a band field given too wins for its band.'}, 'max_28_to_44pct_o2': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases from 28% to under 45% Oâ\x82\x82, 1.0 to 1.6. Default 1.5.'}, 'max_under_28pct_o2': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases under 28% Oâ\x82\x82, 1.0 to 1.6. Sets their MOD and switch depth. Default 1.4.'}, 'max_45pct_o2_and_up': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases of 45% Oâ\x82\x82 and over, 1.0 to 1.6. Default 1.6.'}}, 'description': 'PPOâ\x82\x82 limits in bar.', 'additionalProperties': False}, 'limit': {'enum': ['reserve', 'tts', 'no_deco'], 'type': 'string', 'description': 'reserve (default): longest time that leaves every cylinder at or above its reserve. tts: longest time whose time to surface fits tts_budget_min. no_deco: longest time with no required stop at GF high (gas is not checked).'}, 'rates': {'type': 'object', 'properties': {'descent': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Descent rate (m/min or ft/min), 1 to 100 m/min. Default 20 m/min (66 ft/min).'}, 'ascent_deep': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Ascent rate below rate_change_depth (m/min or ft/min), 1 to 100 m/min. Default 9 m/min (30 ft/min).'}, 'ascent_shallow': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Ascent rate from rate_change_depth to the surface (m/min or ft/min), 1 to 100 m/min. Default 3 m/min (10 ft/min).'}, 'rate_change_depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth where the ascent rate changes (m or ft), 3 to 200 m. Default 6 m (20 ft).'}}, 'description': 'Ascent and descent rates, per units.', 'additionalProperties': False}, 'stops': {'type': 'object', 'properties': {'stop_spacing': {'type': 'number', 'description': 'Distance between stops: 3, 6 or 9 m; 10, 20 or 30 ft. Default 3 m (10 ft).'}, 'time_rounding': {'enum': ['1s', '30s', '1min'], 'type': 'string', 'description': '1s, 30s or 1min. Applied inside the engine; a stop is never shorter than the obligation. Default 1min.'}, 'last_stop_depth': {'type': 'number', 'description': 'Final stop depth: 3, 4.5 or 6 m; 10, 15 or 20 ft. Default 6 m (20 ft).'}}, 'description': 'Stop grid and stop-time rounding.', 'additionalProperties': False}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, L/min, °C) or imperial (ft, psi, ft³, ft³/min, °F). Applies to every input and output value except PPOâ\x82\x82/setpoints (bar), mixes (%), density (g/L). Default metric.'}, 'levels': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'bottom_time_min'], 'properties': {'gas': {'type': 'string', 'maxLength': 12, 'description': 'Cylinder id this level breathes, or "auto" (default): the richest gas legal at this depth by PPOâ\x82\x82 cap, hypoxic floor and density limit. On ccr, auto means the loop on the onboard diluent.'}, 'depth': {'type': 'number', 'maximum': 700, 'minimum': 0, 'description': 'Level depth (m or ft, per units). 1 to 200 m (3 to 650 ft). Required.'}, 'breathe': {'enum': ['loop', 'oc'], 'type': 'string', 'description': 'ccr only. loop (default) or oc: dive this level open circuit on `gas`.'}, 'diluent': {'type': 'string', 'maxLength': 12, 'description': 'ccr only. "onboard" (default) or a cylinder id to breathe through the loop as a dilout on this level.'}, 'setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'ccr only. Loop PPOâ\x82\x82 for this level in bar, 0.4 to 1.6. Default ccr.setpoints.bottom.'}, 'bottom_time_min': {'type': 'number', 'maximum': 360, 'minimum': 0, 'description': 'Minutes at this depth, excluding the descent to it (unless behavior.include_travel_in_level_time is true). 0 to 360. 0 = arrival only: passes through this depth on this gas, used for a no-stop check or a travel-gas leg. Required.'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'Dive levels in the order dived, 1 to 20. The first is level_number 1.'}, 'bailout': {'type': 'object', 'properties': {'view': {'enum': ['loop', 'end_of_profile', 'after_level', 'at_run_time', 'on_ascent'], 'type': 'string', 'description': 'ccr: which ascent the table shows. loop (default), end_of_profile, after_level, at_run_time, on_ascent. The worst-case bailout check runs on every view.'}, 'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'For on_ascent: depth (m or ft) the diver leaves the loop on the final ascent.'}, 'level_number': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'For after_level: the level (1-based) the diver bails at the end of.'}, 'run_time_min': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'For at_run_time: minutes on the Run clock.'}}, 'description': 'ccr only: the bailout view.', 'additionalProperties': False}, 'reserve': {'type': 'object', 'properties': {'rule': {'enum': ['thirds', 'fourths', 'fifths', 'sixths', 'fixed'], 'type': 'string', 'description': 'thirds, fourths, fifths, sixths or fixed. Default thirds. Below 50 bar (725 psi) is always critical.'}, 'fixed_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Reserve for rule fixed (bar or psi, per units). Default 50 bar (725 psi).'}}, 'description': 'Gas reserve rule. Moves the gas status and warnings, never the stops.', 'additionalProperties': False}, 'audience': {'enum': ['beginner', 'recreational', 'technical'], 'type': 'string', 'description': 'Optional: who the answer is for, from the conversation. beginner: new to deco, plain words. recreational (default): some training. technical: trained deco or CCR diver, terms and tables. Shapes the wording only, never a number.'}, 'behavior': {'type': 'object', 'properties': {'o2_narcotic': {'type': 'boolean', 'description': 'Count oxygen in END. END and warnings only. Default false.'}, 'stay_on_loop': {'type': 'boolean', 'description': 'ccr: true (default) keeps the whole ascent on the loop; false lets an OC deco gas take over where its PPOâ\x82\x82 is higher. Not carried in share links.'}, 'include_travel_in_level_time': {'type': 'boolean', 'description': 'true: level time includes the descent to it (dive-computer runtime style). Default false.'}}, 'description': 'Profile and model switches.', 'additionalProperties': False}, 'scenario': {'type': 'string', 'maxLength': 40, 'description': 'Search so this one scenario still meets the limit: deeper_3m, deeper_5m (imperial: deeper_10ft, deeper_20ft), longer_3min, longer_5min, deeper_and_longer_3, deeper_and_longer_5, lost:<cylinder id>, custom:<name>, or a variant (gf:40/85, last_stop:3, stop_rounding:30s). Default base. The answer is still a base-plan bottom time.'}, 'cylinders': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'oxygen_pct'], 'properties': {'id': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Short name used by levels and contingencies, 1 to 12 letters, digits, _ or -, e.g. back, s50, o2. Unique.'}, 'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, rated_pressure, twinset and the fill (explicit fields win). al80/s80: aluminium 80, 11.1 L, 3000 psi. al40, al63: aluminium 40/63, 3000 psi. hp80, hp100, hp120: US high-pressure steel, 3442 psi. lp85: US low-pressure steel, 2640 psi. single_10l, single_12l, single_15l: one EU steel cylinder at 232 bar. twin_10l, twin_12l, twin_15l: back-mounted doubles, 232 bar each. stage_11l: aluminium stage (AL80 size), 200 bar. stage_7l: 7 L stage, 200 bar. o2_3l, dil_3l: 3 L rebreather cylinder, 232 bar.'}, 'twinset': {'type': 'boolean', 'description': "true for back-mounted doubles or a sidemount pair breathed as one supply: doubles the gas at the same pressure. Default: the preset's, else false."}, 'helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Helium percent, 0 to 95, oxygen_pct + helium_pct at most 100. Trimix 18/45 is 45. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Oxygen percent, 5 to 100. Air is 21, EANx50 is 50, trimix 18/45 is 18.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': '12 = one 12 L cylinder (metric). 77.4 = an AL80 in ft³ (imperial, with rated_pressure 3000). Metric: water volume of ONE cylinder in litres, the number stamped on the neck, 1 to 25.5. Imperial: rated capacity in ft³ from the spec sheet (an AL80 holds less than its name), 1 to 400. Or pass preset. Default with neither: an AL80 (11.1 L, 77.4 ft³ at 3000 psi).'}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': "Imperial only: the working pressure the capacity is rated at, psi, 725 to 7252 (3000 for an AL80). Default: the preset's, else 3000. Ignored on metric."}, 'start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': "Pressure in the cylinder at the start of the dive (bar or psi, per units), 0 to 500 bar (0 to 7252 psi). Default: the preset's fill, else 206.84 bar (3000 psi)."}, 'reserve_pressure': {'type': 'number', 'maximum': 4351, 'minimum': 0, 'description': 'Custom reserve for this cylinder (bar or psi, per units), 5 to 300 bar (50 to 4351 psi). Default: the reserve rule. Moves warnings and find_max_bottom_time, never the stops.'}, 'exclude_from_deco': {'type': 'boolean', 'description': 'true keeps this cylinder out of automatic ascent switching (pony, buddy bottle). Still priced; a level can still name it. Default false.'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': 'Every open-circuit cylinder carried: back gas, stages, deco gases; on ccr, bailout gases. 1 to 10. Give preset or cylinder_size and start_pressure when known; omitted ones default (an AL80, 11.1 L at 3000 psi) and the result marks them.'}, 'modifiers': {'type': 'object', 'properties': {'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Deco SAC override for the whole plan (L/min or ft³/min). Default gas_consumption.deco_sac.'}, 'delay_min': {'type': 'number', 'maximum': 60, 'minimum': 0, 'description': 'A hold at depth before the ascent starts, 0 to 60 minutes. Moves the schedule. Default 0.'}, 'stress_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Hard-breathing surface rate, SAC (L/min or ft³/min, per units), from the end of the bottom (on bailout: from leaving the loop), gas only. Needs stress_minutes or stress_whole_ascent.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Working SAC override for the whole plan (L/min or ft³/min). Default gas_consumption.working_sac.'}, 'stress_minutes': {'type': 'number', 'maximum': 60, 'minimum': 1, 'description': 'Minutes the stress_sac burst lasts, 1 to 60.'}, 'stress_whole_ascent': {'type': 'boolean', 'description': 'true: the stress_sac burst lasts to the surface. Default false.'}}, 'description': 'Plan modifiers: a stress breathing burst (gas only) and a delay before the ascent (moves the schedule).', 'additionalProperties': False}, 'plan_name': {'type': 'string', 'description': 'Short human label shown in the approval card; fill it first, e.g. 40m 20min air+EANx50. Also titles the plan table and share link, which keep its first 24 characters (a longer name is cut, never refused).'}, 'gas_switch': {'type': 'object', 'properties': {'switch_at': {'enum': ['mod', 'stop'], 'type': 'string', 'description': 'mod: switch at the deco gas MOD (default). stop: at the next stop.'}, 'switch_time_s': {'type': 'number', 'maximum': 300, 'minimum': 0, 'description': 'Seconds held at each OC switch on the old gas, 0 to 300 in 30 s steps. Default 0.'}, 'when_cylinder_empty': {'enum': ['show_shortfall', 'switch_gas'], 'type': 'string', 'description': 'show_shortfall (default): stay on it and report how much more gas is needed. switch_gas: move to the richest safe gas left.'}}, 'description': 'Gas switching.', 'additionalProperties': False}, 'repetitive': {'type': 'object', 'required': ['surface_interval_min'], 'properties': {'previous_share_url': {'type': 'string', 'maxLength': 8000, 'description': "The share link of the previous dive's plan_dive result. Its tissue loading seeds this dive."}, 'surface_interval_min': {'type': 'number', 'maximum': 1440, 'minimum': 15, 'description': 'Surface interval since the previous dive, 15 to 1440 minutes.'}}, 'description': 'Repetitive dive: the previous dive and the surface interval.', 'additionalProperties': False}, 'descent_gas': {'type': 'string', 'maxLength': 12, 'description': "oc only. Cylinder id of a travel gas for the descent, for a hypoxic bottom mix (e.g. 12/60) that cannot be breathed near the surface. When level 1 is deeper than that gas's MOD, a 0-minute level on it at its MOD (whole m or ft) is added before level 1, and the result numbers that level first. Default none."}, 'environment': {'type': 'object', 'properties': {'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Surface altitude (m or ft, per units), 0 to 10000 m (0 to 32800 ft). Default 0.'}, 'temperature': {'type': 'number', 'maximum': 104, 'minimum': -2, 'description': 'Water temperature for gas density only, -2 to 40 °C (28 to 104 °F). Never moves stops. Default 15 °C (59 °F).'}}, 'description': 'Water and altitude.', 'additionalProperties': False}, 'level_number': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': '1-based level to extend. Default the deepest (last on a tie).'}, 'contingencies': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 24, 'minLength': 1, 'description': 'Name of this contingency, 1 to 24 characters. Request it with scenarios "custom:<name>". Unique.'}, 'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Deco SAC for this contingency only (L/min or ft³/min, per units). Default gas_consumption.deco_sac.'}, 'delay_min': {'type': 'number', 'maximum': 60, 'minimum': 0, 'description': 'A hold at depth before the ascent starts, 0 to 60 minutes. Moves the schedule. Default 0.'}, 'stress_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Hard-breathing surface rate, SAC (L/min or ft³/min, per units), from the end of the bottom (on bailout: from leaving the loop), gas only. Needs stress_minutes or stress_whole_ascent.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Working SAC for this contingency only (L/min or ft³/min, per units). Default gas_consumption.working_sac.'}, 'depth_change': {'type': 'number', 'maximum': 100, 'minimum': -100, 'description': 'Depth added to that level (m or ft, per units), -30 to 30 m (-100 to 100 ft). Default 0.'}, 'level_number': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Level number (1-based) the depth and time changes apply to. Default the deepest (last on a tie).'}, 'lost_cylinders': {'type': 'string', 'maxLength': 130, 'description': 'Cylinder ids lost in this contingency, comma-separated, e.g. "s50,o2". Default none.'}, 'stress_minutes': {'type': 'number', 'maximum': 60, 'minimum': 1, 'description': 'Minutes the stress_sac burst lasts, 1 to 60.'}, 'time_change_min': {'type': 'number', 'maximum': 60, 'minimum': -60, 'description': 'Minutes added to that level, -60 to 60. Default 0.'}, 'fails_after_level': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Level number (1-based) after which the lost cylinders are gone. Omit: they are never carried.'}, 'stress_whole_ascent': {'type': 'boolean', 'description': 'true: the stress_sac burst lasts to the surface. Default false.'}}, 'additionalProperties': False}, 'maxItems': 6, 'description': 'Custom contingencies, up to 6, each requested with scenarios "custom:<name>" (or "all").'}, 'oxygen_breaks': {'type': 'object', 'properties': {'enabled': {'type': 'boolean', 'description': 'Insert oxygen breaks on high-PPOâ\x82\x82 stops. Default false.'}, 'min_ppo2': {'type': 'number', 'maximum': 1.8, 'minimum': 0.8, 'description': 'PPOâ\x82\x82 in bar at or above which a stop counts toward the break clock, 0.8 to 1.8. Default 1.4.'}, 'o2_minutes': {'type': 'number', 'maximum': 30, 'minimum': 5, 'description': 'Minutes on high PPOâ\x82\x82 before a break, 5 to 30. Default 20.'}, 'apply_on_loop': {'type': 'boolean', 'description': 'ccr: also break on the loop. Not carried in share links. Default false.'}, 'break_minutes': {'type': 'number', 'maximum': 10, 'minimum': 1, 'description': 'Break length in minutes, 1 to 10. Default 5.'}, 'loop_setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'ccr: loop setpoint in bar during a break. Default 0.7.'}}, 'description': 'Oxygen breaks.', 'additionalProperties': False}, 'table_columns': {'type': 'object', 'properties': {'cns': {'type': 'boolean', 'description': 'Add a running CNS column. Default false.'}, 'gas_remaining': {'type': 'boolean', 'description': 'Add a gas-remaining column (bar or psi). Default false.'}}, 'description': 'Extra table columns. PPOâ\x82\x82 is always shown.', 'additionalProperties': False}, 'tts_budget_min': {'type': 'number', 'maximum': 360, 'minimum': 5, 'description': 'For limit tts: the longest acceptable time to surface, 5 to 360 minutes. Required with tts.'}, 'gas_consumption': {'type': 'object', 'properties': {'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'SAC from the first stop up (L/min or ft³/min). Default 15 L/min (0.53 ft³/min). Gas figures only.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Surface air consumption (SAC, also called RMV) for descent, bottom and the deep ascent (L/min or ft³/min, per units), 1 to 200 L/min (0.05 to 7.1 ft³/min). Default 20 L/min (0.71 ft³/min). Gas figures only.'}, 'ccr_metabolic_o2': {'type': 'number', 'maximum': 2, 'minimum': 0.4, 'description': 'ccr: oxygen the diver metabolises, L/min in both unit systems, 0.4 to 2.0. Default 0.85.'}}, 'description': 'Breathing rates.', 'additionalProperties': False}, 'gradient_factors': {'type': 'object', 'properties': {'low': {'type': 'number', 'maximum': 100, 'minimum': 10, 'description': 'GF low, percent, 10 to 100. Sets the first stop depth. Default 50.'}, 'high': {'type': 'number', 'maximum': 100, 'minimum': 10, 'description': 'GF high, percent, 10 to 100. Sets the shallow stops and surfacing margin. Default 80.'}}, 'description': 'Gradient factors. Lower is more conservative. Default 50/80. If high cannot surface the plan, the engine raises it and warns.', 'additionalProperties': False}, 'ccr_deco_schedule': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'setpoint'], 'properties': {'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft): the step applies at this depth and shallower.'}, 'setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Setpoint in bar.'}}, 'additionalProperties': False}, 'maxItems': 10, 'description': 'ccr deco setpoint steps, up to 10. Default [40 m: 1.5, 23 m: 1.6]. Send [] for the single ccr.setpoints.deco.'}, 'warning_thresholds': {'type': 'object', 'properties': {'otu': {'type': 'number', 'maximum': 500, 'minimum': 200, 'description': 'OTU warning, 200 to 500. Default 300.'}, 'cns_pct': {'type': 'number', 'maximum': 100, 'minimum': 50, 'description': 'CNS percent warning, 50 to 100. Default 80.'}, 'end_max': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Highest END before a warning (m or ft, per units), 20 to 100 m. Default 30 m (100 ft).'}, 'density_warning': {'type': 'number', 'maximum': 8, 'minimum': 3, 'description': 'Gas density warning in g/L, 3 to 8. Default 5.2.'}, 'density_critical': {'type': 'number', 'maximum': 8, 'minimum': 3, 'description': 'Gas density critical in g/L, 3 to 8; also vetoes a gas in auto. Default 6.2.'}}, 'description': 'Warning thresholds. Warnings only, never the stops.', 'additionalProperties': False}, 'ccr_dilout_switches': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'cylinder'], 'properties': {'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft): the switch applies at this depth and shallower.'}, 'cylinder': {'type': 'string', 'maxLength': 12, 'description': 'Cylinder id breathed as diluent, or "onboard" to switch back.'}}, 'additionalProperties': False}, 'maxItems': 6, 'description': 'ccr: at each depth and shallower, the loop breathes that cylinder as diluent (a dilout). Up to 6. Default none.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'kind', 'limit', 'level_number', 'planned_min', 'probes', 'presentation', 'spoken_summary', 'safety_notice'], 'properties': {'kind': {'enum': ['solved', 'range', 'infeasible_at_minimum', 'unbounded', 'no_answer'], 'type': 'string'}, 'limit': {'enum': ['reserve', 'tts', 'no_deco'], 'type': 'string'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'probes': {'type': 'number', 'description': 'Engine runs spent.'}, 'tts_min': {'type': 'number', 'description': 'TTS at the answer (or at the floor for infeasible_at_minimum).'}, 'from_min': {'type': 'number', 'description': 'range: shortest bottom time whose TTS fits the budget.'}, 'time_min': {'type': 'number', 'description': 'solved: longest whole minute that meets the limit.'}, 'delta_min': {'type': 'number', 'description': 'time_min (or from_min) minus planned_min.'}, 'share_url': {'type': 'string', 'description': 'Dive Kit link to the plan at the answer.'}, 'shortfall': {'type': 'number', 'description': 'infeasible_at_minimum: how far below its reserve the binding cylinder ends (bar or psi).'}, 'up_to_min': {'type': 'number', 'description': 'range: longest bottom time that meets the budget and every reserve.'}, 'cns_flagged': {'type': 'boolean', 'description': 'CNS or OTU crosses its warning threshold at the answer. Never caps it.'}, 'planned_min': {'type': 'number', 'description': 'Bottom time on that level in the input.'}, 'level_number': {'type': 'number', 'description': '1-based level searched.'}, 'presentation': {'type': 'array', 'items': {'type': 'string'}}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'The answer and what sets it, to read aloud: no symbols or notation.'}, 'table_markdown': {'type': 'string', 'description': 'Plan table at the answer (solved: time_min; range: from_min).'}, 'reserve_flagged': {'type': 'boolean', 'description': 'tts mode: the answer leaves a cylinder under its reserve.'}, 'up_to_bounded_by': {'enum': ['gas', 'ascent'], 'type': 'string'}, 'binding_cylinder_id': {'type': 'string', 'description': 'Cylinder with the least headroom above its reserve.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['oxygen_pct'], 'properties': {'depth': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Depth in m (metric) or ft (imperial) where to report PPOâ\x82\x82, END, EAD and gas density. Omit for MOD and minimum depth only.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Surface altitude (m or ft, per units), 0 to 10000 m (32800 ft). Lowers the surface pressure depths are measured from. Default 0.'}, 'ppo2_max': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 limit in bar for the MOD, 1.0 to 1.6. Default: the Dive Kit band cap for the mix (1.4 under 28% Oâ\x82\x82, 1.5 to under 45%, 1.6 at 45% and over). The MOD at 1.4 bar is always shown too.'}, 'helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Helium percentage of the mix, 0 to 95. Default 0 (nitrox or air).'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Oxygen percentage of the mix, 5 to 100. Example: 32 for EANx32, 18 for 18/45. Required.'}, 'o2_narcotic': {'type': 'boolean', 'description': 'Count oxygen as narcotic in the END. Default false (Dive Kit default).'}, 'temperature': {'type': 'number', 'maximum': 104, 'minimum': -2, 'description': 'Water temperature for gas density, in °C (metric, -2 to 40) or °F (imperial, 28 to 104). Default 15 °C.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'notation', 'mod', 'min_depth', 'cap_used_bar', 'spoken_summary', 'safety_notice'], 'properties': {'mod': {'type': 'number', 'description': 'Maximum operating depth at cap_used_bar, floored to 0.1.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'caution': {'type': 'string', 'description': 'The most important caution at depth, if any.'}, 'at_depth': {'type': 'object', 'required': ['ppo2', 'end', 'density_g_l'], 'properties': {'ead': {'type': 'number', 'description': 'Equivalent air depth (nitrox only).'}, 'end': {'type': 'number', 'description': 'Equivalent narcotic depth.'}, 'ppo2': {'type': 'number', 'description': 'PPOâ\x82\x82 in bar.'}, 'density_g_l': {'type': 'number', 'description': 'Gas density in g/L.'}}, 'additionalProperties': False}, 'notation': {'type': 'string', 'description': 'Mix as Oâ\x82\x82/He, e.g. 18/45.'}, 'min_depth': {'type': 'number', 'description': 'Shallowest depth where PPOâ\x82\x82 reaches 0.16 bar; 0 for normoxic mixes.'}, 'mod_1_4_bar': {'type': 'number', 'description': 'MOD at 1.4 bar, the common working limit, when cap_used_bar is not 1.4.'}, 'cap_used_bar': {'type': 'number', 'description': 'PPOâ\x82\x82 limit the MOD uses.'}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}, 'nearest_standard_mix': {'type': 'string', 'description': 'Nearest standard trimix by composition (closest Oâ\x82\x82 and He), for helium mixes. Not checked against any depth limit.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['segments'], 'properties': {'sac': {'type': 'number', 'maximum': 200, 'minimum': 0.03, 'description': 'Surface breathing rate, L/min (ft³/min imperial): the same figure as rmv_sac rmv and plan_dive gas_consumption.working_sac. Default 20 L/min (0.71 ft³/min).'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, as in plan_dive: al80, al40, al63, hp80, hp100, hp120, lp85, s80, single_10l, single_12l, single_15l, twin_10l, twin_12l, twin_15l, stage_11l, stage_7l, o2_3l, dil_3l. twin_ presets are a manifolded pair.'}, 'reserve': {'type': 'object', 'properties': {'rule': {'enum': ['thirds', 'fourths', 'fifths', 'sixths', 'fixed'], 'type': 'string', 'description': 'thirds, fourths, fifths, sixths or fixed. Default thirds. Below 50 bar (725 psi) is always critical.'}, 'fixed_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Reserve for rule fixed (bar or psi, per units). Default 50 bar (725 psi).'}}, 'description': 'Reserve the cylinder must keep, as in plan_dive: rule thirds (default), fourths, fifths, sixths or fixed with fixed_pressure.', 'additionalProperties': False}, 'twinset': {'type': 'boolean', 'description': "true for two cylinders on a manifold, filled or breathed together: doubles the volume. Default: the preset's, else false."}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Altitude (m or ft, per units), 0 to 10000 m (32800 ft). Lowers the surface pressure the math adds to gauge readings. Default 0.'}, 'segments': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'duration_min'], 'properties': {'sac': {'type': 'number', 'maximum': 200, 'minimum': 0.03, 'description': "This segment's breathing rate when it differs (hard work, a calm stop). Default: the top-level sac."}, 'depth': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Depth of this segment (m or ft).'}, 'duration_min': {'type': 'number', 'maximum': 600, 'minimum': 0.1, 'description': 'Minutes at this depth, 0.1 to 600.'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'The profile in order, one entry per depth. Put descent and ascent time into the nearest segment.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0.5, 'description': "Metric: water volume of ONE cylinder in litres, the number stamped on the neck. Imperial: rated capacity in ft³ at rated_pressure (an AL80 is 77.4). Default: the preset's, else an AL80 (11.1 L)."}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 725, 'description': "Imperial only: the psi the capacity is rated at. Default: the preset's, else 3000. Ignored on metric."}, 'start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': "Fill at the start (bar or psi, per units). Default: the preset's fill, else 206.84 bar (3000 psi)."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'water', 'cylinder', 'sac', 'segments', 'total_gas_volume', 'total_gas_pressure', 'remaining_pressure', 'used_pct', 'reserve_pressure', 'turn_pressure', 'status', 'minutes_left_at_last_depth', 'assumptions', 'spoken_summary', 'safety_notice'], 'properties': {'sac': {'type': 'number'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'status': {'enum': ['ok', 'below_reserve', 'critical', 'out_of_gas'], 'type': 'string'}, 'cylinder': {'type': 'object', 'required': ['cylinder_size', 'twinset', 'start_pressure', 'free_gas_volume'], 'properties': {'preset': {'type': 'string'}, 'twinset': {'type': 'boolean'}, 'cylinder_size': {'type': 'number', 'description': 'L of water (metric) or rated ft³ (imperial), one cylinder.'}, 'rated_pressure': {'type': 'number'}, 'start_pressure': {'type': 'number'}, 'free_gas_volume': {'type': 'number', 'description': 'Gas the full cylinder delivers down to a gauge of 0, at the surface pressure for the altitude, real gas (L or ft³).'}}, 'additionalProperties': False}, 'segments': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'duration_min', 'sac', 'gas_used_volume', 'gas_used_pressure', 'cumulative_volume', 'remaining_pressure', 'runtime_min', 'status'], 'properties': {'sac': {'type': 'number'}, 'depth': {'type': 'number'}, 'status': {'enum': ['ok', 'below_reserve', 'critical', 'out_of_gas'], 'type': 'string'}, 'runtime_min': {'type': 'number'}, 'duration_min': {'type': 'number'}, 'gas_used_volume': {'type': 'number'}, 'cumulative_volume': {'type': 'number'}, 'gas_used_pressure': {'type': 'number'}, 'remaining_pressure': {'type': 'number'}}, 'additionalProperties': False}}, 'used_pct': {'type': 'number'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'safety_notice': {'type': 'string'}, 'turn_pressure': {'type': 'number', 'description': 'There-and-back: turn when the gauge reads this; half the usable gas is then gone.'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}, 'reserve_pressure': {'type': 'number'}, 'total_gas_volume': {'type': 'number'}, 'remaining_pressure': {'type': 'number'}, 'total_gas_pressure': {'type': 'number'}, 'first_segment_below_turn': {'type': 'number', 'description': '1-based segment that ends under the turn pressure.'}, 'minutes_left_at_last_depth': {'type': 'number', 'description': "More minutes at the last segment's depth and rate before the cylinder is empty (no reserve kept)."}, 'first_segment_below_reserve': {'type': 'number', 'description': '1-based segment that ends under the reserve.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['topic'], 'properties': {'topic': {'enum': ['start_here', 'workflow', 'tool_chains', 'inputs_reference', 'glossary', 'glossary_equipment', 'deco_theory', 'gradient_factors', 'gas_selection', 'gas_planning', 'gas_consumption', 'gas_blending', 'blending_continuous_and_decant', 'buoyancy_and_weighting', 'ccr', 'bailout_and_contingencies', 'warnings', 'repetitive_dives', 'worked_examples', 'why_plans_differ', 'conventions', 'limits_and_safety', 'sources'], 'type': 'string', 'description': 'Guide section to return. Pick glossary for what a word means, deco_theory for how the model works, limits_and_safety for "is it safe". start_here: index of the guide and tools. workflow: how a planning conversation runs and what plan_dive needs. tool_chains: how one tool\'s result feeds the next, six recipes. inputs_reference: every input with unit, default and range. glossary: diver words, abbreviations and plan-table marks mapped to plain meaning and to fields. glossary_equipment: cylinders, rigs and every cylinders[].preset id with its size and fill. deco_theory: Bühlmann ZH-L16C and decompression basics. gradient_factors: what GF low/high do. gas_selection: choosing bottom and deco gases. gas_planning: gas volumes, reserves and turn pressure. gas_consumption: breathing rate (SAC, RMV), rmv_sac and gas_usage. gas_blending: plan_blend, mix_result and fill-station practice. blending_continuous_and_decant: blend_continuous and decant. buoyancy_and_weighting: buoyancy_check, weighting and failure cases. ccr: closed-circuit rebreather planning. bailout_and_contingencies: bailout and lost-gas plans. warnings: every warning and what it means. repetitive_dives: surface intervals and residual loading. worked_examples: complete example plans. why_plans_differ: why planners disagree. conventions: why Dive Kit numbers differ from textbook formulas. limits_and_safety: what this server does not do. sources: references.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['topic', 'markdown'], 'properties': {'topic': {'enum': ['start_here', 'workflow', 'tool_chains', 'inputs_reference', 'glossary', 'glossary_equipment', 'deco_theory', 'gradient_factors', 'gas_selection', 'gas_planning', 'gas_consumption', 'gas_blending', 'blending_continuous_and_decant', 'buoyancy_and_weighting', 'ccr', 'bailout_and_contingencies', 'warnings', 'repetitive_dives', 'worked_examples', 'why_plans_differ', 'conventions', 'limits_and_safety', 'sources'], 'type': 'string'}, 'markdown': {'type': 'string'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'id': {'type': 'string', 'maxLength': 80, 'description': 'Exact certification id from an earlier result, e.g. cert-padi-tec-45.'}, 'query': {'type': 'string', 'maxLength': 100, 'description': 'Free text against the course name, abbreviation, former names, notes and limits, e.g. "tec 45", "trimix", "advanced nitrox", "cave". Every word must match.'}, 'agency': {'type': 'string', 'maxLength': 40, 'description': 'Agency abbreviation or id, any case: PADI, SSI, NAUI, SDI, TDI, CMAS, BSAC, RAID, IANTD, GUE, UTD, ANDI, NSS-CDS, ISE, and others. Alone, it returns the agency and a list of its courses.'}, 'category': {'enum': ['recreational', 'rescue', 'specialty', 'technical', 'rebreather', 'professional', 'cave', 'freediving', 'other'], 'type': 'string', 'description': 'recreational, rescue, specialty, technical, rebreather, professional, cave, freediving or other.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dataset_version', 'attribution', 'total_matches', 'certifications'], 'properties': {'agency': {'type': 'object', 'description': 'The agency record when agency was given.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'attribution': {'type': 'string', 'description': 'Credit line (CC BY 4.0); keep it with any figures you quote.'}, 'total_matches': {'type': 'number', 'description': 'Matches before the cap.'}, 'certifications': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Matching records, at most 20, each with agency_abbr.'}, 'dataset_version': {'type': 'string', 'description': 'Dataset release tag.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'query': {'type': 'string', 'maxLength': 100, 'description': 'Free text: a name, brand or use, e.g. "hp100", "al80", "luxfer", "sidemount". A number matches the water volume in L, the rated ft³, the working pressure in bar or the number in the name: "12" finds 12 L cylinders, "80" finds the AL80 and HP80. Every word must match. Omit for every cylinder.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'material': {'enum': ['aluminum', 'steel'], 'type': 'string', 'description': 'aluminum or steel. Omit for both.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dataset_version', 'attribution', 'cylinders'], 'properties': {'cylinders': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Matching dataset records (id, commonName, waterVolumeL, workingPressureBar, material, typicalUse, emptyWeightKg, buoyancyKg, brands, notes, ratedCapacityCuft), each with plan_dive: the plan_dive cylinder fields for it.'}, 'attribution': {'type': 'string', 'description': 'Credit line (CC BY 4.0); keep it with any figures you quote.'}, 'dataset_version': {'type': 'string', 'description': 'Dataset release tag.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'type': {'enum': ['paper', 'book', 'standard', 'manual', 'article', 'blog', 'thread', 'dataset', 'website', 'talk', 'software', 'video', 'podcast', 'course_material', 'report'], 'type': 'string', 'description': 'Kind of source: paper, book, standard, manual, article, blog, thread, dataset, website, talk, software, video, podcast, course_material, report.'}, 'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Most references to return, 1 to 20. Default 10.'}, 'query': {'type': 'string', 'maxLength': 100, 'description': 'Free text; every word must match the title, authors, publisher, notes or what the source is authoritative for, e.g. "baker m-values", "oxygen cleaning", "neoprene". Accents are ignored.'}, 'topic': {'enum': ['deco_theory', 'gradient_factors', 'oxygen_toxicity', 'gas_density', 'icd', 'hpns', 'ccr', 'gas_selection', 'gas_planning', 'gas_blending', 'oxygen_handling', 'real_gas', 'cylinders', 'buoyancy', 'breathing_rate', 'conventions', 'training', 'emergencies', 'cross_checks', 'community'], 'type': 'string', 'description': 'Subject: deco_theory, gradient_factors, oxygen_toxicity, gas_density, icd, hpns, ccr, gas_selection, gas_planning, gas_blending, oxygen_handling, real_gas, cylinders, buoyancy, breathing_rate, conventions, training, emergencies, cross_checks, community.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dataset_version', 'attribution', 'total_matches', 'references'], 'properties': {'references': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Matching records (id, title, authors, year, type, publisher, url, doi, access, topics, authoritative_for, notes, checked_at).'}, 'attribution': {'type': 'string', 'description': 'Credit line (CC BY 4.0); keep it with any figures you quote.'}, 'search_next': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'url', 'use_for', 'vetted', 'how_to_search'], 'properties': {'url': {'type': 'string'}, 'name': {'type': 'string'}, 'vetted': {'type': 'boolean', 'description': 'false: community content; verify against a vetted source.'}, 'use_for': {'type': 'string'}, 'how_to_search': {'type': 'string', 'description': 'How to search it, e.g. "site:dan.org <question>".'}}, 'additionalProperties': False}, 'description': 'Only when nothing matched: where to search next, in order. Anything found there is not Dive Kit-vetted; say so.'}, 'total_matches': {'type': 'number', 'description': 'Matches before the limit.'}, 'dataset_version': {'type': 'string', 'description': 'Dataset release tag.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['current', 'additions'], 'properties': {'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'current': {'type': 'object', 'required': ['oxygen_pct', 'pressure'], 'properties': {'pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Gauge pressure before the first addition (bar or psi, per units); 0 for empty.'}, 'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Helium % before the first addition. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Oxygen % in the cylinder before the first addition, as analysed. Air is 21.'}}, 'description': 'The cylinder before gas goes in. plan_blend gives it as mix_result_current.', 'additionalProperties': False}, 'additions': {'type': 'array', 'items': {'type': 'object', 'required': ['oxygen_pct', 'pressure_added'], 'properties': {'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Helium % of the gas added: 100 for helium. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Oxygen % of the gas added: 100 oxygen, 21 air, 0 helium, 32 a nitrox bank.'}, 'pressure_added': {'type': 'number', 'maximum': 7252, 'minimum': 0.1, 'description': 'Gauge pressure this gas adds (bar or psi, per units): the cylinder gauge after minus before.'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': 'Gases added, in order. plan_blend gives them as mix_result_additions.'}, 'environment': {'type': 'object', 'properties': {'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Altitude (m or ft, per units), 0 to 10000 m (32800 ft). Lowers the surface pressure the math adds to gauge readings. Default 0.'}, 'fill_temperature': {'type': 'number', 'maximum': 212, 'minimum': -58, 'description': 'Gas temperature right after filling (°C or °F). Above ambient, the plan fills to a hot pressure that settles to the target. Default: ambient.'}, 'ambient_temperature': {'type': 'number', 'maximum': 212, 'minimum': -58, 'description': 'Temperature the cylinder cools to (°C or °F, per units), -50 to 100 °C. Default 20 °C (68 °F).'}}, 'description': 'Altitude and temperatures. Default sea level, 20 °C, fill at ambient.', 'additionalProperties': False}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'start', 'steps', 'final', 'notes', 'spoken_summary', 'safety_notice'], 'properties': {'final': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct', 'pressure', 'notation'], 'properties': {'notation': {'type': 'string'}, 'pressure': {'type': 'number'}, 'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}}, 'description': 'The mix and settled pressure; analyse to confirm.', 'additionalProperties': False}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'start': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct', 'pressure'], 'properties': {'pressure': {'type': 'number'}, 'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}}, 'additionalProperties': False}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['oxygen_pct_added', 'helium_pct_added', 'pressure_added', 'pressure_before', 'pressure_after', 'oxygen_pct_before', 'oxygen_pct_after', 'helium_pct_before', 'helium_pct_after'], 'properties': {'pressure_added': {'type': 'number'}, 'pressure_after': {'type': 'number'}, 'pressure_before': {'type': 'number'}, 'helium_pct_added': {'type': 'number'}, 'helium_pct_after': {'type': 'number'}, 'oxygen_pct_added': {'type': 'number'}, 'oxygen_pct_after': {'type': 'number'}, 'helium_pct_before': {'type': 'number'}, 'oxygen_pct_before': {'type': 'number'}}, 'additionalProperties': False}}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'settle': {'type': 'object', 'required': ['hot_pressure', 'settled_pressure'], 'properties': {'hot_pressure': {'type': 'number'}, 'settled_pressure': {'type': 'number'}}, 'description': 'Cooling from the fill temperature to ambient.', 'additionalProperties': False}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['current', 'target'], 'properties': {'banks': {'type': 'array', 'items': {'type': 'object', 'required': ['oxygen_pct'], 'properties': {'pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': "A cylinder bank's gauge pressure now (bar or psi), given with cylinder_size. Omit both for an unlimited supply such as a compressor."}, 'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Helium % of this supply: 100 for helium, or a premixed bank. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Oxygen % of this supply: 21 air, 100 oxygen, 0 helium, 32 a nitrox bank.'}, 'cylinder_size': {'type': 'number', 'maximum': 20000, 'minimum': 0.5, 'description': "A cylinder bank's water volume in litres (metric) or rated ft³ at rated_pressure (imperial), given with pressure."}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 725, 'description': "Imperial only: the psi the bank's ft³ is rated at. Default 3000."}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1, 'description': 'Gas supplies in the order the blender lists them; bank numbers in the result count from 1. Default: unlimited air, oxygen and helium.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'target': {'type': 'object', 'required': ['oxygen_pct', 'pressure'], 'properties': {'pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Target gauge pressure once the cylinder has cooled (bar or psi, per units).'}, 'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Target helium %, 0 to 100. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Target oxygen %, 0 to 100 (EANx32 is 32, trimix 21/35 is 21).'}}, 'description': 'The mix and settled pressure to reach.', 'additionalProperties': False}, 'current': {'type': 'object', 'required': ['oxygen_pct', 'pressure'], 'properties': {'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, as in plan_dive: al80, al40, al63, hp80, hp100, hp120, lp85, s80, single_10l, single_12l, single_15l, twin_10l, twin_12l, twin_15l, stage_11l, stage_7l, o2_3l, dil_3l. twin_ presets are a manifolded pair.'}, 'twinset': {'type': 'boolean', 'description': "true for two cylinders on a manifold, filled or breathed together: doubles the volume. Default: the preset's, else false."}, 'pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Gauge pressure now (bar or psi, per units), 0 to 500 bar (7252 psi).'}, 'helium_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Helium % now, 0 to 100. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Oxygen % of the gas in the cylinder now, as analysed, 0 to 100. Air is 21; an empty cylinder is 21 at pressure 0.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0.5, 'description': "Metric: water volume of ONE cylinder in litres, the number stamped on the neck. Imperial: rated capacity in ft³ at rated_pressure (an AL80 is 77.4). Default: the preset's, else an AL80 (11.1 L)."}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 725, 'description': "Imperial only: the psi the capacity is rated at. Default: the preset's, else 3000. Ignored on metric."}}, 'description': 'The cylinder now: analysed mix, gauge pressure and size (default AL80 size).', 'additionalProperties': False}, 'max_plans': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Plans to return, 1 to 5: the best one plus alternatives. Default 3.'}, 'environment': {'type': 'object', 'properties': {'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Altitude (m or ft, per units), 0 to 10000 m (32800 ft). Lowers the surface pressure the math adds to gauge readings. Default 0.'}, 'fill_temperature': {'type': 'number', 'maximum': 212, 'minimum': -58, 'description': 'Gas temperature right after filling (°C or °F). Above ambient, the plan fills to a hot pressure that settles to the target. Default: ambient.'}, 'ambient_temperature': {'type': 'number', 'maximum': 212, 'minimum': -58, 'description': 'Temperature the cylinder cools to (°C or °F, per units), -50 to 100 °C. Default 20 °C (68 °F).'}}, 'description': 'Altitude and temperatures. Default sea level, 20 °C, fill at ambient.', 'additionalProperties': False}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'feasible', 'steps', 'achieved', 'consumption', 'mix_result_current', 'mix_result_additions', 'alternatives', 'notes', 'spoken_summary', 'safety_notice'], 'properties': {'error': {'type': 'object', 'required': ['code', 'key', 'reason'], 'properties': {'key': {'type': 'string'}, 'code': {'type': 'string'}, 'reason': {'type': 'string'}}, 'additionalProperties': False}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'instruction'], 'properties': {'bank': {'type': 'number', 'description': 'add: bank number from 1, in the order given.'}, 'kind': {'enum': ['bleed', 'add', 'settle'], 'type': 'string', 'description': 'bleed down, add from a bank, or let the cylinder cool.'}, 'bank_gas': {'type': 'string'}, 'instruction': {'type': 'string', 'description': 'The step in one sentence.'}, 'to_pressure': {'type': 'number', 'description': 'bleed and add: gauge pressure to stop at.'}, 'hot_pressure': {'type': 'number'}, 'bank_helium_pct': {'type': 'number'}, 'bank_oxygen_pct': {'type': 'number'}, 'helium_pct_after': {'type': 'number'}, 'oxygen_pct_after': {'type': 'number'}, 'settled_pressure': {'type': 'number'}, 'helium_pct_before': {'type': 'number'}, 'oxygen_pct_before': {'type': 'number'}, 'bank_pressure_after': {'type': 'number', 'description': 'add from a finite bank: the bank gauge after.'}, 'bank_pressure_before': {'type': 'number', 'description': 'add from a finite bank: the bank gauge before.'}}, 'additionalProperties': False}, 'description': 'The best plan in order; empty when feasible is false.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'achieved': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct', 'pressure', 'notation', 'oxygen_error_pct', 'helium_error_pct'], 'properties': {'notation': {'type': 'string'}, 'pressure': {'type': 'number'}, 'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}, 'helium_error_pct': {'type': 'number'}, 'oxygen_error_pct': {'type': 'number'}}, 'additionalProperties': False}, 'feasible': {'type': 'boolean'}, 'consumption': {'type': 'array', 'items': {'type': 'object', 'required': ['bank', 'bank_gas', 'pressure', 'volume'], 'properties': {'bank': {'type': 'number'}, 'volume': {'type': 'number', 'description': 'Free gas drawn, L or ft³.'}, 'bank_gas': {'type': 'string'}, 'pressure': {'type': 'number', 'description': 'Gauge pressure drawn (finite banks: the bank drop).'}}, 'additionalProperties': False}}, 'alternatives': {'type': 'array', 'items': {'type': 'object', 'required': ['summary', 'step_count', 'oxygen_pct', 'helium_pct'], 'properties': {'summary': {'type': 'string'}, 'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}, 'step_count': {'type': 'number'}}, 'additionalProperties': False}}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}, 'mix_result_current': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct', 'pressure'], 'properties': {'pressure': {'type': 'number'}, 'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}}, 'description': 'mix_result current: the cylinder after the last bleed.', 'additionalProperties': False}, 'partial_plan_steps': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'instruction'], 'properties': {'bank': {'type': 'number', 'description': 'add: bank number from 1, in the order given.'}, 'kind': {'enum': ['bleed', 'add', 'settle'], 'type': 'string', 'description': 'bleed down, add from a bank, or let the cylinder cool.'}, 'bank_gas': {'type': 'string'}, 'instruction': {'type': 'string', 'description': 'The step in one sentence.'}, 'to_pressure': {'type': 'number', 'description': 'bleed and add: gauge pressure to stop at.'}, 'hot_pressure': {'type': 'number'}, 'bank_helium_pct': {'type': 'number'}, 'bank_oxygen_pct': {'type': 'number'}, 'helium_pct_after': {'type': 'number'}, 'oxygen_pct_after': {'type': 'number'}, 'settled_pressure': {'type': 'number'}, 'helium_pct_before': {'type': 'number'}, 'oxygen_pct_before': {'type': 'number'}, 'bank_pressure_after': {'type': 'number', 'description': 'add from a finite bank: the bank gauge after.'}, 'bank_pressure_before': {'type': 'number', 'description': 'add from a finite bank: the bank gauge before.'}}, 'additionalProperties': False}, 'description': 'feasible false: the steps that run before the plan gets stuck.'}, 'mix_result_additions': {'type': 'array', 'items': {'type': 'object', 'required': ['oxygen_pct', 'helium_pct', 'pressure_added'], 'properties': {'helium_pct': {'type': 'number'}, 'oxygen_pct': {'type': 'number'}, 'pressure_added': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'mix_result additions: every add step, in order.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['levels', 'cylinders'], 'properties': {'ccr': {'type': 'object', 'properties': {'o2_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': 'Oxygen cylinder: litres (metric) or ft³ rated at 3000 psi (imperial). Default 3 L.'}, 'setpoints': {'type': 'object', 'properties': {'deco': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Deco setpoint in bar, used where ccr_deco_schedule has no step. Default 1.4.'}, 'bottom': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Bottom setpoint in bar, the level default. Default 1.0.'}, 'descent': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Descent setpoint in bar. Default 0.7.'}}, 'description': 'Loop setpoints in bar.', 'additionalProperties': False}, 'loop_volume': {'type': 'number', 'maximum': 15, 'minimum': 2, 'description': 'Loop volume, litres in both unit systems, 2 to 15. Default 6.'}, 'diluent_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': 'Diluent cylinder: litres (metric) or ft³ rated at 3000 psi (imperial). Default 3 L.'}, 'o2_start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Oxygen cylinder fill (bar or psi). Default 232 bar (3365 psi).'}, 'diluent_helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Onboard diluent helium percent. Default 0.'}, 'diluent_oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Onboard diluent oxygen percent. Default 21.'}, 'descent_switch_depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft) where the descent setpoint hands over to bottom, first descent only. Default 18 m (60 ft).'}, 'diluent_breathable_oc': {'type': 'boolean', 'description': 'true if the BOV or a regulator can breathe the onboard diluent open circuit. It then joins the bailout pool last. Default false.'}, 'diluent_start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Diluent cylinder fill (bar or psi). Default 232 bar (3365 psi).'}}, 'description': 'The rebreather (mode ccr only).', 'additionalProperties': False}, 'mode': {'enum': ['oc', 'ccr'], 'type': 'string', 'description': 'oc (open circuit, default) or ccr (closed-circuit rebreather). Set ccr for every rebreather plan: the ccr, ccr_deco_schedule, ccr_dilout_switches and bailout fields need it. On ccr, `cylinders` are the open-circuit bailout gases; the rig itself is in `ccr`.'}, 'ppo2': {'type': 'object', 'properties': {'min': {'type': 'number', 'maximum': 0.21, 'minimum': 0.16, 'description': 'Lowest PPOâ\x82\x82 in bar before a hypoxia warning, 0.16 to 0.21. Warnings only. Default 0.18.'}, 'max_all': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'One PPOâ\x82\x82 cap in bar for every gas, 1.0 to 1.6 (e.g. 1.4 for recreational nitrox). Sets all three bands; a band field given too wins for its band.'}, 'max_28_to_44pct_o2': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases from 28% to under 45% Oâ\x82\x82, 1.0 to 1.6. Default 1.5.'}, 'max_under_28pct_o2': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases under 28% Oâ\x82\x82, 1.0 to 1.6. Sets their MOD and switch depth. Default 1.4.'}, 'max_45pct_o2_and_up': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases of 45% Oâ\x82\x82 and over, 1.0 to 1.6. Default 1.6.'}}, 'description': 'PPOâ\x82\x82 limits in bar.', 'additionalProperties': False}, 'rates': {'type': 'object', 'properties': {'descent': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Descent rate (m/min or ft/min), 1 to 100 m/min. Default 20 m/min (66 ft/min).'}, 'ascent_deep': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Ascent rate below rate_change_depth (m/min or ft/min), 1 to 100 m/min. Default 9 m/min (30 ft/min).'}, 'ascent_shallow': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Ascent rate from rate_change_depth to the surface (m/min or ft/min), 1 to 100 m/min. Default 3 m/min (10 ft/min).'}, 'rate_change_depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth where the ascent rate changes (m or ft), 3 to 200 m. Default 6 m (20 ft).'}}, 'description': 'Ascent and descent rates, per units.', 'additionalProperties': False}, 'stops': {'type': 'object', 'properties': {'stop_spacing': {'type': 'number', 'description': 'Distance between stops: 3, 6 or 9 m; 10, 20 or 30 ft. Default 3 m (10 ft).'}, 'time_rounding': {'enum': ['1s', '30s', '1min'], 'type': 'string', 'description': '1s, 30s or 1min. Applied inside the engine; a stop is never shorter than the obligation. Default 1min.'}, 'last_stop_depth': {'type': 'number', 'description': 'Final stop depth: 3, 4.5 or 6 m; 10, 15 or 20 ft. Default 6 m (20 ft).'}}, 'description': 'Stop grid and stop-time rounding.', 'additionalProperties': False}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, L/min, °C) or imperial (ft, psi, ft³, ft³/min, °F). Applies to every input and output value except PPOâ\x82\x82/setpoints (bar), mixes (%), density (g/L). Default metric.'}, 'levels': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'bottom_time_min'], 'properties': {'gas': {'type': 'string', 'maxLength': 12, 'description': 'Cylinder id this level breathes, or "auto" (default): the richest gas legal at this depth by PPOâ\x82\x82 cap, hypoxic floor and density limit. On ccr, auto means the loop on the onboard diluent.'}, 'depth': {'type': 'number', 'maximum': 700, 'minimum': 0, 'description': 'Level depth (m or ft, per units). 1 to 200 m (3 to 650 ft). Required.'}, 'breathe': {'enum': ['loop', 'oc'], 'type': 'string', 'description': 'ccr only. loop (default) or oc: dive this level open circuit on `gas`.'}, 'diluent': {'type': 'string', 'maxLength': 12, 'description': 'ccr only. "onboard" (default) or a cylinder id to breathe through the loop as a dilout on this level.'}, 'setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'ccr only. Loop PPOâ\x82\x82 for this level in bar, 0.4 to 1.6. Default ccr.setpoints.bottom.'}, 'bottom_time_min': {'type': 'number', 'maximum': 360, 'minimum': 0, 'description': 'Minutes at this depth, excluding the descent to it (unless behavior.include_travel_in_level_time is true). 0 to 360. 0 = arrival only: passes through this depth on this gas, used for a no-stop check or a travel-gas leg. Required.'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'Dive levels in the order dived, 1 to 20. The first is level_number 1.'}, 'bailout': {'type': 'object', 'properties': {'view': {'enum': ['loop', 'end_of_profile', 'after_level', 'at_run_time', 'on_ascent'], 'type': 'string', 'description': 'ccr: which ascent the table shows. loop (default), end_of_profile, after_level, at_run_time, on_ascent. The worst-case bailout check runs on every view.'}, 'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'For on_ascent: depth (m or ft) the diver leaves the loop on the final ascent.'}, 'level_number': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'For after_level: the level (1-based) the diver bails at the end of.'}, 'run_time_min': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'For at_run_time: minutes on the Run clock.'}}, 'description': 'ccr only: the bailout view.', 'additionalProperties': False}, 'reserve': {'type': 'object', 'properties': {'rule': {'enum': ['thirds', 'fourths', 'fifths', 'sixths', 'fixed'], 'type': 'string', 'description': 'thirds, fourths, fifths, sixths or fixed. Default thirds. Below 50 bar (725 psi) is always critical.'}, 'fixed_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Reserve for rule fixed (bar or psi, per units). Default 50 bar (725 psi).'}}, 'description': 'Gas reserve rule. Moves the gas status and warnings, never the stops.', 'additionalProperties': False}, 'audience': {'enum': ['beginner', 'recreational', 'technical'], 'type': 'string', 'description': 'Optional: who the answer is for, from the conversation. beginner: new to deco, plain words. recreational (default): some training. technical: trained deco or CCR diver, terms and tables. Shapes the wording only, never a number.'}, 'behavior': {'type': 'object', 'properties': {'o2_narcotic': {'type': 'boolean', 'description': 'Count oxygen in END. END and warnings only. Default false.'}, 'stay_on_loop': {'type': 'boolean', 'description': 'ccr: true (default) keeps the whole ascent on the loop; false lets an OC deco gas take over where its PPOâ\x82\x82 is higher. Not carried in share links.'}, 'include_travel_in_level_time': {'type': 'boolean', 'description': 'true: level time includes the descent to it (dive-computer runtime style). Default false.'}}, 'description': 'Profile and model switches.', 'additionalProperties': False}, 'cylinders': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'oxygen_pct'], 'properties': {'id': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Short name used by levels and contingencies, 1 to 12 letters, digits, _ or -, e.g. back, s50, o2. Unique.'}, 'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, rated_pressure, twinset and the fill (explicit fields win). al80/s80: aluminium 80, 11.1 L, 3000 psi. al40, al63: aluminium 40/63, 3000 psi. hp80, hp100, hp120: US high-pressure steel, 3442 psi. lp85: US low-pressure steel, 2640 psi. single_10l, single_12l, single_15l: one EU steel cylinder at 232 bar. twin_10l, twin_12l, twin_15l: back-mounted doubles, 232 bar each. stage_11l: aluminium stage (AL80 size), 200 bar. stage_7l: 7 L stage, 200 bar. o2_3l, dil_3l: 3 L rebreather cylinder, 232 bar.'}, 'twinset': {'type': 'boolean', 'description': "true for back-mounted doubles or a sidemount pair breathed as one supply: doubles the gas at the same pressure. Default: the preset's, else false."}, 'helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Helium percent, 0 to 95, oxygen_pct + helium_pct at most 100. Trimix 18/45 is 45. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Oxygen percent, 5 to 100. Air is 21, EANx50 is 50, trimix 18/45 is 18.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': '12 = one 12 L cylinder (metric). 77.4 = an AL80 in ft³ (imperial, with rated_pressure 3000). Metric: water volume of ONE cylinder in litres, the number stamped on the neck, 1 to 25.5. Imperial: rated capacity in ft³ from the spec sheet (an AL80 holds less than its name), 1 to 400. Or pass preset. Default with neither: an AL80 (11.1 L, 77.4 ft³ at 3000 psi).'}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': "Imperial only: the working pressure the capacity is rated at, psi, 725 to 7252 (3000 for an AL80). Default: the preset's, else 3000. Ignored on metric."}, 'start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': "Pressure in the cylinder at the start of the dive (bar or psi, per units), 0 to 500 bar (0 to 7252 psi). Default: the preset's fill, else 206.84 bar (3000 psi)."}, 'reserve_pressure': {'type': 'number', 'maximum': 4351, 'minimum': 0, 'description': 'Custom reserve for this cylinder (bar or psi, per units), 5 to 300 bar (50 to 4351 psi). Default: the reserve rule. Moves warnings and find_max_bottom_time, never the stops.'}, 'exclude_from_deco': {'type': 'boolean', 'description': 'true keeps this cylinder out of automatic ascent switching (pony, buddy bottle). Still priced; a level can still name it. Default false.'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': 'Every open-circuit cylinder carried: back gas, stages, deco gases; on ccr, bailout gases. 1 to 10. Give preset or cylinder_size and start_pressure when known; omitted ones default (an AL80, 11.1 L at 3000 psi) and the result marks them.'}, 'modifiers': {'type': 'object', 'properties': {'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Deco SAC override for the whole plan (L/min or ft³/min). Default gas_consumption.deco_sac.'}, 'delay_min': {'type': 'number', 'maximum': 60, 'minimum': 0, 'description': 'A hold at depth before the ascent starts, 0 to 60 minutes. Moves the schedule. Default 0.'}, 'stress_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Hard-breathing surface rate, SAC (L/min or ft³/min, per units), from the end of the bottom (on bailout: from leaving the loop), gas only. Needs stress_minutes or stress_whole_ascent.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Working SAC override for the whole plan (L/min or ft³/min). Default gas_consumption.working_sac.'}, 'stress_minutes': {'type': 'number', 'maximum': 60, 'minimum': 1, 'description': 'Minutes the stress_sac burst lasts, 1 to 60.'}, 'stress_whole_ascent': {'type': 'boolean', 'description': 'true: the stress_sac burst lasts to the surface. Default false.'}}, 'description': 'Plan modifiers: a stress breathing burst (gas only) and a delay before the ascent (moves the schedule).', 'additionalProperties': False}, 'plan_name': {'type': 'string', 'description': 'Short human label shown in the approval card; fill it first, e.g. 40m 20min air+EANx50. Also titles the plan table and share link, which keep its first 24 characters (a longer name is cut, never refused).'}, 'scenarios': {'type': 'array', 'items': {'type': 'string', 'maxLength': 40, 'description': 'One scenario key.'}, 'maxItems': 10, 'description': 'Which plans to compute, default ["base"]. base; deeper_3m, deeper_5m (imperial: deeper_10ft, deeper_20ft), longer_3min, longer_5min, deeper_and_longer_3, deeper_and_longer_5 (applied to the deepest level); lost:<cylinder id> (that cylinder never carried); custom:<name> (defined in contingencies); gf:<low>/<high> (e.g. gf:40/85), last_stop:<depth> (3, 4.5, 6 m or 10, 15, 20 ft) and stop_rounding:<1s|30s|1min> (the base plan with that one setting changed, to compare settings in one call); all (not the variants). Each one returns its own table and a comparison row. Up to 10. Ask for more in a later call.'}, 'gas_switch': {'type': 'object', 'properties': {'switch_at': {'enum': ['mod', 'stop'], 'type': 'string', 'description': 'mod: switch at the deco gas MOD (default). stop: at the next stop.'}, 'switch_time_s': {'type': 'number', 'maximum': 300, 'minimum': 0, 'description': 'Seconds held at each OC switch on the old gas, 0 to 300 in 30 s steps. Default 0.'}, 'when_cylinder_empty': {'enum': ['show_shortfall', 'switch_gas'], 'type': 'string', 'description': 'show_shortfall (default): stay on it and report how much more gas is needed. switch_gas: move to the richest safe gas left.'}}, 'description': 'Gas switching.', 'additionalProperties': False}, 'repetitive': {'type': 'object', 'required': ['surface_interval_min'], 'properties': {'previous_share_url': {'type': 'string', 'maxLength': 8000, 'description': "The share link of the previous dive's plan_dive result. Its tissue loading seeds this dive."}, 'surface_interval_min': {'type': 'number', 'maximum': 1440, 'minimum': 15, 'description': 'Surface interval since the previous dive, 15 to 1440 minutes.'}}, 'description': 'Repetitive dive: the previous dive and the surface interval.', 'additionalProperties': False}, 'descent_gas': {'type': 'string', 'maxLength': 12, 'description': "oc only. Cylinder id of a travel gas for the descent, for a hypoxic bottom mix (e.g. 12/60) that cannot be breathed near the surface. When level 1 is deeper than that gas's MOD, a 0-minute level on it at its MOD (whole m or ft) is added before level 1, and the result numbers that level first. Default none."}, 'environment': {'type': 'object', 'properties': {'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Surface altitude (m or ft, per units), 0 to 10000 m (0 to 32800 ft). Default 0.'}, 'temperature': {'type': 'number', 'maximum': 104, 'minimum': -2, 'description': 'Water temperature for gas density only, -2 to 40 °C (28 to 104 °F). Never moves stops. Default 15 °C (59 °F).'}}, 'description': 'Water and altitude.', 'additionalProperties': False}, 'contingencies': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 24, 'minLength': 1, 'description': 'Name of this contingency, 1 to 24 characters. Request it with scenarios "custom:<name>". Unique.'}, 'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Deco SAC for this contingency only (L/min or ft³/min, per units). Default gas_consumption.deco_sac.'}, 'delay_min': {'type': 'number', 'maximum': 60, 'minimum': 0, 'description': 'A hold at depth before the ascent starts, 0 to 60 minutes. Moves the schedule. Default 0.'}, 'stress_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Hard-breathing surface rate, SAC (L/min or ft³/min, per units), from the end of the bottom (on bailout: from leaving the loop), gas only. Needs stress_minutes or stress_whole_ascent.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Working SAC for this contingency only (L/min or ft³/min, per units). Default gas_consumption.working_sac.'}, 'depth_change': {'type': 'number', 'maximum': 100, 'minimum': -100, 'description': 'Depth added to that level (m or ft, per units), -30 to 30 m (-100 to 100 ft). Default 0.'}, 'level_number': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Level number (1-based) the depth and time changes apply to. Default the deepest (last on a tie).'}, 'lost_cylinders': {'type': 'string', 'maxLength': 130, 'description': 'Cylinder ids lost in this contingency, comma-separated, e.g. "s50,o2". Default none.'}, 'stress_minutes': {'type': 'number', 'maximum': 60, 'minimum': 1, 'description': 'Minutes the stress_sac burst lasts, 1 to 60.'}, 'time_change_min': {'type': 'number', 'maximum': 60, 'minimum': -60, 'description': 'Minutes added to that level, -60 to 60. Default 0.'}, 'fails_after_level': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Level number (1-based) after which the lost cylinders are gone. Omit: they are never carried.'}, 'stress_whole_ascent': {'type': 'boolean', 'description': 'true: the stress_sac burst lasts to the surface. Default false.'}}, 'additionalProperties': False}, 'maxItems': 6, 'description': 'Custom contingencies, up to 6, each requested with scenarios "custom:<name>" (or "all").'}, 'oxygen_breaks': {'type': 'object', 'properties': {'enabled': {'type': 'boolean', 'description': 'Insert oxygen breaks on high-PPOâ\x82\x82 stops. Default false.'}, 'min_ppo2': {'type': 'number', 'maximum': 1.8, 'minimum': 0.8, 'description': 'PPOâ\x82\x82 in bar at or above which a stop counts toward the break clock, 0.8 to 1.8. Default 1.4.'}, 'o2_minutes': {'type': 'number', 'maximum': 30, 'minimum': 5, 'description': 'Minutes on high PPOâ\x82\x82 before a break, 5 to 30. Default 20.'}, 'apply_on_loop': {'type': 'boolean', 'description': 'ccr: also break on the loop. Not carried in share links. Default false.'}, 'break_minutes': {'type': 'number', 'maximum': 10, 'minimum': 1, 'description': 'Break length in minutes, 1 to 10. Default 5.'}, 'loop_setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'ccr: loop setpoint in bar during a break. Default 0.7.'}}, 'description': 'Oxygen breaks.', 'additionalProperties': False}, 'table_columns': {'type': 'object', 'properties': {'cns': {'type': 'boolean', 'description': 'Add a running CNS column. Default false.'}, 'gas_remaining': {'type': 'boolean', 'description': 'Add a gas-remaining column (bar or psi). Default false.'}}, 'description': 'Extra table columns. PPOâ\x82\x82 is always shown.', 'additionalProperties': False}, 'gas_consumption': {'type': 'object', 'properties': {'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'SAC from the first stop up (L/min or ft³/min). Default 15 L/min (0.53 ft³/min). Gas figures only.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Surface air consumption (SAC, also called RMV) for descent, bottom and the deep ascent (L/min or ft³/min, per units), 1 to 200 L/min (0.05 to 7.1 ft³/min). Default 20 L/min (0.71 ft³/min). Gas figures only.'}, 'ccr_metabolic_o2': {'type': 'number', 'maximum': 2, 'minimum': 0.4, 'description': 'ccr: oxygen the diver metabolises, L/min in both unit systems, 0.4 to 2.0. Default 0.85.'}}, 'description': 'Breathing rates.', 'additionalProperties': False}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'description': 'concise: plan table, gas, warnings, scenario summary. detailed: adds every setting used, per-level NDL, full warning details and the bailout table. Default concise.'}, 'gradient_factors': {'type': 'object', 'properties': {'low': {'type': 'number', 'maximum': 100, 'minimum': 10, 'description': 'GF low, percent, 10 to 100. Sets the first stop depth. Default 50.'}, 'high': {'type': 'number', 'maximum': 100, 'minimum': 10, 'description': 'GF high, percent, 10 to 100. Sets the shallow stops and surfacing margin. Default 80.'}}, 'description': 'Gradient factors. Lower is more conservative. Default 50/80. If high cannot surface the plan, the engine raises it and warns.', 'additionalProperties': False}, 'ccr_deco_schedule': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'setpoint'], 'properties': {'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft): the step applies at this depth and shallower.'}, 'setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Setpoint in bar.'}}, 'additionalProperties': False}, 'maxItems': 10, 'description': 'ccr deco setpoint steps, up to 10. Default [40 m: 1.5, 23 m: 1.6]. Send [] for the single ccr.setpoints.deco.'}, 'warning_thresholds': {'type': 'object', 'properties': {'otu': {'type': 'number', 'maximum': 500, 'minimum': 200, 'description': 'OTU warning, 200 to 500. Default 300.'}, 'cns_pct': {'type': 'number', 'maximum': 100, 'minimum': 50, 'description': 'CNS percent warning, 50 to 100. Default 80.'}, 'end_max': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Highest END before a warning (m or ft, per units), 20 to 100 m. Default 30 m (100 ft).'}, 'density_warning': {'type': 'number', 'maximum': 8, 'minimum': 3, 'description': 'Gas density warning in g/L, 3 to 8. Default 5.2.'}, 'density_critical': {'type': 'number', 'maximum': 8, 'minimum': 3, 'description': 'Gas density critical in g/L, 3 to 8; also vetoes a gas in auto. Default 6.2.'}}, 'description': 'Warning thresholds. Warnings only, never the stops.', 'additionalProperties': False}, 'ccr_dilout_switches': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'cylinder'], 'properties': {'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft): the switch applies at this depth and shallower.'}, 'cylinder': {'type': 'string', 'maxLength': 12, 'description': 'Cylinder id breathed as diluent, or "onboard" to switch back.'}}, 'additionalProperties': False}, 'maxItems': 6, 'description': 'ccr: at each depth and shallower, the loop breathes that cylinder as diluent (a dilout). Up to 6. Default none.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'summary', 'table_markdown', 'stops', 'gas', 'warnings', 'levels', 'scenarios', 'computed_with', 'settings_table_markdown', 'presentation', 'next_steps', 'share_url', 'spoken_summary', 'engine', 'safety_notice'], 'properties': {'gas': {'type': 'array', 'items': {'type': 'object', 'required': ['cylinder_id', 'mix', 'start', 'used', 'used_volume', 'remaining', 'status'], 'properties': {'mix': {'type': 'string'}, 'used': {'type': 'number'}, 'start': {'type': 'number'}, 'status': {'type': 'string'}, 'reserve': {'type': 'number'}, 'remaining': {'type': 'number'}, 'shortfall': {'type': 'number'}, 'cylinder_id': {'type': 'string'}, 'used_volume': {'type': 'number'}, 'ascent_pressure': {'type': 'number'}, 'ran_out_at_depth': {'type': 'number'}}, 'additionalProperties': False}}, 'stops': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'stop_min', 'run_min', 'gas', 'ppo2'], 'properties': {'gas': {'type': 'string'}, 'ppo2': {'type': ['number', 'null']}, 'depth': {'type': 'number'}, 'run_min': {'type': 'number'}, 'stop_min': {'type': 'number'}}, 'additionalProperties': False}}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string'}, 'engine': {'type': 'object', 'required': ['algorithm', 'gf', 'core_version', 'engine_version', 'server_version'], 'properties': {'gf': {'type': 'string'}, 'algorithm': {'type': 'string'}, 'core_version': {'type': 'string'}, 'engine_version': {'type': 'number'}, 'server_version': {'type': 'string'}}, 'additionalProperties': False}, 'levels': {'type': 'array', 'items': {'type': 'object', 'required': ['level', 'depth', 'breathing', 'ppo2', 'end', 'gas_density_g_l', 'issues'], 'properties': {'end': {'type': 'number'}, 'ppo2': {'type': 'number'}, 'depth': {'type': 'number'}, 'level': {'type': 'number'}, 'issues': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'title', 'detail'], 'properties': {'code': {'type': 'string'}, 'title': {'type': 'string'}, 'detail': {'type': 'string'}, 'severity': {'type': 'string'}}, 'additionalProperties': False}}, 'breathing': {'type': 'string'}, 'gas_density_g_l': {'type': 'number'}}, 'additionalProperties': False}}, 'summary': {'type': 'object', 'required': ['runtime_min', 'tts_min', 'deco_time_min', 'first_stop_depth', 'cns_percent', 'otu', 'gas_density_bottom_g_l', 'ndl_min_per_level'], 'properties': {'otu': {'type': 'number'}, 'tts_min': {'type': 'number'}, 'cns_percent': {'type': 'number'}, 'runtime_min': {'type': 'number'}, 'deco_time_min': {'type': 'number'}, 'first_stop_depth': {'type': 'number'}, 'effective_gf_high': {'type': 'number'}, 'ndl_min_per_level': {'type': 'array', 'items': {'type': ['number', 'null']}}, 'gas_density_bottom_g_l': {'type': 'number'}}, 'additionalProperties': False}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'title', 'detail'], 'properties': {'code': {'type': 'string'}, 'title': {'type': 'string'}, 'detail': {'type': 'string'}, 'severity': {'type': 'string'}, 'level_number': {'type': 'number', 'description': '1-based level a per-level issue belongs to.'}}, 'additionalProperties': False}, 'description': 'Plan warnings, most severe first, including per-level issues (with level_number) not already stated.'}, 'scenarios': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'label', 'runtime_min', 'tts_min', 'delta_tts_min', 'cns_percent', 'tightest_cylinder', 'shortfall', 'status', 'warnings'], 'properties': {'key': {'type': 'string'}, 'label': {'type': 'string'}, 'status': {'type': 'string'}, 'tts_min': {'type': 'number'}, 'gas_line': {'type': 'string', 'description': 'response_format detailed: what each cylinder ends with in this scenario.'}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'title', 'detail'], 'properties': {'code': {'type': 'string'}, 'title': {'type': 'string'}, 'detail': {'type': 'string'}, 'severity': {'type': 'string'}}, 'additionalProperties': False}}, 'shortfall': {'type': 'string', 'description': 'Every cylinder that runs short and by how much ("travel 41 bar"), or "none".'}, 'cns_percent': {'type': 'number'}, 'runtime_min': {'type': 'number'}, 'delta_tts_min': {'type': 'number'}, 'table_markdown': {'type': 'string'}, 'tightest_cylinder': {'type': 'string'}}, 'additionalProperties': False}}, 'share_url': {'type': 'string'}, 'truncated': {'type': 'array', 'items': {'type': 'string'}}, 'next_steps': {'type': 'array', 'items': {'type': 'string'}}, 'presentation': {'type': 'array', 'items': {'type': 'string'}}, 'computed_with': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'loop_warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'title', 'detail'], 'properties': {'code': {'type': 'string'}, 'title': {'type': 'string'}, 'detail': {'type': 'string'}, 'severity': {'type': 'string'}, 'level_number': {'type': 'number', 'description': '1-based level a per-level issue belongs to.'}}, 'additionalProperties': False}, 'description': 'ccr bailout views only: warnings for the loop plan the summary and main table show, with the per-level issues. warnings then covers the bailout view.'}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'One paragraph to speak as a dive briefing in a voice conversation: the dive, GF and reserve rule, run time, the stops that matter, gas per key cylinder, every critical issue, an offer to re-run. Units in words, no symbols or notation, at most 700 characters.'}, 'table_markdown': {'type': 'string'}, 'bailout_table_markdown': {'type': 'string'}, 'settings_table_markdown': {'type': 'string', 'description': 'The Plan settings table (Setting | Value): every key variable the schedule used, "(default)" after each Dive Kit default.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['url'], 'properties': {'url': {'type': 'string', 'maxLength': 8000, 'minLength': 1, 'description': 'The full Dive Kit share link, including anything after ?.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['plan_input', 'has_tissue_state', 'notes', 'safety_notice'], 'properties': {'notes': {'type': 'array', 'items': {'type': 'string'}}, 'plan_name': {'type': 'string'}, 'plan_input': {'type': 'object', 'required': ['levels', 'cylinders'], 'properties': {'ccr': {'type': 'object', 'properties': {'o2_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': 'Oxygen cylinder: litres (metric) or ft³ rated at 3000 psi (imperial). Default 3 L.'}, 'setpoints': {'type': 'object', 'properties': {'deco': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Deco setpoint in bar, used where ccr_deco_schedule has no step. Default 1.4.'}, 'bottom': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Bottom setpoint in bar, the level default. Default 1.0.'}, 'descent': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Descent setpoint in bar. Default 0.7.'}}, 'description': 'Loop setpoints in bar.', 'additionalProperties': False}, 'loop_volume': {'type': 'number', 'maximum': 15, 'minimum': 2, 'description': 'Loop volume, litres in both unit systems, 2 to 15. Default 6.'}, 'diluent_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': 'Diluent cylinder: litres (metric) or ft³ rated at 3000 psi (imperial). Default 3 L.'}, 'o2_start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Oxygen cylinder fill (bar or psi). Default 232 bar (3365 psi).'}, 'diluent_helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Onboard diluent helium percent. Default 0.'}, 'diluent_oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Onboard diluent oxygen percent. Default 21.'}, 'descent_switch_depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft) where the descent setpoint hands over to bottom, first descent only. Default 18 m (60 ft).'}, 'diluent_breathable_oc': {'type': 'boolean', 'description': 'true if the BOV or a regulator can breathe the onboard diluent open circuit. It then joins the bailout pool last. Default false.'}, 'diluent_start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Diluent cylinder fill (bar or psi). Default 232 bar (3365 psi).'}}, 'description': 'The rebreather (mode ccr only).', 'additionalProperties': False}, 'mode': {'enum': ['oc', 'ccr'], 'type': 'string', 'description': 'oc (open circuit, default) or ccr (closed-circuit rebreather). Set ccr for every rebreather plan: the ccr, ccr_deco_schedule, ccr_dilout_switches and bailout fields need it. On ccr, `cylinders` are the open-circuit bailout gases; the rig itself is in `ccr`.'}, 'ppo2': {'type': 'object', 'properties': {'min': {'type': 'number', 'maximum': 0.21, 'minimum': 0.16, 'description': 'Lowest PPOâ\x82\x82 in bar before a hypoxia warning, 0.16 to 0.21. Warnings only. Default 0.18.'}, 'max_all': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'One PPOâ\x82\x82 cap in bar for every gas, 1.0 to 1.6 (e.g. 1.4 for recreational nitrox). Sets all three bands; a band field given too wins for its band.'}, 'max_28_to_44pct_o2': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases from 28% to under 45% Oâ\x82\x82, 1.0 to 1.6. Default 1.5.'}, 'max_under_28pct_o2': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases under 28% Oâ\x82\x82, 1.0 to 1.6. Sets their MOD and switch depth. Default 1.4.'}, 'max_45pct_o2_and_up': {'type': 'number', 'maximum': 1.6, 'minimum': 1, 'description': 'PPOâ\x82\x82 cap in bar for gases of 45% Oâ\x82\x82 and over, 1.0 to 1.6. Default 1.6.'}}, 'description': 'PPOâ\x82\x82 limits in bar.', 'additionalProperties': False}, 'rates': {'type': 'object', 'properties': {'descent': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Descent rate (m/min or ft/min), 1 to 100 m/min. Default 20 m/min (66 ft/min).'}, 'ascent_deep': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Ascent rate below rate_change_depth (m/min or ft/min), 1 to 100 m/min. Default 9 m/min (30 ft/min).'}, 'ascent_shallow': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Ascent rate from rate_change_depth to the surface (m/min or ft/min), 1 to 100 m/min. Default 3 m/min (10 ft/min).'}, 'rate_change_depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth where the ascent rate changes (m or ft), 3 to 200 m. Default 6 m (20 ft).'}}, 'description': 'Ascent and descent rates, per units.', 'additionalProperties': False}, 'stops': {'type': 'object', 'properties': {'stop_spacing': {'type': 'number', 'description': 'Distance between stops: 3, 6 or 9 m; 10, 20 or 30 ft. Default 3 m (10 ft).'}, 'time_rounding': {'enum': ['1s', '30s', '1min'], 'type': 'string', 'description': '1s, 30s or 1min. Applied inside the engine; a stop is never shorter than the obligation. Default 1min.'}, 'last_stop_depth': {'type': 'number', 'description': 'Final stop depth: 3, 4.5 or 6 m; 10, 15 or 20 ft. Default 6 m (20 ft).'}}, 'description': 'Stop grid and stop-time rounding.', 'additionalProperties': False}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, L/min, °C) or imperial (ft, psi, ft³, ft³/min, °F). Applies to every input and output value except PPOâ\x82\x82/setpoints (bar), mixes (%), density (g/L). Default metric.'}, 'levels': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'bottom_time_min'], 'properties': {'gas': {'type': 'string', 'maxLength': 12, 'description': 'Cylinder id this level breathes, or "auto" (default): the richest gas legal at this depth by PPOâ\x82\x82 cap, hypoxic floor and density limit. On ccr, auto means the loop on the onboard diluent.'}, 'depth': {'type': 'number', 'maximum': 700, 'minimum': 0, 'description': 'Level depth (m or ft, per units). 1 to 200 m (3 to 650 ft). Required.'}, 'breathe': {'enum': ['loop', 'oc'], 'type': 'string', 'description': 'ccr only. loop (default) or oc: dive this level open circuit on `gas`.'}, 'diluent': {'type': 'string', 'maxLength': 12, 'description': 'ccr only. "onboard" (default) or a cylinder id to breathe through the loop as a dilout on this level.'}, 'setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'ccr only. Loop PPOâ\x82\x82 for this level in bar, 0.4 to 1.6. Default ccr.setpoints.bottom.'}, 'bottom_time_min': {'type': 'number', 'maximum': 360, 'minimum': 0, 'description': 'Minutes at this depth, excluding the descent to it (unless behavior.include_travel_in_level_time is true). 0 to 360. 0 = arrival only: passes through this depth on this gas, used for a no-stop check or a travel-gas leg. Required.'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'Dive levels in the order dived, 1 to 20. The first is level_number 1.'}, 'bailout': {'type': 'object', 'properties': {'view': {'enum': ['loop', 'end_of_profile', 'after_level', 'at_run_time', 'on_ascent'], 'type': 'string', 'description': 'ccr: which ascent the table shows. loop (default), end_of_profile, after_level, at_run_time, on_ascent. The worst-case bailout check runs on every view.'}, 'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'For on_ascent: depth (m or ft) the diver leaves the loop on the final ascent.'}, 'level_number': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'For after_level: the level (1-based) the diver bails at the end of.'}, 'run_time_min': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'For at_run_time: minutes on the Run clock.'}}, 'description': 'ccr only: the bailout view.', 'additionalProperties': False}, 'reserve': {'type': 'object', 'properties': {'rule': {'enum': ['thirds', 'fourths', 'fifths', 'sixths', 'fixed'], 'type': 'string', 'description': 'thirds, fourths, fifths, sixths or fixed. Default thirds. Below 50 bar (725 psi) is always critical.'}, 'fixed_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Reserve for rule fixed (bar or psi, per units). Default 50 bar (725 psi).'}}, 'description': 'Gas reserve rule. Moves the gas status and warnings, never the stops.', 'additionalProperties': False}, 'audience': {'enum': ['beginner', 'recreational', 'technical'], 'type': 'string', 'description': 'Optional: who the answer is for, from the conversation. beginner: new to deco, plain words. recreational (default): some training. technical: trained deco or CCR diver, terms and tables. Shapes the wording only, never a number.'}, 'behavior': {'type': 'object', 'properties': {'o2_narcotic': {'type': 'boolean', 'description': 'Count oxygen in END. END and warnings only. Default false.'}, 'stay_on_loop': {'type': 'boolean', 'description': 'ccr: true (default) keeps the whole ascent on the loop; false lets an OC deco gas take over where its PPOâ\x82\x82 is higher. Not carried in share links.'}, 'include_travel_in_level_time': {'type': 'boolean', 'description': 'true: level time includes the descent to it (dive-computer runtime style). Default false.'}}, 'description': 'Profile and model switches.', 'additionalProperties': False}, 'cylinders': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'oxygen_pct'], 'properties': {'id': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Short name used by levels and contingencies, 1 to 12 letters, digits, _ or -, e.g. back, s50, o2. Unique.'}, 'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, rated_pressure, twinset and the fill (explicit fields win). al80/s80: aluminium 80, 11.1 L, 3000 psi. al40, al63: aluminium 40/63, 3000 psi. hp80, hp100, hp120: US high-pressure steel, 3442 psi. lp85: US low-pressure steel, 2640 psi. single_10l, single_12l, single_15l: one EU steel cylinder at 232 bar. twin_10l, twin_12l, twin_15l: back-mounted doubles, 232 bar each. stage_11l: aluminium stage (AL80 size), 200 bar. stage_7l: 7 L stage, 200 bar. o2_3l, dil_3l: 3 L rebreather cylinder, 232 bar.'}, 'twinset': {'type': 'boolean', 'description': "true for back-mounted doubles or a sidemount pair breathed as one supply: doubles the gas at the same pressure. Default: the preset's, else false."}, 'helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Helium percent, 0 to 95, oxygen_pct + helium_pct at most 100. Trimix 18/45 is 45. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Oxygen percent, 5 to 100. Air is 21, EANx50 is 50, trimix 18/45 is 18.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0, 'description': '12 = one 12 L cylinder (metric). 77.4 = an AL80 in ft³ (imperial, with rated_pressure 3000). Metric: water volume of ONE cylinder in litres, the number stamped on the neck, 1 to 25.5. Imperial: rated capacity in ft³ from the spec sheet (an AL80 holds less than its name), 1 to 400. Or pass preset. Default with neither: an AL80 (11.1 L, 77.4 ft³ at 3000 psi).'}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': "Imperial only: the working pressure the capacity is rated at, psi, 725 to 7252 (3000 for an AL80). Default: the preset's, else 3000. Ignored on metric."}, 'start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': "Pressure in the cylinder at the start of the dive (bar or psi, per units), 0 to 500 bar (0 to 7252 psi). Default: the preset's fill, else 206.84 bar (3000 psi)."}, 'reserve_pressure': {'type': 'number', 'maximum': 4351, 'minimum': 0, 'description': 'Custom reserve for this cylinder (bar or psi, per units), 5 to 300 bar (50 to 4351 psi). Default: the reserve rule. Moves warnings and find_max_bottom_time, never the stops.'}, 'exclude_from_deco': {'type': 'boolean', 'description': 'true keeps this cylinder out of automatic ascent switching (pony, buddy bottle). Still priced; a level can still name it. Default false.'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': 'Every open-circuit cylinder carried: back gas, stages, deco gases; on ccr, bailout gases. 1 to 10. Give preset or cylinder_size and start_pressure when known; omitted ones default (an AL80, 11.1 L at 3000 psi) and the result marks them.'}, 'modifiers': {'type': 'object', 'properties': {'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Deco SAC override for the whole plan (L/min or ft³/min). Default gas_consumption.deco_sac.'}, 'delay_min': {'type': 'number', 'maximum': 60, 'minimum': 0, 'description': 'A hold at depth before the ascent starts, 0 to 60 minutes. Moves the schedule. Default 0.'}, 'stress_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Hard-breathing surface rate, SAC (L/min or ft³/min, per units), from the end of the bottom (on bailout: from leaving the loop), gas only. Needs stress_minutes or stress_whole_ascent.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Working SAC override for the whole plan (L/min or ft³/min). Default gas_consumption.working_sac.'}, 'stress_minutes': {'type': 'number', 'maximum': 60, 'minimum': 1, 'description': 'Minutes the stress_sac burst lasts, 1 to 60.'}, 'stress_whole_ascent': {'type': 'boolean', 'description': 'true: the stress_sac burst lasts to the surface. Default false.'}}, 'description': 'Plan modifiers: a stress breathing burst (gas only) and a delay before the ascent (moves the schedule).', 'additionalProperties': False}, 'plan_name': {'type': 'string', 'description': 'Short human label shown in the approval card; fill it first, e.g. 40m 20min air+EANx50. Also titles the plan table and share link, which keep its first 24 characters (a longer name is cut, never refused).'}, 'scenarios': {'type': 'array', 'items': {'type': 'string', 'maxLength': 40, 'description': 'One scenario key.'}, 'maxItems': 10, 'description': 'Which plans to compute, default ["base"]. base; deeper_3m, deeper_5m (imperial: deeper_10ft, deeper_20ft), longer_3min, longer_5min, deeper_and_longer_3, deeper_and_longer_5 (applied to the deepest level); lost:<cylinder id> (that cylinder never carried); custom:<name> (defined in contingencies); gf:<low>/<high> (e.g. gf:40/85), last_stop:<depth> (3, 4.5, 6 m or 10, 15, 20 ft) and stop_rounding:<1s|30s|1min> (the base plan with that one setting changed, to compare settings in one call); all (not the variants). Each one returns its own table and a comparison row. Up to 10. Ask for more in a later call.'}, 'gas_switch': {'type': 'object', 'properties': {'switch_at': {'enum': ['mod', 'stop'], 'type': 'string', 'description': 'mod: switch at the deco gas MOD (default). stop: at the next stop.'}, 'switch_time_s': {'type': 'number', 'maximum': 300, 'minimum': 0, 'description': 'Seconds held at each OC switch on the old gas, 0 to 300 in 30 s steps. Default 0.'}, 'when_cylinder_empty': {'enum': ['show_shortfall', 'switch_gas'], 'type': 'string', 'description': 'show_shortfall (default): stay on it and report how much more gas is needed. switch_gas: move to the richest safe gas left.'}}, 'description': 'Gas switching.', 'additionalProperties': False}, 'repetitive': {'type': 'object', 'required': ['surface_interval_min'], 'properties': {'previous_share_url': {'type': 'string', 'maxLength': 8000, 'description': "The share link of the previous dive's plan_dive result. Its tissue loading seeds this dive."}, 'surface_interval_min': {'type': 'number', 'maximum': 1440, 'minimum': 15, 'description': 'Surface interval since the previous dive, 15 to 1440 minutes.'}}, 'description': 'Repetitive dive: the previous dive and the surface interval.', 'additionalProperties': False}, 'descent_gas': {'type': 'string', 'maxLength': 12, 'description': "oc only. Cylinder id of a travel gas for the descent, for a hypoxic bottom mix (e.g. 12/60) that cannot be breathed near the surface. When level 1 is deeper than that gas's MOD, a 0-minute level on it at its MOD (whole m or ft) is added before level 1, and the result numbers that level first. Default none."}, 'environment': {'type': 'object', 'properties': {'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'altitude': {'type': 'number', 'maximum': 32800, 'minimum': 0, 'description': 'Surface altitude (m or ft, per units), 0 to 10000 m (0 to 32800 ft). Default 0.'}, 'temperature': {'type': 'number', 'maximum': 104, 'minimum': -2, 'description': 'Water temperature for gas density only, -2 to 40 °C (28 to 104 °F). Never moves stops. Default 15 °C (59 °F).'}}, 'description': 'Water and altitude.', 'additionalProperties': False}, 'contingencies': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 24, 'minLength': 1, 'description': 'Name of this contingency, 1 to 24 characters. Request it with scenarios "custom:<name>". Unique.'}, 'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Deco SAC for this contingency only (L/min or ft³/min, per units). Default gas_consumption.deco_sac.'}, 'delay_min': {'type': 'number', 'maximum': 60, 'minimum': 0, 'description': 'A hold at depth before the ascent starts, 0 to 60 minutes. Moves the schedule. Default 0.'}, 'stress_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Hard-breathing surface rate, SAC (L/min or ft³/min, per units), from the end of the bottom (on bailout: from leaving the loop), gas only. Needs stress_minutes or stress_whole_ascent.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Working SAC for this contingency only (L/min or ft³/min, per units). Default gas_consumption.working_sac.'}, 'depth_change': {'type': 'number', 'maximum': 100, 'minimum': -100, 'description': 'Depth added to that level (m or ft, per units), -30 to 30 m (-100 to 100 ft). Default 0.'}, 'level_number': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Level number (1-based) the depth and time changes apply to. Default the deepest (last on a tie).'}, 'lost_cylinders': {'type': 'string', 'maxLength': 130, 'description': 'Cylinder ids lost in this contingency, comma-separated, e.g. "s50,o2". Default none.'}, 'stress_minutes': {'type': 'number', 'maximum': 60, 'minimum': 1, 'description': 'Minutes the stress_sac burst lasts, 1 to 60.'}, 'time_change_min': {'type': 'number', 'maximum': 60, 'minimum': -60, 'description': 'Minutes added to that level, -60 to 60. Default 0.'}, 'fails_after_level': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Level number (1-based) after which the lost cylinders are gone. Omit: they are never carried.'}, 'stress_whole_ascent': {'type': 'boolean', 'description': 'true: the stress_sac burst lasts to the surface. Default false.'}}, 'additionalProperties': False}, 'maxItems': 6, 'description': 'Custom contingencies, up to 6, each requested with scenarios "custom:<name>" (or "all").'}, 'oxygen_breaks': {'type': 'object', 'properties': {'enabled': {'type': 'boolean', 'description': 'Insert oxygen breaks on high-PPOâ\x82\x82 stops. Default false.'}, 'min_ppo2': {'type': 'number', 'maximum': 1.8, 'minimum': 0.8, 'description': 'PPOâ\x82\x82 in bar at or above which a stop counts toward the break clock, 0.8 to 1.8. Default 1.4.'}, 'o2_minutes': {'type': 'number', 'maximum': 30, 'minimum': 5, 'description': 'Minutes on high PPOâ\x82\x82 before a break, 5 to 30. Default 20.'}, 'apply_on_loop': {'type': 'boolean', 'description': 'ccr: also break on the loop. Not carried in share links. Default false.'}, 'break_minutes': {'type': 'number', 'maximum': 10, 'minimum': 1, 'description': 'Break length in minutes, 1 to 10. Default 5.'}, 'loop_setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'ccr: loop setpoint in bar during a break. Default 0.7.'}}, 'description': 'Oxygen breaks.', 'additionalProperties': False}, 'table_columns': {'type': 'object', 'properties': {'cns': {'type': 'boolean', 'description': 'Add a running CNS column. Default false.'}, 'gas_remaining': {'type': 'boolean', 'description': 'Add a gas-remaining column (bar or psi). Default false.'}}, 'description': 'Extra table columns. PPOâ\x82\x82 is always shown.', 'additionalProperties': False}, 'gas_consumption': {'type': 'object', 'properties': {'deco_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'SAC from the first stop up (L/min or ft³/min). Default 15 L/min (0.53 ft³/min). Gas figures only.'}, 'working_sac': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Surface air consumption (SAC, also called RMV) for descent, bottom and the deep ascent (L/min or ft³/min, per units), 1 to 200 L/min (0.05 to 7.1 ft³/min). Default 20 L/min (0.71 ft³/min). Gas figures only.'}, 'ccr_metabolic_o2': {'type': 'number', 'maximum': 2, 'minimum': 0.4, 'description': 'ccr: oxygen the diver metabolises, L/min in both unit systems, 0.4 to 2.0. Default 0.85.'}}, 'description': 'Breathing rates.', 'additionalProperties': False}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'description': 'concise: plan table, gas, warnings, scenario summary. detailed: adds every setting used, per-level NDL, full warning details and the bailout table. Default concise.'}, 'gradient_factors': {'type': 'object', 'properties': {'low': {'type': 'number', 'maximum': 100, 'minimum': 10, 'description': 'GF low, percent, 10 to 100. Sets the first stop depth. Default 50.'}, 'high': {'type': 'number', 'maximum': 100, 'minimum': 10, 'description': 'GF high, percent, 10 to 100. Sets the shallow stops and surfacing margin. Default 80.'}}, 'description': 'Gradient factors. Lower is more conservative. Default 50/80. If high cannot surface the plan, the engine raises it and warns.', 'additionalProperties': False}, 'ccr_deco_schedule': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'setpoint'], 'properties': {'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft): the step applies at this depth and shallower.'}, 'setpoint': {'type': 'number', 'maximum': 1.6, 'minimum': 0.4, 'description': 'Setpoint in bar.'}}, 'additionalProperties': False}, 'maxItems': 10, 'description': 'ccr deco setpoint steps, up to 10. Default [40 m: 1.5, 23 m: 1.6]. Send [] for the single ccr.setpoints.deco.'}, 'warning_thresholds': {'type': 'object', 'properties': {'otu': {'type': 'number', 'maximum': 500, 'minimum': 200, 'description': 'OTU warning, 200 to 500. Default 300.'}, 'cns_pct': {'type': 'number', 'maximum': 100, 'minimum': 50, 'description': 'CNS percent warning, 50 to 100. Default 80.'}, 'end_max': {'type': 'number', 'maximum': 330, 'minimum': 0, 'description': 'Highest END before a warning (m or ft, per units), 20 to 100 m. Default 30 m (100 ft).'}, 'density_warning': {'type': 'number', 'maximum': 8, 'minimum': 3, 'description': 'Gas density warning in g/L, 3 to 8. Default 5.2.'}, 'density_critical': {'type': 'number', 'maximum': 8, 'minimum': 3, 'description': 'Gas density critical in g/L, 3 to 8; also vetoes a gas in auto. Default 6.2.'}}, 'description': 'Warning thresholds. Warnings only, never the stops.', 'additionalProperties': False}, 'ccr_dilout_switches': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'cylinder'], 'properties': {'depth': {'type': 'number', 'maximum': 660, 'minimum': 0, 'description': 'Depth (m or ft): the switch applies at this depth and shallower.'}, 'cylinder': {'type': 'string', 'maxLength': 12, 'description': 'Cylinder id breathed as diluent, or "onboard" to switch back.'}}, 'additionalProperties': False}, 'maxItems': 6, 'description': 'ccr: at each depth and shallower, the loop breathes that cylinder as diluent (a dilout). Up to 6. Default none.'}}, 'description': 'The plan_dive input the link carries, in the requested units.', 'additionalProperties': False}, 'app_version': {'type': 'string', 'description': 'Dive Kit version that wrote the link.'}, 'safety_notice': {'type': 'string'}, 'results_summary': {'type': 'object', 'required': ['runtime_min', 'tts_min'], 'properties': {'tts_min': {'type': 'number'}, 'runtime_min': {'type': 'number'}}, 'description': 'Base-plan runtime and TTS baked into the link. Informational: plan_dive recomputes them.', 'additionalProperties': False}, 'has_tissue_state': {'type': 'boolean', 'description': "The link carries a repetitive dive's starting tissue loading."}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['segments'], 'properties': {'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'water': {'enum': ['salt', 'fresh', 'en13319', 'red_sea'], 'type': 'string', 'description': 'Water type, from its density: en13319 (EN 13319, the dive computer standard) 10.00 m per bar, salt 9.95, fresh 10.20, red_sea 9.92. Default en13319.'}, 'segments': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'duration_min', 'start_pressure', 'end_pressure'], 'properties': {'depth': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Average depth of this stretch (m or ft).'}, 'preset': {'enum': ['al80', 'al40', 'al63', 'hp80', 'hp100', 'hp120', 'lp85', 's80', 'single_10l', 'single_12l', 'single_15l', 'twin_10l', 'twin_12l', 'twin_15l', 'stage_11l', 'stage_7l', 'o2_3l', 'dil_3l'], 'type': 'string', 'description': 'A common cylinder instead of cylinder_size, as in plan_dive: al80, al40, al63, hp80, hp100, hp120, lp85, s80, single_10l, single_12l, single_15l, twin_10l, twin_12l, twin_15l, stage_11l, stage_7l, o2_3l, dil_3l. twin_ presets are a manifolded pair.'}, 'twinset': {'type': 'boolean', 'description': "true for two cylinders on a manifold, filled or breathed together: doubles the volume. Default: the preset's, else false."}, 'helium_pct': {'type': 'number', 'maximum': 95, 'minimum': 0, 'description': 'Helium % of the gas in the cylinder. Default 0.'}, 'oxygen_pct': {'type': 'number', 'maximum': 100, 'minimum': 5, 'description': 'Oxygen % of the gas in the cylinder. Default 21 (air). Give it with helium_pct for trimix.'}, 'duration_min': {'type': 'number', 'maximum': 600, 'minimum': 0.1, 'description': 'Minutes of this stretch, 0.1 to 600.'}, 'end_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 0, 'description': 'Gauge reading at the end (bar or psi); lower than start_pressure.'}, 'cylinder_size': {'type': 'number', 'maximum': 400, 'minimum': 0.5, 'description': "Metric: water volume of ONE cylinder in litres, the number stamped on the neck. Imperial: rated capacity in ft³ at rated_pressure (an AL80 is 77.4). Default: the preset's, else an AL80 (11.1 L)."}, 'rated_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 725, 'description': "Imperial only: the psi the capacity is rated at. Default: the preset's, else 3000. Ignored on metric."}, 'start_pressure': {'type': 'number', 'maximum': 7252, 'minimum': 1, 'description': 'Gauge reading at the start of the stretch (bar or psi, per units).'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': 'Stretches of the logged dive, each on one cylinder, not overlapping in time.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['units', 'rmv', 'sac', 'sac_per_cylinder', 'segments', 'total_gas_volume', 'total_time_min', 'weighted_avg_depth', 'weighted_avg_ata', 'plan_dive_gas_consumption', 'assumptions', 'spoken_summary', 'safety_notice'], 'properties': {'rmv': {'type': 'number', 'description': 'Surface litres a minute (ft³/min imperial), load-weighted: the figure gas_usage sac and plan_dive working_sac take.'}, 'sac': {'type': ['number', 'null'], 'description': 'Pressure drop a minute (bar/min or psi/min) on the one cylinder every segment used; null when they used different cylinders.'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'metric (m, bar, L, °C) or imperial (ft, psi, ft³, °F): the unit system for every value in and out. Default metric.'}, 'segments': {'type': 'array', 'items': {'type': 'object', 'required': ['depth', 'duration_min', 'ambient_ata', 'gas_used_volume', 'rmv', 'sac'], 'properties': {'rmv': {'type': 'number'}, 'sac': {'type': 'number'}, 'depth': {'type': 'number'}, 'ambient_ata': {'type': 'number'}, 'duration_min': {'type': 'number'}, 'gas_used_volume': {'type': 'number'}}, 'additionalProperties': False}}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}}, 'safety_notice': {'type': 'string'}, 'spoken_summary': {'type': 'string', 'description': 'A few plain sentences for a voice reply, ending with an offer: digits allowed, no symbols or notation.'}, 'total_time_min': {'type': 'number'}, 'sac_per_cylinder': {'type': 'array', 'items': {'type': 'object', 'required': ['cylinder', 'rmv', 'sac'], 'properties': {'rmv': {'type': 'number'}, 'sac': {'type': 'number'}, 'cylinder': {'type': 'string'}}, 'additionalProperties': False}}, 'total_gas_volume': {'type': 'number'}, 'weighted_avg_ata': {'type': 'number'}, 'weighted_avg_depth': {'type': 'number'}, 'plan_dive_gas_consumption': {'type': 'object', 'required': ['working_sac'], 'properties': {'working_sac': {'type': 'number'}}, 'description': 'Ready for plan_dive gas_consumption.', 'additionalProperties': False}}, 'additionalProperties': False}
最近のツール変更
類似のMCPサーバー
Clink Forge
Provides pay-per-call access to attested government datasets, primarily CDC and HHS health data plus EPA air-quality observations.
workbench
Provides computational molecular biology tools for DNA, RNA, and protein analysis, cloning, PCR, CRISPR, oligonucleotide design, …
gisgp
Provides GIS geocoding, routing, spatial transformations, ArcGIS layer inspection and export, and location due diligence for haza…
calc.engineer
Provides deterministic engineering calculators for RF and LoRa systems, electronics, batteries, solar and power systems, cooling,…
Good Earth
Provides plot-specific climate and growing-season analysis for gardens and farms, including frost, heat accumulation, crop suitab…
osint
Provides source-cited US data and schemas for power systems, AI infrastructure, semiconductor production and trade, robotics, and…
EngScript Engineering MCP
Performs engineering calculations for oil and gas applications, including thermodynamics, fluid systems, equipment sizing, balanc…
civilquants
Calculates parametric civil-engineering quantities and Bills of Quantities for drainage, earthworks, retaining walls, pavements, …