diff --git a/packages/api/sources/substances--substances-legales.json b/packages/api/sources/substances--substances-legales.json
deleted file mode 100644
index 6d9299e89896a70cf5f5a1b293f92acf2852ebb1..0000000000000000000000000000000000000000
--- a/packages/api/sources/substances--substances-legales.json
+++ /dev/null
@@ -1,882 +0,0 @@
-[
-  {
-    "substance_id": "acti",
-    "substance_legale_id": "rxxx"
-  },
-  {
-    "substance_id": "aloh",
-    "substance_legale_id": "aloh"
-  },
-  {
-    "substance_id": "amph",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "anda",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "ande",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "anhy",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "anti",
-    "substance_legale_id": "anti"
-  },
-  {
-    "substance_id": "ardo",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "argc",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "arge",
-    "substance_legale_id": "arge"
-  },
-  {
-    "substance_id": "argf",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "argk",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "args",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "arse",
-    "substance_legale_id": "arse"
-  },
-  {
-    "substance_id": "asta",
-    "substance_legale_id": "rxxx"
-  },
-  {
-    "substance_id": "auru",
-    "substance_legale_id": "auru"
-  },
-  {
-    "substance_id": "bary",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "basa",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "bery",
-    "substance_legale_id": "bery"
-  },
-  {
-    "substance_id": "bism",
-    "substance_legale_id": "bism"
-  },
-  {
-    "substance_id": "bitm",
-    "substance_legale_id": "hydm"
-  },
-  {
-    "substance_id": "bitu",
-    "substance_legale_id": "cfxx"
-  },
-  {
-    "substance_id": "buta",
-    "substance_legale_id": "skst"
-  },
-  {
-    "substance_id": "caci",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "cadm",
-    "substance_legale_id": "cadm"
-  },
-  {
-    "substance_id": "calc",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "cals",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "cend",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "ceri",
-    "substance_legale_id": "ceri"
-  },
-  {
-    "substance_id": "cesi",
-    "substance_legale_id": "cesi"
-  },
-  {
-    "substance_id": "cfan",
-    "substance_legale_id": "cfxx"
-  },
-  {
-    "substance_id": "cfch",
-    "substance_legale_id": "cfxx"
-  },
-  {
-    "substance_id": "cfho",
-    "substance_legale_id": "cfxx"
-  },
-  {
-    "substance_id": "cfli",
-    "substance_legale_id": "cfxx"
-  },
-  {
-    "substance_id": "cfxx",
-    "substance_legale_id": "cfxx"
-  },
-  {
-    "substance_id": "chro",
-    "substance_legale_id": "chro"
-  },
-  {
-    "substance_id": "coba",
-    "substance_legale_id": "coba"
-  },
-  {
-    "substance_id": "coox",
-    "substance_legale_id": "coox"
-  },
-  {
-    "substance_id": "corn",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "crai",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "cuiv",
-    "substance_legale_id": "cuiv"
-  },
-  {
-    "substance_id": "daci",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "diab",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "diam",
-    "substance_legale_id": "diam"
-  },
-  {
-    "substance_id": "diat",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "dior",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "dole",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "dolo",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "dysp",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "erbi",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "etai",
-    "substance_legale_id": "etai"
-  },
-  {
-    "substance_id": "ethy",
-    "substance_legale_id": "skst"
-  },
-  {
-    "substance_id": "euro",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "falu",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "feld",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "ferx",
-    "substance_legale_id": "ferx"
-  },
-  {
-    "substance_id": "fluo",
-    "substance_legale_id": "fluo"
-  },
-  {
-    "substance_id": "gabb",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "gado",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "gall",
-    "substance_legale_id": "gall"
-  },
-  {
-    "substance_id": "galt",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "gazn",
-    "substance_legale_id": "skst"
-  },
-  {
-    "substance_id": "geob",
-    "substance_legale_id": "geob"
-  },
-  {
-    "substance_id": "geoh",
-    "substance_legale_id": "geoh"
-  },
-  {
-    "substance_id": "geom",
-    "substance_legale_id": "geom"
-  },
-  {
-    "substance_id": "germ",
-    "substance_legale_id": "germ"
-  },
-  {
-    "substance_id": "glac",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "gnei",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "grai",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "grao",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "grap",
-    "substance_legale_id": "grap"
-  },
-  {
-    "substance_id": "gref",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "gres",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "grma",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "grsi",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "gyps",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "hafn",
-    "substance_legale_id": "hafn"
-  },
-  {
-    "substance_id": "heli",
-    "substance_legale_id": "heli"
-  },
-  {
-    "substance_id": "holm",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "hyda",
-    "substance_legale_id": "hydx"
-  },
-  {
-    "substance_id": "hydc",
-    "substance_legale_id": "hydx"
-  },
-  {
-    "substance_id": "hydg",
-    "substance_legale_id": "skst"
-  },
-  {
-    "substance_id": "hydl",
-    "substance_legale_id": "skst"
-  },
-  {
-    "substance_id": "hydo",
-    "substance_legale_id": "hydx"
-  },
-  {
-    "substance_id": "hydr",
-    "substance_legale_id": "hydx"
-  },
-  {
-    "substance_id": "hydx",
-    "substance_legale_id": "hydx"
-  },
-  {
-    "substance_id": "indi",
-    "substance_legale_id": "indi"
-  },
-  {
-    "substance_id": "irid",
-    "substance_legale_id": "plax"
-  },
-  {
-    "substance_id": "kals",
-    "substance_legale_id": "kals"
-  },
-  {
-    "substance_id": "kaol",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "kclx",
-    "substance_legale_id": "kclx"
-  },
-  {
-    "substance_id": "lant",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "lept",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "lith",
-    "substance_legale_id": "lith"
-  },
-  {
-    "substance_id": "lute",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "maer",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "mais",
-    "substance_legale_id": "suco"
-  },
-  {
-    "substance_id": "mang",
-    "substance_legale_id": "mang"
-  },
-  {
-    "substance_id": "marb",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "marn",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "aloh"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "chro"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "cuiv"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "etai"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "ferx"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "mang"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "nick"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "plom"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "tita"
-  },
-  {
-    "substance_id": "meba",
-    "substance_legale_id": "zinc"
-  },
-  {
-    "substance_id": "meco",
-    "substance_legale_id": "suco"
-  },
-  {
-    "substance_id": "mepr",
-    "substance_legale_id": "arge"
-  },
-  {
-    "substance_id": "mepr",
-    "substance_legale_id": "auru"
-  },
-  {
-    "substance_id": "mepr",
-    "substance_legale_id": "plat"
-  },
-  {
-    "substance_id": "mepr",
-    "substance_legale_id": "plax"
-  },
-  {
-    "substance_id": "merc",
-    "substance_legale_id": "merc"
-  },
-  {
-    "substance_id": "mica",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "mics",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "migm",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "moly",
-    "substance_legale_id": "moly"
-  },
-  {
-    "substance_id": "mylo",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "nacl",
-    "substance_legale_id": "nacl"
-  },
-  {
-    "substance_id": "neod",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "nick",
-    "substance_legale_id": "nick"
-  },
-  {
-    "substance_id": "niob",
-    "substance_legale_id": "niob"
-  },
-  {
-    "substance_id": "ocre",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "oooo",
-    "substance_legale_id": "oooo"
-  },
-  {
-    "substance_id": "ophi",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "osmi",
-    "substance_legale_id": "plax"
-  },
-  {
-    "substance_id": "pall",
-    "substance_legale_id": "plax"
-  },
-  {
-    "substance_id": "perl",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "phon",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "phos",
-    "substance_legale_id": "phos"
-  },
-  {
-    "substance_id": "pipe",
-    "substance_legale_id": "diam"
-  },
-  {
-    "substance_id": "plat",
-    "substance_legale_id": "plat"
-  },
-  {
-    "substance_id": "plax",
-    "substance_legale_id": "plax"
-  },
-  {
-    "substance_id": "plom",
-    "substance_legale_id": "plom"
-  },
-  {
-    "substance_id": "polo",
-    "substance_legale_id": "rxxx"
-  },
-  {
-    "substance_id": "porp",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "pouz",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "pras",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "prom",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "prot",
-    "substance_legale_id": "rxxx"
-  },
-  {
-    "substance_id": "prpa",
-    "substance_legale_id": "skst"
-  },
-  {
-    "substance_id": "prpy",
-    "substance_legale_id": "skst"
-  },
-  {
-    "substance_id": "pyri",
-    "substance_legale_id": "ferx"
-  },
-  {
-    "substance_id": "quar",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "quat",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "radi",
-    "substance_legale_id": "rxxx"
-  },
-  {
-    "substance_id": "rado",
-    "substance_legale_id": "rxxx"
-  },
-  {
-    "substance_id": "rard",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "rdet",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "rhen",
-    "substance_legale_id": "rhen"
-  },
-  {
-    "substance_id": "rhod",
-    "substance_legale_id": "plax"
-  },
-  {
-    "substance_id": "rhyo",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "rubi",
-    "substance_legale_id": "rubi"
-  },
-  {
-    "substance_id": "ruth",
-    "substance_legale_id": "plax"
-  },
-  {
-    "substance_id": "rxxx",
-    "substance_legale_id": "rxxx"
-  },
-  {
-    "substance_id": "saco",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "sama",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "samg",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "sasi",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "scan",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "scbi",
-    "substance_legale_id": "cfxx"
-  },
-  {
-    "substance_id": "schi",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "scor",
-    "substance_legale_id": "scor"
-  },
-  {
-    "substance_id": "sele",
-    "substance_legale_id": "sele"
-  },
-  {
-    "substance_id": "selg",
-    "substance_legale_id": "kclx"
-  },
-  {
-    "substance_id": "selg",
-    "substance_legale_id": "nacl"
-  },
-  {
-    "substance_id": "selp",
-    "substance_legale_id": "kclx"
-  },
-  {
-    "substance_id": "selp",
-    "substance_legale_id": "nacl"
-  },
-  {
-    "substance_id": "sels",
-    "substance_legale_id": "kclx"
-  },
-  {
-    "substance_id": "sels",
-    "substance_legale_id": "nacl"
-  },
-  {
-    "substance_id": "selx",
-    "substance_legale_id": "nacl"
-  },
-  {
-    "substance_id": "serp",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "sexs",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "sgin",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "sgra",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "sgrm",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "sgsc",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "sgsm",
-    "substance_legale_id": "grma"
-  },
-  {
-    "substance_id": "silc",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "sili",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "silx",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "skst",
-    "substance_legale_id": "skst"
-  },
-  {
-    "substance_id": "smil",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "souf",
-    "substance_legale_id": "souf"
-  },
-  {
-    "substance_id": "soxx",
-    "substance_legale_id": "soxx"
-  },
-  {
-    "substance_id": "sssc",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "stex",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "suco",
-    "substance_legale_id": "scoc"
-  },
-  {
-    "substance_id": "suco",
-    "substance_legale_id": "scof"
-  },
-  {
-    "substance_id": "suco",
-    "substance_legale_id": "scog"
-  },
-  {
-    "substance_id": "suco",
-    "substance_legale_id": "scoh"
-  },
-  {
-    "substance_id": "suco",
-    "substance_legale_id": "scos"
-  },
-  {
-    "substance_id": "suco",
-    "substance_legale_id": "scow"
-  },
-  {
-    "substance_id": "suco",
-    "substance_legale_id": "suco"
-  },
-  {
-    "substance_id": "syen",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "talc",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "tant",
-    "substance_legale_id": "tant"
-  },
-  {
-    "substance_id": "tech",
-    "substance_legale_id": "rxxx"
-  },
-  {
-    "substance_id": "tell",
-    "substance_legale_id": "tell"
-  },
-  {
-    "substance_id": "terb",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "terv",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "thal",
-    "substance_legale_id": "thal"
-  },
-  {
-    "substance_id": "thor",
-    "substance_legale_id": "thor"
-  },
-  {
-    "substance_id": "thul",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "tita",
-    "substance_legale_id": "tita"
-  },
-  {
-    "substance_id": "tmas",
-    "substance_legale_id": "suco"
-  },
-  {
-    "substance_id": "tour",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "trac",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "trxx",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "tufo",
-    "substance_legale_id": "carx"
-  },
-  {
-    "substance_id": "uran",
-    "substance_legale_id": "uran"
-  },
-  {
-    "substance_id": "vana",
-    "substance_legale_id": "vana"
-  },
-  {
-    "substance_id": "wolf",
-    "substance_legale_id": "wolf"
-  },
-  {
-    "substance_id": "ytri",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "ytte",
-    "substance_legale_id": "trxx"
-  },
-  {
-    "substance_id": "zinc",
-    "substance_legale_id": "zinc"
-  },
-  {
-    "substance_id": "zirc",
-    "substance_legale_id": "zirc"
-  }
-]
\ No newline at end of file
diff --git a/packages/api/sources/substances-legales.json b/packages/api/sources/substances-legales.json
deleted file mode 100644
index 96c05774be5e532bd3a28480e7b7e839e855a442..0000000000000000000000000000000000000000
--- a/packages/api/sources/substances-legales.json
+++ /dev/null
@@ -1,385 +0,0 @@
-[
-  {
-    "id": "aloh",
-    "nom": "bauxite",
-    "domaine_id": "m"
-  },
-  {
-    "id": "anti",
-    "nom": "antimoine",
-    "domaine_id": "m"
-  },
-  {
-    "id": "arge",
-    "nom": "argent",
-    "domaine_id": "m"
-  },
-  {
-    "id": "arse",
-    "nom": "arsenic",
-    "domaine_id": "m"
-  },
-  {
-    "id": "auru",
-    "nom": "or",
-    "domaine_id": "m"
-  },
-  {
-    "id": "bery",
-    "nom": "béryllium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "bism",
-    "nom": "bismuth",
-    "domaine_id": "m"
-  },
-  {
-    "id": "cadm",
-    "nom": "cadmium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "carx",
-    "nom": "substances de carrière",
-    "domaine_id": "c",
-    "description": "Substance minérale ou fossile qui n’est pas qualifiée de substance de mine par l’article L.111-1 du code minier. Certaines d’entres elles sont ajoutées ou retirées de la liste des substances de mine selon leur utilisation dans l’économie."
-  },
-  {
-    "id": "ceri",
-    "nom": "cérium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "cesi",
-    "nom": "césium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "cfxx",
-    "nom": "combustibles fossiles solides",
-    "domaine_id": "f",
-    "description": "A l'exeption de la tourbe"
-  },
-  {
-    "id": "chro",
-    "nom": "chrome",
-    "domaine_id": "m"
-  },
-  {
-    "id": "coba",
-    "nom": "cobalt",
-    "domaine_id": "m"
-  },
-  {
-    "id": "coox",
-    "nom": "gaz carbonique",
-    "domaine_id": "m",
-    "description": "A l'exception du gaz naturellement contenu dans les eaux qui sont ou qui viendraient à être utilisées pour l'alimentation humaine ou à des fins thérapeutiques"
-  },
-  {
-    "id": "cuiv",
-    "nom": "cuivre",
-    "domaine_id": "m"
-  },
-  {
-    "id": "diam",
-    "nom": "diamant",
-    "domaine_id": "m"
-  },
-  {
-    "id": "etai",
-    "nom": "étain",
-    "domaine_id": "m"
-  },
-  {
-    "id": "ferx",
-    "nom": "fer",
-    "domaine_id": "m"
-  },
-  {
-    "id": "fluo",
-    "nom": "fluorine",
-    "domaine_id": "m"
-  },
-  {
-    "id": "gall",
-    "nom": "gallium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "geob",
-    "nom": "géothermie basse température",
-    "domaine_id": "g"
-  },
-  {
-    "id": "geoh",
-    "nom": "géothermie haute température",
-    "domaine_id": "g"
-  },
-  {
-    "id": "geom",
-    "nom": "géothermie de minime importance",
-    "domaine_id": "g"
-  },
-  {
-    "id": "germ",
-    "nom": "germanium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "grap",
-    "nom": "graphite",
-    "domaine_id": "m"
-  },
-  {
-    "id": "grma",
-    "nom": "granulats marins",
-    "domaine_id": "w"
-  },
-  {
-    "id": "hafn",
-    "nom": "hafnium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "heli",
-    "nom": "hélium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "hydm",
-    "nom": "hydrocarbures solides",
-    "domaine_id": "m"
-  },
-  {
-    "id": "hydx",
-    "nom": "hydrocarbures liquides ou gazeux",
-    "domaine_id": "h",
-    "description": "A l'exeption de la tourbe"
-  },
-  {
-    "id": "indi",
-    "nom": "indium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "kals",
-    "nom": "alun",
-    "domaine_id": "m"
-  },
-  {
-    "id": "kclx",
-    "nom": "sels de potassium",
-    "domaine_id": "m",
-    "description": "A l'état solide ou en dissolution, à l'exception de ceux contenus dans les eaux salées utilisées à des fins thérapeutiques ou de loisirs"
-  },
-  {
-    "id": "lith",
-    "nom": "lithium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "mang",
-    "nom": "manganèse",
-    "domaine_id": "m"
-  },
-  {
-    "id": "merc",
-    "nom": "mercure",
-    "domaine_id": "m"
-  },
-  {
-    "id": "moly",
-    "nom": "molybdène",
-    "domaine_id": "m"
-  },
-  {
-    "id": "nacl",
-    "nom": "sels de sodium",
-    "domaine_id": "m",
-    "description": "A l'état solide ou en dissolution, à l'exception de ceux contenus dans les eaux salées utilisées à des fins thérapeutiques ou de loisirs"
-  },
-  {
-    "id": "nick",
-    "nom": "nickel",
-    "domaine_id": "m"
-  },
-  {
-    "id": "niob",
-    "nom": "niobium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "oooo",
-    "nom": "non précisé(e)s",
-    "domaine_id": "m"
-  },
-  {
-    "id": "phos",
-    "nom": "phosphates",
-    "domaine_id": "m"
-  },
-  {
-    "id": "plat",
-    "nom": "platine",
-    "domaine_id": "m"
-  },
-  {
-    "id": "plax",
-    "nom": "métaux de la mine du platine",
-    "domaine_id": "m"
-  },
-  {
-    "id": "plom",
-    "nom": "plomb",
-    "domaine_id": "m"
-  },
-  {
-    "id": "radi",
-    "nom": "radium",
-    "domaine_id": "r"
-  },
-  {
-    "id": "rhen",
-    "nom": "rhénium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "rubi",
-    "nom": "rubidium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "rxxx",
-    "nom": "autres éléments radioactifs",
-    "domaine_id": "r"
-  },
-  {
-    "id": "scan",
-    "nom": "scandium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "scoc",
-    "nom": "substances connexes",
-    "domaine_id": "c",
-    "description": "Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes »."
-  },
-  {
-    "id": "scof",
-    "nom": "substances connexes",
-    "domaine_id": "f",
-    "description": "Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes »."
-  },
-  {
-    "id": "scog",
-    "nom": "substances connexes",
-    "domaine_id": "g",
-    "description": "Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes »."
-  },
-  {
-    "id": "scoh",
-    "nom": "substances connexes",
-    "domaine_id": "h",
-    "description": "Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes »."
-  },
-  {
-    "id": "scor",
-    "nom": "substances connexes",
-    "domaine_id": "r",
-    "description": "Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes »."
-  },
-  {
-    "id": "scos",
-    "nom": "substances connexes",
-    "domaine_id": "s",
-    "description": "Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes »."
-  },
-  {
-    "id": "scow",
-    "nom": "substances connexes",
-    "domaine_id": "w",
-    "description": "Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes »."
-  },
-  {
-    "id": "sele",
-    "nom": "sélénium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "skst",
-    "nom": "stockage souterrain",
-    "domaine_id": "s"
-  },
-  {
-    "id": "souf",
-    "nom": "soufre",
-    "domaine_id": "m"
-  },
-  {
-    "id": "soxx",
-    "nom": "sulfates non alcalino-terreux",
-    "domaine_id": "m"
-  },
-  {
-    "id": "suco",
-    "nom": "substances connexes",
-    "domaine_id": "m"
-  },
-  {
-    "id": "tant",
-    "nom": "tantale",
-    "domaine_id": "m"
-  },
-  {
-    "id": "tell",
-    "nom": "tellure",
-    "domaine_id": "m"
-  },
-  {
-    "id": "thal",
-    "nom": "thallium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "thor",
-    "nom": "thorium",
-    "domaine_id": "r"
-  },
-  {
-    "id": "tita",
-    "nom": "titane",
-    "domaine_id": "m"
-  },
-  {
-    "id": "trxx",
-    "nom": "autres éléments des terres rares",
-    "domaine_id": "m"
-  },
-  {
-    "id": "uran",
-    "nom": "uranium",
-    "domaine_id": "r"
-  },
-  {
-    "id": "vana",
-    "nom": "vanadium",
-    "domaine_id": "m"
-  },
-  {
-    "id": "wolf",
-    "nom": "tungstène",
-    "domaine_id": "m"
-  },
-  {
-    "id": "zinc",
-    "nom": "zinc",
-    "domaine_id": "m"
-  },
-  {
-    "id": "zirc",
-    "nom": "zirconium",
-    "domaine_id": "m"
-  }
-]
\ No newline at end of file
diff --git a/packages/api/sources/substances.json b/packages/api/sources/substances.json
deleted file mode 100644
index 00e62126c090fa4eefdfb02c5326c816b4660601..0000000000000000000000000000000000000000
--- a/packages/api/sources/substances.json
+++ /dev/null
@@ -1,1031 +0,0 @@
-[
-  {
-    "id": "acti",
-    "nom": "actinium",
-    "symbole": "Ac"
-  },
-  {
-    "id": "aloh",
-    "nom": "bauxite",
-    "symbole": "Al"
-  },
-  {
-    "id": "amph",
-    "nom": "amphibolite",
-    "gerep": 1401,
-    "description": "Roche métamorphique présentant de bonnes caractéristiques géomécaniques, de couleur sombre (gris à vert foncé) riche en silicates calciques et ferromagnésiens (essentiellement hornblende, mais aussi feldspath plagioclase) et de minéraux annexes (pyroxène, micas). Elle est utilisée comme roche ornementale et de construction et comme granulat."
-  },
-  {
-    "id": "anda",
-    "nom": "andalousite / sillimanite / kyanite - (cyanite - disthène)",
-    "gerep": 2002,
-    "description": "Minéral - Silicate d'alumine (SiAl2O5). L'andalousite, la silimanite et la Kyanite (Cyanite ou Disthème) ont la même composition chimique mais avec une structure cristalline et des propriétés physico-minéraloriques différentes (triclinique) autrement dit une variété allotropique (même formule chimique mais système cristallin différent). En France, on ne connait pas de gisement de Kyanite à ce jour. L'andalousite et la silimanite y sont exploitées et sont utilisées dans l'industrie. L'andalousite est utilisée pour ses propriétés réfractaires et son excellente résistance aux chocs thermiques. La silimanite, utilisée pour le même usage réfractaire, a toutefois des propriétés physico-minéraloriques sensiblement différentes de l'andalousite."
-  },
-  {
-    "id": "ande",
-    "nom": "andésite",
-    "gerep": 1301,
-    "description": "Roche volcanique de couleur gris-clair constituée de cristaux de silicates (plagioclases, biotite, hornblende, pyroxène) dans une matrice vitreuse, avec une bonne homogénéité texturale. Elle présente une bonne résistance mécanique et à l'abrasion."
-  },
-  {
-    "id": "anhy",
-    "nom": "anhydrite",
-    "gerep": 2003,
-    "description": "Forme anhydre (CaSO4) du sulfate de calcium hydraté (gypse), utilisée comme charge dans l'industrie des peintures, plastiques et comme régulateur de prise dans les ciments, plus rarement comme amendement."
-  },
-  {
-    "id": "anti",
-    "nom": "antimoine",
-    "symbole": "Sb"
-  },
-  {
-    "id": "ardo",
-    "nom": "ardoises",
-    "gerep": 1402,
-    "description": "Roche schistosée, à l'origine une argile, ayant subi un faible métamorphisme. Variétés gris-bleuté à noire dont la texture (à grains très fin et homogène) et la fissillité (débit en plaques fines) sont mis à profit pour la fabrication d'éléments de toiture, de parement et de dallage pour les variétés plus gréseuses (autres utilisations possibles: additifs pour la fabrication du clinker et des ciments)."
-  },
-  {
-    "id": "argc",
-    "nom": "argiles communes",
-    "gerep": 1101,
-    "description": "Roche sédimentaire tendre à grain très fin, constituée de minéraux argileux à dominante de smectites-illites, ainsi que d'autres minéraux (quartz, oxydes...) de couleur gris-foncé, brune, jaune-oranger ou rougeâtre. Elles forment une pâte en présence d'eau et durcissent à la cuisson (terres-cuites). peuvent être utilisées (10 à 20%) dans la fabrication du clinker, constituant de base de tous les ciments."
-  },
-  {
-    "id": "arge",
-    "nom": "argent",
-    "symbole": "Ag"
-  },
-  {
-    "id": "argf",
-    "nom": "argiles fibreuses (attapulgites ou palygorskites, sépiolites)",
-    "gerep": 1103,
-    "description": "Roches sédimentaires tendre à grains fins, constituées majoritairement d'argiles alumino-magnésiennes (fibres de 1 à 3 µm de long et de 100 à 300 Angstroms de large. La différence entre la largeur des fibres permet de différentier les sépiolites des attapulgites). L'existence de micropores entre les fibres, confèrent à ces argiles une grande capacité d'absorption."
-  },
-  {
-    "id": "argk",
-    "nom": "argiles kaoliniques",
-    "gerep": 1102,
-    "description": "Roche sédimentaire tendre à grains très fins constituée principalement de kaolinite (minéral argileux blanc à crème) utilisée pour ses propriétés en céramiques communes (sanitaires) et pour matériaux réfractaires (fabrication de chamottes)."
-  },
-  {
-    "id": "args",
-    "nom": "argiles",
-    "gerep": 1104,
-    "description": "Roches sédimentaires peu consolidées formées de minéraux argileux comme la montmorillonite (silicate d'aluminium et de magnésium hydraté) et la beidellite (silicate naturel d'aluminium hydraté). Ces phyllosilicates ont des propriétés physico-chimiques (gonflement en présence d'eau, rhéologie, adsorption, échanges cationiques...) avec de nombreuses applications dans les secteurs industriels (chimie, métallurgie, environnement, produit de collage en œnologie pour l'élimination des protéines des vins blancs et rosés. Synonyme : bentonite, \"terre à foulon\"."
-  },
-  {
-    "id": "arse",
-    "nom": "arsenic",
-    "symbole": "As"
-  },
-  {
-    "id": "asta",
-    "nom": "astate",
-    "symbole": "At"
-  },
-  {
-    "id": "auru",
-    "nom": "or",
-    "symbole": "Au"
-  },
-  {
-    "id": "bary",
-    "nom": "barytine",
-    "gerep": 2004,
-    "description": "Minéral - Sulfate de baryum (BaSO4) présentant une forte densité (4,5) et une bonne inertie chimique utilisé comme charge minérale dans les boues de forage, les bétons spéciaux des installations nucléaires (radioprotection) et certaines peintures industrielles."
-  },
-  {
-    "id": "basa",
-    "nom": "basalte",
-    "gerep": 1302,
-    "description": "Roche volcanique dure et massive de couleur gris-foncé à noire, constituée de fin cristaux (pyroxène et olivine) dans une masse vitreuse. Excellentes propriétés mécaniques (dureté), utilisation en tant que granulats et roche ornementale et de construction."
-  },
-  {
-    "id": "bery",
-    "nom": "béryllium",
-    "symbole": "Be"
-  },
-  {
-    "id": "bism",
-    "nom": "bismuth",
-    "symbole": "Bi"
-  },
-  {
-    "id": "bitm",
-    "nom": "calcaires bitumineux",
-    "description": "Bitumes à usages non énergétiques"
-  },
-  {
-    "id": "bitu",
-    "nom": "bitume"
-  },
-  {
-    "id": "buta",
-    "nom": "butane"
-  },
-  {
-    "id": "caci",
-    "nom": "calcaires cimentiers",
-    "gerep": 1105
-  },
-  {
-    "id": "cadm",
-    "nom": "cadmium",
-    "symbole": "Cd"
-  },
-  {
-    "id": "calc",
-    "nom": "calcaires",
-    "gerep": 1105,
-    "description": "Roche sédimentaire (couleur blanc-beige-gris) principalement constituée de calcite (carbonate de calcium (CaCO3) faisant effervescence à l'acide). Caractéristiques pétrophysiques et géomécaniques très hétérogènes en fonction de la cristallinité, porosité, teneur en autres constituants (argiles, quartz...). Pour les variétés de haute pureté et blancheur, utilisations comme charges minérales. Autres utilisations : sidérurgie, verrerie, amendements, principale matière première pour la fabrication du clinker et de la chaux. Elle est également très employée en tant pierre ornementale et de construction et pour les granulats."
-  },
-  {
-    "id": "cals",
-    "nom": "calcschiste",
-    "gerep": 1403,
-    "description": "Roche métamorphique, d'aspect rubané, provenant de formations argileuses plus ou moins carbonatées comme les marnes et calcaires marneux. Peut être utilisée comme matière première en remplacement du calcaire et/ou des marnes dans la fabrication du clinker, le constituant de base des ciments."
-  },
-  {
-    "id": "cend",
-    "nom": "cendres volcaniques riches en silice",
-    "gerep": 1303,
-    "description": "Roche volcanique formée de fragments généralement à grains fins, peu indurée (pulvérulente) ou indurée. Elle est utilisée en tant que granulats ou comme roches ornementales et de construction."
-  },
-  {
-    "id": "ceri",
-    "nom": "cérium",
-    "symbole": "Ce"
-  },
-  {
-    "id": "cesi",
-    "nom": "césium",
-    "symbole": "Cs"
-  },
-  {
-    "id": "cfan",
-    "nom": "anthracite"
-  },
-  {
-    "id": "cfch",
-    "nom": "charbon"
-  },
-  {
-    "id": "cfho",
-    "nom": "houille"
-  },
-  {
-    "id": "cfli",
-    "nom": "lignite"
-  },
-  {
-    "id": "cfxx",
-    "nom": "combustibles fossiles"
-  },
-  {
-    "id": "chro",
-    "nom": "chrome",
-    "symbole": "Cr"
-  },
-  {
-    "id": "coba",
-    "nom": "cobalt",
-    "symbole": "Co"
-  },
-  {
-    "id": "coox",
-    "nom": "gaz carbonique",
-    "symbole": "CO2"
-  },
-  {
-    "id": "corn",
-    "nom": "cornéenne",
-    "gerep": 1404,
-    "description": "Roche métamorphique cristalline plus ou moins orientée, habituellement très dure produite sous l'action de la chaleur d'un magma en fusion (métamorphisme de contact). Les grains sont d'une grosseur homogène et ne suivent pas une orientation préférentielle. Leur composition minéralogique varie selon le degré de métamorphisme et la nature des roches initiales. Elles présentent en général de bonnes résistances au choc et à l'abrasion."
-  },
-  {
-    "id": "crai",
-    "nom": "craie",
-    "gerep": 1106,
-    "description": "Roche sédimentaire fine, tendre, friable, de couleur blanche, composée de calcite(CaCO3) d'origine fossilifère. En amendement, est utilisée sous forme pulvérisée, broyée, concassée ou brute pour corriger les sols acides. En liant hydraulique, elle est utilisée dans des proportions de 80 à 90% dans la fabrication du clinker, le constituant de base du ciment mais sert également à la fabrication de chaux et de mortier. Pour les minéraux industriels, la pureté et la blancheur autorisent une utilisation comme charge minérale."
-  },
-  {
-    "id": "cuiv",
-    "nom": "cuivre",
-    "symbole": "Cu"
-  },
-  {
-    "id": "daci",
-    "nom": "dacite",
-    "gerep": 1304,
-    "description": "Roche volcanique de couleur gris-clair constituée de fins cristaux de quartz, plagioclase et silicates ferro-magnésiens baignant dans un verre. Elle est utilisée comme roche ornementale ou de construction et comme granulat."
-  },
-  {
-    "id": "diab",
-    "nom": "diabase",
-    "gerep": 1405,
-    "description": "Roche métamorphique dure, d'origine volcanique à grain fin de couleur sombre (issue de dolérite). Elle est utilisé comme granulat."
-  },
-  {
-    "id": "diam",
-    "nom": "diamant"
-  },
-  {
-    "id": "diat",
-    "nom": "diatomites",
-    "gerep": 1108,
-    "description": "Roche sédimentaire tendre et légère formée par accumulation de carapaces siliceuses de micro-organismes en milieux lacustes ou marins. Utilisations industrielles : filtration de liquides alimentaires, charge minérale, absorbant de pollutions. En liant hydraulique, elle peut être utilisée comme additifs pour la fabrication de certains ciments."
-  },
-  {
-    "id": "dior",
-    "nom": "diorites",
-    "gerep": 1201,
-    "description": "Roche plutonique cristalline à texture grenue et homogène, constituée de feldspaths blanchâtres et de silicates ferro-magnésiens colorés (amphiboles, biotite...). En roche ornemental et de construction, elle est sélectionnée pour son aspect décoratif. En granulat, cette roche présente de bonnes caractéristiques mécaniques."
-  },
-  {
-    "id": "dole",
-    "nom": "dolérite",
-    "gerep": 1305,
-    "description": "Roche volcanique massive, compacte, de couleur sombre (grise à noire), composée de fins cristaux de feldspaths calciques, de pyroxène et parfois d'oxydes de fer. Elle est utilisée en tant que granulats ou en roche ornementale et de construction. On la trouve en association possible des dolérites altérées (diabases issues du métamorphisme des dolérites)."
-  },
-  {
-    "id": "dolo",
-    "nom": "dolomie",
-    "gerep": 1109,
-    "description": "Roche sédimentaire constituée principalement de dolomite (carbonate double de calcium et de magnésium). Utilisée comme charge minérale dans de nombreuses applications : peintures et enduits, élastomères, papiers et revêtements de sol ou dans l'industrie du verre. Au regard de ses propriétés chimiques, est utilisée comme amendement sous forme pulvérisée, broyée, pour corriger le pH des sols acides."
-  },
-  {
-    "id": "dysp",
-    "nom": "dysprosium",
-    "symbole": "Dy"
-  },
-  {
-    "id": "erbi",
-    "nom": "erbium",
-    "symbole": "Er"
-  },
-  {
-    "id": "etai",
-    "nom": "étain",
-    "symbole": "Sn"
-  },
-  {
-    "id": "ethy",
-    "nom": "éthylène"
-  },
-  {
-    "id": "euro",
-    "nom": "europium",
-    "symbole": "Eu"
-  },
-  {
-    "id": "falu",
-    "nom": "faluns",
-    "gerep": 1129,
-    "description": "Roche sédimentaire meuble d'origine détritique riche en débris de coquilles d'animaux marins. Facilement délitable et transformée en sable, elle est utilisée en tant qu'amendement agricole en substitution de carbonate de calcium ou de calcite. Par le passé, cette roche a été utilisée comme sarcophage pour conserver les corps au regard de sa porosité qui permet d'éviter la putréfaction des chairs et d'absorber les exudats."
-  },
-  {
-    "id": "feld",
-    "nom": "feldspaths",
-    "gerep": 2007,
-    "description": "Minéral - Principal constituant de nombreuses roches magmatiques dont la composition varie entre des pôles potassique (KAlSi3O8), sodique (NaAlSi3O8) et calcique (CaAl2Si2O8), utilisé en céramique et dans la verrerie."
-  },
-  {
-    "id": "ferx",
-    "nom": "fer",
-    "symbole": "Fe"
-  },
-  {
-    "id": "fluo",
-    "nom": "fluorine",
-    "symbole": "F"
-  },
-  {
-    "id": "gabb",
-    "nom": "gabbro",
-    "gerep": 1202,
-    "description": "Roche plutonique grenue de couleur sombre, contenant des feldspaths calciques et du pyroxène (olivine, biotite et hornblende associés). Cette roche présente généralement de bonnes caractéristiques mécaniques qui la rendent utilisable comme roche ornementale et de construction et comme granulat."
-  },
-  {
-    "id": "gado",
-    "nom": "gadolinium",
-    "symbole": "Gd"
-  },
-  {
-    "id": "gall",
-    "nom": "gallium",
-    "symbole": "Ga"
-  },
-  {
-    "id": "galt",
-    "nom": "galets",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "gazn",
-    "nom": "gaz naturel"
-  },
-  {
-    "id": "geob",
-    "nom": "gîtes géothermiques basse température"
-  },
-  {
-    "id": "geoh",
-    "nom": "gîtes géothermiques haute température"
-  },
-  {
-    "id": "geom",
-    "nom": "activités géothermiques de minime importance"
-  },
-  {
-    "id": "germ",
-    "nom": "germanium",
-    "symbole": "Ge"
-  },
-  {
-    "id": "glac",
-    "nom": "dépôt glaciaire",
-    "gerep": 1107,
-    "description": "Mélange de roches sédimentaires détritiques hétérogènes d'origine glaciaire constituées de fragments hétérométriques, unis par un ciment naturel (moraines et tillites). Les moraines se présentent sous forme de blocs, de cailloux de sables et d'argiles. Elles peuvent être valorisées comme granulat. Les tillites sont des conglomérats à éléments arrondis et anguleux, suffisamment indurées (dures) pour être valorisées également comme granulat ou comme roche ornementale et de construction."
-  },
-  {
-    "id": "gnei",
-    "nom": "gneiss",
-    "gerep": 1406,
-    "description": "Roche métamorphique cristalline à faciès rubanné ou lenticulaire (alternance de lits clairs quartzo-feldspathiques et de lits sombres à micas, amphiboles et pyroxènes). Utilisée en tant que granulats pour ses propriétés mécaniques ou en tant que roche ornementale et de construction pour son aspect décoratif."
-  },
-  {
-    "id": "grai",
-    "nom": "granite et granulite",
-    "gerep": 1203,
-    "description": "Roche plutonique cristalline à texture grenue de couleur claire (gris, rose ou jaune) composée de quartz, feldspaths et micas, sélectionnée pour son aspect décoratif. Pour les roches ornementales et de construction, une définition \"commerciale\" existe également et est différente de celle-ci dite \"acceptation scientifique\" (cf. point 2.1.156 NF EN 12670 : 2001 page 16). Pour les granulats, cette roche présente de bonnes caractéristiques de rugosité. Pour les minéraux industriels, cette roche rendue friable par l'altération (arénisation) facilite l'extraction de tout ou partie de ses constituants (quartz, feldspaths et micas). Nota : Le terme GRANULITE était utilisé autrefois pour désigner des granites de couleur claire à 2 micas (noir et blanc). qui sont valorisées pour leur aspect esthétique dans le domaine des roches ornementales et de construction."
-  },
-  {
-    "id": "grao",
-    "nom": "granodiorite",
-    "gerep": 1204,
-    "description": "Roche plutonique grenue dont la composition est intermédiaire entre le granite et la diorite. Elle est principalement constituée de quartz (> 10 %) et de feldspaths de couleur claire. Les minéraux secondaires sont la biotite (grains sombres vert, brun ou noir), l'amphibole et le pyroxène. La Pierre de Rosette qui permit de percer le mystère des hiéroglyphes est en granodiorite."
-  },
-  {
-    "id": "grap",
-    "nom": "graphite"
-  },
-  {
-    "id": "gref",
-    "nom": "grès silico-ferrugineux",
-    "gerep": 1111,
-    "description": "Roche sédimentaire de couleur brun-orangé constituée d'un mélange de silice et d'oxydes et hydroxydes de fer, utilisée en tant que minéraux industriels, comme agent colorant en céramique."
-  },
-  {
-    "id": "gres",
-    "nom": "grès",
-    "gerep": 1110,
-    "description": "Roche sédimentaire plus ou moins indurée et stratifiée, composée de grains de quartz d'origine détritique (d'une taille comprise entre 63 µm et 2 mm) soudés par un ciment interstitiel de nature variable (calcite, oxydes de fer, silice, minéraux argileux). Dans le domaine des granulats et des roches ornementales et de construction, les propriétés mécaniques et l'aspect esthétique sont valorisés. Dans le domaine des minéraux industriels, elle est utilisée comme source de silice pour la production de ferro-silicium."
-  },
-  {
-    "id": "grma",
-    "nom": "granulats marins"
-  },
-  {
-    "id": "grsi",
-    "nom": "graviers siliceux",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "gyps",
-    "nom": "gypse",
-    "gerep": 2008,
-    "description": "Minéral - Sulfate de calcium hydraté (CaSO4,2H2O). Dans le domaine des liants hydrauliques, ce minéral est utilisé pour la fabrication du plâtre et comme régulateur de prise dans les ciments. Dans le domaine des minéraux industriel, sa pureté chimique et ses caractéristiques physiques comme la blancheur lui permettent d'être utilisé comme charge minérale. Dans le domaine de l'amendement, sa propriété chimique (base) est utilisée pour corriger les sols acides."
-  },
-  {
-    "id": "hafn",
-    "nom": "hafnium",
-    "symbole": "Hf"
-  },
-  {
-    "id": "heli",
-    "nom": "hélium",
-    "symbole": "He"
-  },
-  {
-    "id": "holm",
-    "nom": "holmium",
-    "symbole": "Ho"
-  },
-  {
-    "id": "hyda",
-    "nom": "asphalte"
-  },
-  {
-    "id": "hydc",
-    "nom": "hydrocarbures conventionnels liquides ou gazeux"
-  },
-  {
-    "id": "hydg",
-    "nom": "gaz combustible"
-  },
-  {
-    "id": "hydl",
-    "nom": "hydrocarbures liquides"
-  },
-  {
-    "id": "hydo",
-    "nom": "hydrocarbures liquides"
-  },
-  {
-    "id": "hydr",
-    "nom": "hydrocarbures"
-  },
-  {
-    "id": "hydx",
-    "nom": "hydrocarbures liquides ou gazeux"
-  },
-  {
-    "id": "indi",
-    "nom": "indium",
-    "symbole": "In"
-  },
-  {
-    "id": "irid",
-    "nom": "iridium",
-    "symbole": "Ir"
-  },
-  {
-    "id": "kals",
-    "nom": "alun"
-  },
-  {
-    "id": "kaol",
-    "nom": "kaolin",
-    "gerep": 2009,
-    "description": "Minéral - Extrait de roches granitiques ou sédimentaires composées principalement de kaolinite (silicate d'alumine hydraté Al2Si2O5(OH)4). Le kaolin est utilisé pour sa grande pureté et sa blancheur en céramique (porcelaine) ou comme charges minérales (papier, peinture, etc.). Il peut être également utilisé comme matière première en remplacement de l'argile dans la fabrication de certains clinkers pour ciments blancs (Portland)."
-  },
-  {
-    "id": "kclx",
-    "nom": "sels de potassium",
-    "symbole": "K"
-  },
-  {
-    "id": "lant",
-    "nom": "lanthane",
-    "symbole": "La"
-  },
-  {
-    "id": "lept",
-    "nom": "leptynite",
-    "gerep": 1407,
-    "description": "Roche métamorphique cristallisée et orientée de couleur claire composée de quartz, feldspath et micas en faible quantité présentant une bonne résistance mécanique."
-  },
-  {
-    "id": "lith",
-    "nom": "lithium",
-    "symbole": "Li"
-  },
-  {
-    "id": "lute",
-    "nom": "lutécium",
-    "symbole": "Lu"
-  },
-  {
-    "id": "maer",
-    "nom": "maërl",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "mais",
-    "nom": "minerais"
-  },
-  {
-    "id": "mang",
-    "nom": "manganèse",
-    "symbole": "Mn"
-  },
-  {
-    "id": "marb",
-    "nom": "marbres",
-    "gerep": 1408,
-    "description": "Roche métamorphique cristalline plus ou moins rubanée, contenant plus de 50 % de carbonates (calcite et plus rarement dolomite) dans laquelle les minéraux ont totalement recristallisé avec des traces d'oxydes métalliques ou d'impuretés lui donnant une grande variété de couleurs. Le métamorphisme de cette roche lui confère une plus grande dureté. Dans le domaine des roches ornementales, elle est sélectionnée pour son aspect décoratif, la recristallisation de ses composants favorise son polissage. Une définition \"commerciale\" existe également et est différente de celle-ci dite \"acceptation scientifique\" (cf. point 2.1.243 NF EN 12670 : 2001 page 22). Dans le domaine des granulats, elle est sélectionnée pour ses propriétés mécaniques (dureté, résistance aux chocs). Dans le domaine des liants hydrauliques, elle peut être utilisée comme matière première en remplacement du calcaire dans la fabrication du clinker, le constituant de base des ciments. Dans le domaine de l'amendement les composants calciques ou magnésiens sont particulièrement utiles pour la correction de pH des milieux acides. Dans le domaine des minéraux industriels, elle est utilisée, après calcination en carbonate de calcium, comme: - charge minérale dans de nombreuses applications industrielles (papier, peinture, plastiques, élastomères) - ou transformée en chaux pour la correction de pH des milieux acides."
-  },
-  {
-    "id": "marn",
-    "nom": "marnes",
-    "gerep": 1112,
-    "description": "Roche sédimentaire plus ou moins indurée (dure) et stratifiée (couches successives de sédiments) composée d'un mélange de carbonate de calcium (CaCO3) et d'argiles de différentes natures (de 35% à 65%). Usages : Dans le domaine des granulats, l'emploi de cette roche est exceptionnel bien que présent dans les couches de découverte et que ces caractéristiques mécaniques soient compatibles avec cet usage. Si elle est utilisée comme granulat, c'est principalement sous forme de remblai et encore plus exceptionnellement en granulat pour béton. Dans le domaine de l'agriculture, cette roche est employée comme amendement du fait du mélange carbonate de calcium et argile qu'elle contient. Dans le domaine des liants hydrauliques, cette roche est souvent utilisée comme matière première en remplacement du calcaire et/ou de l'argile dans la fabrication du clinker, le constituant de base des ciments. Dans le domaine des minéraux industriels, elle est exploitée en fonction de sa richesse en calcite afin de constituer des charges minérales. Nota: Les marnes ont une composition chimique intermédiaire entre les calcaires marneux (5 à 35% d'argiles) et les argiles calcareuses ou marnes argileuses (65 à 95% d'argiles)."
-  },
-  {
-    "id": "meba",
-    "nom": "métaux de base"
-  },
-  {
-    "id": "meco",
-    "nom": "métaux connexes"
-  },
-  {
-    "id": "mepr",
-    "nom": "métaux précieux"
-  },
-  {
-    "id": "merc",
-    "nom": "mercure",
-    "symbole": "Hg"
-  },
-  {
-    "id": "mica",
-    "nom": "micas",
-    "gerep": 2011,
-    "description": "Minéral - Silicates en feuillets riches en aluminium et potassium (micas blancs) ou en magnésium et fer (micas noirs) dont les propriétés physico-minéralogiques trouvent de nombreuses applications dans les domaines de l'isolation et des charges minérales."
-  },
-  {
-    "id": "mics",
-    "nom": "micaschistes",
-    "gerep": 1409,
-    "description": "Roche métamorphique cristallisée et schisteuse caractérisée par l'abondance de la fraction micacée et une plus faible teneur en quartz. Dans le domaine des roches ornementales et de construction, les proportions de quartz et de micas déterminent les propriétés de la roche comme la fissilité pour la production de dallage ou de couverture. Sa richesse en mica confère un aspect brillant à sa surface. Dans le domaine des minéraux industriel, cette roche est valorisée dans des applications de type charge minérale."
-  },
-  {
-    "id": "migm",
-    "nom": "migmatite",
-    "gerep": 1410,
-    "description": "Roche métamorphique formée d'une alternance de roches de type granite de couleur sombre et de roche de type gneiss de couleur clair. La partie de couleur claire est assimilé à la partie de la roche ayant fondu et est appelée \"le mobilisat\". La partie de couleur sombre constitue la partie de la roche étant restée solide et est appelée \"la restite\". Ses bonnes propriétés mécaniques, permettent de l'utiliser comme roche ornementale et de construction ou comme granulat."
-  },
-  {
-    "id": "moly",
-    "nom": "molybdène",
-    "symbole": "Mo"
-  },
-  {
-    "id": "mylo",
-    "nom": "mylonites",
-    "gerep": 1501,
-    "description": "Roche autre cataclastique résultant du cisaillement et du broyage puis de la recristallisation plus ou moins intense de roches préexistantes de différentes natures (éventuellement recristallisées) dans une zone de formation intense de failles. Elle est constituée d'une hétérogénéité de roches."
-  },
-  {
-    "id": "nacl",
-    "nom": "sels de sodium",
-    "symbole": "Na"
-  },
-  {
-    "id": "neod",
-    "nom": "néodyme",
-    "symbole": "Nd"
-  },
-  {
-    "id": "nick",
-    "nom": "nickel",
-    "symbole": "Ni"
-  },
-  {
-    "id": "niob",
-    "nom": "niobium",
-    "symbole": "Nb"
-  },
-  {
-    "id": "ocre",
-    "nom": "ocres",
-    "gerep": 1113,
-    "description": "Mélange sédimentaire naturel de kaolinite (argile), d'oxyde de fer rouge (hématite) et d'hydroxyde de fer jaune-oranger (limonite) utilisé pour la production de pigments naturels dans les peintures et les enduits."
-  },
-  {
-    "id": "oooo",
-    "nom": "non précisée(s)"
-  },
-  {
-    "id": "ophi",
-    "nom": "ophite",
-    "gerep": 1205,
-    "description": "Roche plutonique intermédiaire entre basalte et gabbro présentant un faciès plus ou moins altéré de couleur vert-foncé. En tant que roche ornementale et de construction elle est sélectionnée pour son aspect décoratif. Son emploi en tant que granulats est dû à sa dureté et à sa compacité."
-  },
-  {
-    "id": "osmi",
-    "nom": "osmium",
-    "symbole": "Os"
-  },
-  {
-    "id": "pall",
-    "nom": "palladium",
-    "symbole": "Pd"
-  },
-  {
-    "id": "perl",
-    "nom": "perlite",
-    "gerep": 1306,
-    "description": "Roche volcanique de couleur claire à texture vitreuse plus ou moins hydratée et composition rhyolitique utilisée dans l'industrie pour la production d'agents filtrants et d'additifs fonctionnels. Elle est utilisée dans l'industrie pour la production d'agents filtrants et d'additifs fonctionnels."
-  },
-  {
-    "id": "phon",
-    "nom": "phonolite",
-    "gerep": 1307,
-    "description": "Roche volcanique à grain très fin, de couleur grise tirant parfois sur le vert ou le brun, qui se débite en plaques et qui, sous le choc du métal, rend un son clair (dalles sonores). Sa composition chimique est déficitaire en silice (dite sous-saturées en silice). Le silicium y représente donc moins de la moitié des cations. Ces caractéristiques mécaniques (dureté) permettent son utilisation en tant que granulat. En tant que roche ornementale et de construction, elle est utilisée comme pierre ardoisière en Auvergne. En tant que minéraux industriels, sa composition chimique sous-saturée en silice est recherchée pour les industries du verre et de la céramique."
-  },
-  {
-    "id": "phos",
-    "nom": "phosphates",
-    "symbole": "P"
-  },
-  {
-    "id": "pipe",
-    "nom": "pierres précieuses"
-  },
-  {
-    "id": "plat",
-    "nom": "platine",
-    "symbole": "Pt"
-  },
-  {
-    "id": "plax",
-    "nom": "métaux de la mine du platine"
-  },
-  {
-    "id": "plom",
-    "nom": "plomb",
-    "symbole": "Pb"
-  },
-  {
-    "id": "polo",
-    "nom": "polonium",
-    "symbole": "Po"
-  },
-  {
-    "id": "porp",
-    "nom": "porphyre",
-    "gerep": 1206,
-    "description": "Roche plutonique caractérisée par une texture intermédiaire constituée de cristaux de feldpaths baignant dans une matrice finement cristallisée. Dans le domaine des roches ornementales et de construction, la couleur variable de cette roche est utilisée pour son aspect décoratif. Dans le domaine des minéraux industriels, cette roche est employée pour ces propriétés mécaniques (dureté, résistance aux chocs et à l'abrasion)."
-  },
-  {
-    "id": "pouz",
-    "nom": "pouzzolane",
-    "gerep": 1308,
-    "description": "Roche volcanique scoriacée à texture bulleuse de couleur noire ou rouge brique. Elle est donc assez rarement exploitée en roche de construction sauf dans la région de Clermont-Ferrand et sur l'île de la Réunion. Elle permet la fabrication de moellons utilisés dans le bâtiment compte tenu de leurs propriétés (isolation thermique et phonique) (voir la fiche pouzzolane de Ph. Rocher). L'exploitation en roche ornementale est marginale et est destinée la construction de rocaille décorative dans les jardins d'agrément. En tant que granulats, elle est utilisée comme agent de sablage ou comme agrégat pour la réalisation de massifs drainants. Sa texture bulleuse peu résistante mécaniquement en fait tout de même un granulat léger notamment dans les bétons spéciaux. Dans le domaine des liants hydrauliques, elle peut être utilisée comme additifs pour la fabrication de certains ciments. Dans le domaine des minéraux industriels, elle est utilisée pour ses propriétés d'isolation phonique et thermique."
-  },
-  {
-    "id": "pras",
-    "nom": "praséodyme",
-    "symbole": "Pr"
-  },
-  {
-    "id": "prom",
-    "nom": "prométhium",
-    "symbole": "Pm"
-  },
-  {
-    "id": "prot",
-    "nom": "protactinium",
-    "symbole": "Pa"
-  },
-  {
-    "id": "prpa",
-    "nom": "propane"
-  },
-  {
-    "id": "prpy",
-    "nom": "propylène"
-  },
-  {
-    "id": "pyri",
-    "nom": "pyrite"
-  },
-  {
-    "id": "quar",
-    "nom": "quartz",
-    "gerep": 2012,
-    "description": "Minéral - Oxyde de silicium (SiO2) Dans le domaine des granulats, sans grand degré de pureté le quartz est valorisé pour ses caractéristiques mécaniques et certains aspects décoratifs. Dans le domaine des minéraux industriels, sa pureté en SiO2 est recherchée pour sa résistance à l'abrasion dans les revêtements de sols ou comme agent de décapage. Elle constitue une source de silicium pour des applications verre et céramique lorsqu'il présente un très haut degré de pureté."
-  },
-  {
-    "id": "quat",
-    "nom": "quartzites",
-    "gerep": 1411,
-    "description": "Roche métamorphique massive composée principalement de quartz issue de la recristallisation et de la cimentation du quartz. Les caractéristiques mécaniques sont favorables à la production de granulats de haute qualité (forte résistance à l'abrasion) ou à une utilisation comme roche ornementale et de construction. Le tombeau de Napoléon, aux Invalides, est réalisé dans un bloc de quartzite. Dans le domaine des minéraux industriels, sa pureté est recherchée pour être utilisée comme matériaux réfractaires."
-  },
-  {
-    "id": "radi",
-    "nom": "radium",
-    "symbole": "Ra"
-  },
-  {
-    "id": "rado",
-    "nom": "radon",
-    "symbole": "Rn"
-  },
-  {
-    "id": "rard",
-    "nom": "roches ardoisières",
-    "gerep": 1412,
-    "description": "Roche métamorphique qui est à l'origine de l'argile ayant subi un faible métamorphisme et qui est devenue schisteuse. Ces roches ardoisières ont un plan de schistocité épais et peuvent avoir une fraction gréseuse. Elle comprend notamment les lauzes qui sont utilisées comme pierres de construction (dallage ou toiture)."
-  },
-  {
-    "id": "rdet",
-    "nom": "roches détritiques grossières",
-    "gerep": 1114,
-    "description": "Famille de roches sédimentaire détritiques (issues de la dégradation mécanique d'autres roches) constituées d'éléments grossiers (galets) arrondis (qui traduisent un transport long avant sédimentation) cimentés par des éléments plus fins de type sables et graviers. Devenues suffisamment dures (indurées) ces roches sont utilisées pour la production de granulats. En tant que roches ornementales et de construction, elles présentent des caractéristiques mécaniques et esthétiques valorisables en décoration. Cette famille regroupe les roches suivantes : les arkoses, les brèches, les conglomérats et les poudingues. Ces dernières sont celles qui sont le plus souvent utilisées comme roches ornementales."
-  },
-  {
-    "id": "rhen",
-    "nom": "rhénium",
-    "symbole": "Re"
-  },
-  {
-    "id": "rhod",
-    "nom": "rhodium",
-    "symbole": "Rh"
-  },
-  {
-    "id": "rhyo",
-    "nom": "rhyolite",
-    "gerep": 1309,
-    "description": "Roche volcanique effusive riche en silice de couleur claire constituée de fins cristaux de feldspaths dispersés dans une matrice vitreuse valorisée pour ses propriétés mécaniques et son aspect esthétique soit en tant que roche ornementale et de construction ou en tant que granulats."
-  },
-  {
-    "id": "rubi",
-    "nom": "rubidium",
-    "symbole": "Rb"
-  },
-  {
-    "id": "ruth",
-    "nom": "ruthénium",
-    "symbole": "Ru"
-  },
-  {
-    "id": "rxxx",
-    "nom": "autres éléments radioactifs"
-  },
-  {
-    "id": "saco",
-    "nom": "sables coquilliers",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "sama",
-    "nom": "samarium",
-    "symbole": "Sm"
-  },
-  {
-    "id": "samg",
-    "nom": "sables moyens à grossiers",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "sasi",
-    "nom": "sables siliceux",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "scan",
-    "nom": "scandium",
-    "symbole": "Sc"
-  },
-  {
-    "id": "scbi",
-    "nom": "schistes bitumineux"
-  },
-  {
-    "id": "schi",
-    "nom": "schistes",
-    "gerep": 1413,
-    "description": "Roche métamorphique à grains très fins peu ou pas décelables à l'œil nu présentant un débit en feuillet dû à la schistosité et à la présence de minéraux plats (micas, hornblende...) orientés. Utilisée pour ses propriétés mécaniques, cette roche est particulièrement délitable et donne des granulats de forme assez plate. Son aspect décoratif est valorisé en tant que roche ornementale et de construction."
-  },
-  {
-    "id": "scor",
-    "nom": "substances connexes"
-  },
-  {
-    "id": "sele",
-    "nom": "sélénium",
-    "symbole": "Se"
-  },
-  {
-    "id": "selg",
-    "nom": "sel gemme"
-  },
-  {
-    "id": "selh",
-    "nom": "sources d'eau salée"
-  },
-  {
-    "id": "selp",
-    "nom": "puits d'eau salée"
-  },
-  {
-    "id": "sels",
-    "nom": "sels"
-  },
-  {
-    "id": "selx",
-    "nom": "sel"
-  },
-  {
-    "id": "serp",
-    "nom": "serpentinite",
-    "gerep": 1414,
-    "description": "Roche métamorphique de couleur jaunâtre à verdâtre (voire vert sombre) ou présentant des inclusions verdâtres (forme porphyrique) essentiellement constituée (plus de 75 %) d'antigorite (phyllosilicate magnésien). Cette roche provient de l'altération d'une péridotite en présence d'eau. Les serpentinites sont essentiellement exploitées aujourd'hui pour la production de granulats et plus rarement comme roches ornementales."
-  },
-  {
-    "id": "sexs",
-    "nom": "sable extra siliceux",
-    "gerep": 1120,
-    "description": "Roche sédimentaire meuble d'origine détritique presque exclusivement constituée de grains calibrés de quartz de très grande pureté (égale ou > 98% de silice), utilisée dans les industries du verre et de la céramique et comme additif fonctionnel."
-  },
-  {
-    "id": "sgin",
-    "nom": "sables et grès industriels",
-    "gerep": 1120
-  },
-  {
-    "id": "sgra",
-    "nom": "sables et graviers alluvionnaires",
-    "gerep": 1117,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme de sables, graviers et galets de nature variable extraits d'anciens lits de cours d'eau et utilisé comme granulat encore aujourd'hui principalement dans des bétons spéciaux ou pour des couches drainantes."
-  },
-  {
-    "id": "sgrm",
-    "nom": "sables et graviers marins",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "sgsc",
-    "nom": "sables et graviers silico-calcaires marins",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "sgsm",
-    "nom": "sables et graviers siliceux marins",
-    "gerep": 1118,
-    "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
-  },
-  {
-    "id": "silc",
-    "nom": "silice",
-    "gerep": 1120
-  },
-  {
-    "id": "sili",
-    "nom": "sillimanite",
-    "gerep": 2014,
-    "description": "Minéral - Silicate d'alumine (SiAl2O5) de même composition chimique que l'andalousite mais avec une structure cristalline et des propriétés physico-minéralogiques sensiblement différentes."
-  },
-  {
-    "id": "silx",
-    "nom": "silex / chert",
-    "gerep": 1121,
-    "description": "Roche sédimentaire d'origine détritique issue d'une précipitation chimique et constituée de silice calcédonieuse presque pure la rendant très dure et quelques impuretés telles que de l'eau ou des oxydes, ces derniers influant sur sa couleur. De part, la dureté de cette roche, elle est valorisée sous forme de granulat. Pour l'industrie, elle est utilisée, sous forme de galet plus ou moins arrondis dont les propriétés mécaniques permettent d'en faire des charges broyantes ou des produits abrasifs ou dont la grande pureté chimique permet de faire de la silice industrielle. [Définition de la norme européenne EN 932-3 : Roche sédimentaire composée de silice cryptocristalline ou microcristalline (cristaux indétectables à l'œil nu), se formant en général en couches ou en nodules dans le calcaire.] Préférer le terme SILEX au terme CHERT qui vaut dire la même chose. Le silex est un chert se formant dans la craie du Crétacé (cf. falaise d'Etretat)."
-  },
-  {
-    "id": "skst",
-    "nom": "stockage souterrain"
-  },
-  {
-    "id": "smil",
-    "nom": "sables a minéraux lourds",
-    "gerep": 1115,
-    "description": "Sables alluvionnaires ou de plage composés de minéraux lourds (rutile, zircon, barytine, grenat). L'accumulation des minéraux lourds se fait dans des placers dont l'origine est liée aux paramètres favorables de sédimentation. Ces minéraux peuvent être utilisés en industrie."
-  },
-  {
-    "id": "souf",
-    "nom": "soufre",
-    "symbole": "S"
-  },
-  {
-    "id": "soxx",
-    "nom": "sulfates autres que les sulfates alcalino-terreux"
-  },
-  {
-    "id": "sssc",
-    "nom": "sable siliceux ou silico-calcaire",
-    "gerep": 1119,
-    "description": "Roche sédimentaire meuble d'origine détritique pouvant soit être constituée majoritairement de grains de quartz (fort % de silice mais < à 98%) soit de calcaire et de silice (silico-calcaire). Ce sable est principalement utilisé comme produits de correction pour la fabrication du clinker, le constituant de base des ciments."
-  },
-  {
-    "id": "stex",
-    "nom": "stérile d'exploitation",
-    "gerep": 1502,
-    "description": "Roche d'origine diverse, caractérisée par des roches constituant des stériles d'ancienne exploitation (schiste, grès, carbonates ou roche grenue) dont les caractéristiques mécaniques et physiques permettent de les valoriser comme granulat."
-  },
-  {
-    "id": "suco",
-    "nom": "substances connexes"
-  },
-  {
-    "id": "syen",
-    "nom": "syénite",
-    "gerep": 1207,
-    "description": "Roche plutonique grenue de couleur rose à rouge, composée de feldspath alcalin (assez riche en silice). Elle se rapproche du granite et du gabbro mais ne contient pas de quartz. L'équivalent volcanique d'une syénite est un trachyte. Elle est utilisée en tant que granulats ou roche ornementale et de construction."
-  },
-  {
-    "id": "talc",
-    "nom": "talc",
-    "gerep": 2015,
-    "description": "Minéral - Silicate de magnésium hydraté (Mg3 Si4 O10 (OH)2) présentant une structure en feuillets dont les propriétés comme la dureté (1 de l'échelle de Mohs), hydrophobie, grande inertie chimique, blancheur en font un remarquable additif fonctionnel de nombreux domaines (peintures, plastiques, pharmacopée...)."
-  },
-  {
-    "id": "tant",
-    "nom": "tantale",
-    "symbole": "Ta"
-  },
-  {
-    "id": "tech",
-    "nom": "technétium",
-    "symbole": "Tc"
-  },
-  {
-    "id": "tell",
-    "nom": "tellure",
-    "symbole": "Te"
-  },
-  {
-    "id": "terb",
-    "nom": "terbium",
-    "symbole": "Tb"
-  },
-  {
-    "id": "terv",
-    "nom": "terre végétale",
-    "gerep": 1122,
-    "description": "Horizon sédimentaire humifère constitué suivant la profondeur de l'accumulation de matière organique associée à la croissance des végétaux et de l'altération du substratum rocheux sous-jacent."
-  },
-  {
-    "id": "thal",
-    "nom": "thallium",
-    "symbole": "Tl"
-  },
-  {
-    "id": "thor",
-    "nom": "thorium",
-    "symbole": "Th"
-  },
-  {
-    "id": "thul",
-    "nom": "thulium",
-    "symbole": "Tm"
-  },
-  {
-    "id": "tita",
-    "nom": "titane",
-    "symbole": "Ti"
-  },
-  {
-    "id": "tmas",
-    "nom": "tous métaux associés"
-  },
-  {
-    "id": "tour",
-    "nom": "tourbe",
-    "gerep": 1123,
-    "description": "Roche sédimentaire organique résultant de l'accumulation de la matière organique liée à la croissance des végétaux et de leur transformation sous certaines conditions. Elle est utilisée principalement comme amendement."
-  },
-  {
-    "id": "trac",
-    "nom": "trachyte",
-    "gerep": 1310,
-    "description": "Roche volcanique effusive de couleur gris-clair, à texture souvent poreuse constituée de fins cristaux (microlites) de feldspaths baignant dans une matrice vitreuse (du fait de sa teneur en silice assez élevée). Elle est utilisée pour ses bonnes caractéristiques mécaniques en tant que granulats et comme roches ornementales et de constructions (ex: lave de Volvic, lave de Chambois)."
-  },
-  {
-    "id": "trxx",
-    "nom": "autres éléments de terres rares"
-  },
-  {
-    "id": "tufo",
-    "nom": "tuffeau",
-    "gerep": 1124,
-    "description": "Roche sédimentaire blanchâtre peu stratifiée à texture crayeuse constituée de calcite, utilisée comme pierre de construction."
-  },
-  {
-    "id": "uran",
-    "nom": "uranium",
-    "symbole": "U"
-  },
-  {
-    "id": "vana",
-    "nom": "vanadium",
-    "symbole": "V"
-  },
-  {
-    "id": "wolf",
-    "nom": "tungstène",
-    "symbole": "W"
-  },
-  {
-    "id": "ytri",
-    "nom": "yttrium",
-    "symbole": "Y"
-  },
-  {
-    "id": "ytte",
-    "nom": "ytterbium",
-    "symbole": "Yb"
-  },
-  {
-    "id": "zinc",
-    "nom": "zinc",
-    "symbole": "Zn"
-  },
-  {
-    "id": "zirc",
-    "nom": "zirconium",
-    "symbole": "Zr"
-  }
-]
\ No newline at end of file
diff --git a/packages/api/src/api/graphql/resolvers.ts b/packages/api/src/api/graphql/resolvers.ts
index 2fb5d82b9f1005e34c2422ef6aee0c366b3d7b9f..31bcf1f969a0a630c7ae6a443674ed66fa8fc272 100644
--- a/packages/api/src/api/graphql/resolvers.ts
+++ b/packages/api/src/api/graphql/resolvers.ts
@@ -135,11 +135,7 @@ import {
   etapeTypeJustificatifTypeSupprimer
 } from './resolvers/metas-join'
 
-import {
-  substance,
-  substances,
-  substancesLegales
-} from './resolvers/substances'
+import { substances } from './resolvers/substances'
 
 import {
   entreprise,
@@ -208,9 +204,7 @@ export default {
   version,
   titre,
   titres,
-  substance,
   substances,
-  substancesLegales,
   moi,
   entreprise,
   entreprises,
diff --git a/packages/api/src/api/graphql/resolvers/__snapshots__/substances.test.integration.ts.snap b/packages/api/src/api/graphql/resolvers/__snapshots__/substances.test.integration.ts.snap
new file mode 100644
index 0000000000000000000000000000000000000000..0fe8698cc0fd0bccf982afceedc0cbf1de35d3ec
--- /dev/null
+++ b/packages/api/src/api/graphql/resolvers/__snapshots__/substances.test.integration.ts.snap
@@ -0,0 +1,998 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`substances peut voir toutes les substances 1`] = `
+Object {
+  "substances": Array [
+    Object {
+      "description": null,
+      "id": "cfxx",
+      "nom": "combustibles fossiles",
+    },
+    Object {
+      "description": null,
+      "id": "selh",
+      "nom": "sources d'eau salée",
+    },
+    Object {
+      "description": null,
+      "id": "aloh",
+      "nom": "bauxite",
+    },
+    Object {
+      "description": null,
+      "id": "anti",
+      "nom": "antimoine",
+    },
+    Object {
+      "description": null,
+      "id": "arge",
+      "nom": "argent",
+    },
+    Object {
+      "description": null,
+      "id": "arse",
+      "nom": "arsenic",
+    },
+    Object {
+      "description": null,
+      "id": "auru",
+      "nom": "or",
+    },
+    Object {
+      "description": null,
+      "id": "bery",
+      "nom": "béryllium",
+    },
+    Object {
+      "description": null,
+      "id": "bism",
+      "nom": "bismuth",
+    },
+    Object {
+      "description": null,
+      "id": "cadm",
+      "nom": "cadmium",
+    },
+    Object {
+      "description": null,
+      "id": "ceri",
+      "nom": "cérium",
+    },
+    Object {
+      "description": null,
+      "id": "cesi",
+      "nom": "césium",
+    },
+    Object {
+      "description": null,
+      "id": "chro",
+      "nom": "chrome",
+    },
+    Object {
+      "description": null,
+      "id": "coba",
+      "nom": "cobalt",
+    },
+    Object {
+      "description": "A l'exception du gaz naturellement contenu dans les eaux qui sont ou qui viendraient à être utilisées pour l'alimentation humaine ou à des fins thérapeutiques",
+      "id": "coox",
+      "nom": "gaz carbonique",
+    },
+    Object {
+      "description": null,
+      "id": "cuiv",
+      "nom": "cuivre",
+    },
+    Object {
+      "description": null,
+      "id": "diam",
+      "nom": "diamant",
+    },
+    Object {
+      "description": null,
+      "id": "etai",
+      "nom": "étain",
+    },
+    Object {
+      "description": null,
+      "id": "ferx",
+      "nom": "fer",
+    },
+    Object {
+      "description": null,
+      "id": "fluo",
+      "nom": "fluorine",
+    },
+    Object {
+      "description": null,
+      "id": "gall",
+      "nom": "gallium",
+    },
+    Object {
+      "description": null,
+      "id": "geob",
+      "nom": "gîtes géothermiques basse température",
+    },
+    Object {
+      "description": null,
+      "id": "geoh",
+      "nom": "gîtes géothermiques haute température",
+    },
+    Object {
+      "description": null,
+      "id": "geom",
+      "nom": "activités géothermiques de minime importance",
+    },
+    Object {
+      "description": null,
+      "id": "germ",
+      "nom": "germanium",
+    },
+    Object {
+      "description": null,
+      "id": "grap",
+      "nom": "graphite",
+    },
+    Object {
+      "description": null,
+      "id": "grma",
+      "nom": "granulats marins",
+    },
+    Object {
+      "description": null,
+      "id": "hafn",
+      "nom": "hafnium",
+    },
+    Object {
+      "description": null,
+      "id": "heli",
+      "nom": "hélium",
+    },
+    Object {
+      "description": null,
+      "id": "hydm",
+      "nom": "calcaires bitumineux",
+    },
+    Object {
+      "description": "A l'exeption de la tourbe",
+      "id": "hydx",
+      "nom": "hydrocarbures liquides ou gazeux",
+    },
+    Object {
+      "description": null,
+      "id": "indi",
+      "nom": "indium",
+    },
+    Object {
+      "description": null,
+      "id": "kals",
+      "nom": "alun",
+    },
+    Object {
+      "description": "A l'état solide ou en dissolution, à l'exception de ceux contenus dans les eaux salées utilisées à des fins thérapeutiques ou de loisirs",
+      "id": "kclx",
+      "nom": "sels de potassium",
+    },
+    Object {
+      "description": null,
+      "id": "lith",
+      "nom": "lithium",
+    },
+    Object {
+      "description": null,
+      "id": "mang",
+      "nom": "manganèse",
+    },
+    Object {
+      "description": null,
+      "id": "merc",
+      "nom": "mercure",
+    },
+    Object {
+      "description": null,
+      "id": "moly",
+      "nom": "molybdène",
+    },
+    Object {
+      "description": "A l'état solide ou en dissolution, à l'exception de ceux contenus dans les eaux salées utilisées à des fins thérapeutiques ou de loisirs",
+      "id": "nacl",
+      "nom": "sels de sodium",
+    },
+    Object {
+      "description": null,
+      "id": "nick",
+      "nom": "nickel",
+    },
+    Object {
+      "description": null,
+      "id": "niob",
+      "nom": "niobium",
+    },
+    Object {
+      "description": null,
+      "id": "oooo",
+      "nom": "non précisée(s)",
+    },
+    Object {
+      "description": null,
+      "id": "phos",
+      "nom": "phosphates",
+    },
+    Object {
+      "description": null,
+      "id": "plat",
+      "nom": "platine",
+    },
+    Object {
+      "description": null,
+      "id": "plax",
+      "nom": "métaux de la mine du platine",
+    },
+    Object {
+      "description": null,
+      "id": "plom",
+      "nom": "plomb",
+    },
+    Object {
+      "description": null,
+      "id": "radi",
+      "nom": "radium",
+    },
+    Object {
+      "description": null,
+      "id": "rhen",
+      "nom": "rhénium",
+    },
+    Object {
+      "description": null,
+      "id": "rubi",
+      "nom": "rubidium",
+    },
+    Object {
+      "description": null,
+      "id": "rxxx",
+      "nom": "autres éléments radioactifs",
+    },
+    Object {
+      "description": null,
+      "id": "scan",
+      "nom": "scandium",
+    },
+    Object {
+      "description": "Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes ».",
+      "id": "scoc",
+      "nom": "substances connexes",
+    },
+    Object {
+      "description": null,
+      "id": "sele",
+      "nom": "sélénium",
+    },
+    Object {
+      "description": null,
+      "id": "skst",
+      "nom": "stockage souterrain",
+    },
+    Object {
+      "description": null,
+      "id": "souf",
+      "nom": "soufre",
+    },
+    Object {
+      "description": null,
+      "id": "soxx",
+      "nom": "sulfates autres que les sulfates alcalino-terreux",
+    },
+    Object {
+      "description": null,
+      "id": "tant",
+      "nom": "tantale",
+    },
+    Object {
+      "description": null,
+      "id": "tell",
+      "nom": "tellure",
+    },
+    Object {
+      "description": null,
+      "id": "thal",
+      "nom": "thallium",
+    },
+    Object {
+      "description": null,
+      "id": "thor",
+      "nom": "thorium",
+    },
+    Object {
+      "description": null,
+      "id": "tita",
+      "nom": "titane",
+    },
+    Object {
+      "description": null,
+      "id": "trxx",
+      "nom": "autres éléments de terres rares",
+    },
+    Object {
+      "description": null,
+      "id": "uran",
+      "nom": "uranium",
+    },
+    Object {
+      "description": null,
+      "id": "vana",
+      "nom": "vanadium",
+    },
+    Object {
+      "description": null,
+      "id": "wolf",
+      "nom": "tungstène",
+    },
+    Object {
+      "description": null,
+      "id": "zinc",
+      "nom": "zinc",
+    },
+    Object {
+      "description": null,
+      "id": "zirc",
+      "nom": "zirconium",
+    },
+    Object {
+      "description": null,
+      "id": "acti",
+      "nom": "actinium",
+    },
+    Object {
+      "description": "Roche métamorphique présentant de bonnes caractéristiques géomécaniques, de couleur sombre (gris à vert foncé) riche en silicates calciques et ferromagnésiens (essentiellement hornblende, mais aussi feldspath plagioclase) et de minéraux annexes (pyroxène, micas). Elle est utilisée comme roche ornementale et de construction et comme granulat.",
+      "id": "amph",
+      "nom": "amphibolite",
+    },
+    Object {
+      "description": "Minéral - Silicate d'alumine (SiAl2O5). L'andalousite, la silimanite et la Kyanite (Cyanite ou Disthème) ont la même composition chimique mais avec une structure cristalline et des propriétés physico-minéraloriques différentes (triclinique) autrement dit une variété allotropique (même formule chimique mais système cristallin différent). En France, on ne connait pas de gisement de Kyanite à ce jour. L'andalousite et la silimanite y sont exploitées et sont utilisées dans l'industrie. L'andalousite est utilisée pour ses propriétés réfractaires et son excellente résistance aux chocs thermiques. La silimanite, utilisée pour le même usage réfractaire, a toutefois des propriétés physico-minéraloriques sensiblement différentes de l'andalousite.",
+      "id": "anda",
+      "nom": "andalousite / sillimanite / kyanite - (cyanite - disthène)",
+    },
+    Object {
+      "description": "Roche volcanique de couleur gris-clair constituée de cristaux de silicates (plagioclases, biotite, hornblende, pyroxène) dans une matrice vitreuse, avec une bonne homogénéité texturale. Elle présente une bonne résistance mécanique et à l'abrasion.",
+      "id": "ande",
+      "nom": "andésite",
+    },
+    Object {
+      "description": "Forme anhydre (CaSO4) du sulfate de calcium hydraté (gypse), utilisée comme charge dans l'industrie des peintures, plastiques et comme régulateur de prise dans les ciments, plus rarement comme amendement.",
+      "id": "anhy",
+      "nom": "anhydrite",
+    },
+    Object {
+      "description": "Roche schistosée, à l'origine une argile, ayant subi un faible métamorphisme. Variétés gris-bleuté à noire dont la texture (à grains très fin et homogène) et la fissillité (débit en plaques fines) sont mis à profit pour la fabrication d'éléments de toiture, de parement et de dallage pour les variétés plus gréseuses (autres utilisations possibles: additifs pour la fabrication du clinker et des ciments).",
+      "id": "ardo",
+      "nom": "ardoises",
+    },
+    Object {
+      "description": "Roche sédimentaire tendre à grain très fin, constituée de minéraux argileux à dominante de smectites-illites, ainsi que d'autres minéraux (quartz, oxydes...) de couleur gris-foncé, brune, jaune-oranger ou rougeâtre. Elles forment une pâte en présence d'eau et durcissent à la cuisson (terres-cuites). peuvent être utilisées (10 à 20%) dans la fabrication du clinker, constituant de base de tous les ciments.",
+      "id": "argc",
+      "nom": "argiles communes",
+    },
+    Object {
+      "description": "Roches sédimentaires tendre à grains fins, constituées majoritairement d'argiles alumino-magnésiennes (fibres de 1 à 3 µm de long et de 100 à 300 Angstroms de large. La différence entre la largeur des fibres permet de différentier les sépiolites des attapulgites). L'existence de micropores entre les fibres, confèrent à ces argiles une grande capacité d'absorption.",
+      "id": "argf",
+      "nom": "argiles fibreuses (attapulgites ou palygorskites, sépiolites)",
+    },
+    Object {
+      "description": "Roche sédimentaire tendre à grains très fins constituée principalement de kaolinite (minéral argileux blanc à crème) utilisée pour ses propriétés en céramiques communes (sanitaires) et pour matériaux réfractaires (fabrication de chamottes).",
+      "id": "argk",
+      "nom": "argiles kaoliniques",
+    },
+    Object {
+      "description": "Roches sédimentaires peu consolidées formées de minéraux argileux comme la montmorillonite (silicate d'aluminium et de magnésium hydraté) et la beidellite (silicate naturel d'aluminium hydraté). Ces phyllosilicates ont des propriétés physico-chimiques (gonflement en présence d'eau, rhéologie, adsorption, échanges cationiques...) avec de nombreuses applications dans les secteurs industriels (chimie, métallurgie, environnement, produit de collage en œnologie pour l'élimination des protéines des vins blancs et rosés. Synonyme : bentonite, \\"terre à foulon\\".",
+      "id": "args",
+      "nom": "argiles",
+    },
+    Object {
+      "description": null,
+      "id": "asta",
+      "nom": "astate",
+    },
+    Object {
+      "description": "Minéral - Sulfate de baryum (BaSO4) présentant une forte densité (4,5) et une bonne inertie chimique utilisé comme charge minérale dans les boues de forage, les bétons spéciaux des installations nucléaires (radioprotection) et certaines peintures industrielles.",
+      "id": "bary",
+      "nom": "barytine",
+    },
+    Object {
+      "description": "Roche volcanique dure et massive de couleur gris-foncé à noire, constituée de fin cristaux (pyroxène et olivine) dans une masse vitreuse. Excellentes propriétés mécaniques (dureté), utilisation en tant que granulats et roche ornementale et de construction.",
+      "id": "basa",
+      "nom": "basalte",
+    },
+    Object {
+      "description": null,
+      "id": "bitu",
+      "nom": "bitume",
+    },
+    Object {
+      "description": null,
+      "id": "buta",
+      "nom": "butane",
+    },
+    Object {
+      "description": null,
+      "id": "caci",
+      "nom": "calcaires cimentiers",
+    },
+    Object {
+      "description": "Roche sédimentaire (couleur blanc-beige-gris) principalement constituée de calcite (carbonate de calcium (CaCO3) faisant effervescence à l'acide). Caractéristiques pétrophysiques et géomécaniques très hétérogènes en fonction de la cristallinité, porosité, teneur en autres constituants (argiles, quartz...). Pour les variétés de haute pureté et blancheur, utilisations comme charges minérales. Autres utilisations : sidérurgie, verrerie, amendements, principale matière première pour la fabrication du clinker et de la chaux. Elle est également très employée en tant pierre ornementale et de construction et pour les granulats.",
+      "id": "calc",
+      "nom": "calcaires",
+    },
+    Object {
+      "description": "Roche métamorphique, d'aspect rubané, provenant de formations argileuses plus ou moins carbonatées comme les marnes et calcaires marneux. Peut être utilisée comme matière première en remplacement du calcaire et/ou des marnes dans la fabrication du clinker, le constituant de base des ciments.",
+      "id": "cals",
+      "nom": "calcschiste",
+    },
+    Object {
+      "description": "Roche volcanique formée de fragments généralement à grains fins, peu indurée (pulvérulente) ou indurée. Elle est utilisée en tant que granulats ou comme roches ornementales et de construction.",
+      "id": "cend",
+      "nom": "cendres volcaniques riches en silice",
+    },
+    Object {
+      "description": null,
+      "id": "cfan",
+      "nom": "anthracite",
+    },
+    Object {
+      "description": null,
+      "id": "cfch",
+      "nom": "charbon",
+    },
+    Object {
+      "description": null,
+      "id": "cfho",
+      "nom": "houille",
+    },
+    Object {
+      "description": null,
+      "id": "cfli",
+      "nom": "lignite",
+    },
+    Object {
+      "description": "Roche métamorphique cristalline plus ou moins orientée, habituellement très dure produite sous l'action de la chaleur d'un magma en fusion (métamorphisme de contact). Les grains sont d'une grosseur homogène et ne suivent pas une orientation préférentielle. Leur composition minéralogique varie selon le degré de métamorphisme et la nature des roches initiales. Elles présentent en général de bonnes résistances au choc et à l'abrasion.",
+      "id": "corn",
+      "nom": "cornéenne",
+    },
+    Object {
+      "description": "Roche sédimentaire fine, tendre, friable, de couleur blanche, composée de calcite(CaCO3) d'origine fossilifère. En amendement, est utilisée sous forme pulvérisée, broyée, concassée ou brute pour corriger les sols acides. En liant hydraulique, elle est utilisée dans des proportions de 80 à 90% dans la fabrication du clinker, le constituant de base du ciment mais sert également à la fabrication de chaux et de mortier. Pour les minéraux industriels, la pureté et la blancheur autorisent une utilisation comme charge minérale.",
+      "id": "crai",
+      "nom": "craie",
+    },
+    Object {
+      "description": "Roche volcanique de couleur gris-clair constituée de fins cristaux de quartz, plagioclase et silicates ferro-magnésiens baignant dans un verre. Elle est utilisée comme roche ornementale ou de construction et comme granulat.",
+      "id": "daci",
+      "nom": "dacite",
+    },
+    Object {
+      "description": "Roche métamorphique dure, d'origine volcanique à grain fin de couleur sombre (issue de dolérite). Elle est utilisé comme granulat.",
+      "id": "diab",
+      "nom": "diabase",
+    },
+    Object {
+      "description": "Roche sédimentaire tendre et légère formée par accumulation de carapaces siliceuses de micro-organismes en milieux lacustes ou marins. Utilisations industrielles : filtration de liquides alimentaires, charge minérale, absorbant de pollutions. En liant hydraulique, elle peut être utilisée comme additifs pour la fabrication de certains ciments.",
+      "id": "diat",
+      "nom": "diatomites",
+    },
+    Object {
+      "description": "Roche plutonique cristalline à texture grenue et homogène, constituée de feldspaths blanchâtres et de silicates ferro-magnésiens colorés (amphiboles, biotite...). En roche ornemental et de construction, elle est sélectionnée pour son aspect décoratif. En granulat, cette roche présente de bonnes caractéristiques mécaniques.",
+      "id": "dior",
+      "nom": "diorites",
+    },
+    Object {
+      "description": "Roche volcanique massive, compacte, de couleur sombre (grise à noire), composée de fins cristaux de feldspaths calciques, de pyroxène et parfois d'oxydes de fer. Elle est utilisée en tant que granulats ou en roche ornementale et de construction. On la trouve en association possible des dolérites altérées (diabases issues du métamorphisme des dolérites).",
+      "id": "dole",
+      "nom": "dolérite",
+    },
+    Object {
+      "description": "Roche sédimentaire constituée principalement de dolomite (carbonate double de calcium et de magnésium). Utilisée comme charge minérale dans de nombreuses applications : peintures et enduits, élastomères, papiers et revêtements de sol ou dans l'industrie du verre. Au regard de ses propriétés chimiques, est utilisée comme amendement sous forme pulvérisée, broyée, pour corriger le pH des sols acides.",
+      "id": "dolo",
+      "nom": "dolomie",
+    },
+    Object {
+      "description": null,
+      "id": "dysp",
+      "nom": "dysprosium",
+    },
+    Object {
+      "description": null,
+      "id": "erbi",
+      "nom": "erbium",
+    },
+    Object {
+      "description": null,
+      "id": "ethy",
+      "nom": "éthylène",
+    },
+    Object {
+      "description": null,
+      "id": "euro",
+      "nom": "europium",
+    },
+    Object {
+      "description": "Roche sédimentaire meuble d'origine détritique riche en débris de coquilles d'animaux marins. Facilement délitable et transformée en sable, elle est utilisée en tant qu'amendement agricole en substitution de carbonate de calcium ou de calcite. Par le passé, cette roche a été utilisée comme sarcophage pour conserver les corps au regard de sa porosité qui permet d'éviter la putréfaction des chairs et d'absorber les exudats.",
+      "id": "falu",
+      "nom": "faluns",
+    },
+    Object {
+      "description": "Minéral - Principal constituant de nombreuses roches magmatiques dont la composition varie entre des pôles potassique (KAlSi3O8), sodique (NaAlSi3O8) et calcique (CaAl2Si2O8), utilisé en céramique et dans la verrerie.",
+      "id": "feld",
+      "nom": "feldspaths",
+    },
+    Object {
+      "description": "Roche plutonique grenue de couleur sombre, contenant des feldspaths calciques et du pyroxène (olivine, biotite et hornblende associés). Cette roche présente généralement de bonnes caractéristiques mécaniques qui la rendent utilisable comme roche ornementale et de construction et comme granulat.",
+      "id": "gabb",
+      "nom": "gabbro",
+    },
+    Object {
+      "description": null,
+      "id": "gado",
+      "nom": "gadolinium",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "galt",
+      "nom": "galets",
+    },
+    Object {
+      "description": null,
+      "id": "gazn",
+      "nom": "gaz naturel",
+    },
+    Object {
+      "description": "Mélange de roches sédimentaires détritiques hétérogènes d'origine glaciaire constituées de fragments hétérométriques, unis par un ciment naturel (moraines et tillites). Les moraines se présentent sous forme de blocs, de cailloux de sables et d'argiles. Elles peuvent être valorisées comme granulat. Les tillites sont des conglomérats à éléments arrondis et anguleux, suffisamment indurées (dures) pour être valorisées également comme granulat ou comme roche ornementale et de construction.",
+      "id": "glac",
+      "nom": "dépôt glaciaire",
+    },
+    Object {
+      "description": "Roche métamorphique cristalline à faciès rubanné ou lenticulaire (alternance de lits clairs quartzo-feldspathiques et de lits sombres à micas, amphiboles et pyroxènes). Utilisée en tant que granulats pour ses propriétés mécaniques ou en tant que roche ornementale et de construction pour son aspect décoratif.",
+      "id": "gnei",
+      "nom": "gneiss",
+    },
+    Object {
+      "description": "Roche plutonique cristalline à texture grenue de couleur claire (gris, rose ou jaune) composée de quartz, feldspaths et micas, sélectionnée pour son aspect décoratif. Pour les roches ornementales et de construction, une définition \\"commerciale\\" existe également et est différente de celle-ci dite \\"acceptation scientifique\\" (cf. point 2.1.156 NF EN 12670 : 2001 page 16). Pour les granulats, cette roche présente de bonnes caractéristiques de rugosité. Pour les minéraux industriels, cette roche rendue friable par l'altération (arénisation) facilite l'extraction de tout ou partie de ses constituants (quartz, feldspaths et micas). Nota : Le terme GRANULITE était utilisé autrefois pour désigner des granites de couleur claire à 2 micas (noir et blanc). qui sont valorisées pour leur aspect esthétique dans le domaine des roches ornementales et de construction.",
+      "id": "grai",
+      "nom": "granite et granulite",
+    },
+    Object {
+      "description": "Roche plutonique grenue dont la composition est intermédiaire entre le granite et la diorite. Elle est principalement constituée de quartz (> 10 %) et de feldspaths de couleur claire. Les minéraux secondaires sont la biotite (grains sombres vert, brun ou noir), l'amphibole et le pyroxène. La Pierre de Rosette qui permit de percer le mystère des hiéroglyphes est en granodiorite.",
+      "id": "grao",
+      "nom": "granodiorite",
+    },
+    Object {
+      "description": "Roche sédimentaire de couleur brun-orangé constituée d'un mélange de silice et d'oxydes et hydroxydes de fer, utilisée en tant que minéraux industriels, comme agent colorant en céramique.",
+      "id": "gref",
+      "nom": "grès silico-ferrugineux",
+    },
+    Object {
+      "description": "Roche sédimentaire plus ou moins indurée et stratifiée, composée de grains de quartz d'origine détritique (d'une taille comprise entre 63 µm et 2 mm) soudés par un ciment interstitiel de nature variable (calcite, oxydes de fer, silice, minéraux argileux). Dans le domaine des granulats et des roches ornementales et de construction, les propriétés mécaniques et l'aspect esthétique sont valorisés. Dans le domaine des minéraux industriels, elle est utilisée comme source de silice pour la production de ferro-silicium.",
+      "id": "gres",
+      "nom": "grès",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "grsi",
+      "nom": "graviers siliceux",
+    },
+    Object {
+      "description": "Minéral - Sulfate de calcium hydraté (CaSO4,2H2O). Dans le domaine des liants hydrauliques, ce minéral est utilisé pour la fabrication du plâtre et comme régulateur de prise dans les ciments. Dans le domaine des minéraux industriel, sa pureté chimique et ses caractéristiques physiques comme la blancheur lui permettent d'être utilisé comme charge minérale. Dans le domaine de l'amendement, sa propriété chimique (base) est utilisée pour corriger les sols acides.",
+      "id": "gyps",
+      "nom": "gypse",
+    },
+    Object {
+      "description": null,
+      "id": "holm",
+      "nom": "holmium",
+    },
+    Object {
+      "description": null,
+      "id": "hyda",
+      "nom": "asphalte",
+    },
+    Object {
+      "description": null,
+      "id": "hydc",
+      "nom": "hydrocarbures conventionnels liquides ou gazeux",
+    },
+    Object {
+      "description": null,
+      "id": "hydg",
+      "nom": "gaz combustible",
+    },
+    Object {
+      "description": null,
+      "id": "hydo",
+      "nom": "hydrocarbures liquides",
+    },
+    Object {
+      "description": null,
+      "id": "hydr",
+      "nom": "hydrocarbures",
+    },
+    Object {
+      "description": null,
+      "id": "irid",
+      "nom": "iridium",
+    },
+    Object {
+      "description": "Minéral - Extrait de roches granitiques ou sédimentaires composées principalement de kaolinite (silicate d'alumine hydraté Al2Si2O5(OH)4). Le kaolin est utilisé pour sa grande pureté et sa blancheur en céramique (porcelaine) ou comme charges minérales (papier, peinture, etc.). Il peut être également utilisé comme matière première en remplacement de l'argile dans la fabrication de certains clinkers pour ciments blancs (Portland).",
+      "id": "kaol",
+      "nom": "kaolin",
+    },
+    Object {
+      "description": null,
+      "id": "lant",
+      "nom": "lanthane",
+    },
+    Object {
+      "description": "Roche métamorphique cristallisée et orientée de couleur claire composée de quartz, feldspath et micas en faible quantité présentant une bonne résistance mécanique.",
+      "id": "lept",
+      "nom": "leptynite",
+    },
+    Object {
+      "description": null,
+      "id": "lute",
+      "nom": "lutécium",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "maer",
+      "nom": "maërl",
+    },
+    Object {
+      "description": null,
+      "id": "mais",
+      "nom": "minerais",
+    },
+    Object {
+      "description": "Roche métamorphique cristalline plus ou moins rubanée, contenant plus de 50 % de carbonates (calcite et plus rarement dolomite) dans laquelle les minéraux ont totalement recristallisé avec des traces d'oxydes métalliques ou d'impuretés lui donnant une grande variété de couleurs. Le métamorphisme de cette roche lui confère une plus grande dureté. Dans le domaine des roches ornementales, elle est sélectionnée pour son aspect décoratif, la recristallisation de ses composants favorise son polissage. Une définition \\"commerciale\\" existe également et est différente de celle-ci dite \\"acceptation scientifique\\" (cf. point 2.1.243 NF EN 12670 : 2001 page 22). Dans le domaine des granulats, elle est sélectionnée pour ses propriétés mécaniques (dureté, résistance aux chocs). Dans le domaine des liants hydrauliques, elle peut être utilisée comme matière première en remplacement du calcaire dans la fabrication du clinker, le constituant de base des ciments. Dans le domaine de l'amendement les composants calciques ou magnésiens sont particulièrement utiles pour la correction de pH des milieux acides. Dans le domaine des minéraux industriels, elle est utilisée, après calcination en carbonate de calcium, comme: - charge minérale dans de nombreuses applications industrielles (papier, peinture, plastiques, élastomères) - ou transformée en chaux pour la correction de pH des milieux acides.",
+      "id": "marb",
+      "nom": "marbres",
+    },
+    Object {
+      "description": "Roche sédimentaire plus ou moins indurée (dure) et stratifiée (couches successives de sédiments) composée d'un mélange de carbonate de calcium (CaCO3) et d'argiles de différentes natures (de 35% à 65%). Usages : Dans le domaine des granulats, l'emploi de cette roche est exceptionnel bien que présent dans les couches de découverte et que ces caractéristiques mécaniques soient compatibles avec cet usage. Si elle est utilisée comme granulat, c'est principalement sous forme de remblai et encore plus exceptionnellement en granulat pour béton. Dans le domaine de l'agriculture, cette roche est employée comme amendement du fait du mélange carbonate de calcium et argile qu'elle contient. Dans le domaine des liants hydrauliques, cette roche est souvent utilisée comme matière première en remplacement du calcaire et/ou de l'argile dans la fabrication du clinker, le constituant de base des ciments. Dans le domaine des minéraux industriels, elle est exploitée en fonction de sa richesse en calcite afin de constituer des charges minérales. Nota: Les marnes ont une composition chimique intermédiaire entre les calcaires marneux (5 à 35% d'argiles) et les argiles calcareuses ou marnes argileuses (65 à 95% d'argiles).",
+      "id": "marn",
+      "nom": "marnes",
+    },
+    Object {
+      "description": null,
+      "id": "meba",
+      "nom": "métaux de base",
+    },
+    Object {
+      "description": null,
+      "id": "meco",
+      "nom": "métaux connexes",
+    },
+    Object {
+      "description": null,
+      "id": "mepr",
+      "nom": "métaux précieux",
+    },
+    Object {
+      "description": "Minéral - Silicates en feuillets riches en aluminium et potassium (micas blancs) ou en magnésium et fer (micas noirs) dont les propriétés physico-minéralogiques trouvent de nombreuses applications dans les domaines de l'isolation et des charges minérales.",
+      "id": "mica",
+      "nom": "micas",
+    },
+    Object {
+      "description": "Roche métamorphique cristallisée et schisteuse caractérisée par l'abondance de la fraction micacée et une plus faible teneur en quartz. Dans le domaine des roches ornementales et de construction, les proportions de quartz et de micas déterminent les propriétés de la roche comme la fissilité pour la production de dallage ou de couverture. Sa richesse en mica confère un aspect brillant à sa surface. Dans le domaine des minéraux industriel, cette roche est valorisée dans des applications de type charge minérale.",
+      "id": "mics",
+      "nom": "micaschistes",
+    },
+    Object {
+      "description": "Roche métamorphique formée d'une alternance de roches de type granite de couleur sombre et de roche de type gneiss de couleur clair. La partie de couleur claire est assimilé à la partie de la roche ayant fondu et est appelée \\"le mobilisat\\". La partie de couleur sombre constitue la partie de la roche étant restée solide et est appelée \\"la restite\\". Ses bonnes propriétés mécaniques, permettent de l'utiliser comme roche ornementale et de construction ou comme granulat.",
+      "id": "migm",
+      "nom": "migmatite",
+    },
+    Object {
+      "description": "Roche autre cataclastique résultant du cisaillement et du broyage puis de la recristallisation plus ou moins intense de roches préexistantes de différentes natures (éventuellement recristallisées) dans une zone de formation intense de failles. Elle est constituée d'une hétérogénéité de roches.",
+      "id": "mylo",
+      "nom": "mylonites",
+    },
+    Object {
+      "description": null,
+      "id": "neod",
+      "nom": "néodyme",
+    },
+    Object {
+      "description": "Mélange sédimentaire naturel de kaolinite (argile), d'oxyde de fer rouge (hématite) et d'hydroxyde de fer jaune-oranger (limonite) utilisé pour la production de pigments naturels dans les peintures et les enduits.",
+      "id": "ocre",
+      "nom": "ocres",
+    },
+    Object {
+      "description": "Roche plutonique intermédiaire entre basalte et gabbro présentant un faciès plus ou moins altéré de couleur vert-foncé. En tant que roche ornementale et de construction elle est sélectionnée pour son aspect décoratif. Son emploi en tant que granulats est dû à sa dureté et à sa compacité.",
+      "id": "ophi",
+      "nom": "ophite",
+    },
+    Object {
+      "description": null,
+      "id": "osmi",
+      "nom": "osmium",
+    },
+    Object {
+      "description": null,
+      "id": "pall",
+      "nom": "palladium",
+    },
+    Object {
+      "description": "Roche volcanique de couleur claire à texture vitreuse plus ou moins hydratée et composition rhyolitique utilisée dans l'industrie pour la production d'agents filtrants et d'additifs fonctionnels. Elle est utilisée dans l'industrie pour la production d'agents filtrants et d'additifs fonctionnels.",
+      "id": "perl",
+      "nom": "perlite",
+    },
+    Object {
+      "description": "Roche volcanique à grain très fin, de couleur grise tirant parfois sur le vert ou le brun, qui se débite en plaques et qui, sous le choc du métal, rend un son clair (dalles sonores). Sa composition chimique est déficitaire en silice (dite sous-saturées en silice). Le silicium y représente donc moins de la moitié des cations. Ces caractéristiques mécaniques (dureté) permettent son utilisation en tant que granulat. En tant que roche ornementale et de construction, elle est utilisée comme pierre ardoisière en Auvergne. En tant que minéraux industriels, sa composition chimique sous-saturée en silice est recherchée pour les industries du verre et de la céramique.",
+      "id": "phon",
+      "nom": "phonolite",
+    },
+    Object {
+      "description": null,
+      "id": "pipe",
+      "nom": "pierres précieuses",
+    },
+    Object {
+      "description": null,
+      "id": "polo",
+      "nom": "polonium",
+    },
+    Object {
+      "description": "Roche plutonique caractérisée par une texture intermédiaire constituée de cristaux de feldpaths baignant dans une matrice finement cristallisée. Dans le domaine des roches ornementales et de construction, la couleur variable de cette roche est utilisée pour son aspect décoratif. Dans le domaine des minéraux industriels, cette roche est employée pour ces propriétés mécaniques (dureté, résistance aux chocs et à l'abrasion).",
+      "id": "porp",
+      "nom": "porphyre",
+    },
+    Object {
+      "description": "Roche volcanique scoriacée à texture bulleuse de couleur noire ou rouge brique. Elle est donc assez rarement exploitée en roche de construction sauf dans la région de Clermont-Ferrand et sur l'île de la Réunion. Elle permet la fabrication de moellons utilisés dans le bâtiment compte tenu de leurs propriétés (isolation thermique et phonique) (voir la fiche pouzzolane de Ph. Rocher). L'exploitation en roche ornementale est marginale et est destinée la construction de rocaille décorative dans les jardins d'agrément. En tant que granulats, elle est utilisée comme agent de sablage ou comme agrégat pour la réalisation de massifs drainants. Sa texture bulleuse peu résistante mécaniquement en fait tout de même un granulat léger notamment dans les bétons spéciaux. Dans le domaine des liants hydrauliques, elle peut être utilisée comme additifs pour la fabrication de certains ciments. Dans le domaine des minéraux industriels, elle est utilisée pour ses propriétés d'isolation phonique et thermique.",
+      "id": "pouz",
+      "nom": "pouzzolane",
+    },
+    Object {
+      "description": null,
+      "id": "pras",
+      "nom": "praséodyme",
+    },
+    Object {
+      "description": null,
+      "id": "prom",
+      "nom": "prométhium",
+    },
+    Object {
+      "description": null,
+      "id": "prot",
+      "nom": "protactinium",
+    },
+    Object {
+      "description": null,
+      "id": "prpa",
+      "nom": "propane",
+    },
+    Object {
+      "description": null,
+      "id": "prpy",
+      "nom": "propylène",
+    },
+    Object {
+      "description": null,
+      "id": "pyri",
+      "nom": "pyrite",
+    },
+    Object {
+      "description": "Minéral - Oxyde de silicium (SiO2) Dans le domaine des granulats, sans grand degré de pureté le quartz est valorisé pour ses caractéristiques mécaniques et certains aspects décoratifs. Dans le domaine des minéraux industriels, sa pureté en SiO2 est recherchée pour sa résistance à l'abrasion dans les revêtements de sols ou comme agent de décapage. Elle constitue une source de silicium pour des applications verre et céramique lorsqu'il présente un très haut degré de pureté.",
+      "id": "quar",
+      "nom": "quartz",
+    },
+    Object {
+      "description": "Roche métamorphique massive composée principalement de quartz issue de la recristallisation et de la cimentation du quartz. Les caractéristiques mécaniques sont favorables à la production de granulats de haute qualité (forte résistance à l'abrasion) ou à une utilisation comme roche ornementale et de construction. Le tombeau de Napoléon, aux Invalides, est réalisé dans un bloc de quartzite. Dans le domaine des minéraux industriels, sa pureté est recherchée pour être utilisée comme matériaux réfractaires.",
+      "id": "quat",
+      "nom": "quartzites",
+    },
+    Object {
+      "description": null,
+      "id": "rado",
+      "nom": "radon",
+    },
+    Object {
+      "description": "Roche métamorphique qui est à l'origine de l'argile ayant subi un faible métamorphisme et qui est devenue schisteuse. Ces roches ardoisières ont un plan de schistocité épais et peuvent avoir une fraction gréseuse. Elle comprend notamment les lauzes qui sont utilisées comme pierres de construction (dallage ou toiture).",
+      "id": "rard",
+      "nom": "roches ardoisières",
+    },
+    Object {
+      "description": "Famille de roches sédimentaire détritiques (issues de la dégradation mécanique d'autres roches) constituées d'éléments grossiers (galets) arrondis (qui traduisent un transport long avant sédimentation) cimentés par des éléments plus fins de type sables et graviers. Devenues suffisamment dures (indurées) ces roches sont utilisées pour la production de granulats. En tant que roches ornementales et de construction, elles présentent des caractéristiques mécaniques et esthétiques valorisables en décoration. Cette famille regroupe les roches suivantes : les arkoses, les brèches, les conglomérats et les poudingues. Ces dernières sont celles qui sont le plus souvent utilisées comme roches ornementales.",
+      "id": "rdet",
+      "nom": "roches détritiques grossières",
+    },
+    Object {
+      "description": null,
+      "id": "rhod",
+      "nom": "rhodium",
+    },
+    Object {
+      "description": "Roche volcanique effusive riche en silice de couleur claire constituée de fins cristaux de feldspaths dispersés dans une matrice vitreuse valorisée pour ses propriétés mécaniques et son aspect esthétique soit en tant que roche ornementale et de construction ou en tant que granulats.",
+      "id": "rhyo",
+      "nom": "rhyolite",
+    },
+    Object {
+      "description": null,
+      "id": "ruth",
+      "nom": "ruthénium",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "saco",
+      "nom": "sables coquilliers",
+    },
+    Object {
+      "description": null,
+      "id": "sama",
+      "nom": "samarium",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "samg",
+      "nom": "sables moyens à grossiers",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "sasi",
+      "nom": "sables siliceux",
+    },
+    Object {
+      "description": null,
+      "id": "scbi",
+      "nom": "schistes bitumineux",
+    },
+    Object {
+      "description": "Roche métamorphique à grains très fins peu ou pas décelables à l'œil nu présentant un débit en feuillet dû à la schistosité et à la présence de minéraux plats (micas, hornblende...) orientés. Utilisée pour ses propriétés mécaniques, cette roche est particulièrement délitable et donne des granulats de forme assez plate. Son aspect décoratif est valorisé en tant que roche ornementale et de construction.",
+      "id": "schi",
+      "nom": "schistes",
+    },
+    Object {
+      "description": null,
+      "id": "selg",
+      "nom": "sel gemme",
+    },
+    Object {
+      "description": null,
+      "id": "selp",
+      "nom": "puits d'eau salée",
+    },
+    Object {
+      "description": null,
+      "id": "sels",
+      "nom": "sels",
+    },
+    Object {
+      "description": null,
+      "id": "selx",
+      "nom": "sel",
+    },
+    Object {
+      "description": "Roche métamorphique de couleur jaunâtre à verdâtre (voire vert sombre) ou présentant des inclusions verdâtres (forme porphyrique) essentiellement constituée (plus de 75 %) d'antigorite (phyllosilicate magnésien). Cette roche provient de l'altération d'une péridotite en présence d'eau. Les serpentinites sont essentiellement exploitées aujourd'hui pour la production de granulats et plus rarement comme roches ornementales.",
+      "id": "serp",
+      "nom": "serpentinite",
+    },
+    Object {
+      "description": "Roche sédimentaire meuble d'origine détritique presque exclusivement constituée de grains calibrés de quartz de très grande pureté (égale ou > 98% de silice), utilisée dans les industries du verre et de la céramique et comme additif fonctionnel.",
+      "id": "sexs",
+      "nom": "sable extra siliceux",
+    },
+    Object {
+      "description": null,
+      "id": "sgin",
+      "nom": "sables et grès industriels",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme de sables, graviers et galets de nature variable extraits d'anciens lits de cours d'eau et utilisé comme granulat encore aujourd'hui principalement dans des bétons spéciaux ou pour des couches drainantes.",
+      "id": "sgra",
+      "nom": "sables et graviers alluvionnaires",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "sgrm",
+      "nom": "sables et graviers marins",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "sgsc",
+      "nom": "sables et graviers silico-calcaires marins",
+    },
+    Object {
+      "description": "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat.",
+      "id": "sgsm",
+      "nom": "sables et graviers siliceux marins",
+    },
+    Object {
+      "description": null,
+      "id": "silc",
+      "nom": "silice",
+    },
+    Object {
+      "description": "Minéral - Silicate d'alumine (SiAl2O5) de même composition chimique que l'andalousite mais avec une structure cristalline et des propriétés physico-minéralogiques sensiblement différentes.",
+      "id": "sili",
+      "nom": "sillimanite",
+    },
+    Object {
+      "description": "Roche sédimentaire d'origine détritique issue d'une précipitation chimique et constituée de silice calcédonieuse presque pure la rendant très dure et quelques impuretés telles que de l'eau ou des oxydes, ces derniers influant sur sa couleur. De part, la dureté de cette roche, elle est valorisée sous forme de granulat. Pour l'industrie, elle est utilisée, sous forme de galet plus ou moins arrondis dont les propriétés mécaniques permettent d'en faire des charges broyantes ou des produits abrasifs ou dont la grande pureté chimique permet de faire de la silice industrielle. [Définition de la norme européenne EN 932-3 : Roche sédimentaire composée de silice cryptocristalline ou microcristalline (cristaux indétectables à l'œil nu), se formant en général en couches ou en nodules dans le calcaire.] Préférer le terme SILEX au terme CHERT qui vaut dire la même chose. Le silex est un chert se formant dans la craie du Crétacé (cf. falaise d'Etretat).",
+      "id": "silx",
+      "nom": "silex / chert",
+    },
+    Object {
+      "description": "Sables alluvionnaires ou de plage composés de minéraux lourds (rutile, zircon, barytine, grenat). L'accumulation des minéraux lourds se fait dans des placers dont l'origine est liée aux paramètres favorables de sédimentation. Ces minéraux peuvent être utilisés en industrie.",
+      "id": "smil",
+      "nom": "sables a minéraux lourds",
+    },
+    Object {
+      "description": "Roche sédimentaire meuble d'origine détritique pouvant soit être constituée majoritairement de grains de quartz (fort % de silice mais < à 98%) soit de calcaire et de silice (silico-calcaire). Ce sable est principalement utilisé comme produits de correction pour la fabrication du clinker, le constituant de base des ciments.",
+      "id": "sssc",
+      "nom": "sable siliceux ou silico-calcaire",
+    },
+    Object {
+      "description": "Roche d'origine diverse, caractérisée par des roches constituant des stériles d'ancienne exploitation (schiste, grès, carbonates ou roche grenue) dont les caractéristiques mécaniques et physiques permettent de les valoriser comme granulat.",
+      "id": "stex",
+      "nom": "stérile d'exploitation",
+    },
+    Object {
+      "description": "Roche plutonique grenue de couleur rose à rouge, composée de feldspath alcalin (assez riche en silice). Elle se rapproche du granite et du gabbro mais ne contient pas de quartz. L'équivalent volcanique d'une syénite est un trachyte. Elle est utilisée en tant que granulats ou roche ornementale et de construction.",
+      "id": "syen",
+      "nom": "syénite",
+    },
+    Object {
+      "description": "Minéral - Silicate de magnésium hydraté (Mg3 Si4 O10 (OH)2) présentant une structure en feuillets dont les propriétés comme la dureté (1 de l'échelle de Mohs), hydrophobie, grande inertie chimique, blancheur en font un remarquable additif fonctionnel de nombreux domaines (peintures, plastiques, pharmacopée...).",
+      "id": "talc",
+      "nom": "talc",
+    },
+    Object {
+      "description": null,
+      "id": "tech",
+      "nom": "technétium",
+    },
+    Object {
+      "description": null,
+      "id": "terb",
+      "nom": "terbium",
+    },
+    Object {
+      "description": "Horizon sédimentaire humifère constitué suivant la profondeur de l'accumulation de matière organique associée à la croissance des végétaux et de l'altération du substratum rocheux sous-jacent.",
+      "id": "terv",
+      "nom": "terre végétale",
+    },
+    Object {
+      "description": null,
+      "id": "thul",
+      "nom": "thulium",
+    },
+    Object {
+      "description": null,
+      "id": "tmas",
+      "nom": "tous métaux associés",
+    },
+    Object {
+      "description": "Roche sédimentaire organique résultant de l'accumulation de la matière organique liée à la croissance des végétaux et de leur transformation sous certaines conditions. Elle est utilisée principalement comme amendement.",
+      "id": "tour",
+      "nom": "tourbe",
+    },
+    Object {
+      "description": "Roche volcanique effusive de couleur gris-clair, à texture souvent poreuse constituée de fins cristaux (microlites) de feldspaths baignant dans une matrice vitreuse (du fait de sa teneur en silice assez élevée). Elle est utilisée pour ses bonnes caractéristiques mécaniques en tant que granulats et comme roches ornementales et de constructions (ex: lave de Volvic, lave de Chambois).",
+      "id": "trac",
+      "nom": "trachyte",
+    },
+    Object {
+      "description": "Roche sédimentaire blanchâtre peu stratifiée à texture crayeuse constituée de calcite, utilisée comme pierre de construction.",
+      "id": "tufo",
+      "nom": "tuffeau",
+    },
+    Object {
+      "description": null,
+      "id": "ytri",
+      "nom": "yttrium",
+    },
+    Object {
+      "description": null,
+      "id": "ytte",
+      "nom": "ytterbium",
+    },
+  ],
+}
+`;
diff --git a/packages/api/src/api/graphql/resolvers/substances.test.integration.ts b/packages/api/src/api/graphql/resolvers/substances.test.integration.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0610514d9fbef9531c98676d87cccc1aeb271964
--- /dev/null
+++ b/packages/api/src/api/graphql/resolvers/substances.test.integration.ts
@@ -0,0 +1,26 @@
+import { graphQLCall } from '../../../../tests/_utils'
+import { dbManager } from '../../../../tests/db-manager'
+beforeAll(async () => {
+  await dbManager.populateDb()
+})
+
+afterAll(async () => {
+  await dbManager.closeKnex()
+})
+describe('substances', () => {
+  test('peut voir toutes les substances', async () => {
+    const res = await graphQLCall(
+      `query Substances {
+  substances {
+   id
+    nom
+    description    
+  }
+}`,
+      {},
+      'defaut'
+    )
+
+    expect(res.body.data).toMatchSnapshot()
+  })
+})
diff --git a/packages/api/src/api/graphql/resolvers/substances.ts b/packages/api/src/api/graphql/resolvers/substances.ts
index 56f78a9d26484c6486fd0cb97f7f3b790041ecab..c927051d01ed34ffd233f82515b3862af172c548 100644
--- a/packages/api/src/api/graphql/resolvers/substances.ts
+++ b/packages/api/src/api/graphql/resolvers/substances.ts
@@ -1,13 +1,3 @@
-import {
-  substanceGet,
-  substancesGet,
-  substancesLegalesGet
-} from '../../../database/queries/substances'
+import { SubstancesLegales } from 'camino-common/src/static/substancesLegales'
 
-const substance = async ({ id }: { id: string }) => substanceGet(id)
-
-const substancesLegales = async () => substancesLegalesGet({ distinct: 'nom' })
-
-const substances = async () => substancesGet()
-
-export { substance, substances, substancesLegales }
+export const substances = () => SubstancesLegales
diff --git a/packages/api/src/api/graphql/resolvers/titres-activites.ts b/packages/api/src/api/graphql/resolvers/titres-activites.ts
index 1da613c77b04fd63ca0447778e8909dbcf64201f..e5853551deacc87cd5d2db948036cf14e4aa92c6 100644
--- a/packages/api/src/api/graphql/resolvers/titres-activites.ts
+++ b/packages/api/src/api/graphql/resolvers/titres-activites.ts
@@ -102,7 +102,7 @@ const activites = async (
     annees,
     titresNoms,
     titresEntreprises,
-    titresSubstances,
+    titresSubstancesIds,
     titresReferences,
     titresTerritoires,
     titresTypesIds,
@@ -118,7 +118,7 @@ const activites = async (
     annees?: number[] | null
     titresNoms?: string | null
     titresEntreprises?: string | null
-    titresSubstances?: string | null
+    titresSubstancesIds?: string[] | null
     titresReferences?: string | null
     titresTerritoires?: string | null
     titresTypesIds?: string[] | null
@@ -151,7 +151,7 @@ const activites = async (
           annees,
           titresNoms,
           titresEntreprises,
-          titresSubstances,
+          titresSubstancesIds,
           titresReferences,
           titresTerritoires,
           statutsIds,
@@ -168,7 +168,7 @@ const activites = async (
           annees,
           titresNoms,
           titresEntreprises,
-          titresSubstances,
+          titresSubstancesIds,
           titresReferences,
           titresTerritoires,
           statutsIds,
diff --git a/packages/api/src/api/graphql/resolvers/titres-demarches.ts b/packages/api/src/api/graphql/resolvers/titres-demarches.ts
index 4e9c8660da28da3be68f86e7f2a6db820ded8769..5d342a67830a045e01b239a2087a4b72c7210bed 100644
--- a/packages/api/src/api/graphql/resolvers/titres-demarches.ts
+++ b/packages/api/src/api/graphql/resolvers/titres-demarches.ts
@@ -67,7 +67,7 @@ const demarches = async (
     titresStatutsIds,
     titresNoms,
     titresEntreprises,
-    titresSubstances,
+    titresSubstancesIds,
     titresReferences,
     titresTerritoires,
     travaux
@@ -85,7 +85,7 @@ const demarches = async (
     titresStatutsIds?: string[] | null
     titresNoms?: string | null
     titresEntreprises?: string | null
-    titresSubstances?: string | null
+    titresSubstancesIds?: string[] | null
     titresReferences?: string | null
     titresTerritoires?: string | null
     travaux?: boolean | null
@@ -122,7 +122,7 @@ const demarches = async (
           titresStatutsIds,
           titresNoms,
           titresEntreprises,
-          titresSubstances,
+          titresSubstancesIds,
           titresReferences,
           titresTerritoires,
           travaux
@@ -141,7 +141,7 @@ const demarches = async (
           titresStatutsIds,
           titresNoms,
           titresEntreprises,
-          titresSubstances,
+          titresSubstancesIds,
           titresReferences,
           titresTerritoires,
           travaux
diff --git a/packages/api/src/api/graphql/resolvers/titres-etapes.test.ts b/packages/api/src/api/graphql/resolvers/titres-etapes.test.ts
deleted file mode 100644
index 20e5ecac722e5a1280a19ffa0e8418bf596554b6..0000000000000000000000000000000000000000
--- a/packages/api/src/api/graphql/resolvers/titres-etapes.test.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { uglySubstanceTrick } from './titres-etapes'
-
-describe('uglySubstanceTrick', () => {
-  test('pas de substances', () => {
-    const initial = {}
-    const tested = { ...initial }
-
-    uglySubstanceTrick(0, tested)
-    expect(tested).toStrictEqual(initial)
-  })
-
-  test('des substances', () => {
-    const initial = {
-      substances: [
-        { id: 'auru', ordre: 1 },
-        { id: 'arge', ordre: 2 },
-        { id: 'plat', ordre: 3 }
-      ]
-    }
-    uglySubstanceTrick(0, initial)
-
-    expect(initial.substances).toStrictEqual([
-      { id: 'auru', ordre: 4 },
-      { id: 'arge', ordre: 5 },
-      { id: 'plat', ordre: 6 }
-    ])
-  })
-
-  test('des substances déjà en base', () => {
-    const initial = {
-      substances: [
-        { id: 'auru', ordre: 1 },
-        { id: 'arge', ordre: 2 },
-        { id: 'plat', ordre: 3 }
-      ]
-    }
-    uglySubstanceTrick(6, initial)
-
-    expect(initial.substances).toStrictEqual([
-      { id: 'auru', ordre: 7 },
-      { id: 'arge', ordre: 8 },
-      { id: 'plat', ordre: 9 }
-    ])
-  })
-})
diff --git a/packages/api/src/api/graphql/resolvers/titres-etapes.ts b/packages/api/src/api/graphql/resolvers/titres-etapes.ts
index 774432cdd95ea9aefbed2c2a09dd7dcb2de80f3b..8dda6d6402e293e311cf107845d8a62f202474af 100644
--- a/packages/api/src/api/graphql/resolvers/titres-etapes.ts
+++ b/packages/api/src/api/graphql/resolvers/titres-etapes.ts
@@ -16,7 +16,6 @@ import { titreFormat } from '../../_format/titres'
 import {
   titreEtapeCreate,
   titreEtapeGet,
-  titreEtapeMaxSubstanceOrdre,
   titreEtapeUpdate,
   titreEtapeUpsert
 } from '../../../database/queries/titres-etapes'
@@ -92,23 +91,6 @@ const statutIdAndDateGet = (
   return result
 }
 
-// il y a un index d’unicité sur la colonne ordre de titres_substances
-// on ne peut pas échanger la position de 2 substances via le upsertGraph de Objection, même avec une transaction
-// https://github.com/Vincit/objection.js/issues/1809)
-// VisibleForTesting
-export const uglySubstanceTrick = (
-  max: number,
-  etape: Pick<ITitreEtape, 'substances'>
-) => {
-  const maxOrdre =
-    etape.substances?.reduce(
-      (maxOrdre, substance) => Math.max(maxOrdre, substance.ordre ?? 0),
-      max
-    ) ?? 0
-  etape.substances?.forEach(substance => {
-    if (substance.ordre) substance.ordre += maxOrdre
-  })
-}
 const etape = async (
   { id }: { id: string },
   context: IToken,
@@ -181,7 +163,6 @@ const etapeHeritage = async (
             type: { id: {} },
             titulaires: { id: {} },
             amodiataires: { id: {} },
-            substances: { legales: { id: {} } },
             points: { references: { id: {} } }
           }
         }
@@ -543,11 +524,6 @@ const etapeModifier = async (
       )
     }
 
-    if (etape.substances?.length) {
-      const maxBdd = await titreEtapeMaxSubstanceOrdre(etape.id)
-      uglySubstanceTrick(maxBdd, etape)
-    }
-
     let etapeUpdated: ITitreEtape = await titreEtapeUpsert(
       etape,
       user!,
diff --git a/packages/api/src/api/graphql/resolvers/titres.ts b/packages/api/src/api/graphql/resolvers/titres.ts
index 839968fe7919e056c83a1f63ad1118ba3b4db6b7..b9a8736fff3905481a2d751312bb0ba1dd61ba27 100644
--- a/packages/api/src/api/graphql/resolvers/titres.ts
+++ b/packages/api/src/api/graphql/resolvers/titres.ts
@@ -53,9 +53,8 @@ const titres = async (
     typesIds,
     domainesIds,
     statutsIds,
-    substancesLegalesIds,
+    substancesIds,
     entreprisesIds,
-    substances,
     noms,
     entreprises,
     references,
@@ -71,7 +70,7 @@ const titres = async (
     typesIds: string[]
     domainesIds: string[]
     statutsIds: string[]
-    substancesLegalesIds: string[]
+    substancesIds: string[]
     entreprisesIds: string[]
     substances: string
     noms: string
@@ -99,9 +98,8 @@ const titres = async (
           typesIds,
           domainesIds,
           statutsIds,
-          substancesLegalesIds,
+          substancesIds,
           entreprisesIds,
-          substances,
           noms,
           entreprises,
           references,
@@ -117,9 +115,8 @@ const titres = async (
           typesIds,
           domainesIds,
           statutsIds,
-          substancesLegalesIds,
+          substancesIds,
           entreprisesIds,
-          substances,
           noms,
           entreprises,
           references,
diff --git a/packages/api/src/api/graphql/schemas/index.graphql b/packages/api/src/api/graphql/schemas/index.graphql
index 0c4bef9b6e63f413e59dd9ebedd5122f2fcaa8bd..0d7d9ea26902fcac72f9d19f1d299155c3fbf9c6 100644
--- a/packages/api/src/api/graphql/schemas/index.graphql
+++ b/packages/api/src/api/graphql/schemas/index.graphql
@@ -52,7 +52,7 @@ type Query {
     typesIds: [ID]
     domainesIds: [ID]
     statutsIds: [ID]
-    substancesLegalesIds: [ID]
+    substancesIds: [ID]
     entreprisesIds: [ID]
     substances: String
     noms: String
@@ -77,7 +77,7 @@ type Query {
     titresStatutsIds: [ID]
     titresNoms: String
     titresEntreprises: String
-    titresSubstances: String
+    titresSubstancesIds: [ID]
     titresReferences: String
     titresTerritoires: String
     travaux: Boolean
@@ -108,7 +108,7 @@ type Query {
     titresStatutsIds: [ID]
     titresNoms: String
     titresEntreprises: String
-    titresSubstances: String
+    titresSubstancesIds: [String]
     titresReferences: String
     titresTerritoires: String
   ): Activites
@@ -152,15 +152,9 @@ type Query {
     emails: String
   ): Utilisateurs
 
-  "Substance en fonction de son id"
-  substance(id: ID!): Substance
-
   "Liste des substances"
   substances: [Substance]
 
-  "Liste des substances par nom distinct"
-  substancesLegales: [SubstanceLegale]
-
   "Metas"
   devises: [Devise]
   documentsTypes(repertoire: ID, typeId: ID): [DocumentType]
diff --git a/packages/api/src/api/graphql/schemas/substances.graphql b/packages/api/src/api/graphql/schemas/substances.graphql
index f20797d688e50d2ef41fa765fe8f87d1bb02ea6b..c275131fc29677579bbadbc257500334f49bf46f 100644
--- a/packages/api/src/api/graphql/schemas/substances.graphql
+++ b/packages/api/src/api/graphql/schemas/substances.graphql
@@ -3,26 +3,5 @@
 type Substance {
   id: ID!
   nom: String!
-  symbole: String
-  gerep: Int
   description: String
-  legales: [SubstanceLegale!]
-}
-
-type TitreSubstance {
-  id: ID!
-  nom: String!
-  symbole: String
-  gerep: Int
-  description: String
-  legales: [SubstanceLegale!]
-  ordre: Int
-}
-
-type SubstanceLegale {
-  id: ID!
-  nom: String!
-  domaine: Domaine
-  description: String
-  ordre: Int
 }
diff --git a/packages/api/src/api/graphql/schemas/titres-etapes.graphql b/packages/api/src/api/graphql/schemas/titres-etapes.graphql
index 847053ba15eb823bd200ccfdddb348562e5025c7..3b8042238d711ddcb5d76397ebe4cbeb2e86817d 100644
--- a/packages/api/src/api/graphql/schemas/titres-etapes.graphql
+++ b/packages/api/src/api/graphql/schemas/titres-etapes.graphql
@@ -51,7 +51,7 @@ type Etape {
   surface: Float
 
   "Substances concernées par le titre"
-  substances: [TitreSubstance]
+  substances: [String!]
 
   "Coordonnées des points du périmètre géographique du titre"
   points: [Point]
@@ -118,7 +118,7 @@ type EtapeHeritage {
   surface: Float
 
   "Substances concernées par le titre"
-  substances: [TitreSubstance]
+  substances: [String!]
 
   "Coordonnées des points du périmètre géographique du titre"
   points: [Point]
@@ -178,7 +178,7 @@ input InputEtapeCreation {
   dateDebut: String
   dateFin: String
   surface: Float
-  substances: [InputSubstances!]
+  substances: [String!]
   points: [InputPoint]
   titulaires: [InputEtapeEntreprise!]
   amodiataires: [InputEtapeEntreprise!]
@@ -201,7 +201,7 @@ input InputEtapeModification {
   dateDebut: String
   dateFin: String
   surface: Float
-  substances: [InputSubstances!]
+  substances: [String!]
   points: [InputPoint]
   titulaires: [InputEtapeEntreprise!]
   amodiataires: [InputEtapeEntreprise!]
@@ -248,11 +248,6 @@ input InputHeritageProp {
   actif: Boolean
 }
 
-input InputSubstances {
-  id: ID!
-  ordre: Int
-}
-
 input InputEtapeEntreprise {
   id: ID!
   operateur: Boolean
diff --git a/packages/api/src/api/graphql/schemas/titres.graphql b/packages/api/src/api/graphql/schemas/titres.graphql
index 715dcc5fda696cb9db7c0374c36824380167d263..84babd6d184559b81b2965946cc02326515d184b 100644
--- a/packages/api/src/api/graphql/schemas/titres.graphql
+++ b/packages/api/src/api/graphql/schemas/titres.graphql
@@ -50,7 +50,7 @@ type Titre {
   statut: TitreStatut!
 
   "Substances concernées par le titre dans son dernier état de validité"
-  substances: [TitreSubstance]
+  substances: [String!]
 
   "Coordonnées x,y du titre"
   coordonnees: Coordonnees
diff --git a/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts b/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts
index 710899da37f0177e2a4f9a65ec41b7459123f230..6cb9a4a24c82f7145de9b553f0cfaa7f3d5fbbdc 100644
--- a/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts
+++ b/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts
@@ -149,7 +149,7 @@ describe('etapeCreer', () => {
             }
           },
           contenu: { arm: { mecanise: true, franchissements: 3 } },
-          substances: [{ id: 'auru' }],
+          substances: ['auru'],
           duree: 10,
           documentIds: ['dep', 'doe'],
           points: [
@@ -309,7 +309,7 @@ describe('etapeCreer', () => {
               franchissements: { actif: true }
             }
           },
-          substances: [{ id: 'auru' }],
+          substances: ['auru'],
           points: [
             {
               groupe: 1,
diff --git a/packages/api/src/api/rest/entreprises.test.ts b/packages/api/src/api/rest/entreprises.test.ts
index 3caab3bec93d9af1dd0e9a57cbd7c0d04a9ae047..8592fb3dbd0be7f81f54ee597cdbde586c40a892 100644
--- a/packages/api/src/api/rest/entreprises.test.ts
+++ b/packages/api/src/api/rest/entreprises.test.ts
@@ -1,5 +1,6 @@
 import { bodyBuilder, responseExtractor } from './entreprises'
 import { DEPARTEMENT_IDS } from 'camino-common/src/static/departement'
+import Titres from '../../database/models/titres'
 
 const entreprise = { id: 'entrepriseId', categorie: 'PME', nom: 'ma companie' }
 const entreprise2 = {
@@ -58,11 +59,12 @@ describe('construit le corps de la requête pour openFisca', () => {
         contenu: { renseignements: { environnement: 1000 } }
       }
     ]
-    const titres = [
+    const titres: Pick<
+      Titres,
+      'titulaires' | 'amodiataires' | 'substances' | 'communes' | 'id'
+    >[] = [
       {
-        substances: [
-          { id: 'auru', nom: 'or', legales: [{ id: 'auru', nom: 'or' }] }
-        ],
+        substances: ['auru'],
         titulaires: [entreprise2],
         amodiataires: [],
         communes: [
@@ -76,10 +78,7 @@ describe('construit le corps de la requête pour openFisca', () => {
         id: 'titreSansActivite'
       },
       {
-        substances: [
-          { id: 'auru', nom: 'or', legales: [{ id: 'auru', nom: 'or' }] },
-          { id: 'suco', nom: 'substances connexes', legales: [] }
-        ],
+        substances: ['auru', 'scoc'],
         communes: [
           {
             id: '97310',
@@ -93,10 +92,7 @@ describe('construit le corps de la requête pour openFisca', () => {
         id: 'titre1'
       },
       {
-        substances: [
-          { id: 'auru', nom: 'or', legales: [{ id: 'auru', nom: 'or' }] },
-          { id: 'suco', nom: 'substances connexes', legales: [] }
-        ],
+        substances: ['auru', 'scoc'],
         titulaires: [entreprise],
         amodiataires: [],
         communes: [
@@ -107,14 +103,10 @@ describe('construit le corps de la requête pour openFisca', () => {
             surface: 19805494
           }
         ],
-        pays: [{ id: 'GF', nom: 'unused' }],
         id: 'titre2'
       },
       {
-        substances: [
-          { id: 'auru', nom: 'or', legales: [{ id: 'auru', nom: 'or' }] },
-          { id: 'suco', nom: 'substances connexes', legales: [] }
-        ],
+        substances: ['auru', 'scoc'],
         titulaires: [entreprise2],
         amodiataires: [],
         communes: [
@@ -128,10 +120,7 @@ describe('construit le corps de la requête pour openFisca', () => {
         id: 'titre3'
       },
       {
-        substances: [
-          { id: 'auru', nom: 'or', legales: [{ id: 'auru', nom: 'or' }] },
-          { id: 'suco', nom: 'substances connexes', legales: [] }
-        ],
+        substances: ['auru', 'scoc'],
         titulaires: [entreprise2],
         amodiataires: [],
         communes: [
@@ -145,10 +134,7 @@ describe('construit le corps de la requête pour openFisca', () => {
         id: 'titre4'
       },
       {
-        substances: [
-          { id: 'auru', nom: 'or', legales: [{ id: 'auru', nom: 'or' }] },
-          { id: 'suco', nom: 'substances connexes', legales: [] }
-        ],
+        substances: ['auru', 'scoc'],
         titulaires: [entreprise],
         amodiataires: [],
         communes: [
diff --git a/packages/api/src/api/rest/entreprises.ts b/packages/api/src/api/rest/entreprises.ts
index 5fc7fae827ca4de9e5f2fd48282f80dea2752caf..400dc5fdec48c667c42083c33e1fee036a486b4f 100644
--- a/packages/api/src/api/rest/entreprises.ts
+++ b/packages/api/src/api/rest/entreprises.ts
@@ -27,8 +27,8 @@ import Titres from '../../database/models/titres'
 import { CustomResponse } from './express-type'
 import {
   SubstanceFiscale,
-  SubstancesFiscales
-} from 'camino-common/src/static/substance'
+  substancesFiscalesBySubstanceLegale
+} from 'camino-common/src/static/substancesFiscales'
 import { Departements } from 'camino-common/src/static/departement'
 import { isNotNullNorUndefined } from 'camino-common/src/typescript-tools'
 import { Regions } from 'camino-common/src/static/region'
@@ -119,19 +119,10 @@ export const bodyBuilder = (
     }
 
     if (titre.substances.length > 0 && activite.contenu) {
-      if (!titre.substances[0].legales) {
-        throw new Error(
-          `les substances légales des substances du titre ${activite.titreId} ne sont pas chargées`
-        )
-      }
-
       const substanceLegalesWithFiscales = titre.substances
-        .flatMap(s => s.legales)
         .filter(isNotNullNorUndefined)
-        .filter(s =>
-          SubstancesFiscales.some(
-            ({ substanceLegaleId }) => substanceLegaleId === s.id
-          )
+        .filter(
+          substanceId => substancesFiscalesBySubstanceLegale(substanceId).length
         )
 
       if (substanceLegalesWithFiscales.length > 1) {
@@ -143,10 +134,7 @@ export const bodyBuilder = (
       }
 
       const substancesFiscales = substanceLegalesWithFiscales.flatMap(
-        ({ id }) =>
-          SubstancesFiscales.filter(
-            ({ substanceLegaleId }) => substanceLegaleId === id
-          )
+        substanceId => substancesFiscalesBySubstanceLegale(substanceId)
       )
 
       for (const substancesFiscale of substancesFiscales) {
@@ -373,7 +361,7 @@ export const fiscalite = async (
       { entreprisesIds: [entrepriseId] },
       {
         fields: {
-          substances: { legales: { id: {} } },
+          substancesEtape: { id: {} },
           communes: { id: {} }
         }
       },
diff --git a/packages/api/src/api/rest/format/titres-activites.ts b/packages/api/src/api/rest/format/titres-activites.ts
index 0f8ad479bc0ed9dee79d8b93803e4c6429fede42..8b0798360e27097cccb46bf9679e9ceec75f47e7 100644
--- a/packages/api/src/api/rest/format/titres-activites.ts
+++ b/packages/api/src/api/rest/format/titres-activites.ts
@@ -8,7 +8,7 @@ import {
 import {
   isSubstanceFiscale,
   SubstancesFiscale
-} from 'camino-common/src/static/substance'
+} from 'camino-common/src/static/substancesFiscales'
 import { UniteId, Unites } from 'camino-common/src/static/unites'
 
 const titreActiviteContenuFormat = (contenu: IContenu, sections: ISection[]) =>
diff --git a/packages/api/src/api/rest/format/titres.ts b/packages/api/src/api/rest/format/titres.ts
index 59defe2df032dbd86ec147e115bb4f1f0e7714a5..ed88377431275e154581b9829ae0f298d0bbc37d 100644
--- a/packages/api/src/api/rest/format/titres.ts
+++ b/packages/api/src/api/rest/format/titres.ts
@@ -9,6 +9,7 @@ import {
 } from '../../../types'
 import { Departements } from 'camino-common/src/static/departement'
 import { Regions } from 'camino-common/src/static/region'
+import { SubstancesLegale } from 'camino-common/src/static/substancesLegales'
 
 const titreContenuTableFormat = (contenu?: IContenu | null) =>
   contenu
@@ -54,7 +55,9 @@ export const titresTableFormat = (titres: ITitre[]) =>
       date_fin: titre.dateFin,
       date_demande: titre.dateDemande,
       statut: titre.statut!.nom,
-      substances: titre.substances!.map(s => s.nom).join(separator),
+      substances: titre
+        .substances!.map(substanceId => SubstancesLegale[substanceId].nom)
+        .join(separator),
       'surface renseignee km2': titre.surface,
       'communes (surface calculee km2)': communes.join(separator),
       forets: titre.forets?.map(f => f.nom).join(separator),
@@ -107,7 +110,10 @@ const titreGeojsonPropertiesFormat = (titre: ITitre) => {
     date_fin: titre.dateFin,
     date_demande: titre.dateDemande,
     statut: titre.statut!.nom,
-    substances: titre.substances!.map(s => s.nom).join(separator) || null,
+    substances:
+      titre
+        .substances!.map(substanceId => SubstancesLegale[substanceId].nom)
+        .join(separator) || null,
     'surface renseignee km2': titre.surface,
     'communes (surface calculee km2)': communes.join(separator),
     forets: titre.forets?.map(f => f.nom).join(separator),
diff --git a/packages/api/src/api/rest/index.ts b/packages/api/src/api/rest/index.ts
index 5da174c3d7d8d9eccaf69570146fdf38916ceb71..dfdf669fb10b4ebe4deee3fd3da4825a6d55f1bc 100644
--- a/packages/api/src/api/rest/index.ts
+++ b/packages/api/src/api/rest/index.ts
@@ -45,7 +45,7 @@ const titreFields = {
   domaine: { id: {} },
   statut: { id: {} },
   references: { type: { id: {} } },
-  substances: { legales: { id: {} } },
+  substancesEtape: { id: {} },
   titulaires: { id: {} },
   amodiataires: { id: {} },
   surfaceEtape: { id: {} },
@@ -100,7 +100,7 @@ interface ITitresQueryInput {
   domainesIds?: string | null
   typesIds?: string | null
   statutsIds?: string | null
-  substancesLegalesIds?: string | null
+  substancesIds?: string | null
   titresIds?: string | null
   entreprisesIds?: string | null
   references?: string | null
@@ -117,7 +117,7 @@ const titres = async (
       typesIds,
       domainesIds,
       statutsIds,
-      substancesLegalesIds,
+      substancesIds,
       titresIds,
       entreprisesIds,
       references,
@@ -140,9 +140,7 @@ const titres = async (
       statutsIds: statutsIds?.split(','),
       ids: titresIds ? stringSplit(titresIds) : null,
       entreprisesIds: entreprisesIds ? stringSplit(entreprisesIds) : null,
-      substancesLegalesIds: substancesLegalesIds
-        ? stringSplit(substancesLegalesIds)
-        : null,
+      substancesIds: substancesIds ? stringSplit(substancesIds) : null,
       references,
       territoires,
       perimetre
@@ -175,7 +173,7 @@ const titres = async (
       typesIds,
       domainesIds,
       statutsIds,
-      substancesLegalesIds,
+      substancesIds,
       titresIds,
       entreprisesIds,
       references,
@@ -214,7 +212,7 @@ interface ITitresDemarchesQueryInput {
   titresStatutsIds?: string | null
   titresNoms?: string | null
   titresEntreprises?: string | null
-  titresSubstances?: string | null
+  titresSubstancesIds?: string | null
   titresReferences?: string | null
   titresTerritoires?: string | null
   travaux?: string | null
@@ -235,7 +233,7 @@ const demarches = async (
       titresStatutsIds,
       titresNoms,
       titresEntreprises,
-      titresSubstances,
+      titresSubstancesIds,
       titresReferences,
       titresTerritoires,
       travaux
@@ -260,7 +258,7 @@ const demarches = async (
       titresStatutsIds: titresStatutsIds?.split(','),
       titresNoms,
       titresEntreprises,
-      titresSubstances,
+      titresSubstancesIds: titresSubstancesIds?.split(','),
       titresReferences,
       titresTerritoires,
       travaux: travaux ? travaux === 'true' : undefined
@@ -292,7 +290,7 @@ const demarches = async (
     titreDemarcheFormat(titreDemarche)
   )
 
-  let contenu = ''
+  let contenu
 
   if (['csv', 'xlsx', 'ods'].includes(format)) {
     const elements = titresDemarchesFormatTable(demarchesFormatted)
@@ -325,7 +323,7 @@ interface ITitresActivitesQueryInput {
   annees?: string | null
   titresNoms?: string | null
   titresEntreprises?: string | null
-  titresSubstances?: string | null
+  titresSubstancesIds?: string | null
   titresReferences?: string | null
   titresTerritoires?: string | null
   titresTypesIds?: string | null
@@ -344,7 +342,7 @@ const activites = async (
       annees,
       titresNoms,
       titresEntreprises,
-      titresSubstances,
+      titresSubstancesIds,
       titresReferences,
       titresTerritoires,
       titresTypesIds,
@@ -367,7 +365,7 @@ const activites = async (
       annees: annees?.split(',').map(a => Number(a)),
       titresNoms,
       titresEntreprises,
-      titresSubstances,
+      titresSubstancesIds: titresSubstancesIds?.split(','),
       titresReferences,
       titresTerritoires,
       titresTypesIds: titresTypesIds?.split(','),
diff --git a/packages/api/src/business/matrices.ts b/packages/api/src/business/matrices.ts
index fffc97d94803445e90d6cf9afe81b50373e8f873..83d5903a6a27e264f0242d275f80021393a73a86 100644
--- a/packages/api/src/business/matrices.ts
+++ b/packages/api/src/business/matrices.ts
@@ -450,7 +450,7 @@ export const matrices = async (annee: number) => {
     },
     {
       fields: {
-        substances: { legales: { id: {} } },
+        substancesEtape: { id: {} },
         communes: { id: {} },
         titulaires: { id: {} },
         amodiataires: { id: {} },
diff --git a/packages/api/src/business/processes/titres-activites-update.ts b/packages/api/src/business/processes/titres-activites-update.ts
index 1c1b58d8bbf0b7c9f646567d70c7663e9e20792d..8389ef14cbb04f4fac31962c4c5690994e9107bd 100644
--- a/packages/api/src/business/processes/titres-activites-update.ts
+++ b/packages/api/src/business/processes/titres-activites-update.ts
@@ -24,9 +24,7 @@ export const titresActivitesUpdate = async (titresIds?: string[]) => {
         demarches: {
           type: { id: {} },
           phase: { id: {} },
-          etapes: {
-            substances: { legales: { id: {} } }
-          }
+          etapes: { id: {} }
         },
         communes: { id: {} },
         activites: { id: {} },
diff --git a/packages/api/src/business/processes/titres-etapes-heritage-props-update.ts b/packages/api/src/business/processes/titres-etapes-heritage-props-update.ts
index 9b80baafabb76cb28781590882b05659b2aef55f..f70e43556a7a6feb6e4201cfcb8e26035e3c1cfa 100644
--- a/packages/api/src/business/processes/titres-etapes-heritage-props-update.ts
+++ b/packages/api/src/business/processes/titres-etapes-heritage-props-update.ts
@@ -21,7 +21,6 @@ export const titresEtapesHeritagePropsUpdate = async (
           type: { id: {} },
           titulaires: { id: {} },
           amodiataires: { id: {} },
-          substances: { id: {} },
           points: { references: { id: {} } }
         }
       }
diff --git a/packages/api/src/business/processes/titres-props-etapes-ids-update.ts b/packages/api/src/business/processes/titres-props-etapes-ids-update.ts
index 50b5f1de4517bb8acef66cc63fd43d7d2bdc5cf4..5be0c9100fd6d2f04e3132b34987decf16745e43 100644
--- a/packages/api/src/business/processes/titres-props-etapes-ids-update.ts
+++ b/packages/api/src/business/processes/titres-props-etapes-ids-update.ts
@@ -28,8 +28,7 @@ export const titresPropsEtapesIdsUpdate = async (titresIds?: string[]) => {
             points: { id: {} },
             titulaires: { id: {} },
             amodiataires: { id: {} },
-            administrations: { id: {} },
-            substances: { id: {} }
+            administrations: { id: {} }
           }
         }
       }
diff --git a/packages/api/src/business/rules/__mocks__/titre-activites-build-titres.ts b/packages/api/src/business/rules/__mocks__/titre-activites-build-titres.ts
index de1703914beeaf39a7950881e69ce45c83a83179..00b95dfdf503cd76c4aaa6c4fd78f28ed7c1cbaf 100644
--- a/packages/api/src/business/rules/__mocks__/titre-activites-build-titres.ts
+++ b/packages/api/src/business/rules/__mocks__/titre-activites-build-titres.ts
@@ -1,5 +1,5 @@
 import { IActiviteType, ITitreDemarche } from '../../../types'
-import { SubstancesFiscale } from 'camino-common/src/static/substance'
+import { SubstancesFiscale } from 'camino-common/src/static/substancesFiscales'
 import { UNITES } from 'camino-common/src/static/unites'
 
 const activiteTypeGra = {
@@ -220,22 +220,7 @@ const titreDemarches = [
         date: '2018-01-01',
         typeId: 'dpu',
         statutId: 'fai',
-        substances: [
-          {
-            id: 'auru',
-            legales: [
-              {
-                id: 'auru',
-                nom: 'Or'
-              },
-              {
-                id: 'nacl',
-                nom: 'Sel'
-              },
-              null
-            ]
-          }
-        ]
+        substances: ['auru', 'nacl', null]
       }
     ]
   } as ITitreDemarche
diff --git a/packages/api/src/business/rules/__mocks__/titre-prop-etape-find-demarches.ts b/packages/api/src/business/rules/__mocks__/titre-prop-etape-find-demarches.ts
index ecd6b37b8d5a438bf358e9b9241f1eae2978679f..905319fbbfa118a33a41f02574db896a9e01d59b 100644
--- a/packages/api/src/business/rules/__mocks__/titre-prop-etape-find-demarches.ts
+++ b/packages/api/src/business/rules/__mocks__/titre-prop-etape-find-demarches.ts
@@ -505,7 +505,7 @@ const titreDemarchesProModPhaseEch = {
           ordre: 1,
           points: [1, 2, 3],
           surface: 3.2,
-          substances: [{ id: 'or' }],
+          substances: ['auru'],
           communes: ['paris'],
           titulaires: ['titulaire2'],
           amodiataires: ['amodiataire2'],
@@ -531,7 +531,7 @@ const titreDemarchesProModPhaseEch = {
           ordre: 1,
           points: [1, 2],
           surface: 3,
-          substances: [{ id: 'argent' }],
+          substances: ['arge'],
           communes: ['tours'],
           titulaires: ['titulaire1'],
           amodiataires: ['amodiataire1'],
diff --git a/packages/api/src/business/rules/titre-activites-build.ts b/packages/api/src/business/rules/titre-activites-build.ts
index c3307923e61bca36eaa654046e1289e566df3185..0f6d8545efac93da1e1a39537538c730543331a5 100644
--- a/packages/api/src/business/rules/titre-activites-build.ts
+++ b/packages/api/src/business/rules/titre-activites-build.ts
@@ -4,7 +4,6 @@ import {
   ITitreDemarche,
   IActiviteType,
   ITitreActivite,
-  ISubstance,
   ISection,
   ISectionElement
 } from '../../types'
@@ -13,27 +12,19 @@ import { titreEtapePropFind } from './titre-etape-prop-find'
 import { titreActiviteValideCheck } from '../utils/titre-activite-valide-check'
 import {
   SubstanceFiscale,
-  SubstancesFiscale
-} from 'camino-common/src/static/substance'
+  substancesFiscalesBySubstanceLegale
+} from 'camino-common/src/static/substancesFiscales'
 import { UNITES, Unites } from 'camino-common/src/static/unites'
 import { sortedDevises } from 'camino-common/src/static/devise'
 import { exhaustiveCheck } from '../../tools/exhaustive-type-check'
+import { SubstanceLegaleId } from 'camino-common/src/static/substancesLegales'
 
-const onlyUnique = <T>(value: T, index: number, self: T[]): boolean => {
-  return self.indexOf(value) === index
-}
-
-const substancesFiscalesFind = (substances: ISubstance[]): SubstanceFiscale[] =>
+const substancesFiscalesFind = (
+  substances: SubstanceLegaleId[]
+): SubstanceFiscale[] =>
   substances
-    .flatMap(
-      s => s?.legales?.filter(legal => legal !== null).map(({ id }) => id) ?? []
-    )
-    .filter(onlyUnique)
-    .flatMap(id =>
-      Object.values(SubstancesFiscale).filter(
-        substance => substance.substanceLegaleId === id
-      )
-    )
+    .filter(s => !!s)
+    .flatMap(substanceId => substancesFiscalesBySubstanceLegale(substanceId))
 
 const titreActiviteSectionElementsFormat = (
   elements: ISectionElement[],
@@ -113,20 +104,20 @@ const titreActiviteSectionsBuild = (
         date,
         titreDemarches,
         titreTypeId
-      ) as ISubstance[] | null
+      ) as SubstanceLegaleId[] | null
 
       if (substances?.length) {
         const substancesFiscales = substancesFiscalesFind(substances)
 
         elements = substancesFiscales.map(sf => {
           const unite = Unites[sf.uniteId]
-          const element = {
+          const element: ISectionElement = {
             id: sf.id,
             nom: `${sf.nom}`,
             type: 'number',
             description: `<b>${unite.symbole} (${unite.nom})</b> ${sf.description}`,
             uniteId: sf.uniteId
-          } as ISectionElement
+          }
 
           if (unite.referenceUniteRatio) {
             element.referenceUniteRatio = unite.referenceUniteRatio
diff --git a/packages/api/src/business/utils/titre-etape-heritage-props-find.test.ts b/packages/api/src/business/utils/titre-etape-heritage-props-find.test.ts
index 1accb999fa52d2bb515590696682426a899eb003..5317b9d962b2883ae89624aa3cb2c29d65820e66 100644
--- a/packages/api/src/business/utils/titre-etape-heritage-props-find.test.ts
+++ b/packages/api/src/business/utils/titre-etape-heritage-props-find.test.ts
@@ -108,7 +108,7 @@ describe('retourne l’étape en fonction de son héritage', () => {
     })
   })
 
-  test.each(['titulaires', 'amodiataires', 'substances'])(
+  test.each(['titulaires', 'amodiataires'])(
     'l’étape est modifiée si changement sur les $propId',
     propId => {
       const titreEtapePrecedente = {
@@ -145,6 +145,37 @@ describe('retourne l’étape en fonction de son héritage', () => {
     }
   )
 
+  test('l’étape est modifiée si changement sur les substances', () => {
+    const titreEtapePrecedente = {
+      id: 'titreEtapePrecedenteId',
+      heritageProps: titreEtapePropsIds.reduce((acc, prop) => {
+        acc[prop] = { actif: false, etapeId: null }
+
+        return acc
+      }, {} as IHeritageProps)
+    } as ITitreEtape
+    titreEtapePrecedente.substances = ['auru', 'arge']
+
+    const titreEtape = objectClone(titreEtapePrecedente) as ITitreEtape
+    titreEtape.heritageProps!.substances.actif = true
+    titreEtape.id = 'titreEtapeId'
+    titreEtapePropsIds.forEach(
+      prop =>
+        (titreEtape.heritageProps![prop].etapeId = titreEtapePrecedente.id)
+    )
+    titreEtape.substances = ['nacl', 'arge']
+
+    const titreEtapeNew = objectClone(titreEtape) as ITitreEtape
+    titreEtapeNew.substances = ['auru', 'arge']
+
+    expect(
+      titreEtapeHeritagePropsFind(titreEtape, titreEtapePrecedente)
+    ).toEqual({
+      hasChanged: true,
+      titreEtape: titreEtapeNew
+    })
+  })
+
   test('l’étape est modifiée si il y a un titulaire en moins', () => {
     const titreEtapePrecedente = {
       id: 'titreEtapePrecedenteId',
diff --git a/packages/api/src/business/utils/titre-etape-heritage-props-find.ts b/packages/api/src/business/utils/titre-etape-heritage-props-find.ts
index 83c8df6c0d5bef6cf3dcbb1bbe3d35583c313bc6..ef2005ffbc897332fc9ea28d337d03ee5b18ca9e 100644
--- a/packages/api/src/business/utils/titre-etape-heritage-props-find.ts
+++ b/packages/api/src/business/utils/titre-etape-heritage-props-find.ts
@@ -3,11 +3,11 @@ import {
   IEntreprise,
   ITitrePoint,
   ITitreIncertitudes,
-  ITitreSubstance,
   ITitreEntreprise
 } from '../../types'
 import { objectClone } from '../../tools/index'
 import { idGenerate } from '../../database/models/_format/id-create'
+import { SubstanceLegaleId } from 'camino-common/src/static/substancesLegales'
 
 const titreEtapePropsIds: (keyof ITitreEtape)[] = [
   'points',
@@ -57,19 +57,7 @@ const propertyArrayCheck = (
         (prevValue as ITitrePoint[]).map(comparator).sort().toString()
       )
     } else if (propId === 'substances') {
-      const comparator = (propValueArray: { id: string; ordre: number }) =>
-        propValueArray.id + propValueArray.ordre
-
-      return (
-        (newValue as { id: string; ordre: number }[])
-          .map(comparator)
-          .sort()
-          .toString() ===
-        (prevValue as { id: string; ordre: number }[])
-          .map(comparator)
-          .sort()
-          .toString()
-      )
+      return newValue.toString() === prevValue.toString()
     } else if (['titulaires', 'amodiataires'].includes(propId)) {
       const comparator = (propValueArray: ITitreEntreprise) =>
         propValueArray.id + propValueArray.operateur
@@ -89,7 +77,7 @@ type IPropValueArray =
   | null
   | IEntreprise[]
   | ITitrePoint[]
-  | ITitreSubstance[]
+  | SubstanceLegaleId[]
 
 type IPropValue = number | string | IPropValueArray
 
@@ -158,7 +146,7 @@ const titreEtapeHeritagePropsFind = (
           } else if (propId === 'amodiataires' || propId === 'titulaires') {
             newTitreEtape[propId] = newValue as IEntreprise[]
           } else if (propId === 'substances') {
-            newTitreEtape[propId] = newValue as ITitreSubstance[]
+            newTitreEtape[propId] = newValue as SubstanceLegaleId[]
           } else if (propId === 'dateDebut' || propId === 'dateFin') {
             newTitreEtape[propId] = newValue as string
           } else if (propId === 'duree' || propId === 'surface') {
diff --git a/packages/api/src/business/validations/titre-etape-updation-validate.test.ts b/packages/api/src/business/validations/titre-etape-updation-validate.test.ts
index 0c83d56e217917bb1eb738a05700d93287e5b6de..4edfb050c08f849111182340724238c7a890fe59 100644
--- a/packages/api/src/business/validations/titre-etape-updation-validate.test.ts
+++ b/packages/api/src/business/validations/titre-etape-updation-validate.test.ts
@@ -1,26 +1,21 @@
-import {
-  ISubstance,
-  ITitreEtape,
-  ITitreDemarche,
-  ITitrePoint,
-  ITitre
-} from '../../types'
+import { ITitreEtape, ITitreDemarche, ITitrePoint, ITitre } from '../../types'
 
 import {
   titreEtapeCompleteValidate,
   titreEtapeUpdationValidate
 } from './titre-etape-updation-validate'
+import { SubstanceLegaleId } from 'camino-common/src/static/substancesLegales'
 
 describe('valide l’étape avant de l’enregistrer', () => {
   test.each`
-    substances          | etapeType | titreType | error
-    ${[]}               | ${'mfr'}  | ${'arm'}  | ${true}
-    ${[]}               | ${'mfr'}  | ${'axm'}  | ${true}
-    ${[]}               | ${'rde'}  | ${'arm'}  | ${false}
-    ${[]}               | ${'mfr'}  | ${'prm'}  | ${false}
-    ${[{ id: 'auru' }]} | ${'mfr'}  | ${'arm'}  | ${false}
-    ${[{ id: 'auru' }]} | ${'mfr'}  | ${'axm'}  | ${false}
-    ${[{}]}             | ${'mfr'}  | ${'axm'}  | ${true}
+    substances  | etapeType | titreType | error
+    ${[]}       | ${'mfr'}  | ${'arm'}  | ${true}
+    ${[]}       | ${'mfr'}  | ${'axm'}  | ${true}
+    ${[]}       | ${'rde'}  | ${'arm'}  | ${false}
+    ${[]}       | ${'mfr'}  | ${'prm'}  | ${false}
+    ${['auru']} | ${'mfr'}  | ${'arm'}  | ${false}
+    ${['auru']} | ${'mfr'}  | ${'axm'}  | ${false}
+    ${[]}       | ${'mfr'}  | ${'axm'}  | ${true}
   `(
     'teste la complétude des substances',
     ({
@@ -29,7 +24,7 @@ describe('valide l’étape avant de l’enregistrer', () => {
       titreType,
       error
     }: {
-      substances: ISubstance[]
+      substances: SubstanceLegaleId[]
       etapeType: string
       titreType: string
       error: boolean
diff --git a/packages/api/src/business/validations/titre-etape-updation-validate.ts b/packages/api/src/business/validations/titre-etape-updation-validate.ts
index fbd3bb7e147c08051cf2e132c25e32d62c1f42ae..18d06c400aefa5dcf21026a4681179afa8f5202b 100644
--- a/packages/api/src/business/validations/titre-etape-updation-validate.ts
+++ b/packages/api/src/business/validations/titre-etape-updation-validate.ts
@@ -215,7 +215,7 @@ const titreEtapeCompleteValidate = (
     if (
       !titreEtape.substances ||
       !titreEtape.substances.length ||
-      !titreEtape.substances.some(({ id }) => !!id)
+      !titreEtape.substances.some(substanceId => !!substanceId)
     ) {
       errors.push('au moins une substance doit être renseignée')
     }
diff --git a/packages/api/src/database/models/_format/titre-etape-heritage.ts b/packages/api/src/database/models/_format/titre-etape-heritage.ts
index 239834f0c4df09ea253089fc97b0c3153cc81ee2..3f2b43d603729b51e05b707dce7d4f5b6a86f193 100644
--- a/packages/api/src/database/models/_format/titre-etape-heritage.ts
+++ b/packages/api/src/database/models/_format/titre-etape-heritage.ts
@@ -8,8 +8,6 @@ const heritagePropsFormat = async (heritageProps: IHeritageProps) => {
       const fields = { type: { id: {} } } as IFields
       if (propId === 'points') {
         fields.points = { references: { id: {} } }
-      } else if (propId === 'substances') {
-        fields.substances = { legales: { id: {} } }
       } else if (['titulaires', 'amodiataires'].includes(propId)) {
         fields[propId] = { id: {} }
       }
diff --git a/packages/api/src/database/models/substances-legales.ts b/packages/api/src/database/models/substances-legales.ts
deleted file mode 100644
index 5c593e0bb677e9f8e020e44c95acfcfe9624dda2..0000000000000000000000000000000000000000
--- a/packages/api/src/database/models/substances-legales.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { Model } from 'objection'
-
-import { ISubstanceLegale } from '../../types'
-
-import Domaines from './domaines'
-
-interface SubstancesLegales extends ISubstanceLegale {}
-
-class SubstancesLegales extends Model {
-  public static tableName = 'substancesLegales'
-
-  public static jsonSchema = {
-    type: 'object',
-    required: ['id', 'nom'],
-
-    properties: {
-      id: { type: 'string' },
-      nom: { type: ['string', 'null'] },
-      domaineId: { type: ['string', 'null'] },
-      description: { type: ['string', 'null'] },
-      substanceLegaleCodeId: { type: ['string', 'null'] }
-    }
-  }
-
-  static relationMappings = () => ({
-    domaine: {
-      relation: Model.BelongsToOneRelation,
-      modelClass: Domaines,
-      join: {
-        from: 'substancesLegales.domaineId',
-        to: 'domaines.id'
-      }
-    }
-  })
-}
-
-export default SubstancesLegales
diff --git a/packages/api/src/database/models/substances.ts b/packages/api/src/database/models/substances.ts
deleted file mode 100644
index b3782634cc47947484d94fdc244857aa4e6eaa80..0000000000000000000000000000000000000000
--- a/packages/api/src/database/models/substances.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { Model, Modifiers } from 'objection'
-
-import { ISubstance } from '../../types'
-import SubstancesLegales from './substances-legales'
-
-interface Substances extends ISubstance {}
-
-class Substances extends Model {
-  public static tableName = 'substances'
-
-  public static jsonSchema = {
-    type: 'object',
-    required: ['id', 'nom', 'substanceLegaleId'],
-
-    properties: {
-      id: { type: 'string' },
-      nom: { type: ['string', 'null'] },
-      symbole: { type: ['string', 'null'] },
-      gerep: { type: ['integer', 'null'] },
-      description: { type: ['string', 'null'], maxLength: 2048 },
-      substanceLegaleId: { type: 'string' }
-    }
-  }
-
-  static relationMappings = () => ({
-    legales: {
-      relation: Model.ManyToManyRelation,
-      modelClass: SubstancesLegales,
-      join: {
-        from: 'substances.id',
-        through: {
-          from: 'substances__substancesLegales.substanceId',
-          to: 'substances__substancesLegales.substanceLegaleId'
-        },
-        to: 'substancesLegales.id'
-      }
-    }
-  })
-
-  public static modifiers: Modifiers = {
-    orderAsc: builder => {
-      builder.orderBy('ordre', 'asc')
-    }
-  }
-}
-
-export default Substances
diff --git a/packages/api/src/database/models/titres-etapes.ts b/packages/api/src/database/models/titres-etapes.ts
index c56a85c9ec0131ca6e7bb4cfe6444ccb5fddaadc..150ef710a3e0fcb0ab75073bf0c94cdc91da5ec0 100644
--- a/packages/api/src/database/models/titres-etapes.ts
+++ b/packages/api/src/database/models/titres-etapes.ts
@@ -9,7 +9,6 @@ import {
 import { idGenerate } from './_format/id-create'
 import EtapesTypes from './etapes-types'
 import TitresDemarches from './titres-demarches'
-import Substances from './substances'
 import TitresPoints from './titres-points'
 import Entreprises from './entreprises'
 import Administrations from './administrations'
@@ -50,7 +49,8 @@ class TitresEtapes extends Model {
       heritageProps: { type: ['object', 'null'] },
       decisionsAnnexesSections: {},
       decisionsAnnexesContenu: { type: ['object', 'null'] },
-      archive: { type: 'boolean' }
+      archive: { type: 'boolean' },
+      substances: { type: 'array' }
     }
   }
 
@@ -73,20 +73,6 @@ class TitresEtapes extends Model {
       }
     },
 
-    substances: {
-      relation: Model.ManyToManyRelation,
-      modelClass: Substances,
-      join: {
-        from: 'titresEtapes.id',
-        through: {
-          from: 'titresSubstances.titreEtapeId',
-          to: 'titresSubstances.substanceId',
-          extra: ['ordre']
-        },
-        to: 'substances.id'
-      }
-    },
-
     points: {
       relation: Model.HasManyRelation,
       modelClass: TitresPoints,
diff --git a/packages/api/src/database/models/titres.ts b/packages/api/src/database/models/titres.ts
index cdc8973dfba4b141bff14d15e72ee21200ad557e..e1f4d03f7c1a3e5cafbcab8b3babc42f35e7c28f 100644
--- a/packages/api/src/database/models/titres.ts
+++ b/packages/api/src/database/models/titres.ts
@@ -7,7 +7,6 @@ import Communes from './communes'
 import Domaines from './domaines'
 import Entreprises from './entreprises'
 import TitresStatuts from './titres-statuts'
-import Substances from './substances'
 import TitresDemarches from './titres-demarches'
 import TitresEtapes from './titres-etapes'
 import TitresPoints from './titres-points'
@@ -90,17 +89,12 @@ class Titres extends Model {
       }
     },
 
-    substances: {
-      relation: Model.ManyToManyRelation,
-      modelClass: Substances,
+    substancesEtape: {
+      relation: Model.BelongsToOneRelation,
+      modelClass: TitresEtapes,
       join: {
         from: ref('titres.propsTitreEtapesIds:substances').castText(),
-        through: {
-          from: 'titresSubstances.titreEtapeId',
-          to: 'titresSubstances.substanceId',
-          extra: ['ordre']
-        },
-        to: 'substances.id'
+        to: 'titresEtapes.id'
       }
     },
 
@@ -270,6 +264,10 @@ class Titres extends Model {
         this.demarches
       )
     }
+
+    if (this.substancesEtape) {
+      this.substances = this.substancesEtape.substances
+    }
   }
 
   public $parseJson(json: Pojo) {
diff --git a/packages/api/src/database/queries/_options.ts b/packages/api/src/database/queries/_options.ts
index 8535fb1b6918f40834ff6f951a1fd30206a1ba9f..e393a17c94c2e7e17457f44740a71e44cd1b6088 100644
--- a/packages/api/src/database/queries/_options.ts
+++ b/packages/api/src/database/queries/_options.ts
@@ -1,7 +1,3 @@
-const substances = {
-  graph: `legales.domaine`
-}
-
 const points = {
   graph: `references`
 }
@@ -79,7 +75,6 @@ const titresEtapesRelateTrue = [
   'titulaires',
   'amodiataires',
   'administrations',
-  'substances',
   'communes',
   'forets',
   'justificatifs'
@@ -94,7 +89,6 @@ const titresEtapesRelateFalse = [
   'amodiataires.utilisateurs',
   'administrations.titresTypes',
   'administrations.utilisateurs',
-  'substances.legales',
   ...documentsRelateFalse.map(k => `documents.${k}`),
   ...documentsRelateFalse.map(k => `justificatifs.${k}`)
 ]
@@ -105,7 +99,6 @@ const titresEtapes = {
     type,
     documents.${documents.graph},
     justificatifs.${documents.graph},
-    substances(orderAsc).${substances.graph},
     titulaires.${entreprises.graph},
     amodiataires.${entreprises.graph},
     administrations.${administrations.graph},
@@ -235,9 +228,7 @@ const titresRelateFalse = [
   'points.references',
   'communes',
   'forets',
-  'substances',
-  'substances.legales',
-  'substances.legales.domaine',
+  'substancesEtape',
   'titulaires',
   'titulaires.etablissements',
   'titulaires.utilisateurs',
@@ -265,7 +256,6 @@ const titres = {
     domaine.${domaines.graph},
     statut,
     points(orderAsc).${points.graph},
-    substances(orderAsc).${substances.graph},
     titulaires.${entreprises.graph},
     amodiataires.${entreprises.graph},
     administrationsGestionnaires.${administrations.graph},
@@ -300,7 +290,6 @@ export default {
   entreprises,
   entreprisesEtablissements,
   points,
-  substances,
   titres,
   titresActivites,
   titresDemarches,
diff --git a/packages/api/src/database/queries/_titres-filters.ts b/packages/api/src/database/queries/_titres-filters.ts
index 6d260492a783e59ca7ebad6db01e5b2244217338..80486d910b8a498216601dfd7e894f1e09fc7c7b 100644
--- a/packages/api/src/database/queries/_titres-filters.ts
+++ b/packages/api/src/database/queries/_titres-filters.ts
@@ -31,11 +31,10 @@ export const titresFiltersQueryModify = (
     domainesIds,
     typesIds,
     statutsIds,
-    substancesLegalesIds,
+    substancesIds,
     entreprisesIds,
     noms,
     entreprises,
-    substances,
     references,
     territoires
   }: {
@@ -44,11 +43,10 @@ export const titresFiltersQueryModify = (
     domainesIds?: string[] | null
     typesIds?: string[] | null
     statutsIds?: string[] | null
-    substancesLegalesIds?: string[] | null
+    substancesIds?: string[] | null
     entreprisesIds?: string[] | null
     noms?: string | null
     entreprises?: string | null
-    substances?: string | null
     references?: string | null
     territoires?: string | null
   } = {},
@@ -94,14 +92,17 @@ export const titresFiltersQueryModify = (
     q.whereIn(`${name}.statutId`, statutsIds)
   }
 
-  if (substancesLegalesIds?.length) {
+  if (substancesIds?.length) {
     if (name === 'titre') {
       q.leftJoinRelated('titre')
     }
 
-    q.leftJoinRelated(jointureFormat(name, 'substances.legales'))
+    q.leftJoinRelated(jointureFormat(name, 'substancesEtape'))
 
-    q.whereIn(fieldFormat(name, 'substances:legales.id'), substancesLegalesIds)
+    q.whereRaw('?? @> ?', [
+      fieldFormat(name, 'substancesEtape.substances'),
+      JSON.stringify(substancesIds)
+    ])
   }
 
   if (entreprisesIds?.length) {
@@ -179,44 +180,6 @@ export const titresFiltersQueryModify = (
       )
   }
 
-  if (substances) {
-    const substancesArray = stringSplit(substances)
-
-    let fields = [
-      'substances.nom',
-      'substances.id',
-      'substances:legales.nom',
-      'substances:legales.id'
-    ]
-
-    if (name === 'titre') {
-      fields = fields.map(field => fieldFormat(name, field))
-    }
-
-    q.leftJoinRelated(jointureFormat(name, 'substances.legales'))
-      .where(b => {
-        substancesArray.forEach(s => {
-          fields.forEach(f => {
-            b.orWhereRaw(`lower(??) like ?`, [f, `%${s.toLowerCase()}%`])
-          })
-        })
-      })
-      .groupBy(`${root}.id`)
-      .havingRaw(
-        `(${substancesArray
-          .map(
-            () =>
-              'count(*) filter (where ' +
-              fields.map(() => 'lower(??) like ?').join(' or ') +
-              ') > 0'
-          )
-          .join(') and (')})`,
-        substancesArray.flatMap(s =>
-          fields.flatMap(f => [f, `%${s.toLowerCase()}%`])
-        )
-      )
-  }
-
   if (references) {
     const referencesArray = stringSplit(references)
 
diff --git a/packages/api/src/database/queries/graph/fields-add.ts b/packages/api/src/database/queries/graph/fields-add.ts
index 71b21ec21832facf31fc080d37b886a727805005..b4a0b7ca9a74f5e266ef072efcf5ca9cd46fe2a8 100644
--- a/packages/api/src/database/queries/graph/fields-add.ts
+++ b/packages/api/src/database/queries/graph/fields-add.ts
@@ -86,6 +86,12 @@ const titresFieldsAdd = (fields: IFields) => {
     }
   }
 
+  if (fields.substances) {
+    if (!fields.substancesEtape) {
+      fields.substancesEtape = { id: {} }
+    }
+  }
+
   return fields
 }
 
diff --git a/packages/api/src/database/queries/graph/fields-format.ts b/packages/api/src/database/queries/graph/fields-format.ts
index 9bbd708f354c5d627adffddee6bbc949ef61cc2c..0488e6ca769f27a6904ffb6d2d31dd5564703b2f 100644
--- a/packages/api/src/database/queries/graph/fields-format.ts
+++ b/packages/api/src/database/queries/graph/fields-format.ts
@@ -2,7 +2,6 @@ const fieldsOrderDesc = ['etablissements', 'demarches', 'activites']
 const fieldsOrderAsc = [
   'domaines',
   'points',
-  'substances',
   'references',
   'etapesTypes',
   'titresTypes',
@@ -199,10 +198,6 @@ export const fieldsFormat = (fields: IFields, parent: string) => {
       fields.points = { id: {} }
     }
 
-    if (!fields.substances) {
-      fields.substances = { id: {} }
-    }
-
     if (!fields.sdomZones) {
       fields.sdomZones = { id: {} }
     }
diff --git a/packages/api/src/database/queries/substances.ts b/packages/api/src/database/queries/substances.ts
deleted file mode 100644
index 00ce8b33ce3274d9c72388da1c883675d6dec4c1..0000000000000000000000000000000000000000
--- a/packages/api/src/database/queries/substances.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { ISubstanceLegale } from '../../types'
-
-import options from './_options'
-
-import Substances from '../models/substances'
-import SubstancesLegales from '../models/substances-legales'
-
-const substancesGet = async () =>
-  Substances.query().withGraphFetched(options.substances.graph).orderBy('nom')
-
-const substanceGet = async (id: string) =>
-  Substances.query().findById(id).withGraphFetched(options.substances.graph)
-
-const substancesLegalesGet = async ({ distinct }: { distinct: string }) => {
-  const query = SubstancesLegales.query()
-  if (distinct) {
-    query.distinctOn(distinct)
-  }
-
-  return query
-}
-
-const substanceFiscaleCreate = async (substanceLegale: ISubstanceLegale) =>
-  SubstancesLegales.query().insertAndFetch(substanceLegale)
-
-export {
-  substancesGet,
-  substanceGet,
-  substancesLegalesGet,
-  substanceFiscaleCreate
-}
diff --git a/packages/api/src/database/queries/titres-activites.ts b/packages/api/src/database/queries/titres-activites.ts
index 072e992732749516a9b08ac7f1d8370e16dc0814..a982ddb8dc560d321ba6f34677879877dbdcdd93 100644
--- a/packages/api/src/database/queries/titres-activites.ts
+++ b/packages/api/src/database/queries/titres-activites.ts
@@ -48,7 +48,7 @@ const titresActivitesFiltersQueryModify = (
     annees,
     titresNoms,
     titresEntreprises,
-    titresSubstances,
+    titresSubstancesIds,
     titresReferences,
     titresTerritoires,
     titresTypesIds,
@@ -61,7 +61,7 @@ const titresActivitesFiltersQueryModify = (
     annees?: number[] | null
     titresNoms?: string | null
     titresEntreprises?: string | null
-    titresSubstances?: string | null
+    titresSubstancesIds?: string[] | null
     titresReferences?: string | null
     titresTerritoires?: string | null
     titresTypesIds?: string[] | null
@@ -94,7 +94,7 @@ const titresActivitesFiltersQueryModify = (
       statutsIds: titresStatutsIds,
       noms: titresNoms,
       entreprises: titresEntreprises,
-      substances: titresSubstances,
+      substancesIds: titresSubstancesIds,
       references: titresReferences,
       territoires: titresTerritoires
     },
@@ -228,7 +228,7 @@ const titresActivitesGet = async (
     annees,
     titresNoms,
     titresEntreprises,
-    titresSubstances,
+    titresSubstancesIds,
     titresReferences,
     titresTerritoires,
     titresTypesIds,
@@ -245,7 +245,7 @@ const titresActivitesGet = async (
     annees?: number[] | null
     titresNoms?: string | null
     titresEntreprises?: string | null
-    titresSubstances?: string | null
+    titresSubstancesIds?: string[] | null
     titresReferences?: string | null
     titresTerritoires?: string | null
     titresTypesIds?: string[] | null
@@ -265,7 +265,7 @@ const titresActivitesGet = async (
       annees,
       titresNoms,
       titresEntreprises,
-      titresSubstances,
+      titresSubstancesIds,
       titresReferences,
       titresTerritoires,
       titresTypesIds,
@@ -330,7 +330,7 @@ const titresActivitesCount = async (
     annees,
     titresNoms,
     titresEntreprises,
-    titresSubstances,
+    titresSubstancesIds,
     titresReferences,
     titresTerritoires,
     titresTypesIds,
@@ -342,7 +342,7 @@ const titresActivitesCount = async (
     annees?: number[] | null
     titresNoms?: string | null
     titresEntreprises?: string | null
-    titresSubstances?: string | null
+    titresSubstancesIds?: string[] | null
     titresReferences?: string | null
     titresTerritoires?: string | null
     titresTypesIds?: string[] | null
@@ -361,7 +361,7 @@ const titresActivitesCount = async (
       annees,
       titresNoms,
       titresEntreprises,
-      titresSubstances,
+      titresSubstancesIds,
       titresReferences,
       titresTerritoires,
       titresTypesIds,
diff --git a/packages/api/src/database/queries/titres-demarches.ts b/packages/api/src/database/queries/titres-demarches.ts
index 7f5db74ef2d2a9ee556baa49b22bc0546b5b1f4a..83a974dc649d3043a98febd5c4816850eb87b6d9 100644
--- a/packages/api/src/database/queries/titres-demarches.ts
+++ b/packages/api/src/database/queries/titres-demarches.ts
@@ -69,7 +69,7 @@ const titresDemarchesFiltersQueryModify = (
     titresStatutsIds,
     titresNoms,
     titresEntreprises,
-    titresSubstances,
+    titresSubstancesIds,
     titresReferences,
     titresTerritoires,
     travaux
@@ -84,7 +84,7 @@ const titresDemarchesFiltersQueryModify = (
     titresStatutsIds?: string[] | null
     titresNoms?: string | null
     titresEntreprises?: string | null
-    titresSubstances?: string | null
+    titresSubstancesIds?: string[] | null
     titresReferences?: string | null
     titresTerritoires?: string | null
     travaux?: boolean | null
@@ -131,7 +131,7 @@ const titresDemarchesFiltersQueryModify = (
       statutsIds: titresStatutsIds,
       noms: titresNoms,
       entreprises: titresEntreprises,
-      substances: titresSubstances,
+      substancesIds: titresSubstancesIds,
       references: titresReferences,
       territoires: titresTerritoires
     },
@@ -168,7 +168,7 @@ const titresDemarchesCount = async (
     titresStatutsIds,
     titresNoms,
     titresEntreprises,
-    titresSubstances,
+    titresSubstancesIds,
     titresReferences,
     titresTerritoires,
     travaux
@@ -183,7 +183,7 @@ const titresDemarchesCount = async (
     titresStatutsIds?: string[] | null
     titresNoms?: string | null
     titresEntreprises?: string | null
-    titresSubstances?: string | null
+    titresSubstancesIds?: string[] | null
     titresReferences?: string | null
     titresTerritoires?: string | null
     travaux?: boolean | null
@@ -205,7 +205,7 @@ const titresDemarchesCount = async (
       titresStatutsIds,
       titresNoms,
       titresEntreprises,
-      titresSubstances,
+      titresSubstancesIds,
       titresReferences,
       titresTerritoires,
       travaux
@@ -249,7 +249,7 @@ const titresDemarchesGet = async (
     titresStatutsIds,
     titresNoms,
     titresEntreprises,
-    titresSubstances,
+    titresSubstancesIds,
     titresReferences,
     titresTerritoires,
     travaux
@@ -268,7 +268,7 @@ const titresDemarchesGet = async (
     titresStatutsIds?: string[] | null
     titresNoms?: string | null
     titresEntreprises?: string | null
-    titresSubstances?: string | null
+    titresSubstancesIds?: string[] | null
     titresReferences?: string | null
     titresTerritoires?: string | null
     travaux?: boolean | null
@@ -290,7 +290,7 @@ const titresDemarchesGet = async (
       titresStatutsIds,
       titresNoms,
       titresEntreprises,
-      titresSubstances,
+      titresSubstancesIds,
       titresReferences,
       titresTerritoires,
       travaux
diff --git a/packages/api/src/database/queries/titres-etapes.ts b/packages/api/src/database/queries/titres-etapes.ts
index a001b1349851b7caae34f85382aa6cd3085102d4..a3684dbe228e1334d7156de6836d80935e645f5f 100644
--- a/packages/api/src/database/queries/titres-etapes.ts
+++ b/packages/api/src/database/queries/titres-etapes.ts
@@ -8,8 +8,6 @@ import {
   ITitreForet,
   ITitreSDOMZone
 } from '../../types'
-import { knex } from '../../knex'
-
 import options from './_options'
 import graphBuild from './graph/build'
 import { fieldsFormat } from './graph/fields-format'
@@ -148,14 +146,6 @@ const titresEtapesCommunesUpdate = async (
     insertMissing: true
   })
 
-export const titreEtapeMaxSubstanceOrdre = async (titreEtapeId: string) => {
-  const result = await knex('titresSubstances')
-    .max('ordre as maxId')
-    .where({ titreEtapeId })
-    .first()
-
-  return typeof result?.maxId === 'number' ? result.maxId : 0
-}
 const titreEtapeCommuneDelete = async (
   titreEtapeId: string,
   communeId: string
diff --git a/packages/api/src/database/queries/titres.ts b/packages/api/src/database/queries/titres.ts
index a2780d2d361b31517f9ae4b52fad555561597b9a..a5e65c11d572df1c3f79565ae6d0d2bd9fc36bcf 100644
--- a/packages/api/src/database/queries/titres.ts
+++ b/packages/api/src/database/queries/titres.ts
@@ -80,11 +80,6 @@ const titresColonnes = {
   type: { id: 'type:type.nom', relation: 'type.type' },
   statut: { id: 'statutId', groupBy: ['titres.statutId'] },
   activites: { id: 'activites', groupBy: [] },
-  substances: {
-    id: raw(`STRING_AGG("substances"."nom", ' ; ')`),
-    relation: 'substances',
-    groupBy: []
-  },
   titulaires: {
     id: raw(`STRING_AGG("titulaires"."nom", ' ; ')`),
     relation: 'titulaires',
@@ -119,9 +114,8 @@ const titresGet = async (
     domainesIds,
     typesIds,
     statutsIds,
-    substancesLegalesIds,
+    substancesIds,
     entreprisesIds,
-    substances,
     noms,
     entreprises,
     references,
@@ -138,9 +132,8 @@ const titresGet = async (
     domainesIds?: string[] | null
     typesIds?: string[] | null
     statutsIds?: string[] | null
-    substancesLegalesIds?: string[] | null
+    substancesIds?: string[] | null
     entreprisesIds?: string[] | null
-    substances?: string | null
     noms?: string | null
     entreprises?: string | null
     references?: string | null
@@ -164,11 +157,10 @@ const titresGet = async (
       domainesIds,
       typesIds,
       statutsIds,
-      substancesLegalesIds,
+      substancesIds,
       entreprisesIds,
       noms,
       entreprises,
-      substances,
       references,
       territoires
     },
@@ -242,8 +234,7 @@ const titresCount = async (
     domainesIds,
     typesIds,
     statutsIds,
-    substances,
-    substancesLegalesIds,
+    substancesIds,
     entreprisesIds,
     noms,
     entreprises,
@@ -255,9 +246,8 @@ const titresCount = async (
     domainesIds?: string[] | null
     typesIds?: string[] | null
     statutsIds?: string[] | null
-    substancesLegalesIds?: string[] | null
+    substancesIds?: string[] | null
     entreprisesIds?: string[] | null
-    substances?: string | null
     noms?: string | null
     entreprises?: string | null
     references?: string | null
@@ -275,11 +265,10 @@ const titresCount = async (
       domainesIds,
       typesIds,
       statutsIds,
-      substancesLegalesIds,
+      substancesIds,
       entreprisesIds,
       noms,
       entreprises,
-      substances,
       references,
       territoires
     },
diff --git a/packages/api/src/knex/migrations-data/20220726122406_activites-fiscales-unites-fix.js b/packages/api/src/knex/migrations-data/20220726122406_activites-fiscales-unites-fix.js
index 50868ff0b1495927909bd8f137dd885408de4314..f47f19eb16b12b593ca3d3c05b9997a1656da7ea 100644
--- a/packages/api/src/knex/migrations-data/20220726122406_activites-fiscales-unites-fix.js
+++ b/packages/api/src/knex/migrations-data/20220726122406_activites-fiscales-unites-fix.js
@@ -1,7 +1,7 @@
 const {
   SUBSTANCES_FISCALES_IDS,
   SubstancesFiscale
-} = require('camino-common/src/static/substance')
+} = require('camino-common/src/static/substancesFiscales')
 const { Unites } = require('camino-common/src/static/unites')
 exports.up = async knex => {
   const activites = await knex('titres_activites')
diff --git a/packages/api/src/knex/migrations-data/20220816140444_substances-ordre-required.js b/packages/api/src/knex/migrations-data/20220816140444_substances-ordre-required.js
new file mode 100644
index 0000000000000000000000000000000000000000..483d3dc82f8d068acb6a9aaa49fb0cdac185f375
--- /dev/null
+++ b/packages/api/src/knex/migrations-data/20220816140444_substances-ordre-required.js
@@ -0,0 +1,27 @@
+exports.up = async knex => {
+  await knex('titres_substances').whereNull('ordre').update({ ordre: 0 })
+
+  const titresSubstances = await knex('titres_substances')
+
+  const groupByTitres = titresSubstances.reduce((acc, ts) => {
+    if (!acc[ts.titreEtapeId]) {
+      acc[ts.titreEtapeId] = []
+    }
+    acc[ts.titreEtapeId].push(ts)
+
+    return acc
+  }, {})
+
+  for (const titreSubstances of Object.values(groupByTitres)) {
+    titreSubstances.sort((a, b) => a.ordre - b.ordre)
+    for (let index = 0; index < titreSubstances.length; index++) {
+      const ts = titreSubstances[index]
+      await knex('titres_substances')
+        .where('titreEtapeId', ts.titreEtapeId)
+        .where('substanceId', ts.substanceId)
+        .update('ordre', index)
+    }
+  }
+}
+
+exports.down = () => ({})
diff --git a/packages/api/src/knex/migrations-schema/20220816143105_substances-delete.js b/packages/api/src/knex/migrations-schema/20220816143105_substances-delete.js
new file mode 100644
index 0000000000000000000000000000000000000000..a91ea87bc65d9757f8c5510caf050c4a7cb37e54
--- /dev/null
+++ b/packages/api/src/knex/migrations-schema/20220816143105_substances-delete.js
@@ -0,0 +1,58 @@
+exports.up = async knex => {
+  await knex.schema.alterTable('titres_substances', function (table) {
+    table.dropForeign('substance_id', 'titressubstances_substanceid_foreign')
+    table.integer('ordre').notNullable().alter()
+  })
+
+  await knex.raw('DROP INDEX titre_etape_id_unique')
+  await knex.raw('DROP INDEX titre_etape_id_ordre_unique')
+  await knex.raw(
+    'CREATE UNIQUE INDEX titre_etape_id_ordre_unique on titres_substances(titre_etape_id, ordre)'
+  )
+
+  await knex.schema.dropTable('substances__substances_legales')
+  await knex.schema.dropTable('substances_legales')
+  await knex.schema.dropTable('substances')
+
+  await knex('titres_substances')
+    .where('substance_id', 'suco')
+    .update({ substance_id: 'scoc' })
+
+  await knex('titres_substances')
+    .where('substance_id', 'scor')
+    .update({ substance_id: 'scoc' })
+
+  await knex('titres_substances')
+    .where('substance_id', 'bitm')
+    .update({ substance_id: 'hydm' })
+
+  await knex.schema.alterTable('titres_etapes', function (table) {
+    table.jsonb('substances').index()
+  })
+  const titresSubstances = await knex('titres_substances')
+
+  const substanceIdsByTitre = titresSubstances.reduce((acc, ts) => {
+    if (!acc[ts.titreEtapeId]) {
+      acc[ts.titreEtapeId] = []
+    }
+    acc[ts.titreEtapeId].push(ts)
+
+    return acc
+  }, {})
+
+  for (const titreEtapeId in substanceIdsByTitre) {
+    await knex('titres_etapes')
+      .where('id', titreEtapeId)
+      .update({
+        substances: JSON.stringify(
+          substanceIdsByTitre[titreEtapeId]
+            .sort((a, b) => a.ordre - b.ordre)
+            .map(({ substanceId }) => substanceId)
+        )
+      })
+  }
+
+  await knex.schema.dropTable('titres_substances')
+}
+
+exports.down = () => ({})
diff --git a/packages/api/src/knex/seeds/04-substances.js b/packages/api/src/knex/seeds/04-substances.js
deleted file mode 100644
index d80a11709573238d6bdb52c03ce5171acbc21c48..0000000000000000000000000000000000000000
--- a/packages/api/src/knex/seeds/04-substances.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const seeding = require('../seeding')
-
-const substances = require('../../../sources/substances.json')
-const substancesLegales = require('../../../sources/substances-legales.json')
-const substancesSubstancesLegales = require('../../../sources/substances--substances-legales.json')
-
-const seed = seeding(async ({ insert }) => {
-  await insert('substancesLegales', substancesLegales)
-  await insert('substances', substances)
-  await insert('substances__substancesLegales', substancesSubstancesLegales)
-})
-
-module.exports = seed
-
-module.exports.seed = seed
diff --git a/packages/api/src/tools/api-openfisca/index.ts b/packages/api/src/tools/api-openfisca/index.ts
index d55825aba4dc00d192b2bf4610c238c92f934fd3..ee1b64fb27bedef6a11432fea9e8987682ee55e2 100644
--- a/packages/api/src/tools/api-openfisca/index.ts
+++ b/packages/api/src/tools/api-openfisca/index.ts
@@ -1,5 +1,5 @@
 import fetch, { Response } from 'node-fetch'
-import { SubstanceFiscale } from 'camino-common/src/static/substance'
+import { SubstanceFiscale } from 'camino-common/src/static/substancesFiscales'
 import { Unite, Unites } from 'camino-common/src/static/unites'
 type Attribute =
   | 'surface_communale'
diff --git a/packages/api/src/tools/database-to-json/tables.ts b/packages/api/src/tools/database-to-json/tables.ts
index a43769c36af2f3f7d764c2cc2f11fcc0e8cc20f5..d7648824b5f0b117a38d07178eabf098bfc0aca2 100644
--- a/packages/api/src/tools/database-to-json/tables.ts
+++ b/packages/api/src/tools/database-to-json/tables.ts
@@ -54,12 +54,6 @@ export const tables = [
   { name: 'mois', orderBy: ['id'] },
   { name: 'phases_statuts', orderBy: ['id'] },
   { name: 'references_types', orderBy: ['id'] },
-  { name: 'substances', orderBy: ['id'] },
-  {
-    name: 'substances__substances_legales',
-    orderBy: ['substance_id', 'substance_legale_id']
-  },
-  { name: 'substances_legales', orderBy: ['id'] },
   { name: 'titres', orderBy: ['id'] },
   { name: 'titres_activites', orderBy: ['id'] },
   {
@@ -88,7 +82,6 @@ export const tables = [
   { name: 'titres_points_references', orderBy: ['id'] },
   { name: 'titres_references', orderBy: ['titre_id', 'type_id'] },
   { name: 'titres_statuts', orderBy: ['id'] },
-  { name: 'titres_substances', orderBy: ['titre_etape_id', 'substance_id'] },
   { name: 'titres_titulaires', orderBy: ['titre_etape_id', 'entreprise_id'] },
   { name: 'titres_types', orderBy: ['id'] },
   {
diff --git a/packages/api/src/types.ts b/packages/api/src/types.ts
index 83d9b805c1cb14814d6653e7e49dd46bc04494a4..020404a329b08f14537bd658b258621ad6211004 100644
--- a/packages/api/src/types.ts
+++ b/packages/api/src/types.ts
@@ -15,6 +15,8 @@ import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes'
 import { EtapeStatutId } from 'camino-common/src/static/etapesStatuts'
 import { Couleur } from 'camino-common/src/static/couleurs'
 import { EtapeTypeId } from 'camino-common/src/static/etapesTypes'
+import { SubstanceLegaleId } from 'camino-common/src/static/substancesLegales'
+import { UniteId } from 'camino-common/src/static/unites'
 
 const DemarchesStatutsTypesIds = {
   Accepte: 'acc',
@@ -209,6 +211,7 @@ interface ISectionElement {
   valeurs?: { id: string; nom: string }[] | null
   valeursMetasNom?: IValeurMetasNom
   referenceUniteRatio?: number
+  uniteId?: UniteId
   optionnel?: boolean
   elements?: ISectionElement[]
 }
@@ -582,27 +585,6 @@ interface ITitreStatut {
   ordre: number
 }
 
-interface ISubstanceLegale {
-  id: string
-  nom: string
-  domaineId?: string | null
-  description?: string | null
-  domaine?: IDomaine | null
-}
-
-interface ISubstance {
-  id: string
-  nom?: string | null
-  symbole?: string | null
-  gerep?: number | null
-  description?: string | null
-  legales?: ISubstanceLegale[]
-}
-
-interface ITitreSubstance extends ISubstance {
-  ordre?: number
-}
-
 export interface ITitreTitre {
   titreFromId: string
   titreToId: string
@@ -625,7 +607,8 @@ interface ITitre {
   activitesDeposees?: number | null
   activitesEnConstruction?: number | null
   activitesAbsentes?: number | null
-  substances?: ITitreSubstance[] | null
+  substancesEtape?: ITitreEtape | null
+  substances?: SubstanceLegaleId[] | null
   points?: ITitrePoint[] | null
   coordonnees?: ICoordonnees | null
   geojsonMultiPolygon?: IGeoJson | null
@@ -788,7 +771,7 @@ interface ITitreEtape {
   demarche?: ITitreDemarche
   dateDebut?: string | null
   dateFin?: string | null
-  substances?: ITitreSubstance[] | null
+  substances?: SubstanceLegaleId[] | null
   points?: ITitrePoint[] | null
   geojsonMultiPolygon?: IGeoJson | null
   geojsonPoints?: IGeoJson | null
@@ -1033,9 +1016,6 @@ export {
   IAdministrationActiviteType,
   IAdministrationActiviteTypeEmail,
   ITitreStatut,
-  ISubstance,
-  ISubstanceLegale,
-  ITitreSubstance,
   ITitre,
   ITitreActivite,
   ITitreAdministration,
diff --git a/packages/api/tests/_utils/administrations-permissions.ts b/packages/api/tests/_utils/administrations-permissions.ts
index fc7841b58ed048e2456e8c066abd3589965335c4..46f25687e40a01f6019d167e952bc4c96b3e850c 100644
--- a/packages/api/tests/_utils/administrations-permissions.ts
+++ b/packages/api/tests/_utils/administrations-permissions.ts
@@ -230,7 +230,7 @@ const creationCheck = async (
           ),
           heritageContenu,
           contenu,
-          substances: [{ id: 'auru' }],
+          substances: ['auru'],
           points: [
             {
               groupe: 1,
diff --git a/packages/api/tests/queries/substance-variables.json b/packages/api/tests/queries/substance-variables.json
deleted file mode 100644
index dd5fcf6f5a0d5d0e021802b13b108e61c5ac27fb..0000000000000000000000000000000000000000
--- a/packages/api/tests/queries/substance-variables.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "id": "acti"
-}
diff --git a/packages/api/tests/queries/substance.graphql b/packages/api/tests/queries/substance.graphql
deleted file mode 100644
index 3d5b7a40f33de0582a49dbc0d27e0403328a058f..0000000000000000000000000000000000000000
--- a/packages/api/tests/queries/substance.graphql
+++ /dev/null
@@ -1,22 +0,0 @@
-query Substance($id: ID!) {
-  substance(id: $id) {
-    ...substance
-  }
-}
-
-fragment substance on Substance {
-  id
-  nom
-  symbole
-  gerep
-  description
-  legales {
-    id
-    nom
-    description
-    domaine {
-      id
-      nom
-    }
-  }
-}
diff --git a/packages/api/tests/queries/substances.graphql b/packages/api/tests/queries/substances.graphql
index ebcd66a8cb0e030fc86eb73642ae9ace94339659..525555f2ee4e2fb23455fbfed94163b702626112 100644
--- a/packages/api/tests/queries/substances.graphql
+++ b/packages/api/tests/queries/substances.graphql
@@ -7,16 +7,5 @@ query {
 fragment substance on Substance {
   id
   nom
-  symbole
-  gerep
   description
-  legales {
-    id
-    nom
-    description
-    domaine {
-      id
-      nom
-    }
-  }
 }
diff --git a/packages/api/tests/queries/titre.graphql b/packages/api/tests/queries/titre.graphql
index 039a14c5c304950ebe4c0f680f360a861fe02f69..7358c2f2740c14076e2714452212ceb2a4133ace 100644
--- a/packages/api/tests/queries/titre.graphql
+++ b/packages/api/tests/queries/titre.graphql
@@ -29,9 +29,7 @@ fragment titre on Titre {
     nom
   }
   surface
-  substances {
-    ...titreSubstance
-  }
+  substances
   administrations {
     ...administration
   }
@@ -139,9 +137,7 @@ fragment etape on Etape {
   geojsonMultiPolygon {
     ...geojsonMultiPolygon
   }
-  substances {
-    ...titreSubstance
-  }
+  substances
   documents {
     ...document
   }
@@ -247,22 +243,6 @@ fragment geojsonPoints on GeojsonPoints {
   }
 }
 
-fragment titreSubstance on TitreSubstance {
-  id
-  nom
-  gerep
-  description
-  legales {
-    id
-    nom
-    description
-    domaine {
-      id
-      nom
-    }
-  }
-}
-
 fragment document on Document {
   id
   url
diff --git a/packages/api/tests/queries/titres-min.graphql b/packages/api/tests/queries/titres-min.graphql
index 149e6c6fe9f7346be2da2429bee639e63373ee69..5c1f16cd3a6a16751309f1d803cbeb7fa9b1eea0 100644
--- a/packages/api/tests/queries/titres-min.graphql
+++ b/packages/api/tests/queries/titres-min.graphql
@@ -49,9 +49,7 @@ fragment titre on Titre {
     couleur
   }
   surface
-  substances {
-    ...substance
-  }
+  substances
   administrations {
     ...administration
   }
@@ -126,19 +124,3 @@ fragment geojsonMultiPolygon on GeojsonMultiPolygon {
     coordinates
   }
 }
-
-fragment substance on TitreSubstance {
-  id
-  nom
-  gerep
-  description
-  legales {
-    id
-    nom
-    description
-    domaine {
-      id
-      nom
-    }
-  }
-}
diff --git a/packages/api/tests/queries/titres-variables.json b/packages/api/tests/queries/titres-variables.json
index c9e25254dad0625c1d80f29b103c8f37a32139ca..72d34c9dd688555ae1ec27c4e6c170da1f0aaefc 100644
--- a/packages/api/tests/queries/titres-variables.json
+++ b/packages/api/tests/queries/titres-variables.json
@@ -6,7 +6,7 @@
   "domainesIds": ["c", "f", "g", "h", "m", "r", "s", "w"],
   "typesIds": ["ap", "ar", "ax", "cx", "pc", "pr", "px"],
   "statutsIds": ["dmc", "dmi", "ech", "ind", "mod", "val"],
-  "substances": null,
+  "substancesIds": null,
   "noms": null,
   "entreprises": null,
   "references": null,
diff --git a/packages/api/tests/queries/titres.graphql b/packages/api/tests/queries/titres.graphql
index 2a87eb09bc253c93fc352d4c17ec1fbcaab4597d..72b4bd54a63a4e027a8aa9e6378cae7a075226f1 100644
--- a/packages/api/tests/queries/titres.graphql
+++ b/packages/api/tests/queries/titres.graphql
@@ -2,7 +2,7 @@ query Titres(
   $domainesIds: [ID!]
   $typesIds: [ID!]
   $statutsIds: [ID!]
-  $substances: String
+  $substancesIds: String
   $noms: String
   $entreprises: String
   $references: String
@@ -12,7 +12,7 @@ query Titres(
     domainesIds: $domainesIds
     typesIds: $typesIds
     statutsIds: $statutsIds
-    substances: $substances
+    substancesIds: $substancesIds
     noms: $noms
     entreprises: $entreprises
     references: $references
@@ -48,9 +48,7 @@ fragment titre on Titre {
     ...reference
   }
   surface
-  substances {
-    ...titreSubstance
-  }
+  substances
   administrations {
     ...administration
   }
@@ -111,9 +109,7 @@ fragment etape on Etape {
     nom
   }
   statutId
-  substances {
-    ...titreSubstance
-  }
+  substances
   administrations {
     ...administration
   }
@@ -236,24 +232,6 @@ fragment geojsonPoints on GeojsonPoints {
   }
 }
 
-fragment titreSubstance on TitreSubstance {
-  id
-  nom
-  ordre
-  symbole
-  gerep
-  description
-  legales {
-    id
-    nom
-    description
-    domaine {
-      id
-      nom
-    }
-  }
-}
-
 fragment document on Document {
   id
   type {
diff --git a/packages/common/src/etape.ts b/packages/common/src/etape.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4a6008a013235bd6b645cb97fa4ea59becbfc4ef
--- /dev/null
+++ b/packages/common/src/etape.ts
@@ -0,0 +1,26 @@
+import { SubstanceLegaleId } from './static/substancesLegales'
+
+export interface HeritageProp {
+  actif: boolean
+  etape: Etape
+}
+
+export interface Etape {
+  contenu: { [key: string]: unknown }
+  date: string
+  type: { nom: string }
+  incertitudes: { [key: string]: boolean }
+  substances: SubstanceLegaleId[]
+  duree: number
+  dateDebut: string
+  dateFin: string
+  titulaires: Entreprise[]
+  amodiataires: Entreprise[]
+}
+
+interface Entreprise {
+  id: string
+  nom: string
+  etablissements: []
+  operateur: boolean
+}
diff --git a/packages/common/src/fiscalite.test.ts b/packages/common/src/fiscalite.test.ts
index a4fa10eebbde3687b7344dbd566a4a1b10783d0a..00af1cbff0050889ef677c557c377bcdc76f1ac1 100644
--- a/packages/common/src/fiscalite.test.ts
+++ b/packages/common/src/fiscalite.test.ts
@@ -2,9 +2,7 @@ import { fiscaliteVisible, fraisGestion } from './fiscalite'
 import { Role } from './roles'
 
 test('fraisGestion', () => {
-  expect(
-    fraisGestion({ redevanceDepartementale: 50, redevanceCommunale: 50 })
-  ).toBe(8)
+  expect(fraisGestion({ redevanceDepartementale: 50, redevanceCommunale: 50 })).toBe(8)
   expect(
     fraisGestion({
       redevanceDepartementale: 50,
diff --git a/packages/common/src/fiscalite.ts b/packages/common/src/fiscalite.ts
index e954487a2641f22d387a63eb2476357082b86853..1caecf4fe292d2ebc52cd672b896872c2fe8cbc5 100644
--- a/packages/common/src/fiscalite.ts
+++ b/packages/common/src/fiscalite.ts
@@ -19,14 +19,9 @@ export const isFiscaliteGuyane = (fiscalite: Fiscalite): fiscalite is FiscaliteG
   return 'guyane' in fiscalite
 }
 
-export const montantNetTaxeAurifere = (fiscalite: Fiscalite) =>
-  isFiscaliteGuyane(fiscalite) ? fiscalite.guyane.taxeAurifere : 0
+export const montantNetTaxeAurifere = (fiscalite: Fiscalite) => (isFiscaliteGuyane(fiscalite) ? fiscalite.guyane.taxeAurifere : 0)
 
-export const fraisGestion = (fiscalite: Fiscalite) =>
-  (fiscalite.redevanceDepartementale +
-    fiscalite.redevanceCommunale +
-    montantNetTaxeAurifere(fiscalite)) *
-  0.08
+export const fraisGestion = (fiscalite: Fiscalite) => (fiscalite.redevanceDepartementale + fiscalite.redevanceCommunale + montantNetTaxeAurifere(fiscalite)) * 0.08
 
 export const fiscaliteVisible = (
   user:
diff --git a/packages/common/src/static/__snapshots__/substancesFiscales.test.ts.snap b/packages/common/src/static/__snapshots__/substancesFiscales.test.ts.snap
new file mode 100644
index 0000000000000000000000000000000000000000..54c85a43476a3065f6e09bd0b74370d8f10b8132
--- /dev/null
+++ b/packages/common/src/static/__snapshots__/substancesFiscales.test.ts.snap
@@ -0,0 +1,90 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`substancesFiscalesBySubstanceLegale 1`] = `
+Array [
+  Object {
+    "description": "contenu dans les minerais",
+    "id": "auru",
+    "nom": "or",
+    "openFisca": Object {
+      "nom": "aurifere",
+      "unite": "mkg",
+    },
+    "substanceLegaleId": "auru",
+    "uniteId": "mgr",
+  },
+]
+`;
+
+exports[`substancesFiscalesBySubstanceLegale 2`] = `
+Array [
+  Object {
+    "description": "bauxite nettes livrées",
+    "id": "aloh",
+    "nom": "bauxite",
+    "substanceLegaleId": "aloh",
+    "uniteId": "mtk",
+  },
+  Object {
+    "description": "contenu dans les minerais",
+    "id": "cuiv",
+    "nom": "cuivre",
+    "substanceLegaleId": "cuiv",
+    "uniteId": "mtt",
+  },
+  Object {
+    "description": "contenu dans les minerais",
+    "id": "etai",
+    "nom": "étain",
+    "openFisca": Object {
+      "nom": "etain",
+    },
+    "substanceLegaleId": "etai",
+    "uniteId": "mtt",
+  },
+  Object {
+    "description": "net livré",
+    "id": "fera",
+    "nom": "pyrite de fer",
+    "openFisca": Object {
+      "nom": "fer_pyrite",
+    },
+    "substanceLegaleId": "ferx",
+    "uniteId": "mtk",
+  },
+  Object {
+    "description": "net livré",
+    "id": "ferb",
+    "nom": "minerais de fer",
+    "openFisca": Object {
+      "nom": "fer",
+    },
+    "substanceLegaleId": "ferx",
+    "uniteId": "mtk",
+  },
+  Object {
+    "description": "contenu dans les minerais",
+    "id": "mang",
+    "nom": "manganèse",
+    "openFisca": Object {
+      "nom": "manganese",
+    },
+    "substanceLegaleId": "mang",
+    "uniteId": "mtc",
+  },
+  Object {
+    "description": "contenu dans les minerais",
+    "id": "plom",
+    "nom": "plomb",
+    "substanceLegaleId": "plom",
+    "uniteId": "mtc",
+  },
+  Object {
+    "description": "contenu dans les minerais",
+    "id": "zinc",
+    "nom": "zinc",
+    "substanceLegaleId": "zinc",
+    "uniteId": "mtc",
+  },
+]
+`;
diff --git a/packages/common/src/static/domaines.ts b/packages/common/src/static/domaines.ts
index 290c596cda96228af008d58f14271e01445590bb..f0ba712132296575ce2e71048dde828d36d5d00b 100644
--- a/packages/common/src/static/domaines.ts
+++ b/packages/common/src/static/domaines.ts
@@ -74,3 +74,5 @@ export const Domaines: { [key in DomaineId]: Definition<key> } = {
     ordre: 2
   }
 }
+
+export const sortedDomaines = Object.values(Domaines).sort((a, b) => a.ordre - b.ordre)
diff --git a/packages/common/src/static/substance.test.ts b/packages/common/src/static/substance.test.ts
deleted file mode 100644
index f4fd7e4e1192aec3fafab547c6bc1664d8a9f874..0000000000000000000000000000000000000000
--- a/packages/common/src/static/substance.test.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { isSubstanceFiscale } from './substance'
-
-test('isSubstanceFiscale', () => {
-  expect(isSubstanceFiscale('wolf')).toBe(true)
-  expect(isSubstanceFiscale('plop')).toBe(false)
-})
diff --git a/packages/common/src/static/substancesFiscales.test.ts b/packages/common/src/static/substancesFiscales.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a10a8b6013f08586e9a5c1263e6aa010b7026eab
--- /dev/null
+++ b/packages/common/src/static/substancesFiscales.test.ts
@@ -0,0 +1,11 @@
+import { isSubstanceFiscale, substancesFiscalesBySubstanceLegale } from './substancesFiscales'
+
+test('isSubstanceFiscale', () => {
+  expect(isSubstanceFiscale('wolf')).toBe(true)
+  expect(isSubstanceFiscale('plop')).toBe(false)
+})
+
+test('substancesFiscalesBySubstanceLegale', () => {
+  expect(substancesFiscalesBySubstanceLegale('auru')).toMatchSnapshot()
+  expect(substancesFiscalesBySubstanceLegale('meba')).toMatchSnapshot()
+})
diff --git a/packages/common/src/static/substance.ts b/packages/common/src/static/substancesFiscales.ts
similarity index 94%
rename from packages/common/src/static/substance.ts
rename to packages/common/src/static/substancesFiscales.ts
index fcaa84bfd38a50d4c06c7ccfcc6cab49f933b4c1..25214155e776d92a99d3a5f5d38cb3d7af8ad5f3 100644
--- a/packages/common/src/static/substance.ts
+++ b/packages/common/src/static/substancesFiscales.ts
@@ -1,4 +1,5 @@
 import { UniteId } from './unites'
+import { SubstanceLegaleId, SubstancesLegales } from './substancesLegales'
 
 export const SUBSTANCES_FISCALES_IDS = {
   bauxite: 'aloh',
@@ -41,8 +42,7 @@ export type SubstanceFiscaleId = typeof SUBSTANCES_FISCALES_IDS[keyof typeof SUB
 export interface SubstanceFiscale<T = SubstanceFiscaleId> {
   id: T
   nom: string
-  // TODO 2022-05-31: extract this from DB
-  substanceLegaleId: string
+  substanceLegaleId: SubstanceLegaleId
   uniteId: UniteId
   description: string
   openFisca?: {
@@ -359,3 +359,9 @@ export const SubstancesFiscale: {
 }
 
 export const SubstancesFiscales = Object.values(SubstancesFiscale)
+
+export const substancesFiscalesBySubstanceLegale = (substanceLegaleId: SubstanceLegaleId): SubstanceFiscale[] => {
+  const substancesLegalesIds = SubstancesLegales.filter(({ id, substanceParentIds }) => id === substanceLegaleId || substanceParentIds?.includes(substanceLegaleId)).map(({ id }) => id)
+
+  return SubstancesFiscales.filter(({ substanceLegaleId }) => substancesLegalesIds.includes(substanceLegaleId))
+}
diff --git a/packages/common/src/static/substancesLegales.ts b/packages/common/src/static/substancesLegales.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8db06a125f405e8ba6160af2293698206fd04f56
--- /dev/null
+++ b/packages/common/src/static/substancesLegales.ts
@@ -0,0 +1,1013 @@
+import { DomaineId } from './domaines'
+
+export const SUBSTANCES_LEGALES_IDS = {
+  'combustibles fossiles': 'cfxx',
+  "sources d'eau salée": 'selh',
+  bauxite: 'aloh',
+  antimoine: 'anti',
+  argent: 'arge',
+  arsenic: 'arse',
+  or: 'auru',
+  béryllium: 'bery',
+  bismuth: 'bism',
+  cadmium: 'cadm',
+  cérium: 'ceri',
+  césium: 'cesi',
+  chrome: 'chro',
+  cobalt: 'coba',
+  'gaz carbonique': 'coox',
+  cuivre: 'cuiv',
+  diamant: 'diam',
+  étain: 'etai',
+  fer: 'ferx',
+  fluorine: 'fluo',
+  gallium: 'gall',
+  'gîtes géothermiques basse température': 'geob',
+  'gîtes géothermiques haute température': 'geoh',
+  'activités géothermiques de minime importance': 'geom',
+  germanium: 'germ',
+  graphite: 'grap',
+  'granulats marins': 'grma',
+  hafnium: 'hafn',
+  hélium: 'heli',
+  'calcaires bitumineux': 'hydm',
+  'hydrocarbures liquides ou gazeux': 'hydx',
+  indium: 'indi',
+  alun: 'kals',
+  'sels de potassium': 'kclx',
+  lithium: 'lith',
+  manganèse: 'mang',
+  mercure: 'merc',
+  molybdène: 'moly',
+  'sels de sodium': 'nacl',
+  nickel: 'nick',
+  niobium: 'niob',
+  'non précisée(s)': 'oooo',
+  phosphates: 'phos',
+  platine: 'plat',
+  'métaux de la mine du platine': 'plax',
+  plomb: 'plom',
+  radium: 'radi',
+  rhénium: 'rhen',
+  rubidium: 'rubi',
+  'autres éléments radioactifs': 'rxxx',
+  scandium: 'scan',
+  'substances connexes': 'scoc',
+  sélénium: 'sele',
+  'stockage souterrain': 'skst',
+  soufre: 'souf',
+  'sulfates autres que les sulfates alcalino-terreux': 'soxx',
+  tantale: 'tant',
+  tellure: 'tell',
+  thallium: 'thal',
+  thorium: 'thor',
+  titane: 'tita',
+  'autres éléments de terres rares': 'trxx',
+  uranium: 'uran',
+  vanadium: 'vana',
+  tungstène: 'wolf',
+  zinc: 'zinc',
+  zirconium: 'zirc',
+  actinium: 'acti',
+  amphibolite: 'amph',
+  'andalousite / sillimanite / kyanite - (cyanite - disthène)': 'anda',
+  andésite: 'ande',
+  anhydrite: 'anhy',
+  ardoises: 'ardo',
+  'argiles communes': 'argc',
+  'argiles fibreuses (attapulgites ou palygorskites, sépiolites)': 'argf',
+  'argiles kaoliniques': 'argk',
+  argiles: 'args',
+  astate: 'asta',
+  barytine: 'bary',
+  basalte: 'basa',
+  bitume: 'bitu',
+  butane: 'buta',
+  'calcaires cimentiers': 'caci',
+  calcaires: 'calc',
+  calcschiste: 'cals',
+  'cendres volcaniques riches en silice': 'cend',
+  anthracite: 'cfan',
+  charbon: 'cfch',
+  houille: 'cfho',
+  lignite: 'cfli',
+  cornéenne: 'corn',
+  craie: 'crai',
+  dacite: 'daci',
+  diabase: 'diab',
+  diatomites: 'diat',
+  diorites: 'dior',
+  dolérite: 'dole',
+  dolomie: 'dolo',
+  dysprosium: 'dysp',
+  erbium: 'erbi',
+  éthylène: 'ethy',
+  europium: 'euro',
+  faluns: 'falu',
+  feldspaths: 'feld',
+  gabbro: 'gabb',
+  gadolinium: 'gado',
+  galets: 'galt',
+  'gaz naturel': 'gazn',
+  'dépôt glaciaire': 'glac',
+  gneiss: 'gnei',
+  'granite et granulite': 'grai',
+  granodiorite: 'grao',
+  'grès silico-ferrugineux': 'gref',
+  grès: 'gres',
+  'graviers siliceux': 'grsi',
+  gypse: 'gyps',
+  holmium: 'holm',
+  asphalte: 'hyda',
+  'hydrocarbures conventionnels liquides ou gazeux': 'hydc',
+  'gaz combustible': 'hydg',
+  'hydrocarbures liquides': 'hydo',
+  hydrocarbures: 'hydr',
+  iridium: 'irid',
+  kaolin: 'kaol',
+  lanthane: 'lant',
+  leptynite: 'lept',
+  lutécium: 'lute',
+  maërl: 'maer',
+  minerais: 'mais',
+  marbres: 'marb',
+  marnes: 'marn',
+  'métaux de base': 'meba',
+  'métaux connexes': 'meco',
+  'métaux précieux': 'mepr',
+  micas: 'mica',
+  micaschistes: 'mics',
+  migmatite: 'migm',
+  mylonites: 'mylo',
+  néodyme: 'neod',
+  ocres: 'ocre',
+  ophite: 'ophi',
+  osmium: 'osmi',
+  palladium: 'pall',
+  perlite: 'perl',
+  phonolite: 'phon',
+  'pierres précieuses': 'pipe',
+  polonium: 'polo',
+  porphyre: 'porp',
+  pouzzolane: 'pouz',
+  praséodyme: 'pras',
+  prométhium: 'prom',
+  protactinium: 'prot',
+  propane: 'prpa',
+  propylène: 'prpy',
+  pyrite: 'pyri',
+  quartz: 'quar',
+  quartzites: 'quat',
+  radon: 'rado',
+  'roches ardoisières': 'rard',
+  'roches détritiques grossières': 'rdet',
+  rhodium: 'rhod',
+  rhyolite: 'rhyo',
+  ruthénium: 'ruth',
+  'sables coquilliers': 'saco',
+  samarium: 'sama',
+  'sables moyens à grossiers': 'samg',
+  'sables siliceux': 'sasi',
+  'schistes bitumineux': 'scbi',
+  schistes: 'schi',
+  'sel gemme': 'selg',
+  "puits d'eau salée": 'selp',
+  sels: 'sels',
+  sel: 'selx',
+  serpentinite: 'serp',
+  'sable extra siliceux': 'sexs',
+  'sables et grès industriels': 'sgin',
+  'sables et graviers alluvionnaires': 'sgra',
+  'sables et graviers marins': 'sgrm',
+  'sables et graviers silico-calcaires marins': 'sgsc',
+  'sables et graviers siliceux marins': 'sgsm',
+  silice: 'silc',
+  sillimanite: 'sili',
+  'silex / chert': 'silx',
+  'sables a minéraux lourds': 'smil',
+  'sable siliceux ou silico-calcaire': 'sssc',
+  "stérile d'exploitation": 'stex',
+  syénite: 'syen',
+  talc: 'talc',
+  technétium: 'tech',
+  terbium: 'terb',
+  'terre végétale': 'terv',
+  thulium: 'thul',
+  'tous métaux associés': 'tmas',
+  tourbe: 'tour',
+  trachyte: 'trac',
+  tuffeau: 'tufo',
+  yttrium: 'ytri',
+  ytterbium: 'ytte'
+} as const
+
+export type SubstanceLegaleId = typeof SUBSTANCES_LEGALES_IDS[keyof typeof SUBSTANCES_LEGALES_IDS]
+
+export interface SubstanceLegale<T = SubstanceLegaleId> {
+  id: T
+  nom: string
+  description?: string
+  substanceParentIds?: SubstanceLegaleId[]
+  domaineIds: DomaineId[]
+}
+
+export const SubstancesLegale: {
+  [key in SubstanceLegaleId]: SubstanceLegale<key>
+} = {
+  cfxx: { id: 'cfxx', nom: 'combustibles fossiles', domaineIds: ['f'] },
+  selh: { id: 'selh', domaineIds: ['m'], nom: "sources d'eau salée" },
+  aloh: {
+    id: 'aloh',
+    domaineIds: ['m'],
+    nom: 'bauxite',
+    substanceParentIds: ['meba']
+  },
+  anti: { id: 'anti', domaineIds: ['m'], nom: 'antimoine' },
+  arge: {
+    id: 'arge',
+    domaineIds: ['m'],
+    nom: 'argent',
+    substanceParentIds: ['mepr']
+  },
+  arse: { id: 'arse', domaineIds: ['m'], nom: 'arsenic' },
+  auru: {
+    id: 'auru',
+    domaineIds: ['m'],
+    nom: 'or',
+    substanceParentIds: ['mepr']
+  },
+  bery: { id: 'bery', domaineIds: ['m'], nom: 'béryllium' },
+  bism: { id: 'bism', domaineIds: ['m'], nom: 'bismuth' },
+  cadm: { id: 'cadm', domaineIds: ['m'], nom: 'cadmium' },
+  ceri: { id: 'ceri', domaineIds: ['m'], nom: 'cérium' },
+  cesi: { id: 'cesi', domaineIds: ['m'], nom: 'césium' },
+  chro: {
+    id: 'chro',
+    domaineIds: ['m'],
+    nom: 'chrome',
+    substanceParentIds: ['meba']
+  },
+  coba: { id: 'coba', domaineIds: ['m'], nom: 'cobalt' },
+  coox: {
+    id: 'coox',
+    domaineIds: ['m'],
+    nom: 'gaz carbonique',
+    description: "A l'exception du gaz naturellement contenu dans les eaux qui sont ou qui viendraient à être utilisées pour l'alimentation humaine ou à des fins thérapeutiques"
+  },
+  cuiv: {
+    id: 'cuiv',
+    domaineIds: ['m'],
+    nom: 'cuivre',
+    substanceParentIds: ['meba']
+  },
+  diam: {
+    id: 'diam',
+    domaineIds: ['m'],
+    nom: 'diamant',
+    substanceParentIds: ['pipe']
+  },
+  etai: {
+    id: 'etai',
+    domaineIds: ['m'],
+    nom: 'étain',
+    substanceParentIds: ['meba']
+  },
+  ferx: {
+    id: 'ferx',
+    domaineIds: ['m'],
+    nom: 'fer',
+    substanceParentIds: ['meba', 'pyri']
+  },
+  fluo: { id: 'fluo', domaineIds: ['m'], nom: 'fluorine' },
+  gall: { id: 'gall', domaineIds: ['m'], nom: 'gallium' },
+  geob: {
+    id: 'geob',
+    domaineIds: ['g'],
+    nom: 'gîtes géothermiques basse température'
+  },
+  geoh: {
+    id: 'geoh',
+    domaineIds: ['g'],
+    nom: 'gîtes géothermiques haute température'
+  },
+  geom: {
+    id: 'geom',
+    domaineIds: ['g'],
+    nom: 'activités géothermiques de minime importance'
+  },
+  germ: { id: 'germ', domaineIds: ['m'], nom: 'germanium' },
+  grap: { id: 'grap', domaineIds: ['m'], nom: 'graphite' },
+  grma: {
+    id: 'grma',
+    domaineIds: ['w'],
+    nom: 'granulats marins',
+    substanceParentIds: ['galt', 'grsi', 'maer', 'saco', 'samg', 'sasi', 'sgsc', 'sgsm']
+  },
+  hafn: { id: 'hafn', domaineIds: ['m'], nom: 'hafnium' },
+  heli: { id: 'heli', domaineIds: ['m'], nom: 'hélium' },
+  hydm: {
+    id: 'hydm',
+    domaineIds: ['m'],
+    nom: 'calcaires bitumineux'
+  },
+  hydx: {
+    id: 'hydx',
+    domaineIds: ['h'],
+    nom: 'hydrocarbures liquides ou gazeux',
+    description: "A l'exeption de la tourbe",
+    substanceParentIds: ['hyda', 'hydc', 'hydo', 'hydr']
+  },
+  indi: { id: 'indi', domaineIds: ['m'], nom: 'indium' },
+  kals: { id: 'kals', domaineIds: ['m'], nom: 'alun' },
+  kclx: {
+    id: 'kclx',
+    domaineIds: ['m'],
+    nom: 'sels de potassium',
+    description: "A l'état solide ou en dissolution, à l'exception de ceux contenus dans les eaux salées utilisées à des fins thérapeutiques ou de loisirs",
+    substanceParentIds: ['selg', 'selp', 'sels']
+  },
+  lith: { id: 'lith', domaineIds: ['m'], nom: 'lithium' },
+  mang: {
+    id: 'mang',
+    domaineIds: ['m'],
+    nom: 'manganèse',
+    substanceParentIds: ['meba']
+  },
+  merc: { id: 'merc', domaineIds: ['m'], nom: 'mercure' },
+  moly: { id: 'moly', domaineIds: ['m'], nom: 'molybdène' },
+  nacl: {
+    id: 'nacl',
+    domaineIds: ['m'],
+    nom: 'sels de sodium',
+    description: "A l'état solide ou en dissolution, à l'exception de ceux contenus dans les eaux salées utilisées à des fins thérapeutiques ou de loisirs",
+    substanceParentIds: ['selg', 'selp', 'sels', 'selx']
+  },
+  nick: {
+    id: 'nick',
+    domaineIds: ['m'],
+    nom: 'nickel',
+    substanceParentIds: ['meba']
+  },
+  niob: { id: 'niob', domaineIds: ['m'], nom: 'niobium' },
+  oooo: { id: 'oooo', domaineIds: ['m'], nom: 'non précisée(s)' },
+  phos: { id: 'phos', domaineIds: ['m'], nom: 'phosphates' },
+  plat: {
+    id: 'plat',
+    domaineIds: ['m'],
+    nom: 'platine',
+    substanceParentIds: ['mepr']
+  },
+  plax: {
+    id: 'plax',
+    domaineIds: ['m'],
+    nom: 'métaux de la mine du platine',
+    substanceParentIds: ['irid', 'mepr', 'osmi', 'pall', 'rhod', 'ruth']
+  },
+  plom: {
+    id: 'plom',
+    domaineIds: ['m'],
+    nom: 'plomb',
+    substanceParentIds: ['meba']
+  },
+  radi: { id: 'radi', domaineIds: ['r'], nom: 'radium' },
+  rhen: { id: 'rhen', domaineIds: ['m'], nom: 'rhénium' },
+  rubi: { id: 'rubi', domaineIds: ['m'], nom: 'rubidium' },
+  rxxx: {
+    id: 'rxxx',
+    domaineIds: ['r'],
+    nom: 'autres éléments radioactifs',
+    substanceParentIds: ['acti', 'asta', 'polo', 'prot', 'radi', 'rado', 'tech']
+  },
+  scan: { id: 'scan', domaineIds: ['m'], nom: 'scandium' },
+  scoc: {
+    id: 'scoc',
+    domaineIds: ['c', 'f', 'g', 'h', 'r', 's', 'w', 'm'],
+    nom: 'substances connexes',
+    description:
+      'Substances présentes lors de l’abattage des substances principales. Elles sont à la libre disposition de l’opérateur à la condition que le titre ou l’autorisation porte la mention « et substances connexes ».',
+    substanceParentIds: ['mais', 'meco', 'tmas']
+  },
+  sele: { id: 'sele', domaineIds: ['m'], nom: 'sélénium' },
+  skst: {
+    id: 'skst',
+    domaineIds: ['s'],
+    nom: 'stockage souterrain',
+    substanceParentIds: ['buta', 'ethy', 'gazn', 'hydg', 'hydo', 'prpa', 'prpy']
+  },
+  souf: { id: 'souf', domaineIds: ['m'], nom: 'soufre' },
+  soxx: {
+    id: 'soxx',
+    domaineIds: ['m'],
+    nom: 'sulfates autres que les sulfates alcalino-terreux'
+  },
+  tant: { id: 'tant', domaineIds: ['m'], nom: 'tantale' },
+  tell: { id: 'tell', domaineIds: ['m'], nom: 'tellure' },
+  thal: { id: 'thal', domaineIds: ['m'], nom: 'thallium' },
+  thor: { id: 'thor', domaineIds: ['r'], nom: 'thorium' },
+  tita: {
+    id: 'tita',
+    domaineIds: ['m'],
+    nom: 'titane',
+    substanceParentIds: ['meba']
+  },
+  trxx: {
+    id: 'trxx',
+    domaineIds: ['m'],
+    nom: 'autres éléments de terres rares',
+    substanceParentIds: ['dysp', 'erbi', 'euro', 'gado', 'holm', 'lant', 'lute', 'neod', 'pras', 'prom', 'sama', 'scan', 'terb', 'thul', 'ytri', 'ytte']
+  },
+  uran: { id: 'uran', domaineIds: ['r'], nom: 'uranium' },
+  vana: { id: 'vana', domaineIds: ['m'], nom: 'vanadium' },
+  wolf: { id: 'wolf', domaineIds: ['m'], nom: 'tungstène' },
+  zinc: {
+    id: 'zinc',
+    domaineIds: ['m'],
+    nom: 'zinc',
+    substanceParentIds: ['meba']
+  },
+  zirc: { id: 'zirc', domaineIds: ['m'], nom: 'zirconium' },
+  acti: { id: 'acti', nom: 'actinium', domaineIds: ['r'] },
+  amph: {
+    id: 'amph',
+    nom: 'amphibolite',
+    domaineIds: ['c'],
+    description:
+      'Roche métamorphique présentant de bonnes caractéristiques géomécaniques, de couleur sombre (gris à vert foncé) riche en silicates calciques et ferromagnésiens (essentiellement hornblende, mais aussi feldspath plagioclase) et de minéraux annexes (pyroxène, micas). Elle est utilisée comme roche ornementale et de construction et comme granulat.'
+  },
+  anda: {
+    id: 'anda',
+    nom: 'andalousite / sillimanite / kyanite - (cyanite - disthène)',
+    domaineIds: ['c'],
+    description:
+      "Minéral - Silicate d'alumine (SiAl2O5). L'andalousite, la silimanite et la Kyanite (Cyanite ou Disthème) ont la même composition chimique mais avec une structure cristalline et des propriétés physico-minéraloriques différentes (triclinique) autrement dit une variété allotropique (même formule chimique mais système cristallin différent). En France, on ne connait pas de gisement de Kyanite à ce jour. L'andalousite et la silimanite y sont exploitées et sont utilisées dans l'industrie. L'andalousite est utilisée pour ses propriétés réfractaires et son excellente résistance aux chocs thermiques. La silimanite, utilisée pour le même usage réfractaire, a toutefois des propriétés physico-minéraloriques sensiblement différentes de l'andalousite."
+  },
+  ande: {
+    id: 'ande',
+    nom: 'andésite',
+    domaineIds: ['c'],
+    description:
+      "Roche volcanique de couleur gris-clair constituée de cristaux de silicates (plagioclases, biotite, hornblende, pyroxène) dans une matrice vitreuse, avec une bonne homogénéité texturale. Elle présente une bonne résistance mécanique et à l'abrasion."
+  },
+  anhy: {
+    id: 'anhy',
+    nom: 'anhydrite',
+    domaineIds: ['c'],
+    description:
+      "Forme anhydre (CaSO4) du sulfate de calcium hydraté (gypse), utilisée comme charge dans l'industrie des peintures, plastiques et comme régulateur de prise dans les ciments, plus rarement comme amendement."
+  },
+  ardo: {
+    id: 'ardo',
+    nom: 'ardoises',
+    domaineIds: ['c'],
+    description:
+      "Roche schistosée, à l'origine une argile, ayant subi un faible métamorphisme. Variétés gris-bleuté à noire dont la texture (à grains très fin et homogène) et la fissillité (débit en plaques fines) sont mis à profit pour la fabrication d'éléments de toiture, de parement et de dallage pour les variétés plus gréseuses (autres utilisations possibles: additifs pour la fabrication du clinker et des ciments)."
+  },
+  argc: {
+    id: 'argc',
+    nom: 'argiles communes',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire tendre à grain très fin, constituée de minéraux argileux à dominante de smectites-illites, ainsi que d'autres minéraux (quartz, oxydes...) de couleur gris-foncé, brune, jaune-oranger ou rougeâtre. Elles forment une pâte en présence d'eau et durcissent à la cuisson (terres-cuites). peuvent être utilisées (10 à 20%) dans la fabrication du clinker, constituant de base de tous les ciments."
+  },
+  argf: {
+    id: 'argf',
+    nom: 'argiles fibreuses (attapulgites ou palygorskites, sépiolites)',
+    domaineIds: ['c'],
+    description:
+      "Roches sédimentaires tendre à grains fins, constituées majoritairement d'argiles alumino-magnésiennes (fibres de 1 à 3 µm de long et de 100 à 300 Angstroms de large. La différence entre la largeur des fibres permet de différentier les sépiolites des attapulgites). L'existence de micropores entre les fibres, confèrent à ces argiles une grande capacité d'absorption."
+  },
+  argk: {
+    id: 'argk',
+    nom: 'argiles kaoliniques',
+    domaineIds: ['c'],
+    description:
+      'Roche sédimentaire tendre à grains très fins constituée principalement de kaolinite (minéral argileux blanc à crème) utilisée pour ses propriétés en céramiques communes (sanitaires) et pour matériaux réfractaires (fabrication de chamottes).'
+  },
+  args: {
+    id: 'args',
+    nom: 'argiles',
+    domaineIds: ['c'],
+    description: `Roches sédimentaires peu consolidées formées de minéraux argileux comme la montmorillonite (silicate d'aluminium et de magnésium hydraté) et la beidellite (silicate naturel d'aluminium hydraté). Ces phyllosilicates ont des propriétés physico-chimiques (gonflement en présence d'eau, rhéologie, adsorption, échanges cationiques...) avec de nombreuses applications dans les secteurs industriels (chimie, métallurgie, environnement, produit de collage en œnologie pour l'élimination des protéines des vins blancs et rosés. Synonyme : bentonite, "terre à foulon".`
+  },
+  asta: { id: 'asta', nom: 'astate', domaineIds: ['r'] },
+  bary: {
+    id: 'bary',
+    nom: 'barytine',
+    domaineIds: ['c'],
+    description:
+      'Minéral - Sulfate de baryum (BaSO4) présentant une forte densité (4,5) et une bonne inertie chimique utilisé comme charge minérale dans les boues de forage, les bétons spéciaux des installations nucléaires (radioprotection) et certaines peintures industrielles.'
+  },
+  basa: {
+    id: 'basa',
+    nom: 'basalte',
+    domaineIds: ['c'],
+    description:
+      'Roche volcanique dure et massive de couleur gris-foncé à noire, constituée de fin cristaux (pyroxène et olivine) dans une masse vitreuse. Excellentes propriétés mécaniques (dureté), utilisation en tant que granulats et roche ornementale et de construction.'
+  },
+  bitu: { id: 'bitu', nom: 'bitume', domaineIds: ['f'] },
+  buta: { id: 'buta', nom: 'butane', domaineIds: ['s'] },
+  caci: { id: 'caci', nom: 'calcaires cimentiers', domaineIds: ['c'] },
+  calc: {
+    id: 'calc',
+    nom: 'calcaires',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire (couleur blanc-beige-gris) principalement constituée de calcite (carbonate de calcium (CaCO3) faisant effervescence à l'acide). Caractéristiques pétrophysiques et géomécaniques très hétérogènes en fonction de la cristallinité, porosité, teneur en autres constituants (argiles, quartz...). Pour les variétés de haute pureté et blancheur, utilisations comme charges minérales. Autres utilisations : sidérurgie, verrerie, amendements, principale matière première pour la fabrication du clinker et de la chaux. Elle est également très employée en tant pierre ornementale et de construction et pour les granulats."
+  },
+  cals: {
+    id: 'cals',
+    nom: 'calcschiste',
+    domaineIds: ['c'],
+    description:
+      "Roche métamorphique, d'aspect rubané, provenant de formations argileuses plus ou moins carbonatées comme les marnes et calcaires marneux. Peut être utilisée comme matière première en remplacement du calcaire et/ou des marnes dans la fabrication du clinker, le constituant de base des ciments."
+  },
+  cend: {
+    id: 'cend',
+    nom: 'cendres volcaniques riches en silice',
+    domaineIds: ['c'],
+    description:
+      'Roche volcanique formée de fragments généralement à grains fins, peu indurée (pulvérulente) ou indurée. Elle est utilisée en tant que granulats ou comme roches ornementales et de construction.'
+  },
+  cfan: { id: 'cfan', nom: 'anthracite', domaineIds: ['f'] },
+  cfch: { id: 'cfch', nom: 'charbon', domaineIds: ['f'] },
+  cfho: { id: 'cfho', nom: 'houille', domaineIds: ['f'] },
+  cfli: { id: 'cfli', nom: 'lignite', domaineIds: ['f'] },
+  corn: {
+    id: 'corn',
+    nom: 'cornéenne',
+    domaineIds: ['c'],
+    description:
+      "Roche métamorphique cristalline plus ou moins orientée, habituellement très dure produite sous l'action de la chaleur d'un magma en fusion (métamorphisme de contact). Les grains sont d'une grosseur homogène et ne suivent pas une orientation préférentielle. Leur composition minéralogique varie selon le degré de métamorphisme et la nature des roches initiales. Elles présentent en général de bonnes résistances au choc et à l'abrasion."
+  },
+  crai: {
+    id: 'crai',
+    nom: 'craie',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire fine, tendre, friable, de couleur blanche, composée de calcite(CaCO3) d'origine fossilifère. En amendement, est utilisée sous forme pulvérisée, broyée, concassée ou brute pour corriger les sols acides. En liant hydraulique, elle est utilisée dans des proportions de 80 à 90% dans la fabrication du clinker, le constituant de base du ciment mais sert également à la fabrication de chaux et de mortier. Pour les minéraux industriels, la pureté et la blancheur autorisent une utilisation comme charge minérale."
+  },
+  daci: {
+    id: 'daci',
+    nom: 'dacite',
+    domaineIds: ['c'],
+    description:
+      'Roche volcanique de couleur gris-clair constituée de fins cristaux de quartz, plagioclase et silicates ferro-magnésiens baignant dans un verre. Elle est utilisée comme roche ornementale ou de construction et comme granulat.'
+  },
+  diab: {
+    id: 'diab',
+    nom: 'diabase',
+    domaineIds: ['c'],
+    description: "Roche métamorphique dure, d'origine volcanique à grain fin de couleur sombre (issue de dolérite). Elle est utilisé comme granulat."
+  },
+  diat: {
+    id: 'diat',
+    nom: 'diatomites',
+    domaineIds: ['c'],
+    description:
+      'Roche sédimentaire tendre et légère formée par accumulation de carapaces siliceuses de micro-organismes en milieux lacustes ou marins. Utilisations industrielles : filtration de liquides alimentaires, charge minérale, absorbant de pollutions. En liant hydraulique, elle peut être utilisée comme additifs pour la fabrication de certains ciments.'
+  },
+  dior: {
+    id: 'dior',
+    nom: 'diorites',
+    domaineIds: ['c'],
+    description:
+      'Roche plutonique cristalline à texture grenue et homogène, constituée de feldspaths blanchâtres et de silicates ferro-magnésiens colorés (amphiboles, biotite...). En roche ornemental et de construction, elle est sélectionnée pour son aspect décoratif. En granulat, cette roche présente de bonnes caractéristiques mécaniques.'
+  },
+  dole: {
+    id: 'dole',
+    nom: 'dolérite',
+    domaineIds: ['c'],
+    description:
+      "Roche volcanique massive, compacte, de couleur sombre (grise à noire), composée de fins cristaux de feldspaths calciques, de pyroxène et parfois d'oxydes de fer. Elle est utilisée en tant que granulats ou en roche ornementale et de construction. On la trouve en association possible des dolérites altérées (diabases issues du métamorphisme des dolérites)."
+  },
+  dolo: {
+    id: 'dolo',
+    nom: 'dolomie',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire constituée principalement de dolomite (carbonate double de calcium et de magnésium). Utilisée comme charge minérale dans de nombreuses applications : peintures et enduits, élastomères, papiers et revêtements de sol ou dans l'industrie du verre. Au regard de ses propriétés chimiques, est utilisée comme amendement sous forme pulvérisée, broyée, pour corriger le pH des sols acides."
+  },
+  dysp: { id: 'dysp', nom: 'dysprosium', domaineIds: ['m'] },
+  erbi: { id: 'erbi', nom: 'erbium', domaineIds: ['m'] },
+  ethy: { id: 'ethy', nom: 'éthylène', domaineIds: ['s'] },
+  euro: { id: 'euro', nom: 'europium', domaineIds: ['m'] },
+  falu: {
+    id: 'falu',
+    nom: 'faluns',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire meuble d'origine détritique riche en débris de coquilles d'animaux marins. Facilement délitable et transformée en sable, elle est utilisée en tant qu'amendement agricole en substitution de carbonate de calcium ou de calcite. Par le passé, cette roche a été utilisée comme sarcophage pour conserver les corps au regard de sa porosité qui permet d'éviter la putréfaction des chairs et d'absorber les exudats."
+  },
+  feld: {
+    id: 'feld',
+    nom: 'feldspaths',
+    domaineIds: ['c'],
+    description:
+      'Minéral - Principal constituant de nombreuses roches magmatiques dont la composition varie entre des pôles potassique (KAlSi3O8), sodique (NaAlSi3O8) et calcique (CaAl2Si2O8), utilisé en céramique et dans la verrerie.'
+  },
+  gabb: {
+    id: 'gabb',
+    nom: 'gabbro',
+    domaineIds: ['c'],
+    description:
+      'Roche plutonique grenue de couleur sombre, contenant des feldspaths calciques et du pyroxène (olivine, biotite et hornblende associés). Cette roche présente généralement de bonnes caractéristiques mécaniques qui la rendent utilisable comme roche ornementale et de construction et comme granulat.'
+  },
+  gado: { id: 'gado', nom: 'gadolinium', domaineIds: ['m'] },
+  galt: {
+    id: 'galt',
+    nom: 'galets',
+    domaineIds: ['w'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  gazn: { id: 'gazn', nom: 'gaz naturel', domaineIds: ['s'] },
+  glac: {
+    id: 'glac',
+    nom: 'dépôt glaciaire',
+    domaineIds: ['c'],
+    description:
+      "Mélange de roches sédimentaires détritiques hétérogènes d'origine glaciaire constituées de fragments hétérométriques, unis par un ciment naturel (moraines et tillites). Les moraines se présentent sous forme de blocs, de cailloux de sables et d'argiles. Elles peuvent être valorisées comme granulat. Les tillites sont des conglomérats à éléments arrondis et anguleux, suffisamment indurées (dures) pour être valorisées également comme granulat ou comme roche ornementale et de construction."
+  },
+  gnei: {
+    id: 'gnei',
+    nom: 'gneiss',
+    domaineIds: ['c'],
+    description:
+      'Roche métamorphique cristalline à faciès rubanné ou lenticulaire (alternance de lits clairs quartzo-feldspathiques et de lits sombres à micas, amphiboles et pyroxènes). Utilisée en tant que granulats pour ses propriétés mécaniques ou en tant que roche ornementale et de construction pour son aspect décoratif.'
+  },
+  grai: {
+    id: 'grai',
+    nom: 'granite et granulite',
+    domaineIds: ['c'],
+    description: `Roche plutonique cristalline à texture grenue de couleur claire (gris, rose ou jaune) composée de quartz, feldspaths et micas, sélectionnée pour son aspect décoratif. Pour les roches ornementales et de construction, une définition "commerciale" existe également et est différente de celle-ci dite "acceptation scientifique" (cf. point 2.1.156 NF EN 12670 : 2001 page 16). Pour les granulats, cette roche présente de bonnes caractéristiques de rugosité. Pour les minéraux industriels, cette roche rendue friable par l'altération (arénisation) facilite l'extraction de tout ou partie de ses constituants (quartz, feldspaths et micas). Nota : Le terme GRANULITE était utilisé autrefois pour désigner des granites de couleur claire à 2 micas (noir et blanc). qui sont valorisées pour leur aspect esthétique dans le domaine des roches ornementales et de construction.`
+  },
+  grao: {
+    id: 'grao',
+    nom: 'granodiorite',
+    domaineIds: ['c'],
+    description:
+      "Roche plutonique grenue dont la composition est intermédiaire entre le granite et la diorite. Elle est principalement constituée de quartz (> 10 %) et de feldspaths de couleur claire. Les minéraux secondaires sont la biotite (grains sombres vert, brun ou noir), l'amphibole et le pyroxène. La Pierre de Rosette qui permit de percer le mystère des hiéroglyphes est en granodiorite."
+  },
+  gref: {
+    id: 'gref',
+    nom: 'grès silico-ferrugineux',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire de couleur brun-orangé constituée d'un mélange de silice et d'oxydes et hydroxydes de fer, utilisée en tant que minéraux industriels, comme agent colorant en céramique."
+  },
+  gres: {
+    id: 'gres',
+    nom: 'grès',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire plus ou moins indurée et stratifiée, composée de grains de quartz d'origine détritique (d'une taille comprise entre 63 µm et 2 mm) soudés par un ciment interstitiel de nature variable (calcite, oxydes de fer, silice, minéraux argileux). Dans le domaine des granulats et des roches ornementales et de construction, les propriétés mécaniques et l'aspect esthétique sont valorisés. Dans le domaine des minéraux industriels, elle est utilisée comme source de silice pour la production de ferro-silicium."
+  },
+  grsi: {
+    id: 'grsi',
+    nom: 'graviers siliceux',
+    domaineIds: ['w'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  gyps: {
+    id: 'gyps',
+    nom: 'gypse',
+    domaineIds: ['c'],
+    description:
+      "Minéral - Sulfate de calcium hydraté (CaSO4,2H2O). Dans le domaine des liants hydrauliques, ce minéral est utilisé pour la fabrication du plâtre et comme régulateur de prise dans les ciments. Dans le domaine des minéraux industriel, sa pureté chimique et ses caractéristiques physiques comme la blancheur lui permettent d'être utilisé comme charge minérale. Dans le domaine de l'amendement, sa propriété chimique (base) est utilisée pour corriger les sols acides."
+  },
+  holm: { id: 'holm', nom: 'holmium', domaineIds: ['m'] },
+  hyda: { id: 'hyda', nom: 'asphalte', domaineIds: ['h'] },
+  hydc: {
+    id: 'hydc',
+    nom: 'hydrocarbures conventionnels liquides ou gazeux',
+    domaineIds: ['h']
+  },
+  hydg: { id: 'hydg', nom: 'gaz combustible', domaineIds: ['s'] },
+  hydo: { id: 'hydo', nom: 'hydrocarbures liquides', domaineIds: ['h', 's'] },
+  hydr: { id: 'hydr', nom: 'hydrocarbures', domaineIds: ['h'] },
+  irid: { id: 'irid', nom: 'iridium', domaineIds: ['m'] },
+  kaol: {
+    id: 'kaol',
+    nom: 'kaolin',
+    domaineIds: ['c'],
+    description:
+      "Minéral - Extrait de roches granitiques ou sédimentaires composées principalement de kaolinite (silicate d'alumine hydraté Al2Si2O5(OH)4). Le kaolin est utilisé pour sa grande pureté et sa blancheur en céramique (porcelaine) ou comme charges minérales (papier, peinture, etc.). Il peut être également utilisé comme matière première en remplacement de l'argile dans la fabrication de certains clinkers pour ciments blancs (Portland)."
+  },
+  lant: { id: 'lant', nom: 'lanthane', domaineIds: ['m'] },
+  lept: {
+    id: 'lept',
+    nom: 'leptynite',
+    domaineIds: ['c'],
+    description: 'Roche métamorphique cristallisée et orientée de couleur claire composée de quartz, feldspath et micas en faible quantité présentant une bonne résistance mécanique.'
+  },
+  lute: { id: 'lute', nom: 'lutécium', domaineIds: ['m'] },
+  maer: {
+    id: 'maer',
+    nom: 'maërl',
+    domaineIds: ['w'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  mais: { id: 'mais', nom: 'minerais', domaineIds: ['m'] },
+  marb: {
+    id: 'marb',
+    nom: 'marbres',
+    domaineIds: ['c'],
+    description: `Roche métamorphique cristalline plus ou moins rubanée, contenant plus de 50 % de carbonates (calcite et plus rarement dolomite) dans laquelle les minéraux ont totalement recristallisé avec des traces d'oxydes métalliques ou d'impuretés lui donnant une grande variété de couleurs. Le métamorphisme de cette roche lui confère une plus grande dureté. Dans le domaine des roches ornementales, elle est sélectionnée pour son aspect décoratif, la recristallisation de ses composants favorise son polissage. Une définition "commerciale" existe également et est différente de celle-ci dite "acceptation scientifique" (cf. point 2.1.243 NF EN 12670 : 2001 page 22). Dans le domaine des granulats, elle est sélectionnée pour ses propriétés mécaniques (dureté, résistance aux chocs). Dans le domaine des liants hydrauliques, elle peut être utilisée comme matière première en remplacement du calcaire dans la fabrication du clinker, le constituant de base des ciments. Dans le domaine de l'amendement les composants calciques ou magnésiens sont particulièrement utiles pour la correction de pH des milieux acides. Dans le domaine des minéraux industriels, elle est utilisée, après calcination en carbonate de calcium, comme: - charge minérale dans de nombreuses applications industrielles (papier, peinture, plastiques, élastomères) - ou transformée en chaux pour la correction de pH des milieux acides.`
+  },
+  marn: {
+    id: 'marn',
+    nom: 'marnes',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire plus ou moins indurée (dure) et stratifiée (couches successives de sédiments) composée d'un mélange de carbonate de calcium (CaCO3) et d'argiles de différentes natures (de 35% à 65%). Usages : Dans le domaine des granulats, l'emploi de cette roche est exceptionnel bien que présent dans les couches de découverte et que ces caractéristiques mécaniques soient compatibles avec cet usage. Si elle est utilisée comme granulat, c'est principalement sous forme de remblai et encore plus exceptionnellement en granulat pour béton. Dans le domaine de l'agriculture, cette roche est employée comme amendement du fait du mélange carbonate de calcium et argile qu'elle contient. Dans le domaine des liants hydrauliques, cette roche est souvent utilisée comme matière première en remplacement du calcaire et/ou de l'argile dans la fabrication du clinker, le constituant de base des ciments. Dans le domaine des minéraux industriels, elle est exploitée en fonction de sa richesse en calcite afin de constituer des charges minérales. Nota: Les marnes ont une composition chimique intermédiaire entre les calcaires marneux (5 à 35% d'argiles) et les argiles calcareuses ou marnes argileuses (65 à 95% d'argiles)."
+  },
+  meba: { id: 'meba', nom: 'métaux de base', domaineIds: ['m'] },
+  meco: { id: 'meco', nom: 'métaux connexes', domaineIds: ['m'] },
+  mepr: { id: 'mepr', nom: 'métaux précieux', domaineIds: ['m'] },
+  mica: {
+    id: 'mica',
+    nom: 'micas',
+    domaineIds: ['c'],
+    description:
+      "Minéral - Silicates en feuillets riches en aluminium et potassium (micas blancs) ou en magnésium et fer (micas noirs) dont les propriétés physico-minéralogiques trouvent de nombreuses applications dans les domaines de l'isolation et des charges minérales."
+  },
+  mics: {
+    id: 'mics',
+    nom: 'micaschistes',
+    domaineIds: ['c'],
+    description:
+      "Roche métamorphique cristallisée et schisteuse caractérisée par l'abondance de la fraction micacée et une plus faible teneur en quartz. Dans le domaine des roches ornementales et de construction, les proportions de quartz et de micas déterminent les propriétés de la roche comme la fissilité pour la production de dallage ou de couverture. Sa richesse en mica confère un aspect brillant à sa surface. Dans le domaine des minéraux industriel, cette roche est valorisée dans des applications de type charge minérale."
+  },
+  migm: {
+    id: 'migm',
+    nom: 'migmatite',
+    domaineIds: ['c'],
+    description: `Roche métamorphique formée d'une alternance de roches de type granite de couleur sombre et de roche de type gneiss de couleur clair. La partie de couleur claire est assimilé à la partie de la roche ayant fondu et est appelée "le mobilisat". La partie de couleur sombre constitue la partie de la roche étant restée solide et est appelée "la restite". Ses bonnes propriétés mécaniques, permettent de l'utiliser comme roche ornementale et de construction ou comme granulat.`
+  },
+  mylo: {
+    id: 'mylo',
+    nom: 'mylonites',
+    domaineIds: ['c'],
+    description:
+      "Roche autre cataclastique résultant du cisaillement et du broyage puis de la recristallisation plus ou moins intense de roches préexistantes de différentes natures (éventuellement recristallisées) dans une zone de formation intense de failles. Elle est constituée d'une hétérogénéité de roches."
+  },
+  neod: { id: 'neod', nom: 'néodyme', domaineIds: ['m'] },
+  ocre: {
+    id: 'ocre',
+    nom: 'ocres',
+    domaineIds: ['c'],
+    description:
+      "Mélange sédimentaire naturel de kaolinite (argile), d'oxyde de fer rouge (hématite) et d'hydroxyde de fer jaune-oranger (limonite) utilisé pour la production de pigments naturels dans les peintures et les enduits."
+  },
+  ophi: {
+    id: 'ophi',
+    nom: 'ophite',
+    domaineIds: ['c'],
+    description:
+      'Roche plutonique intermédiaire entre basalte et gabbro présentant un faciès plus ou moins altéré de couleur vert-foncé. En tant que roche ornementale et de construction elle est sélectionnée pour son aspect décoratif. Son emploi en tant que granulats est dû à sa dureté et à sa compacité.'
+  },
+  osmi: { id: 'osmi', nom: 'osmium', domaineIds: ['m'] },
+  pall: { id: 'pall', nom: 'palladium', domaineIds: ['m'] },
+  perl: {
+    id: 'perl',
+    nom: 'perlite',
+    domaineIds: ['c'],
+    description:
+      "Roche volcanique de couleur claire à texture vitreuse plus ou moins hydratée et composition rhyolitique utilisée dans l'industrie pour la production d'agents filtrants et d'additifs fonctionnels. Elle est utilisée dans l'industrie pour la production d'agents filtrants et d'additifs fonctionnels."
+  },
+  phon: {
+    id: 'phon',
+    nom: 'phonolite',
+    domaineIds: ['c'],
+    description:
+      'Roche volcanique à grain très fin, de couleur grise tirant parfois sur le vert ou le brun, qui se débite en plaques et qui, sous le choc du métal, rend un son clair (dalles sonores). Sa composition chimique est déficitaire en silice (dite sous-saturées en silice). Le silicium y représente donc moins de la moitié des cations. Ces caractéristiques mécaniques (dureté) permettent son utilisation en tant que granulat. En tant que roche ornementale et de construction, elle est utilisée comme pierre ardoisière en Auvergne. En tant que minéraux industriels, sa composition chimique sous-saturée en silice est recherchée pour les industries du verre et de la céramique.'
+  },
+  pipe: { id: 'pipe', nom: 'pierres précieuses', domaineIds: ['m'] },
+  polo: { id: 'polo', nom: 'polonium', domaineIds: ['r'] },
+  porp: {
+    id: 'porp',
+    nom: 'porphyre',
+    domaineIds: ['c'],
+    description:
+      "Roche plutonique caractérisée par une texture intermédiaire constituée de cristaux de feldpaths baignant dans une matrice finement cristallisée. Dans le domaine des roches ornementales et de construction, la couleur variable de cette roche est utilisée pour son aspect décoratif. Dans le domaine des minéraux industriels, cette roche est employée pour ces propriétés mécaniques (dureté, résistance aux chocs et à l'abrasion)."
+  },
+  pouz: {
+    id: 'pouz',
+    nom: 'pouzzolane',
+    domaineIds: ['c'],
+    description:
+      "Roche volcanique scoriacée à texture bulleuse de couleur noire ou rouge brique. Elle est donc assez rarement exploitée en roche de construction sauf dans la région de Clermont-Ferrand et sur l'île de la Réunion. Elle permet la fabrication de moellons utilisés dans le bâtiment compte tenu de leurs propriétés (isolation thermique et phonique) (voir la fiche pouzzolane de Ph. Rocher). L'exploitation en roche ornementale est marginale et est destinée la construction de rocaille décorative dans les jardins d'agrément. En tant que granulats, elle est utilisée comme agent de sablage ou comme agrégat pour la réalisation de massifs drainants. Sa texture bulleuse peu résistante mécaniquement en fait tout de même un granulat léger notamment dans les bétons spéciaux. Dans le domaine des liants hydrauliques, elle peut être utilisée comme additifs pour la fabrication de certains ciments. Dans le domaine des minéraux industriels, elle est utilisée pour ses propriétés d'isolation phonique et thermique."
+  },
+  pras: { id: 'pras', nom: 'praséodyme', domaineIds: ['m'] },
+  prom: { id: 'prom', nom: 'prométhium', domaineIds: ['m'] },
+  prot: { id: 'prot', nom: 'protactinium', domaineIds: ['r'] },
+  prpa: { id: 'prpa', nom: 'propane', domaineIds: ['s'] },
+  prpy: { id: 'prpy', nom: 'propylène', domaineIds: ['s'] },
+  pyri: { id: 'pyri', nom: 'pyrite', domaineIds: ['m'] },
+  quar: {
+    id: 'quar',
+    nom: 'quartz',
+    domaineIds: ['c'],
+    description:
+      "Minéral - Oxyde de silicium (SiO2) Dans le domaine des granulats, sans grand degré de pureté le quartz est valorisé pour ses caractéristiques mécaniques et certains aspects décoratifs. Dans le domaine des minéraux industriels, sa pureté en SiO2 est recherchée pour sa résistance à l'abrasion dans les revêtements de sols ou comme agent de décapage. Elle constitue une source de silicium pour des applications verre et céramique lorsqu'il présente un très haut degré de pureté."
+  },
+  quat: {
+    id: 'quat',
+    nom: 'quartzites',
+    domaineIds: ['c'],
+    description:
+      "Roche métamorphique massive composée principalement de quartz issue de la recristallisation et de la cimentation du quartz. Les caractéristiques mécaniques sont favorables à la production de granulats de haute qualité (forte résistance à l'abrasion) ou à une utilisation comme roche ornementale et de construction. Le tombeau de Napoléon, aux Invalides, est réalisé dans un bloc de quartzite. Dans le domaine des minéraux industriels, sa pureté est recherchée pour être utilisée comme matériaux réfractaires."
+  },
+  rado: { id: 'rado', nom: 'radon', domaineIds: ['r'] },
+  rard: {
+    id: 'rard',
+    nom: 'roches ardoisières',
+    domaineIds: ['c'],
+    description:
+      "Roche métamorphique qui est à l'origine de l'argile ayant subi un faible métamorphisme et qui est devenue schisteuse. Ces roches ardoisières ont un plan de schistocité épais et peuvent avoir une fraction gréseuse. Elle comprend notamment les lauzes qui sont utilisées comme pierres de construction (dallage ou toiture)."
+  },
+  rdet: {
+    id: 'rdet',
+    nom: 'roches détritiques grossières',
+    domaineIds: ['c'],
+    description:
+      "Famille de roches sédimentaire détritiques (issues de la dégradation mécanique d'autres roches) constituées d'éléments grossiers (galets) arrondis (qui traduisent un transport long avant sédimentation) cimentés par des éléments plus fins de type sables et graviers. Devenues suffisamment dures (indurées) ces roches sont utilisées pour la production de granulats. En tant que roches ornementales et de construction, elles présentent des caractéristiques mécaniques et esthétiques valorisables en décoration. Cette famille regroupe les roches suivantes : les arkoses, les brèches, les conglomérats et les poudingues. Ces dernières sont celles qui sont le plus souvent utilisées comme roches ornementales."
+  },
+  rhod: { id: 'rhod', nom: 'rhodium', domaineIds: ['m'] },
+  rhyo: {
+    id: 'rhyo',
+    nom: 'rhyolite',
+    domaineIds: ['c'],
+    description:
+      'Roche volcanique effusive riche en silice de couleur claire constituée de fins cristaux de feldspaths dispersés dans une matrice vitreuse valorisée pour ses propriétés mécaniques et son aspect esthétique soit en tant que roche ornementale et de construction ou en tant que granulats.'
+  },
+  ruth: { id: 'ruth', nom: 'ruthénium', domaineIds: ['m'] },
+  saco: {
+    id: 'saco',
+    nom: 'sables coquilliers',
+    domaineIds: ['w'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  sama: { id: 'sama', nom: 'samarium', domaineIds: ['m'] },
+  samg: {
+    id: 'samg',
+    nom: 'sables moyens à grossiers',
+    domaineIds: ['w'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  sasi: {
+    id: 'sasi',
+    nom: 'sables siliceux',
+    domaineIds: ['w'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  scbi: { id: 'scbi', nom: 'schistes bitumineux', domaineIds: ['f'] },
+  schi: {
+    id: 'schi',
+    nom: 'schistes',
+    domaineIds: ['c'],
+    description:
+      "Roche métamorphique à grains très fins peu ou pas décelables à l'œil nu présentant un débit en feuillet dû à la schistosité et à la présence de minéraux plats (micas, hornblende...) orientés. Utilisée pour ses propriétés mécaniques, cette roche est particulièrement délitable et donne des granulats de forme assez plate. Son aspect décoratif est valorisé en tant que roche ornementale et de construction."
+  },
+  selg: { id: 'selg', nom: 'sel gemme', domaineIds: ['m'] },
+  selp: { id: 'selp', nom: "puits d'eau salée", domaineIds: ['m'] },
+  sels: { id: 'sels', nom: 'sels', domaineIds: ['m'] },
+  selx: { id: 'selx', nom: 'sel', domaineIds: ['m'] },
+  serp: {
+    id: 'serp',
+    nom: 'serpentinite',
+    domaineIds: ['c'],
+    description:
+      "Roche métamorphique de couleur jaunâtre à verdâtre (voire vert sombre) ou présentant des inclusions verdâtres (forme porphyrique) essentiellement constituée (plus de 75 %) d'antigorite (phyllosilicate magnésien). Cette roche provient de l'altération d'une péridotite en présence d'eau. Les serpentinites sont essentiellement exploitées aujourd'hui pour la production de granulats et plus rarement comme roches ornementales."
+  },
+  sexs: {
+    id: 'sexs',
+    nom: 'sable extra siliceux',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire meuble d'origine détritique presque exclusivement constituée de grains calibrés de quartz de très grande pureté (égale ou > 98% de silice), utilisée dans les industries du verre et de la céramique et comme additif fonctionnel."
+  },
+  sgin: {
+    id: 'sgin',
+    nom: 'sables et grès industriels',
+    domaineIds: ['c']
+  },
+  sgra: {
+    id: 'sgra',
+    nom: 'sables et graviers alluvionnaires',
+    domaineIds: ['c'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme de sables, graviers et galets de nature variable extraits d'anciens lits de cours d'eau et utilisé comme granulat encore aujourd'hui principalement dans des bétons spéciaux ou pour des couches drainantes."
+  },
+  sgrm: {
+    id: 'sgrm',
+    nom: 'sables et graviers marins',
+    domaineIds: ['c'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  sgsc: {
+    id: 'sgsc',
+    nom: 'sables et graviers silico-calcaires marins',
+    domaineIds: ['w'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  sgsm: {
+    id: 'sgsm',
+    nom: 'sables et graviers siliceux marins',
+    domaineIds: ['w'],
+    description:
+      "Mélange sédimentaire meuble constituée d'éléments rocheux de nature variée sous forme sous forme de sables et graviers d'origine détritique, de nature siliceuse et calcaire extrait des fonds marins. Leur utilité est destinée au granulat."
+  },
+  silc: { id: 'silc', nom: 'silice', domaineIds: ['c'] },
+  sili: {
+    id: 'sili',
+    nom: 'sillimanite',
+    domaineIds: ['c'],
+    description:
+      "Minéral - Silicate d'alumine (SiAl2O5) de même composition chimique que l'andalousite mais avec une structure cristalline et des propriétés physico-minéralogiques sensiblement différentes."
+  },
+  silx: {
+    id: 'silx',
+    nom: 'silex / chert',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire d'origine détritique issue d'une précipitation chimique et constituée de silice calcédonieuse presque pure la rendant très dure et quelques impuretés telles que de l'eau ou des oxydes, ces derniers influant sur sa couleur. De part, la dureté de cette roche, elle est valorisée sous forme de granulat. Pour l'industrie, elle est utilisée, sous forme de galet plus ou moins arrondis dont les propriétés mécaniques permettent d'en faire des charges broyantes ou des produits abrasifs ou dont la grande pureté chimique permet de faire de la silice industrielle. [Définition de la norme européenne EN 932-3 : Roche sédimentaire composée de silice cryptocristalline ou microcristalline (cristaux indétectables à l'œil nu), se formant en général en couches ou en nodules dans le calcaire.] Préférer le terme SILEX au terme CHERT qui vaut dire la même chose. Le silex est un chert se formant dans la craie du Crétacé (cf. falaise d'Etretat)."
+  },
+  smil: {
+    id: 'smil',
+    nom: 'sables a minéraux lourds',
+    domaineIds: ['c'],
+    description:
+      "Sables alluvionnaires ou de plage composés de minéraux lourds (rutile, zircon, barytine, grenat). L'accumulation des minéraux lourds se fait dans des placers dont l'origine est liée aux paramètres favorables de sédimentation. Ces minéraux peuvent être utilisés en industrie."
+  },
+  sssc: {
+    id: 'sssc',
+    nom: 'sable siliceux ou silico-calcaire',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire meuble d'origine détritique pouvant soit être constituée majoritairement de grains de quartz (fort % de silice mais < à 98%) soit de calcaire et de silice (silico-calcaire). Ce sable est principalement utilisé comme produits de correction pour la fabrication du clinker, le constituant de base des ciments."
+  },
+  stex: {
+    id: 'stex',
+    nom: "stérile d'exploitation",
+    domaineIds: ['c'],
+    description:
+      "Roche d'origine diverse, caractérisée par des roches constituant des stériles d'ancienne exploitation (schiste, grès, carbonates ou roche grenue) dont les caractéristiques mécaniques et physiques permettent de les valoriser comme granulat."
+  },
+  syen: {
+    id: 'syen',
+    nom: 'syénite',
+    domaineIds: ['c'],
+    description:
+      "Roche plutonique grenue de couleur rose à rouge, composée de feldspath alcalin (assez riche en silice). Elle se rapproche du granite et du gabbro mais ne contient pas de quartz. L'équivalent volcanique d'une syénite est un trachyte. Elle est utilisée en tant que granulats ou roche ornementale et de construction."
+  },
+  talc: {
+    id: 'talc',
+    nom: 'talc',
+    domaineIds: ['c'],
+    description:
+      "Minéral - Silicate de magnésium hydraté (Mg3 Si4 O10 (OH)2) présentant une structure en feuillets dont les propriétés comme la dureté (1 de l'échelle de Mohs), hydrophobie, grande inertie chimique, blancheur en font un remarquable additif fonctionnel de nombreux domaines (peintures, plastiques, pharmacopée...)."
+  },
+  tech: { id: 'tech', nom: 'technétium', domaineIds: ['r'] },
+  terb: { id: 'terb', nom: 'terbium', domaineIds: ['m'] },
+  terv: {
+    id: 'terv',
+    nom: 'terre végétale',
+    domaineIds: ['c'],
+    description:
+      "Horizon sédimentaire humifère constitué suivant la profondeur de l'accumulation de matière organique associée à la croissance des végétaux et de l'altération du substratum rocheux sous-jacent."
+  },
+  thul: { id: 'thul', nom: 'thulium', domaineIds: ['m'] },
+  tmas: { id: 'tmas', nom: 'tous métaux associés', domaineIds: ['m'] },
+  tour: {
+    id: 'tour',
+    nom: 'tourbe',
+    domaineIds: ['c'],
+    description:
+      "Roche sédimentaire organique résultant de l'accumulation de la matière organique liée à la croissance des végétaux et de leur transformation sous certaines conditions. Elle est utilisée principalement comme amendement."
+  },
+  trac: {
+    id: 'trac',
+    nom: 'trachyte',
+    domaineIds: ['c'],
+    description:
+      'Roche volcanique effusive de couleur gris-clair, à texture souvent poreuse constituée de fins cristaux (microlites) de feldspaths baignant dans une matrice vitreuse (du fait de sa teneur en silice assez élevée). Elle est utilisée pour ses bonnes caractéristiques mécaniques en tant que granulats et comme roches ornementales et de constructions (ex: lave de Volvic, lave de Chambois).'
+  },
+  tufo: {
+    id: 'tufo',
+    nom: 'tuffeau',
+    domaineIds: ['c'],
+    description: 'Roche sédimentaire blanchâtre peu stratifiée à texture crayeuse constituée de calcite, utilisée comme pierre de construction.'
+  },
+  ytri: { id: 'ytri', nom: 'yttrium', domaineIds: ['m'] },
+  ytte: { id: 'ytte', nom: 'ytterbium', domaineIds: ['m'] }
+}
+
+export const SubstancesLegales = Object.values(SubstancesLegale)
diff --git a/packages/common/src/static/unites.ts b/packages/common/src/static/unites.ts
index 4ea5a6089928400929a08cb629b8276cb0fa06a6..345bb5a6bf099080534fb02ed64028f3cb043238 100644
--- a/packages/common/src/static/unites.ts
+++ b/packages/common/src/static/unites.ts
@@ -29,20 +29,20 @@ export type UniteOpenfiscaId = 'kg' | '100kg' | 't' | '100t' | 'kt' | '100km3'
 export type UniteId = typeof UNITE_IDS[keyof typeof UNITE_IDS]
 
 export const Unites: { [key in UniteId]: Unite<key> } = {
-  deg: {id: 'deg', nom: 'degré', symbole: 'º', referenceUniteId: null, referenceUniteRatio: null},
-  gon: {id: 'gon', nom: 'grade', symbole: 'gon', referenceUniteId: 'deg', referenceUniteRatio: 0.9},
-  km3: {id: 'km3', nom: 'kilomètre cube', symbole: 'km³', referenceUniteId: 'm3x', referenceUniteRatio: 1000000000},
-  m3a: {id: 'm3a', nom: 'mètre cube par an', symbole: 'm³ / an', referenceUniteId: null, referenceUniteRatio: null},
-  m3x: {id: 'm3x', nom: 'mètre cube', symbole: 'm³', referenceUniteId: null, referenceUniteRatio: null},
-  met: {id: 'met', nom: 'mètre', symbole: 'm', referenceUniteId: null, referenceUniteRatio: null},
-  mgr: {id: 'mgr', nom: 'gramme', symbole: 'g', referenceUniteId: 'mkg', referenceUniteRatio: 0.001},
-  mkc: {id: 'mkc', nom: 'quintal', symbole: 'x 100 kg', referenceUniteId: 'mkg', referenceUniteRatio: 100, openfiscaId: '100kg'},
-  mkg: {id: 'mkg', nom: 'kilogramme', symbole: 'kg', referenceUniteId: null, referenceUniteRatio: null, openfiscaId: 'kg'},
-  mtc: {id: 'mtc', nom: 'centaine de tonnes', symbole: 'x 100 t', referenceUniteId: 'mkg', referenceUniteRatio: 100000, openfiscaId: '100t'},
-  mtk: {id: 'mtk', nom: 'millier de tonnes', symbole: 'x 1000 t', referenceUniteId: 'mkg', referenceUniteRatio: 1000000, openfiscaId: 'kt'},
-  mtt: {id: 'mtt', nom: 'tonne', symbole: 't', referenceUniteId: 'mkg', referenceUniteRatio: 1000, openfiscaId: 't'},
-  txa: {id: 'txa', nom: 'tonnes par an', symbole: 't / an', referenceUniteId: null, referenceUniteRatio: null},
-  vmd: {id: 'vmd', nom: '100 000 mètres cubes', symbole: 'x 100 000 m³', referenceUniteId: 'm3x', referenceUniteRatio: 100000, openfiscaId: '100km3'}
+  deg: { id: 'deg', nom: 'degré', symbole: 'º', referenceUniteId: null, referenceUniteRatio: null },
+  gon: { id: 'gon', nom: 'grade', symbole: 'gon', referenceUniteId: 'deg', referenceUniteRatio: 0.9 },
+  km3: { id: 'km3', nom: 'kilomètre cube', symbole: 'km³', referenceUniteId: 'm3x', referenceUniteRatio: 1000000000 },
+  m3a: { id: 'm3a', nom: 'mètre cube par an', symbole: 'm³ / an', referenceUniteId: null, referenceUniteRatio: null },
+  m3x: { id: 'm3x', nom: 'mètre cube', symbole: 'm³', referenceUniteId: null, referenceUniteRatio: null },
+  met: { id: 'met', nom: 'mètre', symbole: 'm', referenceUniteId: null, referenceUniteRatio: null },
+  mgr: { id: 'mgr', nom: 'gramme', symbole: 'g', referenceUniteId: 'mkg', referenceUniteRatio: 0.001 },
+  mkc: { id: 'mkc', nom: 'quintal', symbole: 'x 100 kg', referenceUniteId: 'mkg', referenceUniteRatio: 100, openfiscaId: '100kg' },
+  mkg: { id: 'mkg', nom: 'kilogramme', symbole: 'kg', referenceUniteId: null, referenceUniteRatio: null, openfiscaId: 'kg' },
+  mtc: { id: 'mtc', nom: 'centaine de tonnes', symbole: 'x 100 t', referenceUniteId: 'mkg', referenceUniteRatio: 100000, openfiscaId: '100t' },
+  mtk: { id: 'mtk', nom: 'millier de tonnes', symbole: 'x 1000 t', referenceUniteId: 'mkg', referenceUniteRatio: 1000000, openfiscaId: 'kt' },
+  mtt: { id: 'mtt', nom: 'tonne', symbole: 't', referenceUniteId: 'mkg', referenceUniteRatio: 1000, openfiscaId: 't' },
+  txa: { id: 'txa', nom: 'tonnes par an', symbole: 't / an', referenceUniteId: null, referenceUniteRatio: null },
+  vmd: { id: 'vmd', nom: '100 000 mètres cubes', symbole: 'x 100 000 m³', referenceUniteId: 'm3x', referenceUniteRatio: 100000, openfiscaId: '100km3' }
 }
 
 export const UNITES = Object.values(Unites)
diff --git a/packages/common/src/typescript-tools.ts b/packages/common/src/typescript-tools.ts
index ffd48ed7334db837f40bdb46bdd7485d7d030a2b..a1a63973de29a0ffc83779f53289b7077f1c9405 100644
--- a/packages/common/src/typescript-tools.ts
+++ b/packages/common/src/typescript-tools.ts
@@ -7,3 +7,5 @@ export const isNotNullNorUndefined = <T>(value: T | null | undefined): value is
 export const onlyUnique = <T>(value: T, index: number, self: T[]): boolean => {
   return self.indexOf(value) === index
 }
+
+export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>
diff --git a/packages/ui/src/api/fragments/substance.js b/packages/ui/src/api/fragments/substance.js
deleted file mode 100644
index 8ed663b055778edf9f1b7d9617ead5fa07b94c7a..0000000000000000000000000000000000000000
--- a/packages/ui/src/api/fragments/substance.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import gql from 'graphql-tag'
-
-const fragmentSubstance = gql`
-  fragment substance on Substance {
-    id
-    nom
-    symbole
-    gerep
-    description
-    legales {
-      id
-      nom
-      description
-      domaine {
-        id
-        nom
-      }
-    }
-  }
-`
-
-const fragmentTitreSubstance = gql`
-  fragment titreSubstance on TitreSubstance {
-    id
-    nom
-    ordre
-    symbole
-    gerep
-    description
-    legales {
-      id
-      nom
-      description
-      domaine {
-        id
-        nom
-      }
-    }
-  }
-`
-
-const fragmentTitresSubstance = gql`
-  fragment titresSubstance on TitreSubstance {
-    id
-    nom
-  }
-`
-
-export { fragmentSubstance, fragmentTitreSubstance, fragmentTitresSubstance }
diff --git a/packages/ui/src/api/fragments/titre-etape.js b/packages/ui/src/api/fragments/titre-etape.js
index 971663f18321c8c846015358d1964fd008ec5a36..138f038c67d5bc83060ead1fd8ca1b114a527025 100644
--- a/packages/ui/src/api/fragments/titre-etape.js
+++ b/packages/ui/src/api/fragments/titre-etape.js
@@ -1,7 +1,6 @@
 import gql from 'graphql-tag'
 import { fragmentTitreAdministrations } from './administrations'
 import { fragmentTitreEntreprises } from './entreprises'
-import { fragmentTitreSubstance } from './substance'
 import { fragmentPoint } from './point'
 import { fragmentGeojsonMultiPolygon } from './geojson'
 import {
@@ -59,9 +58,7 @@ const fragmentHeritageEtape = gql`
     points {
       ...point
     }
-    substances {
-      ...titreSubstance
-    }
+    substances
     contenu
   }
 
@@ -72,8 +69,6 @@ const fragmentHeritageEtape = gql`
   ${fragmentTitreEntreprises}
 
   ${fragmentPoint}
-
-  ${fragmentTitreSubstance}
 `
 
 const fragmentHeritageProps = gql`
@@ -151,9 +146,8 @@ const fragmentTitreEtape = gql`
     geojsonMultiPolygon {
       ...geojsonMultiPolygon
     }
-    substances {
-      ...titreSubstance
-    }
+    substances
+
     documents {
       ...document
     }
@@ -186,8 +180,6 @@ const fragmentTitreEtape = gql`
 
   ${fragmentGeojsonMultiPolygon}
 
-  ${fragmentTitreSubstance}
-
   ${fragmentCommune}
 
   ${fragmentDocument}
@@ -229,9 +221,7 @@ const fragmentEtapeHeritage = gql`
       ...point
     }
 
-    substances {
-      ...titreSubstance
-    }
+    substances
 
     contenu
 
@@ -246,8 +236,6 @@ const fragmentEtapeHeritage = gql`
 
   ${fragmentPoint}
 
-  ${fragmentTitreSubstance}
-
   ${fragmentHeritageProps}
 
   ${fragmentDocumentType}
@@ -309,9 +297,7 @@ const fragmentEtape = gql`
     geojsonMultiPolygon {
       ...geojsonMultiPolygon
     }
-    substances {
-      ...titreSubstance
-    }
+    substances
     documents {
       ...document
     }
@@ -347,8 +333,6 @@ const fragmentEtape = gql`
 
   ${fragmentGeojsonMultiPolygon}
 
-  ${fragmentTitreSubstance}
-
   ${fragmentCommune}
 
   ${fragmentDocument}
diff --git a/packages/ui/src/api/fragments/titre.js b/packages/ui/src/api/fragments/titre.js
index 1826769bc56c2364d5ed5fba4535f4f8a7a2bbc4..2b9b3bdc06da4588847ec263f806b21a88c8e3d0 100644
--- a/packages/ui/src/api/fragments/titre.js
+++ b/packages/ui/src/api/fragments/titre.js
@@ -3,7 +3,6 @@ import gql from 'graphql-tag'
 import { fragmentTitreType } from './metas'
 import { fragmentTitreDemarche } from './titre-demarche'
 import { fragmentTitreActivite } from './titre-activite'
-import { fragmentTitreSubstance, fragmentTitresSubstance } from './substance'
 import { fragmentTitreAdministrations } from './administrations'
 import {
   fragmentTitreEntreprises,
@@ -40,9 +39,7 @@ const fragmentTitre = gql`
       }
       nom
     }
-    substances {
-      ...titreSubstance
-    }
+    substances
     dateDebut
     dateFin
     activitesEnConstruction
@@ -109,8 +106,6 @@ const fragmentTitre = gql`
 
   ${fragmentTitreActivite}
 
-  ${fragmentTitreSubstance}
-
   ${fragmentPoint}
 
   ${fragmentGeojsonPoints}
@@ -143,9 +138,7 @@ const fragmentTitres = gql`
       nom
       couleur
     }
-    substances {
-      ...titresSubstance
-    }
+    substances
     activitesEnConstruction
     activitesAbsentes
     activitesDeposees
@@ -168,8 +161,6 @@ const fragmentTitres = gql`
 
   ${fragmentTitresEntreprises}
 
-  ${fragmentTitresSubstance}
-
   ${fragmentTitreType}
 `
 
diff --git a/packages/ui/src/api/metas-activites.js b/packages/ui/src/api/metas-activites.js
index 7826d3091187e5e5fe59ca41f50fc66a0d7007bb..e27c5faf6cb761727f35213e66066a43772739c5 100644
--- a/packages/ui/src/api/metas-activites.js
+++ b/packages/ui/src/api/metas-activites.js
@@ -21,11 +21,6 @@ const activitesMetas = apiGraphQLFetch(
         ...activiteStatut
       }
 
-      domaines {
-        id
-        nom
-      }
-
       types {
         ...titreTypeType
       }
@@ -101,40 +96,6 @@ const activitesTypesTitresTypes = apiGraphQLFetch(
   `
 )
 
-const activiteTypeTitreTypeModifier = apiGraphQLFetch(gql`
-  mutation ActiviteTypeTitreTypeModifier(
-    $element: InputActiviteTypeTitreType!
-  ) {
-    activiteTypeTitreTypeModifier(activiteTypeTitreType: $element) {
-      ...activiteTypeTitreType
-    }
-  }
-
-  ${fragmentActiviteTypeTitreType}
-`)
-
-const activiteTypeTitreTypeCreer = apiGraphQLFetch(gql`
-  mutation ActiviteTypeTitreTypeCreer($element: InputActiviteTypeTitreType!) {
-    activiteTypeTitreTypeCreer(activiteTypeTitreType: $element) {
-      ...activiteTypeTitreType
-    }
-  }
-
-  ${fragmentActiviteTypeTitreType}
-`)
-
-const activiteTypeTitreTypeSupprimer = apiGraphQLFetch(gql`
-  mutation ActiviteTypeTitreTypeSupprimer(
-    $element: InputActiviteTypeTitreType!
-  ) {
-    activiteTypeTitreTypeSupprimer(activiteTypeTitreType: $element) {
-      ...activiteTypeTitreType
-    }
-  }
-
-  ${fragmentActiviteTypeTitreType}
-`)
-
 const activitesTypesDocumentsTypes = apiGraphQLFetch(
   gql`
     query ActivitesTypesDocumentsTypes {
@@ -222,9 +183,6 @@ export {
   activitesStatuts,
   activiteStatutModifier,
   activitesTypesTitresTypes,
-  activiteTypeTitreTypeCreer,
-  activiteTypeTitreTypeModifier,
-  activiteTypeTitreTypeSupprimer,
   activitesTypesDocumentsTypes,
   activiteTypeDocumentTypeCreer,
   activiteTypeDocumentTypeModifier,
diff --git a/packages/ui/src/api/metas.js b/packages/ui/src/api/metas.js
index ae3f4f1c054f72508f99454679bff18a141aee53..4f9717a47833df14aa20ed3f9fa8086368febcbb 100644
--- a/packages/ui/src/api/metas.js
+++ b/packages/ui/src/api/metas.js
@@ -140,19 +140,6 @@ const etapeTypeModifier = apiGraphQLFetch(gql`
   ${fragmentEtapeType}
 `)
 
-const substancesLegales = apiGraphQLFetch(
-  gql`
-    query SubstancesLegales {
-      substancesLegales {
-        id
-        nom
-        description
-        ordre
-      }
-    }
-  `
-)
-
 const documentsTypes = apiGraphQLFetch(
   gql`
     query DocumentsTypes {
@@ -615,7 +602,6 @@ export {
   phaseStatutModifier,
   etapesTypes,
   etapeTypeModifier,
-  substancesLegales,
   documentsTypes,
   documentTypeCreer,
   documentTypeModifier,
diff --git a/packages/ui/src/api/titres-activites.js b/packages/ui/src/api/titres-activites.js
index 31abcf347ac9b7d05be941856af8e5a9c9bfc512..6041117b044e5ee725d6413f3ff9924df395db7a 100644
--- a/packages/ui/src/api/titres-activites.js
+++ b/packages/ui/src/api/titres-activites.js
@@ -42,7 +42,7 @@ const activites = apiGraphQLFetch(
       $titresStatutsIds: [ID]
       $titresNoms: String
       $titresEntreprises: String
-      $titresSubstances: String
+      $titresSubstancesIds: [String]
       $titresReferences: String
       $titresTerritoires: String
     ) {
@@ -59,7 +59,7 @@ const activites = apiGraphQLFetch(
         titresStatutsIds: $titresStatutsIds
         titresNoms: $titresNoms
         titresEntreprises: $titresEntreprises
-        titresSubstances: $titresSubstances
+        titresSubstancesIds: $titresSubstancesIds
         titresReferences: $titresReferences
         titresTerritoires: $titresTerritoires
       ) {
diff --git a/packages/ui/src/api/titres-demarches.js b/packages/ui/src/api/titres-demarches.js
index fd65467e114a0af9e9fd30e8db3e3e20be20cdf7..d0194a4a09137fd39b52c1693a4238221691cd26 100644
--- a/packages/ui/src/api/titres-demarches.js
+++ b/packages/ui/src/api/titres-demarches.js
@@ -7,11 +7,6 @@ import { fragmentDemarches } from './fragments/titres-demarches'
 const demarchesMetas = apiGraphQLFetch(
   gql`
     query MetasDemarches($travaux: Boolean) {
-      domaines {
-        id
-        nom
-      }
-
       types {
         id
         nom
@@ -70,7 +65,7 @@ const demarches = apiGraphQLFetch(
       $titresStatutsIds: [ID!]
       $titresNoms: String
       $titresEntreprises: String
-      $titresSubstances: String
+      $titresSubstancesIds: [ID]
       $titresReferences: String
       $titresTerritoires: String
       $travaux: Boolean
@@ -89,7 +84,7 @@ const demarches = apiGraphQLFetch(
         titresStatutsIds: $titresStatutsIds
         titresNoms: $titresNoms
         titresEntreprises: $titresEntreprises
-        titresSubstances: $titresSubstances
+        titresSubstancesIds: $titresSubstancesIds
         titresReferences: $titresReferences
         titresTerritoires: $titresTerritoires
         travaux: $travaux
diff --git a/packages/ui/src/api/titres-etapes.js b/packages/ui/src/api/titres-etapes.js
index 4337a718e8aef082306f9c88ab98f9f9dae07248..482a423481112de26432f0674f1252691627674d 100644
--- a/packages/ui/src/api/titres-etapes.js
+++ b/packages/ui/src/api/titres-etapes.js
@@ -1,7 +1,6 @@
 import gql from 'graphql-tag'
 import { apiGraphQLFetch } from './_client'
 
-import { fragmentSubstance } from './fragments/substance'
 import { fragmentEtape, fragmentEtapeHeritage } from './fragments/titre-etape'
 import { fragmentEtapeMetasEntreprises } from './fragments/entreprises'
 
@@ -53,10 +52,6 @@ const titreEtapeMetas = apiGraphQLFetch(
         }
       }
 
-      substances {
-        ...substance
-      }
-
       entreprises(archive: false, etapeId: $id) {
         elements {
           ...etapeMetasEntreprises
@@ -64,8 +59,6 @@ const titreEtapeMetas = apiGraphQLFetch(
       }
     }
 
-    ${fragmentSubstance}
-
     ${fragmentEtapeMetasEntreprises}
   `
 )
diff --git a/packages/ui/src/api/titres.js b/packages/ui/src/api/titres.js
index 63b27ae347fb3c28179ab647f8a6dd2859f48fd7..408c108a9523aea1085926e8824c891ecd089f87 100644
--- a/packages/ui/src/api/titres.js
+++ b/packages/ui/src/api/titres.js
@@ -36,14 +36,6 @@ const titreCreationMetas = apiGraphQLFetch(
 const titresMetas = apiGraphQLFetch(
   gql`
     query TitresMetas {
-      domaines {
-        id
-        nom
-        titresTypes {
-          titresCreation
-        }
-      }
-
       types {
         ...titreTypeType
       }
@@ -54,11 +46,6 @@ const titresMetas = apiGraphQLFetch(
         couleur
       }
 
-      substancesLegales {
-        id
-        nom
-      }
-
       entreprises {
         elements {
           id
@@ -90,7 +77,7 @@ const titresGeoPolygon = apiGraphQLFetch(
       $typesIds: [ID!]
       $domainesIds: [ID!]
       $statutsIds: [ID!]
-      $substancesLegalesIds: [ID!]
+      $substancesIds: [ID!]
       $entreprisesIds: [ID!]
       $references: String
       $territoires: String
@@ -101,7 +88,7 @@ const titresGeoPolygon = apiGraphQLFetch(
         typesIds: $typesIds
         domainesIds: $domainesIds
         statutsIds: $statutsIds
-        substancesLegalesIds: $substancesLegalesIds
+        substancesIds: $substancesIds
         entreprisesIds: $entreprisesIds
         references: $references
         territoires: $territoires
@@ -126,7 +113,7 @@ const titresGeo = apiGraphQLFetch(
       $typesIds: [ID!]
       $domainesIds: [ID!]
       $statutsIds: [ID!]
-      $substancesLegalesIds: [ID!]
+      $substancesIds: [ID!]
       $entreprisesIds: [ID!]
       $references: String
       $territoires: String
@@ -137,7 +124,7 @@ const titresGeo = apiGraphQLFetch(
         typesIds: $typesIds
         domainesIds: $domainesIds
         statutsIds: $statutsIds
-        substancesLegalesIds: $substancesLegalesIds
+        substancesIds: $substancesIds
         entreprisesIds: $entreprisesIds
         references: $references
         territoires: $territoires
@@ -166,7 +153,7 @@ const titres = apiGraphQLFetch(
       $typesIds: [ID!]
       $domainesIds: [ID!]
       $statutsIds: [ID!]
-      $substancesLegalesIds: [ID!]
+      $substancesIds: [ID!]
       $noms: String
       $entreprisesIds: [ID!]
       $references: String
@@ -181,7 +168,7 @@ const titres = apiGraphQLFetch(
         typesIds: $typesIds
         domainesIds: $domainesIds
         statutsIds: $statutsIds
-        substancesLegalesIds: $substancesLegalesIds
+        substancesIds: $substancesIds
         noms: $noms
         entreprisesIds: $entreprisesIds
         references: $references
diff --git a/packages/ui/src/components/activites/filtres.js b/packages/ui/src/components/activites/filtres.js
index ae8beb756b0182c01bc8092fa0339c0e72142107..d0bf9ba79f60fdd85841b8401705933293825a02 100644
--- a/packages/ui/src/components/activites/filtres.js
+++ b/packages/ui/src/components/activites/filtres.js
@@ -3,6 +3,8 @@ import FiltresDomaines from '../_common/filtres/domaines.vue'
 import FiltresTypes from '../_common/filtres/types.vue'
 import { elementsFormat } from '../../utils/index'
 import { markRaw } from '@vue/reactivity'
+import { SubstancesLegales } from 'camino-common/src/static/substancesLegales'
+import { sortedDomaines } from 'camino-common/src/static/domaines'
 
 const filtres = [
   {
@@ -20,11 +22,11 @@ const filtres = [
     placeholder: 'Nom ou siret'
   },
   {
-    id: 'titresSubstances',
-    type: 'input',
-    value: '',
+    id: 'titresSubstancesIds',
+    type: 'autocomplete',
+    value: [],
     name: 'Substances',
-    placeholder: 'Or, Argent, Ag, …'
+    elements: SubstancesLegales
   },
   {
     id: 'titresReferences',
@@ -45,9 +47,8 @@ const filtres = [
     name: 'Domaines',
     type: 'checkboxes',
     value: [],
-    elements: [],
-    component: markRaw(FiltresDomaines),
-    elementsFormat
+    elements: sortedDomaines,
+    component: markRaw(FiltresDomaines)
   },
   {
     id: 'titresTypesIds',
diff --git a/packages/ui/src/components/dashboard/__snapshots__/pure-entreprise-dashboard.stories.storyshot b/packages/ui/src/components/dashboard/__snapshots__/pure-entreprise-dashboard.stories.storyshot
index ab37f16c91175302d6c2907e755edcc9c2ca4b1d..20a77bc2774e5ed1be96b29a5ef18ee8a34dc72c 100644
--- a/packages/ui/src/components/dashboard/__snapshots__/pure-entreprise-dashboard.stories.storyshot
+++ b/packages/ui/src/components/dashboard/__snapshots__/pure-entreprise-dashboard.stories.storyshot
@@ -1200,7 +1200,7 @@ exports[`Automated Storybook Snapshots Components/PureEntrepriseDashboard Ok 1`]
             class="th nowrap min-width-6"
           >
             <button
-              class="btn-menu full-x p-0"
+              class="btn-menu full-x p-0 disabled"
             >
               Substances 
               <!--v-if-->
@@ -2734,7 +2734,7 @@ exports[`Automated Storybook Snapshots Components/PureEntrepriseDashboard Ok Wit
             class="th nowrap min-width-6"
           >
             <button
-              class="btn-menu full-x p-0"
+              class="btn-menu full-x p-0 disabled"
             >
               Substances 
               <!--v-if-->
diff --git a/packages/ui/src/components/dashboard/pure-entreprise-dashboard.stories.ts b/packages/ui/src/components/dashboard/pure-entreprise-dashboard.stories.ts
index 3c8865c0a56856e3e719b54a19d7342738e6d393..2c5c9b5863f122cba9d13481bbd5f800530c0ee6 100644
--- a/packages/ui/src/components/dashboard/pure-entreprise-dashboard.stories.ts
+++ b/packages/ui/src/components/dashboard/pure-entreprise-dashboard.stories.ts
@@ -45,12 +45,7 @@ const titres: TitreEntreprise[] = [
       nom: 'échu',
       couleur: 'neutral'
     },
-    substances: [
-      {
-        id: 'ferx',
-        nom: 'fer'
-      }
-    ],
+    substances: ['ferx'],
     activitesEnConstruction: null,
     activitesAbsentes: null,
     titulaires: [
@@ -91,12 +86,7 @@ const titres: TitreEntreprise[] = [
       nom: 'valide',
       couleur: 'success'
     },
-    substances: [
-      {
-        id: 'auru',
-        nom: 'or'
-      }
-    ],
+    substances: ['auru'],
     activitesEnConstruction: null,
     activitesAbsentes: null,
     titulaires: [
diff --git a/packages/ui/src/components/demarches/filtres.js b/packages/ui/src/components/demarches/filtres.js
index 362e721e1699e18cafdb6fed0eede3467c5796c8..ca090473e5001b51cba4ba2fed5dbcba6ae4d8f4 100644
--- a/packages/ui/src/components/demarches/filtres.js
+++ b/packages/ui/src/components/demarches/filtres.js
@@ -4,6 +4,8 @@ import FiltresTitresStatuts from '../_common/filtres/statuts.vue'
 import FiltresEtapes from './filtres-custom-etapes.vue'
 import { elementsFormat } from '../../utils/index'
 import { EtapesStatuts } from 'camino-common/src/static/etapesStatuts'
+import { SubstancesLegales } from 'camino-common/src/static/substancesLegales'
+import { sortedDomaines } from 'camino-common/src/static/domaines'
 
 const etapesElementsFormat = (id, metas) => metas.etapesTypes
 const etapesLabelFormat = f =>
@@ -79,9 +81,8 @@ const filtres = [
     name: 'Domaines',
     type: 'checkboxes',
     value: [],
-    elements: [],
-    component: markRaw(FiltresTitresDomaines),
-    elementsFormat
+    elements: sortedDomaines,
+    component: markRaw(FiltresTitresDomaines)
   },
   {
     id: 'titresTypesIds',
@@ -115,11 +116,11 @@ const filtres = [
     placeholder: 'Nom ou siret'
   },
   {
-    id: 'titresSubstances',
-    type: 'input',
-    value: '',
-    name: 'Substances',
-    placeholder: 'Or, Argent, Ag, …'
+    id: 'titresSubstancesIds',
+    type: 'autocomplete',
+    value: [],
+    elements: SubstancesLegales,
+    name: 'Substances'
   },
   {
     id: 'titresReferences',
diff --git a/packages/ui/src/components/etape/__snapshots__/substances-edit.stories.storyshot b/packages/ui/src/components/etape/__snapshots__/substances-edit.stories.storyshot
new file mode 100644
index 0000000000000000000000000000000000000000..65a5fc1c445e3260b8a4b2d58c6a8241594879fc
--- /dev/null
+++ b/packages/ui/src/components/etape/__snapshots__/substances-edit.stories.storyshot
@@ -0,0 +1,1281 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Automated Storybook Snapshots Components/Etape/SubstancesEdit Avec Heritage 1`] = `
+<div>
+  <h3
+    class="mb-s"
+  >
+    Substances
+  </h3>
+  <div
+    class="mb-s"
+  >
+    <div>
+      
+      <ul
+        class="list-inline mb-s"
+      >
+        
+        <li
+          class="mr-xs mb-xs"
+        >
+          <span
+            class="bold cap-first small lh-2"
+          >
+            <span
+              class="bg-neutral py-xs px-s py-xxs px-xs rnd-xs color-bg box"
+            >
+              
+              or
+              
+            </span>
+          </span>
+        </li>
+        
+      </ul>
+      
+      <div
+        class="mb-s"
+      >
+        <span
+          class="bold cap-first small"
+        >
+          <span
+            class="bg-info py-xxs px-xs py-xxs px-xs rnd-xs color-bg box"
+          >
+            
+            Incertain 
+            
+          </span>
+        </span>
+      </div>
+      <p
+        class="h6 italic mb-s"
+      >
+         Hérité de : 
+        <span
+          class="cap-first"
+        >
+          Demande
+        </span>
+         (01 / 01 / 2020) 
+      </p>
+    </div>
+    
+    
+    <button
+      class="btn full-x rnd-xs py-s px-m small mb-s"
+    >
+      Modifier
+    </button>
+  </div>
+</div>
+`;
+
+exports[`Automated Storybook Snapshots Components/Etape/SubstancesEdit Sans Heritage 1`] = `
+<div>
+  <h3
+    class="mb-s"
+  >
+    Substances
+  </h3>
+  <div
+    class="mb-s"
+  >
+    
+    
+    <div>
+      <div
+        class="flex mb-s"
+      >
+        <select
+          class="p-s mr-s"
+        >
+          
+          <option
+            value="selh"
+          >
+            sources d'eau salée
+          </option>
+          <option
+            value="aloh"
+          >
+            bauxite
+          </option>
+          <option
+            value="anti"
+          >
+            antimoine
+          </option>
+          <option
+            value="arge"
+          >
+            argent
+          </option>
+          <option
+            value="arse"
+          >
+            arsenic
+          </option>
+          <option
+            disabled=""
+            value="auru"
+          >
+            or
+          </option>
+          <option
+            value="bery"
+          >
+            béryllium
+          </option>
+          <option
+            value="bism"
+          >
+            bismuth
+          </option>
+          <option
+            value="cadm"
+          >
+            cadmium
+          </option>
+          <option
+            value="ceri"
+          >
+            cérium
+          </option>
+          <option
+            value="cesi"
+          >
+            césium
+          </option>
+          <option
+            value="chro"
+          >
+            chrome
+          </option>
+          <option
+            value="coba"
+          >
+            cobalt
+          </option>
+          <option
+            value="coox"
+          >
+            gaz carbonique
+          </option>
+          <option
+            value="cuiv"
+          >
+            cuivre
+          </option>
+          <option
+            value="diam"
+          >
+            diamant
+          </option>
+          <option
+            value="etai"
+          >
+            étain
+          </option>
+          <option
+            value="ferx"
+          >
+            fer
+          </option>
+          <option
+            value="fluo"
+          >
+            fluorine
+          </option>
+          <option
+            value="gall"
+          >
+            gallium
+          </option>
+          <option
+            value="germ"
+          >
+            germanium
+          </option>
+          <option
+            value="grap"
+          >
+            graphite
+          </option>
+          <option
+            value="hafn"
+          >
+            hafnium
+          </option>
+          <option
+            value="heli"
+          >
+            hélium
+          </option>
+          <option
+            value="hydm"
+          >
+            calcaires bitumineux
+          </option>
+          <option
+            value="indi"
+          >
+            indium
+          </option>
+          <option
+            value="kals"
+          >
+            alun
+          </option>
+          <option
+            value="kclx"
+          >
+            sels de potassium
+          </option>
+          <option
+            value="lith"
+          >
+            lithium
+          </option>
+          <option
+            value="mang"
+          >
+            manganèse
+          </option>
+          <option
+            value="merc"
+          >
+            mercure
+          </option>
+          <option
+            value="moly"
+          >
+            molybdène
+          </option>
+          <option
+            value="nacl"
+          >
+            sels de sodium
+          </option>
+          <option
+            value="nick"
+          >
+            nickel
+          </option>
+          <option
+            value="niob"
+          >
+            niobium
+          </option>
+          <option
+            value="oooo"
+          >
+            non précisée(s)
+          </option>
+          <option
+            value="phos"
+          >
+            phosphates
+          </option>
+          <option
+            value="plat"
+          >
+            platine
+          </option>
+          <option
+            value="plax"
+          >
+            métaux de la mine du platine
+          </option>
+          <option
+            value="plom"
+          >
+            plomb
+          </option>
+          <option
+            value="rhen"
+          >
+            rhénium
+          </option>
+          <option
+            value="rubi"
+          >
+            rubidium
+          </option>
+          <option
+            value="scan"
+          >
+            scandium
+          </option>
+          <option
+            value="scoc"
+          >
+            substances connexes
+          </option>
+          <option
+            value="sele"
+          >
+            sélénium
+          </option>
+          <option
+            value="souf"
+          >
+            soufre
+          </option>
+          <option
+            value="soxx"
+          >
+            sulfates autres que les sulfates alcalino-terreux
+          </option>
+          <option
+            value="tant"
+          >
+            tantale
+          </option>
+          <option
+            value="tell"
+          >
+            tellure
+          </option>
+          <option
+            value="thal"
+          >
+            thallium
+          </option>
+          <option
+            value="tita"
+          >
+            titane
+          </option>
+          <option
+            value="trxx"
+          >
+            autres éléments de terres rares
+          </option>
+          <option
+            value="vana"
+          >
+            vanadium
+          </option>
+          <option
+            value="wolf"
+          >
+            tungstène
+          </option>
+          <option
+            value="zinc"
+          >
+            zinc
+          </option>
+          <option
+            value="zirc"
+          >
+            zirconium
+          </option>
+          <option
+            value="dysp"
+          >
+            dysprosium
+          </option>
+          <option
+            value="erbi"
+          >
+            erbium
+          </option>
+          <option
+            value="euro"
+          >
+            europium
+          </option>
+          <option
+            value="gado"
+          >
+            gadolinium
+          </option>
+          <option
+            value="holm"
+          >
+            holmium
+          </option>
+          <option
+            value="irid"
+          >
+            iridium
+          </option>
+          <option
+            value="lant"
+          >
+            lanthane
+          </option>
+          <option
+            value="lute"
+          >
+            lutécium
+          </option>
+          <option
+            value="mais"
+          >
+            minerais
+          </option>
+          <option
+            value="meba"
+          >
+            métaux de base
+          </option>
+          <option
+            value="meco"
+          >
+            métaux connexes
+          </option>
+          <option
+            value="mepr"
+          >
+            métaux précieux
+          </option>
+          <option
+            value="neod"
+          >
+            néodyme
+          </option>
+          <option
+            value="osmi"
+          >
+            osmium
+          </option>
+          <option
+            value="pall"
+          >
+            palladium
+          </option>
+          <option
+            value="pipe"
+          >
+            pierres précieuses
+          </option>
+          <option
+            value="pras"
+          >
+            praséodyme
+          </option>
+          <option
+            value="prom"
+          >
+            prométhium
+          </option>
+          <option
+            value="pyri"
+          >
+            pyrite
+          </option>
+          <option
+            value="rhod"
+          >
+            rhodium
+          </option>
+          <option
+            value="ruth"
+          >
+            ruthénium
+          </option>
+          <option
+            value="sama"
+          >
+            samarium
+          </option>
+          <option
+            value="selg"
+          >
+            sel gemme
+          </option>
+          <option
+            value="selp"
+          >
+            puits d'eau salée
+          </option>
+          <option
+            value="sels"
+          >
+            sels
+          </option>
+          <option
+            value="selx"
+          >
+            sel
+          </option>
+          <option
+            value="terb"
+          >
+            terbium
+          </option>
+          <option
+            value="thul"
+          >
+            thulium
+          </option>
+          <option
+            value="tmas"
+          >
+            tous métaux associés
+          </option>
+          <option
+            value="ytri"
+          >
+            yttrium
+          </option>
+          <option
+            value="ytte"
+          >
+            ytterbium
+          </option>
+          
+        </select>
+        <!--v-if-->
+        <!--v-if-->
+        <button
+          class="rnd-l-xs btn py-s px-m rnd-r-xs"
+        >
+          <svg
+            aria-labelledby="minus"
+            fill="#666"
+            height="24px"
+            role="application"
+            style="display: block;"
+            tabindex="-1"
+            viewBox="0 0 24 24"
+            width="24px"
+            xmlns="http://www.w3.org/2000/svg"
+          >
+            <svg
+              aria-hidden="true"
+              style="position: absolute; width: 0px; height: 0px; overflow: hidden;"
+              xmlns="http://www.w3.org/2000/svg"
+              xmlns:xlink="http://www.w3.org/1999/xlink"
+            >
+              <symbol
+                id="icon-at"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  at
+                </title>
+                <path
+                  d="M20 12a8 8 0 1 0-3.562 6.657l1.11 1.664A9.953 9.953 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10v1.5a3.5 3.5 0 0 1-6.396 1.966A5 5 0 1 1 15 8H17v5.5a1.5 1.5 0 0 0 3 0V12zm-8-3a3 3 0 1 0 0 6 3 3 0 0 0 0-6z"
+                />
+              </symbol>
+              <symbol
+                id="icon-checkbox-blank"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  checkbox-blank
+                </title>
+                <path
+                  d="M4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm1 2v14h14V5H5z"
+                />
+              </symbol>
+              <symbol
+                id="icon-checkbox"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  checkbox
+                </title>
+                <path
+                  d="M4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm1 2v14h14V5H5zm6.003 11L6.76 11.757l1.414-1.414 2.829 2.829 5.656-5.657 1.415 1.414L11.003 16z"
+                />
+              </symbol>
+              <symbol
+                id="icon-chevron-bas"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  chevron-bas
+                </title>
+                <path
+                  d="M12 13.172l4.95-4.95 1.414 1.414L12 16 5.636 9.636 7.05 8.222z"
+                />
+              </symbol>
+              <symbol
+                id="icon-chevron-haut"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  chevron-haut
+                </title>
+                <path
+                  d="M12 10.828l-4.95 4.95-1.414-1.414L12 8l6.364 6.364-1.414 1.414z"
+                />
+              </symbol>
+              <symbol
+                id="icon-close"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  close
+                </title>
+                <path
+                  d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"
+                />
+              </symbol>
+              <symbol
+                id="icon-delete"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  delete
+                </title>
+                <path
+                  d="M17 6h5v2h-2v13a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V8H2V6h5V3a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v3zm1 2H6v12h12V8zm-9 3h2v6H9v-6zm4 0h2v6h-2v-6zM9 4v2h6V4H9z"
+                />
+              </symbol>
+              <symbol
+                id="icon-download"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  download
+                </title>
+                <path
+                  d="M3 19h18v2H3v-2zm10-5.828L19.071 7.1l1.414 1.414L12 17 3.515 8.515 4.929 7.1 11 13.17V2h2v11.172z"
+                />
+              </symbol>
+              <symbol
+                id="icon-error-warning"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  error-warning
+                </title>
+                <path
+                  d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-7v2h2v-2h-2zm0-8v6h2V7h-2z"
+                  fill="rgba(231,76,60,1)"
+                />
+              </symbol>
+              <symbol
+                id="icon-external-link"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  external-link
+                </title>
+                <path
+                  d="M10 6v2H5v11h11v-5h2v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h6zm11-3v8h-2V6.413l-7.793 7.794-1.414-1.414L17.585 5H13V3h8z"
+                />
+              </symbol>
+              <symbol
+                id="icon-file"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  file
+                </title>
+                <path
+                  d="M9 2.003V2h10.998C20.55 2 21 2.455 21 2.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 20.993V8l6-5.997zM5.83 8H9V4.83L5.83 8zM11 4v5a1 1 0 0 1-1 1H5v10h14V4h-8z"
+                />
+              </symbol>
+              <symbol
+                id="icon-file-add"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  file-add
+                </title>
+                <path
+                  d="M15 4H5v16h14V8h-4V4zM3 2.992C3 2.444 3.447 2 3.999 2H16l5 5v13.993A1 1 0 0 1 20.007 22H3.993A1 1 0 0 1 3 21.008V2.992zM11 11V8h2v3h3v2h-3v3h-2v-3H8v-2h3z"
+                />
+              </symbol>
+              <symbol
+                id="icon-globe"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  globe
+                </title>
+                <path
+                  d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-2.29-2.333A17.9 17.9 0 0 1 8.027 13H4.062a8.008 8.008 0 0 0 5.648 6.667zM10.03 13c.151 2.439.848 4.73 1.97 6.752A15.905 15.905 0 0 0 13.97 13h-3.94zm9.908 0h-3.965a17.9 17.9 0 0 1-1.683 6.667A8.008 8.008 0 0 0 19.938 13zM4.062 11h3.965A17.9 17.9 0 0 1 9.71 4.333 8.008 8.008 0 0 0 4.062 11zm5.969 0h3.938A15.905 15.905 0 0 0 12 4.248 15.905 15.905 0 0 0 10.03 11zm4.259-6.667A17.9 17.9 0 0 1 15.973 11h3.965a8.008 8.008 0 0 0-5.648-6.667z"
+                />
+              </symbol>
+              <symbol
+                id="icon-help"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  help
+                </title>
+                <path
+                  d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM11 7h2v2h-2V7zm0 4h2v6h-2v-6z"
+                />
+              </symbol>
+              <symbol
+                id="icon-key"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  key
+                </title>
+                <path
+                  d="M10.758 11.828l7.849-7.849 1.414 1.414-1.414 1.415 2.474 2.474-1.414 1.415-2.475-2.475-1.414 1.414 2.121 2.121-1.414 1.415-2.121-2.122-2.192 2.192a5.002 5.002 0 0 1-7.708 6.294 5 5 0 0 1 6.294-7.708zm-.637 6.293A3 3 0 1 0 5.88 13.88a3 3 0 0 0 4.242 4.242z"
+                />
+              </symbol>
+              <symbol
+                id="icon-link"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  link
+                </title>
+                <path
+                  d="M18.364 15.536L16.95 14.12l1.414-1.414a5 5 0 1 0-7.071-7.071L9.879 7.05 8.464 5.636 9.88 4.222a7 7 0 0 1 9.9 9.9l-1.415 1.414zm-2.828 2.828l-1.415 1.414a7 7 0 0 1-9.9-9.9l1.415-1.414L7.05 9.88l-1.414 1.414a5 5 0 1 0 7.071 7.071l1.414-1.414 1.415 1.414zm-.708-10.607l1.415 1.415-7.071 7.07-1.415-1.414 7.071-7.07z"
+                />
+              </symbol>
+              <symbol
+                id="icon-list"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  list
+                </title>
+                <path
+                  d="M8 4h13v2H8V4zM4.5 6.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 6.9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM8 11h13v2H8v-2zm0 7h13v2H8v-2z"
+                />
+              </symbol>
+              <symbol
+                id="icon-marker-cluster"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  marker-cluster
+                </title>
+                <path
+                  d="M12 20.9l4.95-4.95a7 7 0 1 0-9.9 0L12 20.9zm0 2.828l-6.364-6.364a9 9 0 1 1 12.728 0L12 23.728zM12 13a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 2a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"
+                />
+              </symbol>
+              <symbol
+                id="icon-marker-none"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  marker-none
+                </title>
+                <g
+                  id="24-markers-grouped"
+                  transform="translate(0.908117, 0.000078)"
+                >
+                  <path
+                    d="M9.09188309,18.8999221 L14.0418831,13.9499221 C16.7753479,11.2161783 16.7751972,6.78415329 14.0415464,4.05059549 C11.3078956,1.31703769 6.87587059,1.31703769 4.1422198,4.05059549 C1.40856902,6.78415329 1.40841827,11.2161783 4.14188309,13.9499221 L9.09188309,18.8999221 Z M9.09188309,21.7279221 L2.72788309,15.3639221 C-0.786803866,11.8491921 -0.786780603,6.15072729 2.72793505,2.63602598 C6.24265071,-0.878675327 11.9411155,-0.878675327 15.4558311,2.63602598 C18.9705468,6.15072729 18.97057,11.8491921 15.4558831,15.3639221 L9.09188309,21.7279221 L9.09188309,21.7279221 Z M9.09188309,10.9999221 C10.1964526,10.9999221 11.0918831,10.1044916 11.0918831,8.99992206 C11.0918831,7.89535256 10.1964526,6.99992206 9.09188309,6.99992206 C7.98731359,6.99992206 7.09188309,7.89535256 7.09188309,8.99992206 C7.09188309,10.1044916 7.98731359,10.9999221 9.09188309,10.9999221 Z M9.09188309,12.9999221 C6.88274409,12.9999221 5.09188309,11.2090611 5.09188309,8.99992206 C5.09188309,6.79078306 6.88274409,4.99992206 9.09188309,4.99992206 C11.3010221,4.99992206 13.0918831,6.79078306 13.0918831,8.99992206 C13.0918831,11.2090611 11.3010221,12.9999221 9.09188309,12.9999221 Z"
+                  />
+                  <rect
+                    height="24"
+                    transform="translate(9.192388, 9.514641) rotate(-45.000000) translate(-9.192388, -9.514641) "
+                    width="2"
+                    x="8.19238816"
+                    y="-2.48535931"
+                  />
+                </g>
+              </symbol>
+              <symbol
+                id="icon-marker-ungrouped"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  marker-ungrouped
+                </title>
+                <path
+                  d="M9.975 8.975a3.5 3.5 0 1 0-4.95 0L7.5 11.45l2.475-2.475zM7.5 14.278L3.61 10.39a5.5 5.5 0 1 1 7.78 0L7.5 14.28zM7.5 8a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm9 12.45l2.475-2.475a3.5 3.5 0 1 0-4.95 0L16.5 20.45zm3.89-1.06l-3.89 3.888-3.89-3.889a5.5 5.5 0 1 1 7.78 0zM16.5 17a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"
+                />
+              </symbol>
+              <symbol
+                id="icon-menu"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  menu
+                </title>
+                <path
+                  d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"
+                />
+              </symbol>
+              <symbol
+                id="icon-minus"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  minus
+                </title>
+                <path
+                  d="M5 11h14v2H5z"
+                />
+              </symbol>
+              <symbol
+                id="icon-move-down"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  move-down
+                </title>
+                <path
+                  d="M13 16.172l5.364-5.364 1.414 1.414L12 20l-7.778-7.778 1.414-1.414L11 16.172V4h2v12.172z"
+                />
+              </symbol>
+              <symbol
+                id="icon-move-up"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  move-up
+                </title>
+                <path
+                  d="M13 7.828V20h-2V7.828l-5.364 5.364-1.414-1.414L12 4l7.778 7.778-1.414 1.414L13 7.828z"
+                />
+              </symbol>
+              <symbol
+                id="icon-pattern"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  pattern
+                </title>
+                <path
+                  d="M14.567 21h-4.242L3 13.675V9.433L14.567 21zM21 10.393v4.243L9.364 3h4.243L21 10.393zM3 17.849L6.151 21H3v-3.151zM5.053 3L21 18.947V21h-2.19L3 5.19V3h2.053zM21 6.151L17.849 3H21v3.151z"
+                />
+              </symbol>
+              <symbol
+                id="icon-pencil"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  pencil
+                </title>
+                <path
+                  d="M15.728 9.686l-1.414-1.414L5 17.586V19h1.414l9.314-9.314zm1.414-1.414l1.414-1.414-1.414-1.414-1.414 1.414 1.414 1.414zM7.242 21H3v-4.243L16.435 3.322a1 1 0 0 1 1.414 0l2.829 2.829a1 1 0 0 1 0 1.414L7.243 21z"
+                />
+              </symbol>
+              <symbol
+                id="icon-plus"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  plus
+                </title>
+                <path
+                  d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"
+                />
+              </symbol>
+              <symbol
+                id="icon-refresh"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  refresh
+                </title>
+                <path
+                  d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"
+                />
+              </symbol>
+              <symbol
+                id="icon-x"
+                viewBox="0 0 24 24"
+              >
+                <title>
+                  x
+                </title>
+                <path
+                  d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-11.414L9.172 7.757 7.757 9.172 10.586 12l-2.829 2.828 1.415 1.415L12 13.414l2.828 2.829 1.415-1.415L13.414 12l2.829-2.828-1.415-1.415L12 10.586z"
+                />
+              </symbol>
+            </svg>
+            <use
+              href="#icon-minus"
+            />
+          </svg>
+        </button>
+      </div>
+    </div>
+    
+    <button
+      class="btn small rnd-xs py-s px-m full-x flex mb-s"
+    >
+      <span
+        class="mt-xxs"
+      >
+        Ajouter une substance
+      </span>
+      <svg
+        aria-labelledby="plus"
+        class="flex-right"
+        fill="#666"
+        height="24px"
+        role="application"
+        style="display: block;"
+        tabindex="-1"
+        viewBox="0 0 24 24"
+        width="24px"
+        xmlns="http://www.w3.org/2000/svg"
+      >
+        <svg
+          aria-hidden="true"
+          style="position: absolute; width: 0px; height: 0px; overflow: hidden;"
+          xmlns="http://www.w3.org/2000/svg"
+          xmlns:xlink="http://www.w3.org/1999/xlink"
+        >
+          <symbol
+            id="icon-at"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              at
+            </title>
+            <path
+              d="M20 12a8 8 0 1 0-3.562 6.657l1.11 1.664A9.953 9.953 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10v1.5a3.5 3.5 0 0 1-6.396 1.966A5 5 0 1 1 15 8H17v5.5a1.5 1.5 0 0 0 3 0V12zm-8-3a3 3 0 1 0 0 6 3 3 0 0 0 0-6z"
+            />
+          </symbol>
+          <symbol
+            id="icon-checkbox-blank"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              checkbox-blank
+            </title>
+            <path
+              d="M4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm1 2v14h14V5H5z"
+            />
+          </symbol>
+          <symbol
+            id="icon-checkbox"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              checkbox
+            </title>
+            <path
+              d="M4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm1 2v14h14V5H5zm6.003 11L6.76 11.757l1.414-1.414 2.829 2.829 5.656-5.657 1.415 1.414L11.003 16z"
+            />
+          </symbol>
+          <symbol
+            id="icon-chevron-bas"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              chevron-bas
+            </title>
+            <path
+              d="M12 13.172l4.95-4.95 1.414 1.414L12 16 5.636 9.636 7.05 8.222z"
+            />
+          </symbol>
+          <symbol
+            id="icon-chevron-haut"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              chevron-haut
+            </title>
+            <path
+              d="M12 10.828l-4.95 4.95-1.414-1.414L12 8l6.364 6.364-1.414 1.414z"
+            />
+          </symbol>
+          <symbol
+            id="icon-close"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              close
+            </title>
+            <path
+              d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"
+            />
+          </symbol>
+          <symbol
+            id="icon-delete"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              delete
+            </title>
+            <path
+              d="M17 6h5v2h-2v13a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V8H2V6h5V3a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v3zm1 2H6v12h12V8zm-9 3h2v6H9v-6zm4 0h2v6h-2v-6zM9 4v2h6V4H9z"
+            />
+          </symbol>
+          <symbol
+            id="icon-download"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              download
+            </title>
+            <path
+              d="M3 19h18v2H3v-2zm10-5.828L19.071 7.1l1.414 1.414L12 17 3.515 8.515 4.929 7.1 11 13.17V2h2v11.172z"
+            />
+          </symbol>
+          <symbol
+            id="icon-error-warning"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              error-warning
+            </title>
+            <path
+              d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-7v2h2v-2h-2zm0-8v6h2V7h-2z"
+              fill="rgba(231,76,60,1)"
+            />
+          </symbol>
+          <symbol
+            id="icon-external-link"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              external-link
+            </title>
+            <path
+              d="M10 6v2H5v11h11v-5h2v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h6zm11-3v8h-2V6.413l-7.793 7.794-1.414-1.414L17.585 5H13V3h8z"
+            />
+          </symbol>
+          <symbol
+            id="icon-file"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              file
+            </title>
+            <path
+              d="M9 2.003V2h10.998C20.55 2 21 2.455 21 2.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 20.993V8l6-5.997zM5.83 8H9V4.83L5.83 8zM11 4v5a1 1 0 0 1-1 1H5v10h14V4h-8z"
+            />
+          </symbol>
+          <symbol
+            id="icon-file-add"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              file-add
+            </title>
+            <path
+              d="M15 4H5v16h14V8h-4V4zM3 2.992C3 2.444 3.447 2 3.999 2H16l5 5v13.993A1 1 0 0 1 20.007 22H3.993A1 1 0 0 1 3 21.008V2.992zM11 11V8h2v3h3v2h-3v3h-2v-3H8v-2h3z"
+            />
+          </symbol>
+          <symbol
+            id="icon-globe"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              globe
+            </title>
+            <path
+              d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-2.29-2.333A17.9 17.9 0 0 1 8.027 13H4.062a8.008 8.008 0 0 0 5.648 6.667zM10.03 13c.151 2.439.848 4.73 1.97 6.752A15.905 15.905 0 0 0 13.97 13h-3.94zm9.908 0h-3.965a17.9 17.9 0 0 1-1.683 6.667A8.008 8.008 0 0 0 19.938 13zM4.062 11h3.965A17.9 17.9 0 0 1 9.71 4.333 8.008 8.008 0 0 0 4.062 11zm5.969 0h3.938A15.905 15.905 0 0 0 12 4.248 15.905 15.905 0 0 0 10.03 11zm4.259-6.667A17.9 17.9 0 0 1 15.973 11h3.965a8.008 8.008 0 0 0-5.648-6.667z"
+            />
+          </symbol>
+          <symbol
+            id="icon-help"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              help
+            </title>
+            <path
+              d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM11 7h2v2h-2V7zm0 4h2v6h-2v-6z"
+            />
+          </symbol>
+          <symbol
+            id="icon-key"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              key
+            </title>
+            <path
+              d="M10.758 11.828l7.849-7.849 1.414 1.414-1.414 1.415 2.474 2.474-1.414 1.415-2.475-2.475-1.414 1.414 2.121 2.121-1.414 1.415-2.121-2.122-2.192 2.192a5.002 5.002 0 0 1-7.708 6.294 5 5 0 0 1 6.294-7.708zm-.637 6.293A3 3 0 1 0 5.88 13.88a3 3 0 0 0 4.242 4.242z"
+            />
+          </symbol>
+          <symbol
+            id="icon-link"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              link
+            </title>
+            <path
+              d="M18.364 15.536L16.95 14.12l1.414-1.414a5 5 0 1 0-7.071-7.071L9.879 7.05 8.464 5.636 9.88 4.222a7 7 0 0 1 9.9 9.9l-1.415 1.414zm-2.828 2.828l-1.415 1.414a7 7 0 0 1-9.9-9.9l1.415-1.414L7.05 9.88l-1.414 1.414a5 5 0 1 0 7.071 7.071l1.414-1.414 1.415 1.414zm-.708-10.607l1.415 1.415-7.071 7.07-1.415-1.414 7.071-7.07z"
+            />
+          </symbol>
+          <symbol
+            id="icon-list"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              list
+            </title>
+            <path
+              d="M8 4h13v2H8V4zM4.5 6.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 6.9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM8 11h13v2H8v-2zm0 7h13v2H8v-2z"
+            />
+          </symbol>
+          <symbol
+            id="icon-marker-cluster"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              marker-cluster
+            </title>
+            <path
+              d="M12 20.9l4.95-4.95a7 7 0 1 0-9.9 0L12 20.9zm0 2.828l-6.364-6.364a9 9 0 1 1 12.728 0L12 23.728zM12 13a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 2a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"
+            />
+          </symbol>
+          <symbol
+            id="icon-marker-none"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              marker-none
+            </title>
+            <g
+              id="24-markers-grouped"
+              transform="translate(0.908117, 0.000078)"
+            >
+              <path
+                d="M9.09188309,18.8999221 L14.0418831,13.9499221 C16.7753479,11.2161783 16.7751972,6.78415329 14.0415464,4.05059549 C11.3078956,1.31703769 6.87587059,1.31703769 4.1422198,4.05059549 C1.40856902,6.78415329 1.40841827,11.2161783 4.14188309,13.9499221 L9.09188309,18.8999221 Z M9.09188309,21.7279221 L2.72788309,15.3639221 C-0.786803866,11.8491921 -0.786780603,6.15072729 2.72793505,2.63602598 C6.24265071,-0.878675327 11.9411155,-0.878675327 15.4558311,2.63602598 C18.9705468,6.15072729 18.97057,11.8491921 15.4558831,15.3639221 L9.09188309,21.7279221 L9.09188309,21.7279221 Z M9.09188309,10.9999221 C10.1964526,10.9999221 11.0918831,10.1044916 11.0918831,8.99992206 C11.0918831,7.89535256 10.1964526,6.99992206 9.09188309,6.99992206 C7.98731359,6.99992206 7.09188309,7.89535256 7.09188309,8.99992206 C7.09188309,10.1044916 7.98731359,10.9999221 9.09188309,10.9999221 Z M9.09188309,12.9999221 C6.88274409,12.9999221 5.09188309,11.2090611 5.09188309,8.99992206 C5.09188309,6.79078306 6.88274409,4.99992206 9.09188309,4.99992206 C11.3010221,4.99992206 13.0918831,6.79078306 13.0918831,8.99992206 C13.0918831,11.2090611 11.3010221,12.9999221 9.09188309,12.9999221 Z"
+              />
+              <rect
+                height="24"
+                transform="translate(9.192388, 9.514641) rotate(-45.000000) translate(-9.192388, -9.514641) "
+                width="2"
+                x="8.19238816"
+                y="-2.48535931"
+              />
+            </g>
+          </symbol>
+          <symbol
+            id="icon-marker-ungrouped"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              marker-ungrouped
+            </title>
+            <path
+              d="M9.975 8.975a3.5 3.5 0 1 0-4.95 0L7.5 11.45l2.475-2.475zM7.5 14.278L3.61 10.39a5.5 5.5 0 1 1 7.78 0L7.5 14.28zM7.5 8a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm9 12.45l2.475-2.475a3.5 3.5 0 1 0-4.95 0L16.5 20.45zm3.89-1.06l-3.89 3.888-3.89-3.889a5.5 5.5 0 1 1 7.78 0zM16.5 17a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"
+            />
+          </symbol>
+          <symbol
+            id="icon-menu"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              menu
+            </title>
+            <path
+              d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"
+            />
+          </symbol>
+          <symbol
+            id="icon-minus"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              minus
+            </title>
+            <path
+              d="M5 11h14v2H5z"
+            />
+          </symbol>
+          <symbol
+            id="icon-move-down"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              move-down
+            </title>
+            <path
+              d="M13 16.172l5.364-5.364 1.414 1.414L12 20l-7.778-7.778 1.414-1.414L11 16.172V4h2v12.172z"
+            />
+          </symbol>
+          <symbol
+            id="icon-move-up"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              move-up
+            </title>
+            <path
+              d="M13 7.828V20h-2V7.828l-5.364 5.364-1.414-1.414L12 4l7.778 7.778-1.414 1.414L13 7.828z"
+            />
+          </symbol>
+          <symbol
+            id="icon-pattern"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              pattern
+            </title>
+            <path
+              d="M14.567 21h-4.242L3 13.675V9.433L14.567 21zM21 10.393v4.243L9.364 3h4.243L21 10.393zM3 17.849L6.151 21H3v-3.151zM5.053 3L21 18.947V21h-2.19L3 5.19V3h2.053zM21 6.151L17.849 3H21v3.151z"
+            />
+          </symbol>
+          <symbol
+            id="icon-pencil"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              pencil
+            </title>
+            <path
+              d="M15.728 9.686l-1.414-1.414L5 17.586V19h1.414l9.314-9.314zm1.414-1.414l1.414-1.414-1.414-1.414-1.414 1.414 1.414 1.414zM7.242 21H3v-4.243L16.435 3.322a1 1 0 0 1 1.414 0l2.829 2.829a1 1 0 0 1 0 1.414L7.243 21z"
+            />
+          </symbol>
+          <symbol
+            id="icon-plus"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              plus
+            </title>
+            <path
+              d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"
+            />
+          </symbol>
+          <symbol
+            id="icon-refresh"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              refresh
+            </title>
+            <path
+              d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"
+            />
+          </symbol>
+          <symbol
+            id="icon-x"
+            viewBox="0 0 24 24"
+          >
+            <title>
+              x
+            </title>
+            <path
+              d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-11.414L9.172 7.757 7.757 9.172 10.586 12l-2.829 2.828 1.415 1.415L12 13.414l2.828 2.829 1.415-1.415L13.414 12l2.829-2.828-1.415-1.415L12 10.586z"
+            />
+          </symbol>
+        </svg>
+        <use
+          href="#icon-plus"
+        />
+      </svg>
+    </button>
+    <div
+      class="h6"
+    >
+      <label>
+        <input
+          class="mr-xs"
+          type="checkbox"
+        />
+         Incertain 
+      </label>
+    </div>
+    
+    
+    
+    <button
+      class="btn full-x rnd-xs py-s px-m small mb-s"
+    >
+      Hériter de l'étape précédente
+    </button>
+  </div>
+</div>
+`;
diff --git a/packages/ui/src/components/etape/edit.vue b/packages/ui/src/components/etape/edit.vue
index fda3fea7f9d0ab99e6788b693381cde3c139fece..21a4cdc8cfb4d26962e4048a57d88e9f1c06af3b 100644
--- a/packages/ui/src/components/etape/edit.vue
+++ b/packages/ui/src/components/etape/edit.vue
@@ -138,6 +138,7 @@ import SectionsEdit from './sections-edit.vue'
 import DocumentsEdit from '../document/multi-edit.vue'
 import JustificatifsEdit from './justificatifs-edit.vue'
 import DecisionsAnnexesEdit from './decisions-annexes-edit.vue'
+import { SubstancesLegales } from 'camino-common/src/static/substancesLegales'
 
 export default {
   components: {
@@ -338,8 +339,8 @@ export default {
     },
 
     substances() {
-      return this.$store.state.titreEtapeEdition.metas.substances.filter(su =>
-        su.legales.find(sl => sl.domaine.id === this.domaineId)
+      return SubstancesLegales.filter(sl =>
+        sl.domaineIds.includes(this.domaineId)
       )
     }
   },
diff --git a/packages/ui/src/components/etape/fondamentales-edit.vue b/packages/ui/src/components/etape/fondamentales-edit.vue
index 1f23f1f63d4341d26bf6221cfbd44e8b4b93a018..29e2ad01cc212492866828d4e7c30e975f9b83f2 100644
--- a/packages/ui/src/components/etape/fondamentales-edit.vue
+++ b/packages/ui/src/components/etape/fondamentales-edit.vue
@@ -218,84 +218,12 @@
       <hr />
     </div>
 
-    <h3 class="mb-s">Substances</h3>
-    <HeritageEdit
-      v-model:prop="etape.heritageProps.substances"
-      propId="substances"
-      :isArray="true"
-    >
-      <template #write>
-        <div v-for="(substance, n) in etape.substances" :key="n">
-          <div class="flex mb-s">
-            <select v-model="etape.substances[n]" class="p-s mr-s">
-              <option
-                v-for="s in substances"
-                :key="s.id"
-                :value="{ id: s.id }"
-                :disabled="etape.substances.find(({ id }) => id === s.id)"
-              >
-                {{ s.nom }}
-              </option>
-            </select>
-            <button
-              v-if="substancesLength && n + 1 < substancesLength"
-              class="btn-border py-s px-m rnd-l-xs"
-              @click="substanceMoveDown(n)"
-            >
-              <Icon size="M" name="move-down" />
-            </button>
-            <button
-              v-if="substancesLength && n > 0 && etape.substances[n].id"
-              :class="{
-                'rnd-l-xs': !(substancesLength && n + 1 < substancesLength)
-              }"
-              class="btn-border py-s px-m"
-              @click="substanceMoveUp(n)"
-            >
-              <Icon size="M" name="move-up" />
-            </button>
-            <button
-              :class="{
-                'rnd-l-xs': !etape.substances[n].id || substancesLength === 1
-              }"
-              class="btn py-s px-m rnd-r-xs"
-              @click="substanceRemove(n)"
-            >
-              <Icon name="minus" size="M" />
-            </button>
-          </div>
-        </div>
-
-        <button
-          v-if="!etape.substances.some(({ id }) => id === '')"
-          class="btn small rnd-xs py-s px-m full-x flex mb-s"
-          @click="substanceAdd"
-        >
-          <span class="mt-xxs">Ajouter une substance</span>
-          <Icon name="plus" size="M" class="flex-right" />
-        </button>
-
-        <div v-if="substancesLength" class="h6">
-          <label>
-            <input
-              v-model="etape.incertitudes.substances"
-              type="checkbox"
-              class="mr-xs"
-            />
-            Incertain
-          </label>
-        </div>
-      </template>
-
-      <template #read>
-        <TagList
-          class="mb-s"
-          :elements="
-            etape.heritageProps.substances.etape.substances.map(s => s.nom)
-          "
-        />
-      </template>
-    </HeritageEdit>
+    <SubstancesEdit
+      :substances="etape.substances"
+      :heritageProps="etape.heritageProps"
+      :incertitudes="etape.incertitudes"
+      :domaineId="domaineId"
+    />
 
     <hr />
   </div>
@@ -304,7 +232,6 @@
 <script>
 import { dateFormat } from '../../utils/index'
 import Tag from '../_ui/tag.vue'
-import TagList from '../_ui/tag-list.vue'
 import InputDate from '../_ui/input-date.vue'
 import InputNumber from '../_ui/input-number.vue'
 import HeritageEdit from './heritage-edit.vue'
@@ -312,16 +239,15 @@ import PropDuree from './prop-duree.vue'
 import AutocompleteEntreprise from './autocomplete-entreprise.vue'
 
 import { etablissementNameFind } from '@/utils/entreprise'
-import Icon from '@/components/_ui/icon.vue'
+import SubstancesEdit from '@/components/etape/substances-edit.vue'
 
 export default {
   components: {
-    Icon,
+    SubstancesEdit,
     InputDate,
     InputNumber,
     HeritageEdit,
     Tag,
-    TagList,
     PropDuree,
     AutocompleteEntreprise
   },
@@ -378,10 +304,6 @@ export default {
       return this.etape.amodiataires?.filter(({ id }) => id).length || 0
     },
 
-    substancesLength() {
-      return this.etape.substances.filter(({ id }) => id).length
-    },
-
     dureeOptionalCheck() {
       return (!this.isArm && !this.isAxm) || this.etape.type.id !== 'mfr'
     },
@@ -405,7 +327,8 @@ export default {
     complete() {
       return (
         this.etape.type.id !== 'mfr' ||
-        (this.substancesLength > 0 &&
+        (this.etape.substances.filter(substanceId => !!substanceId).length >
+          0 &&
           (this.dureeOptionalCheck ||
             !!this.etape.duree.ans ||
             !!this.etape.duree.mois))
@@ -472,25 +395,6 @@ export default {
         ...newAmodiataires
       )
     },
-    substanceAdd() {
-      this.etape.substances.push({ id: '' })
-    },
-
-    substanceRemove(index) {
-      this.etape.substances.splice(index, 1)
-    },
-
-    substanceMoveDown(n) {
-      const substance = this.etape.substances[n]
-      this.etape.substances.splice(n, 1)
-      this.etape.substances.splice(n + 1, 0, substance)
-    },
-
-    substanceMoveUp(n) {
-      const substance = this.etape.substances[n]
-      this.etape.substances.splice(n, 1)
-      this.etape.substances.splice(n - 1, 0, substance)
-    },
 
     etablissementNameFind() {
       return etablissementNameFind()
diff --git a/packages/ui/src/components/etape/fondamentales.vue b/packages/ui/src/components/etape/fondamentales.vue
index 8d049ae4de9bd08b944dd50c40d9f88a0922e1ce..4d2fc996d4879e00a9ef298c88ccf445519dbf6e 100644
--- a/packages/ui/src/components/etape/fondamentales.vue
+++ b/packages/ui/src/components/etape/fondamentales.vue
@@ -134,34 +134,26 @@
         </h5>
       </div>
       <div class="tablet-blob-3-4">
-        <TagList :elements="etape.substances.map(s => s.nom)" />
+        <TagList
+          :elements="
+            etape.substances.map(
+              substanceId => SubstancesLegale[substanceId].nom
+            )
+          "
+        />
       </div>
     </div>
   </div>
 </template>
 
-<script>
+<script setup lang="ts">
 import { dateFormat } from '@/utils'
 import { etablissementNameFind } from '../../utils/entreprise'
 import TagList from '../_ui/tag-list.vue'
 import Tag from '../_ui/tag.vue'
 import PropDuree from './prop-duree.vue'
+import { SubstancesLegale } from 'camino-common/src/static/substancesLegales'
+import { Etape } from 'camino-common/src/etape'
 
-export default {
-  components: { TagList, Tag, PropDuree },
-
-  props: {
-    etape: { type: Object, required: true }
-  },
-
-  methods: {
-    etablissementNameFind(etablissements, date) {
-      return etablissementNameFind(etablissements, date)
-    },
-
-    dateFormat(date) {
-      return dateFormat(date)
-    }
-  }
-}
+defineProps<{ etape: Etape }>()
 </script>
diff --git a/packages/ui/src/components/etape/heritage-edit.vue b/packages/ui/src/components/etape/heritage-edit.vue
index b074c8d03295f74e6f482593cf4faea65bb76383..c30ffbf5a374da1d436848c7ef51c2a89aeea0ba 100644
--- a/packages/ui/src/components/etape/heritage-edit.vue
+++ b/packages/ui/src/components/etape/heritage-edit.vue
@@ -30,43 +30,39 @@
   </div>
 </template>
 
-<script>
+<script setup lang="ts">
 import { hasValeurCheck } from '@/utils/contenu'
 import Tag from '@/components/_ui/tag.vue'
 import { dateFormat } from '@/utils'
+import { computed, withDefaults } from 'vue'
+import { HeritageProp } from 'camino-common/src/etape'
 
-export default {
-  components: { Tag },
-  props: {
-    prop: { type: Object, required: true },
-    propId: { type: String, required: true },
-    isArray: { type: Boolean, default: false },
-    sectionId: { type: String, default: null }
-  },
-  computed: {
-    buttonText() {
-      return this.prop.actif ? 'Modifier' : `Hériter de l'étape précédente`
-    },
+const props = withDefaults(
+  defineProps<{
+    prop: HeritageProp
+    propId: string
+    isArray?: boolean
+    sectionId?: string
+  }>(),
+  { isArray: false, sectionId: undefined }
+)
 
-    hasHeritage() {
-      let contenu
+const buttonText = computed<string>(() =>
+  props.prop.actif ? 'Modifier' : `Hériter de l'étape précédente`
+)
 
-      if (this.sectionId) {
-        contenu =
-          this.prop.etape &&
-          this.prop.etape.contenu &&
-          this.prop.etape.contenu[this.sectionId]
-      } else {
-        contenu = this.prop.etape
-      }
+const hasHeritage = computed<boolean>(() => {
+  let contenu
 
-      return hasValeurCheck(this.propId, contenu)
-    }
-  },
-  methods: {
-    dateFormat(date) {
-      return dateFormat(date)
-    }
+  if (props.sectionId) {
+    contenu =
+      props.prop.etape &&
+      props.prop.etape.contenu &&
+      props.prop.etape.contenu[props.sectionId]
+  } else {
+    contenu = props.prop.etape
   }
-}
+
+  return hasValeurCheck(props.propId, contenu)
+})
 </script>
diff --git a/packages/ui/src/components/etape/substances-edit.stories.ts b/packages/ui/src/components/etape/substances-edit.stories.ts
new file mode 100644
index 0000000000000000000000000000000000000000..478663d5abb50148bac8b4d2b5dd504b1887f8b6
--- /dev/null
+++ b/packages/ui/src/components/etape/substances-edit.stories.ts
@@ -0,0 +1,70 @@
+import SubstancesEdit from './substances-edit.vue'
+import { Meta, Story } from '@storybook/vue3'
+import {
+  SubstanceLegaleId,
+  SubstancesLegale
+} from 'camino-common/src/static/substancesLegales'
+import { DomaineId } from 'camino-common/src/static/domaines'
+import { HeritageProp } from 'camino-common/src/etape'
+
+const meta: Meta = {
+  title: 'Components/Etape/SubstancesEdit',
+  component: SubstancesEdit,
+  argTypes: {}
+}
+export default meta
+
+type Props = {
+  substances: (SubstanceLegaleId | undefined)[]
+  heritageProps: { substances: HeritageProp }
+  incertitudes: { substances: boolean }
+  domaineId: DomaineId
+}
+
+const Template: Story<Props> = (args: Props) => ({
+  components: { SubstancesEdit },
+  setup() {
+    return { args }
+  },
+  data: () => ({
+    substances: ['auru']
+  }),
+  template: `<SubstancesEdit  v-bind="args" :substances='substances'/>`
+})
+const etapeHeritage = {
+  etape: {
+    duree: 4,
+    dateFin: '2020-01-01',
+    dateDebut: '2020-01-01',
+    date: '2020-01-01',
+    titulaires: [],
+    amodiataires: [],
+    type: { nom: 'Demande' },
+    substances: [SubstancesLegale.auru.id],
+    incertitudes: { substances: true },
+    contenu: {}
+  }
+}
+export const SansHeritage = Template.bind({})
+SansHeritage.args = {
+  domaineId: 'm',
+  heritageProps: {
+    substances: {
+      actif: false,
+      ...etapeHeritage
+    }
+  },
+  incertitudes: { substances: true }
+}
+
+export const AvecHeritage = Template.bind({})
+AvecHeritage.args = {
+  domaineId: 'm',
+  heritageProps: {
+    substances: {
+      actif: true,
+      ...etapeHeritage
+    }
+  },
+  incertitudes: { substances: true }
+}
diff --git a/packages/ui/src/components/etape/substances-edit.vue b/packages/ui/src/components/etape/substances-edit.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b1982e59600b2b541504ca77163ab4c34b7065bd
--- /dev/null
+++ b/packages/ui/src/components/etape/substances-edit.vue
@@ -0,0 +1,131 @@
+<template>
+  <div>
+    <h3 class="mb-s">Substances</h3>
+    <HeritageEdit
+      v-model:prop="heritageProps.substances"
+      propId="substances"
+      :isArray="true"
+    >
+      <template #write>
+        <div v-for="(_substance, n) in substances" :key="n">
+          <div class="flex mb-s">
+            <select v-model="substances[n]" class="p-s mr-s">
+              <option
+                v-for="s in substancesByDomaine"
+                :key="s.id"
+                :value="s.id"
+                :disabled="substances.some(substanceId => substanceId === s.id)"
+              >
+                {{ s.nom }}
+              </option>
+            </select>
+            <button
+              v-if="substancesLength && n + 1 < substancesLength"
+              class="btn-border py-s px-m rnd-l-xs"
+              @click="substanceMoveDown(n)"
+            >
+              <Icon size="M" name="move-down" />
+            </button>
+            <button
+              v-if="substancesLength && n > 0 && substances[n]"
+              :class="{
+                'rnd-l-xs': !(substancesLength && n + 1 < substancesLength)
+              }"
+              class="btn-border py-s px-m"
+              @click="substanceMoveUp(n)"
+            >
+              <Icon size="M" name="move-up" />
+            </button>
+            <button
+              :class="{
+                'rnd-l-xs': !substances[n] || substancesLength === 1
+              }"
+              class="btn py-s px-m rnd-r-xs"
+              @click="substanceRemove(n)"
+            >
+              <Icon name="minus" size="M" />
+            </button>
+          </div>
+        </div>
+
+        <button
+          v-if="substances.every(substanceId => !!substanceId)"
+          class="btn small rnd-xs py-s px-m full-x flex mb-s"
+          @click="substanceAdd"
+        >
+          <span class="mt-xxs">Ajouter une substance</span>
+          <Icon name="plus" size="M" class="flex-right" />
+        </button>
+
+        <div v-if="substancesLength" class="h6">
+          <label>
+            <input
+              v-model="incertitudes.substances"
+              type="checkbox"
+              class="mr-xs"
+            />
+            Incertain
+          </label>
+        </div>
+      </template>
+
+      <template #read>
+        <TagList class="mb-s" :elements="substanceNoms" />
+      </template>
+    </HeritageEdit>
+  </div>
+</template>
+<script setup lang="ts">
+import {
+  SubstancesLegales,
+  SubstancesLegale,
+  SubstanceLegaleId
+} from 'camino-common/src/static/substancesLegales'
+import { computed } from 'vue'
+import HeritageEdit from '@/components/etape/heritage-edit.vue'
+import TagList from '@/components/_ui/tag-list.vue'
+import Icon from '@/components/_ui/icon.vue'
+import { DomaineId } from 'camino-common/src/static/domaines'
+import { HeritageProp } from 'camino-common/src/etape'
+
+const props = defineProps<{
+  substances: (SubstanceLegaleId | undefined)[]
+  heritageProps: { substances: HeritageProp }
+  incertitudes: { substances: boolean }
+  domaineId: DomaineId
+}>()
+
+const substancesLength = computed(
+  () => props.substances.filter(substanceId => substanceId).length
+)
+
+const substancesByDomaine = computed(() =>
+  SubstancesLegales.filter(({ domaineIds }) =>
+    domaineIds.includes(props.domaineId)
+  )
+)
+
+const substanceNoms = computed<string[]>(() => {
+  return props.heritageProps.substances.etape.substances
+    .filter((substanceId): substanceId is SubstanceLegaleId => !!substanceId)
+    .map(substanceId => SubstancesLegale[substanceId].nom)
+})
+
+const substanceAdd = () => {
+  props.substances.push(undefined)
+}
+
+const substanceRemove = (index: number): SubstanceLegaleId | undefined => {
+  return props.substances.splice(index, 1)[0]
+}
+
+const substanceMoveDown = (index: number) => {
+  const substance = substanceRemove(index)
+  props.substances.splice(index + 1, 0, substance)
+}
+
+const substanceMoveUp = (index: number) => {
+  const substance = substanceRemove(index)
+  props.substances.splice(index - 1, 0, substance)
+}
+</script>
diff --git a/packages/ui/src/components/titre/infos.vue b/packages/ui/src/components/titre/infos.vue
index 3e08766899af426723940d3393a983e065cb0d85..a33feb6a39d9c08be10d184effeec0ff9950c1b4 100644
--- a/packages/ui/src/components/titre/infos.vue
+++ b/packages/ui/src/components/titre/infos.vue
@@ -81,7 +81,13 @@
 
       <div v-if="titre.substances && titre.substances.length > 0" class="mb">
         <h5>Substances</h5>
-        <TagList :elements="titre.substances.map(s => s.nom)" />
+        <TagList
+          :elements="
+            titre.substances.map(
+              substanceId => SubstancesLegale[substanceId].nom
+            )
+          "
+        />
       </div>
 
       <div v-if="titre.titulaires.length" class="mb">
@@ -172,6 +178,10 @@ import {
 } from 'camino-common/src/static/demarchesTypes'
 import { AdministrationId } from 'camino-common/src/static/administrations'
 import { TitresTypesTypes } from 'camino-common/src/static/titresTypesTypes'
+import {
+  SubstanceLegaleId,
+  SubstancesLegale
+} from 'camino-common/src/static/substancesLegales'
 
 type Entreprise = {
   id: string
@@ -198,7 +208,7 @@ const props = defineProps<{
     }
     titulaires: Entreprise[]
     amodiataires: Entreprise[]
-    substances: { nom: string }[]
+    substances: SubstanceLegaleId[]
     references: { nom: string; type: { nom: string } }[]
   }
   user: User
diff --git a/packages/ui/src/components/titres/filtres.js b/packages/ui/src/components/titres/filtres.js
index 6a77c8417e9c7565003e331466f703676f87750c..000bd701ce7c6b3a2b1c29a6cf24d6da56827109 100644
--- a/packages/ui/src/components/titres/filtres.js
+++ b/packages/ui/src/components/titres/filtres.js
@@ -6,6 +6,8 @@ import FiltresTypes from '../_common/filtres/types.vue'
 
 import { elementsFormat } from '../../utils/index'
 import { titresFiltres, titresRechercherByNom } from '@/api/titres'
+import { SubstancesLegales } from 'camino-common/src/static/substancesLegales'
+import { sortedDomaines } from 'camino-common/src/static/domaines'
 
 const filtres = [
   {
@@ -26,11 +28,11 @@ const filtres = [
     elementsFormat
   },
   {
-    id: 'substancesLegalesIds',
+    id: 'substancesIds',
     type: 'autocomplete',
     value: [],
-    name: 'Substances',
-    elementsFormat
+    elements: SubstancesLegales,
+    name: 'Substances'
   },
   {
     id: 'references',
@@ -51,9 +53,8 @@ const filtres = [
     name: 'Domaines',
     type: 'checkboxes',
     value: [],
-    elements: [],
-    component: markRaw(FiltresDomaines),
-    elementsFormat
+    elements: sortedDomaines,
+    component: markRaw(FiltresDomaines)
   },
   {
     id: 'typesIds',
diff --git a/packages/ui/src/components/titres/map.vue b/packages/ui/src/components/titres/map.vue
index 6f018fc7d4e14451e0d1185871e67a1a1eb7585c..dbaed05381d6322c8fea41bde2e1a00489623808 100644
--- a/packages/ui/src/components/titres/map.vue
+++ b/packages/ui/src/components/titres/map.vue
@@ -96,6 +96,7 @@ import {
 } from '../_map/leaflet.js'
 import { clustersBuild, layersBuild, zones } from './map.js'
 import Icon from '@/components/_ui/icon.vue'
+import { sortedDomaines } from 'camino-common/src/static/domaines'
 
 export default {
   components: {
@@ -160,7 +161,7 @@ export default {
     },
 
     domaines() {
-      return this.$store.state.titres.metas.domaines
+      return sortedDomaines
     },
 
     domainesIds() {
diff --git a/packages/ui/src/components/titres/table-utils.ts b/packages/ui/src/components/titres/table-utils.ts
index c9b7c62f5732ead9f8b2130409ad0c94ff148c27..95e8b18d2d36ded322d846518584bcc5c300e711 100644
--- a/packages/ui/src/components/titres/table-utils.ts
+++ b/packages/ui/src/components/titres/table-utils.ts
@@ -24,16 +24,16 @@ import {
 } from 'camino-common/src/static/departement'
 import { onlyUnique } from 'camino-common/src/typescript-tools'
 import { Regions } from 'camino-common/src/static/region'
+import {
+  SubstanceLegaleId,
+  SubstancesLegale
+} from 'camino-common/src/static/substancesLegales'
 
 interface Reference {
   type: { nom: string }
   nom: string
 }
-interface Substance {
-  // ceci devrait être une union
-  id: string
-  nom: string
-}
+
 interface Titulaire {
   id: string
   nom: string
@@ -55,7 +55,7 @@ export interface TitreEntreprise {
   }
   // id devrait être une union, couleur aussi
   statut: { id: string; nom: string; couleur: string }
-  substances: Substance[]
+  substances: SubstanceLegaleId[]
   titulaires: Titulaire[]
   activitesAbsentes: number | null
   activitesEnConstruction: number | null
@@ -137,7 +137,7 @@ export const titulairesColumn: Column<'titulaires'> = {
   name: 'Titulaires',
   class: ['min-width-10']
 }
-const titresColonnes: Column[] = [
+export const titresColonnes: Column[] = [
   nomColumn,
   domaineColumn,
   typeColumn,
@@ -146,7 +146,8 @@ const titresColonnes: Column[] = [
   {
     id: 'substances',
     name: 'Substances',
-    class: ['min-width-6']
+    class: ['min-width-6'],
+    noSort: true
   },
   {
     id: 'coordonnees',
@@ -232,7 +233,7 @@ export const activitesCell = (titre: {
   },
   value: (titre?.activitesAbsentes ?? 0) + (titre?.activitesEnConstruction ?? 0)
 })
-const titresLignesBuild = (
+export const titresLignesBuild = (
   titres: TitreEntreprise[],
   activitesCol: boolean,
   ordre = 'asc'
@@ -259,9 +260,15 @@ const titresLignesBuild = (
       statut: statutCell(titre),
       substances: {
         component: markRaw(TagList),
-        props: { elements: titre.substances?.map(s => s.nom) },
+        props: {
+          elements: titre.substances?.map(
+            substanceId => SubstancesLegale[substanceId].nom
+          )
+        },
         class: 'mb--xs',
-        value: titre.substances?.map(s => s.nom).join(', ')
+        value: titre.substances
+          ?.map(substanceId => SubstancesLegale[substanceId].nom)
+          .join(', ')
       },
       titulaires: titulairesCell(titre),
       regions: {
@@ -295,5 +302,3 @@ const titresLignesBuild = (
       columns
     }
   })
-
-export { titresColonnes, titresLignesBuild }
diff --git a/packages/ui/src/store/definitions.js b/packages/ui/src/store/definitions.js
index 208bc76ee702498a7b58d8a781fb393e88fa8187..f4c02c02c6cac563dbf0f14bd68c68d5e476b465 100644
--- a/packages/ui/src/store/definitions.js
+++ b/packages/ui/src/store/definitions.js
@@ -2,12 +2,12 @@ import {
   demarchesStatuts,
   demarchesTypes,
   etapesTypes,
-  substancesLegales,
   titresStatuts
 } from '../api/metas'
 import { EtapesStatuts } from 'camino-common/src/static/etapesStatuts'
 import { Domaines } from 'camino-common/src/static/domaines'
 import { TitresTypesTypes } from 'camino-common/src/static/titresTypesTypes'
+import { SubstancesLegales } from 'camino-common/src/static/substancesLegales'
 
 const definitionsIndex = {
   domaines: () => Object.values(Domaines),
@@ -17,7 +17,7 @@ const definitionsIndex = {
   'demarches-types': demarchesTypes,
   'etapes-types': etapesTypes,
   'etapes-statuts': () => Object.values(EtapesStatuts),
-  'substances-legales': substancesLegales,
+  'substances-legales': () => SubstancesLegales,
   'titres-statuts': titresStatuts,
   'titres-types': () => Object.values(TitresTypesTypes)
 }
diff --git a/packages/ui/src/store/metas-definitions.js b/packages/ui/src/store/metas-definitions.js
index 2213170c68986d40387673bde2efcc9f39478bfe..71bae2d9cf46aae3c82befbec65e939c267e252e 100644
--- a/packages/ui/src/store/metas-definitions.js
+++ b/packages/ui/src/store/metas-definitions.js
@@ -54,9 +54,6 @@ import {
   activitesStatuts,
   activiteStatutModifier,
   activitesTypesTitresTypes,
-  activiteTypeTitreTypeModifier,
-  activiteTypeTitreTypeCreer,
-  activiteTypeTitreTypeSupprimer,
   activitesTypesDocumentsTypes,
   activiteTypeDocumentTypeModifier,
   activiteTypeDocumentTypeCreer,
@@ -524,29 +521,6 @@ const metasIndex = {
     ]
   },
 
-  'activites-types--titres-types': {
-    get: activitesTypesTitresTypes,
-    update: activiteTypeTitreTypeModifier,
-    create: activiteTypeTitreTypeCreer,
-    delete: activiteTypeTitreTypeSupprimer,
-    nom: 'Types des activités | Types des titres',
-    colonnes: [
-      {
-        id: 'activiteTypeId',
-        nom: "Type d'activité",
-        type: 'entities',
-        entities: 'activites-types'
-      },
-      {
-        id: 'titreTypeId',
-        nom: 'Type de titre',
-        type: 'entities',
-        entities: 'titres-types'
-      }
-    ],
-    ids: ['activiteTypeId', 'titreTypeId']
-  },
-
   'activites-types--documents-types': {
     get: activitesTypesDocumentsTypes,
     update: activiteTypeDocumentTypeModifier,
diff --git a/packages/ui/src/store/titre-etape-edition.js b/packages/ui/src/store/titre-etape-edition.js
index f80b83a0f1524df2e1a704274b84fc89275e93b9..39294289dac72537aa8862cceb1c79d24ca6fa37 100644
--- a/packages/ui/src/store/titre-etape-edition.js
+++ b/packages/ui/src/store/titre-etape-edition.js
@@ -26,7 +26,6 @@ const state = {
   metas: {
     demarche: null,
     etapesTypes: [],
-    substances: [],
     entreprises: [],
     documentsTypes: [],
     sdomZonesDocumentTypeIds: [],
@@ -359,7 +358,6 @@ const mutations = {
     state.metas = {
       demarche: null,
       etapesTypes: [],
-      substances: [],
       entreprises: [],
       documentsTypes: [],
       sdomZonesDocumentTypeIds: [],
diff --git a/packages/ui/src/store/titres-activites.js b/packages/ui/src/store/titres-activites.js
index d6a3aaac32c155e7777dc6b9b50f49d19b4c9e2a..9b12aa99c2e0388fe85c00c914bc6898406b1bbe 100644
--- a/packages/ui/src/store/titres-activites.js
+++ b/packages/ui/src/store/titres-activites.js
@@ -18,7 +18,6 @@ const state = {
     types: [],
     annees: anneesGet(new Date().getFullYear()),
     statuts: [],
-    titresDomaines: [],
     titresTypes: [],
     titresStatuts: []
   },
@@ -28,7 +27,7 @@ const state = {
     { id: 'annees', type: 'numbers', values: [] },
     { id: 'titresNoms', type: 'string' },
     { id: 'titresEntreprises', type: 'string' },
-    { id: 'titresSubstances', type: 'string' },
+    { id: 'titresSubstancesIds', type: 'strings', values: [] },
     { id: 'titresReferences', type: 'string' },
     { id: 'titresTerritoires', type: 'string' },
     { id: 'titresTypesIds', type: 'strings', values: [] },
@@ -60,7 +59,7 @@ const state = {
       annees: [],
       titresNoms: '',
       titresEntreprises: '',
-      titresSubstances: '',
+      titresSubstancesIds: [],
       titresReferences: '',
       titresTerritoires: '',
       titresTypesIds: [],
@@ -90,9 +89,6 @@ const mutations = Object.assign({}, listeMutations, {
       } else if (id === 'activitesStatuts') {
         metaId = 'statuts'
         paramId = 'statutsIds'
-      } else if (id === 'domaines') {
-        metaId = 'titresDomaines'
-        paramId = 'titresDomainesIds'
       } else if (id === 'types') {
         metaId = 'titresTypes'
         paramId = 'titresTypesIds'
diff --git a/packages/ui/src/store/titres-activites.test.js b/packages/ui/src/store/titres-activites.test.js
index d75f8491558115b8aa9cd9d5610d3b7849fbb8b2..338197d89680a512ed2c9c02971087f3252e5d9f 100644
--- a/packages/ui/src/store/titres-activites.test.js
+++ b/packages/ui/src/store/titres-activites.test.js
@@ -20,7 +20,6 @@ describe("état d'une activité", () => {
       metas: {
         types: [],
         statuts: [],
-        titresDomaines: [],
         titresTypes: [],
         titresStatuts: []
       },
@@ -51,10 +50,7 @@ describe("état d'une activité", () => {
       { id: 'dep', nom: 'déposé', couleur: 'success' },
       { id: 'fer', nom: 'cloturé', couleur: 'neutral' }
     ]
-    const domaines = [
-      { id: 'm', nom: 'minéraux et métaux' },
-      { id: 'w', nom: 'granulats marins' }
-    ]
+
     const statuts = [
       { id: 'val', nom: 'valide', couleur: 'success' },
       { id: 'ech', nom: 'échu', couleur: 'neutral' }
@@ -67,7 +63,6 @@ describe("état d'une activité", () => {
     store.commit('titresActivites/metasSet', {
       activitesTypes,
       activitesStatuts,
-      domaines,
       statuts,
       types,
       truc: {}
@@ -76,7 +71,6 @@ describe("état d'une activité", () => {
     expect(store.state.titresActivites.metas).toEqual({
       types: activitesTypes,
       statuts: activitesStatuts,
-      titresDomaines: domaines,
       titresTypes: types,
       titresStatuts: statuts
     })
@@ -89,7 +83,7 @@ describe("état d'une activité", () => {
         values: ['abs', 'enc', 'dep', 'fer']
       },
       { id: 'titresTypesIds', type: 'strings', values: ['cx', 'pr'] },
-      { id: 'titresDomainesIds', type: 'strings', values: ['m', 'w'] },
+      { id: 'titresDomainesIds', type: 'strings', values: [] },
       { id: 'titresStatutsIds', type: 'strings', values: ['val', 'ech'] }
     ])
   })
diff --git a/packages/ui/src/store/titres-demarches.js b/packages/ui/src/store/titres-demarches.js
index f472dd435c153c6252543f3599e2fd900663c025..3fe3f10f3cf47c787b38f8f30cbbc60655a9cfec 100644
--- a/packages/ui/src/store/titres-demarches.js
+++ b/packages/ui/src/store/titres-demarches.js
@@ -9,7 +9,6 @@ const state = {
     statuts: [],
     etapesTypes: [],
     titresTypes: [],
-    titresDomaines: [],
     titresStatuts: []
   },
   definitions: [
@@ -22,7 +21,7 @@ const state = {
     { id: 'titresStatutsIds', type: 'strings', values: [] },
     { id: 'titresNoms', type: 'string' },
     { id: 'titresEntreprises', type: 'string' },
-    { id: 'titresSubstances', type: 'string' },
+    { id: 'titresSubstancesIds', type: 'strings', values: [] },
     { id: 'titresReferences', type: 'string' },
     { id: 'titresTerritoires', type: 'string' },
     { id: 'page', type: 'number', min: 0 },
@@ -63,7 +62,7 @@ const state = {
       titresStatutsIds: [],
       titresNoms: '',
       titresEntreprises: '',
-      titresSubstances: '',
+      titresSubstancesIds: [],
       titresReferences: '',
       titresTerritoires: ''
     }
@@ -86,7 +85,6 @@ const mutations = Object.assign({}, listeMutations, {
       statuts: [],
       etapesTypes: [],
       titresTypes: [],
-      titresDomaines: [],
       titresStatuts: []
     }
     state.params = {
@@ -106,7 +104,7 @@ const mutations = Object.assign({}, listeMutations, {
         titresStatutsIds: [],
         titresNoms: '',
         titresEntreprises: '',
-        titresSubstances: '',
+        titresSubstancesIds: [],
         titresReferences: '',
         titresTerritoires: ''
       }
@@ -132,9 +130,6 @@ const mutations = Object.assign({}, listeMutations, {
       } else if (id === 'types') {
         metaId = 'titresTypes'
         paramsIds = ['titresTypesIds']
-      } else if (id === 'domaines') {
-        metaId = 'titresDomaines'
-        paramsIds = ['titresDomainesIds']
       }
 
       if (metaId) {
diff --git a/packages/ui/src/store/titres-demarches.test.js b/packages/ui/src/store/titres-demarches.test.js
index 47357ee5034d2d75bc5d4aa5681f526664cf88d0..b6b901d9db20083ca259301fed693413d6168542 100644
--- a/packages/ui/src/store/titres-demarches.test.js
+++ b/packages/ui/src/store/titres-demarches.test.js
@@ -19,7 +19,6 @@ describe('liste des demarches', () => {
         statuts: [],
         etapesTypes: [],
         titresTypes: [],
-        titresDomaines: [],
         titresStatuts: []
       },
       definitions: [
@@ -49,10 +48,7 @@ describe('liste des demarches', () => {
       { id: 'dep', nom: 'déposé', couleur: 'success' },
       { id: 'fer', nom: 'cloturé', couleur: 'neutral' }
     ]
-    const domaines = [
-      { id: 'm', nom: 'minéraux et métaux' },
-      { id: 'w', nom: 'granulats marins' }
-    ]
+
     const statuts = [
       { id: 'val', nom: 'valide', couleur: 'success' },
       { id: 'ech', nom: 'échu', couleur: 'neutral' }
@@ -66,7 +62,6 @@ describe('liste des demarches', () => {
     store.commit('titresDemarches/metasSet', {
       demarchesTypes,
       demarchesStatuts,
-      domaines,
       statuts,
       types,
       etapesTypes,
@@ -76,7 +71,6 @@ describe('liste des demarches', () => {
     expect(store.state.titresDemarches.metas).toEqual({
       types: demarchesTypes,
       statuts: demarchesStatuts,
-      titresDomaines: domaines,
       titresTypes: types,
       titresStatuts: statuts,
       etapesTypes
@@ -91,7 +85,7 @@ describe('liste des demarches', () => {
       },
       { values: ['dpu'], id: 'etapesInclues', type: 'objects' },
       { values: ['dpu'], id: 'etapesExclues', type: 'objects' },
-      { values: ['m', 'w'], id: 'titresDomainesIds', type: 'strings' },
+      { values: [], id: 'titresDomainesIds', type: 'strings' },
       { values: ['cx', 'pr'], id: 'titresTypesIds', type: 'strings' },
       { values: ['val', 'ech'], id: 'titresStatutsIds', type: 'strings' }
     ])
diff --git a/packages/ui/src/store/titres.js b/packages/ui/src/store/titres.js
index cc99da11b6a9db46e4f901e2ca9fdc080661bf48..dd3e5a54216f16762aed5a0c79c27da3b88d8a96 100644
--- a/packages/ui/src/store/titres.js
+++ b/packages/ui/src/store/titres.js
@@ -9,16 +9,14 @@ const getDefaultState = () => {
     total: 0,
     vueId: 'carte',
     metas: {
-      domaines: [],
       types: [],
-      statuts: [],
-      substancesLegales: []
+      statuts: []
     },
     definitions: [
       { id: 'typesIds', type: 'strings', values: [] },
       { id: 'domainesIds', type: 'strings', values: [] },
       { id: 'statutsIds', type: 'strings', values: [] },
-      { id: 'substancesLegalesIds', type: 'strings', values: [] },
+      { id: 'substancesIds', type: 'strings', values: [] },
       { id: 'titresIds', type: 'strings', values: [] },
       { id: 'entreprisesIds', type: 'strings', values: [] },
       { id: 'references', type: 'string' },
@@ -58,7 +56,7 @@ const getDefaultState = () => {
         typesIds: [],
         domainesIds: [],
         statutsIds: [],
-        substancesLegalesIds: [],
+        substancesIds: [],
         titresIds: [],
         entreprisesIds: '',
         references: '',
@@ -272,12 +270,8 @@ const mutations = Object.assign(
         let paramId
         if (id === 'types') {
           paramId = 'typesIds'
-        } else if (id === 'domaines') {
-          paramId = 'domainesIds'
         } else if (id === 'statuts') {
           paramId = 'statutsIds'
-        } else if (id === 'substancesLegales') {
-          paramId = 'substancesLegalesIds'
         } else if (id === 'entreprises') {
           paramId = 'entreprisesIds'
           data[id] = data[id].elements
diff --git a/packages/ui/src/store/titres.test.js b/packages/ui/src/store/titres.test.js
index ee66236c57b4fad1134576e05b53232fa7366d9d..0adb19f0c5063d0eccfd9c3df8a6b670c70d3023 100644
--- a/packages/ui/src/store/titres.test.js
+++ b/packages/ui/src/store/titres.test.js
@@ -29,7 +29,6 @@ describe('liste des titres', () => {
       total: 0,
       vueId: 'carte',
       metas: {
-        domaines: [],
         types: [],
         statuts: []
       },
@@ -112,10 +111,6 @@ describe('liste des titres', () => {
 
   test('initialise le composant', async () => {
     const apiMetasMock = api.titresMetas.mockResolvedValue({
-      domaines: [
-        { id: 'w', nom: 'granulats' },
-        { id: 'c', nom: 'carrières' }
-      ],
       types: [
         { id: 'ifr', nom: 'Ifremer' },
         { id: 'dge', nom: 'DGEC' }
@@ -137,10 +132,6 @@ describe('liste des titres', () => {
     expect(apiMetasMock).toHaveBeenCalled()
     expect(apiMock).not.toHaveBeenCalled()
     expect(store.state.titres.metas).toEqual({
-      domaines: [
-        { id: 'w', nom: 'granulats' },
-        { id: 'c', nom: 'carrières' }
-      ],
       types: [
         { id: 'ifr', nom: 'Ifremer' },
         { id: 'dge', nom: 'DGEC' }
diff --git a/packages/ui/src/utils/titre-etape-edit.js b/packages/ui/src/utils/titre-etape-edit.js
index ce26b6bfc42382886ae62ad5800be0967962be52..36c4e0027d80d8e05bd0a300cb9f923c49a78c60 100644
--- a/packages/ui/src/utils/titre-etape-edit.js
+++ b/packages/ui/src/utils/titre-etape-edit.js
@@ -158,11 +158,7 @@ const etapeEditFormat = etape => {
     }
   })
 
-  if (etape.substances) {
-    etape.substances = etape.substances.map(({ id }) => ({
-      id
-    }))
-  } else {
+  if (!etape.substances) {
     etape.substances = []
   }
 
diff --git a/packages/ui/src/utils/titre-etape-edit.test.js b/packages/ui/src/utils/titre-etape-edit.test.js
index 93f97ae47f56cc1ba89d58d190b90d4393f1facd..32669db8f17bbdc71110bc00b0cc6c4a675a5a53 100644
--- a/packages/ui/src/utils/titre-etape-edit.test.js
+++ b/packages/ui/src/utils/titre-etape-edit.test.js
@@ -131,7 +131,7 @@ describe('etapeEditFormat', () => {
         ],
         contenu: { 'prop-id': 'prop-value' },
         incertitudes: { amodiataires: true },
-        substances: [{ id: 'auru' }],
+        substances: ['auru'],
         documents: [{ type: { id: 'act' } }]
       })
     ).toEqual({
@@ -169,7 +169,7 @@ describe('etapeEditFormat', () => {
           ]
         ]
       ],
-      substances: [{ id: 'auru' }],
+      substances: ['auru'],
       contenu: { 'prop-id': 'prop-value' },
       incertitudes: { amodiataires: true },
       documents: [{ fichierNouveau: null, typeId: 'act', type: { id: 'act' } }],
diff --git a/packages/ui/src/utils/titre-etape-save.js b/packages/ui/src/utils/titre-etape-save.js
index f7c1ad76116dc88034ad4d26479f7aad44dce099..73c9201650515a9dab6792c527caa94a945ddd03 100644
--- a/packages/ui/src/utils/titre-etape-save.js
+++ b/packages/ui/src/utils/titre-etape-save.js
@@ -230,12 +230,9 @@ const etapeSaveFormat = etape => {
 
   delete etape.demarche
 
-  const propsIds = [
-    'substances',
-    'titulaires',
-    'amodiataires',
-    'administrations'
-  ]
+  etape.substances = etape.substances.filter(substanceId => !!substanceId)
+
+  const propsIds = ['titulaires', 'amodiataires', 'administrations']
 
   // supprime les champs dont les ids sont vides
   propsIds.forEach(propId => {
@@ -244,12 +241,6 @@ const etapeSaveFormat = etape => {
     }
   })
 
-  if (etape.substances && etape.substances.length) {
-    etape.substances.forEach((substance, index) => {
-      substance.ordre = index + 1
-    })
-  }
-
   if (
     etape.geoSystemeIds &&
     etape.geoSystemeIds.length &&
diff --git a/packages/ui/src/utils/titre-etape-save.test.js b/packages/ui/src/utils/titre-etape-save.test.js
index 42aded9f90208b9927d7063eeb1bdf3175c3c34f..ee3d203a032b8b249ac98ace48e3db3a156e0f3f 100644
--- a/packages/ui/src/utils/titre-etape-save.test.js
+++ b/packages/ui/src/utils/titre-etape-save.test.js
@@ -153,7 +153,7 @@ describe('etapeSaveFormat', () => {
           ],
           [[]]
         ],
-        substances: [{ id: 'substance-id-1' }],
+        substances: ['substance-id-1', undefined],
         contenu: { 'prop-id': 'prop-value' },
         incertitudes: { amodiataires: true },
         documents: [{ id: 'tmp', typeId: 'tmp' }, { id: 'doc-id' }]
@@ -211,7 +211,7 @@ describe('etapeSaveFormat', () => {
         }
       ],
       statutId: 'etape-statut-id',
-      substances: [{ id: 'substance-id-1', ordre: 1 }],
+      substances: ['substance-id-1'],
       titreDemarcheId: 'demarche-id',
       titulaires: [{ id: 'titulaire-id' }],
       typeId: 'etape-type-id',