diff --git a/dev/config_fusen.yaml b/dev/config_fusen.yaml
index e69b44b403d1790ab4571f7f6bd70bcf4dfe7fae..e52cefe248b2fa089ac1e17fcecd38703474ebfa 100644
--- a/dev/config_fusen.yaml
+++ b/dev/config_fusen.yaml
@@ -102,6 +102,21 @@ flat_insert_ars_into_prelevement.Rmd:
     check: true
     document: true
     overwrite: ask
+flat_insert_data.Rmd:
+  path: dev/flat_insert_data.Rmd
+  state: active
+  R: []
+  tests: []
+  vignettes: vignettes/insertion-des-prelevements-et-analyses.Rmd
+  inflate:
+    flat_file: dev/flat_insert_data.Rmd
+    vignette_name: Insertion des prélèvements et analyses
+    open_vignette: true
+    check: true
+    document: true
+    overwrite: ask
+    clean: ask
+    codecov: false
 flat_insert_hubeau_eso_into_analyse.Rmd:
   path: dev/flat_insert_hubeau_eso_into_analyse.Rmd
   state: active
diff --git a/dev/flat_insert_data.Rmd b/dev/flat_insert_data.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..1742891101b14e7f9bc0a620a7deba602c5a9b41
--- /dev/null
+++ b/dev/flat_insert_data.Rmd
@@ -0,0 +1,417 @@
+---
+title: "Insertion des pr\u00e9l\u00e8vements et analyses"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+library(yaml)
+library(datalibaba)
+library(dplyr)
+library(stringr)
+library(glue)
+library(DBI)
+library(RPostgres)
+```
+
+```{r development-load}
+# Load already included functions if relevant
+pkgload::load_all(export_all = FALSE)
+```
+
+```{r config, eval=FALSE}
+# Lire le fichier de configuration
+config <- yaml::read_yaml("config.yml")
+
+# Accéder aux valeurs pour version et last_year
+version <- config$version
+last_year <- config$last_year
+```
+
+# Données ESO et ESU de l'ARS
+
+## Chargement des données ARS brutes
+
+La table des données brutes Nitrates de l'ARS est chargée :
+```{r load_nitrate_data_analyse_ars, eval=FALSE}
+nitrate_data_analyse_ars <- datalibaba::importer_data(
+  table = "nitrate_data_analyse_ars",
+  schema = "nitrates",
+  db = "si_eau",
+  user = "admin"
+)
+```
+
+## Consolidation des données ARS
+
+On ajoute les variables `source` et `code_support` :
+```{r add_source_code_support, eval=FALSE}
+# Ajouter les variables source et code_support
+nitrate_prelevement_analyse_ars <- nitrate_data_analyse_ars |>
+  dplyr::mutate(
+    source = "ARS",
+    code_reseau = NA,
+    code_support = 3,
+    code_fraction_analysee = NA,
+    limite_detection = NA,
+  )
+```
+
+On remplace "h" par ":" dans la variable `plv_heure` :
+```{r replace_in_plv_heure, eval=FALSE}
+# Remplacer "h" par ":" dans la colonne plv_heure
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(plv_heure = stringr::str_replace_all(plv_heure, "h", ":"))
+```
+
+On supprime les enregistrements correspondants à des totaux :
+```{r filter_param_nom_ars, eval=FALSE}
+# Supprimer les lignes ne correspondant pas à une analyse
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::filter(!stringr::str_starts(param_nom, "Total"))
+```
+
+On remplace les chaînes de caractère par NA dans la variable `ana_param_alpha_resultat` :
+```{r replace_strings_with_na, eval=FALSE}
+# Remplacer chaînes de caractère dans la colonne ana_param_alpha_resultat
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(
+    ana_param_alpha_resultat = dplyr::case_when(
+      ana_param_alpha_resultat %in% c("TRACES", "PRESENCE", "SEUIL", "ILLISIBL", "N.M.", "O", "?", ",", " ") ~ NA_character_,
+      TRUE ~ ana_param_alpha_resultat
+    )
+  )
+```
+
+On remplace des valeurs dans ana_param_alpha_resultat et param_code:
+```{r replace_dot_ana_param_alpha_resultat, eval=FALSE}
+# Remplacer les valeurs dans les colonnes ana_param_alpha_resultat et param_code
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(
+    ana_param_alpha_resultat = stringr::str_replace(ana_param_alpha_resultat, "\\,", "."),
+    param_code = stringr::str_replace(param_code, "NO3", "1340")
+    )
+```
+
+On affecte le code_remarque et la valeur des variables resultat_analyse et  limite_quantification :
+```{r mutate_from_ana_param_alpha_resultat, eval=FALSE}
+# Ajouter les colonnes code_remarque, resultat_analyse et limite_quantification
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(
+    # Ajout de la colonne code_remarque selon la condition spécifiée
+    code_remarque = dplyr::case_when(
+      stringr::str_starts(ana_param_alpha_resultat, "<") ~ 10,
+      TRUE ~ 1
+    ),
+    # Renommage conditionnel des colonnes
+    resultat_analyse = dplyr::case_when(
+      stringr::str_starts(ana_param_alpha_resultat, "<") ~ as.character(ana_param_valeur_traduite),
+      TRUE ~ ana_param_alpha_resultat
+    ),
+    limite_quantification = dplyr::case_when(
+      stringr::str_starts(ana_param_alpha_resultat, "<") ~ ana_param_alpha_resultat,
+      TRUE ~ NA_character_  # Utilisation de NA pour les valeurs non pertinentes
+    )
+  )
+```
+
+On supprime "<" dans la variable `limite_quantification` :
+```{r replace_in_plv_heure, eval=FALSE}
+# Remplacer "h" par ":" dans la colonne plv_heure
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(limite_quantification = stringr::str_replace_all(limite_quantification, "<", ""))
+```
+
+On sélectionne les champs utiles à la table des prélèvements et analyse :
+```{r select_variables, eval=FALSE}
+# Sélectionner les variables
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::select(code_intervenant = geo_dept_ddass_gest_code,
+                source,
+                code_reseau,
+                code_station = ins_code_national,
+                date_prelevement = plv_date,
+                heure_prelevement = plv_heure,
+                code_support,
+                nature_eau,
+                id_usage = usage,
+                id_prelevement_motif = plv_motif,
+                date_analyse = anl_date_fin_analyse,
+                resultat_analyse,
+                code_parametre = param_code,
+                code_fraction_analysee,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+
+```
+
+# Données Hub'eau ESO
+
+## Chargement des prélèvements Hub'eau ESO
+
+La table des données brutes Nitrates Hub'eau ESO est chargée :
+```{r load_nitrate_qualite_nappes_analyses, eval=FALSE}
+# Charger la table `qualite_nappes_eau_souterraine.nitrate_qualite_nappes_analyses`
+nitrate_qualite_nappes_prelevements <- datalibaba::importer_data(
+  table = "nitrate_qualite_nappes_analyses",
+  schema = "qualite_nappes_eau_souterraine",
+  db = "si_eau",
+  user = "admin"
+)
+```
+
+## Filtre par code_producteur pour exclure les données ARS
+
+On sélectionne les code_producteur correspondants aux enregistrements hors 
+données ARS de la région :
+```{r select_code_producteur_hubeau_eso, eval=FALSE}
+# Filtrer pour exclure les données ARS
+nitrate_prelevement_analyse_hubeau_eso <- nitrate_qualite_nappes_prelevements |>
+  dplyr::filter(!code_producteur %in% c('44','49','53','72','85'))
+```
+
+## Consolidation des prélèvements Hub'eau ESO
+
+On ajoute les variables `source`, `code_support` et `nature_eau` :
+```{r add_source_code_support_hubeau_eso, eval=FALSE}
+# Ajouter les variables source, code_support et nature_eau
+nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
+  dplyr::mutate(
+    source = "ADES",
+    heure_prelevement = NA,
+    code_support = 3,
+    nature_eau = "ESO",
+    id_usage = NA,
+    id_prelevement_motif = NA,
+    date_analyse = NA)
+```
+
+On remplace des valeurs dans limite_detection et limite_quantification :
+```{r replace_dot_limite_detection, eval=FALSE}
+# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
+nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
+  dplyr::mutate(
+    resultat = stringr::str_replace(resultat, "\\,", "."),
+    limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
+    limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
+    )
+
+```
+
+On modifie le type des variables numériques et on les renomme :
+```{r change-fieldtypes, eval=FALSE}
+# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
+nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
+  dplyr::rename(code_intervenant = code_lieu_analyse,
+                code_reseau = codes_reseau,
+                code_station = bss_id,
+                date_prelevement = date_debut_prelevement
+  ) |>
+  dplyr::mutate(code_support = as.integer(code_support),
+                resultat_analyse = as.numeric(resultat),
+                limite_detection = as.numeric(limite_detection),
+                limite_quantification = as.numeric(limite_quantification),
+                code_parametre = as.integer(code_param),
+                code_fraction_analysee  = as.integer(code_fraction),
+                code_remarque = as.integer(code_remarque_analyse)
+                )
+
+```
+
+On sélectionne les champs utiles à la table des prélèvements et analyses :
+```{r select_variables_hubeau_eso, eval=FALSE}
+# Sélectionner les variables
+nitrate_prelevement_analyse_hubeau_eso <- 
+  nitrate_prelevement_analyse_hubeau_eso |>
+  dplyr::select(code_intervenant,
+                source,
+                code_reseau,
+                code_station,
+                date_prelevement,
+                heure_prelevement,
+                code_support,
+                nature_eau,
+                id_usage,
+                id_prelevement_motif,
+                date_analyse,
+                resultat_analyse,
+                code_parametre,
+                code_fraction_analysee,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+
+```
+
+# Données Hub'eau ESU
+
+## Chargement des prélèvements Hub'eau ESU
+
+La table des données brutes Nitrates Hub'eau ESU est chargée :
+```{r load-nitrate_qualite_rivieres_analyse_pc, eval=FALSE}
+# Charger la table qualite_nappes_eau_souterraine.nitrate_qualite_rivieres_analyse_pc
+nitrate_qualite_rivieres_prelevements <- datalibaba::importer_data(
+  table = "nitrate_qualite_rivieres_analyse_pc",
+  schema = "qualite_cours_d_eau",
+  db = "si_eau",
+  user = "admin"
+)
+```
+
+On remplace des valeurs dans  `limite_detection` et `limite_quantification` :
+```{r replace-dot_limite_detection, eval=FALSE}
+# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
+nitrate_prelevement_analyse_hubeau_esu <- nitrate_qualite_rivieres_prelevements |>
+  dplyr::mutate(
+    resultat = stringr::str_replace(resultat, "\\,", "."),
+    limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
+    limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
+    )
+```
+
+On ajoute les variables `source` et `nature_eau` :
+```{r add-source_code_support_hubeau_esu, eval=FALSE}
+# Ajouter les variables source et nature_eau
+nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
+  dplyr::mutate(
+    source = "Na\u00efades",
+    heure_prelevement = NA,
+    code_support = 3,
+    nature_eau = "ESU",
+    id_usage = NA,
+    id_prelevement_motif = NA,
+    date_analyse = NA)
+```
+
+On modifie le type des variables  resultat_analyse et  limite_quantification :
+```{r change-fieldtypes, eval=FALSE}
+# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
+nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
+  dplyr::mutate(resultat_analyse = as.numeric(resultat),
+                limite_detection = as.numeric(limite_detection),
+                limite_quantification = as.numeric(limite_quantification),
+                code_parametre = as.integer(code_parametre),
+                code_fraction_analysee  = as.integer(code_fraction),
+                code_remarque = as.integer(code_remarque)
+                )
+```
+
+On sélectionne les champs utiles à la table des prélèvements et analyses :
+```{r select_variables_hubeau_eso, eval=FALSE}
+# Sélectionner les variables
+nitrate_prelevement_analyse_hubeau_esu <- 
+  nitrate_prelevement_analyse_hubeau_esu|>
+  dplyr::select(code_intervenant = code_laboratoire,
+                source,
+                code_reseau,
+                code_station,
+                date_prelevement,
+                heure_prelevement,
+                code_support,
+                nature_eau,
+                id_usage,
+                id_prelevement_motif,
+                date_analyse,
+                resultat_analyse,
+                code_parametre,
+                code_fraction_analysee,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+```
+
+# Publication en base
+
+## Agréation des données dans un dataframe unique
+
+```{r agregate_data, eval=FALSE}
+# Lier les trois dataframes par source dans un dataframe global
+nitrate_prelevement_analyse <- 
+  rbind(nitrate_prelevement_analyse_ars, 
+        nitrate_prelevement_analyse_hubeau_eso, 
+        nitrate_prelevement_analyse_hubeau_esu)
+```
+
+## Insertion du dataframe en base
+
+On insère enfin le dataframe consolidé dans la table globale et versionnée 
+des analyses et prélèvements :
+```{r insert_into_nitrate_prelevement_analyse_version, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_prelevement_analyse, 
+                        table = glue::glue("nitrate_prelevement_analyse_", version), 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        #pk = "code_prelevement_analyse",
+                        user = "admin")
+```
+
+## Renommage de l'identifiant
+
+```{r rename_id_row__, eval=FALSE}
+collectr::rename_field(database = "si_eau",
+                       schema = "nitrates",
+                       table = glue::glue("nitrate_prelevement_analyse_", version),
+                       old_field = "id_row__",
+                       new_field = "code_prelevement_analyse",
+                       role = "admin")
+```
+
+## Ajout des commentaires
+
+```{r add_comments, eval=FALSE}
+# Établir une connexion à la base de données PostgreSQL
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+  
+# Génération de la date du jour
+date_now <- format(Sys.Date(), "%d/%m/%Y")
+
+# Liste des requêtes SQL
+table_comment <- glue::glue("COMMENT ON TABLE nitrates.nitrate_prelevement_analyse_{version} IS 
+      'Table des prélèvements et analyses 2007-{last_year} (version {version} du {date_now})';")
+
+# Exécuter la commande SQL
+DBI::dbExecute(connexion, table_comment)
+
+# Ajouter les commentaires sur chaque champ
+comments_sql <- glue::glue(
+  "COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_prelevement_analyse IS 'Identifiant du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_intervenant IS 'Identifiant de l''intervenant';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.source IS 'Source de la donn\u00e9e';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_reseau IS 'Identifiant du r\u00e9seau';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_station IS 'Identifiant de la station';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_prelevement IS 'Date du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.heure_prelevement IS 'Heure du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_support IS 'Code du support de pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.nature_eau IS 'Nature de l''eau du pr\u00e9l\u00e8vement (ESO/ESU)';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_usage IS 'Code de l''usage du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_prelevement_motif IS 'Code du motif du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_parametre IS 'Identifiant du param\u00e8tre analys\u00e9';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analys\u00e9e';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_analyse IS 'Date de l''analyse';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.resultat_analyse IS 'R\u00e9sultat de l''analyse';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_remarque IS 'Code validant la donn\u00e9e';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_detection IS 'Limite de d\u00e9tection';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_quantification IS 'Limite de quantification';"
+)
+
+  
+ # Exécuter chaque commande SQL
+  for (sql in c(comments_sql)) {
+    DBI::dbExecute(connexion, sql)
+  }
+
+  # Fermeture de la connexion à la base de données
+  DBI::dbDisconnect(connexion)
+```
+
+
+```{r development-inflate, eval=FALSE}
+# Run but keep eval=FALSE to avoid infinite loop
+# Execute in the console directly
+fusen::inflate(flat_file = "dev/flat_insert_data.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements et analyses")
+```
diff --git a/vignettes/insertion-des-prelevements-et-analyses.Rmd b/vignettes/insertion-des-prelevements-et-analyses.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..53ef4faa30584e6c177d43278442a105aee69b06
--- /dev/null
+++ b/vignettes/insertion-des-prelevements-et-analyses.Rmd
@@ -0,0 +1,485 @@
+---
+title: "Insertion des prélèvements et analyses"
+output: rmarkdown::html_vignette
+vignette: >
+  %\VignetteIndexEntry{Insertion des prélèvements et analyses}
+  %\VignetteEngine{knitr::rmarkdown}
+  %\VignetteEncoding{UTF-8}
+---
+
+```{r, include = FALSE}
+knitr::opts_chunk$set(
+  collapse = TRUE,
+  comment = "#>"
+)
+```
+
+```{r}
+library(data.nitrates)
+```
+
+<!-- WARNING - This vignette is generated by {fusen} from dev/flat_insert_data.Rmd: do not edit by hand -->
+
+
+
+
+```{r config}
+#| eval: no
+
+# Lire le fichier de configuration
+config <- yaml::read_yaml("config.yml")
+
+# Accéder aux valeurs pour version et last_year
+version <- config$version
+last_year <- config$last_year
+```
+
+
+# Données ESO et ESU de l'ARS
+
+## Chargement des données ARS brutes
+
+La table des données brutes Nitrates de l'ARS est chargée :
+```{r load_nitrate_data_analyse_ars}
+#| eval: no
+
+nitrate_data_analyse_ars <- datalibaba::importer_data(
+  table = "nitrate_data_analyse_ars",
+  schema = "nitrates",
+  db = "si_eau",
+  user = "admin"
+)
+```
+
+
+## Consolidation des données ARS
+
+On ajoute les variables `source` et `code_support` :
+```{r add_source_code_support}
+#| eval: no
+
+# Ajouter les variables source et code_support
+nitrate_prelevement_analyse_ars <- nitrate_data_analyse_ars |>
+  dplyr::mutate(
+    source = "ARS",
+    code_reseau = NA,
+    code_support = 3,
+    code_fraction_analysee = NA,
+    limite_detection = NA,
+  )
+```
+
+
+On remplace "h" par ":" dans la variable `plv_heure` :
+```{r replace_in_plv_heure}
+#| eval: no
+
+# Remplacer "h" par ":" dans la colonne plv_heure
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(plv_heure = stringr::str_replace_all(plv_heure, "h", ":"))
+```
+
+
+On supprime les enregistrements correspondants à des totaux :
+```{r filter_param_nom_ars}
+#| eval: no
+
+# Supprimer les lignes ne correspondant pas à une analyse
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::filter(!stringr::str_starts(param_nom, "Total"))
+```
+
+
+On remplace les chaînes de caractère par NA dans la variable `ana_param_alpha_resultat` :
+```{r replace_strings_with_na}
+#| eval: no
+
+# Remplacer chaînes de caractère dans la colonne ana_param_alpha_resultat
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(
+    ana_param_alpha_resultat = dplyr::case_when(
+      ana_param_alpha_resultat %in% c("TRACES", "PRESENCE", "SEUIL", "ILLISIBL", "N.M.", "O", "?", ",", " ") ~ NA_character_,
+      TRUE ~ ana_param_alpha_resultat
+    )
+  )
+```
+
+
+On remplace des valeurs dans ana_param_alpha_resultat et param_code:
+```{r replace_dot_ana_param_alpha_resultat}
+#| eval: no
+
+# Remplacer les valeurs dans les colonnes ana_param_alpha_resultat et param_code
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(
+    ana_param_alpha_resultat = stringr::str_replace(ana_param_alpha_resultat, "\\,", "."),
+    param_code = stringr::str_replace(param_code, "NO3", "1340")
+    )
+```
+
+
+On affecte le code_remarque et la valeur des variables resultat_analyse et  limite_quantification :
+```{r mutate_from_ana_param_alpha_resultat}
+#| eval: no
+
+# Ajouter les colonnes code_remarque, resultat_analyse et limite_quantification
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(
+    # Ajout de la colonne code_remarque selon la condition spécifiée
+    code_remarque = dplyr::case_when(
+      stringr::str_starts(ana_param_alpha_resultat, "<") ~ 10,
+      TRUE ~ 1
+    ),
+    # Renommage conditionnel des colonnes
+    resultat_analyse = dplyr::case_when(
+      stringr::str_starts(ana_param_alpha_resultat, "<") ~ as.character(ana_param_valeur_traduite),
+      TRUE ~ ana_param_alpha_resultat
+    ),
+    limite_quantification = dplyr::case_when(
+      stringr::str_starts(ana_param_alpha_resultat, "<") ~ ana_param_alpha_resultat,
+      TRUE ~ NA_character_  # Utilisation de NA pour les valeurs non pertinentes
+    )
+  )
+```
+
+
+On supprime "<" dans la variable `limite_quantification` :
+```{r replace_in_plv_heure-1}
+#| eval: no
+
+# Remplacer "h" par ":" dans la colonne plv_heure
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::mutate(limite_quantification = stringr::str_replace_all(limite_quantification, "<", ""))
+```
+
+
+On sélectionne les champs utiles à la table des prélèvements et analyse :
+```{r select_variables}
+#| eval: no
+
+# Sélectionner les variables
+nitrate_prelevement_analyse_ars <- nitrate_prelevement_analyse_ars |>
+  dplyr::select(code_intervenant = geo_dept_ddass_gest_code,
+                source,
+                code_reseau,
+                code_station = ins_code_national,
+                date_prelevement = plv_date,
+                heure_prelevement = plv_heure,
+                code_support,
+                nature_eau,
+                id_usage = usage,
+                id_prelevement_motif = plv_motif,
+                date_analyse = anl_date_fin_analyse,
+                resultat_analyse,
+                code_parametre = param_code,
+                code_fraction_analysee,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+
+```
+
+
+# Données Hub'eau ESO
+
+## Chargement des prélèvements Hub'eau ESO
+
+La table des données brutes Nitrates Hub'eau ESO est chargée :
+```{r load_nitrate_qualite_nappes_analyses}
+#| eval: no
+
+# Charger la table `qualite_nappes_eau_souterraine.nitrate_qualite_nappes_analyses`
+nitrate_qualite_nappes_prelevements <- datalibaba::importer_data(
+  table = "nitrate_qualite_nappes_analyses",
+  schema = "qualite_nappes_eau_souterraine",
+  db = "si_eau",
+  user = "admin"
+)
+```
+
+
+## Filtre par code_producteur pour exclure les données ARS
+
+On sélectionne les code_producteur correspondants aux enregistrements hors 
+données ARS de la région :
+```{r select_code_producteur_hubeau_eso}
+#| eval: no
+
+# Filtrer pour exclure les données ARS
+nitrate_prelevement_analyse_hubeau_eso <- nitrate_qualite_nappes_prelevements |>
+  dplyr::filter(!code_producteur %in% c('44','49','53','72','85'))
+```
+
+
+## Consolidation des prélèvements Hub'eau ESO
+
+On ajoute les variables `source`, `code_support` et `nature_eau` :
+```{r add_source_code_support_hubeau_eso}
+#| eval: no
+
+# Ajouter les variables source, code_support et nature_eau
+nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
+  dplyr::mutate(
+    source = "ADES",
+    heure_prelevement = NA,
+    code_support = 3,
+    nature_eau = "ESO",
+    id_usage = NA,
+    id_prelevement_motif = NA,
+    date_analyse = NA)
+```
+
+
+On remplace des valeurs dans limite_detection et limite_quantification :
+```{r replace_dot_limite_detection}
+#| eval: no
+
+# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
+nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
+  dplyr::mutate(
+    resultat = stringr::str_replace(resultat, "\\,", "."),
+    limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
+    limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
+    )
+
+```
+
+
+On modifie le type des variables numériques et on les renomme :
+```{r change-fieldtypes}
+#| eval: no
+
+# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
+nitrate_prelevement_analyse_hubeau_eso <- nitrate_prelevement_analyse_hubeau_eso |>
+  dplyr::rename(code_intervenant = code_lieu_analyse,
+                code_reseau = codes_reseau,
+                code_station = bss_id,
+                date_prelevement = date_debut_prelevement
+  ) |>
+  dplyr::mutate(code_support = as.integer(code_support),
+                resultat_analyse = as.numeric(resultat),
+                limite_detection = as.numeric(limite_detection),
+                limite_quantification = as.numeric(limite_quantification),
+                code_parametre = as.integer(code_param),
+                code_fraction_analysee  = as.integer(code_fraction),
+                code_remarque = as.integer(code_remarque_analyse)
+                )
+
+```
+
+
+On sélectionne les champs utiles à la table des prélèvements et analyses :
+```{r select_variables_hubeau_eso}
+#| eval: no
+
+# Sélectionner les variables
+nitrate_prelevement_analyse_hubeau_eso <- 
+  nitrate_prelevement_analyse_hubeau_eso |>
+  dplyr::select(code_intervenant,
+                source,
+                code_reseau,
+                code_station,
+                date_prelevement,
+                heure_prelevement,
+                code_support,
+                nature_eau,
+                id_usage,
+                id_prelevement_motif,
+                date_analyse,
+                resultat_analyse,
+                code_parametre,
+                code_fraction_analysee,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+
+```
+
+
+# Données Hub'eau ESU
+
+## Chargement des prélèvements Hub'eau ESU
+
+La table des données brutes Nitrates Hub'eau ESU est chargée :
+```{r load-nitrate_qualite_rivieres_analyse_pc}
+#| eval: no
+
+# Charger la table qualite_nappes_eau_souterraine.nitrate_qualite_rivieres_analyse_pc
+nitrate_qualite_rivieres_prelevements <- datalibaba::importer_data(
+  table = "nitrate_qualite_rivieres_analyse_pc",
+  schema = "qualite_cours_d_eau",
+  db = "si_eau",
+  user = "admin"
+)
+```
+
+
+On remplace des valeurs dans  `limite_detection` et `limite_quantification` :
+```{r replace-dot_limite_detection}
+#| eval: no
+
+# Remplacer les valeurs dans les colonnes limite_detection et limite_quantification
+nitrate_prelevement_analyse_hubeau_esu <- nitrate_qualite_rivieres_prelevements |>
+  dplyr::mutate(
+    resultat = stringr::str_replace(resultat, "\\,", "."),
+    limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
+    limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
+    )
+```
+
+
+On ajoute les variables `source` et `nature_eau` :
+```{r add-source_code_support_hubeau_esu}
+#| eval: no
+
+# Ajouter les variables source et nature_eau
+nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
+  dplyr::mutate(
+    source = "Na\u00efades",
+    heure_prelevement = NA,
+    code_support = 3,
+    nature_eau = "ESU",
+    id_usage = NA,
+    id_prelevement_motif = NA,
+    date_analyse = NA)
+```
+
+
+On modifie le type des variables  resultat_analyse et  limite_quantification :
+```{r change-fieldtypes-2}
+#| eval: no
+
+# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
+nitrate_prelevement_analyse_hubeau_esu <- nitrate_prelevement_analyse_hubeau_esu |>
+  dplyr::mutate(resultat_analyse = as.numeric(resultat),
+                limite_detection = as.numeric(limite_detection),
+                limite_quantification = as.numeric(limite_quantification),
+                code_parametre = as.integer(code_parametre),
+                code_fraction_analysee  = as.integer(code_fraction),
+                code_remarque = as.integer(code_remarque)
+                )
+```
+
+
+On sélectionne les champs utiles à la table des prélèvements et analyses :
+```{r select_variables_hubeau_eso-3}
+#| eval: no
+
+# Sélectionner les variables
+nitrate_prelevement_analyse_hubeau_esu <- 
+  nitrate_prelevement_analyse_hubeau_esu|>
+  dplyr::select(code_intervenant = code_laboratoire,
+                source,
+                code_reseau,
+                code_station,
+                date_prelevement,
+                heure_prelevement,
+                code_support,
+                nature_eau,
+                id_usage,
+                id_prelevement_motif,
+                date_analyse,
+                resultat_analyse,
+                code_parametre,
+                code_fraction_analysee,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+```
+
+
+# Publication en base
+
+## Agréation des données dans un dataframe unique
+```{r agregate_data}
+#| eval: no
+
+# Lier les trois dataframes par source dans un dataframe global
+nitrate_prelevement_analyse <- 
+  rbind(nitrate_prelevement_analyse_ars, 
+        nitrate_prelevement_analyse_hubeau_eso, 
+        nitrate_prelevement_analyse_hubeau_esu)
+```
+
+
+## Insertion du dataframe en base
+
+On insère enfin le dataframe consolidé dans la table globale et versionnée 
+des analyses et prélèvements :
+```{r insert_into_nitrate_prelevement_analyse_version}
+#| eval: no
+
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_prelevement_analyse, 
+                        table = glue::glue("nitrate_prelevement_analyse_", version), 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        #pk = "code_prelevement_analyse",
+                        user = "admin")
+```
+
+
+## Renommage de l'identifiant
+```{r rename_id_row__}
+#| eval: no
+
+collectr::rename_field(database = "si_eau",
+                       schema = "nitrates",
+                       table = glue::glue("nitrate_prelevement_analyse_", version),
+                       old_field = "id_row__",
+                       new_field = "code_prelevement_analyse",
+                       role = "admin")
+```
+
+
+## Ajout des commentaires
+```{r add_comments}
+#| eval: no
+
+# Établir une connexion à la base de données PostgreSQL
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+  
+# Génération de la date du jour
+date_now <- format(Sys.Date(), "%d/%m/%Y")
+
+# Liste des requêtes SQL
+table_comment <- glue::glue("COMMENT ON TABLE nitrates.nitrate_prelevement_analyse_{version} IS 
+      'Table des prélèvements et analyses 2007-{last_year} (version {version} du {date_now})';")
+
+# Exécuter la commande SQL
+DBI::dbExecute(connexion, table_comment)
+
+# Ajouter les commentaires sur chaque champ
+comments_sql <- glue::glue(
+  "COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_prelevement_analyse IS 'Identifiant du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_intervenant IS 'Identifiant de l''intervenant';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.source IS 'Source de la donn\u00e9e';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_reseau IS 'Identifiant du r\u00e9seau';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_station IS 'Identifiant de la station';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_prelevement IS 'Date du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.heure_prelevement IS 'Heure du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_support IS 'Code du support de pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.nature_eau IS 'Nature de l''eau du pr\u00e9l\u00e8vement (ESO/ESU)';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_usage IS 'Code de l''usage du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.id_prelevement_motif IS 'Code du motif du pr\u00e9l\u00e8vement';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_parametre IS 'Identifiant du param\u00e8tre analys\u00e9';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analys\u00e9e';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.date_analyse IS 'Date de l''analyse';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.resultat_analyse IS 'R\u00e9sultat de l''analyse';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.code_remarque IS 'Code validant la donn\u00e9e';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_detection IS 'Limite de d\u00e9tection';
+  COMMENT ON COLUMN nitrates.nitrate_prelevement_analyse_{version}.limite_quantification IS 'Limite de quantification';"
+)
+
+  
+ # Exécuter chaque commande SQL
+  for (sql in c(comments_sql)) {
+    DBI::dbExecute(connexion, sql)
+  }
+
+  # Fermeture de la connexion à la base de données
+  DBI::dbDisconnect(connexion)
+```
+
+