{
    "uuid": "0d48a381ceae8f7b2518f3e23c23a791",
    "schema_kind": "intervention",
    "lang": "fr",
    "title": "Fiche d'intervention - Entretien piscine au chlore",
    "description": "Contrôle hebdomadaire d'une piscine traitée au chlore (galets, liquide ou granulé) : paramètres eau, filtration et accessoires.",
    "export_date": "2026-05-30 10:00:00",
    "dolibarr_version": "18.0.0",
    "extrafields": [
        {
            "name": "pchl_etablissement",
            "label": "Établissement / client",
            "type": "varchar",
            "size": "200",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Nom et adresse",
            "pos": 100,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "pchl_localisation",
            "label": "Localisation du bassin",
            "type": "varchar",
            "size": "150",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Jardin, terrasse, indoor",
            "pos": 110,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "pchl_type_bassin",
            "label": "Type de bassin",
            "type": "select",
            "size": "",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "piscine_privee": "Piscine privée résidentielle",
                    "piscine_loueur": "Piscine location saisonnière",
                    "piscine_hotel": "Piscine hôtel / camping",
                    "piscine_collective_privee": "Piscine collective privée (copropriété)"
                }
            },
            "help": "Catégorie",
            "pos": 120,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "piscine_privee",
            "alwayseditable": 0
        },
        {
            "name": "pchl_volume_m3",
            "label": "Volume bassin (m3)",
            "type": "double",
            "size": "8,2",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Volume eau total",
            "pos": 130,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "pchl_couverture",
            "label": "Couverture / volet",
            "type": "select",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "volet_immerge": "Volet immergé",
                    "volet_hors_sol": "Volet hors-sol",
                    "bache_a_barre": "Bâche à barres",
                    "bache_ete": "Bâche d'été",
                    "abri": "Abri haut / bas",
                    "aucune": "Aucune"
                }
            },
            "help": "Type de couverture",
            "pos": 140,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "aucune",
            "alwayseditable": 0
        },
        {
            "name": "pchl_forme_chlore",
            "label": "Forme de chlore utilisée",
            "type": "select",
            "size": "",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "galets_trichloro": "Galets de trichloro (stabilisés)",
                    "granule_dichloro": "Granulés dichloro (stabilisés)",
                    "hypochlorite_sodium": "Hypochlorite de sodium (liquide)",
                    "hypochlorite_calcium": "Hypochlorite de calcium",
                    "choc_oxygene": "Oxygène actif en complément"
                }
            },
            "help": "Produit en cours",
            "pos": 150,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "galets_trichloro",
            "alwayseditable": 0
        },
        {
            "name": "type_intervention",
            "label": "Type d'intervention",
            "type": "select",
            "size": "",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "mise_en_route": "Mise en route saisonnière",
                    "hebdomadaire": "Contrôle hebdomadaire",
                    "mensuel": "Contrôle mensuel approfondi",
                    "hivernage": "Hivernage",
                    "deshivernage": "Déshivernage",
                    "intervention_curative": "Intervention curative"
                }
            },
            "help": "Nature de la visite",
            "pos": 200,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "hebdomadaire",
            "alwayseditable": 0
        },
        {
            "name": "mesure_ph",
            "label": "pH mesuré",
            "type": "double",
            "size": "4,2",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Cible 7.0 à 7.4",
            "pos": 300,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "mesure_chlore_libre",
            "label": "Chlore libre (mg/L)",
            "type": "double",
            "size": "5,2",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Cible 1.0 à 3.0 mg/L",
            "pos": 310,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "mesure_chlore_total",
            "label": "Chlore total (mg/L)",
            "type": "double",
            "size": "5,2",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Pour calculer chlore combiné",
            "pos": 320,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "mesure_chlore_combine",
            "label": "Chlore combiné calculé (mg/L)",
            "type": "double",
            "size": "5,2",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Cible < 0.6 mg/L, sinon choc",
            "pos": 330,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "mesure_stabilisant",
            "label": "Stabilisant - acide cyanurique (mg/L)",
            "type": "int",
            "size": "4",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Cible 20 à 50 mg/L, max 75 mg/L",
            "pos": 340,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "mesure_tac",
            "label": "TAC - alcalinité (degF)",
            "type": "double",
            "size": "5,2",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Cible 8 à 14 degF",
            "pos": 350,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "mesure_th",
            "label": "TH - dureté (degF)",
            "type": "double",
            "size": "5,2",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Cible 10 à 25 degF",
            "pos": 360,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "mesure_temperature",
            "label": "Température eau (degC)",
            "type": "double",
            "size": "4,1",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "",
            "pos": 370,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "verif_diffuseur",
            "label": "Diffuseur / galets rechargés",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Galets ou granulés rechargés selon besoin",
            "pos": 400,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "1",
            "alwayseditable": 0
        },
        {
            "name": "verif_pompe_doseuse",
            "label": "Pompe doseuse contrôlée",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Si dosage liquide automatisé",
            "pos": 410,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "0",
            "alwayseditable": 0
        },
        {
            "name": "verif_filtre_contre_lavage",
            "label": "Contre-lavage filtre effectué",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Filtre à sable, cartouche, diatomée",
            "pos": 420,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "1",
            "alwayseditable": 0
        },
        {
            "name": "verif_skimmer",
            "label": "Panier skimmer nettoyé",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Vidage feuilles et débris",
            "pos": 430,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "1",
            "alwayseditable": 0
        },
        {
            "name": "verif_prefiltre_pompe",
            "label": "Préfiltre pompe nettoyé",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Panier préfiltre filtration",
            "pos": 440,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "1",
            "alwayseditable": 0
        },
        {
            "name": "verif_niveau_eau",
            "label": "Niveau d'eau au mi-skimmer",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Réajustement si nécessaire",
            "pos": 450,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "1",
            "alwayseditable": 0
        },
        {
            "name": "verif_ligne_eau",
            "label": "Ligne d'eau nettoyée",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Brossage parois et ligne",
            "pos": 460,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "1",
            "alwayseditable": 0
        },
        {
            "name": "verif_robot",
            "label": "Passage robot / aspiration manuelle",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Nettoyage du fond",
            "pos": 470,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "1",
            "alwayseditable": 0
        },
        {
            "name": "choc_chlore_realise",
            "label": "Traitement choc réalisé",
            "type": "boolean",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Si chlore combiné > 0.6 ou eau verte",
            "pos": 480,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "0",
            "alwayseditable": 0
        },
        {
            "name": "produits_ajoutes",
            "label": "Produits ajoutés",
            "type": "text",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Chlore, pH-, pH+, floculant, anticalcaire...",
            "pos": 500,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "anomalies_constatees",
            "label": "Anomalies constatées",
            "type": "text",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Description défauts",
            "pos": 510,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "mesures_correctives",
            "label": "Mesures correctives",
            "type": "text",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Actions réalisées",
            "pos": 520,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "conclusion",
            "label": "Conclusion",
            "type": "select",
            "size": "",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": {
                "options": {
                    "conforme": "CONFORME baignade autorisée",
                    "conforme_reserve": "CONFORME avec réserves",
                    "non_conforme": "NON CONFORME baignade déconseillée"
                }
            },
            "help": "Résultat de l'intervention",
            "pos": 600,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "conforme",
            "alwayseditable": 0
        },
        {
            "name": "date_prochaine_visite",
            "label": "Date prochaine visite",
            "type": "date",
            "size": "",
            "required": 0,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Selon contrat",
            "pos": 610,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        },
        {
            "name": "operateur_nom",
            "personal_data": 1,
            "label": "Nom de l'opérateur",
            "type": "varchar",
            "size": "100",
            "required": 1,
            "unique": 0,
            "visible": 1,
            "totalizable": 0,
            "printable": 1,
            "param": [],
            "help": "Pisciniste / technicien",
            "pos": 700,
            "enabled": 1,
            "perms": "",
            "langfile": "",
            "computed": "",
            "default": "",
            "alwayseditable": 0
        }
    ],
    "pdf_layout": {
        "version": "1.0",
        "page": {
            "format": "A4",
            "orientation": "portrait",
            "margins": { "top": 20, "right": 15, "bottom": 20, "left": 15 },
            "font_family": "helvetica",
            "font_size": 10
        },
        "header": {
            "title": "Fiche d'entretien - Piscine au chlore",
            "subtitle": "Contrôle hebdomadaire piscine traitée au chlore",
            "logo_placeholder": "top-right",
            "show_page_number": true,
            "show_generated_date": true
        },
        "footer": {
            "text": "Document généré via schemas.cap-rel.fr"
        },
        "sections": [
            {
                "id": "identification",
                "title": "Identification du bassin",
                "layout": "two_columns",
                "fields": [
                    "pchl_etablissement",
                    "pchl_localisation",
                    "pchl_type_bassin",
                    "pchl_volume_m3",
                    "pchl_couverture",
                    "pchl_forme_chlore"
                ]
            },
            {
                "id": "intervention",
                "title": "Nature de l'intervention",
                "layout": "single_column",
                "fields": ["type_intervention"]
            },
            {
                "id": "mesures",
                "title": "Mesures physico-chimiques",
                "layout": "two_columns",
                "fields": [
                    "mesure_ph",
                    "mesure_chlore_libre",
                    "mesure_chlore_total",
                    "mesure_chlore_combine",
                    "mesure_stabilisant",
                    "mesure_tac",
                    "mesure_th",
                    "mesure_temperature"
                ]
            },
            {
                "id": "dosage",
                "title": "Système de dosage",
                "layout": "two_columns",
                "fields": [
                    "verif_diffuseur",
                    "verif_pompe_doseuse"
                ]
            },
            {
                "id": "filtration",
                "title": "Filtration et accessoires",
                "layout": "checklist",
                "fields": [
                    "verif_filtre_contre_lavage",
                    "verif_skimmer",
                    "verif_prefiltre_pompe",
                    "verif_niveau_eau",
                    "verif_ligne_eau",
                    "verif_robot",
                    "choc_chlore_realise"
                ]
            },
            {
                "id": "actions",
                "title": "Produits et observations",
                "layout": "full_width",
                "fields": [
                    "produits_ajoutes",
                    "anomalies_constatees",
                    "mesures_correctives"
                ]
            },
            {
                "id": "conclusion",
                "title": "Conclusion",
                "layout": "highlight_box",
                "fields": ["conclusion", "date_prochaine_visite"]
            },
            {
                "id": "signature",
                "title": "Opérateur",
                "layout": "signature_block",
                "fields": ["operateur_nom"],
                "signature_boxes": [
                    { "label": "Signature opérateur", "for_field": "operateur_nom" },
                    { "label": "Signature client", "for_field": null }
                ]
            }
        ],
        "field_render": {
            "pchl_etablissement": { "style": "bold" },
            "conclusion": {
                "style": "highlight",
                "color_by_value": {
                    "conforme": "#1f8a1f",
                    "conforme_reserve": "#e69500",
                    "non_conforme": "#c00000"
                }
            },
            "anomalies_constatees": { "min_height": 30, "show_if_empty": false },
            "mesures_correctives": { "min_height": 30, "show_if_empty": false },
            "produits_ajoutes": { "min_height": 25, "show_if_empty": false }
        }
    }
}
