{
  "generated_from": "rbac_50_roles.json (portails métier + rôles) · frontend/portails/portails_spec.json (labels + icônes) · seo/seo_spec.json (langues FR/EN/ES) · CLAUDE.md #4 (tokens de marque) / #10 (devises)",
  "spec_version": "1.0.0",
  "source_version": "1.0.0",
  "roadmap_ref": "04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md · Sprint 5 l.56-57 « Mobile : Rebuild Expo 54 + submit App Store #32 + Play Store »",
  "app": {
    "name": "OTO Enterprise OS",
    "slug": "oto-enterprise-os",
    "scheme": "otoos",
    "expo_sdk_major": 54
  },
  "counts": {
    "onglets": 5,
    "portails": 5,
    "roles_couverts": 44,
    "langues": 3,
    "identifiants_a_confirmer": 13
  },
  "brand": {
    "fond": {
      "valeur": "#0a0a12",
      "source": "CLAUDE.md #4"
    },
    "accent": {
      "valeur": "#f0b429",
      "source": "CLAUDE.md #4"
    }
  },
  "devises": {
    "primaire": "USD",
    "secondaire": "DOP",
    "source": "CLAUDE.md #10"
  },
  "langues": {
    "liste": [
      "fr",
      "en",
      "es"
    ],
    "defaut": "fr",
    "source": "seo/seo_spec.json · site.langs"
  },
  "a_confirmer": [
    {
      "champ": "app_config.expo.version",
      "raison": "version de l'app (release) — déposée hors repo au build (#8)"
    },
    {
      "champ": "app_config.expo.ios.bundleIdentifier",
      "raison": "identité App Store #32 — jamais fabriquée (#6/#8)"
    },
    {
      "champ": "app_config.expo.ios.buildNumber",
      "raison": "auto-incrément côté EAS au build (#8)"
    },
    {
      "champ": "app_config.expo.android.package",
      "raison": "identité Play Store — jamais fabriquée (#6/#8)"
    },
    {
      "champ": "app_config.expo.android.versionCode",
      "raison": "auto-incrément côté EAS au build (#8)"
    },
    {
      "champ": "app_config.expo.icon",
      "raison": "asset image binaire — hors repo texte (#8)"
    },
    {
      "champ": "app_config.expo.splash.image",
      "raison": "asset image binaire — hors repo texte (#8)"
    },
    {
      "champ": "app_config.expo.extra.eas.projectId",
      "raison": "identifiant projet EAS — créé au premier build (#8)"
    },
    {
      "champ": "eas_build.cli.version",
      "raison": "version CLI EAS — épinglée à l'installation runner (#8)"
    },
    {
      "champ": "eas_build.submit.production.ios.appleId",
      "raison": "credential App Store Connect — hors repo (#6/#8)"
    },
    {
      "champ": "eas_build.submit.production.ios.ascAppId",
      "raison": "identifiant app App Store #32 — hors repo (#6/#8)"
    },
    {
      "champ": "eas_build.submit.production.ios.appleTeamId",
      "raison": "identifiant équipe Apple — hors repo (#6/#8)"
    },
    {
      "champ": "eas_build.submit.production.android.serviceAccountKeyPath",
      "raison": "clé de service Google Play — secret hors repo (#6/#8)"
    }
  ],
  "identifiants_statut": "a_confirmer",
  "portails": [
    {
      "portail": "ventes",
      "label": "OTO Ventes",
      "icon": "sell",
      "nb_roles": 12
    },
    {
      "portail": "construction",
      "label": "OTO Construction",
      "icon": "project",
      "nb_roles": 10
    },
    {
      "portail": "achat",
      "label": "OTO Achat",
      "icon": "buying",
      "nb_roles": 5
    },
    {
      "portail": "compta",
      "label": "OTO Compta",
      "icon": "accounting",
      "nb_roles": 8
    },
    {
      "portail": "direction",
      "label": "OTO Direction",
      "icon": "organization",
      "nb_roles": 9
    }
  ],
  "hand_off": "Build Expo 54 + submit App Store #32 / Play Store exécutés hors de ce worker (agent Mobile · #8) : ce livrable ne produit que la config versionnable. Les identifiants/credentials `null` sont renseignés au build sur le poste/CI Mobile, jamais fabriqués ici (#6)."
}
