// data.jsx — le VOCABULAIRE de l'interface. Plus aucune donnée d'entreprise. // // Ce fichier contenait l'entreprise fictive du prototype : un profil complet, ses // adresses, ses contacts, son projet, ses runs, sa fiche rédigée. Pratique pour // dessiner des écrans, dangereux dès que le backend est branché — un champ // pré-rempli avec la vérité de quelqu'un d'autre se relit distraitement et se // signe. Tout cela est parti le 2026-08-07 ; les données viennent du tenant. // // Ce qui reste est du vocabulaire produit : les étapes du parcours, les textes // d'aide, les listes de choix. Il est écrit en français et traduit à l'affichage // par `I18N.t()` — les entrées anglaises vivent dans i18n.jsx, au même endroit // que le reste de la langue. // // Les NOMS COMMUNS du métier (« demande de subvention », « déclaration ») ne // sont pas ici non plus : ils viennent de `FormDomain.lexicon`, en base. // --- Parcours (rail d'étapes) — MVP téléversement, pas de catalogue --- const JOURNEY = [ { id: "company", label: "Votre entreprise", sub: "Confirmez votre profil" }, { id: "reference", label: "Votre projet", sub: "Décrivez votre projet" }, { id: "upload", label: "Le {formulaire}", sub: "Téléversez le document à remplir" }, { id: "run", label: "Remplissage auto", sub: "L'assistant remplit le {formulaire}" }, { id: "confirm", label: "À confirmer", sub: "Validez quelques champs" }, { id: "result", label: "Prêt à soumettre", sub: "Téléchargez et déposez" }, ]; // --- Phases du run, dans l'ordre du moteur --- const RUN_PHASES = [ { id: "parsing", label: "Lecture du {formulaire}", desc: "On repère tous les champs à remplir" }, { id: "inferring", label: "Recherche de vos infos", desc: "On puise dans votre profil et vos documents" }, { id: "filling", label: "Remplissage", desc: "On inscrit ce qu'on sait déjà" }, { id: "awaiting_user", label: "Vérification", desc: "On vous montre ce qui reste à confirmer" }, ]; // --- Besoins de financement (cases à cocher du profil) --- // `on: true` n'existe plus : rien n'est coché d'avance pour l'utilisateur. const FINANCING_NEEDS = [ { id: "automatisation", label: "Automatisation" }, { id: "achat_equipements", label: "Achat d'équipements" }, { id: "innovation_rd", label: "Innovation / R&D" }, { id: "amelioration_operationnelle", label: "Amélioration opérationnelle" }, { id: "virage_numerique", label: "Virage numérique" }, { id: "exportation", label: "Exportation" }, { id: "croissance", label: "Croissance" }, { id: "embauche", label: "Embauche" }, { id: "formation", label: "Formation" }, { id: "developpement_produits", label: "Nouveaux produits / services" }, ]; // --- Fourchettes financières et référentiels de codes --- const REVENUE_RANGES = ["", "Moins de 250 k$", "250 k$ – 500 k$", "500 k$ – 1 M$", "1 M$ – 5 M$", "5 M$ – 10 M$", "10 M$ – 50 M$", "Plus de 50 M$"]; const PROFIT_RANGES = ["", "Déficit (perte)", "0 – 50 k$", "50 k$ – 250 k$", "250 k$ – 500 k$", "500 k$ – 1 M$", "Plus de 1 M$"]; const CODE_SYSTEMS = ["SCIAN", "NAICS", "Revenu Québec", "ARC (fédéral)", "Autre"]; // --- Recherche de code d'activité --- // Le référentiel embarqué (29 codes copiés à la main) est parti : la table // `referentiel.cae_codes` fait foi, interrogée par `caeSearch` en GraphQL. Un // second référentiel dans le front, c'est un référentiel qui dérive en silence. // Hors ligne on ne propose rien plutôt qu'un extrait périmé. function searchCae() { return []; } // --- Textes d'aide (le « ? » à côté des champs) --- // Vrai contenu produit : ce que l'utilisateur ne sait pas où chercher. Bilingue // en clair plutôt que par clés — ces textes se relisent et se corrigent. const FIELD_GUIDES = { neq: { fr: { titre: "Où trouver votre NEQ", t: "Le NEQ est un numéro à 10 chiffres attribué par le Registraire des entreprises du Québec (REQ). Vous le trouvez sur votre certificat d'immatriculation, ou en cherchant le nom de votre entreprise sur registreentreprises.gouv.qc.ca." }, en: { titre: "Where to find your Québec business number", t: "The NEQ is a 10-digit number assigned by the Registraire des entreprises du Québec (REQ). It appears on your registration certificate, or you can look up your company name at registreentreprises.gouv.qc.ca." }, }, bn: { fr: { titre: "Où trouver votre numéro d'entreprise (NE)", t: "Attribué par l'Agence du revenu du Canada (ARC). Neuf chiffres, souvent suivis d'un code de programme (ex. RC0001 pour l'impôt des sociétés). Visible sur vos avis de l'ARC ou dans « Mon dossier d'entreprise »." }, en: { titre: "Where to find your business number (BN)", t: "Assigned by the Canada Revenue Agency (CRA). Nine digits, usually followed by a program code (e.g. RC0001 for corporate income tax). It appears on your CRA notices or in “My Business Account”." }, }, forme: { fr: { titre: "Votre statut juridique", t: "Le statut légal de l'entreprise : société par actions (« inc. »), société en nom collectif, entreprise individuelle, coopérative, OBNL… Indiqué sur votre certificat d'immatriculation au REQ." }, en: { titre: "Your legal form", t: "The company's legal status: corporation (“inc.”), general partnership, sole proprietorship, co-operative, non-profit… It appears on your registration certificate." }, }, scian: { fr: { titre: "Vos codes d'activité", t: "Le code d'activité classe votre secteur. Cherchez votre activité dans le champ de recherche : il interroge le référentiel officiel. Une entreprise peut en avoir plusieurs ; ajoutez-en autant que nécessaire." }, en: { titre: "Your activity codes", t: "The activity code classifies your industry. Search for your activity in the search field: it queries the official reference list. A company may have several; add as many as needed." }, }, revenus: { fr: { titre: "Votre fourchette de revenus", t: "Le chiffre d'affaires annuel le plus récent. Une fourchette suffit, pas besoin du montant exact ; il provient de vos états financiers." }, en: { titre: "Your revenue range", t: "Your most recent annual revenue. A range is enough; no need for the exact figure, it comes from your financial statements." }, }, revenus_brut: { fr: { titre: "Revenus bruts (chiffre d'affaires)", t: "Le total de vos ventes sur l'année, avant toute dépense. C'est le « chiffre d'affaires » en haut de votre état des résultats." }, en: { titre: "Gross revenue (turnover)", t: "Your total sales for the year, before any expense. It's the top line of your income statement." }, }, revenus_net: { fr: { titre: "Revenus nets", t: "Vos revenus après remises, retours et rabais accordés aux clients, mais avant vos dépenses d'exploitation. Souvent appelé « ventes nettes »." }, en: { titre: "Net revenue", t: "Your revenue after discounts, returns and rebates given to customers, but before operating expenses. Often called “net sales”." }, }, profit: { fr: { titre: "Bénéfice net (profit)", t: "Ce qui reste une fois TOUTES les dépenses et impôts payés : le « bénéfice net » au bas de votre état des résultats. Peut être négatif (perte)." }, en: { titre: "Net profit", t: "What's left once ALL expenses and taxes are paid: the bottom line of your income statement. It can be negative (a loss)." }, }, employes: { fr: { titre: "Nombre d'employés", t: "Le total des employés, temps plein et temps partiel. Comptez les saisonniers selon leur moyenne sur l'année." }, en: { titre: "Number of employees", t: "Total employees, full-time and part-time. Count seasonal staff by their yearly average." }, }, annee: { fr: { titre: "Année de constitution", t: "L'année où l'entreprise a été légalement créée. Elle figure sur votre certificat d'immatriculation au Registre des entreprises." }, en: { titre: "Year of incorporation", t: "The year the company was legally created. It appears on your registration certificate." }, }, adresse: { fr: { titre: "Adresse officielle", t: "L'adresse déclarée au registre des entreprises. Si vos activités se déroulent ailleurs (atelier, entrepôt), ajoutez-la comme adresse supplémentaire ; certains {programmes} exigent le lieu de réalisation du projet." }, en: { titre: "Official address", t: "The address declared to the enterprise registry. If you operate elsewhere (workshop, warehouse), add it as an additional address; some {programmes} require the project's location." }, }, secteur: { fr: { titre: "Votre secteur d'activité", t: "En quelques mots, le domaine principal de l'entreprise (ex. « ébénisterie sur mesure »). Sert à cibler les bons {programmes}." }, en: { titre: "Your industry", t: "In a few words, the company's main field (e.g. “custom cabinetmaking”). Used to target the right {programmes}." }, }, }; /** Le texte d'aide dans la langue active, lexique interpolé. */ function fieldGuide(key) { const g = FIELD_GUIDES[key]; if (!g) return null; const v = g[I18N.lang] || g.fr; return { titre: I18N.t(v.titre), t: I18N.t(v.t) }; } // --- Fiche projet : les questions de cadrage, en langage courant --- // Le champ `sample` (les réponses de la PME fictive) est supprimé : il était // pré-rempli dans les champs et fini par être ENREGISTRÉ comme objectifs du // vrai dossier. Un exemple a sa place dans un placeholder, jamais dans une // valeur. const FICHE_QUESTIONS = [ { id: "quoi", q: "En une phrase, qu'est-ce que votre projet va accomplir ?", hint: "Pas besoin de jargon. Dites-le comme à un ami.", placeholder: "Ex. : Embaucher et former deux ébénistes pour absorber notre carnet de commandes." }, { id: "pourquoi", q: "Quel problème est-ce que ça règle ?", hint: "Ce qui ne va pas aujourd'hui, et pourquoi ça vaut la peine d'agir.", placeholder: "Ex. : On refuse des contrats faute de main-d'œuvre qualifiée dans la région." }, { id: "ges", q: "Qu'est-ce que vous voulez avoir accompli à la fin ?", hint: "Vos objectifs, en résultats concrets.", placeholder: "Ex. : Deux personnes autonomes sur nos machines, délais de livraison réduits de 30 %." }, { id: "etapes", q: "Comment allez-vous vous y prendre ?", hint: "Les grandes étapes, dans l'ordre. Trois ou quatre suffisent.", placeholder: "Ex. : Recrutement, jumelage avec un compagnon, évaluations aux semaines 4, 8 et 12." }, { id: "budget", q: "Combien ça coûte, et qu'est-ce que vous demandez ?", hint: "Une estimation suffit à ce stade.", placeholder: "Ex. : 96 000 $ de salaires sur 12 semaines, aide demandée de 48 000 $." }, ]; Object.assign(window, { RUN_PHASES, JOURNEY, FICHE_QUESTIONS, FINANCING_NEEDS, CODE_SYSTEMS, FIELD_GUIDES, fieldGuide, REVENUE_RANGES, PROFIT_RANGES, searchCae, });