diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..42a81f055d3de9f64bd34f609502d8ef7ebe8c37
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,80 @@
+image: rocker/geospatial:latest
+
+variables:
+  GIT_DEPTH: 10
+  REPO_NAME: "https://packagemanager.rstudio.com/all/__linux__/focal/latest"
+  R_LIBS: "ci/lib"
+
+cache:
+  key: global-cache
+  paths:
+      - ${R_LIBS}
+
+stages:
+  - build
+  - pkgdown
+  - pkgdown-move
+  - deploy
+
+building:
+  stage: build
+  script:
+    - apt-get update -qq && apt-get install -y libharfbuzz-dev libfribidi-dev
+    - echo "Library path for packages :" $R_LIBS
+    - mkdir -p $R_LIBS
+    - Rscript -e 'install.packages("remotes")'
+    - Rscript -e 'install.packages("rcmdcheck")'
+    - Rscript -e 'remotes::install_local(upgrade = "never")'
+    - Rscript -e 'remotes::install_git("https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/data.nitrates.git")'
+    - R -e 'rcmdcheck::rcmdcheck(args = c("--no-manual"), error_on = "warning", check_dir = "check")'
+    - ls -la
+    - mkdir -p public
+    - ls -la public
+    - ls -la $R_LIBS
+
+integration:
+    stage: pkgdown
+    allow_failure: true
+    when: on_success
+    only:
+        - main
+    script:
+        - Rscript -e 'remotes::install_cran(c("pkgdown"), upgrade = "never")'
+        - Rscript -e 'pkgdown::build_site()'
+    artifacts:
+        paths:
+            - docs
+        expire_in: 30 days
+
+integration-main:
+    stage: pkgdown-move
+    dependencies:
+        - integration
+    only:
+        - main
+    script:
+        - mkdir -p public
+        - echo "test file" > public/test.txt
+        - 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=pages" &&
+          unzip artifacts.zip &&
+          rm artifacts.zip &&
+          echo "copied main artifacts" ||
+          echo "copied main artifacts failed"'
+        - ls -la docs || echo "Docs directory does not exist or is empty"
+        - cp -r docs/* public || echo "No files to copy"
+        - ls -la public
+    artifacts:
+        paths:
+            - public
+        expire_in: 30 days
+
+pages:
+    stage: deploy
+    script:
+        - echo "deployment with cache"
+        - ls -la public || echo "Public directory does not exist"
+    artifacts:
+        paths:
+            - public
+    only:
+        - main
diff --git a/inst/nyc_squirrels_sample.csv b/inst/nyc_squirrels_sample.csv
deleted file mode 100644
index a91242d3db48d4b7207d15f7cf539bb73948e1b9..0000000000000000000000000000000000000000
--- a/inst/nyc_squirrels_sample.csv
+++ /dev/null
@@ -1,201 +0,0 @@
-long,lat,unique_squirrel_id,hectare,shift,date,hectare_squirrel_number,age,primary_fur_color,highlight_fur_color,combination_of_primary_and_highlight_color,color_notes,location,above_ground_sighter_measurement,specific_location,running,chasing,climbing,eating,foraging,other_activities,kuks,quaas,moans,tail_flags,tail_twitches,approaches,indifferent,runs_from,other_interactions,lat_long,zip_codes,community_districts,borough_boundaries,city_council_districts,police_precincts
--73.9676692772518,40.7764726688908,15G-AM-1008-03,15G,AM,10082018,3,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9676692772518 40.7764726688908),NA,19,4,19,13
--73.9760256477558,40.7703573131398,5D-AM-1020-02,05D,AM,10202018,2,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,TRUE,FALSE,TRUE,small jumps,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9760256477558 40.7703573131398),NA,19,4,19,13
--73.954595058342,40.7956567934304,39F-AM-1014-04,39F,AM,10142018,4,Juvenile,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.954595058342 40.7956567934304),NA,19,4,19,13
--73.9715921982161,40.7746153066601,11E-PM-1012-06,11E,PM,10122018,6,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",Gray & Cinnamon selected as Primary. White selected as Highlights. Made executive adjustments.,Above Ground,5,NA,FALSE,FALSE,TRUE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9715921982161 40.7746153066601),NA,19,4,19,13
--73.9555255950648,40.7977720808005,40D-AM-1013-04,40D,AM,10132018,4,Adult,Gray,Cinnamon,Gray+Cinnamon,Gray & Cinnamon selected as Primary. Nothing selected as Highlights. Made executive adjustments.,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9555255950648 40.7977720808005),NA,19,4,19,13
--73.9647904085226,40.7911589002217,30A-PM-1020-02,30A,PM,10202018,2,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",Cinnamon back. Gray & Cinnamon selected as Primary. White selected as Highlights. Made executive adjustments.,Ground Plane,FALSE,Rock,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9647904085226 40.7911589002217),NA,19,4,19,13
--73.9710541405708,40.7724691605718,10F-PM-1019-05,10F,PM,10192018,5,Adult,Black,NA,Black+,NA,Above Ground,10,"Behind fence, tree",FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9710541405708 40.7724691605718),NA,19,4,19,13
--73.9672413354558,40.7838116138235,22C-PM-1006-03,22C,PM,10062018,3,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9672413354558 40.7838116138235),NA,19,4,19,13
--73.9693465383617,40.7744996336934,12F-PM-1007-01,12F,PM,10072018,1,Adult,Cinnamon,Gray,Cinnamon+Gray,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9693465383617 40.7744996336934),NA,19,4,19,13
--73.9542990150586,40.7940915300678,37G-PM-1007-09,37G,PM,10072018,9,Adult,Cinnamon,White,Cinnamon+White,NA,NA,NA,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9542990150586 40.7940915300678),NA,19,4,19,13
--73.9556218199258,40.7980460204041,41D-PM-1014-01,41D,PM,10142018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,"digging,drinking",FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9556218199258 40.7980460204041),NA,19,4,19,13
--73.969532160039,40.7822616641357,20B-PM-1013-01,20B,PM,10132018,1,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.969532160039 40.7822616641357),NA,19,4,19,13
--73.9673243699918,40.7875392957722,26A-AM-1014-01,26A,AM,10142018,1,NA,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,could not get close due to fences,POINT (-73.9673243699918 40.7875392957722),NA,19,4,19,13
--73.9713519158027,40.7798470142991,17B-AM-1010-01,17B,AM,10102018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9713519158027 40.7798470142991),NA,19,4,19,13
--73.9635689059841,40.790163434915,30B-PM-1019-03,30B,PM,10192018,3,Adult,Gray,Black,Gray+Black,NA,Above Ground,10,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9635689059841 40.790163434915),NA,19,4,19,13
--73.9669366401071,40.7836023897982,22C-PM-1006-09,22C,PM,10062018,9,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.96693664010711 40.7836023897982),NA,19,4,19,13
--73.9586085843149,40.7946617684536,36C-AM-1014-03,36C,AM,10142018,3,NA,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9586085843149 40.7946617684536),NA,19,4,19,13
--73.9639431360458,40.7908677445466,30B-AM-1007-04,30B,AM,10072018,4,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9639431360458 40.7908677445466),NA,19,4,19,13
--73.9577758125518,40.799384716477,41B-AM-1010-10,41B,AM,10102018,10,Adult,Cinnamon,White,Cinnamon+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9577758125518 40.799384716477),NA,19,4,19,13
--73.954482814186,40.7987031768001,42D-PM-1013-01,42D,PM,10132018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,Drawing included.,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,watching passers-by,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,FALSE,NA,POINT (-73.954482814186 40.7987031768001),NA,19,4,19,13
--73.9526681107152,40.7977012009146,42F-PM-1017-01,42F,PM,10172018,1,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,playing,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9526681107152 40.7977012009146),NA,19,4,19,13
--73.9587439756541,40.7849006107353,27I-AM-1007-04,27I,AM,10072018,4,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,NA,POINT (-73.9587439756541 40.7849006107353),NA,19,4,19,13
--73.9720389756717,40.7763524091989,13C-PM-1019-02,13C,PM,10192018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9720389756717 40.7763524091989),NA,19,4,19,13
--73.9805517765469,40.7683044693163,2B-PM-1013-05,02B,PM,10132018,5,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,TRUE,FALSE,FALSE,climbing fence!,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,snuck into bike cart!,POINT (-73.9805517765469 40.7683044693163),NA,19,4,19,13
--73.9787771053108,40.769356212275,3B-AM-1010-07,03B,AM,10102018,7,Adult,Gray,NA,Gray+,NA,Above Ground,10,NA,FALSE,FALSE,TRUE,FALSE,FALSE,together w/ #8,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9787771053108 40.76935621227501),NA,19,4,19,13
--73.961934398055,40.7924789548522,33B-PM-1010-07,33B,PM,10102018,7,Adult,NA,NA,+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.961934398055 40.7924789548522),NA,19,4,19,13
--73.9598084794625,40.7976165434502,39A-PM-1014-01,39A,PM,10142018,1,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9598084794625 40.7976165434502),NA,19,4,19,13
--73.9639505810228,40.789573183584,29B-PM-1010-01,29B,PM,10102018,1,Adult,Cinnamon,"Gray, White","Cinnamon+Gray, White",NA,Above Ground,4,climbing trees,FALSE,FALSE,TRUE,TRUE,TRUE,scratching self,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9639505810228 40.789573183584),NA,19,4,19,13
--73.9689700100267,40.7775169562765,15E-PM-1008-05,15E,PM,10082018,5,Adult,Gray,NA,Gray+,NA,Above Ground,20,NA,FALSE,FALSE,FALSE,FALSE,FALSE,sitting,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9689700100267 40.7775169562765),NA,19,4,19,13
--73.9685859705486,40.7848805065322,23A-AM-1018-04,23A,AM,10182018,4,Adult,Gray,NA,Gray+,NA,Above Ground,3,Tree,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9685859705486 40.7848805065322),NA,19,4,19,13
--73.9737247632185,40.7759469280872,12C-PM-1017-01,12C,PM,10172018,1,Juvenile,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,TRUE,FALSE,"digging/burying,drinking from lake",FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9737247632185 40.7759469280872),NA,19,4,19,13
--73.9571233640232,40.7992458980266,41B-PM-1014-04,41B,PM,10142018,4,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,40,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,climbing,POINT (-73.9571233640232 40.7992458980266),NA,19,4,19,13
--73.965019827314,40.7759864291323,15I-AM-1008-03,15I,AM,10082018,3,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.965019827314 40.7759864291323),NA,19,4,19,13
--73.9721263050502,40.7698763846186,7G-PM-1018-01,07G,PM,10182018,1,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9721263050502 40.7698763846186),NA,19,4,19,13
--73.9686999860219,40.7844014735136,22B-PM-1014-03,22B,PM,10142018,3,Juvenile,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,8,NA,TRUE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9686999860219 40.7844014735136),NA,19,4,19,13
--73.9698592838836,40.7743071443959,12F-AM-1020-03,12F,AM,10202018,3,Adult,Gray,Black,Gray+Black,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,playing,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,NA,POINT (-73.9698592838836 40.7743071443959),NA,19,4,19,13
--73.9685940262068,40.776932102013,15F-AM-1007-07,15F,AM,10072018,7,Adult,Cinnamon,Black,Cinnamon+Black,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9685940262068 40.776932102013),NA,19,4,19,13
--73.9752263564287,40.772084917017,7C-PM-1020-02,07C,PM,10202018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9752263564287 40.772084917017),NA,19,4,19,13
--73.9758128509653,40.7715946097064,7C-PM-1020-03,07C,PM,10202018,3,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,5,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9758128509653 40.7715946097064),NA,19,4,19,13
--73.970260899173,40.783651724865,21A-AM-1019-05,21A,AM,10192018,5,Adult,Gray,NA,Gray+,NA,Above Ground,2,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.970260899173 40.783651724865),NA,19,4,19,13
--73.9746877519291,40.7761402808083,11B-PM-1014-03,11B,PM,10142018,3,NA,Gray,NA,Gray+,NA,Above Ground,10,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9746877519291 40.7761402808083),NA,19,4,19,13
--73.9749641575871,40.7673305056277,3F-AM-1006-05,03F,AM,10062018,5,Adult,Cinnamon,Gray,Cinnamon+Gray,NA,Above Ground,3,NA,FALSE,FALSE,TRUE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9749641575871 40.7673305056277),NA,19,4,19,13
--73.9700330712119,40.7782913925727,16D-PM-1010-06,16D,PM,10102018,6,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,TRUE,walking,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,checking me out,POINT (-73.9700330712119 40.7782913925727),NA,19,4,19,13
--73.9720050204318,40.7699419094168,7G-AM-1010-03,07G,AM,10102018,3,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9720050204318 40.7699419094168),NA,19,4,19,13
--73.980897497712,40.7690578709841,2A-PM-1019-02,02A,PM,10192018,2,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.980897497712 40.7690578709841),NA,19,4,19,13
--73.9640741640547,40.7807274581426,20G-AM-1018-01,20G,AM,10182018,1,Juvenile,Gray,NA,Gray+,NA,Above Ground,7,Tree limb,FALSE,FALSE,FALSE,FALSE,FALSE,sitting still on limb,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9640741640547 40.7807274581426),NA,19,4,19,13
--73.9504693544225,40.797225436004,42H-AM-1019-01,42H,AM,10192018,1,Adult,Cinnamon,White,Cinnamon+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9504693544225 40.797225436004),NA,19,4,19,13
--73.9562442622553,40.7957285542564,38E-AM-1010-03,38E,AM,10102018,3,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9562442622553 40.7957285542564),NA,19,4,19,13
--73.9733437449715,40.7782401548362,14B-PM-1014-07,14B,PM,10142018,7,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9733437449715 40.7782401548362),NA,19,4,19,13
--73.9725669210177,40.7681496989029,5H-AM-1007-01,05H,AM,10072018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,NA,NA,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9725669210177 40.7681496989029),NA,19,4,19,13
--73.9657391918196,40.776502470347,16H-PM-1014-01,16H,PM,10142018,1,Juvenile,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9657391918196 40.776502470347),NA,19,4,19,13
--73.9728700359494,40.7659842666881,3H-PM-1014-05,03H,PM,10142018,5,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9728700359494 40.7659842666881),NA,19,4,19,13
--73.9570130017159,40.7996027428625,42B-AM-1014-02,42B,AM,10142018,2,Adult,Black,NA,Black+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,digging,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9570130017159 40.7996027428625),NA,19,4,19,13
--73.9576913492669,40.7994216061391,41B-AM-1010-11,41B,AM,10102018,11,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,NA,NA,NA,FALSE,FALSE,FALSE,TRUE,FALSE,eating a mushroom!,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9576913492669 40.7994216061391),NA,19,4,19,13
--73.9613347295946,40.7938900965153,34B-AM-1013-02,34B,AM,10132018,2,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9613347295946 40.7938900965153),NA,19,4,19,13
--73.9686907918759,40.7839462261858,22B-AM-1013-03,22B,AM,10132018,3,Adult,Cinnamon,NA,Cinnamon+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9686907918759 40.7839462261858),NA,19,4,19,13
--73.9749469566854,40.7667805367199,2F-PM-1014-10,02F,PM,10142018,10,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9749469566854 40.7667805367199),NA,19,4,19,13
--73.9785114291288,40.7719779589449,6A-PM-1012-03,06A,PM,10122018,3,Adult,Cinnamon,White,Cinnamon+White,NA,Ground Plane,FALSE,NA,TRUE,TRUE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9785114291288 40.7719779589449),NA,19,4,19,13
--73.9643538221947,40.7917565604735,31A-PM-1017-01,31A,PM,10172018,1,Juvenile,Cinnamon,"Gray, White","Cinnamon+Gray, White","Gray lower back, Gray & Cinnamon selected as Primary with ""lower back"" written in next to Gray. White selected as Highlights. Made executive adjustments.",Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,NA,POINT (-73.9643538221947 40.7917565604735),NA,19,4,19,13
--73.9801636400744,40.7690192055926,2A-AM-1010-09,02A,AM,10102018,9,Adult,Gray,White,Gray+White,NA,Above Ground,NA,climbing in bush,FALSE,FALSE,TRUE,FALSE,FALSE,hopping & flipping around. this one was very energetic & jumping aorund,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,climbed a foot up a tree and watched me,POINT (-73.9801636400744 40.7690192055926),NA,19,4,19,13
--73.9550082056509,40.7894521543449,33I-AM-1008-03,33I,AM,10082018,3,Adult,Gray,NA,Gray+,NA,Above Ground,2,98th @ edge of park,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9550082056509 40.7894521543449),NA,19,4,19,13
--73.9777978497894,40.7668620784309,1D-AM-1006-01,01D,AM,10062018,1,Juvenile,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,TRUE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,NA,POINT (-73.9777978497894 40.7668620784309),NA,19,4,19,13
--73.9596398997228,40.7933386953847,34D-PM-1007-02,34D,PM,10072018,2,Adult,Black,NA,Black+,NA,Above Ground,25,NA,TRUE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,cautiously aware,POINT (-73.9596398997228 40.7933386953847),NA,19,4,19,13
--73.9584024936392,40.7851491701944,27I-PM-1020-01,27I,PM,10202018,1,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,runs from (us),POINT (-73.9584024936392 40.7851491701944),NA,19,4,19,13
--73.9776151109912,40.7694681558386,4C-PM-1010-09,04C,PM,10102018,9,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9776151109912 40.7694681558386),NA,19,4,19,13
--73.9689504114652,40.7766770153764,14F-PM-1012-05,14F,PM,10122018,5,Adult,Cinnamon,"Gray, White","Cinnamon+Gray, White",NA,Above Ground,2,on a fallen branch,TRUE,FALSE,FALSE,TRUE,FALSE,sitting,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,looking at me,POINT (-73.9689504114652 40.7766770153764),NA,19,4,19,13
--73.965509576403,40.7752456763263,14I-PM-1018-05,14I,PM,10182018,5,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,2,NA,FALSE,FALSE,TRUE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.96550957640301 40.7752456763263),NA,19,4,19,13
--73.9558268731771,40.7952074193788,38E-PM-1014-04,38E,PM,10142018,4,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,THICK UNDERGROWTH,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9558268731771 40.7952074193788),NA,19,4,19,13
--73.9607608482656,40.7954687648248,36A-PM-1013-06,36A,PM,10132018,6,NA,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,EDGE OF WOODS,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9607608482656 40.7954687648248),NA,19,4,19,13
--73.956926909344,40.7965323262487,39D-PM-1012-03,39D,PM,10122018,3,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.956926909344 40.7965323262487),NA,19,4,19,13
--73.9795492724533,40.7709497471738,4A-AM-1007-02,04A,AM,10072018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9795492724533 40.7709497471738),NA,19,4,19,13
--73.9688293382172,40.7738958027568,12G-AM-1012-04,12G,AM,10122018,4,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9688293382172 40.773895802756805),NA,19,4,19,13
--73.9616944195776,40.7927250423024,33B-PM-1010-02,33B,PM,10102018,2,Adult,NA,NA,+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9616944195776 40.7927250423024),NA,19,4,19,13
--73.9690395363594,40.771128205027,9I-PM-1010-01,09I,PM,10102018,1,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",standard coloration,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9690395363594 40.771128205027),NA,19,4,19,13
--73.9564632239432,40.7904807427954,33G-AM-1013-01,33G,AM,10132018,1,Adult,Cinnamon,NA,Cinnamon+,NA,Above Ground,13,shelter in hole in tree,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,NA,POINT (-73.9564632239432 40.7904807427954),NA,19,4,19,13
--73.9701824376506,40.7763703306736,14E-AM-1008-21,14E,AM,10082018,21,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,walking,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,"curious,but not expecting food",POINT (-73.9701824376506 40.7763703306736),NA,19,4,19,13
--73.958770180151,40.7934123941528,35D-PM-1013-04,35D,PM,10132018,4,Juvenile,Gray,White,Gray+White,NA,NA,NA,NA,FALSE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.958770180151 40.7934123941528),NA,19,4,19,13
--73.9528937660465,40.7922919074537,36I-AM-1017-01,36I,AM,10172018,1,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,runs from (me!)—from a pretty big distance,POINT (-73.9528937660465 40.7922919074537),NA,19,4,19,13
--73.955352152771,40.7988549523022,42D-AM-1014-01,42D,AM,10142018,1,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Above Ground,20,NA,FALSE,FALSE,TRUE,TRUE,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.955352152771 40.7988549523022),NA,19,4,19,13
--73.9547398684817,40.7896483795302,33I-AM-1008-01,33I,AM,10082018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,edge of park @ 98th (north),FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9547398684817 40.7896483795302),NA,19,4,19,13
--73.9668922014699,40.7823535653774,21D-AM-1008-06,21D,AM,10082018,6,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9668922014699 40.7823535653774),NA,19,4,19,13
--73.9722053355548,40.7662094993614,3I-AM-1010-03,03I,AM,10102018,3,Adult,Gray,NA,Gray+,NA,Above Ground,50,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9722053355548 40.7662094993614),NA,19,4,19,13
--73.9569375355884,40.7935398008612,36E-AM-1013-02,36E,AM,10132018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9569375355884 40.7935398008612),NA,19,4,19,13
--73.9763719445827,40.7689551413337,4D-PM-1008-04,04D,PM,10082018,4,Adult,Cinnamon,"Gray, White","Cinnamon+Gray, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9763719445827 40.7689551413337),NA,19,4,19,13
--73.9756573579063,40.7656644063024,1G-PM-1010-01,01G,PM,10102018,1,Adult,Gray,White,Gray+White,NA,Above Ground,15,NA,FALSE,FALSE,TRUE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,too busy eating in his tree,POINT (-73.9756573579063 40.7656644063024),NA,19,4,19,13
--73.9618064639153,40.792158440043,32C-PM-1013-12,32C,PM,10132018,12,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE,NA,POINT (-73.9618064639153 40.792158440043),NA,19,4,19,13
--73.9677646187171,40.7746492806333,13H-PM-1010-05,13H,PM,10102018,5,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9677646187171 40.7746492806333),NA,19,4,19,13
--73.9583101927652,40.7852649316039,27I-PM-1020-05,27I,PM,10202018,5,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,10,In tree,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,runs from (us),POINT (-73.9583101927652 40.7852649316039),NA,19,4,19,13
--73.9669814346326,40.780390919948,19E-PM-1018-01,19E,PM,10182018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,NA,POINT (-73.9669814346326 40.780390919948),NA,19,4,19,13
--73.969105907,40.7820474909192,20B-PM-1013-08,20B,PM,10132018,8,Adult,Gray,White,Gray+White,(very brown),Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,being chased by dog,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.969105907 40.7820474909192),NA,19,4,19,13
--73.9612658688914,40.7912119940469,32C-AM-1014-04,32C,AM,10142018,4,Adult,Gray,NA,Gray+,NA,Above Ground,8,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9612658688914 40.7912119940469),NA,19,4,19,13
--73.97035767623,40.7714036487747,9H-PM-1018-09,09H,PM,10182018,9,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.97035767623 40.7714036487747),NA,19,4,19,13
--73.9545383719188,40.7899711263765,33I-PM-1006-03,33I,PM,10062018,3,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.95453837191882 40.7899711263765),NA,19,4,19,13
--73.9762246600197,40.775164077652,10A-AM-1006-03,10A,AM,10062018,3,Juvenile,Cinnamon,NA,Cinnamon+,NA,Ground Plane,FALSE,Bridle Path lawn,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9762246600197 40.775164077652),NA,19,4,19,13
--73.976521916284,40.773784724458,9B-AM-1010-01,09B,AM,10102018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.976521916284 40.773784724458),NA,19,4,19,13
--73.9594174605642,40.7973128653773,38B-AM-1019-02,38B,AM,10192018,2,Juvenile,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9594174605642 40.7973128653773),NA,19,4,19,13
--73.9530809650496,40.7959176317705,40G-PM-1013-02,40G,PM,10132018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,TRUE,FALSE,hiding from dog,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,runs from (dog),POINT (-73.9530809650496 40.79591763177051),NA,19,4,19,13
--73.9722472286151,40.7699550476176,6G-PM-1020-04,06G,PM,10202018,4,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9722472286151 40.7699550476176),NA,19,4,19,13
--73.967832992543,40.7783669913408,17E-PM-1018-03,17E,PM,10182018,3,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.967832992543 40.7783669913408),NA,19,4,19,13
--73.9665871993517,40.7836775064883,22D-PM-1012-07,22D,PM,10122018,7,Adult,Gray,"Black, Cinnamon, White","Gray+Black, Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9665871993517 40.7836775064883),NA,19,4,19,13
--73.965848283831,40.7797243033057,19F-PM-1017-01,19F,PM,10172018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.965848283831 40.7797243033057),NA,19,4,19,13
--73.9556177490335,40.7888569161537,32I-AM-1013-03,32I,AM,10132018,3,Juvenile,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,15,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,watching me from tree - curious,POINT (-73.9556177490335 40.7888569161537),NA,19,4,19,13
--73.9724642436394,40.7690526441109,6G-AM-1008-02,06G,AM,10082018,2,Juvenile,Gray,NA,Gray+,NA,Ground Plane,FALSE,bush,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9724642436394 40.7690526441109),NA,19,4,19,13
--73.970475755546,40.7763348062134,13E-AM-1017-02,13E,AM,10172018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,begging (came one yard away from me and stood there),FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,NA,POINT (-73.970475755546 40.7763348062134),NA,19,4,19,13
--73.9703921271418,40.7700276115314,7H-PM-1006-06,07H,PM,10062018,6,Adult,Gray,NA,Gray+,NA,Above Ground,15,NA,FALSE,TRUE,TRUE,FALSE,FALSE,playing w/ #7,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9703921271418 40.770027611531404),NA,19,4,19,13
--73.9687020800791,40.7735903424522,11H-AM-1010-08,11H,AM,10102018,8,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,NA,POINT (-73.9687020800791 40.7735903424522),NA,19,4,19,13
--73.9742973420446,40.7691801644292,5F-AM-1007-04,05F,AM,10072018,4,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,NA,rocks,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9742973420446 40.7691801644292),NA,19,4,19,13
--73.9714295102249,40.776954371947,14D-PM-1019-02,14D,PM,10192018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9714295102249 40.776954371947),NA,19,4,19,13
--73.9580021017892,40.7955140102242,37D-PM-1014-07,37D,PM,10142018,7,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9580021017892 40.7955140102242),NA,19,4,19,13
--73.9685429060839,40.7724786961619,11H-AM-1010-05,11H,AM,10102018,5,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9685429060839 40.7724786961619),NA,19,4,19,13
--73.9572840457971,40.7886933371744,31H-PM-1008-04,31H,PM,10082018,4,Adult,Gray,NA,Gray+,NA,Above Ground,NA,Also way up,FALSE,FALSE,TRUE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.95728404579711 40.7886933371744),NA,19,4,19,13
--73.9687134137786,40.7812207913391,19C-PM-1018-03,19C,PM,10182018,3,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9687134137786 40.7812207913391),NA,19,4,19,13
--73.9553726714504,40.7987578541123,41D-AM-1014-02,41D,AM,10142018,2,Adult,Gray,NA,Gray+,NA,Above Ground,20,NA,FALSE,FALSE,FALSE,FALSE,FALSE,jumping,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9553726714504 40.7987578541123),NA,19,4,19,13
--73.9790875480358,40.7676104780657,2C-AM-1010-03,02C,AM,10102018,3,Adult,Black,Gray,Black+Gray,NA,Above Ground,30,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9790875480358 40.7676104780657),NA,19,4,19,13
--73.9562177305881,40.7983413276331,41C-PM-1007-03,41C,PM,10072018,3,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9562177305881 40.7983413276331),NA,19,4,19,13
--73.9640016324897,40.7921759097124,32A-PM-1013-01,32A,PM,10132018,1,Juvenile,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9640016324897 40.7921759097124),NA,19,4,19,13
--73.9789401448556,40.7697373141498,4B-AM-1010-04,04B,AM,10102018,4,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,NA,POINT (-73.9789401448556 40.7697373141498),NA,19,4,19,13
--73.9538867186376,40.7941409434007,38G-PM-1020-03,38G,PM,10202018,3,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9538867186376 40.7941409434007),NA,19,4,19,13
--73.964539031099,40.7809916310012,20G-PM-1013-01,20G,PM,10132018,1,Adult,Cinnamon,White,Cinnamon+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,NA,POINT (-73.964539031099 40.7809916310012),NA,19,4,19,13
--73.9601988871514,40.7943473161329,35C-PM-1013-01,35C,PM,10132018,1,NA,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,20,NA,FALSE,FALSE,TRUE,FALSE,TRUE,NA,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9601988871514 40.7943473161329),NA,19,4,19,13
--73.9785675798034,40.7672992405289,1C-PM-1013-05,01C,PM,10132018,5,Adult,Cinnamon,NA,Cinnamon+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9785675798034 40.7672992405289),NA,19,4,19,13
--73.9684910712272,40.7768811640021,15F-PM-1010-05,15F,PM,10102018,5,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9684910712272 40.7768811640021),NA,19,4,19,13
--73.9697178096275,40.7697036696301,7I-PM-1013-07,07I,PM,10132018,7,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,Under the tree,FALSE,TRUE,FALSE,FALSE,FALSE,"playing,interacting with #6",FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,NA,POINT (-73.9697178096275 40.769703669630104),NA,19,4,19,13
--73.9602609920814,40.7942883045566,35C-PM-1013-03,35C,PM,10132018,3,NA,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9602609920814 40.79428830455661),NA,19,4,19,13
--73.979636950073,40.7677999753976,1C-PM-1013-10,01C,PM,10132018,10,Adult,Cinnamon,NA,Cinnamon+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.979636950073 40.7677999753976),NA,19,4,19,13
--73.9756273257684,40.7706539186221,6D-AM-1008-04,06D,AM,10082018,4,Adult,Gray,NA,Gray+,NA,Above Ground,NA,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9756273257684 40.7706539186221),NA,19,4,19,13
--73.9770873939997,40.7710379662106,6C-PM-1020-02,06C,PM,10202018,2,Adult,Gray,NA,Gray+,NA,Above Ground,10,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9770873939997 40.7710379662106),NA,19,4,19,13
--73.9600357018376,40.7906539766881,32E-AM-1007-08,32E,AM,10072018,8,Adult,Gray,NA,Gray+,NA,Above Ground,65,tree top,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9600357018376 40.7906539766881),NA,19,4,19,13
--73.9793101482654,40.7692600238491,3B-PM-1007-02,03B,PM,10072018,2,Adult,Gray,NA,Gray+,NA,Above Ground,10,in tree,FALSE,FALSE,FALSE,FALSE,FALSE,chased by dog,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9793101482654 40.7692600238491),NA,19,4,19,13
--73.9757787135906,40.7737231427345,9B-PM-1013-03,09B,PM,10132018,3,Juvenile,Cinnamon,Gray,Cinnamon+Gray,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9757787135906 40.7737231427345),NA,19,4,19,13
--73.9552861155228,40.788973931872,32I-AM-1013-05,32I,AM,10132018,5,Adult,Cinnamon,Gray,Cinnamon+Gray,NA,Above Ground,3,In and below shrub,FALSE,FALSE,TRUE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9552861155228 40.788973931872),NA,19,4,19,13
--73.9677779408464,40.7867482211349,25A-AM-1013-02,25A,AM,10132018,2,NA,Gray,NA,Gray+,NA,Above Ground,15,BIG TREE,FALSE,TRUE,FALSE,FALSE,FALSE,chasing #3,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9677779408464 40.7867482211349),NA,19,4,19,13
--73.967975586222,40.7735683044313,12H-PM-1007-07,12H,PM,10072018,7,NA,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,grass field,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,humans,POINT (-73.967975586222 40.7735683044313),NA,19,4,19,13
--73.9683345414813,40.7779016280345,16E-PM-1018-07,16E,PM,10182018,7,Juvenile,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,10,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9683345414813 40.7779016280345),NA,19,4,19,13
--73.9639888092327,40.791449395909,31A-AM-1010-01,31A,AM,10102018,1,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,NA,POINT (-73.9639888092327 40.791449395909005),NA,19,4,19,13
--73.9711178122133,40.7672642958437,4I-PM-1007-01,04I,PM,10072018,1,Adult,Black,NA,Black+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9711178122133 40.76726429584371),NA,19,4,19,13
--73.9690362384597,40.7767162824413,14F-PM-1012-09,14F,PM,10122018,9,Adult,Cinnamon,"Gray, White","Cinnamon+Gray, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9690362384597 40.7767162824413),NA,19,4,19,13
--73.9543044385367,40.7984498571338,41E-AM-1007-04,41E,AM,10072018,4,Adult,Cinnamon,White,Cinnamon+White,white haunches/tail,Ground Plane,FALSE,rubbing belly on ground,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9543044385367 40.798449857133804),NA,19,4,19,13
--73.970024735090007,40.7836929044459,21A-AM-1019-08,21A,AM,10192018,8,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.97002473509 40.7836929044459),NA,19,4,19,13
--73.9675917702187,40.7789922281625,17E-AM-1017-02,17E,AM,10172018,2,Adult,Gray,NA,Gray+,NA,Above Ground,8,Shore,FALSE,FALSE,TRUE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9675917702187 40.7789922281625),NA,19,4,19,13
--73.9595002339508,40.7903365788694,32E-PM-1017-13,32E,PM,10172018,13,Adult,Gray,NA,Gray+,Nothing selected as Primary. Gray selected as Highlights. Made executive adjustments.,NA,NA,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9595002339508 40.7903365788694),NA,19,4,19,13
--73.9579335275486,40.7953080673706,37D-PM-1014-05,37D,PM,10142018,5,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9579335275486 40.7953080673706),NA,19,4,19,13
--73.9565549485301,40.7989823714955,41C-AM-1017-03,41C,AM,10172018,3,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9565549485301 40.7989823714955),NA,19,4,19,13
--73.9707197274481,40.7773956803431,14D-PM-1019-12,14D,PM,10192018,12,Adult,Gray,NA,Gray+,NA,NA,NA,NA,FALSE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9707197274481 40.7773956803431),NA,19,4,19,13
--73.9694630409125,40.769737659647,8I-PM-1013-01,08I,PM,10132018,1,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9694630409125 40.769737659647),NA,19,4,19,13
--73.9553163829551,40.7988610926249,42D-PM-1013-04,42D,PM,10132018,4,Adult,Cinnamon,Gray,Cinnamon+Gray,Light Cinnamon,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,carrying nut away,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9553163829551 40.7988610926249),NA,19,4,19,13
--73.951448051873,40.7973951649254,42G-AM-1018-02,42G,AM,10182018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.951448051873 40.7973951649254),NA,19,4,19,13
--73.9562642076935,40.7983338763074,41C-AM-1017-02,41C,AM,10172018,2,Adult,Cinnamon,Gray,Cinnamon+Gray,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,NA,POINT (-73.9562642076935 40.7983338763074),NA,19,4,19,13
--73.9684758245091,40.7858531619022,24A-PM-1007-02,24A,PM,10072018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9684758245091 40.7858531619022),NA,19,4,19,13
--73.9784942525972,40.7672600003683,1D-AM-1006-06,01D,AM,10062018,6,Juvenile,Gray,"Cinnamon, White","Gray+Cinnamon, White",Gray & Cinnamon selected as Primary. White selected as Highlights. Made executive adjustments.,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,tumbling,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9784942525972 40.7672600003683),NA,19,4,19,13
--73.9558943880051,40.7971535141896,40D-PM-1013-06,40D,PM,10132018,6,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,4,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9558943880051 40.7971535141896),NA,19,4,19,13
--73.9615817859213,40.7945839663845,35A-AM-1014-08,35A,AM,10142018,8,Adult,Cinnamon,White,Cinnamon+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9615817859213 40.79458396638451),NA,19,4,19,13
--73.9616693665254,40.792971019627,33B-AM-1010-05,33B,AM,10102018,5,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9616693665254 40.792971019627),NA,19,4,19,13
--73.9665705456197,40.7823552871044,21D-PM-1008-05,21D,PM,10082018,5,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9665705456197 40.7823552871044),NA,19,4,19,13
--73.980854228628,40.7678702158382,1B-AM-1012-17,01B,AM,10122018,17,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,TRUE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.98085422862802 40.7678702158382),NA,19,4,19,13
--73.9578658632957,40.7933712188923,35E-AM-1020-04,35E,AM,10202018,4,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,30,NA,FALSE,FALSE,FALSE,FALSE,FALSE,"hunkered down,tail over body; sitting perfectly still",FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9578658632957 40.7933712188923),NA,19,4,19,13
--73.9538251716292,40.7919360198175,35I-PM-1006-01,35I,PM,10062018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9538251716292 40.7919360198175),NA,19,4,19,13
--73.9693504617353,40.7830678709405,21B-PM-1017-02,21B,PM,10172018,2,Juvenile,Cinnamon,White,Cinnamon+White,NA,Above Ground,1,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,stood on hind legs with front legs on the chest,POINT (-73.9693504617353 40.7830678709405),NA,19,4,19,13
--73.9631089011412,40.789191946875,29C-PM-1006-02,29C,PM,10062018,2,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9631089011412 40.789191946875),NA,19,4,19,13
--73.9561840935803,40.799203782149696,42C-PM-1013-05,42C,PM,10132018,5,Adult,Gray,NA,Gray+,NA,Above Ground,20,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9561840935803 40.7992037821497),NA,19,4,19,13
--73.9620964576469,40.7917332001738,32C-PM-1013-01,32C,PM,10132018,1,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9620964576469 40.7917332001738),NA,19,4,19,13
--73.9713330594434,40.7771924214236,14D-AM-1014-10,14D,AM,10142018,10,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9713330594434 40.7771924214236),NA,19,4,19,13
--73.9663297144622,40.7837932023685,22D-PM-1012-03,22D,PM,10122018,3,Adult,Gray,"Black, White","Gray+Black, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9663297144622 40.7837932023685),NA,19,4,19,13
--73.9603597117619,40.7824399298414,23I-PM-1019-02,23I,PM,10192018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9603597117619 40.7824399298414),NA,19,4,19,13
--73.9787040192473,40.7679010247281,2C-AM-1010-06,02C,AM,10102018,6,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,stood still & watched me then jumped on a fence and ran away,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,NA,POINT (-73.9787040192473 40.7679010247281),NA,19,4,19,13
--73.9724879969884,40.771098202397,8F-PM-1012-07,08F,PM,10122018,7,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,17,NA,FALSE,FALSE,TRUE,FALSE,FALSE,gathering,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9724879969884 40.771098202397),NA,19,4,19,13
--73.9706903740547,40.7726873760687,10G-AM-1006-07,10G,AM,10062018,7,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9706903740547 40.77268737606871),NA,19,4,19,13
--73.9688454483585,40.7845301288163,22A-AM-1008-05,22A,AM,10082018,5,Adult,Gray,White,Gray+White,NA,Above Ground,3,trash can,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9688454483585 40.7845301288163),NA,19,4,19,13
--73.9754836796706,40.7738879545412,9B-PM-1013-01,09B,PM,10132018,1,Juvenile,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,playing,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9754836796706 40.7738879545412),NA,19,4,19,13
--73.968367485157,40.7838472644815,22B-PM-1014-05,22B,PM,10142018,5,NA,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,eating (eats with head tilted far to the right (tooth issue?)),FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.968367485157 40.7838472644815),NA,19,4,19,13
--73.9753818829907,40.7697840986163,5D-PM-1018-06,05D,PM,10182018,6,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9753818829907 40.7697840986163),NA,19,4,19,13
--73.9588358879692,40.7912631913057,33E-PM-1012-01,33E,PM,10122018,1,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9588358879692 40.7912631913057),NA,19,4,19,13
--73.9728654439465,40.7724853142211,9E-AM-1008-04,09E,AM,10082018,4,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9728654439465 40.7724853142211),NA,19,4,19,13
--73.9642411990432,40.7779692777193,18H-PM-1014-03,18H,PM,10142018,3,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9642411990432 40.7779692777193),NA,19,4,19,13
--73.9549860947234,40.7911550328309,34H-PM-1006-07,34H,PM,10062018,7,Juvenile,Gray,White,Gray+White,white belly,Above Ground,20,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9549860947234 40.7911550328309),NA,19,4,19,13
--73.9714637683084,40.7768984561563,14D-PM-1019-01,14D,PM,10192018,1,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9714637683084 40.7768984561563),NA,19,4,19,13
--73.966590487009,40.7802469052891,19E-PM-1018-02,19E,PM,10182018,2,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.96659048700901 40.7802469052891),NA,19,4,19,13
--73.9679309130266,40.7792437838039,17E-AM-1017-04,17E,AM,10172018,4,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,Shore,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9679309130266 40.779243783803906),NA,19,4,19,13
--73.9734762649298,40.7663703404546,3H-AM-1008-05,03H,AM,10082018,5,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,13,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,NA,POINT (-73.9734762649298 40.7663703404546),NA,19,4,19,13
--73.9617612388703,40.7952875954297,35A-AM-1014-04,35A,AM,10142018,4,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9617612388703 40.7952875954297),NA,19,4,19,13
--73.9546042927016,40.7898133734952,33I-PM-1006-07,33I,PM,10062018,7,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9546042927016 40.7898133734952),NA,19,4,19,13
--73.9744368038675,40.7674281958115,3G-PM-1013-03,03G,PM,10132018,3,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,runs from (climbed tree to run from),POINT (-73.97443680386752 40.7674281958115),NA,19,4,19,13
--73.9700785314537,40.777714111862,15D-AM-1007-01,15D,AM,10072018,1,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9700785314537 40.777714111862),NA,19,4,19,13
--73.956737220098,40.797580989255,40C-PM-1006-01,40C,PM,10062018,1,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.95673722009802 40.797580989255),NA,19,4,19,13
--73.9708002461415,40.7726685284831,10F-PM-1019-10,10F,PM,10192018,10,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,Arbor path & hill w/ bushes,TRUE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9708002461415 40.7726685284831),NA,19,4,19,13
--73.973998077367,40.7739029133911,10C-PM-1013-01,10C,PM,10132018,1,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,NA,POINT (-73.973998077367 40.7739029133911),NA,19,4,19,13
--73.9694066600156,40.7805662180672,18C-PM-1018-06,18C,PM,10182018,6,Juvenile,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Above Ground,1,NA,FALSE,FALSE,TRUE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9694066600156 40.7805662180672),NA,19,4,19,13
--73.9545399102352,40.7898646267709,33I-PM-1006-06,33I,PM,10062018,6,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9545399102352 40.7898646267709),NA,19,4,19,13
--73.9747175419546,40.7692820030878,5E-PM-1012-05,05E,PM,10122018,5,Adult,Cinnamon,"Gray, White","Cinnamon+Gray, White",NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,begging,POINT (-73.9747175419546 40.7692820030878),NA,19,4,19,13
--73.9730813162152,40.7779315720879,14B-AM-1007-02,14B,AM,10072018,2,Adult,Gray,NA,Gray+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9730813162152 40.7779315720879),NA,19,4,19,13
--73.9562350820255,40.7913464147989,34G-PM-1006-02,34G,PM,10062018,2,Adult,Gray,NA,Gray+,NA,Above Ground,6,NA,FALSE,FALSE,TRUE,TRUE,TRUE,eating bread it found on ground,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,NA,POINT (-73.9562350820255 40.7913464147989),NA,19,4,19,13
--73.97016933635,40.7705452529783,8H-AM-1017-05,08H,AM,10172018,5,Adult,Gray,Cinnamon,Gray+Cinnamon,NA,Above Ground,6,NA,TRUE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.97016933635001 40.7705452529783),NA,19,4,19,13
--73.9714921188372,40.776758371867,14D-AM-1014-11,14D,AM,10142018,11,Adult,Gray,"Cinnamon, White","Gray+Cinnamon, White",NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9714921188372 40.776758371867),NA,19,4,19,13
--73.9767220179725,40.7753262103123,10A-PM-1014-03,10A,PM,10142018,3,Adult,Gray,"Black, Cinnamon, White","Gray+Black, Cinnamon, White",NA,Above Ground,NA,above my head in tree,FALSE,FALSE,FALSE,TRUE,FALSE,eating (in a tree),FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,"indifferent (lots of people taking its picture,didn't bother it)",POINT (-73.9767220179725 40.7753262103123),12420,20,4,19,12
--73.9553811810434,40.7970895007931,40E-AM-1014-02,40E,AM,10142018,2,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,NA,POINT (-73.9553811810434 40.7970895007931),NA,19,4,19,13
--73.9611274898661,40.7915250069086,32C-AM-1014-05,32C,AM,10142018,5,Adult,Cinnamon,NA,Cinnamon+,NA,Ground Plane,FALSE,NA,FALSE,FALSE,FALSE,TRUE,TRUE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,NA,POINT (-73.9611274898661 40.7915250069086),NA,19,4,19,13
--73.9679955831115,40.7818431607916,20C-PM-1018-04,20C,PM,10182018,4,Adult,Gray,NA,Gray+,NA,Above Ground,8,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9679955831115 40.7818431607916),NA,19,4,19,13
--73.9558589529608,40.7892400394941,32H-PM-1006-02,32H,PM,10062018,2,NA,Gray,NA,Gray+,NA,Above Ground,8,NA,FALSE,FALSE,TRUE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,NA,POINT (-73.9558589529608 40.7892400394941),NA,19,4,19,13
--73.9672054610151,40.7876519923501,26A-PM-1006-05,26A,PM,10062018,5,Adult,Gray,NA,Gray+,NA,Above Ground,40,NA,FALSE,TRUE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,NA,POINT (-73.9672054610151 40.7876519923501),NA,19,4,19,13
--73.9683041099256,40.7862652300082,24A-AM-1014-01,24A,AM,10142018,1,Adult,Gray,White,Gray+White,NA,Ground Plane,FALSE,NA,TRUE,FALSE,FALSE,FALSE,FALSE,NA,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,freezes,POINT (-73.9683041099256 40.7862652300082),NA,19,4,19,13
diff --git a/inst/rmarkdown/templates/creation-des-tables-finales/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/creation-des-tables-finales/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..059dd427c3c457484378c65c1e5b7a82c572769f
--- /dev/null
+++ b/inst/rmarkdown/templates/creation-des-tables-finales/skeleton/skeleton.Rmd
@@ -0,0 +1,229 @@
+---
+title: "Cr\u00e9ation des tables finales"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+library(glue)
+library(DBI)
+library(datalibaba)
+```
+
+```{r development-load}
+# Load already included functions if relevant
+pkgload::load_all(export_all = FALSE)
+```
+
+# Présentation
+
+> Cette page contient la logique métier concernant la création des tables de prélèvements et d'analyses concernant les nitrates.
+
+# Table des prélèvements
+
+```{r function-create_nitrate_prelevement_table}
+#' Créer une table de prélèvements de nitrates
+#'
+#' @description Cette fonction crée une table dans une base de données PostgreSQL 
+#' pour stocker les informations relatives aux prélèvements de nitrates, 
+#' incluant les contraintes et les séquences nécessaires.
+#'
+#' @param version String. Version de la table (par exemple, 'v1').
+#' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
+#' @param connexion DBIConnection. Connexion active à la base de données PostgreSQL.
+#'
+#' @return String. Le script SQL utilisé pour créer la table.
+#' @export
+#' @importFrom datalibaba connect_to_db
+create_nitrate_prelevement_table  <- function(version, last_year, connexion) {
+  
+  # Génération de la date du jour
+  date_now <- format(Sys.Date(), "%d/%m/%Y")
+  
+  # Création du script avec l'ajout des paramètres
+  sql_script <- glue::glue("
+    CREATE TABLE IF NOT EXISTS nitrates.nitrate_prelevement_{version}
+    (
+      code_prelevement serial NOT NULL,
+      code_intervenant character varying(20),
+      source character varying(10),
+      code_reseau character varying(254),
+      code_station character varying(10),
+      date_prelevement date,
+      heure_prelevement character varying(8),
+      code_support int,
+      id_usage character varying(3),
+      id_prelevement_motif character varying(2),
+      commentaire character varying(254),
+      CONSTRAINT pk_nitrate_prelevement_{version} PRIMARY KEY (code_prelevement),
+      CONSTRAINT fk_n_support FOREIGN KEY (code_support)
+          REFERENCES sandre.n_support (code_support) MATCH SIMPLE
+          ON UPDATE CASCADE ON DELETE SET DEFAULT
+    )
+    WITH (
+      OIDS=FALSE
+    );
+
+    ALTER TABLE nitrates.nitrate_prelevement_{version}
+      OWNER TO adminpsql;
+
+    GRANT ALL ON TABLE nitrates.nitrate_prelevement_{version} TO adminpsql;
+    GRANT ALL ON TABLE nitrates.nitrate_prelevement_{version} TO writer_production;
+    GRANT SELECT ON TABLE nitrates.nitrate_prelevement_{version} TO reader_production;
+
+    COMMENT ON TABLE nitrates.nitrate_prelevement_{version}
+      IS 'Table des pr\u00e9l\u00e8vements 2007-{last_year} (version {version} du {date_now})';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_prelevement IS 'Identifiant du pr\u00e9l\u00e8vement';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_intervenant IS 'Identifiant de l''intervenant';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.source IS 'Source de la donn\u00e9e';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_reseau IS 'Identifiant du r\u00e9seau';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_station IS 'Identifiant de la station';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.date_prelevement IS 'Date du pr\u00e9l\u00e8vement';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.heure_prelevement IS 'Heure du pr\u00e9l\u00e8vement';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.code_support IS 'Code du support de pr\u00e9l\u00e8vement';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.id_usage IS 'Code de l''usage du pr\u00e9l\u00e8vement';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.id_prelevement_motif IS 'Code du motif du pr\u00e9l\u00e8vement';
+    COMMENT ON COLUMN nitrates.nitrate_prelevement_{version}.commentaire IS 'Commentaire';
+
+    CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_prelevement_{version}_code_prelevement_seq
+        INCREMENT 1
+        START 1
+        MINVALUE 1
+        MAXVALUE 2147483647
+        CACHE 1;
+
+    ALTER SEQUENCE nitrates.nitrate_prelevement_{version}_code_prelevement_seq
+        OWNER TO adminpsql;
+  ")
+  
+  # Exécution du script dans la base de données
+  DBI::dbExecute(connexion, sql_script)
+  
+  # Fermeture de la connexion à la base de données
+  DBI::dbDisconnect(connexion)
+  
+  return(sql_script)
+}
+```
+
+```{r examples-create_nitrate_prelevement_table, eval=FALSE}
+# Connexion à la base de données
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+
+# Création du script SQL avec la version choisie
+version <- "v0_15"
+last_year <- "2023"
+sql <- create_nitrate_prelevement_table(version, last_year, connexion)
+```
+
+```{r function-create_nitrate_analyse_table} 
+#' Créer une table d'analyses de nitrates
+#'
+#' @description Cette fonction crée une table dans une base de données PostgreSQL 
+#' pour stocker les informations relatives aux analyses de nitrates, incluant 
+#' les contraintes et les séquences nécessaires.
+#'
+#' @param version String. Version de la table (par exemple, 'v1').
+#' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
+#' @param connexion DBIConnection. Connexion active à la base de données PostgreSQL.
+#'
+#' @return String. Le script SQL utilisé pour créer la table.
+#' @export
+#' @importFrom datalibaba connect_to_db
+create_nitrate_analyse_table <- function(version, last_year, connexion) {
+
+  # Génération de la date du jour
+  date_now <- format(Sys.Date(), "%d/%m/%Y")
+
+  # Création du script avec l'ajout des paramètres
+  sql_script <- glue::glue("
+    CREATE TABLE IF NOT EXISTS nitrates.nitrate_analyse_{version}
+    (
+      code_analyse serial NOT NULL,
+      code_intervenant character varying(20),
+      code_prelevement integer,
+      code_parametre bigint,
+      code_fraction_analysee integer,
+      date_analyse date,
+      resultat_analyse double precision,
+      code_remarque integer,
+      limite_detection double precision,
+      limite_quantification double precision,
+      CONSTRAINT pk_nitrate_analyse_{version} PRIMARY KEY (code_analyse),
+      CONSTRAINT fk_n_fraction_analysee FOREIGN KEY (code_fraction_analysee)
+          REFERENCES sandre.n_fraction_analysee (code_fraction_analysee) MATCH SIMPLE
+          ON UPDATE CASCADE ON DELETE SET DEFAULT,
+      -- CONSTRAINT fk_n_intervenant FOREIGN KEY (code_intervenant)
+         -- REFERENCES qualite_cours_d_eau.n_intervenant (code_intervenant) MATCH SIMPLE
+         -- ON UPDATE CASCADE ON DELETE SET DEFAULT,
+      CONSTRAINT fk_n_remarque FOREIGN KEY (code_remarque)
+          REFERENCES sandre.n_remarque (code_remarque) MATCH SIMPLE
+          ON UPDATE NO ACTION ON DELETE NO ACTION,
+      CONSTRAINT fk_parametre FOREIGN KEY (code_parametre)
+          REFERENCES qualite_cours_d_eau.parametre (code_parametre) MATCH SIMPLE
+          ON UPDATE CASCADE ON DELETE SET DEFAULT
+    )
+    WITH (
+      OIDS=FALSE
+    );
+
+    ALTER TABLE nitrates.nitrate_analyse_{version}
+      OWNER TO adminpsql;
+
+    GRANT ALL ON TABLE nitrates.nitrate_analyse_{version} TO adminpsql;
+    GRANT ALL ON TABLE nitrates.nitrate_analyse_{version} TO writer_production;
+    GRANT SELECT ON TABLE nitrates.nitrate_analyse_{version} TO reader_production;
+
+    COMMENT ON TABLE nitrates.nitrate_analyse_{version}
+      IS 'Table des analyses 2007-{last_year} (version {version} du {date_now})';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_analyse IS 'Identifiant de l''analyse';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_intervenant IS 'Identifiant du laboratoire ayant effectu\u00e9 l''analyse';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_prelevement IS 'Identifiant du pr\u00e9l\u00e8vement';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_parametre IS 'Identifiant du param\u00e8tre analys\u00e9';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_fraction_analysee IS 'Identifiant de la fraction analys\u00e9e';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.date_analyse IS 'Date de l''analyse';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.resultat_analyse IS 'R\u00e9sultat de l''analyse';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.code_remarque IS 'Code validant la donn\u00e9e';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.limite_detection IS 'Limite de d\u00e9tection';
+    COMMENT ON COLUMN nitrates.nitrate_analyse_{version}.limite_quantification IS 'Limite de quantification';
+
+    CREATE SEQUENCE IF NOT EXISTS nitrates.nitrate_analyse_{version}_code_analyse_seq
+        INCREMENT 1
+        START 1
+        MINVALUE 1
+        MAXVALUE 2147483647
+        CACHE 1;
+
+    ALTER SEQUENCE nitrates.nitrate_analyse_{version}_code_analyse_seq
+        OWNER TO adminpsql;
+  ")
+
+  # Exécution du script dans la base de données
+  DBI::dbExecute(connexion, sql_script)
+
+  # Fermeture de la connexion à la base de données
+  DBI::dbDisconnect(connexion)
+
+  return(sql_script)
+}
+
+```
+
+```{r examples-create_nitrate_analyse_table, eval=FALSE}
+# Connexion à la base de données
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+
+# Création du script SQL avec la version choisie
+version <- "v0_15"
+last_year <- "2023"
+sql <- create_nitrate_analyse_table(version, last_year, 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_create_tables.Rmd", vignette_name = "Cr\u00e9ation des tables finales")
+```
+
diff --git a/inst/rmarkdown/templates/creation-des-tables-finales/template.yaml b/inst/rmarkdown/templates/creation-des-tables-finales/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d8b53064db6c365bd1dcf69074f12d12e338ed6f
--- /dev/null
+++ b/inst/rmarkdown/templates/creation-des-tables-finales/template.yaml
@@ -0,0 +1,4 @@
+name: Création des tables finales
+description: >
+   Création des tables finales
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/import-des-donnees-ars/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/import-des-donnees-ars/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..dfbd8ecec41bc739878891d78fb0dddcec6795d3
--- /dev/null
+++ b/inst/rmarkdown/templates/import-des-donnees-ars/skeleton/skeleton.Rmd
@@ -0,0 +1,147 @@
+---
+title: "Import des données ARS"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+library(xlsx)
+library(datalibaba)
+library(RPostgreSQL)
+library(sf)
+library(collectr)
+library(dplyr)
+```
+
+```{r development-load}
+# Load already included functions if relevant
+pkgload::load_all(export_all = FALSE)
+```
+
+# Présentation
+
+Cette page contient la logique métier concernant l'import des données brutes
+fournies par l'ARS dans une base de données POstgreSQL dans le cadre du projet 
+Nitrates
+
+# Connexion à la base de données PostgreSQL
+
+```{r connect_to_db, eval=FALSE}
+# Se connecter à la base de données PostgreSQL si_eau
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+```
+
+```{r list_schemas, eval=FALSE}
+# Lister les schémas présents dans la base
+schemas_list <- data.frame(datalibaba::list_schemas(connexion))
+
+# Renommer la variable unique en "nom_schema"
+schemas_list <- schemas_list |>
+  rename(nom_schema = unique(names(.)))
+
+# Trier le dataframe par la variable nom_schema
+schemas_list <- schemas_list |>
+  arrange(nom_schema)
+```
+
+```{r list_tables, eval=FALSE}
+# Lister les tables présentes dans le schéma spécifié
+tables_list <- data.frame(datalibaba::list_tables(
+  con = connexion, 
+  db = "si_eau", 
+  schema = "nitrates"))
+
+# Renommer la variable unique en "nom_table"
+tables_list <- tables_list |>
+  rename(nom_table = names(tables_list)[1])
+
+# Trier le dataframe par la variable nom_table
+tables_list <- tables_list |>
+  arrange(nom_table)
+
+```
+
+# Import des données de l'ARS dans un dataframe par millésime 
+
+Les données sont transmies au format XLSX.
+
+```{r import_data_ars_2023, eval=FALSE}
+data_ars_2023 <- collectr::import_xlsx(
+  filepath = "T:\\datalab\\SRNP_DEMA_SI_EAU\\NITRATES\\DONNEES_CLIENT\\SOURCES\\ARS\\2024_06\\Nitrates 2023 pour DREAL EPNT4 2024-05-31.xlsx",
+  sheet = 1,
+  row = 2)
+
+```
+
+# Création d'une table pour le nouveau millésime
+
+```{r create-nitrate_data_ars, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = data_ars_2023, 
+                        table = "nitrate_data_analyse_ars_2023", 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        user = "admin")
+
+# Ajouter un commentaire sur la table
+datalibaba::commenter_table(comment = "Analyses Nitrates ARS (2023)",
+                            table = "nitrate_data_analyse_ars_2023",
+                            schema = "nitrates",
+                            db = "si_eau",
+                            user = "admin")
+
+```
+
+# Modification du type des champs si besoin
+
+```{r modify_column_type, eval=FALSE}
+# Modifier le type de colonne pour les champs de date
+collectr::modify_column_type(database = "si_eau", 
+                   schema = "nitrates", 
+                   table = "nitrate_data_analyse_ars_2023",
+                   column_name = "plv_date", 
+                   column_type = "date",
+                   role = "admin")
+
+```
+
+# Archivage de la version précédente de la table
+
+```{r archive_table, eval=FALSE}
+# Archiver la version actuelle de la table avec tous les millésimes 
+collectr::archive_table(database = "si_eau",
+                        schema = "nitrates", 
+                        new_schema = "zz_archives",
+                        table = "nitrate_data_analyse_ars",
+                        role = "admin")
+
+```
+
+# Insertion des données du nouveau millésime en base dans la table globale
+
+```{r import_and_merge_tables, eval=FALSE}
+# Insérer les données de la table du dernier millésime vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_data_analyse_ars_2023", 
+                                  source_schema = "nitrates", 
+                                  target_table = "nitrate_data_analyse_ars", 
+                                  target_schema = "nitrates",
+                                  role = "admin")
+
+# Actualiser le commentaire sur la table
+datalibaba::commenter_table(comment = "Analyses Nitrates ARS (2007-2023)",
+                            table = "nitrate_data_analyse_ars",
+                            schema = "nitrates",
+                            db = "si_eau",
+                            user = "admin")
+```
+
+```{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_import_ars_data.Rmd", vignette_name = "Import des données ARS")
+```
+
diff --git a/inst/rmarkdown/templates/import-des-donnees-ars/template.yaml b/inst/rmarkdown/templates/import-des-donnees-ars/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..5d2b16a5e6d040ace270fadfda9307350482efea
--- /dev/null
+++ b/inst/rmarkdown/templates/import-des-donnees-ars/template.yaml
@@ -0,0 +1,4 @@
+name: Import des données ARS
+description: >
+   Import des données ARS
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/import-des-donnees-hub-eau-eso/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/import-des-donnees-hub-eau-eso/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..b9a4d3116b2a95ddf090229f57572d55034e282b
--- /dev/null
+++ b/inst/rmarkdown/templates/import-des-donnees-hub-eau-eso/skeleton/skeleton.Rmd
@@ -0,0 +1,170 @@
+---
+title: "Import des données Hub'eau ESO"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+library(hubeau)
+library(datalibaba)
+library(RPostgreSQL)
+library(sf)
+library(collectr)
+library(dplyr)
+```
+
+```{r development-1}
+# Load already included functions
+pkgload::load_all(export_all = FALSE)
+```
+
+# Présentation
+
+> Cette page contient la logique métier concernant l'import des données de 
+l'[API Hub'eau "Qualité des nappes d'eau souterraine"](https://hubeau.eaufrance.fr/page/api-qualite-nappes) dans le cadre du projet Nitrates
+
+# Connexion à la base de données PostgreSQL
+
+```{r connect_to_db, eval=FALSE}
+# Se connecter à la base de données PostgreSQL si_eau
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+```
+
+```{r list_schemas, eval=FALSE}
+# Lister les schémas présents dans la base
+schemas_list <- data.frame(datalibaba::list_schemas(connexion))
+
+# Renommer la variable unique en "nom_schema"
+schemas_list <- schemas_list |>
+  rename(nom_schema = unique(names(.)))
+
+# Trier le dataframe par la variable nom_schema
+schemas_list <- schemas_list |>
+  arrange(nom_schema)
+```
+
+```{r list_tables, eval=FALSE}
+# Lister les tables présentes dans le schéma spécifié
+tables_list <- data.frame(datalibaba::list_tables(
+  con = connexion, 
+  db = "si_eau", 
+  schema = "qualite_cours_d_eau"))
+
+# Renommer la variable unique en "nom_table"
+tables_list <- tables_list |>
+  rename(nom_table = names(tables_list)[1])
+
+# Trier le dataframe par la variable nom_table
+tables_list <- tables_list |>
+  arrange(nom_table)
+
+```
+
+# Import des données Hub'eau ESU dans un dataframe par millésime
+
+On utilise la fonction `get_qualite_nappes_analyses()` du package [{hubeau}](https://github.com/inrae/hubeau)
+
+```{r create-nitrate_analyse_esu_2020, eval=FALSE}
+nitrate_analyse_eso_2020 <- hubeau::get_qualite_nappes_analyses(code_param = "1340",
+                                                                code_region = "52",
+                                                                date_debut_prelevement = "2020-01-01",
+                                                                date_fin_prelevement = "2020-12-31",
+                                                                size = "5000")
+```
+
+```{r create-nitrate_analyse_esu_2021, eval=FALSE}
+nitrate_analyse_eso_2021 <- hubeau::get_qualite_nappes_analyses(code_param = "1340",
+                                                                code_region = "52",
+                                                                date_debut_prelevement = "2021-01-01",
+                                                                date_fin_prelevement = "2021-12-31",
+                                                                size = "5000")
+```
+
+```{r create-nitrate_analyse_esu_2022, eval=FALSE}
+nitrate_analyse_eso_2022 <- hubeau::get_qualite_nappes_analyses(code_param = "1340",
+                                                                code_region = "52",
+                                                                date_debut_prelevement = "2022-01-01",
+                                                                date_fin_prelevement = "2022-12-31",
+                                                                size = "5000")
+
+```
+
+```{r create-nitrate_analyse_esu_2023, eval=FALSE}
+nitrate_analyse_eso_2023 <- hubeau::get_qualite_nappes_analyses(code_param = "1340",
+                                                                code_region = "52",
+                                                                date_debut_prelevement = "2023-01-01",
+                                                                date_fin_prelevement = "2023-12-31",
+                                                                size = "5000")
+```
+
+# Création d'une table pour le nouveau millésime
+
+```{r create-nitrate_data_ars, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_analyse_eso_2023, 
+                        table = "nitrate_qualite_nappes_analyses_2023", 
+                        schema = "qualite_nappes_eau_souterraine", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        user = "admin")
+
+# Ajouter un commentaire sur la table
+datalibaba::commenter_table(comment = "Analyses \"Nitrates\" ESO issues de l''API Hub''eau qualite_nappes : données brutes",
+                            table = "nitrate_qualite_nappes_analyses_2023",
+                            schema = "qualite_nappes_eau_souterraine",
+                            db = "si_eau",
+                            user = "admin")
+
+```
+
+# Modification du type des champs si besoin
+
+```{r modify_column_type, eval=FALSE}
+# Modifier le type de colonne pour les champs de date
+collectr::modify_column_type(database = "si_eau", 
+                   schema = "qualite_nappes_eau_souterraine", 
+                   table = "nitrate_qualite_nappes_analyses_2023",
+                   column_name = "date_debut_prelevement", 
+                   column_type = "date",
+                   role = "admin")
+
+```
+
+# Archivage de la version précédente de la table
+
+```{r archive_table, eval=FALSE}
+# Archiver la version actuelle de la table avec tous les millésimes 
+collectr::archive_table(database = "si_eau",
+                        schema = "qualite_nappes_eau_souterraine", 
+                        new_schema = "zz_archives",
+                        table = "nitrate_qualite_nappes_analyses",
+                        role = "admin")
+
+```
+
+# Insertion des données du nouveau millésime en base dans la table globale
+
+```{r import_and_merge_tables, eval=FALSE}
+# Insérer les données de la table du dernier millésime vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_qualite_nappes_analyses_2023", 
+                                  source_schema = "qualite_nappes_eau_souterraine", 
+                                  target_table = "nitrate_qualite_nappes_analyses", 
+                                  target_schema = "qualite_nappes_eau_souterraine",
+                                  role = "admin")
+
+# Actualiser le commentaire sur la table
+datalibaba::commenter_table(comment = "Analyses Nitrates ESO API Hub'eau Qualité des nappes d'eau souterraine (2007-2023)",
+                            table = "nitrate_qualite_nappes_analyses",
+                            schema = "qualite_nappes_eau_souterraine",
+                            db = "si_eau",
+                            user = "admin")
+```
+
+```{r development-inflate, eval=FALSE}
+# Keep eval=FALSE to avoid infinite loop in case you hit the knit button
+# Execute in the console directly
+fusen::inflate(flat_file = "dev/flat_import_hubeau_eso_data.Rmd", vignette_name = "Import des données Hub'eau ESO")
+```
diff --git a/inst/rmarkdown/templates/import-des-donnees-hub-eau-eso/template.yaml b/inst/rmarkdown/templates/import-des-donnees-hub-eau-eso/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..13f1c9e0537b2779cea8f2326d7682025e3ead4f
--- /dev/null
+++ b/inst/rmarkdown/templates/import-des-donnees-hub-eau-eso/template.yaml
@@ -0,0 +1,4 @@
+name: Import des données Hub'eau ESO
+description: >
+   Import des données Hub'eau ESO
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/import-des-donnees-hub-eau-esu/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/import-des-donnees-hub-eau-esu/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..df26f047b69a81404c2f3c78d244cc51c567fc8a
--- /dev/null
+++ b/inst/rmarkdown/templates/import-des-donnees-hub-eau-esu/skeleton/skeleton.Rmd
@@ -0,0 +1,184 @@
+---
+title: "Import des données Hub'eau ESU"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+library(hubeau)
+library(datalibaba)
+library(RPostgreSQL)
+library(sf)
+library(collectr)
+library(dplyr)
+```
+
+```{r development-1}
+# Load already included functions
+pkgload::load_all(export_all = FALSE)
+```
+
+# Présentation
+
+> Cette page contient la logique métier concernant l'import des données de 
+l'[API Hub'eau "Qualité des cours d'eau"](https://hubeau.eaufrance.fr/page/api-qualite-cours-deau) dans le cadre du projet Nitrates
+
+# Connexion à la base de données PostgreSQL
+
+```{r connect_to_db, eval=FALSE}
+# Se connecter à la base de données PostgreSQL si_eau
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+```
+
+```{r list_schemas, eval=FALSE}
+# Lister les schémas présents dans la base
+schemas_list <- data.frame(datalibaba::list_schemas(connexion))
+
+# Renommer la variable unique en "nom_schema"
+schemas_list <- schemas_list |>
+  rename(nom_schema = unique(names(.)))
+
+# Trier le dataframe par la variable nom_schema
+schemas_list <- schemas_list |>
+  arrange(nom_schema)
+```
+
+```{r list_tables, eval=FALSE}
+# Lister les tables présentes dans le schéma spécifié
+tables_list <- data.frame(datalibaba::list_tables(
+  con = connexion, 
+  db = "si_eau", 
+  schema = "qualite_cours_d_eau"))
+
+# Renommer la variable unique en "nom_table"
+tables_list <- tables_list |>
+  rename(nom_table = names(tables_list)[1])
+
+# Trier le dataframe par la variable nom_table
+tables_list <- tables_list |>
+  arrange(nom_table)
+
+```
+
+# Import des données Hub'eau ESU dans un dataframe par millésime
+
+On utilise la fonction `get_qualite_rivieres_analyse()` du package [{hubeau}](https://github.com/inrae/hubeau)
+
+```{r create-nitrate_analyse_esu_2020, eval=FALSE}
+nitrate_analyse_esu_2020 <- hubeau::get_qualite_rivieres_analyse(code_parametre = "1340",
+                                                                 code_region = "52",
+                                                                 date_debut_prelevement = "2020-01-01",
+                                                                 date_fin_prelevement = "2020-12-31",
+                                                                 size = "5000")
+```
+
+```{r create-nitrate_analyse_esu_2021, eval=FALSE}
+nitrate_analyse_esu_2021 <- hubeau::get_qualite_rivieres_analyse(code_parametre = "1340",
+                                                                 code_region = "52",
+                                                                 date_debut_prelevement = "2021-01-01",
+                                                                 date_fin_prelevement = "2021-12-31",
+                                                                 size = "5000")
+```
+
+```{r create-nitrate_analyse_esu_2022, eval=FALSE}
+nitrate_analyse_esu_2022 <- hubeau::get_qualite_rivieres_analyse(code_parametre = "1340",
+                                                                 code_region = "52",
+                                                                 date_debut_prelevement = "2022-01-01",
+                                                                 date_fin_prelevement = "2022-12-31",
+                                                                 size = "5000")
+
+```
+
+```{r create-nitrate_analyse_esu_2023, eval=FALSE}
+nitrate_analyse_esu_2023 <- hubeau::get_qualite_rivieres_analyse(code_parametre = "1340",
+                                                                 code_region = "52",
+                                                                 date_debut_prelevement = "2023-01-01",
+                                                                 date_fin_prelevement = "2023-12-31",
+                                                                 size = "5000")
+```
+
+# Correction de l'encodage si nécessaire pour certaines variables 
+
+```{r change-encoding, eval=FALSE}
+nitrate_analyse_esu_2023 <- nitrate_analyse_esu_2023 |>
+  dplyr::mutate(libelle_station = iconv(libelle_station, from = "ISO-8859-1", to = "UTF-8"))
+```
+
+# Création d'une table pour le nouveau millésime
+
+```{r create-nitrate_data_ars, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_analyse_esu_2023, 
+                        table = "nitrate_qualite_rivieres_analyse_pc_2023", 
+                        schema = "qualite_cours_d_eau", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        user = "admin")
+
+# Ajouter un commentaire sur la table
+datalibaba::commenter_table(comment = "Analyses \"Nitrates\" ESU issues de l''API Hub''eau qualite_rivieres : données brutes",
+                            table = "nitrate_qualite_rivieres_analyse_pc_2023",
+                            schema = "qualite_cours_d_eau",
+                            db = "si_eau",
+                            user = "admin")
+
+```
+
+# Modification du type des champs si besoin
+
+```{r modify_column_type, eval=FALSE}
+# Modifier le type de colonne pour les champs de date
+collectr::modify_column_type(database = "si_eau", 
+                   schema = "qualite_cours_d_eau", 
+                   table = "nitrate_qualite_rivieres_analyse_pc_2023",
+                   column_name = "date_prelevement", 
+                   column_type = "date",
+                   role = "admin")
+
+collectr::modify_column_type(database = "si_eau", 
+                   schema = "qualite_cours_d_eau", 
+                   table = "nitrate_qualite_rivieres_analyse_pc_2023",
+                   column_name = "date_analyse", 
+                   column_type = "date",
+                   role = "admin")
+
+```
+
+# Archivage de la version précédente de la table
+
+```{r archive_table, eval=FALSE}
+# Archiver la version actuelle de la table avec tous les millésimes 
+collectr::archive_table(database = "si_eau",
+                        schema = "qualite_cours_d_eau", 
+                        new_schema = "zz_archives",
+                        table = "nitrate_qualite_rivieres_analyse_pc",
+                        role = "admin")
+
+```
+
+# Insertion des données du nouveau millésime en base dans la table globale
+
+```{r import_and_merge_tables, eval=FALSE}
+# Insérer les données de la table du dernier millésime vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_qualite_rivieres_analyse_pc_2023", 
+                                  source_schema = "qualite_cours_d_eau", 
+                                  target_table = "nitrate_qualite_rivieres_analyse_pc", 
+                                  target_schema = "qualite_cours_d_eau",
+                                  role = "admin")
+
+# Actualiser le commentaire sur la table
+datalibaba::commenter_table(comment = "Analyses Nitrates ESU API Hub'eau Qualité des cours d'eau (2007-2023)",
+                            table = "nitrate_qualite_rivieres_analyse_pc",
+                            schema = "qualite_cours_d_eau",
+                            db = "si_eau",
+                            user = "admin")
+```
+
+```{r development-inflate, eval=FALSE}
+# Keep eval=FALSE to avoid infinite loop in case you hit the knit button
+# Execute in the console directly
+fusen::inflate(flat_file = "dev/flat_import_hubeau_esu_data.Rmd", vignette_name = "Import des données Hub'eau ESU")
+```
diff --git a/inst/rmarkdown/templates/import-des-donnees-hub-eau-esu/template.yaml b/inst/rmarkdown/templates/import-des-donnees-hub-eau-esu/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..42f88595d75e4278ddb07b63ddd3c060837530fc
--- /dev/null
+++ b/inst/rmarkdown/templates/import-des-donnees-hub-eau-esu/template.yaml
@@ -0,0 +1,4 @@
+name: Import des données Hub'eau ESU
+description: >
+   Import des données Hub'eau ESU
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/insertion-des-analyses-ars/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/insertion-des-analyses-ars/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..418785fa572f01e03ee940fb552e567bac39a34c
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-analyses-ars/skeleton/skeleton.Rmd
@@ -0,0 +1,272 @@
+---
+title: "Insertion des analyses ARS"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+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)
+```
+
+# Consolidation et insertion des données de l'ARS dans la table des analyses
+
+## 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}
+# Charger la table nitrates.nitrate_data_analyse_ars
+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 supprime les enregistrements correspondants à des totaux :
+```{r filter-param_nom_ars, eval=FALSE}
+# Supprimer les lignes ne correspondant pas à une analyse
+nitrate_analyse_ars <- nitrate_data_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_analyse_ars <- nitrate_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_analyse_ars <- nitrate_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_analyse_ars <- nitrate_analyse_ars |>
+  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 sélectionne les champs utiles à la table des analyses :
+```{r select-variables-ars, eval=FALSE}
+# Sélectionner les variables
+nitrate_analyse_ars <- nitrate_analyse_ars |>
+  dplyr::select(code_station = ins_code_national,
+                code_intervenant = geo_dept_ddass_gest_code,
+                date_prelevement = plv_date,
+                nom_parametre = param_nom,
+                date_analyse = anl_date_fin_analyse,
+                resultat_analyse,
+                code_parametre = param_code,
+                code_remarque,
+                limite_quantification)
+
+```
+
+On supprime les caractères < et > dans les variables resultat_analyse et  limite_quantification :
+```{r replace-inferior_superior, eval=FALSE}
+# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
+nitrate_analyse_ars <- nitrate_analyse_ars |>
+  dplyr::mutate(resultat_analyse = 
+                  stringr::str_replace(resultat_analyse, ">", ""),
+                limite_quantification = 
+                  stringr::str_replace(limite_quantification, "<", ""))
+
+```
+
+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_analyse_ars <- nitrate_analyse_ars |>
+  dplyr::mutate(resultat_analyse = as.numeric(resultat_analyse),
+                limite_quantification = as.numeric(limite_quantification),
+                code_parametre = as.integer(code_parametre))
+
+```
+
+## Jointure avec la table des prélèvements créée auparavant
+
+La table des prélèvements est chargée :
+```{r load-nitrate_prelevement, eval=FALSE}
+# Charger la table nitrates.nitrate_prelevement_v0_15
+nitrate_prelevement <- datalibaba::importer_data(
+  table = "nitrate_prelevement_v0_15",
+  schema = "nitrates",
+  db = "si_eau",
+  user = "admin"
+)
+
+```
+
+On dédoublonne les lignes en utilisant les champs `code_station` et `date_prelevement` 
+afin de ne conserver qu'un prélèvement par station et date donnée :
+```{r select-distinct-rows-ars, eval=FALSE}
+# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
+nitrate_analyse_ars <- nitrate_analyse_ars |>
+  dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
+
+```
+
+On joint le dataframe des prélèvements pour récupérer la variable code_prelevement :
+```{r join-prelvement_ars, eval=FALSE}
+# Joindre les dataframes nitrate_analyse_ars et nitrate_prelevement
+nitrate_analyse_ars <- nitrate_analyse_ars |>
+  left_join(nitrate_prelevement |>
+              select(code_station, date_prelevement, code_prelevement), 
+            by = c("code_station" = "code_station", "date_prelevement" = "date_prelevement"))
+```
+
+```{r function-add_code_analyse, eval=FALSE} 
+#' Ajouter une variable code_analyse au dataframe
+#'
+#' @description Cette fonction ajoute une nouvelle variable `code_analyse` 
+#' au dataframe en utilisant une séquence PostgreSQL dynamique. La séquence est 
+#' construite en fonction du paramètre `version` fourni.
+#'
+#' @param dataframe Un dataframe contenant les données sur lesquelles ajouter 
+#' la variable `code_analyse`.
+#' @param version Une chaîne de caractères représentant la version de la 
+#' séquence à utiliser.
+#'
+#' @return Un dataframe avec une nouvelle colonne `code_analyse` contenant 
+#' les valeurs de la séquence PostgreSQL.
+#' 
+#' @importFrom DBI dbGetQuery dbDisconnect
+#' @importFrom dplyr mutate
+#' @importFrom glue glue
+#' @importFrom datalibaba connect_to_db
+#' @export
+add_code_analyse <- function(dataframe, version) {
+  # Établir une connexion à la base de données PostgreSQL
+  connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+  
+  # Construire le nom de la séquence
+  sequence_name <- glue::glue("nitrates.nitrate_analyse_{version}_code_analyse_seq")
+  
+  # Initialiser une liste pour stocker les valeurs de la séquence
+  code_analyses <- c()
+  
+  # Pour chaque ligne du dataframe, obtenir une valeur de la séquence
+  for (i in 1:nrow(dataframe)) {
+    query <- glue::glue("SELECT nextval(\'{sequence_name}\') AS code_analyse")
+    result <- DBI::dbGetQuery(connexion, query)
+    code_analyses <- c(code_analyses, result$code_analyse)
+  }
+  
+  # Ajouter la nouvelle variable au dataframe
+  dataframe <- dataframe |>
+    dplyr::mutate(code_analyse = code_analyses)
+  
+  # Fermer la connexion à la base de données
+  DBI::dbDisconnect(connexion)
+  
+  return(dataframe)
+}
+
+```
+
+On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
+```{r add_code_analyse_ars, eval=FALSE}
+# Utiliser la fonction add_code_analyse_ars avec la version souhaitée
+nitrate_analyse_ars <- add_code_analyse(
+  nitrate_analyse_ars, "v0_15")
+
+# Afficher le dataframe pour vérifier les modifications
+print(nitrate_analyse_ars)
+
+```
+
+## Préparation pour l'insertion en base
+
+On corrige l'ordre des champs les champs utiles à la table des analyses :
+```{r select-variables-ars-final, eval=FALSE}
+# Sélectionner les variables dans l'ordre des champs de la table à alimenter
+nitrate_analyse_ars <- nitrate_analyse_ars |>
+  dplyr::select(code_analyse,
+                code_intervenant,
+                code_prelevement,
+                code_parametre,
+                code_station,
+                date_analyse,
+                resultat_analyse,
+                code_remarque,
+                limite_quantification)
+
+```
+
+On charge les données consolidées dans un table dédiée :
+```{r insert-into_nitrate_prelevement_v0_15, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_analyse_ars, 
+                        table = "nitrate_analyse_ars_v0_15", 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        pk = "code_analyse",
+                        user = "admin")
+```
+
+## Insertion des analyses ARS en base dans la table globale
+
+On insère enfin les enregistrements de cette table dans la table globale :
+```{r import_and_merge_tables_ars, eval=FALSE}
+# Insérer les données de la table du dernier millésime vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_analyse_ars_v0_15", 
+                                  source_schema = "nitrates", 
+                                  target_table = "nitrate_analyse_v0_15", 
+                                  target_schema = "nitrates",
+                                  role = "admin")
+
+```
+
+```{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_ars_into_analyse.Rmd", vignette_name = "Insertion des analyses ARS")
+```
+
diff --git a/inst/rmarkdown/templates/insertion-des-analyses-ars/template.yaml b/inst/rmarkdown/templates/insertion-des-analyses-ars/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..328f70c7d0eca9192a2406977938e12214f157c6
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-analyses-ars/template.yaml
@@ -0,0 +1,4 @@
+name: Insertion des analyses ARS
+description: >
+   Insertion des analyses ARS
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/insertion-des-analyses-hubeau-eso/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/insertion-des-analyses-hubeau-eso/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..d48a9624bce734b03188bdbeff15314e1eb6b9a4
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-analyses-hubeau-eso/skeleton/skeleton.Rmd
@@ -0,0 +1,195 @@
+---
+title: "Insertion des analyses Hubeau ESO"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+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)
+```
+
+# Consolidation et insertion des analyses Hub'eau ESO dans la table des analyses
+
+## Chargement des analyses 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_analyses <- 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_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
+  dplyr::filter(!code_producteur %in% c('44','49','53','72','85'))
+```
+
+## Consolidation des données Hub'eau ESO
+
+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_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
+  dplyr::mutate(
+    resultat = stringr::str_replace(resultat, "\\,", "."),
+    limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
+    limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
+    )
+
+```
+
+On sélectionne les champs utiles à la table des analyses :
+```{r select-variables-hubeau_eso, eval=FALSE}
+# Sélectionner les variables
+nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
+  dplyr::select(code_station = bss_id,
+                code_intervenant = code_lieu_analyse,
+                date_prelevement = date_debut_prelevement,
+                date_analyse = date_debut_prelevement,
+                resultat_analyse = resultat,
+                code_parametre = code_param,
+                code_fraction_analysee = code_fraction,
+                code_remarque = code_remarque_analyse,
+                limite_detection,
+                limite_quantification)
+
+```
+
+On modifie le type des variables numériques :
+```{r change-fieldtypes, eval=FALSE}
+# Remplacer les valeurs dans les colonnes resultat_analyse et limite_quantification
+nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
+  dplyr::mutate(resultat_analyse = as.numeric(resultat_analyse),
+                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_analysee),
+                code_remarque = as.integer(code_remarque)
+                )
+
+```
+
+# Jointure avec la table des prélèvements créée auparavant
+
+La table des prélèvements est chargée :
+```{r load-nitrate_prelevement, eval=FALSE}
+# Charger la table nitrates.nitrate_prelevement_v0_15
+nitrate_prelevement <- datalibaba::importer_data(
+  table = "nitrate_prelevement_v0_15",
+  schema = "nitrates",
+  db = "si_eau",
+  user = "admin"
+)
+
+```
+
+On dédoublonne les lignes en utilisant les champs `code_station` et `date_prelevement` 
+afin de ne conserver qu'un prélèvement par station et date donnée :
+```{r select-distinct-rows_hubeau_eso, eval=FALSE}
+# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
+nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
+  dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
+
+```
+
+On joint le dataframe des prélèvements pour récupérer la variable code_prelevement :
+```{r join-prelevement_hubeau_eso, eval=FALSE}
+# Joindre les dataframes nitrate_qualite_nappes_analyses et nitrate_prelevement
+nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
+  left_join(nitrate_prelevement |>
+              select(code_station, date_prelevement, code_prelevement), 
+            by = c("code_station" = "code_station", "date_prelevement" = "date_prelevement"))
+```
+
+On dédoublonne les lignes en utilisant les champs `code_prelevement`,
+`code_parametre` et `resultat_analyse` afin de ne conserver qu'une analyse :
+```{r select-distinct-rows_hubeau_eso_2, eval=FALSE}
+# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
+nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
+  dplyr::distinct(code_prelevement, code_parametre, resultat_analyse, .keep_all = TRUE)
+
+```
+
+On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
+```{r add_code_analyse_hubeau_eso, eval=FALSE}
+# Utiliser la fonction add_code_analyse_ars avec la version souhaitée
+nitrate_qualite_nappes_analyses <- add_code_analyse(
+  nitrate_qualite_nappes_analyses, "v0_15")
+
+# Afficher le dataframe pour vérifier les modifications
+print(nitrate_qualite_nappes_analyses)
+
+```
+
+# Chargement en base
+
+On corrige l'ordre des champs les champs utiles à la table des analyses :
+```{r select-variables-hubeau_eso_final, eval=FALSE}
+# Sélectionner les variables dans l'ordre des champs de la table à alimenter
+nitrate_qualite_nappes_analyses <- nitrate_qualite_nappes_analyses |>
+  dplyr::select(code_analyse,
+                code_intervenant,
+                code_prelevement,
+                code_parametre,
+                code_fraction_analysee,
+                date_analyse,
+                resultat_analyse,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+
+```
+
+On charge les données consolidées dans un table dédiée :
+```{r insert-into_nitrate_prelevement_v0_15, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_qualite_nappes_analyses, 
+                        table = "nitrate_analyse_hubeau_eso_v0_15", 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        pk = "code_analyse",
+                        user = "admin")
+```
+
+# Insertion des données Hub'eau ESO en base dans la table globale
+
+On insère enfin les enregistrements de cette table dans la table globale :
+```{r import_and_merge_tables_hubeau_eso, eval=FALSE}
+# Insérer les données de la table du dernier millésime vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_analyse_hubeau_eso_v0_15", 
+                                  source_schema = "nitrates", 
+                                  target_table = "nitrate_analyse_v0_15", 
+                                  target_schema = "nitrates",
+                                  role = "admin")
+
+```
+
+```{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_hubeau_eso_into_analyse.Rmd", vignette_name = "Insertion des analyses Hubeau ESO")
+```
+
diff --git a/inst/rmarkdown/templates/insertion-des-analyses-hubeau-eso/template.yaml b/inst/rmarkdown/templates/insertion-des-analyses-hubeau-eso/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ee42dc9b59d13edb7abf10d8c8d27b90ee52b7a7
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-analyses-hubeau-eso/template.yaml
@@ -0,0 +1,4 @@
+name: Insertion des analyses Hubeau ESO
+description: >
+   Insertion des analyses Hubeau ESO
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/insertion-des-analyses-hubeau-esu/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/insertion-des-analyses-hubeau-esu/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..69fb3db52e0e967e12ef7405178d5a8b31b69bfc
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-analyses-hubeau-esu/skeleton/skeleton.Rmd
@@ -0,0 +1,185 @@
+---
+title: "Insertion des analyses Hubeau ESU"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+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)
+```
+
+# Consolidation et insertion des analyses Hub'eau ESU dans la table des analyses
+
+## Chargement des analyses 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_cours_d_eau.nitrate_qualite_rivieres_analyse_pc
+nitrate_qualite_rivieres_analyses <- datalibaba::importer_data(
+  table = "nitrate_qualite_rivieres_analyse_pc",
+  schema = "qualite_cours_d_eau",
+  db = "si_eau",
+  user = "admin"
+)
+```
+
+## Consolidation des analyses Hub'eau ESU
+
+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_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
+  dplyr::mutate(
+    resultat = stringr::str_replace(resultat, "\\,", "."),
+    limite_detection = stringr::str_replace(limite_detection, "\\,", "."),
+    limite_quantification = stringr::str_replace(limite_quantification, "\\,", ".")
+    )
+
+```
+
+On sélectionne les champs utiles à la table des analyses :
+```{r select-variables-hubeau_esu, eval=FALSE}
+# Sélectionner les variables
+nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
+  dplyr::select(code_station,
+                code_intervenant = code_laboratoire,
+                date_prelevement,
+                date_analyse,
+                resultat_analyse = resultat,
+                code_parametre,
+                code_fraction_analysee = code_fraction,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+
+```
+
+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_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
+  dplyr::mutate(resultat_analyse = as.numeric(resultat_analyse),
+                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_analysee),
+                code_remarque = as.integer(code_remarque)
+                )
+
+```
+
+# Jointure avec la table des prélèvements créée auparavant
+
+La table des prélèvements est chargée :
+```{r load-nitrate_prelevement, eval=FALSE}
+# Charger la table nitrates.nitrate_prelevement_v0_15
+nitrate_prelevement <- datalibaba::importer_data(
+  table = "nitrate_prelevement_v0_15",
+  schema = "nitrates",
+  db = "si_eau",
+  user = "admin"
+)
+
+```
+
+On dédoublonne les lignes en utilisant les champs `code_station` et `date_prelevement` 
+afin de ne conserver qu'un prélèvement par station et date donnée :
+```{r select-distinct-rows_hubeau_esu, eval=FALSE}
+# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
+nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
+  dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
+
+```
+
+On joint le dataframe des prélèvements pour récupérer la variable code_prelevement :
+```{r join-prelevement_hubeau_esu, eval=FALSE}
+# Joindre les dataframes nitrate_qualite_rivieres_analyses et nitrate_prelevement
+nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
+  left_join(nitrate_prelevement |>
+              select(code_station, date_prelevement, code_prelevement), 
+            by = c("code_station" = "code_station", "date_prelevement" = "date_prelevement"))
+```
+
+On dédoublonne les lignes en utilisant les champs `code_prelevement`,
+`code_parametre` et `resultat_analyse` afin de ne conserver qu'une analyse :
+```{r select-distinct-rows_hubeau_esu_2, eval=FALSE}
+# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
+nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
+  dplyr::distinct(code_prelevement, code_parametre, resultat_analyse, .keep_all = TRUE)
+
+```
+
+On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
+```{r add_code_analyse_hubeau_esu, eval=FALSE}
+# Utiliser la fonction add_code_analyse_ars avec la version souhaitée
+nitrate_qualite_rivieres_analyses <- add_code_analyse(
+  nitrate_qualite_rivieres_analyses, "v0_15")
+
+# Afficher le dataframe pour vérifier les modifications
+print(nitrate_qualite_rivieres_analyses)
+
+```
+
+# Chargement en base
+
+On corrige l'ordre des champs les champs utiles à la table des analyses :
+```{r select-variables-hubeau_esu_final, eval=FALSE}
+# Sélectionner les variables dans l'ordre des champs de la table à alimenter
+nitrate_qualite_rivieres_analyses <- nitrate_qualite_rivieres_analyses |>
+  dplyr::select(code_analyse,
+                code_intervenant,
+                code_prelevement,
+                code_parametre,
+                code_fraction_analysee,
+                date_analyse,
+                resultat_analyse,
+                code_remarque,
+                limite_detection,
+                limite_quantification)
+
+```
+
+On charge les données consolidées dans une table dédiée :
+```{r insert-into_nitrate_analyse_hubeau_esu_v0_15, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_qualite_rivieres_analyses, 
+                        table = "nitrate_analyse_hubeau_esu_v0_15", 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        pk = "code_analyse",
+                        user = "admin")
+```
+
+# Insertion des analyses Hub'eau ESU en base dans la table globale
+
+On insère enfin les enregistrements de cette table dans la table globale :
+```{r import_and_merge_tables_hubeau_esu, eval=FALSE}
+# Insérer les données de la table du dernier millésime vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_analyse_hubeau_esu_v0_15", 
+                                  source_schema = "nitrates", 
+                                  target_table = "nitrate_analyse_v0_15", 
+                                  target_schema = "nitrates",
+                                  role = "admin")
+
+```
+
+```{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_hubeau_esu_into_analyse.Rmd", vignette_name = "Insertion des analyses Hubeau ESU")
+```
+
diff --git a/inst/rmarkdown/templates/insertion-des-analyses-hubeau-esu/template.yaml b/inst/rmarkdown/templates/insertion-des-analyses-hubeau-esu/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f2b2e59707a772ac2b2666b118790ee1c7039605
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-analyses-hubeau-esu/template.yaml
@@ -0,0 +1,4 @@
+name: Insertion des analyses Hubeau ESU
+description: >
+   Insertion des analyses Hubeau ESU
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/insertion-des-prelevements-ars/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/insertion-des-prelevements-ars/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..2507cc574230d42bc5c14a05aad6a9cef405ed5c
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-prelevements-ars/skeleton/skeleton.Rmd
@@ -0,0 +1,170 @@
+---
+title: "Insertion des pr\u00e9l\u00e8vements ARS"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+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)
+```
+
+# Consolidation et insertion des données de l'ARS dans la table des prélèvements
+
+## 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_ars, eval=FALSE}
+# Ajouter les variables source et code_support
+nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
+  dplyr::mutate(
+    source = "ARS",
+    code_support = 3
+  )
+```
+
+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_data_analyse_ars <- nitrate_data_analyse_ars |>
+  dplyr::mutate(plv_heure = stringr::str_replace_all(plv_heure, "h", ":"))
+```
+
+On sélectionne les champs utiles à la table des prélèvements :
+```{r select-variables-ars, eval=FALSE}
+# Sélectionner les variables
+nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
+  dplyr::select(code_intervenant = geo_dept_ddass_gest_code,
+                source,
+                code_station = ins_code_national,
+                date_prelevement = plv_date,
+                heure_prelevement = plv_heure,
+                code_support,
+                id_usage = usage,
+                id_prelevement_motif = plv_motif)
+
+```
+
+On dédoublonne les lignes en utilisant les champs `code_station` et `date_prelevement` 
+afin de ne conserver qu'un prélèvement par station et date donnée :
+```{r select-distinct-rows-ars, eval=FALSE}
+# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
+nitrate_data_analyse_ars <- nitrate_data_analyse_ars |>
+  dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
+```
+
+```{r function-add_code_prelevement, eval=FALSE} 
+#' Ajouter une variable code_prelevement au dataframe
+#'
+#' @description Cette fonction ajoute une nouvelle variable `code_prelevement` 
+#' au dataframe en utilisant une séquence PostgreSQL dynamique. La séquence est 
+#' construite en fonction du paramètre `version` fourni.
+#'
+#' @param dataframe Un dataframe contenant les données sur lesquelles ajouter 
+#' la variable `code_prelevement`.
+#' @param version Une chaîne de caractères représentant la version de la 
+#' séquence à utiliser.
+#'
+#' @return Un dataframe avec une nouvelle colonne `code_prelevement` contenant 
+#' les valeurs de la séquence PostgreSQL.
+#' 
+#' @importFrom DBI dbGetQuery dbDisconnect
+#' @importFrom dplyr mutate
+#' @importFrom glue glue
+#' @importFrom datalibaba connect_to_db
+#' @export
+add_code_prelevement <- function(dataframe, version) {
+  # Établir une connexion à la base de données PostgreSQL
+  connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+  
+  # Construire le nom de la séquence
+  sequence_name <- glue::glue("nitrates.nitrate_prelevement_{version}_code_prelevement_seq")
+  
+  # Initialiser une liste pour stocker les valeurs de la séquence
+  code_prelevements <- c()
+  
+  # Pour chaque ligne du dataframe, obtenir une valeur de la séquence
+  for (i in 1:nrow(dataframe)) {
+    query <- glue::glue("SELECT nextval(\'{sequence_name}\') AS code_prelevement")
+    result <- DBI::dbGetQuery(connexion, query)
+    code_prelevements <- c(code_prelevements, result$code_prelevement)
+  }
+  
+  # Ajouter la nouvelle variable au dataframe
+  dataframe <- dataframe |>
+    dplyr::mutate(code_prelevement = code_prelevements)
+  
+  # Fermer la connexion à la base de données
+  DBI::dbDisconnect(connexion)
+  
+  return(dataframe)
+}
+
+```
+
+On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
+```{r add_code_prelevement_ars, eval=FALSE}
+# Utiliser la fonction add_code_prelevement_ars avec la version souhaitée
+nitrate_data_analyse_ars <- add_code_prelevement(
+  nitrate_data_analyse_ars, "v0_15")
+
+# Afficher le dataframe pour vérifier les modifications
+print(nitrate_data_analyse_ars)
+
+```
+
+On charge les données consolidées dans un table dédiée :
+```{r insert-into_nitrate_prelevement_v0_15, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_data_analyse_ars, 
+                        table = "nitrate_prelevement_ars_v0_15", 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        pk = "code_prelevement",
+                        user = "admin")
+```
+
+# Insertion des données ARS du nouveau millésime en base dans la table globale
+
+On insère enfin les enregistrements de cette table dans la table globale :
+```{r import_and_merge_tables_ars, eval=FALSE}
+# Insérer les données de la table du dernier millésime vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_prelevement_ars_v0_15", 
+                                  source_schema = "nitrates", 
+                                  target_table = "nitrate_prelevement_v0_15", 
+                                  target_schema = "nitrates",
+                                  role = "admin")
+
+```
+
+```{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_ars_into_prelevement.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements ARS")
+```
+
diff --git a/inst/rmarkdown/templates/insertion-des-prelevements-ars/template.yaml b/inst/rmarkdown/templates/insertion-des-prelevements-ars/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..79ed12ffe7f3219b815b0a56d7e7ea0abff86b01
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-prelevements-ars/template.yaml
@@ -0,0 +1,4 @@
+name: Insertion des prélèvements ARS
+description: >
+   Insertion des prélèvements ARS
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-eso/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-eso/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..b87e02a5463d04ad7339633af1a6e845eb28f823
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-eso/skeleton/skeleton.Rmd
@@ -0,0 +1,128 @@
+---
+title: "Insertion des pr\u00e9l\u00e8vements Hubeau ESO"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+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)
+```
+
+# Consolidation et insertion des données Hub'eau ESO dans la table des prélèvements
+
+## 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_rivieres_analyse_pc
+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_qualite_nappes_prelevements <- 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` et `code_support` :
+```{r add-source_code_support_hubeau_eso, eval=FALSE}
+# Ajouter les variables source et code_support
+nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
+  dplyr::mutate(
+    source = "ADES",
+    code_support = 3)
+```
+
+On sélectionne les champs utiles à la table des prélèvements :
+```{r select-variables_hubeau_eso, eval=FALSE}
+# Sélectionner les variables
+nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
+  dplyr::select(source,
+                code_reseau = codes_reseau,
+                code_station = bss_id,
+                date_prelevement = date_debut_prelevement,
+                code_support)
+```
+
+On modifie le type de la variable `code_support` de character en integer :
+```{r change-type_code_support, eval=FALSE}
+# Convertir la variable code_support de character en integer
+nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
+  dplyr::mutate(code_support = as.integer(code_support))
+```
+
+On dédoublonne les lignes en utilisant les champs `code_station` et 
+`date_prelevement` afin de ne conserver qu'un prélèvement par station et date 
+donnée :
+```{r select-distinct-rows_hubeau_eso, eval=FALSE}
+# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
+nitrate_qualite_nappes_prelevements <- nitrate_qualite_nappes_prelevements |>
+  dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
+```
+
+On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
+```{r add_code_prelevement_hubeau_eso, eval=FALSE}
+# Utiliser la fonction add_code_prelevement avec la version souhaitée
+nitrate_qualite_nappes_prelevements <- add_code_prelevement(
+  nitrate_qualite_nappes_prelevements, "v0_15")
+
+# Afficher le dataframe pour vérifier les modifications
+print(nitrate_qualite_nappes_prelevements)
+
+```
+
+On charge les données consolidées dans un table dédiée :
+```{r insert-into_nitrate_prelevement_hubeau_eso, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_qualite_nappes_prelevements, 
+                        table = "nitrate_prelevement_hubeau_eso_v0_15", 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        pk = "code_prelevement",
+                        user = "admin")
+```
+
+# Insertion des prélèvements Hub'eau ESO en base dans la table globale
+
+On insère enfin les enregistrements de cette table dans la table globale :
+```{r import_and_merge_tables_hubeau_eso, eval=FALSE}
+# Insérer les prélèvements Hub'eau ESO vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_prelevement_hubeau_eso_v0_15", 
+                                  source_schema = "nitrates", 
+                                  target_table = "nitrate_prelevement_v0_15", 
+                                  target_schema = "nitrates",
+                                  role = "admin")
+
+```
+
+```{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_hubeau_eso_into_prelevement.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements Hubeau ESO")
+```
+
diff --git a/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-eso/template.yaml b/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-eso/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6cc2eeb42f8f937d68e7ca83e6eb827c6f0adea7
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-eso/template.yaml
@@ -0,0 +1,4 @@
+name: Insertion des prélèvements Hubeau ESO
+description: >
+   Insertion des prélèvements Hubeau ESO
+create_dir: FALSE
diff --git a/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-esu/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-esu/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..856ef327732c96f5f1427b0026779c5400449404
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-esu/skeleton/skeleton.Rmd
@@ -0,0 +1,128 @@
+---
+title: "Insertion des pr\u00e9l\u00e8vements Hubeau ESU"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+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)
+```
+
+# Consolidation et insertion des données Hub'eau ESU dans la table des prélèvements
+
+## 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"
+)
+```
+
+## Consolidation des prélèvements Hub'eau ESU
+
+On remplace "." par "," dans les variables `limite_detection` et `limite_quantification` :
+```{r replace-in_limite_detection, eval=FALSE}
+# Remplacer "." par "," dans les colonnes limite_detection et limite_quantification
+nitrate_qualite_rivieres_prelevements <- nitrate_qualite_rivieres_prelevements |>
+  dplyr::mutate(
+    limite_detection = stringr::str_replace_all(limite_detection, ".", ","),
+    limite_quantification = stringr::str_replace_all(limite_quantification, ".", ",")
+    )
+```
+
+On ajoute la variable `source` :
+```{r add-source_code_support_hubeau_esu, eval=FALSE}
+# Ajouter les variables source et code_support
+nitrate_qualite_rivieres_prelevements <- nitrate_qualite_rivieres_prelevements |>
+  dplyr::mutate(source = "Na\u00efades")
+```
+
+On sélectionne les champs utiles à la table des prélèvements :
+```{r select-variables_hubeau_esu, eval=FALSE}
+# Sélectionner les variables
+nitrate_qualite_rivieres_prelevements <- nitrate_qualite_rivieres_prelevements |>
+  dplyr::select(source,
+                code_reseau,
+                code_station,
+                date_prelevement,
+                heure_prelevement,
+                code_support,
+                commentaire = commentaires_analyse)
+```
+
+On modifie le type de la variable `code_support` de character en integer :
+```{r change-type_code_support, eval=FALSE}
+# Convertir la variable code_support de character en integer
+nitrate_qualite_rivieres_prelevements <- nitrate_qualite_rivieres_prelevements |>
+  dplyr::mutate(code_support = as.integer(code_support))
+```
+
+On dédoublonne les lignes en utilisant les champs `code_station` et 
+`date_prelevement` afin de ne conserver qu'un prélèvement par station et date 
+donnée :
+```{r select-distinct-rows_hubeau_esu, eval=FALSE}
+# Dédoublonner les lignes sur les colonnes code_station et date_prelevement
+nitrate_qualite_rivieres_prelevements <- nitrate_qualite_rivieres_prelevements |>
+  dplyr::distinct(code_station, date_prelevement, .keep_all = TRUE)
+```
+
+On ajoute un identifiant unique s'appuyant sur une séquence stockée en base :
+```{r add_code_prelevement_hubeau_esu, eval=FALSE}
+# Utiliser la fonction add_code_prelevement avec la version souhaitée
+nitrate_qualite_rivieres_prelevements <- add_code_prelevement(
+  nitrate_qualite_rivieres_prelevements, "v0_15")
+
+# Afficher le dataframe pour vérifier les modifications
+print(nitrate_qualite_rivieres_prelevements)
+
+```
+
+On charge les données consolidées dans une table dédiée :
+```{r insert-into_nitrate_prelevement_hubeau_esu, eval=FALSE}
+# Charger les données dans une nouvelle table en base
+datalibaba::poster_data(data = nitrate_qualite_rivieres_prelevements, 
+                        table = "nitrate_prelevement_hubeau_esu_v0_15", 
+                        schema = "nitrates", 
+                        db = "si_eau",
+                        overwrite = TRUE,
+                        pk = "code_prelevement",
+                        user = "admin")
+```
+
+# Insertion des prélèvements Hub'eau ESU en base dans la table globale
+
+On insère enfin les enregistrements de cette table dans la table globale :
+```{r import_and_merge_tables_hubeau_esu, eval=FALSE}
+# Insérer les données de la table du dernier millésime vers la table complète
+collectr::import_and_merge_tables(database = "si_eau",
+                                  source_table = "nitrate_prelevement_hubeau_esu_v0_15", 
+                                  source_schema = "nitrates", 
+                                  target_table = "nitrate_prelevement_v0_15", 
+                                  target_schema = "nitrates",
+                                  role = "admin")
+
+```
+
+```{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_hubeau_esu_into_prelevement.Rmd", vignette_name = "Insertion des pr\u00e9l\u00e8vements Hubeau ESU")
+```
+
diff --git a/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-esu/template.yaml b/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-esu/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..df273c69358c6dadab13214137479613412d7d39
--- /dev/null
+++ b/inst/rmarkdown/templates/insertion-des-prelevements-hubeau-esu/template.yaml
@@ -0,0 +1,4 @@
+name: Insertion des prélèvements Hubeau ESU
+description: >
+   Insertion des prélèvements Hubeau ESU
+create_dir: FALSE