strapi-plugin-hubspot 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/_chunks/{Forms-BsKys-Hc.mjs → Forms-DadTbe9Q.mjs} +203 -16
  3. package/dist/_chunks/{Forms-JuzNfsbL.js → Forms-Dn2W6OS4.js} +202 -15
  4. package/dist/_chunks/{HubspotFormInput-CIvHS5rp.mjs → HubspotFormInput-NO59AtM_.mjs} +1 -1
  5. package/dist/_chunks/{HubspotFormInput-ph9pe6xY.js → HubspotFormInput-S_Z2t_DN.js} +1 -1
  6. package/dist/_chunks/{HubspotObjectInput-dAd-lMdD.js → HubspotObjectInput-BIgIa_Dm.js} +3 -3
  7. package/dist/_chunks/{HubspotObjectInput-BX1qYD2c.mjs → HubspotObjectInput-DAo3FAMz.mjs} +3 -3
  8. package/dist/_chunks/{HubspotPropertyInput-BM3ZaY8f.js → HubspotPropertyInput-B-piLcIy.js} +3 -3
  9. package/dist/_chunks/{HubspotPropertyInput-C2Z6472q.mjs → HubspotPropertyInput-KX1Bhcsl.mjs} +3 -3
  10. package/dist/_chunks/{Settings-Cdcjy9DA.js → Settings-DMu_QThB.js} +2 -2
  11. package/dist/_chunks/{Settings-DnwGetcc.mjs → Settings-Dz0PEFOv.mjs} +2 -2
  12. package/dist/_chunks/{en-Cqfair98.js → en-BDGqW_yS.js} +24 -1
  13. package/dist/_chunks/{en-CcQWnXra.mjs → en-CH5LSPkL.mjs} +24 -1
  14. package/dist/_chunks/{fr-CBRZ9q8U.mjs → fr-65-RaB3w.mjs} +24 -1
  15. package/dist/_chunks/{fr-D117-3Ta.js → fr-C82LMqUM.js} +24 -1
  16. package/dist/_chunks/{index-BbRtXnAL.js → index-B7Ru1fu5.js} +6 -6
  17. package/dist/_chunks/{index-LTaVoyWJ.mjs → index-DA31TY2n.mjs} +6 -6
  18. package/dist/_chunks/{objectLabels-DE2xGq7f.mjs → objectLabels-Bl7sO5pb.mjs} +1 -1
  19. package/dist/_chunks/{objectLabels-DU0Cagt_.js → objectLabels-FTh984_h.js} +1 -1
  20. package/dist/_chunks/{useHubspotSchema-BSKow0X3.mjs → useHubspotSchema-BlDilCHc.mjs} +1 -1
  21. package/dist/_chunks/{useHubspotSchema-DzBMAxv7.js → useHubspotSchema-C2_PuXEm.js} +1 -1
  22. package/dist/admin/index.js +1 -1
  23. package/dist/admin/index.mjs +1 -1
  24. package/dist/admin/src/builder/CompanyMapEditor.d.ts +14 -0
  25. package/dist/admin/src/builder/types.d.ts +14 -2
  26. package/dist/server/index.js +1029 -17
  27. package/dist/server/index.mjs +1029 -17
  28. package/dist/server/src/__tests__/company.test.d.ts +1 -0
  29. package/dist/server/src/company.d.ts +79 -0
  30. package/dist/server/src/conditions.d.ts +7 -1
  31. package/dist/server/src/content-types.d.ts +3 -0
  32. package/dist/server/src/data/naf.d.ts +1 -0
  33. package/dist/server/src/forms.d.ts +16 -0
  34. package/dist/server/src/index.d.ts +13 -0
  35. package/dist/shared/types.d.ts +51 -2
  36. package/package.json +2 -2
@@ -11,7 +11,7 @@ const STANDARD_OBJECTS = [
11
11
  { name: "line_item", path: "line_items" },
12
12
  { name: "quote", path: "quotes" }
13
13
  ];
14
- let cache = null;
14
+ let cache$1 = null;
15
15
  let inFlight = null;
