{
    "uuid": "427fc87b14e612c2ea3417613c2545b7",
    "schema_kind": "equipment",
    "lang": "en",
    "title": "Equipment - Outdoor climbing route",
    "description": "Inventory record for a single climbing route on a natural site (SNE) or training crag, managed as an asset. Tracks the route topology, grading, bolting, top anchor, opening and re-equipping history. Reference standard EN 959 for fixed anchors.",
    "export_date": "2026-05-30 10:00:00",
    "dolibarr_version": "18.0.0",
    "extrafields": [
        {
            "name": "oroute_route_id",
            "label": "Route identifier",
            "type": "varchar",
            "size": "50",
            "required": 1,
            "unique": 1,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Internal id for the route",
            "pos": 100,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_site",
            "label": "Site / SNE",
            "type": "varchar",
            "size": "150",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Natural climbing site name",
            "pos": 105,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_sector",
            "label": "Sector",
            "type": "varchar",
            "size": "100",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Sector or sub-area within the site",
            "pos": 110,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_route_name",
            "label": "Route name",
            "type": "varchar",
            "size": "150",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Route name as printed in the topo",
            "pos": 115,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_route_number",
            "label": "Route number in topo",
            "type": "varchar",
            "size": "20",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Number assigned in the published topo",
            "pos": 120,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_opener_name",
            "label": "First ascensionist / opener",
            "type": "varchar",
            "size": "150",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Person or team who opened the route",
            "pos": 125,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_opening_date",
            "label": "Opening date",
            "type": "date",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "First ascent date",
            "pos": 130,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_grade",
            "label": "Route grade (French)",
            "type": "select",
            "size": "",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "3": "3",
                    "4a": "4a",
                    "4b": "4b",
                    "4c": "4c",
                    "5a": "5a",
                    "5b": "5b",
                    "5c": "5c",
                    "6a": "6a",
                    "6a+": "6a+",
                    "6b": "6b",
                    "6b+": "6b+",
                    "6c": "6c",
                    "6c+": "6c+",
                    "7a": "7a",
                    "7a+": "7a+",
                    "7b": "7b",
                    "7b+": "7b+",
                    "7c": "7c",
                    "7c+": "7c+",
                    "8a": "8a",
                    "8a+": "8a+",
                    "8b_and_above": "8b and above"
                }
            },
            "help": "French climbing grade",
            "pos": 200,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "5c",
            "alwayseditable": 0
        },
        {
            "name": "oroute_route_length_m",
            "label": "Route length (m)",
            "type": "double",
            "size": "6,2",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Total length of the route in metres",
            "pos": 210,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_pitches_count",
            "label": "Number of pitches",
            "type": "int",
            "size": "3",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "1 for single pitch routes",
            "pos": 215,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "1",
            "alwayseditable": 0
        },
        {
            "name": "oroute_bolts_count",
            "label": "Number of bolts (quickdraws required)",
            "type": "int",
            "size": "3",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Total number of intermediate anchors",
            "pos": 220,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_anchor_top_type",
            "label": "Top anchor type",
            "type": "select",
            "size": "",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "two_bolts_chain_carabiner": "Two bolts + chain + carabiner",
                    "two_ring_anchors": "Two ring anchors",
                    "tree_top_rope_forbidden": "Tree top rope - forbidden",
                    "chemical_anchors_with_maillon": "Chemical anchors with maillon",
                    "single_bolt_legacy": "Single bolt (legacy, not compliant)"
                }
            },
            "help": "Top anchor configuration",
            "pos": 225,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "two_bolts_chain_carabiner",
            "alwayseditable": 0
        },
        {
            "name": "oroute_recommended_rope_length_m",
            "label": "Recommended rope length (m)",
            "type": "double",
            "size": "5,1",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Single rope length to be brought",
            "pos": 230,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_orientation",
            "label": "Route orientation",
            "type": "select",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "N": "North",
                    "NE": "North-east",
                    "E": "East",
                    "SE": "South-east",
                    "S": "South",
                    "SW": "South-west",
                    "W": "West",
                    "NW": "North-west"
                }
            },
            "help": "Cardinal orientation of the face",
            "pos": 240,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_sun_exposure",
            "label": "Sun exposure",
            "type": "select",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "full_sun_afternoon": "Full sun in the afternoon",
                    "morning_only": "Morning sun only",
                    "shade": "Shade",
                    "mixed": "Mixed"
                }
            },
            "help": "",
            "pos": 245,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_suitability",
            "label": "Suitability",
            "type": "select",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "learning": "Learning / beginners",
                    "improvement": "Improvement",
                    "all_levels": "All levels",
                    "expert_only": "Expert only"
                }
            },
            "help": "Recommended audience",
            "pos": 250,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "all_levels",
            "alwayseditable": 0
        },
        {
            "name": "oroute_reequipment_date_last",
            "label": "Last re-equipment date",
            "type": "date",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Date of the last full re-bolting",
            "pos": 260,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_reequipment_date_next",
            "label": "Next re-equipment date",
            "type": "date",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Planned date for next re-bolting",
            "pos": 265,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "oroute_status",
            "label": "Status",
            "type": "select",
            "size": "",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "open": "Open",
                    "closed_temporary": "Closed - temporary",
                    "closed_definitive": "Closed - definitive",
                    "requires_caution": "Requires caution"
                }
            },
            "help": "Current opening status",
            "pos": 500,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "open",
            "alwayseditable": 0
        },
        {
            "name": "oroute_notes",
            "label": "Notes",
            "type": "text",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Free-form notes, hazards, comments",
            "pos": 700,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        }
    ],
    "pdf_layout": {
        "version": "1.1",
        "page": {
            "format": "A4",
            "orientation": "portrait",
            "margins": {
                "top": 20,
                "right": 15,
                "bottom": 20,
                "left": 15
            },
            "font_family": "helvetica",
            "font_size": 10
        },
        "header": {
            "title": "Equipment - Outdoor climbing route",
            "subtitle": "Asset inventory record",
            "logo_placeholder": "top-right",
            "show_page_number": true,
            "show_generated_date": true
        },
        "footer": {
            "text": "Generated via schemas.cap-rel.fr"
        },
        "sections": [
            {
                "id": "identification",
                "title": "Identification",
                "layout": "two_columns",
                "fields": [
                    "oroute_route_id",
                    "oroute_site",
                    "oroute_sector",
                    "oroute_route_name",
                    "oroute_route_number"
                ]
            },
            {
                "id": "opening",
                "title": "Opening",
                "layout": "two_columns",
                "fields": [
                    "oroute_opener_name",
                    "oroute_opening_date"
                ]
            },
            {
                "id": "specifications",
                "title": "Route specifications",
                "layout": "two_columns",
                "fields": [
                    "oroute_grade",
                    "oroute_route_length_m",
                    "oroute_pitches_count",
                    "oroute_bolts_count",
                    "oroute_anchor_top_type",
                    "oroute_recommended_rope_length_m"
                ]
            },
            {
                "id": "environment",
                "title": "Environment",
                "layout": "two_columns",
                "fields": [
                    "oroute_orientation",
                    "oroute_sun_exposure",
                    "oroute_suitability"
                ]
            },
            {
                "id": "follow_up",
                "title": "Re-equipment follow-up",
                "layout": "two_columns",
                "fields": [
                    "oroute_reequipment_date_last",
                    "oroute_reequipment_date_next"
                ]
            },
            {
                "id": "status",
                "title": "Status",
                "layout": "highlight_box",
                "fields": [
                    "oroute_status"
                ]
            },
            {
                "id": "notes",
                "title": "Notes",
                "layout": "full_width",
                "fields": [
                    "oroute_notes"
                ]
            }
        ],
        "field_render": {
            "oroute_status": {
                "style": "highlight",
                "color_by_value": {
                    "open": "#1f8a1f",
                    "closed_temporary": "#e69500",
                    "closed_definitive": "#555555",
                    "requires_caution": "#c00000"
                }
            },
            "oroute_notes": {
                "min_height": 30,
                "show_if_empty": false
            },
            "oroute_route_id": {
                "style": "bold",
                "frame": true
            },
            "oroute_route_name": {
                "style": "bold"
            }
        }
    }
}