/* data.jsx — données fictives (mutuelle) + référentiel des briques de confiance */
(function () {
  // ---- Référentiel des services de confiance orchestrables ----
  // tone : couleur de la pastille | icon : clé dans window.Icons
  // P() : connecteur fournisseur. kind native = brique Doxallia ; external = service tiers certifié.
  const P = (id, name, kind, status, certif, latency) => ({ id, name, kind, status, certif, latency });

  const SERVICES = [
    { id:"pvid", code:"PVID", name:"Vérification d'identité à distance", icon:"Face", tone:"blue",
      cat:"Identité", subscribed:true, unit:"vérification", price:1.85, defaultProvider:"idnow",
      desc:"Parcours PVID certifié ANSSI : capture du titre d'identité, contrôle d'authenticité et reconnaissance faciale avec détection du vivant.",
      norm:["eIDAS", "PVID ANSSI", "RGPD"],
      providers:[
        P("dox","Doxallia Trust","native","connected",["PVID ANSSI"],"22 s"),
        P("idnow","IDnow","external","connected",["PVID ANSSI","eIDAS"],"34 s"),
        P("ariadnext","AriadNext","external","connected",["PVID ANSSI"],"29 s"),
        P("ubble","Ubble","external","available",["PVID ANSSI"],"—"),
      ] },
    { id:"esign", code:"SIGN", name:"Signature électronique", icon:"Pen", tone:"blue",
      cat:"Signature", subscribed:true, unit:"signature", price:0.95, defaultProvider:"yousign",
      desc:"Signature électronique simple, avancée ou qualifiée (eIDAS) avec parcours OTP, horodatage qualifié et dossier de preuve.",
      norm:["eIDAS QES", "RGS"],
      providers:[
        P("dox","Doxallia Trust","native","connected",["eIDAS AdES"],"instant"),
        P("yousign","Yousign","external","connected",["eIDAS QES"],"instant"),
        P("docusign","DocuSign","external","connected",["eIDAS AdES"],"instant"),
        P("universign","Universign","external","available",["eIDAS QES"],"—"),
      ] },
    { id:"kyc", code:"KYC", name:"Contrôle KYC / LCB-FT", icon:"ShieldCheck", tone:"violet",
      cat:"Conformité", subscribed:true, unit:"dossier", price:2.40, defaultProvider:"dox",
      desc:"Connaissance client : contrôle des listes de sanctions, PPE, données ouvertes et scoring de risque LCB-FT.",
      norm:["LCB-FT", "ACPR"],
      providers:[
        P("dox","Doxallia Hub KYC","native","connected",["LCB-FT"],"4 s"),
        P("sisid","Sis ID","external","connected",["LCB-FT"],"6 s"),
        P("namirial","Namirial","external","available",["LCB-FT"],"—"),
      ] },
    { id:"lre", code:"LRE", name:"Lettre recommandée électronique", icon:"Mail", tone:"blue",
      cat:"Notification", subscribed:true, unit:"envoi", price:2.95, defaultProvider:"ar24",
      desc:"LRE qualifiée eIDAS à valeur juridique équivalente au recommandé papier, avec preuves de dépôt et de réception.",
      norm:["eIDAS LRE", "Décret 2018-347"],
      providers:[
        P("dox","Doxallia Trust","native","connected",["eIDAS LRE"],"instant"),
        P("ar24","AR24","external","connected",["eIDAS LRE"],"instant"),
        P("maileva","Maileva","external","available",["eIDAS LRE"],"—"),
      ] },
    { id:"sae", code:"SAE", name:"Archivage électronique probatoire", icon:"Archive", tone:"green",
      cat:"Archivage", subscribed:true, unit:"document / an", price:0.12, defaultProvider:"dox",
      desc:"Système d'archivage électronique à valeur probante : intégrité, traçabilité et conservation pérenne sécurisée.",
      norm:["NF Z42-013", "NF 461", "ISO 14641"],
      providers:[
        P("dox","Doxallia SAE","native","connected",["NF Z42-013","NF 461"],"instant"),
        P("arkhineo","Arkhineo","external","connected",["NF 461"],"instant"),
        P("cecurity","Cecurity","external","available",["NF Z42-013"],"—"),
      ] },
    { id:"eudi", code:"EUDI", name:"EUDI Wallet", icon:"Wallet", tone:"violet",
      cat:"Identité", subscribed:false, unit:"présentation", price:1.20, defaultProvider:"franceid",
      desc:"Connexion au portefeuille d'identité numérique européen : demande et vérification d'attestations électroniques (PID, mDL).",
      norm:["eIDAS 2.0", "ARF"],
      providers:[
        P("dox","Doxallia Wallet Connector","native","available",["eIDAS 2.0"],"—"),
        P("franceid","France Identité","external","available",["eIDAS 2.0","PID"],"—"),
        P("lissi","Lissi Wallet","external","available",["ARF"],"—"),
      ] },
    { id:"tsa", code:"HORO", name:"Horodatage qualifié", icon:"Clock", tone:"gray",
      cat:"Signature", subscribed:true, unit:"jeton", price:0.04, defaultProvider:"dox",
      desc:"Jetons d'horodatage qualifiés eIDAS pour dater et sceller vos documents et preuves de manière opposable.",
      norm:["eIDAS TSA", "RFC 3161"],
      providers:[
        P("dox","Doxallia TSA","native","connected",["eIDAS TSA"],"instant"),
        P("universign","Universign TSA","external","available",["eIDAS TSA"],"—"),
      ] },
    { id:"fraud", code:"FRAUD", name:"Détection de fraude documentaire", icon:"Fraud", tone:"amber",
      cat:"Identité", subscribed:false, unit:"analyse", price:0.65, defaultProvider:"finovox",
      desc:"Analyse d'authenticité des justificatifs (RIB, avis d'imposition, justificatif de domicile) et détection des falsifications.",
      norm:["RGPD"],
      providers:[
        P("dox","Doxallia Trust","native","available",["RGPD"],"—"),
        P("finovox","Finovox","external","available",["RGPD"],"—"),
      ] },
  ];

  const svc = (id) => SERVICES.find(s => s.id === id);
  const provOf = (service, id) => (service.providers || []).find(p => p.id === id);
  const defProv = (service) => provOf(service, service.defaultProvider) || (service.providers || [])[0];

  // ---- Parcours métier ----
  const STEP = (serviceId, label, sub, cfg) => ({ kind:"service", serviceId, label, sub, cfg });
  const GATE = (label, sub) => ({ kind:"gate", label, sub });
  const FORM = (label, sub, fields) => ({ kind:"form", label, sub, fields });

  const onboardingFields = [
    { id:"f1", type:"text",   label:"Civilité", required:true,  ph:"M. / Mme" },
    { id:"f2", type:"text",   label:"Nom de naissance", required:true, ph:"Nom" },
    { id:"f3", type:"text",   label:"Prénom", required:true, ph:"Prénom" },
    { id:"f4", type:"date",   label:"Date de naissance", required:true },
    { id:"f5", type:"email",  label:"Adresse e-mail", required:true, ph:"adresse@exemple.fr" },
    { id:"f6", type:"phone",  label:"Téléphone mobile", required:true, ph:"06 00 00 00 00" },
    { id:"f7", type:"select", label:"Formule souhaitée", required:true, options:["Essentielle","Confort","Premium"] },
    { id:"f8", type:"iban",   label:"IBAN (prélèvement cotisation)", required:true },
    { id:"f9", type:"file",   label:"Justificatif de domicile", required:false },
    { id:"f10",type:"checkbox",label:"J'accepte les conditions générales d'adhésion", required:true },
  ];

  const JOURNEYS = [
    { id:"j1", name:"Entrée en relation adhérent", status:"published", version:"v4", env:"Production",
      updated:"il y a 2 jours", owner:"Camille Roux", runs30:1284, conv:81,
      desc:"Souscription d'un nouvel adhérent particulier : vérification d'identité, KYC, recueil des données, signature du bulletin et archivage probatoire.",
      steps:[
        STEP("pvid","Vérification d'identité","PVID — niveau substantiel"),
        GATE("Identité vérifiée ?","Si échec → revue manuelle conseiller"),
        STEP("kyc","Contrôle KYC / LCB-FT","Scoring de risque + listes de sanctions"),
        FORM("Bulletin d'adhésion","10 champs · formulaire adhérent", onboardingFields),
        STEP("esign","Signature du bulletin","Signature avancée eIDAS + OTP SMS"),
        STEP("sae","Archivage du dossier","SAE probatoire — conservation 10 ans"),
        STEP("lre","Confirmation d'adhésion","LRE qualifiée — accusé de réception"),
      ] },
    { id:"j2", name:"Résiliation de contrat", status:"published", version:"v2", env:"Production",
      updated:"il y a 9 jours", owner:"Camille Roux", runs30:312, conv:94,
      desc:"Traitement d'une demande de résiliation à l'initiative de l'adhérent (loi de résiliation infra-annuelle).",
      steps:[
        FORM("Demande de résiliation","Motif + date d'effet", []),
        STEP("esign","Signature de la demande","Signature simple eIDAS"),
        STEP("lre","Notification de résiliation","LRE qualifiée"),
        STEP("sae","Archivage","SAE probatoire"),
      ] },
    { id:"j3", name:"Mise à jour bénéficiaire", status:"draft", version:"v1", env:"Bac à sable",
      updated:"il y a 1 h", owner:"Yanis Bouchard", runs30:0, conv:0,
      desc:"Modification des bénéficiaires d'un contrat de prévoyance avec re-vérification d'identité.",
      steps:[
        STEP("pvid","Re-vérification d'identité","PVID — niveau substantiel"),
        FORM("Nouveaux bénéficiaires","Saisie des bénéficiaires", []),
        STEP("esign","Signature de l'avenant","Signature avancée eIDAS"),
      ] },
    { id:"j4", name:"Souscription prévoyance entreprise", status:"published", version:"v3", env:"Production",
      updated:"il y a 4 jours", owner:"Camille Roux", runs30:146, conv:72,
      desc:"Contrat collectif : vérification du représentant légal, contrôle KYC entreprise et signature qualifiée.",
      steps:[
        STEP("kyc","KYC entreprise","Bénéficiaires effectifs + RBE"),
        STEP("pvid","Identité du représentant","PVID — niveau élevé"),
        FORM("Données entreprise","SIREN, effectifs, garanties", []),
        STEP("esign","Signature qualifiée","Signature qualifiée eIDAS (QES)"),
        STEP("sae","Archivage probatoire","SAE — conservation 10 ans"),
      ] },
  ];

  // ---- Consommation mensuelle (12 derniers mois, par service principal) ----
  const MONTHS = ["juil.","août","sept.","oct.","nov.","déc.","janv.","févr.","mars","avr.","mai","juin"];
  const CONSUMPTION = [
    { id:"pvid", label:"PVID", series:[820,760,910,1040,980,1120,1210,1180,1340,1420,1380,1510] },
    { id:"esign", label:"Signature", series:[1450,1390,1620,1810,1720,1980,2120,2080,2310,2440,2390,2620] },
    { id:"kyc", label:"KYC", series:[640,610,720,840,790,910,980,960,1080,1150,1120,1240] },
    { id:"lre", label:"LRE", series:[210,190,240,280,260,320,340,330,390,410,400,460] },
    { id:"sae", label:"SAE", series:[3200,3260,3340,3460,3540,3680,3820,3910,4080,4220,4310,4480] },
  ];

  // ---- Activité récente ----
  const ACTIVITY = [
    { who:"Parcours · Entrée en relation", what:"42 exécutions terminées", when:"il y a 6 min", tone:"green", icon:"Flow" },
    { who:"PVID", what:"Vérification réussie — niveau substantiel", when:"il y a 12 min", tone:"blue", icon:"Face" },
    { who:"KYC", what:"Dossier en revue — score de risque élevé", when:"il y a 24 min", tone:"amber", icon:"ShieldCheck" },
    { who:"Signature électronique", what:"Bulletin d'adhésion signé (QES)", when:"il y a 38 min", tone:"blue", icon:"Pen" },
    { who:"Yanis Bouchard", what:"a publié le parcours « Résiliation v2 »", when:"il y a 2 h", tone:"violet", icon:"Users" },
    { who:"SAE", what:"1 248 documents versés à l'archive probatoire", when:"il y a 3 h", tone:"green", icon:"Archive" },
  ];

  // ---- Facturation ----
  const INVOICES = [
    { id:"FA-2026-05", period:"Mai 2026", amount:8421.60, status:"paid", due:"31/05/2026" },
    { id:"FA-2026-04", period:"Avril 2026", amount:7980.20, status:"paid", due:"30/04/2026" },
    { id:"FA-2026-03", period:"Mars 2026", amount:7612.45, status:"paid", due:"31/03/2026" },
    { id:"FA-2026-02", period:"Février 2026", amount:6890.10, status:"paid", due:"28/02/2026" },
  ];

  // ---- Utilisateurs & rôles ----
  const ROLES = [
    { id:"admin", name:"Administrateur", desc:"Accès complet : facturation, parcours, utilisateurs et paramètres.", perms:18 },
    { id:"builder", name:"Concepteur de parcours", desc:"Création et publication des parcours et formulaires.", perms:11 },
    { id:"ops", name:"Opérateur", desc:"Suivi des exécutions et revue manuelle des dossiers.", perms:7 },
    { id:"viewer", name:"Lecture seule", desc:"Consultation des tableaux de bord et rapports.", perms:3 },
  ];
  const USERS = [
    { name:"Camille Roux", email:"c.roux@mutuelle-horizon.fr", role:"admin", status:"active", last:"il y a 4 min" },
    { name:"Yanis Bouchard", email:"y.bouchard@mutuelle-horizon.fr", role:"builder", status:"active", last:"il y a 1 h" },
    { name:"Sophie Aït-Larbi", email:"s.aitlarbi@mutuelle-horizon.fr", role:"ops", status:"active", last:"hier" },
    { name:"Marc Lefèvre", email:"m.lefevre@mutuelle-horizon.fr", role:"ops", status:"active", last:"il y a 3 j" },
    { name:"Inès Vasseur", email:"i.vasseur@mutuelle-horizon.fr", role:"viewer", status:"invited", last:"—" },
  ];

  const FIELD_TYPES = [
    { type:"text",     label:"Texte court", icon:"Form" },
    { type:"textarea", label:"Texte long", icon:"Doc" },
    { type:"email",    label:"E-mail", icon:"Mail" },
    { type:"phone",    label:"Téléphone", icon:"Bell" },
    { type:"date",     label:"Date", icon:"Calendar" },
    { type:"select",   label:"Liste déroulante", icon:"ChevDown" },
    { type:"checkbox", label:"Case à cocher", icon:"Check" },
    { type:"iban",     label:"IBAN", icon:"Billing" },
    { type:"file",     label:"Pièce jointe", icon:"Download" },
    { type:"identity", label:"Bloc identité (PVID)", icon:"Face" },
  ];

  window.DATA = { SERVICES, svc, provOf, defProv, JOURNEYS, MONTHS, CONSUMPTION, ACTIVITY, INVOICES, ROLES, USERS, FIELD_TYPES };
})();