16
16
  async function hsGet$1(apiKey, path) {
17
17
  const res = await fetch(`${HS_BASE$3}${path}`, {
@@ -61,7 +61,7 @@ async function fetchAccount(apiKey) {
61
61
  }
62
62
  }
63
63
  async function loadSchema(strapi, apiKey, objects, { force = false } = {}) {
64
- if (!force && cache && Date.now() - cache.at < TTL_MS) return cache.schema;
64
+ if (!force && cache$1 && Date.now() - cache$1.at < TTL_MS) return cache$1.schema;
65
65
  if (!force && inFlight) return inFlight;
66
66
  inFlight = (async () => {
67
67
  try {
@@ -100,7 +100,7 @@ async function loadSchema(strapi, apiKey, objects, { force = false } = {}) {
100
100
  portalId: account.portalId,
101
101
  uiDomain: account.uiDomain
102
102
  };
103
- cache = { at: Date.now(), schema };
103
+ cache$1 = { at: Date.now(), schema };
104
104
  return schema;
105
105
  } finally {
106
106
  inFlight = null;
@@ -109,7 +109,7 @@ async function loadSchema(strapi, apiKey, objects, { force = false } = {}) {
109
109
  return inFlight;
110
110
  }
111
111
  function clearCache() {
112
- cache = null;
112
+ cache$1 = null;
113
113
  }
114
114
  function checkMapping(properties, mapping) {
115
115
  const { object, property } = mapping;
@@ -353,6 +353,848 @@ async function runAudit(strapi, targets, schema) {
353
353
  }
354
354
  return reports;
355
355
  }
356
+ const NAF_LABELS = {
357
+ "01.11Z": "Culture de céréales (à l'exception du riz), de légumineuses et de graines oléagineuses",
358
+ "01.12Z": "Culture du riz",
359
+ "01.13Z": "Culture de légumes, de melons, de racines et de tubercules",
360
+ "01.14Z": "Culture de la canne à sucre",
361
+ "01.15Z": "Culture du tabac",
362
+ "01.16Z": "Culture de plantes à fibres",
363
+ "01.19Z": "Autres cultures non permanentes",
364
+ "01.21Z": "Culture de la vigne",
365
+ "01.22Z": "Culture de fruits tropicaux et subtropicaux",
366
+ "01.23Z": "Culture d'agrumes",
367
+ "01.24Z": "Culture de fruits à pépins et à noyau",
368
+ "01.25Z": "Culture d'autres fruits d'arbres ou d'arbustes et de fruits à coque",
369
+ "01.26Z": "Culture de fruits oléagineux",
370
+ "01.27Z": "Culture de plantes à boissons",
371
+ "01.28Z": "Culture de plantes à épices, aromatiques, médicinales et pharmaceutiques",
372
+ "01.29Z": "Autres cultures permanentes",
373
+ "01.30Z": "Reproduction de plantes",
374
+ "01.41Z": "Élevage de vaches laitières",
375
+ "01.42Z": "Élevage d'autres bovins et de buffles",
376
+ "01.43Z": "Élevage de chevaux et d'autres équidés",
377
+ "01.44Z": "Élevage de chameaux et d'autres camélidés",
378
+ "01.45Z": "Élevage d'ovins et de caprins",
379
+ "01.46Z": "Élevage de porcins",
380
+ "01.47Z": "Élevage de volailles",
381
+ "01.49Z": "Élevage d'autres animaux",
382
+ "01.50Z": "Culture et élevage associés",
383
+ "01.61Z": "Activités de soutien aux cultures",
384
+ "01.62Z": "Activités de soutien à la production animale",
385
+ "01.63Z": "Traitement primaire des récoltes",
386
+ "01.64Z": "Traitement des semences",
387
+ "01.70Z": "Chasse, piégeage et services annexes",
388
+ "02.10Z": "Sylviculture et autres activités forestières",
389
+ "02.20Z": "Exploitation forestière",
390
+ "02.30Z": "Récolte de produits forestiers non ligneux poussant à l'état sauvage",
391
+ "02.40Z": "Services de soutien à l'exploitation forestière",
392
+ "03.11Z": "Pêche en mer",
393
+ "03.12Z": "Pêche en eau douce",
394
+ "03.21Z": "Aquaculture en mer",
395
+ "03.22Z": "Aquaculture en eau douce",
396
+ "05.10Z": "Extraction de houille",
397
+ "05.20Z": "Extraction de lignite",
398
+ "06.10Z": "Extraction de pétrole brut",
399
+ "06.20Z": "Extraction de gaz naturel",
400
+ "07.10Z": "Extraction de minerais de fer",
401
+ "07.21Z": "Extraction de minerais d'uranium et de thorium",
402
+ "07.29Z": "Extraction d'autres minerais de métaux non ferreux",
403
+ "08.11Z": "Extraction de pierres ornementales et de construction, de calcaire industriel, de gypse, de craie et d'ardoise",
404
+ "08.12Z": "Exploitation de gravières et sablières, extraction d’argiles et de kaolin",
405
+ "08.91Z": "Extraction des minéraux chimiques et d'engrais minéraux",
406
+ "08.92Z": "Extraction de tourbe",
407
+ "08.93Z": "Production de sel",
408
+ "08.99Z": "Autres activités extractives n.c.a.",
409
+ "09.10Z": "Activités de soutien à l'extraction d'hydrocarbures",
410
+ "09.90Z": "Activités de soutien aux autres industries extractives",
411
+ "10.11Z": "Transformation et conservation de la viande de boucherie",
412
+ "10.12Z": "Transformation et conservation de la viande de volaille",
413
+ "10.13A": "Préparation industrielle de produits à base de viande",
414
+ "10.13B": "Charcuterie",
415
+ "10.20Z": "Transformation et conservation de poisson, de crustacés et de mollusques",
416
+ "10.31Z": "Transformation et conservation de pommes de terre",
417
+ "10.32Z": "Préparation de jus de fruits et légumes",
418
+ "10.39A": "Autre transformation et conservation de légumes",
419
+ "10.39B": "Transformation et conservation de fruits",
420
+ "10.41A": "Fabrication d'huiles et graisses brutes",
421
+ "10.41B": "Fabrication d'huiles et graisses raffinées",
422
+ "10.42Z": "Fabrication de margarine et graisses comestibles similaires",
423
+ "10.51A": "Fabrication de lait liquide et de produits frais",
424
+ "10.51B": "Fabrication de beurre",
425
+ "10.51C": "Fabrication de fromage",
426
+ "10.51D": "Fabrication d'autres produits laitiers",
427
+ "10.52Z": "Fabrication de glaces et sorbets",
428
+ "10.61A": "Meunerie",
429
+ "10.61B": "Autres activités du travail des grains",
430
+ "10.62Z": "Fabrication de produits amylacés",
431
+ "10.71A": "Fabrication industrielle de pain et de pâtisserie fraîche",
432
+ "10.71B": "Cuisson de produits de boulangerie",
433
+ "10.71C": "Boulangerie et boulangerie-pâtisserie",
434
+ "10.71D": "Pâtisserie",
435
+ "10.72Z": "Fabrication de biscuits, biscottes et pâtisseries de conservation",
436
+ "10.73Z": "Fabrication de pâtes alimentaires",
437
+ "10.81Z": "Fabrication de sucre",
438
+ "10.82Z": "Fabrication de cacao, chocolat et de produits de confiserie",
439
+ "10.83Z": "Transformation du thé et du café",
440
+ "10.84Z": "Fabrication de condiments et assaisonnements",
441
+ "10.85Z": "Fabrication de plats préparés",
442
+ "10.86Z": "Fabrication d'aliments homogénéisés et diététiques",
443
+ "10.89Z": "Fabrication d'autres produits alimentaires n.c.a.",
444
+ "10.91Z": "Fabrication d'aliments pour animaux de ferme",
445
+ "10.92Z": "Fabrication d'aliments pour animaux de compagnie",
446
+ "11.01Z": "Production de boissons alcooliques distillées",
447
+ "11.02A": "Fabrication de vins effervescents",
448
+ "11.02B": "Vinification",
449
+ "11.03Z": "Fabrication de cidre et de vins de fruits",
450
+ "11.04Z": "Production d'autres boissons fermentées non distillées",
451
+ "11.05Z": "Fabrication de bière",
452
+ "11.06Z": "Fabrication de malt",
453
+ "11.07A": "Industrie des eaux de table",
454
+ "11.07B": "Production de boissons rafraîchissantes",
455
+ "12.00Z": "Fabrication de produits à base de tabac",
456
+ "13.10Z": "Préparation de fibres textiles et filature",
457
+ "13.20Z": "Tissage",
458
+ "13.30Z": "Ennoblissement textile",
459
+ "13.91Z": "Fabrication d'étoffes à mailles",
460
+ "13.92Z": "Fabrication d'articles textiles, sauf habillement",
461
+ "13.93Z": "Fabrication de tapis et moquettes",
462
+ "13.94Z": "Fabrication de ficelles, cordes et filets",
463
+ "13.95Z": "Fabrication de non-tissés, sauf habillement",
464
+ "13.96Z": "Fabrication d'autres textiles techniques et industriels",
465
+ "13.99Z": "Fabrication d'autres textiles n.c.a.",
466
+ "14.11Z": "Fabrication de vêtements en cuir",
467
+ "14.12Z": "Fabrication de vêtements de travail",
468
+ "14.13Z": "Fabrication de vêtements de dessus",
469
+ "14.14Z": "Fabrication de vêtements de dessous",
470
+ "14.19Z": "Fabrication d'autres vêtements et accessoires",
471
+ "14.20Z": "Fabrication d'articles en fourrure",
472
+ "14.31Z": "Fabrication d'articles chaussants à mailles",
473
+ "14.39Z": "Fabrication d'autres articles à mailles",
474
+ "15.11Z": "Apprêt et tannage des cuirs ; préparation et teinture des fourrures",
475
+ "15.12Z": "Fabrication d'articles de voyage, de maroquinerie et de sellerie",
476
+ "15.20Z": "Fabrication de chaussures",
477
+ "16.10A": "Sciage et rabotage du bois, hors imprégnation",
478
+ "16.10B": "Imprégnation du bois",
479
+ "16.21Z": "Fabrication de placage et de panneaux de bois",
480
+ "16.22Z": "Fabrication de parquets assemblés",
481
+ "16.23Z": "Fabrication de charpentes et d'autres menuiseries",
482
+ "16.24Z": "Fabrication d'emballages en bois",
483
+ "16.29Z": "Fabrication d'objets divers en bois ; fabrication d'objets en liège, vannerie et sparterie",
484
+ "17.11Z": "Fabrication de pâte à papier",
485
+ "17.12Z": "Fabrication de papier et de carton",
486
+ "17.21A": "Fabrication de carton ondulé",
487
+ "17.21B": "Fabrication de cartonnages",
488
+ "17.21C": "Fabrication d'emballages en papier",
489
+ "17.22Z": "Fabrication d'articles en papier à usage sanitaire ou domestique",
490
+ "17.23Z": "Fabrication d'articles de papeterie",
491
+ "17.24Z": "Fabrication de papiers peints",
492
+ "17.29Z": "Fabrication d'autres articles en papier ou en carton",
493
+ "18.11Z": "Imprimerie de journaux",
494
+ "18.12Z": "Autre imprimerie (labeur)",
495
+ "18.13Z": "Activités de pré-presse",
496
+ "18.14Z": "Reliure et activités connexes",
497
+ "18.20Z": "Reproduction d'enregistrements",
498
+ "19.10Z": "Cokéfaction",
499
+ "19.20Z": "Raffinage du pétrole",
500
+ "20.11Z": "Fabrication de gaz industriels",
501
+ "20.12Z": "Fabrication de colorants et de pigments",
502
+ "20.13A": "Enrichissement et retraitement de matières nucléaires",
503
+ "20.13B": "Fabrication d'autres produits chimiques inorganiques de base n.c.a.",
504
+ "20.14Z": "Fabrication d'autres produits chimiques organiques de base",
505
+ "20.15Z": "Fabrication de produits azotés et d'engrais",
506
+ "20.16Z": "Fabrication de matières plastiques de base",
507
+ "20.17Z": "Fabrication de caoutchouc synthétique",
508
+ "20.20Z": "Fabrication de pesticides et d’autres produits agrochimiques",
509
+ "20.30Z": "Fabrication de peintures, vernis, encres et mastics",
510
+ "20.41Z": "Fabrication de savons, détergents et produits d'entretien",
511
+ "20.42Z": "Fabrication de parfums et de produits pour la toilette",
512
+ "20.51Z": "Fabrication de produits explosifs",
513
+ "20.52Z": "Fabrication de colles",
514
+ "20.53Z": "Fabrication d'huiles essentielles",
515
+ "20.59Z": "Fabrication d'autres produits chimiques n.c.a.",
516
+ "20.60Z": "Fabrication de fibres artificielles ou synthétiques",
517
+ "21.10Z": "Fabrication de produits pharmaceutiques de base",
518
+ "21.20Z": "Fabrication de préparations pharmaceutiques",
519
+ "22.11Z": "Fabrication et rechapage de pneumatiques",
520
+ "22.19Z": "Fabrication d'autres articles en caoutchouc",
521
+ "22.21Z": "Fabrication de plaques, feuilles, tubes et profilés en matières plastiques",
522
+ "22.22Z": "Fabrication d'emballages en matières plastiques",
523
+ "22.23Z": "Fabrication d'éléments en matières plastiques pour la construction",
524
+ "22.29A": "Fabrication de pièces techniques à base de matières plastiques",
525
+ "22.29B": "Fabrication de produits de consommation courante en matières plastiques",
526
+ "23.11Z": "Fabrication de verre plat",
527
+ "23.12Z": "Façonnage et transformation du verre plat",
528
+ "23.13Z": "Fabrication de verre creux",
529
+ "23.14Z": "Fabrication de fibres de verre",
530
+ "23.19Z": "Fabrication et façonnage d'autres articles en verre, y compris verre technique",
531
+ "23.20Z": "Fabrication de produits réfractaires",
532
+ "23.31Z": "Fabrication de carreaux en céramique",
533
+ "23.32Z": "Fabrication de briques, tuiles et produits de construction, en terre cuite",
534
+ "23.41Z": "Fabrication d'articles céramiques à usage domestique ou ornemental",
535
+ "23.42Z": "Fabrication d'appareils sanitaires en céramique",
536
+ "23.43Z": "Fabrication d'isolateurs et pièces isolantes en céramique",
537
+ "23.44Z": "Fabrication d'autres produits céramiques à usage technique",
538
+ "23.49Z": "Fabrication d'autres produits céramiques",
539
+ "23.51Z": "Fabrication de ciment",
540
+ "23.52Z": "Fabrication de chaux et plâtre",
541
+ "23.61Z": "Fabrication d'éléments en béton pour la construction",
542
+ "23.62Z": "Fabrication d'éléments en plâtre pour la construction",
543
+ "23.63Z": "Fabrication de béton prêt à l'emploi",
544
+ "23.64Z": "Fabrication de mortiers et bétons secs",
545
+ "23.65Z": "Fabrication d'ouvrages en fibre-ciment",
546
+ "23.69Z": "Fabrication d'autres ouvrages en béton, en ciment ou en plâtre",
547
+ "23.70Z": "Taille, façonnage et finissage de pierres",
548
+ "23.91Z": "Fabrication de produits abrasifs",
549
+ "23.99Z": "Fabrication d'autres produits minéraux non métalliques n.c.a.",
550
+ "24.10Z": "Sidérurgie",
551
+ "24.20Z": "Fabrication de tubes, tuyaux, profilés creux et accessoires correspondants en acier",
552
+ "24.31Z": "Étirage à froid de barres",
553
+ "24.32Z": "Laminage à froid de feuillards",
554
+ "24.33Z": "Profilage à froid par formage ou pliage",
555
+ "24.34Z": "Tréfilage à froid",
556
+ "24.41Z": "Production de métaux précieux",
557
+ "24.42Z": "Métallurgie de l'aluminium",
558
+ "24.43Z": "Métallurgie du plomb, du zinc ou de l'étain",
559
+ "24.44Z": "Métallurgie du cuivre",
560
+ "24.45Z": "Métallurgie des autres métaux non ferreux",
561
+ "24.46Z": "Élaboration et transformation de matières nucléaires",
562
+ "24.51Z": "Fonderie de fonte",
563
+ "24.52Z": "Fonderie d'acier",
564
+ "24.53Z": "Fonderie de métaux légers",
565
+ "24.54Z": "Fonderie d'autres métaux non ferreux",
566
+ "25.11Z": "Fabrication de structures métalliques et de parties de structures",
567
+ "25.12Z": "Fabrication de portes et fenêtres en métal",
568
+ "25.21Z": "Fabrication de radiateurs et de chaudières pour le chauffage central",
569
+ "25.29Z": "Fabrication d'autres réservoirs, citernes et conteneurs métalliques",
570
+ "25.30Z": "Fabrication de générateurs de vapeur, à l'exception des chaudières pour le chauffage central",
571
+ "25.40Z": "Fabrication d'armes et de munitions",
572
+ "25.50A": "Forge, estampage, matriçage ; métallurgie des poudres",
573
+ "25.50B": "Découpage, emboutissage",
574
+ "25.61Z": "Traitement et revêtement des métaux",
575
+ "25.62A": "Décolletage",
576
+ "25.62B": "Mécanique industrielle",
577
+ "25.71Z": "Fabrication de coutellerie",
578
+ "25.72Z": "Fabrication de serrures et de ferrures",
579
+ "25.73A": "Fabrication de moules et modèles",
580
+ "25.73B": "Fabrication d'autres outillages",
581
+ "25.91Z": "Fabrication de fûts et emballages métalliques similaires",
582
+ "25.92Z": "Fabrication d'emballages métalliques légers",
583
+ "25.93Z": "Fabrication d'articles en fils métalliques, de chaînes et de ressorts",
584
+ "25.94Z": "Fabrication de vis et de boulons",
585
+ "25.99A": "Fabrication d'articles métalliques ménagers",
586
+ "25.99B": "Fabrication d'autres articles métalliques",
587
+ "26.11Z": "Fabrication de composants électroniques",
588
+ "26.12Z": "Fabrication de cartes électroniques assemblées",
589
+ "26.20Z": "Fabrication d'ordinateurs et d'équipements périphériques",
590
+ "26.30Z": "Fabrication d'équipements de communication",
591
+ "26.40Z": "Fabrication de produits électroniques grand public",
592
+ "26.51A": "Fabrication d'équipements d'aide à la navigation",
593
+ "26.51B": "Fabrication d'instrumentation scientifique et technique",
594
+ "26.52Z": "Horlogerie",
595
+ "26.60Z": "Fabrication d'équipements d'irradiation médicale, d'équipements électromédicaux et électrothérapeutiques",
596
+ "26.70Z": "Fabrication de matériels optique et photographique",
597
+ "26.80Z": "Fabrication de supports magnétiques et optiques",
598
+ "27.11Z": "Fabrication de moteurs, génératrices et transformateurs électriques",
599
+ "27.12Z": "Fabrication de matériel de distribution et de commande électrique",
600
+ "27.20Z": "Fabrication de piles et d'accumulateurs électriques",
601
+ "27.31Z": "Fabrication de câbles de fibres optiques",
602
+ "27.32Z": "Fabrication d'autres fils et câbles électroniques ou électriques",
603
+ "27.33Z": "Fabrication de matériel d'installation électrique",
604
+ "27.40Z": "Fabrication d'appareils d'éclairage électrique",
605
+ "27.51Z": "Fabrication d'appareils électroménagers",
606
+ "27.52Z": "Fabrication d'appareils ménagers non électriques",
607
+ "27.90Z": "Fabrication d'autres matériels électriques",
608
+ "28.11Z": "Fabrication de moteurs et turbines, à l'exception des moteurs d’avions et de véhicules",
609
+ "28.12Z": "Fabrication d'équipements hydrauliques et pneumatiques",
610
+ "28.13Z": "Fabrication d'autres pompes et compresseurs",
611
+ "28.14Z": "Fabrication d'autres articles de robinetterie",
612
+ "28.15Z": "Fabrication d'engrenages et d'organes mécaniques de transmission",
613
+ "28.21Z": "Fabrication de fours et brûleurs",
614
+ "28.22Z": "Fabrication de matériel de levage et de manutention",
615
+ "28.23Z": "Fabrication de machines et d'équipements de bureau (à l'exception des ordinateurs et équipements périphériques)",
616
+ "28.24Z": "Fabrication d'outillage portatif à moteur incorporé",
617
+ "28.25Z": "Fabrication d'équipements aérauliques et frigorifiques industriels",
618
+ "28.29A": "Fabrication d'équipements d'emballage, de conditionnement et de pesage",
619
+ "28.29B": "Fabrication d'autres machines d'usage général",
620
+ "28.30Z": "Fabrication de machines agricoles et forestières",
621
+ "28.41Z": "Fabrication de machines-outils pour le travail des métaux",
622
+ "28.49Z": "Fabrication d'autres machines-outils",
623
+ "28.91Z": "Fabrication de machines pour la métallurgie",
624
+ "28.92Z": "Fabrication de machines pour l'extraction ou la construction",
625
+ "28.93Z": "Fabrication de machines pour l'industrie agro-alimentaire",
626
+ "28.94Z": "Fabrication de machines pour les industries textiles",
627
+ "28.95Z": "Fabrication de machines pour les industries du papier et du carton",
628
+ "28.96Z": "Fabrication de machines pour le travail du caoutchouc ou des plastiques",
629
+ "28.99A": "Fabrication de machines d'imprimerie",
630
+ "28.99B": "Fabrication d'autres machines spécialisées",
631
+ "29.10Z": "Construction de véhicules automobiles",
632
+ "29.20Z": "Fabrication de carrosseries et remorques",
633
+ "29.31Z": "Fabrication d'équipements électriques et électroniques automobiles",
634
+ "29.32Z": "Fabrication d'autres équipements automobiles",
635
+ "30.11Z": "Construction de navires et de structures flottantes",
636
+ "30.12Z": "Construction de bateaux de plaisance",
637
+ "30.20Z": "Construction de locomotives et d'autre matériel ferroviaire roulant",
638
+ "30.30Z": "Construction aéronautique et spatiale",
639
+ "30.40Z": "Construction de véhicules militaires de combat",
640
+ "30.91Z": "Fabrication de motocycles",
641
+ "30.92Z": "Fabrication de bicyclettes et de véhicules pour invalides",
642
+ "30.99Z": "Fabrication d’autres équipements de transport n.c.a.",
643
+ "31.01Z": "Fabrication de meubles de bureau et de magasin",
644
+ "31.02Z": "Fabrication de meubles de cuisine",
645
+ "31.03Z": "Fabrication de matelas",
646
+ "31.09A": "Fabrication de sièges d'ameublement d'intérieur",
647
+ "31.09B": "Fabrication d’autres meubles et industries connexes de l’ameublement",
648
+ "32.11Z": "Frappe de monnaie",
649
+ "32.12Z": "Fabrication d’articles de joaillerie et bijouterie",
650
+ "32.13Z": "Fabrication d’articles de bijouterie fantaisie et articles similaires",
651
+ "32.20Z": "Fabrication d'instruments de musique",
652
+ "32.30Z": "Fabrication d'articles de sport",
653
+ "32.40Z": "Fabrication de jeux et jouets",
654
+ "32.50A": "Fabrication de matériel médico-chirurgical et dentaire",
655
+ "32.50B": "Fabrication de lunettes",
656
+ "32.91Z": "Fabrication d’articles de brosserie",
657
+ "32.99Z": "Autres activités manufacturières n.c.a.",
658
+ "33.11Z": "Réparation d'ouvrages en métaux",
659
+ "33.12Z": "Réparation de machines et équipements mécaniques",
660
+ "33.13Z": "Réparation de matériels électroniques et optiques",
661
+ "33.14Z": "Réparation d'équipements électriques",
662
+ "33.15Z": "Réparation et maintenance navale",
663
+ "33.16Z": "Réparation et maintenance d'aéronefs et d'engins spatiaux",
664
+ "33.17Z": "Réparation et maintenance d'autres équipements de transport",
665
+ "33.19Z": "Réparation d'autres équipements",
666
+ "33.20A": "Installation de structures métalliques, chaudronnées et de tuyauterie",
667
+ "33.20B": "Installation de machines et équipements mécaniques",
668
+ "33.20C": "Conception d'ensemble et assemblage sur site industriel d'équipements de contrôle des processus industriels",
669
+ "33.20D": "Installation d'équipements électriques, de matériels électroniques et optiques ou d'autres matériels",
670
+ "35.11Z": "Production d'électricité",
671
+ "35.12Z": "Transport d'électricité",
672
+ "35.13Z": "Distribution d'électricité",
673
+ "35.14Z": "Commerce d'électricité",
674
+ "35.21Z": "Production de combustibles gazeux",
675
+ "35.22Z": "Distribution de combustibles gazeux par conduites",
676
+ "35.23Z": "Commerce de combustibles gazeux par conduites",
677
+ "35.30Z": "Production et distribution de vapeur et d'air conditionné",
678
+ "36.00Z": "Captage, traitement et distribution d'eau",
679
+ "37.00Z": "Collecte et traitement des eaux usées",
680
+ "38.11Z": "Collecte des déchets non dangereux",
681
+ "38.12Z": "Collecte des déchets dangereux",
682
+ "38.21Z": "Traitement et élimination des déchets non dangereux",
683
+ "38.22Z": "Traitement et élimination des déchets dangereux",
684
+ "38.31Z": "Démantèlement d'épaves",
685
+ "38.32Z": "Récupération de déchets triés",
686
+ "39.00Z": "Dépollution et autres services de gestion des déchets",
687
+ "41.10A": "Promotion immobilière de logements",
688
+ "41.10B": "Promotion immobilière de bureaux",
689
+ "41.10C": "Promotion immobilière d'autres bâtiments",
690
+ "41.10D": "Supports juridiques de programmes",
691
+ "41.20A": "Construction de maisons individuelles",
692
+ "41.20B": "Construction d'autres bâtiments",
693
+ "42.11Z": "Construction de routes et autoroutes",
694
+ "42.12Z": "Construction de voies ferrées de surface et souterraines",
695
+ "42.13A": "Construction d'ouvrages d'art",
696
+ "42.13B": "Construction et entretien de tunnels",
697
+ "42.21Z": "Construction de réseaux pour fluides",
698
+ "42.22Z": "Construction de réseaux électriques et de télécommunications",
699
+ "42.91Z": "Construction d'ouvrages maritimes et fluviaux",
700
+ "42.99Z": "Construction d'autres ouvrages de génie civil n.c.a.",
701
+ "43.11Z": "Travaux de démolition",
702
+ "43.12A": "Travaux de terrassement courants et travaux préparatoires",
703
+ "43.12B": "Travaux de terrassement spécialisés ou de grande masse",
704
+ "43.13Z": "Forages et sondages",
705
+ "43.21A": "Travaux d'installation électrique dans tous locaux",
706
+ "43.21B": "Travaux d'installation électrique sur la voie publique",
707
+ "43.22A": "Travaux d'installation d'eau et de gaz en tous locaux",
708
+ "43.22B": "Travaux d'installation d'équipements thermiques et de climatisation",
709
+ "43.29A": "Travaux d'isolation",
710
+ "43.29B": "Autres travaux d'installation n.c.a.",
711
+ "43.31Z": "Travaux de plâtrerie",
712
+ "43.32A": "Travaux de menuiserie bois et PVC",
713
+ "43.32B": "Travaux de menuiserie métallique et serrurerie",
714
+ "43.32C": "Agencement de lieux de vente",
715
+ "43.33Z": "Travaux de revêtement des sols et des murs",
716
+ "43.34Z": "Travaux de peinture et vitrerie",
717
+ "43.39Z": "Autres travaux de finition",
718
+ "43.91A": "Travaux de charpente",
719
+ "43.91B": "Travaux de couverture par éléments",
720
+ "43.99A": "Travaux d'étanchéification",
721
+ "43.99B": "Travaux de montage de structures métalliques",
722
+ "43.99C": "Travaux de maçonnerie générale et gros œuvre de bâtiment",
723
+ "43.99D": "Autres travaux spécialisés de construction",
724
+ "43.99E": "Location avec opérateur de matériel de construction",
725
+ "45.11Z": "Commerce de voitures et de véhicules automobiles légers",
726
+ "45.19Z": "Commerce d'autres véhicules automobiles",
727
+ "45.20A": "Entretien et réparation de véhicules automobiles légers",
728
+ "45.20B": "Entretien et réparation d'autres véhicules automobiles",
729
+ "45.31Z": "Commerce de gros d'équipements automobiles",
730
+ "45.32Z": "Commerce de détail d'équipements automobiles",
731
+ "45.40Z": "Commerce et réparation de motocycles",
732
+ "46.11Z": "Intermédiaires du commerce en matières premières agricoles, animaux vivants, matières premières textiles et produits semi-finis",
733
+ "46.12A": "Centrales d'achat de carburant",
734
+ "46.12B": "Autres intermédiaires du commerce en combustibles, métaux, minéraux et produits chimiques",
735
+ "46.13Z": "Intermédiaires du commerce en bois et matériaux de construction",
736
+ "46.14Z": "Intermédiaires du commerce en machines, équipements industriels, navires et avions",
737
+ "46.15Z": "Intermédiaires du commerce en meubles, articles de ménage et quincaillerie",
738
+ "46.16Z": "Intermédiaires du commerce en textiles, habillement, fourrures, chaussures et articles en cuir",
739
+ "46.17A": "Centrales d'achat alimentaires",
740
+ "46.17B": "Autres intermédiaires du commerce en denrées, boissons et tabac",
741
+ "46.18Z": "Intermédiaires spécialisés dans le commerce d'autres produits spécifiques",
742
+ "46.19A": "Centrales d'achat non alimentaires",
743
+ "46.19B": "Autres intermédiaires du commerce en produits divers",
744
+ "46.21Z": "Commerce de gros (commerce interentreprises) de céréales, de tabac non manufacturé, de semences et d'aliments pour le bétail",
745
+ "46.22Z": "Commerce de gros (commerce interentreprises) de fleurs et plantes",
746
+ "46.23Z": "Commerce de gros (commerce interentreprises) d'animaux vivants",
747
+ "46.24Z": "Commerce de gros (commerce interentreprises) de cuirs et peaux",
748
+ "46.31Z": "Commerce de gros (commerce interentreprises) de fruits et légumes",
749
+ "46.32A": "Commerce de gros (commerce interentreprises) de viandes de boucherie",
750
+ "46.32B": "Commerce de gros (commerce interentreprises) de produits à base de viande",
751
+ "46.32C": "Commerce de gros (commerce interentreprises) de volailles et gibier",
752
+ "46.33Z": "Commerce de gros (commerce interentreprises) de produits laitiers, œufs, huiles et matières grasses comestibles",
753
+ "46.34Z": "Commerce de gros (commerce interentreprises) de boissons",
754
+ "46.35Z": "Commerce de gros (commerce interentreprises) de produits à base de tabac",
755
+ "46.36Z": "Commerce de gros (commerce interentreprises) de sucre, chocolat et confiserie",
756
+ "46.37Z": "Commerce de gros (commerce interentreprises) de café, thé, cacao et épices",
757
+ "46.38A": "Commerce de gros (commerce interentreprises) de poissons, crustacés et mollusques",
758
+ "46.38B": "Commerce de gros (commerce interentreprises) alimentaire spécialisé divers",
759
+ "46.39A": "Commerce de gros (commerce interentreprises) de produits surgelés",
760
+ "46.39B": "Commerce de gros (commerce interentreprises) alimentaire non spécialisé",
761
+ "46.41Z": "Commerce de gros (commerce interentreprises) de textiles",
762
+ "46.42Z": "Commerce de gros (commerce interentreprises) d'habillement et de chaussures",
763
+ "46.43Z": "Commerce de gros (commerce interentreprises) d'appareils électroménagers",
764
+ "46.44Z": "Commerce de gros (commerce interentreprises) de vaisselle, verrerie et produits d'entretien",
765
+ "46.45Z": "Commerce de gros (commerce interentreprises) de parfumerie et de produits de beauté",
766
+ "46.46Z": "Commerce de gros (commerce interentreprises) de produits pharmaceutiques",
767
+ "46.47Z": "Commerce de gros (commerce interentreprises) de meubles, de tapis et d'appareils d'éclairage",
768
+ "46.48Z": "Commerce de gros (commerce interentreprises) d'articles d'horlogerie et de bijouterie",
769
+ "46.49Z": "Commerce de gros (commerce interentreprises) d'autres biens domestiques",
770
+ "46.51Z": "Commerce de gros (commerce interentreprises) d'ordinateurs, d'équipements informatiques périphériques et de logiciels",
771
+ "46.52Z": "Commerce de gros (commerce interentreprises) de composants et d'équipements électroniques et de télécommunication",
772
+ "46.61Z": "Commerce de gros (commerce interentreprises) de matériel agricole",
773
+ "46.62Z": "Commerce de gros (commerce interentreprises) de machines-outils",
774
+ "46.63Z": "Commerce de gros (commerce interentreprises) de machines pour l'extraction, la construction et le génie civil",
775
+ "46.64Z": "Commerce de gros (commerce interentreprises) de machines pour l'industrie textile et l'habillement",
776
+ "46.65Z": "Commerce de gros (commerce interentreprises) de mobilier de bureau",
777
+ "46.66Z": "Commerce de gros (commerce interentreprises) d'autres machines et équipements de bureau",
778
+ "46.69A": "Commerce de gros (commerce interentreprises) de matériel électrique",
779
+ "46.69B": "Commerce de gros (commerce interentreprises) de fournitures et équipements industriels divers",
780
+ "46.69C": "Commerce de gros (commerce interentreprises) de fournitures et équipements divers pour le commerce et les services",
781
+ "46.71Z": "Commerce de gros (commerce interentreprises) de combustibles et de produits annexes",
782
+ "46.72Z": "Commerce de gros (commerce interentreprises) de minerais et métaux",
783
+ "46.73A": "Commerce de gros (commerce interentreprises) de bois et de matériaux de construction",
784
+ "46.73B": "Commerce de gros (commerce interentreprises) d'appareils sanitaires et de produits de décoration",
785
+ "46.74A": "Commerce de gros (commerce interentreprises) de quincaillerie",
786
+ "46.74B": "Commerce de gros (commerce interentreprises) de fournitures pour la plomberie et le chauffage",
787
+ "46.75Z": "Commerce de gros (commerce interentreprises) de produits chimiques",
788
+ "46.76Z": "Commerce de gros (commerce interentreprises) d'autres produits intermédiaires",
789
+ "46.77Z": "Commerce de gros (commerce interentreprises) de déchets et débris",
790
+ "46.90Z": "Commerce de gros (commerce interentreprises) non spécialisé",
791
+ "47.11A": "Commerce de détail de produits surgelés",
792
+ "47.11B": "Commerce d'alimentation générale",
793
+ "47.11C": "Supérettes",
794
+ "47.11D": "Supermarchés",
795
+ "47.11E": "Magasins multi-commerces",
796
+ "47.11F": "Hypermarchés",
797
+ "47.19A": "Grands magasins",
798
+ "47.19B": "Autres commerces de détail en magasin non spécialisé",
799
+ "47.21Z": "Commerce de détail de fruits et légumes en magasin spécialisé",
800
+ "47.22Z": "Commerce de détail de viandes et de produits à base de viande en magasin spécialisé",
801
+ "47.23Z": "Commerce de détail de poissons, crustacés et mollusques en magasin spécialisé",
802
+ "47.24Z": "Commerce de détail de pain, pâtisserie et confiserie en magasin spécialisé",
803
+ "47.25Z": "Commerce de détail de boissons en magasin spécialisé",
804
+ "47.26Z": "Commerce de détail de produits à base de tabac en magasin spécialisé",
805
+ "47.29Z": "Autres commerces de détail alimentaires en magasin spécialisé",
806
+ "47.30Z": "Commerce de détail de carburants en magasin spécialisé",
807
+ "47.41Z": "Commerce de détail d'ordinateurs, d'unités périphériques et de logiciels en magasin spécialisé",
808
+ "47.42Z": "Commerce de détail de matériels de télécommunication en magasin spécialisé",
809
+ "47.43Z": "Commerce de détail de matériels audio et vidéo en magasin spécialisé",
810
+ "47.51Z": "Commerce de détail de textiles en magasin spécialisé",
811
+ "47.52A": "Commerce de détail de quincaillerie, peintures et verres en petites surfaces (moins de 400 m2)",
812
+ "47.52B": "Commerce de détail de quincaillerie, peintures et verres en grandes surfaces (400 m2et plus)",
813
+ "47.53Z": "Commerce de détail de tapis, moquettes et revêtements de murs et de sols en magasin spécialisé",
814
+ "47.54Z": "Commerce de détail d'appareils électroménagers en magasin spécialisé",
815
+ "47.59A": "Commerce de détail de meubles",
816
+ "47.59B": "Commerce de détail d'autres équipements du foyer",
817
+ "47.61Z": "Commerce de détail de livres en magasin spécialisé",
818
+ "47.62Z": "Commerce de détail de journaux et papeterie en magasin spécialisé",
819
+ "47.63Z": "Commerce de détail d'enregistrements musicaux et vidéo en magasin spécialisé",
820
+ "47.64Z": "Commerce de détail d'articles de sport en magasin spécialisé",
821
+ "47.65Z": "Commerce de détail de jeux et jouets en magasin spécialisé",
822
+ "47.71Z": "Commerce de détail d'habillement en magasin spécialisé",
823
+ "47.72A": "Commerce de détail de la chaussure",
824
+ "47.72B": "Commerce de détail de maroquinerie et d'articles de voyage",
825
+ "47.73Z": "Commerce de détail de produits pharmaceutiques en magasin spécialisé",
826
+ "47.74Z": "Commerce de détail d'articles médicaux et orthopédiques en magasin spécialisé",
827
+ "47.75Z": "Commerce de détail de parfumerie et de produits de beauté en magasin spécialisé",
828
+ "47.76Z": "Commerce de détail de fleurs, plantes, graines, engrais, animaux de compagnie et aliments pour ces animaux en magasin spécialisé",
829
+ "47.77Z": "Commerce de détail d'articles d'horlogerie et de bijouterie en magasin spécialisé",
830
+ "47.78A": "Commerces de détail d'optique",
831
+ "47.78B": "Commerces de détail de charbons et combustibles",
832
+ "47.78C": "Autres commerces de détail spécialisés divers",
833
+ "47.79Z": "Commerce de détail de biens d'occasion en magasin",
834
+ "47.81Z": "Commerce de détail alimentaire sur éventaires et marchés",
835
+ "47.82Z": "Commerce de détail de textiles, d'habillement et de chaussures sur éventaires et marchés",
836
+ "47.89Z": "Autres commerces de détail sur éventaires et marchés",
837
+ "47.91A": "Vente à distance sur catalogue général",
838
+ "47.91B": "Vente à distance sur catalogue spécialisé",
839
+ "47.99A": "Vente à domicile",
840
+ "47.99B": "Vente par automates et autres commerces de détail hors magasin, éventaires ou marchés n.c.a.",
841
+ "49.10Z": "Transport ferroviaire interurbain de voyageurs",
842
+ "49.20Z": "Transports ferroviaires de fret",
843
+ "49.31Z": "Transports urbains et suburbains de voyageurs",
844
+ "49.32Z": "Transports de voyageurs par taxis",
845
+ "49.39A": "Transports routiers réguliers de voyageurs",
846
+ "49.39B": "Autres transports routiers de voyageurs",
847
+ "49.39C": "Téléphériques et remontées mécaniques",
848
+ "49.41A": "Transports routiers de fret interurbains",
849
+ "49.41B": "Transports routiers de fret de proximité",
850
+ "49.41C": "Location de camions avec chauffeur",
851
+ "49.42Z": "Services de déménagement",
852
+ "49.50Z": "Transports par conduites",
853
+ "50.10Z": "Transports maritimes et côtiers de passagers",
854
+ "50.20Z": "Transports maritimes et côtiers de fret",
855
+ "50.30Z": "Transports fluviaux de passagers",
856
+ "50.40Z": "Transports fluviaux de fret",
857
+ "51.10Z": "Transports aériens de passagers",
858
+ "51.21Z": "Transports aériens de fret",
859
+ "51.22Z": "Transports spatiaux",
860
+ "52.10A": "Entreposage et stockage frigorifique",
861
+ "52.10B": "Entreposage et stockage non frigorifique",
862
+ "52.21Z": "Services auxiliaires des transports terrestres",
863
+ "52.22Z": "Services auxiliaires des transports par eau",
864
+ "52.23Z": "Services auxiliaires des transports aériens",
865
+ "52.24A": "Manutention portuaire",
866
+ "52.24B": "Manutention non portuaire",
867
+ "52.29A": "Messagerie, fret express",
868
+ "52.29B": "Affrètement et organisation des transports",
869
+ "53.10Z": "Activités de poste dans le cadre d'une obligation de service universel",
870
+ "53.20Z": "Autres activités de poste et de courrier",
871
+ "55.10Z": "Hôtels et hébergement similaire",
872
+ "55.20Z": "Hébergement touristique et autre hébergement de courte durée",
873
+ "55.30Z": "Terrains de camping et parcs pour caravanes ou véhicules de loisirs",
874
+ "55.90Z": "Autres hébergements",
875
+ "56.10A": "Restauration traditionnelle",
876
+ "56.10B": "Cafétérias et autres libres-services",
877
+ "56.10C": "Restauration de type rapide",
878
+ "56.21Z": "Services des traiteurs",
879
+ "56.29A": "Restauration collective sous contrat",
880
+ "56.29B": "Autres services de restauration n.c.a.",
881
+ "56.30Z": "Débits de boissons",
882
+ "58.11Z": "Édition de livres",
883
+ "58.12Z": "Édition de répertoires et de fichiers d'adresses",
884
+ "58.13Z": "Édition de journaux",
885
+ "58.14Z": "Édition de revues et périodiques",
886
+ "58.19Z": "Autres activités d'édition",
887
+ "58.21Z": "Édition de jeux électroniques",
888
+ "58.29A": "Édition de logiciels système et de réseau",
889
+ "58.29B": "Edition de logiciels outils de développement et de langages",
890
+ "58.29C": "Edition de logiciels applicatifs",
891
+ "59.11A": "Production de films et de programmes pour la télévision",
892
+ "59.11B": "Production de films institutionnels et publicitaires",
893
+ "59.11C": "Production de films pour le cinéma",
894
+ "59.12Z": "Post-production de films cinématographiques, de vidéo et de programmes de télévision",
895
+ "59.13A": "Distribution de films cinématographiques",
896
+ "59.13B": "Edition et distribution vidéo",
897
+ "59.14Z": "Projection de films cinématographiques",
898
+ "59.20Z": "Enregistrement sonore et édition musicale",
899
+ "60.10Z": "Édition et diffusion de programmes radio",
900
+ "60.20A": "Edition de chaînes généralistes",
901
+ "60.20B": "Edition de chaînes thématiques",
902
+ "61.10Z": "Télécommunications filaires",
903
+ "61.20Z": "Télécommunications sans fil",
904
+ "61.30Z": "Télécommunications par satellite",
905
+ "61.90Z": "Autres activités de télécommunication",
906
+ "62.01Z": "Programmation informatique",
907
+ "62.02A": "Conseil en systèmes et logiciels informatiques",
908
+ "62.02B": "Tierce maintenance de systèmes et d’applications informatiques",
909
+ "62.03Z": "Gestion d'installations informatiques",
910
+ "62.09Z": "Autres activités informatiques",
911
+ "63.11Z": "Traitement de données, hébergement et activités connexes",
912
+ "63.12Z": "Portails Internet",
913
+ "63.91Z": "Activités des agences de presse",
914
+ "63.99Z": "Autres services d'information n.c.a.",
915
+ "64.11Z": "Activités de banque centrale",
916
+ "64.19Z": "Autres intermédiations monétaires",
917
+ "64.20Z": "Activités des sociétés holding",
918
+ "64.30Z": "Fonds de placement et entités financières similaires",
919
+ "64.91Z": "Crédit-bail",
920
+ "64.92Z": "Autre distribution de crédit",
921
+ "64.99Z": "Autres activités des services financiers, hors assurance et caisses de retraite, n.c.a.",
922
+ "65.11Z": "Assurance vie",
923
+ "65.12Z": "Autres assurances",
924
+ "65.20Z": "Réassurance",
925
+ "65.30Z": "Caisses de retraite",
926
+ "66.11Z": "Administration de marchés financiers",
927
+ "66.12Z": "Courtage de valeurs mobilières et de marchandises",
928
+ "66.19A": "Supports juridiques de gestion de patrimoine mobilier",
929
+ "66.19B": "Autres activités auxiliaires de services financiers, hors assurance et caisses de retraite, n.c.a.",
930
+ "66.21Z": "Évaluation des risques et dommages",
931
+ "66.22Z": "Activités des agents et courtiers d'assurances",
932
+ "66.29Z": "Autres activités auxiliaires d'assurance et de caisses de retraite",
933
+ "66.30Z": "Gestion de fonds",
934
+ "68.10Z": "Activités des marchands de biens immobiliers",
935
+ "68.20A": "Location de logements",
936
+ "68.20B": "Location de terrains et d'autres biens immobiliers",
937
+ "68.31Z": "Agences immobilières",
938
+ "68.32A": "Administration d'immeubles et autres biens immobiliers",
939
+ "68.32B": "Supports juridiques de gestion de patrimoine immobilier",
940
+ "69.10Z": "Activités juridiques",
941
+ "69.20Z": "Activités comptables",
942
+ "70.10Z": "Activités des sièges sociaux",
943
+ "70.21Z": "Conseil en relations publiques et communication",
944
+ "70.22Z": "Conseil pour les affaires et autres conseils de gestion",
945
+ "71.11Z": "Activités d'architecture",
946
+ "71.12A": "Activité des géomètres",
947
+ "71.12B": "Ingénierie, études techniques",
948
+ "71.20A": "Contrôle technique automobile",
949
+ "71.20B": "Analyses, essais et inspections techniques",
950
+ "72.11Z": "Recherche-développement en biotechnologie",
951
+ "72.19Z": "Recherche-développement en autres sciences physiques et naturelles",
952
+ "72.20Z": "Recherche-développement en sciences humaines et sociales",
953
+ "73.11Z": "Activités des agences de publicité",
954
+ "73.12Z": "Régie publicitaire de médias",
955
+ "73.20Z": "Études de marché et sondages",
956
+ "74.10Z": "Activités spécialisées de design",
957
+ "74.20Z": "Activités photographiques",
958
+ "74.30Z": "Traduction et interprétation",
959
+ "74.90A": "Activité des économistes de la construction",
960
+ "74.90B": "Activités spécialisées, scientifiques et techniques diverses",
961
+ "75.00Z": "Activités vétérinaires",
962
+ "77.11A": "Location de courte durée de voitures et de véhicules automobiles légers",
963
+ "77.11B": "Location de longue durée de voitures et de véhicules automobiles légers",
964
+ "77.12Z": "Location et location-bail de camions",
965
+ "77.21Z": "Location et location-bail d'articles de loisirs et de sport",
966
+ "77.22Z": "Location de vidéocassettes et disques vidéo",
967
+ "77.29Z": "Location et location-bail d'autres biens personnels et domestiques",
968
+ "77.31Z": "Location et location-bail de machines et équipements agricoles",
969
+ "77.32Z": "Location et location-bail de machines et équipements pour la construction",
970
+ "77.33Z": "Location et location-bail de machines de bureau et de matériel informatique",
971
+ "77.34Z": "Location et location-bail de matériels de transport par eau",
972
+ "77.35Z": "Location et location-bail de matériels de transport aérien",
973
+ "77.39Z": "Location et location-bail d'autres machines, équipements et biens matériels n.c.a.",
974
+ "77.40Z": "Location-bail de propriété intellectuelle et de produits similaires, à l'exception des œuvres soumises à copyright",
975
+ "78.10Z": "Activités des agences de placement de main-d'œuvre",
976
+ "78.20Z": "Activités des agences de travail temporaire",
977
+ "78.30Z": "Autre mise à disposition de ressources humaines",
978
+ "79.11Z": "Activités des agences de voyage",
979
+ "79.12Z": "Activités des voyagistes",
980
+ "79.90Z": "Autres services de réservation et activités connexes",
981
+ "80.10Z": "Activités de sécurité privée",
982
+ "80.20Z": "Activités liées aux systèmes de sécurité",
983
+ "80.30Z": "Activités d'enquête",
984
+ "81.10Z": "Activités combinées de soutien lié aux bâtiments",
985
+ "81.21Z": "Nettoyage courant des bâtiments",
986
+ "81.22Z": "Autres activités de nettoyage des bâtiments et nettoyage industriel",
987
+ "81.29A": "Désinfection, désinsectisation, dératisation",
988
+ "81.29B": "Autres activités de nettoyage n.c.a.",
989
+ "81.30Z": "Services d'aménagement paysager",
990
+ "82.11Z": "Services administratifs combinés de bureau",
991
+ "82.19Z": "Photocopie, préparation de documents et autres activités spécialisées de soutien de bureau",
992
+ "82.20Z": "Activités de centres d'appels",
993
+ "82.30Z": "Organisation de foires, salons professionnels et congrès",
994
+ "82.91Z": "Activités des agences de recouvrement de factures et des sociétés d'information financière sur la clientèle",
995
+ "82.92Z": "Activités de conditionnement",
996
+ "82.99Z": "Autres activités de soutien aux entreprises n.c.a.",
997
+ "84.11Z": "Administration publique générale",
998
+ "84.12Z": "Administration publique (tutelle) de la santé, de la formation, de la culture et des services sociaux, autre que sécurité sociale",
999
+ "84.13Z": "Administration publique (tutelle) des activités économiques",
1000
+ "84.21Z": "Affaires étrangères",
1001
+ "84.22Z": "Défense",
1002
+ "84.23Z": "Justice",
1003
+ "84.24Z": "Activités d’ordre public et de sécurité",
1004
+ "84.25Z": "Services du feu et de secours",
1005
+ "84.30A": "Activités générales de sécurité sociale",
1006
+ "84.30B": "Gestion des retraites complémentaires",
1007
+ "84.30C": "Distribution sociale de revenus",
1008
+ "85.10Z": "Enseignement pré-primaire",
1009
+ "85.20Z": "Enseignement primaire",
1010
+ "85.31Z": "Enseignement secondaire général",
1011
+ "85.32Z": "Enseignement secondaire technique ou professionnel",
1012
+ "85.41Z": "Enseignement post-secondaire non supérieur",
1013
+ "85.42Z": "Enseignement supérieur",
1014
+ "85.51Z": "Enseignement de disciplines sportives et d'activités de loisirs",
1015
+ "85.52Z": "Enseignement culturel",
1016
+ "85.53Z": "Enseignement de la conduite",
1017
+ "85.59A": "Formation continue d'adultes",
1018
+ "85.59B": "Autres enseignements",
1019
+ "85.60Z": "Activités de soutien à l'enseignement",
1020
+ "86.10Z": "Activités hospitalières",
1021
+ "86.21Z": "Activité des médecins généralistes",
1022
+ "86.22A": "Activités de radiodiagnostic et de radiothérapie",
1023
+ "86.22B": "Activités chirurgicales",
1024
+ "86.22C": "Autres activités des médecins spécialistes",
1025
+ "86.23Z": "Pratique dentaire",
1026
+ "86.90A": "Ambulances",
1027
+ "86.90B": "Laboratoires d'analyses médicales",
1028
+ "86.90C": "Centres de collecte et banques d'organes",
1029
+ "86.90D": "Activités des infirmiers et des sages-femmes",
1030
+ "86.90E": "Activités des professionnels de la rééducation, de l’appareillage et des pédicures-podologues",
1031
+ "86.90F": "Activités de santé humaine non classées ailleurs",
1032
+ "87.10A": "Hébergement médicalisé pour personnes âgées",
1033
+ "87.10B": "Hébergement médicalisé pour enfants handicapés",
1034
+ "87.10C": "Hébergement médicalisé pour adultes handicapés et autre hébergement médicalisé",
1035
+ "87.20A": "Hébergement social pour handicapés mentaux et malades mentaux",
1036
+ "87.20B": "Hébergement social pour toxicomanes",
1037
+ "87.30A": "Hébergement social pour personnes âgées",
1038
+ "87.30B": "Hébergement social pour handicapés physiques",
1039
+ "87.90A": "Hébergement social pour enfants en difficultés",
1040
+ "87.90B": "Hébergement social pour adultes et familles en difficultés et autre hébergement social",
1041
+ "88.10A": "Aide à domicile",
1042
+ "88.10B": "Accueil ou accompagnement sans hébergement d’adultes handicapés ou de personnes âgées",
1043
+ "88.10C": "Aide par le travail",
1044
+ "88.91A": "Accueil de jeunes enfants",
1045
+ "88.91B": "Accueil ou accompagnement sans hébergement d’enfants handicapés",
1046
+ "88.99A": "Autre accueil ou accompagnement sans hébergement d’enfants et d’adolescents",
1047
+ "88.99B": "Action sociale sans hébergement n.c.a.",
1048
+ "90.01Z": "Arts du spectacle vivant",
1049
+ "90.02Z": "Activités de soutien au spectacle vivant",
1050
+ "90.03A": "Création artistique relevant des arts plastiques",
1051
+ "90.03B": "Autre création artistique",
1052
+ "90.04Z": "Gestion de salles de spectacles",
1053
+ "91.01Z": "Gestion des bibliothèques et des archives",
1054
+ "91.02Z": "Gestion des musées",
1055
+ "91.03Z": "Gestion des sites et monuments historiques et des attractions touristiques similaires",
1056
+ "91.04Z": "Gestion des jardins botaniques et zoologiques et des réserves naturelles",
1057
+ "92.00Z": "Organisation de jeux de hasard et d'argent",
1058
+ "93.11Z": "Gestion d'installations sportives",
1059
+ "93.12Z": "Activités de clubs de sports",
1060
+ "93.13Z": "Activités des centres de culture physique",
1061
+ "93.19Z": "Autres activités liées au sport",
1062
+ "93.21Z": "Activités des parcs d'attractions et parcs à thèmes",
1063
+ "93.29Z": "Autres activités récréatives et de loisirs",
1064
+ "94.11Z": "Activités des organisations patronales et consulaires",
1065
+ "94.12Z": "Activités des organisations professionnelles",
1066
+ "94.20Z": "Activités des syndicats de salariés",
1067
+ "94.91Z": "Activités des organisations religieuses",
1068
+ "94.92Z": "Activités des organisations politiques",
1069
+ "94.99Z": "Autres organisations fonctionnant par adhésion volontaire",
1070
+ "95.11Z": "Réparation d'ordinateurs et d'équipements périphériques",
1071
+ "95.12Z": "Réparation d'équipements de communication",
1072
+ "95.21Z": "Réparation de produits électroniques grand public",
1073
+ "95.22Z": "Réparation d'appareils électroménagers et d'équipements pour la maison et le jardin",
1074
+ "95.23Z": "Réparation de chaussures et d'articles en cuir",
1075
+ "95.24Z": "Réparation de meubles et d'équipements du foyer",
1076
+ "95.25Z": "Réparation d'articles d'horlogerie et de bijouterie",
1077
+ "95.29Z": "Réparation d'autres biens personnels et domestiques",
1078
+ "96.01A": "Blanchisserie-teinturerie de gros",
1079
+ "96.01B": "Blanchisserie-teinturerie de détail",
1080
+ "96.02A": "Coiffure",
1081
+ "96.02B": "Soins de beauté",
1082
+ "96.03Z": "Services funéraires",
1083
+ "96.04Z": "Entretien corporel",
1084
+ "96.09Z": "Autres services personnels n.c.a.",
1085
+ "97.00Z": "Activités des ménages en tant qu'employeurs de personnel domestique",
1086
+ "98.10Z": "Activités indifférenciées des ménages en tant que producteurs de biens pour usage propre",
1087
+ "98.20Z": "Activités indifférenciées des ménages en tant que producteurs de services pour usage propre",
1088
+ "99.00Z": "Activités des organisations et organismes extraterritoriaux"
1089
+ };
1090
+ const API_BASE = "https://recherche-entreprises.api.gouv.fr/search";
1091
+ const TIMEOUT_MS = 4e3;
1092
+ const CACHE_TTL_MS = 5 * 60 * 1e3;
1093
+ const SIRET_RE = /^\d{14}$/;
1094
+ function nafLabelOf(code) {
1095
+ return code ? NAF_LABELS[code] : void 0;
1096
+ }
1097
+ const HEADCOUNT_LABELS = {
1098
+ "00": "0 salarié",
1099
+ "01": "1 ou 2 salariés",
1100
+ "02": "3 à 5 salariés",
1101
+ "03": "6 à 9 salariés",
1102
+ "11": "10 à 19 salariés",
1103
+ "12": "20 à 49 salariés",
1104
+ "21": "50 à 99 salariés",
1105
+ "22": "100 à 199 salariés",
1106
+ "31": "200 à 249 salariés",
1107
+ "32": "250 à 499 salariés",
1108
+ "41": "500 à 999 salariés",
1109
+ "42": "1 000 à 1 999 salariés",
1110
+ "51": "2 000 à 4 999 salariés",
1111
+ "52": "5 000 à 9 999 salariés",
1112
+ "53": "10 000 salariés et plus"
1113
+ };
1114
+ function headcountLabelOf(code) {
1115
+ return code ? HEADCOUNT_LABELS[code] : void 0;
1116
+ }
1117
+ function toHit(result, etab) {
1118
+ if (!etab.siret || !result.siren) return null;
1119
+ return {
1120
+ siret: etab.siret,
1121
+ siren: result.siren,
1122
+ name: result.nom_raison_sociale || result.nom_complet || "",
1123
+ address: etab.adresse,
1124
+ zip: etab.code_postal,
1125
+ city: etab.libelle_commune,
1126
+ headquarters: Boolean(etab.est_siege),
1127
+ naf: etab.activite_principale || result.activite_principale,
1128
+ nafLabel: nafLabelOf(etab.activite_principale || result.activite_principale),
1129
+ headcount: headcountLabelOf(etab.tranche_effectif_salarie) ?? headcountLabelOf(result.tranche_effectif_salarie),
1130
+ closed: etab.etat_administratif === "F" || void 0
1131
+ };
1132
+ }
1133
+ function normalizeCompanyHits(payload) {
1134
+ const hits = [];
1135
+ const seen = /* @__PURE__ */ new Set();
1136
+ for (const result of payload.results ?? []) {
1137
+ const etablissements = [result.siege, ...result.matching_etablissements ?? []];
1138
+ for (const etab of etablissements) {
1139
+ if (!etab?.siret || seen.has(etab.siret)) continue;
1140
+ const hit = toHit(result, etab);
1141
+ if (!hit || hit.closed) continue;
1142
+ seen.add(hit.siret);
1143
+ hits.push(hit);
1144
+ }
1145
+ }
1146
+ return hits;
1147
+ }
1148
+ function pickSiret(payload, siret) {
1149
+ for (const result of payload.results ?? []) {
1150
+ const etablissements = [result.siege, ...result.matching_etablissements ?? []];
1151
+ for (const etab of etablissements) {
1152
+ if (etab?.siret === siret) return toHit(result, etab);
1153
+ }
1154
+ }
1155
+ return null;
1156
+ }
1157
+ function companyProperties(map, hit) {
1158
+ const groups = {};
1159
+ for (const [datum, mapping] of Object.entries(map)) {
1160
+ const property = mapping?.property?.trim();
1161
+ if (!property) continue;
1162
+ const value = hit[datum];
1163
+ if (value === void 0 || value === "") continue;
1164
+ const object = mapping?.object?.trim() || "company";
1165
+ (groups[object] ??= {})[property] = value;
1166
+ }
1167
+ return groups;
1168
+ }
1169
+ const cache = /* @__PURE__ */ new Map();
1170
+ async function query(params) {
1171
+ try {
1172
+ const res = await fetch(`${API_BASE}?${params}`, {
1173
+ signal: AbortSignal.timeout(TIMEOUT_MS),
1174
+ headers: { Accept: "application/json" }
1175
+ });
1176
+ if (!res.ok) return null;
1177
+ return await res.json();
1178
+ } catch {
1179
+ return null;
1180
+ }
1181
+ }
1182
+ async function searchCompanies(q) {
1183
+ const trimmed = q.trim().slice(0, 60);
1184
+ if (trimmed.length < 3) return [];
1185
+ const key = trimmed.toLowerCase();
1186
+ const cached = cache.get(key);
1187
+ if (cached && Date.now() - cached.at < CACHE_TTL_MS) return cached.hits;
1188
+ const payload = await query(`q=${encodeURIComponent(trimmed)}&per_page=8`);
1189
+ const hits = payload ? normalizeCompanyHits(payload) : [];
1190
+ if (payload) cache.set(key, { at: Date.now(), hits });
1191
+ return hits;
1192
+ }
1193
+ async function resolveSiret(siret) {
1194
+ if (!SIRET_RE.test(siret)) return null;
1195
+ const payload = await query(`q=${encodeURIComponent(siret)}&per_page=1`);
1196
+ return payload ? pickSiret(payload, siret) : null;
1197
+ }
356
1198
  const localizedString = (type = "string") => ({
357
1199
  type,
358
1200
  pluginOptions: { i18n: { localized: true } }
@@ -436,7 +1278,8 @@ const contentTypes = {
436
1278
  hubspotSynced: { type: "boolean", default: false },
437
1279
  contactId: { type: "string" },
438
1280
  companyId: { type: "string" },
439
- rejected: { type: "json" }
1281
+ rejected: { type: "json" },
1282
+ companies: { type: "json" }
440
1283
  }
441
1284
  }
442
1285
  },
@@ -465,7 +1308,17 @@ const contentTypes = {
465
1308
  }
466
1309
  }
467
1310
  };
468
- const NEEDS_VALUE = /* @__PURE__ */ new Set(["eq", "neq", "contains", "gt", "lt"]);
1311
+ const NEEDS_VALUE = /* @__PURE__ */ new Set([
1312
+ "eq",
1313
+ "neq",
1314
+ "contains",
1315
+ "notContains",
1316
+ "startsWith",
1317
+ "endsWith",
1318
+ "gt",
1319
+ "lt"
1320
+ ]);
1321
+ const NEEDS_VALUES = /* @__PURE__ */ new Set(["in", "notIn"]);
469
1322
  function validateDefinition(definition) {
470
1323
  const errors = [];
471
1324
  const allIds = /* @__PURE__ */ new Set();
@@ -482,8 +1335,20 @@ function validateDefinition(definition) {
482
1335
  if (NEEDS_VALUE.has(rule.operator) && (rule.value === void 0 || rule.value === "")) {
483
1336
  errors.push({ code: "missing-value", ...owner, target: rule.field });
484
1337
  }
1338
+ if (NEEDS_VALUES.has(rule.operator) && !rule.values?.length) {
1339
+ errors.push({ code: "missing-value", ...owner, target: rule.field });
1340
+ }
485
1341
  }
486
1342
  };
1343
+ const reservedNames = /* @__PURE__ */ new Set();
1344
+ for (const step of definition.steps ?? []) {
1345
+ for (const fld of step.fields ?? []) {
1346
+ if (fld.type === "company" && fld.name?.trim()) {
1347
+ reservedNames.add(`${fld.name}__siret`);
1348
+ reservedNames.add(`${fld.name}__company`);
1349
+ }
1350
+ }
1351
+ }
487
1352
  const seen = /* @__PURE__ */ new Set();
488
1353
  const seenNames = /* @__PURE__ */ new Set();
489
1354
  for (const step of definition.steps ?? []) {
@@ -493,6 +1358,8 @@ function validateDefinition(definition) {
493
1358
  errors.push({ code: "missing-name", fieldId: fld.id, name: fld.name ?? "" });
494
1359
  } else if (seenNames.has(fld.name)) {
495
1360
  errors.push({ code: "duplicate-name", fieldId: fld.id, name: fld.name });
1361
+ } else if (reservedNames.has(fld.name)) {
1362
+ errors.push({ code: "companion-collision", fieldId: fld.id, name: fld.name });
496
1363
  } else {
497
1364
  seenNames.add(fld.name);
498
1365
  }
@@ -515,6 +1382,16 @@ function evaluateRule(rule, get) {
515
1382
  return asString(value) !== asString(rule.value);
516
1383
  case "contains":
517
1384
  return asString(value).toLowerCase().includes(asString(rule.value).toLowerCase());
1385
+ case "notContains":
1386
+ return !asString(value).toLowerCase().includes(asString(rule.value).toLowerCase());
1387
+ case "startsWith":
1388
+ return asString(value).toLowerCase().startsWith(asString(rule.value).toLowerCase());
1389
+ case "endsWith":
1390
+ return asString(value).toLowerCase().endsWith(asString(rule.value).toLowerCase());
1391
+ case "in":
1392
+ return (rule.values ?? []).some((v) => asString(v) === asString(value));
1393
+ case "notIn":
1394
+ return !(rule.values ?? []).some((v) => asString(v) === asString(value));
518
1395
  case "empty":
519
1396
  return isEmpty(value);
520
1397
  case "notEmpty":
@@ -578,7 +1455,8 @@ function publicForm(entry) {
578
1455
  locale: entry.locale ?? null,
579
1456
  steps: (entry.definition?.steps ?? []).map((step) => ({
580
1457
  ...step,
581
- fields: (step.fields ?? []).map(({ hubspot: _hubspot, ...fld }) => fld)
1458
+ // The CRM mappings are the server's business — never the browser's.
1459
+ fields: (step.fields ?? []).map(({ hubspot: _hubspot, companyMap: _companyMap, ...fld }) => fld)
582
1460
  }))
583
1461
  };
584
1462
  }
@@ -586,6 +1464,7 @@ function groupByObject(definition, values) {
586
1464
  const groups = {};
587
1465
  for (const step of definition.steps ?? []) {
588
1466
  for (const fld of step.fields ?? []) {
1467
+ if (fld.type === "company") continue;
589
1468
  const value = values[fld.name];
590
1469
  if (value === void 0) continue;
591
1470
  const mapping = fld.hubspot ?? {};
@@ -600,6 +1479,14 @@ function mappingProblems(definition, portalProperties) {
600
1479
  const problems = [];
601
1480
  for (const step of definition.steps ?? []) {
602
1481
  for (const fld of step.fields ?? []) {
1482
+ for (const mapping2 of Object.values(fld.companyMap ?? {})) {
1483
+ if (!mapping2?.property?.trim()) continue;
1484
+ const problem2 = checkMapping(portalProperties, {
1485
+ object: mapping2.object?.trim() || "company",
1486
+ property: mapping2.property
1487
+ });
1488
+ if (problem2) problems.push({ ...problem2, fieldId: fld.id });
1489
+ }
603
1490
  const mapping = fld.hubspot ?? {};
604
1491
  if (!mapping.property) continue;
605
1492
  const options = fld.options;
@@ -695,6 +1582,31 @@ function summaryLines(definition, values) {
695
1582
  }
696
1583
  return lines;
697
1584
  }
1585
+ const SIRET_SHAPE = /^\d{14}$/;
1586
+ function parseCompanySnapshot(raw) {
1587
+ if (typeof raw !== "string" || !raw || raw.length > 5e3) return null;
1588
+ let parsed;
1589
+ try {
1590
+ parsed = JSON.parse(raw);
1591
+ } catch {
1592
+ return null;
1593
+ }
1594
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
1595
+ const str = (v, cap = 300) => typeof v === "string" ? v.slice(0, cap) : void 0;
1596
+ const hit = {
1597
+ siret: SIRET_SHAPE.test(String(parsed.siret ?? "")) ? String(parsed.siret) : "",
1598
+ siren: /^\d{9}$/.test(String(parsed.siren ?? "")) ? String(parsed.siren) : "",
1599
+ name: str(parsed.name) ?? "",
1600
+ address: str(parsed.address),
1601
+ zip: str(parsed.zip, 20),
1602
+ city: str(parsed.city),
1603
+ headquarters: parsed.headquarters === true,
1604
+ naf: str(parsed.naf, 10),
1605
+ nafLabel: str(parsed.nafLabel),
1606
+ headcount: str(parsed.headcount, 50)
1607
+ };
1608
+ return hit.name || hit.siret ? hit : null;
1609
+ }
698
1610
  function createFormsService(strapi, _opts = {}) {
699
1611
  const formsConfig = () => ({
700
1612
  companyFromDomain: true,
@@ -727,6 +1639,36 @@ function createFormsService(strapi, _opts = {}) {
727
1639
  }
728
1640
  return { accepted, rejected };
729
1641
  }
1642
+ async function findCompanyBySiret(apiKey, siretProperty, siretValue, props) {
1643
+ const found = await hsJson(apiKey, `${HS_COMPANIES}/search`, {
1644
+ method: "POST",
1645
+ body: {
1646
+ filterGroups: [
1647
+ { filters: [{ propertyName: siretProperty, operator: "EQ", value: siretValue }] }
1648
+ ],
1649
+ properties: [siretProperty],
1650
+ limit: 1
1651
+ }
1652
+ });
1653
+ const existingId = found.results?.[0]?.id;
1654
+ if (!existingId) return void 0;
1655
+ const stringProps = {};
1656
+ for (const [key, value] of Object.entries(props)) stringProps[key] = String(value);
1657
+ await hsJson(apiKey, `${HS_COMPANIES}/${existingId}`, {
1658
+ method: "PATCH",
1659
+ body: { properties: stringProps }
1660
+ });
1661
+ return existingId;
1662
+ }
1663
+ async function createCompany(apiKey, props) {
1664
+ const stringProps = {};
1665
+ for (const [key, value] of Object.entries(props)) stringProps[key] = String(value);
1666
+ const created = await hsJson(apiKey, HS_COMPANIES, {
1667
+ method: "POST",
1668
+ body: { properties: stringProps }
1669
+ });
1670
+ return created.id;
1671
+ }
730
1672
  async function resolveCompanyByDomain(apiKey, domain, props) {
731
1673
  const found = await hsJson(apiKey, `${HS_COMPANIES}/search`, {
732
1674
  method: "POST",
@@ -761,6 +1703,17 @@ function createFormsService(strapi, _opts = {}) {
761
1703
  const path = opts.meta.originPath ? ` (${escapeHtml(String(opts.meta.originPath))})` : "";
762
1704
  lines.push(`<strong>Sujet</strong> : ${escapeHtml(String(opts.meta.originLabel))}${path}`);
763
1705
  }
1706
+ for (const record of opts.companies ?? []) {
1707
+ if (!record.name && !record.siret) continue;
1708
+ const bits = [record.name, record.siret ? `SIRET ${record.siret}` : ""].filter(Boolean);
1709
+ const flags = [
1710
+ record.resolved ? "" : "non résolue via SIRENE",
1711
+ record.closed ? "établissement fermé" : ""
1712
+ ].filter(Boolean);
1713
+ lines.push(
1714
+ `<strong>Entreprise</strong> : ${escapeHtml(bits.join(" — "))}${flags.length ? ` (${escapeHtml(flags.join(", "))})` : ""}`
1715
+ );
1716
+ }
764
1717
  lines.push("", ...summaryLines(opts.form.definition, opts.values));
765
1718
  if (opts.rejected.length) {
766
1719
  lines.push("", "<strong>⚠ Champs non enregistrés (mapping à corriger)</strong>");
@@ -804,8 +1757,46 @@ function createFormsService(strapi, _opts = {}) {
804
1757
  let contactId;
805
1758
  let companyId;
806
1759
  let rejected = [];
1760
+ const companyRecords = [];
1761
+ const companyGroups = {};
1762
+ let siretDedup;
1763
+ for (const step of form.definition.steps ?? []) {
1764
+ for (const fld of step.fields ?? []) {
1765
+ if (fld.type !== "company" || resolution.hidden.includes(fld.name)) continue;
1766
+ const typed = resolution.values[fld.name];
1767
+ const siretRaw = rawValues[`${fld.name}__siret`];
1768
+ const siret = typeof siretRaw === "string" && SIRET_SHAPE.test(siretRaw.trim()) ? siretRaw.trim() : "";
1769
+ if (typed === void 0 && !siret) continue;
1770
+ const map = fld.companyMap ?? {};
1771
+ let hit = siret ? await resolveSiret(siret) : null;
1772
+ const resolved = Boolean(hit);
1773
+ if (!hit && siret) hit = parseCompanySnapshot(rawValues[`${fld.name}__company`]);
1774
+ if (hit) {
1775
+ for (const [object, props] of Object.entries(companyProperties(map, hit))) {
1776
+ companyGroups[object] = { ...companyGroups[object] ?? {}, ...props };
1777
+ }
1778
+ const siretProperty = (map.siret?.object?.trim() || "company") === "company" ? map.siret?.property?.trim() : void 0;
1779
+ if (!siretDedup && siretProperty && hit.siret) {
1780
+ siretDedup = { property: siretProperty, value: hit.siret };
1781
+ }
1782
+ } else if (typed !== void 0 && map.name?.property?.trim()) {
1783
+ const object = map.name.object?.trim() || "company";
1784
+ (companyGroups[object] ??= {})[map.name.property.trim()] = typed;
1785
+ }
1786
+ companyRecords.push({
1787
+ field: fld.name,
1788
+ siret: hit?.siret || void 0,
1789
+ name: hit?.name || (typeof typed === "string" ? typed : void 0),
1790
+ resolved,
1791
+ closed: hit?.closed || void 0
1792
+ });
1793
+ }
1794
+ }
807
1795
  if (email && apiKey) {
808
1796
  const groups = groupByObject(form.definition, resolution.values);
1797
+ for (const [object, props] of Object.entries(companyGroups)) {
1798
+ groups[object] = { ...groups[object] ?? {}, ...props };
1799
+ }
809
1800
  const partition = await partitionBySchema(apiKey, groups);
810
1801
  rejected = partition.rejected;
811
1802
  const result = await strapi.plugin("hubspot").service("submit").upsert({
@@ -818,13 +1809,24 @@ function createFormsService(strapi, _opts = {}) {
818
1809
  contactId = result.id;
819
1810
  }
820
1811
  const domain = corporateDomain(email);
821
- if (contactId && domain && config2.companyFromDomain) {
1812
+ const companyProps = partition.accepted.company ?? {};
1813
+ const wantsCompany = Boolean(siretDedup) || Boolean(domain && config2.companyFromDomain);
1814
+ if (contactId && wantsCompany) {
822
1815
  try {
823
- companyId = await resolveCompanyByDomain(
824
- apiKey,
825
- domain,
826
- partition.accepted.company ?? {}
827
- );
1816
+ if (siretDedup) {
1817
+ companyId = await findCompanyBySiret(
1818
+ apiKey,
1819
+ siretDedup.property,
1820
+ siretDedup.value,
1821
+ companyProps
1822
+ );
1823
+ }
1824
+ if (!companyId && domain && config2.companyFromDomain) {
1825
+ companyId = await resolveCompanyByDomain(apiKey, domain, companyProps);
1826
+ }
1827
+ if (!companyId && siretDedup) {
1828
+ companyId = await createCompany(apiKey, companyProps);
1829
+ }
828
1830
  if (companyId) {
829
1831
  await hsJson(
830
1832
  apiKey,
@@ -844,7 +1846,8 @@ function createFormsService(strapi, _opts = {}) {
844
1846
  form,
845
1847
  meta,
846
1848
  values: resolution.values,
847
- rejected
1849
+ rejected,
1850
+ companies: companyRecords
848
1851
  });
849
1852
  } catch (err) {
850
1853
  strapi.log.warn(`[hubspot] lead note failed (contact OK) — ${err.message}`);
@@ -862,7 +1865,8 @@ function createFormsService(strapi, _opts = {}) {
862
1865
  hubspotSynced,
863
1866
  contactId,
864
1867
  companyId,
865
- rejected
1868
+ rejected,
1869
+ companies: companyRecords
866
1870
  }
867
1871
  });
868
1872
  return { ok: true, hubspotSynced };
@@ -1016,8 +2020,8 @@ async function listHubspotForms(apiKey) {
1016
2020
  const out = [];
1017
2021
  let after;
1018
2022
  for (let page = 0; page < 10; page += 1) {
1019
- const query = after ? `&after=${encodeURIComponent(after)}` : "";
1020
- const res = await hsGet(apiKey, `/marketing/v3/forms/?limit=100&formTypes=hubspot${query}`);
2023
+ const query2 = after ? `&after=${encodeURIComponent(after)}` : "";
2024
+ const res = await hsGet(apiKey, `/marketing/v3/forms/?limit=100&formTypes=hubspot${query2}`);
1021
2025
  for (const form of res.results ?? []) {
1022
2026
  if (form.id && !form.archived) {
1023
2027
  out.push({ id: form.id, name: form.name || form.id, updatedAt: form.updatedAt });
@@ -1748,6 +2752,13 @@ const controllers = {
1748
2752
  }
1749
2753
  }),
1750
2754
  formsAdmin: ({ strapi }) => createFormsAdminController(strapi),
2755
+ company: () => ({
2756
+ /** SIRENE autocomplete for the company field — bounded, cached upstream. */
2757
+ async search(ctx) {
2758
+ const q = typeof ctx.query.q === "string" ? ctx.query.q : "";
2759
+ ctx.body = { companies: await searchCompanies(q) };
2760
+ }
2761
+ }),
1751
2762
  submissions: ({ strapi }) => ({
1752
2763
  /** Paged submissions, newest first, optionally narrowed to one form. */
1753
2764
  async list(ctx) {
@@ -1891,6 +2902,7 @@ const routes = {
1891
2902
  type: "content-api",
1892
2903
  routes: [
1893
2904
  { method: "GET", path: "/forms/:slug", handler: "forms.findOne", config: { policies: [] } },
2905
+ { method: "GET", path: "/company-search", handler: "company.search", config: { policies: [] } },
1894
2906
  { method: "POST", path: "/forms/:slug/submit", handler: "forms.submit", config: { policies: [] } }
1895
2907
  ]
1896
2908
  }