search_boats_v3
ChatGPTVerify every admitted offer using current PostgreSQL facts; lexical/vector retrieval only aids ranking. requirements is a bounded expression tree: {all:[...]}, {any:[...]} or {not:...}; leaves have field, op, value, optional unit and label. Numeric fields: price_eur, year, length_m, beam_m, draft_m, berths, cabins, bathrooms, guest_capacity, crew_cabins, crew_berths, engine_count, engine_power_hp, engine_power_kw, engine_hours, cruising_speed_kn, max_speed_kn, range_nm, fuel_capacity_l, water_capacity_l, holding_tank_l, fuel_consumption_lh, displacement_kg, light_displacement_kg, air_draft_m, last_refit_year, waterline_length_m, cabin_height_m, sail_area_m2, ballast_weight_kg, draft_min_m, draft_max_m (eq/gte/lte/between). Text fields: builder, model, model_family, country, location, source, primary_type, fuel_type, drive_type, propulsion_type, transmission, engine_raw, hull_material, hull_type, keel_type, rig_type, designer, flag, ce_category, registration, vat_status, condition (eq/in). primary_type uses motor, sail or inflatable. Boolean fields: ex_charter, equipment.ac_outlets_220v, equipment.air_conditioning, equipment.air_conditioning_cabin, equipment.air_conditioning_salon, equipment.ais, equipment.alarm, equipment.anchor, equipment.anchor_windlass, equipment.antifouling, equipment.autopilot, equipment.bar_area, equipment.barbecue_grill, equipment.bathing_ladder, equipment.bathing_platform, equipment.battery, equipment.battery_charger, equipment.bilge_pump, equipment.bimini_top, equipment.bluetooth, equipment.bow_thruster, equipment.cd_player, equipment.cockpit_cover, equipment.cockpit_table, equipment.compass, equipment.cooktop, equipment.coolbox, equipment.courtesy_lights, equipment.cushions, equipment.davits, equipment.dc_outlets_12v, equipment.deck_cleaning_system, equipment.deck_shower, equipment.depth_instrument, equipment.dinghy, equipment.dishwasher, equipment.display, equipment.dock_water_hookup, equipment.dryer, equipment.dual_helm, equipment.dvd_player, equipment.electric_toilet, equipment.electronic_engine_controls, equipment.entrance_door, equipment.epirb, equipment.fire_extinguish_system, equipment.fire_extinguisher, equipment.fishfinder, equipment.flybridge, equipment.flybridge_cover, equipment.freezer, equipment.fridge, equipment.full_cover, equipment.galley, equipment.gangway, equipment.gas_alarm, equipment.generator, equipment.gps, equipment.gyro_stabilizer, equipment.hard_top, equipment.heating, equipment.holding_tank, equipment.horn, equipment.ice_maker, equipment.intercom, equipment.inverter, equipment.ipod_interface, equipment.kitchen_hood, equipment.life_jackets, equipment.life_raft, equipment.microwave, equipment.mob_system, equipment.mooring_winch, equipment.mp3_player, equipment.navigation_lights, equipment.on_board_computer, equipment.oven, equipment.plotter, equipment.radar, equipment.radar_reflector, equipment.radio, equipment.rectifier, equipment.satellite_internet, equipment.satellite_phone, equipment.searchlight, equipment.shore_supply, equipment.showers, equipment.sink, equipment.solar_charger, equipment.solar_panels, equipment.speakers, equipment.speed_instrument, equipment.spray_hood, equipment.stabilizer, equipment.stern_thruster, equipment.teak_cockpit, equipment.teak_deck, equipment.trailer, equipment.trim_tabs, equipment.tv, equipment.tv_antenna, equipment.under_water_light, equipment.vhf, equipment.vhs_player, equipment.washing_machine, equipment.water_heater, equipment.water_pressure_system, equipment.watermaker, equipment.wetbar, equipment.wifi, equipment.wind_generator, equipment.wind_instrument, equipment.wind_vane, equipment.window_covers, equipment.winter_cover, equipment.wooden_floor (eq). Unknown does not mean absent. Put unrepresentable mandatory requirements in unsupported_requirements; they must never be silently dropped. When total_is_exact is true, counts cover the complete admitted catalogue at catalog_revision; total includes offers needing verification and authorized alternatives. Reuse catalog_revision for pagination; on offer_catalog_changed restart page on…