diff --git a/.github/workflows/create-release.yaml b/.github/workflows/create-release.yaml
index 501ccb132..831874772 100644
--- a/.github/workflows/create-release.yaml
+++ b/.github/workflows/create-release.yaml
@@ -71,7 +71,7 @@ jobs:
java-version: '25'
- name: install model filiere
- run: mvn install:install-file -Dfile="$(pwd)/libs/modelefiliere-2.2.2-springboot4.jar" -DgroupId=fr.insee -DartifactId=modelefiliere -Dversion=2.2.2-springboot4 -Dpackaging=jar -DgeneratePom=true
+ run: mvn install:install-file -Dfile="$(pwd)/libs/modelefiliere-2.1.0.jar" -DgroupId=fr.insee -DartifactId=modelefiliere -Dversion=2.1.0 -Dpackaging=jar -DgeneratePom=true
- name: Clone BPM
uses: actions/checkout@v6
@@ -86,10 +86,8 @@ jobs:
cd ..
- uses: actions/checkout@v6
- - name: Build app
- run: |
- git fetch origin main
- git checkout origin/main
+ - name: Build app
+ run:
mvn package --no-transfer-progress
- name: Upload app jar
@@ -182,4 +180,4 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}
default_branch: ${{ github.ref }}
tags: ${{ needs.check-version.outputs.release-tag }}
- workdir: .
+ workdir: .
\ No newline at end of file
diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml
index 34ef52940..030f04e8c 100644
--- a/.github/workflows/docker.yaml
+++ b/.github/workflows/docker.yaml
@@ -28,7 +28,7 @@ jobs:
java-version: "25"
- name: install model filiere
- run: mvn install:install-file -Dfile="$(pwd)/libs/modelefiliere-2.2.2-springboot4.jar" -DgroupId=fr.insee -DartifactId=modelefiliere -Dversion=2.2.2-springboot4 -Dpackaging=jar -DgeneratePom=true
+ run: mvn install:install-file -Dfile="$(pwd)/libs/modelefiliere-2.1.0.jar" -DgroupId=fr.insee -DartifactId=modelefiliere -Dversion=2.1.0 -Dpackaging=jar -DgeneratePom=true
- name: Clone BPM
uses: actions/checkout@master
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 9fb5dcea9..ca58eeca0 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -30,7 +30,7 @@ jobs:
cache: maven
- name: install model filiere
- run: mvn install:install-file -Dfile="$(pwd)/libs/modelefiliere-2.2.2-springboot4.jar" -DgroupId=fr.insee -DartifactId=modelefiliere -Dversion=2.2.2-springboot4 -Dpackaging=jar -DgeneratePom=true
+ run: mvn install:install-file -Dfile="$(pwd)/libs/modelefiliere-2.1.0.jar" -DgroupId=fr.insee -DartifactId=modelefiliere -Dversion=2.1.0 -Dpackaging=jar -DgeneratePom=true
- name: Clone BPM
uses: actions/checkout@master
diff --git a/.github/workflows/scheduled-version-update.yaml b/.github/workflows/scheduled-version-update.yaml
index c06fa32c4..29adabad1 100644
--- a/.github/workflows/scheduled-version-update.yaml
+++ b/.github/workflows/scheduled-version-update.yaml
@@ -87,7 +87,7 @@ jobs:
- name: install model filiere
run: |
- mvn install:install-file -Dfile="$(pwd)/genesis/libs/modelefiliere-2.2.2-springboot4.jar" -DgroupId=fr.insee -DartifactId=modelefiliere -Dversion=2.2.2-springboot4 -Dpackaging=jar -DgeneratePom=true
+ mvn install:install-file -Dfile="$(pwd)/genesis/libs/modelefiliere-2.1.0.jar" -DgroupId=fr.insee -DartifactId=modelefiliere -Dversion=2.1.0 -Dpackaging=jar -DgeneratePom=true
- name: Clone BPM
uses: actions/checkout@master
diff --git a/.gitignore b/.gitignore
index 918479bc7..21e24e4c5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,7 +33,6 @@ src/bin/
# Package Files #
*.jar
-!libs/*.jar
*.war
*.nar
*.ear
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d6ef84aec..ca2f686e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,12 +1,4 @@
# Changelog
-## 2.7.0 [2026-06-18]
-### Changed
-- spring-boot 3.5.14 -> 4.0.6
-
-## 2.6.10 [2026-06-18]
-### Fixed
-- Aligned the conversion logic for multi-iteration variables with single-value variables during collectedVariables creation to avoid unexpected xxx.0 values for INTEGER variables.
-
## 2.6.9 [2026-06-11]
### Fixed
- Delete only expired V2 schedules from dataProcessingContext
diff --git a/libs/modelefiliere-2.1.0.jar b/libs/modelefiliere-2.1.0.jar
new file mode 100644
index 000000000..cadda87eb
Binary files /dev/null and b/libs/modelefiliere-2.1.0.jar differ
diff --git a/libs/modelefiliere-2.2.2-springboot4.jar b/libs/modelefiliere-2.2.2-springboot4.jar
deleted file mode 100644
index 37408feeb..000000000
Binary files a/libs/modelefiliere-2.2.2-springboot4.jar and /dev/null differ
diff --git a/pom.xml b/pom.xml
index 500047373..822310aa2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,14 +4,14 @@
4.0.0
fr.insee.genesis
genesis-api
- 2.7.0
+ 2.6.9
jar
genesis-api
org.springframework.boot
spring-boot-starter-parent
- 4.0.6
+ 3.5.14
@@ -20,12 +20,14 @@
10.1.55
3.20.0
+ 5.13.4
+ 2.21.1
1.2.0
- 3.0.3
+ 2.8.17
1.6.3
- 1.25.5
+ 1.25.3
1.2.3
@@ -73,19 +75,10 @@
test
- org.springframework.boot
- spring-boot-starter-security-test
- test
-
-
- org.springframework.boot
- spring-boot-starter-webmvc-test
+ org.springframework.security
+ spring-security-test
test
-
- org.springframework.boot
- spring-boot-starter-actuator
-
@@ -113,7 +106,7 @@
fr.insee
modelefiliere
- 2.2.2-springboot4
+ 2.1.0
diff --git a/src/main/java/fr/insee/genesis/controller/dto/SurveyUnitInputDto.java b/src/main/java/fr/insee/genesis/controller/dto/SurveyUnitInputDto.java
index c0af750d1..1c7ec8efd 100644
--- a/src/main/java/fr/insee/genesis/controller/dto/SurveyUnitInputDto.java
+++ b/src/main/java/fr/insee/genesis/controller/dto/SurveyUnitInputDto.java
@@ -1,16 +1,12 @@
package fr.insee.genesis.controller.dto;
import fr.insee.genesis.domain.model.surveyunit.Mode;
-import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
-import lombok.NoArgsConstructor;
import java.util.List;
@Builder
-@NoArgsConstructor
-@AllArgsConstructor
@Data
public class SurveyUnitInputDto {
private String questionnaireId;
diff --git a/src/main/java/fr/insee/genesis/controller/rest/LunaticModelController.java b/src/main/java/fr/insee/genesis/controller/rest/LunaticModelController.java
index ed38ccee4..47def0852 100644
--- a/src/main/java/fr/insee/genesis/controller/rest/LunaticModelController.java
+++ b/src/main/java/fr/insee/genesis/controller/rest/LunaticModelController.java
@@ -1,6 +1,7 @@
package fr.insee.genesis.controller.rest;
-import tools.jackson.core.JacksonException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import fr.insee.genesis.domain.model.lunaticmodel.LunaticModelModel;
import fr.insee.genesis.domain.ports.api.LunaticModelApiPort;
import fr.insee.genesis.exceptions.GenesisException;
@@ -14,7 +15,6 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
-import tools.jackson.databind.json.JsonMapper;
import java.util.Map;
@@ -45,12 +45,10 @@ public ResponseEntity saveRawResponsesFromJsonBody(
@PreAuthorize("hasRole('READER')")
public ResponseEntity getLunaticModelFromQuestionnaireId(
@RequestParam("questionnaireId") String questionnaireId
- ) throws JacksonException, GenesisException {
+ ) throws JsonProcessingException, GenesisException {
LunaticModelModel lunaticModelModel = lunaticModelApiPort.get(questionnaireId);
- JsonMapper objectMapper = JsonMapper.builder()
- .findAndAddModules()
- .build();
+ ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules();
return ResponseEntity.ok(objectMapper.writeValueAsString(lunaticModelModel.lunaticModel()));
}
}
diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/InterrogationController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/InterrogationController.java
index bd93de3ec..b25eb947a 100644
--- a/src/main/java/fr/insee/genesis/controller/rest/responses/InterrogationController.java
+++ b/src/main/java/fr/insee/genesis/controller/rest/responses/InterrogationController.java
@@ -2,6 +2,7 @@
import fr.insee.genesis.controller.dto.InterrogationBatchResponse;
import fr.insee.genesis.controller.rest.CommonApiResponse;
+import fr.insee.genesis.controller.utils.DateTimeUtils;
import fr.insee.genesis.domain.model.surveyunit.InterrogationId;
import fr.insee.genesis.domain.model.surveyunit.InterrogationInfo;
import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort;
@@ -61,14 +62,27 @@ public ResponseEntity getAllInterrogationIdsByQuesti
)
@RequestParam(value = "since", required = false)
Instant since,
+ @RequestParam(value = "localSinceDate", required = false)
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
+ @Parameter(description = "Filter interrogations to those recorded strictly after the given timestamp (Europe/Paris timezone)",
+ schema = @Schema(type = "string", format = "date-time", example = "2026-02-02T01:00:00"))
+ LocalDateTime localSinceDate,
@RequestParam(value = "until", required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@Parameter(
description = "Filter interrogations to those recorded before the given timestamp or at the same time (ISO-8601 UTC format).",
schema = @Schema(type = "string", format = "date-time", example = "2026-01-31T23:59:59Z")
)
- Instant until) {
- List idsInfo = surveyUnitService.searchInterrogations(collectionInstrumentId, since, until);
+ Instant until,
+ @RequestParam(value = "localUntilDate", required = false)
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
+ @Parameter(description = "Filter interrogations to those recorded before the given timestamp or at the same time (Europe/Paris timezone)",
+ schema = @Schema(type = "string", format = "date-time", example = "2026-04-02T01:00:00"))
+ LocalDateTime localUntilDate) {
+
+ Instant resolvedSinceDate = DateTimeUtils.resolveInstant(since, localSinceDate);
+ Instant resolvedEndDate = DateTimeUtils.resolveInstant(until, localUntilDate);
+ List idsInfo = surveyUnitService.searchInterrogations(collectionInstrumentId, resolvedSinceDate, resolvedEndDate);
InterrogationBatchResponse response = buildInterrogationBatchResponse(idsInfo);
return ResponseEntity.ok(response);
}
diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java
index b9d1be35d..010097d7b 100644
--- a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java
+++ b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java
@@ -1,6 +1,7 @@
package fr.insee.genesis.controller.rest.responses;
import fr.insee.genesis.controller.dto.rawdata.LunaticJsonRawDataUnprocessedDto;
+import fr.insee.genesis.controller.utils.DateTimeUtils;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult;
import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel;
@@ -14,6 +15,7 @@
import fr.insee.modelefiliere.RawResponseDto;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -199,15 +201,44 @@ public ResponseEntity