From df2c230bf3a1f7778e2b721c40fbf1113ef54ce2 Mon Sep 17 00:00:00 2001
From: Thomas Letellier <thomas.letellier@inra.fr>
Date: Wed, 19 Jun 2019 10:38:18 +0200
Subject: [PATCH 1/3] MCPD. Fix GNP-5428.

---
 .idea/.name                                   |   1 +
 .../api/brapi/v1/GermplasmController.java     |  22 ++
 .../api/gnpis/v1/GnpISJSONViewHandler.java    |   2 +-
 .../data/germplasm/BreedingInstitute.java     |  12 +
 .../data/germplasm/BreedingInstituteVO.java   |  26 ++
 .../gpds/domain/data/germplasm/CollPop.java   |  10 +-
 .../domain/data/germplasm/CollectingInfo.java |  34 +++
 .../data/germplasm/CollectingInfoVO.java      | 104 ++++++++
 .../data/germplasm/CollectingInstitute.java   |  18 ++
 .../data/germplasm/CollectingInstituteVO.java |  27 ++
 .../domain/data/germplasm/CollectingSite.java |  36 +++
 .../data/germplasm/CollectingSiteVO.java      | 101 ++++++++
 .../gpds/domain/data/germplasm/DonorInfo.java |  15 ++
 .../domain/data/germplasm/DonorInfoVO.java    |  30 +++
 .../domain/data/germplasm/DonorInstitute.java |  14 ++
 .../data/germplasm/DonorInstituteVO.java      |  22 ++
 .../domain/data/germplasm/GermplasmMcpd.java  |  53 ++++
 .../data/germplasm/GermplasmMcpdVO.java       | 236 ++++++++++++++++++
 .../germplasm/SafetyDuplicateInstitue.java    |  15 ++
 .../germplasm/SafetyDuplicateInstitueVO.java  |  27 ++
 .../repository/es/GermplasmRepository.java    |   5 +
 .../es/GermplasmRepositoryImpl.java           |  12 +
 .../es/XRefDocumentRepositoryImpl.java        |   5 +-
 .../gpds/service/es/GermplasmService.java     |   4 +
 .../gpds/service/es/GermplasmServiceImpl.java |   6 +
 backend/src/main/resources/application.yml    |   2 +-
 .../es/GermplasmRepositoryTest.java           |  22 ++
 .../gpds/repository/es/setup/ESSetUp.java     |   6 +-
 .../es/setup/fixture/germplasm-mcpd0.json     |  78 ++++++
 .../setup/fixture/urgi_xref_test-group0.json  |   1 +
 .../setup/index/germplasm-mcpd_mapping.json   |  13 +
 31 files changed, 950 insertions(+), 9 deletions(-)
 create mode 100644 .idea/.name
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstitute.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstituteVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfo.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstitute.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstituteVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSite.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfo.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstitute.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstituteVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpd.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitue.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitueVO.java
 create mode 100644 backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/germplasm-mcpd0.json
 create mode 100644 backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/index/germplasm-mcpd_mapping.json

diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 00000000..12f69936
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+gpds
\ No newline at end of file
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java b/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
index 45544b96..db7374fc 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
@@ -12,6 +12,7 @@ import fr.inra.urgi.gpds.domain.criteria.GermplasmGETSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmPOSTSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.base.PaginationCriteriaImpl;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpd;
 import fr.inra.urgi.gpds.domain.response.ApiResponseFactory;
 import fr.inra.urgi.gpds.domain.response.PaginatedList;
 import fr.inra.urgi.gpds.domain.response.Pagination;
@@ -58,6 +59,27 @@ public class GermplasmController {
         return ApiResponseFactory.createSingleObjectResponse(germplasm, null);
     }
 
+
+
+
+    /**
+     * @link https://brapi.docs.apiary.io/#reference/germplasm/germplasm/get-germplasm-mcpd-by-germplasmdbid
+     */
+    @ApiOperation("Get germplasm mcpd by id")
+    @GetMapping("/brapi/v1/germplasm/{germplasmDbId}/mcpd")
+    public BrapiResponse<GermplasmMcpd> getGermplasmMcpd(@PathVariable String germplasmDbId) {
+        LOGGER.debug("germplasmDbId = " + germplasmDbId);
+        GermplasmMcpd germplasm = germplasmService.getMcpdById(germplasmDbId);
+        if (germplasm == null) {
+            throw new NotFoundException("Germplasm not found for id '" + germplasmDbId + "'");
+        }
+        return ApiResponseFactory.createSingleObjectResponse(germplasm, null);
+    }
+
+
+
+
+
     @ApiOperation("List germplasm")
     @GetMapping("/brapi/v1/germplasm")
     public BrapiListResponse<? extends BrapiGermplasm> listGermplasm(
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/api/gnpis/v1/GnpISJSONViewHandler.java b/backend/src/main/java/fr/inra/urgi/gpds/api/gnpis/v1/GnpISJSONViewHandler.java
index 41e14ce7..2e73d72f 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/api/gnpis/v1/GnpISJSONViewHandler.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/api/gnpis/v1/GnpISJSONViewHandler.java
@@ -23,7 +23,7 @@ public class GnpISJSONViewHandler extends AbstractMappingJacksonResponseBodyAdvi
         ServerHttpRequest req,
         ServerHttpResponse response
     ) {
-        // Default: display only GnpIS API Fields (BrAPI + GnpIS fileds)
+        // Default: display only GnpIS API Fields (BrAPI + GnpIS fields)
         bodyContainer.setSerializationView(JSONView.GnpISAPI.class);
     }
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstitute.java
new file mode 100644
index 00000000..8acdde99
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstitute.java
@@ -0,0 +1,12 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+public interface BreedingInstitute {
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteCode();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteName();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstituteVO.java
new file mode 100644
index 00000000..de8804c0
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstituteVO.java
@@ -0,0 +1,26 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+public class BreedingInstituteVO implements BreedingInstitute {
+
+    private String instituteCode;
+    private String instituteName;
+
+    @Override
+    public String getInstituteCode() {
+        return instituteCode;
+    }
+
+    @Override
+    public String getInstituteName() {
+        return instituteName;
+    }
+
+
+    public void setInstituteCode(String instituteCode) {
+        this.instituteCode = instituteCode;
+    }
+
+    public void setInstituteName(String instituteName) {
+        this.instituteName = instituteName;
+    }
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPop.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPop.java
index 463f4ce2..a05c5c6c 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPop.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPop.java
@@ -7,18 +7,18 @@ import fr.inra.urgi.gpds.domain.JSONView;
  * @author gcornut
  */
 public interface CollPop {
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     Long getId();
 
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     String getName();
 
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     String getType();
 
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     PuiNameValue getGermplasmRef();
 
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     Integer getGermplasmCount();
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfo.java
new file mode 100644
index 00000000..e6457d4c
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfo.java
@@ -0,0 +1,34 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface CollectingInfo extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCollectingDate();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<CollectingInstitute> getCollectingInstitutes();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCollectingMissionIdentifier();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCollectingNumber();
+
+    @JsonView(JSONView.BrapiFields.class)
+    CollectingSite getCollectingSite();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCommonCropName();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCountryOfOrigin();
+
+    @JsonView(JSONView.BrapiFields.class)
+    DonorInfo getDonorInfo();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java
new file mode 100644
index 00000000..9e85d473
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java
@@ -0,0 +1,104 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class CollectingInfoVO implements CollectingInfo, Serializable {
+
+
+    private String collectingDate;
+
+    @JsonDeserialize(contentAs = CollectingInstituteVO.class)
+    private List<CollectingInstitute> collectingInstitutes;
+
+    private String collectingMissionIdentifier;
+    private String collectingNumber;
+
+    @JsonDeserialize(as = CollectingSiteVO.class)
+    private CollectingSite collectingSite;
+
+    private String commonCropName;
+    private String countryOfOrigin;
+
+
+    @Override
+    public DonorInfo getDonorInfo() {
+        return donorInfo;
+    }
+
+    @JsonDeserialize(as = DonorInfoVO.class)
+    private DonorInfo donorInfo;
+
+
+    @Override
+    public String getCollectingDate() {
+        return collectingDate;
+    }
+
+
+    @Override
+    public List<CollectingInstitute> getCollectingInstitutes() {
+        return collectingInstitutes;
+    }
+
+
+    @Override
+    public String getCollectingMissionIdentifier() {
+        return collectingMissionIdentifier;
+    }
+
+    @Override
+    public String getCollectingNumber() {
+        return collectingNumber;
+    }
+
+    @Override
+    public String getCommonCropName() {
+        return commonCropName;
+    }
+
+    @Override
+    public String getCountryOfOrigin() {
+        return countryOfOrigin;
+    }
+
+
+    @Override
+    public CollectingSite getCollectingSite() {
+        return collectingSite;
+    }
+
+    public void setCollectingDate(String collectingDate) {
+        this.collectingDate = collectingDate;
+    }
+
+    public void setCollectingInstitutes(List<CollectingInstitute> collectingInstitute) {
+        this.collectingInstitutes = collectingInstitute;
+    }
+
+    public void setCollectingMissionIdentifier(String collectingMissionIdentifier) {
+        this.collectingMissionIdentifier = collectingMissionIdentifier;
+    }
+
+    public void setCollectingNumber(String collectingNumber) {
+        this.collectingNumber = collectingNumber;
+    }
+
+    public void setCollectingSite(CollectingSite collectingSite) {
+        this.collectingSite = collectingSite;
+    }
+
+    public void setCommonCropName(String commonCropName) {
+        this.commonCropName = commonCropName;
+    }
+
+    public void setCountryOfOrigin(String countryOfOrigin) {
+        this.countryOfOrigin = countryOfOrigin;
+    }
+
+    public void setDonorInfo(DonorInfo donorInfo) {
+        this.donorInfo = donorInfo;
+    }
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstitute.java
new file mode 100644
index 00000000..380d4010
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstitute.java
@@ -0,0 +1,18 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+
+public interface CollectingInstitute extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteAddress();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteCode();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteName();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstituteVO.java
new file mode 100644
index 00000000..614af35e
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstituteVO.java
@@ -0,0 +1,27 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import java.io.Serializable;
+
+public class CollectingInstituteVO implements CollectingInstitute, Serializable {
+
+private String instituteAddress;
+private String instituteCode;
+private String instituteName;
+
+
+    @Override
+    public String getInstituteAddress() {
+        return instituteAddress;
+    }
+
+    @Override
+    public String getInstituteCode() {
+        return instituteCode;
+    }
+
+    @Override
+    public String getInstituteName() {
+        return instituteName;
+    }
+}
+
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSite.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSite.java
new file mode 100644
index 00000000..36b5e6da
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSite.java
@@ -0,0 +1,36 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+
+public interface CollectingSite extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCoordinateUncertainty();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getElevation();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getGeoreferencingMethod();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLatitudeDecimal();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLatitudeDegrees();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLocationDescription();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLongitudeDecimal();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLongitudeDegrees();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getSpatialReferenceSystem();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java
new file mode 100644
index 00000000..7b6db0c2
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java
@@ -0,0 +1,101 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import java.io.Serializable;
+
+public class CollectingSiteVO implements CollectingSite {
+
+    private String coordinateUncertainty;
+    private String elevation;
+    private String georeferencingMethod;
+    private String latitudeDecimal;
+    private String latitudeDegrees;
+    private String locationDescription;
+    private String longitudeDecimal;
+    private String longitudeDegrees;
+    private String spatialReferenceSystem;
+
+
+
+
+    @Override
+    public String getCoordinateUncertainty() {
+        return coordinateUncertainty;
+    }
+
+    @Override
+    public String getElevation() {
+        return elevation;
+    }
+
+    @Override
+    public String getGeoreferencingMethod() {
+        return georeferencingMethod;
+    }
+
+    @Override
+    public String getLatitudeDecimal() {
+        return latitudeDecimal;
+    }
+
+    @Override
+    public String getLatitudeDegrees() {
+        return latitudeDegrees;
+    }
+
+    @Override
+    public String getLocationDescription() {
+        return locationDescription;
+    }
+
+    @Override
+    public String getLongitudeDecimal() {
+        return longitudeDecimal;
+    }
+
+    @Override
+    public String getLongitudeDegrees() {
+        return longitudeDegrees;
+    }
+
+    @Override
+    public String getSpatialReferenceSystem() {
+        return spatialReferenceSystem;
+    }
+
+
+    public void setCoordinateUncertainty(String coordinateUncertainty) {
+        this.coordinateUncertainty = coordinateUncertainty;
+    }
+
+    public void setElevation(String elevation) {
+        this.elevation = elevation;
+    }
+
+    public void setGeoreferencingMethod(String georeferencingMethod) {
+        this.georeferencingMethod = georeferencingMethod;
+    }
+
+    public void setLatitudeDecimal(String latitudeDecimal) {
+        this.latitudeDecimal = latitudeDecimal;
+    }
+
+    public void setLatitudeDegrees(String latitudeDegrees) {
+        this.latitudeDegrees = latitudeDegrees;
+    }
+
+    public void setLocationDescription(String locationDescription) {
+        this.locationDescription = locationDescription;
+    }
+
+    public void setLongitudeDecimal(String longitudeDecimal) {
+        this.longitudeDecimal = longitudeDecimal;
+    }
+
+    public void setLongitudeDegrees(String longitudeDegrees) {
+        this.longitudeDegrees = longitudeDegrees;
+    }
+
+    public void setSpatialReferenceSystem(String spatialReferenceSystem) {
+        this.spatialReferenceSystem = spatialReferenceSystem;
+    }
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfo.java
new file mode 100644
index 00000000..1a7244b0
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfo.java
@@ -0,0 +1,15 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+
+public interface DonorInfo extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getDonorAccessionNumber();
+
+    @JsonView(JSONView.BrapiFields.class)
+    DonorInstitute getDonorInstitute();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java
new file mode 100644
index 00000000..379f3d4c
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java
@@ -0,0 +1,30 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import java.io.Serializable;
+
+public class DonorInfoVO implements DonorInfo {
+
+    private String donorAccessionNumber;
+
+
+    private DonorInstituteVO donorInfo;
+
+
+    @Override
+    public String getDonorAccessionNumber() {
+        return donorAccessionNumber;
+    }
+
+    @Override
+    public DonorInstituteVO getDonorInstitute() {
+        return donorInfo;
+    }
+
+    public void setDonorAccessionNumber(String donorAccessionNumber) {
+        this.donorAccessionNumber = donorAccessionNumber;
+    }
+
+    public void setDonorInfo(DonorInstituteVO donorInfo) {
+        this.donorInfo = donorInfo;
+    }
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstitute.java
new file mode 100644
index 00000000..3eedeb78
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstitute.java
@@ -0,0 +1,14 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+
+public interface DonorInstitute extends Serializable {
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteCode();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteName();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstituteVO.java
new file mode 100644
index 00000000..aea19577
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstituteVO.java
@@ -0,0 +1,22 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import java.io.Serializable;
+
+public class DonorInstituteVO implements DonorInstitute {
+
+
+    private String instituteCode;
+    private String instituteName;
+
+
+    @Override
+    public String getInstituteCode() {
+        return instituteCode;
+    }
+
+    @Override
+    public String getInstituteName() {
+        return instituteName;
+    }
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpd.java
new file mode 100644
index 00000000..da71da2d
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpd.java
@@ -0,0 +1,53 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface GermplasmMcpd extends Serializable {
+    @JsonView(JSONView.BrapiFields.class)
+    String getGermplasmDbId();
+    @JsonView(JSONView.BrapiFields.class)
+    List<String> getAccessionNames();
+    @JsonView(JSONView.BrapiFields.class)
+    String getAccessionNumber();
+    @JsonView(JSONView.BrapiFields.class)
+    String getAcquisitionDate();
+    @JsonView(JSONView.BrapiFields.class)
+    String getAcquisitionSourceCode();
+    @JsonView(JSONView.BrapiFields.class)
+    List<String> getAlternateIDs();
+    @JsonView(JSONView.BrapiFields.class)
+    String getAncestralData();
+    @JsonView(JSONView.BrapiFields.class)
+    String getBiologicalStatusOfAccessionCode();
+    @JsonView(JSONView.BrapiFields.class)
+    CollectingInfo getCollectingInfo();
+    @JsonView(JSONView.BrapiFields.class)
+    String getGenus();
+    @JsonView(JSONView.BrapiFields.class)
+    String getGermplasmPUI();
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteCode();
+    @JsonView(JSONView.BrapiFields.class)
+    String getMlsStatus();
+    @JsonView(JSONView.BrapiFields.class)
+    String getRemarks();
+    @JsonView(JSONView.BrapiFields.class)
+    List<SafetyDuplicateInstitue> getSafetyDuplicateInstitues();
+    @JsonView(JSONView.BrapiFields.class)
+    String getSpecies();
+    @JsonView(JSONView.BrapiFields.class)
+    String getSpeciesAuthority();
+
+    List<BreedingInstitute> getBreedingInstitutes();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<String> getStorageTypeCodes();
+    @JsonView(JSONView.BrapiFields.class)
+    String getSubtaxon();
+    @JsonView(JSONView.BrapiFields.class)
+    String getSubtaxonAuthority();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
new file mode 100644
index 00000000..dfb95bfc
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
@@ -0,0 +1,236 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonSetter;
+import com.fasterxml.jackson.annotation.Nulls;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import fr.inra.urgi.gpds.elasticsearch.document.annotation.Document;
+import fr.inra.urgi.gpds.elasticsearch.document.annotation.Id;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Document(type = "germplasm-mcpd")
+public class GermplasmMcpdVO implements GermplasmMcpd, Serializable {
+
+    @Id
+    private String germplasmDbId;
+    private List<String> accessionNames;
+    private String accessionNumber;
+    private String acquisitionDate;
+
+    @JsonSetter(nulls = Nulls.AS_EMPTY)
+    private String acquisitionSourceCode;
+
+    private List<String> alternateIDs;
+    private String ancestralData;
+    private String biologicalStatusOfAccessionCode;
+
+    @JsonDeserialize(contentAs = BreedingInstituteVO.class)
+    private List<BreedingInstitute> breedingInstitutes;
+
+    private CollectingInfoVO collectingInfo;
+
+    private String genus;
+    private String germplasmPUI;
+    private String instituteCode;
+    private String mlsStatus;
+    private String remarks;
+    @JsonDeserialize(contentAs = SafetyDuplicateInstitueVO.class)
+    private List<SafetyDuplicateInstitue> safetyDuplicateInstitues;
+    private String species;
+    private String speciesAuthority;
+    private List<String> storageTypeCodes;
+    private String subtaxon;
+    private String subtaxonAuthority;
+
+
+    @Override
+    public CollectingInfo getCollectingInfo() {
+        return collectingInfo;
+    }
+
+    @Override
+    public String getGermplasmDbId() {
+        return germplasmDbId;
+    }
+
+    @Override
+    public List<String> getAccessionNames() {
+        return accessionNames;
+    }
+
+    @Override
+    public String getAccessionNumber() {
+        return accessionNumber;
+    }
+
+    @Override
+    public String getAcquisitionDate() {
+        return acquisitionDate;
+    }
+
+    @Override
+    public String getAcquisitionSourceCode() {
+        return acquisitionSourceCode;
+    }
+
+    @Override
+    public List<String> getAlternateIDs() {
+        return alternateIDs;
+    }
+
+    @Override
+    public String getAncestralData() {
+        return ancestralData;
+    }
+
+    @Override
+    public String getBiologicalStatusOfAccessionCode() {
+        return biologicalStatusOfAccessionCode;
+    }
+
+
+    @Override
+    public String getGenus() {
+        return genus;
+    }
+
+    @Override
+    public String getGermplasmPUI() {
+        return germplasmPUI;
+    }
+
+    @Override
+    public String getInstituteCode() {
+        return instituteCode;
+    }
+
+    @Override
+    public String getMlsStatus() {
+        return mlsStatus;
+    }
+
+    @Override
+    public String getRemarks() {
+        return remarks;
+    }
+
+    @Override
+    public List<SafetyDuplicateInstitue> getSafetyDuplicateInstitues() {
+        return safetyDuplicateInstitues;
+    }
+
+    @Override
+    public String getSpecies() {
+        return species;
+    }
+
+    @Override
+    public String getSpeciesAuthority() {
+        return speciesAuthority;
+    }
+
+    @Override
+    public List<BreedingInstitute> getBreedingInstitutes() {
+        return breedingInstitutes;
+    }
+
+    @Override
+    public List<String> getStorageTypeCodes() {
+        return storageTypeCodes;
+    }
+
+    @Override
+    public String getSubtaxon() {
+        return subtaxon;
+    }
+
+    @Override
+    public String getSubtaxonAuthority() {
+        return subtaxonAuthority;
+    }
+
+    public void setGermplasmDbId(String germplasmDbId) {
+        this.germplasmDbId = germplasmDbId;
+    }
+
+    public void setAccessionNames(List<String> accessionNames) {
+        this.accessionNames = accessionNames;
+    }
+
+    public void setAccessionNumber(String accessionNumber) {
+        this.accessionNumber = accessionNumber;
+    }
+
+    public void setAcquisitionDate(String acquisitionDate) {
+        this.acquisitionDate = acquisitionDate;
+    }
+
+    public void setAcquisitionSourceCode(String acquisitionSourceCode) {
+        this.acquisitionSourceCode = acquisitionSourceCode;
+    }
+
+    public void setAlternateIDs(List<String> alternateIDs) {
+        this.alternateIDs = alternateIDs;
+    }
+
+    public void setAncestralData(String ancestralData) {
+        this.ancestralData = ancestralData;
+    }
+
+    public void setBiologicalStatusOfAccessionCode(String biologicalStatusOfAccessionCode) {
+        this.biologicalStatusOfAccessionCode = biologicalStatusOfAccessionCode;
+    }
+
+    public void setBreedingInstitutes(List<BreedingInstitute> breedingInstitutes) {
+        this.breedingInstitutes = breedingInstitutes;
+    }
+
+    public void setCollectingInfo(CollectingInfoVO collectingInfo) {
+        this.collectingInfo = collectingInfo;
+    }
+
+    public void setGenus(String genus) {
+        this.genus = genus;
+    }
+
+    public void setGermplasmPUI(String germplasmPUI) {
+        this.germplasmPUI = germplasmPUI;
+    }
+
+    public void setInstituteCode(String instituteCode) {
+        this.instituteCode = instituteCode;
+    }
+
+    public void setMlsStatus(String mlsStatus) {
+        this.mlsStatus = mlsStatus;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public void setSafetyDuplicateInstitues(List<SafetyDuplicateInstitue> safetyDuplicateInstitues) {
+        this.safetyDuplicateInstitues = safetyDuplicateInstitues;
+    }
+
+    public void setSpecies(String species) {
+        this.species = species;
+    }
+
+    public void setSpeciesAuthority(String speciesAuthority) {
+        this.speciesAuthority = speciesAuthority;
+    }
+
+    public void setStorageTypeCodes(List<String> storageTypeCodes) {
+        this.storageTypeCodes = storageTypeCodes;
+    }
+
+    public void setSubtaxon(String subtaxon) {
+        this.subtaxon = subtaxon;
+    }
+
+    public void setSubtaxonAuthority(String subtaxonAuthority) {
+        this.subtaxonAuthority = subtaxonAuthority;
+    }
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitue.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitue.java
new file mode 100644
index 00000000..6bf3a5b8
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitue.java
@@ -0,0 +1,15 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+
+public interface SafetyDuplicateInstitue extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteCode();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteName();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitueVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitueVO.java
new file mode 100644
index 00000000..8274385f
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitueVO.java
@@ -0,0 +1,27 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+public class SafetyDuplicateInstitueVO implements SafetyDuplicateInstitue {
+
+
+    private String instituteCode;
+    private String instituteName;
+
+    @Override
+    public String getInstituteCode() {
+        return instituteCode;
+    }
+
+    @Override
+    public String getInstituteName() {
+        return instituteName;
+    }
+
+    public void setInstituteCode(String instituteCode) {
+        this.instituteCode = instituteCode;
+    }
+
+    public void setInstituteName(String instituteName) {
+        this.instituteName = instituteName;
+    }
+}
+
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepository.java b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepository.java
index c1bf7b19..f5256126 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepository.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepository.java
@@ -1,6 +1,7 @@
 package fr.inra.urgi.gpds.repository.es;
 
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -23,6 +24,10 @@ public interface GermplasmRepository
      */
     GermplasmVO getById(String germplasmDbId);
 
+
+    GermplasmMcpdVO getMcpdById(String germplasmDbId);
+
+
     /**
      * Scroll through all germplasm matching the given criteria.
      */
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryImpl.java b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryImpl.java
index 84108f48..a0b36332 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryImpl.java
@@ -2,6 +2,7 @@ package fr.inra.urgi.gpds.repository.es;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -42,6 +43,7 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
 
     private final ESFindRepository<GermplasmSearchCriteria, GermplasmVO> findRepository;
     private final ESGetByIdRepository<GermplasmVO> getByIdRepository;
+    private final ESGetByIdRepository<GermplasmMcpdVO> getMcpdByIdRepository;
     private final ESGenericQueryFactory<GermplasmSearchCriteria> queryFactory;
 
     @Autowired
@@ -56,9 +58,14 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
         this.mapper = mapper;
         this.parser = parser;
         Class<GermplasmVO> voClass = GermplasmVO.class;
+        Class<GermplasmMcpdVO> voMcpdClass = GermplasmMcpdVO.class;
         this.queryFactory = new ESGenericQueryFactory<>();
         this.findRepository = new ESGenericFindRepository<>(client, requestFactory, voClass, this.parser);
         this.getByIdRepository = new ESGenericGetByIdRepository<>(client, requestFactory, voClass, this.parser);
+        this.getMcpdByIdRepository = new ESGenericGetByIdRepository<>(client, requestFactory, voMcpdClass, this.parser);
+
+
+
     }
 
     @Override
@@ -73,6 +80,11 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
         return getByIdRepository.getById(germplasmDbId);
     }
 
+    @Override
+    public GermplasmMcpdVO getMcpdById(String germplasmDbId) {
+        return getMcpdByIdRepository.getById(germplasmDbId);
+    }
+
     @Override
     public PaginatedList<GermplasmVO> find(GermplasmSearchCriteria criteria) {
         return findRepository.find(criteria);
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
index 72eddc19..93fbd70e 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
@@ -69,11 +69,14 @@ public class XRefDocumentRepositoryImpl implements XRefDocumentRepository {
             LOGGER.debug("Search Xref aliases: " + String.join(",", aliases));
             LOGGER.debug("Query:\n " + source.toString());
 
+
+            
+
             SearchRequest searchRequest = new SearchRequest()
                 .indices(aliases)
                 .source(source);
 
-            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
+            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT).;
 
             List<XRefDocumentVO> documents = parser.parseHits(response, XRefDocumentVO.class);
             Pagination pagination = PaginationImpl.create(criteria, parser.parseTotalHits(response));
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
index dc79a190..0a8837d8 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
@@ -1,6 +1,7 @@
 package fr.inra.urgi.gpds.service.es;
 
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -13,6 +14,9 @@ public interface GermplasmService {
 
     GermplasmVO getById(String germplasmDbId);
 
+    GermplasmMcpdVO getMcpdById(String germplasmDbId);
+
+
     PaginatedList<GermplasmVO> find(GermplasmSearchCriteria criteria);
 
     File exportCSV(GermplasmSearchCriteria criteria);
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmServiceImpl.java b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmServiceImpl.java
index d48999a9..6cdbe0e4 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmServiceImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmServiceImpl.java
@@ -3,6 +3,7 @@ package fr.inra.urgi.gpds.service.es;
 import com.opencsv.CSVWriter;
 import fr.inra.urgi.gpds.api.gnpis.v1.GnpISGermplasmController;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -69,6 +70,11 @@ public class GermplasmServiceImpl implements GermplasmService {
         return germplasmRepository.getById(germplasmDbId);
     }
 
+    @Override
+    public GermplasmMcpdVO getMcpdById(String germplasmDbId) {
+        return germplasmRepository.getMcpdById(germplasmDbId);
+    }
+
     @Override
     public PaginatedList<GermplasmVO> find(GermplasmSearchCriteria sCrit) {
         return germplasmRepository.find(sCrit);
diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml
index 72884e5f..f31b83cf 100644
--- a/backend/src/main/resources/application.yml
+++ b/backend/src/main/resources/application.yml
@@ -21,7 +21,7 @@ logging.level:
 
 gpds:
   elasticsearch-alias-template:
-    gnpis_{source}_{documentType}_5432_krusty-group{groupId}
+    gnpis_{source}_{documentType}_9122_maggie-group{groupId}
 
   elasticsearch-xref-index-name:
     urgi_xref_dev
diff --git a/backend/src/test/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryTest.java b/backend/src/test/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryTest.java
index ae608d31..83063d08 100644
--- a/backend/src/test/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryTest.java
+++ b/backend/src/test/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryTest.java
@@ -6,6 +6,7 @@ import fr.inra.urgi.gpds.Application;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmGETSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmPOSTSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -45,6 +46,7 @@ class GermplasmRepositoryTest {
     @BeforeAll
     void before() {
         esSetUp.initialize(GermplasmVO.class, 0L);
+        esSetUp.initialize(GermplasmMcpdVO.class, 0L);
         esSetUp.initialize(ProgenyVO.class, 0L);
         esSetUp.initialize(PedigreeVO.class, 0L);
     }
@@ -60,6 +62,26 @@ class GermplasmRepositoryTest {
         assertThat(germplasm.getGermplasmDbId()).isEqualTo(germplasmDbId);
     }
 
+
+    @Test
+    void should_Get_By_Id_Mcpd() {
+        String germplasmDbId = "13705";
+        GermplasmMcpdVO germplasm = repository.getMcpdById(germplasmDbId);
+        assertThat(germplasm).isNotNull();
+        assertThat(germplasm.getGermplasmDbId()).isEqualTo(germplasmDbId);
+    }
+
+
+    @Test
+    void should_Not_Get_Mcpd_With_Wrong_Id() {
+        String germplasmDbId = "489485184";
+        GermplasmMcpdVO germplasm = repository.getMcpdById(germplasmDbId);
+        assertThat(germplasm).isNull();
+    }
+
+
+
+
     @Test
     void should_Find_By_PUI() {
         String germplasmPUI = "doi:10.15454/1.4921786381783696E12";
diff --git a/backend/src/test/java/fr/inra/urgi/gpds/repository/es/setup/ESSetUp.java b/backend/src/test/java/fr/inra/urgi/gpds/repository/es/setup/ESSetUp.java
index 7f38d301..6d7fa9f6 100644
--- a/backend/src/test/java/fr/inra/urgi/gpds/repository/es/setup/ESSetUp.java
+++ b/backend/src/test/java/fr/inra/urgi/gpds/repository/es/setup/ESSetUp.java
@@ -170,7 +170,11 @@ public class ESSetUp {
     @SuppressWarnings("UnstableApiUsage")
     private String readResource(String path) {
         try {
-            return CharStreams.toString(new InputStreamReader(getClass().getResourceAsStream(path)));
+            InputStream resource = getClass().getResourceAsStream(path);
+            if (resource == null) {
+                throw new RuntimeException("Could not find resource at path '"+path+"'");
+            }
+            return CharStreams.toString(new InputStreamReader(resource));
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
diff --git a/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/germplasm-mcpd0.json b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/germplasm-mcpd0.json
new file mode 100644
index 00000000..4981d539
--- /dev/null
+++ b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/germplasm-mcpd0.json
@@ -0,0 +1,78 @@
+[{
+  "docId": 13705,
+  "groupId": 0,
+  "accessionNames": [
+    "Belle Magnifique",
+    "Angleterre tardive,Belle de Chatenay,Belle de Sceaux,Belle de Spa,Cerise d'Agen,Cerise de Crêve,Cerise de Planchoury,Cerise de Saxe,de Spa,Gros de Sceaux,Magnifique de Sceaux"
+  ],
+  "accessionNumber": "V3853",
+  "acquisitionDate": 20040000,
+  "acquisitionSourceCode": null,
+  "alternateIDs": [
+    "V3853",
+    "https://doi.org/10.15454/QOYDZ8",
+    "13705"
+  ],
+  "ancestralData": "Il y a deux hypothèses sur l'origine de cette variété : elle aurait été obtenue dans une pépinière de Vitry-sur-Seine ou trouvée dans une propriété à Chatenay (Pomologie de la France 1871).",
+  "biologicalStatusOfAccessionCode": null,
+  "breedingInstitutes": [
+    {
+      "instituteName": null,
+      "instituteCode": null
+    }
+  ],
+  "collectingInfo": {
+    "collectingDate": 20040000,
+    "collectingInstitutes": [
+      {
+        "instituteAddress": "",
+        "instituteCode": null,
+        "instituteName": null
+      }
+    ],
+    "collectingMissionIdentifier": null,
+    "collectingNumber": null,
+    "collectingSite": {
+      "coordinateUncertainty": null,
+      "elevation": null,
+      "georeferencingMethod": null,
+      "latitudeDecimal": null,
+      "latitudeDegrees": null,
+      "locationDescription": null,
+      "longitudeDecimal": null,
+      "longitudeDegrees": null,
+      "spatialReferenceSystem": null
+    }
+  },
+  "cropName": "Cherry",
+  "countryOfOriginCode": "France",
+  "donorInfo ": [
+    {
+      "donorAccessionNumber": "C101",
+      "donorInstitute": {
+        "donorInstituteCode": null,
+        "donorInstitute": "Conservatoire Végétal Régional d'Aquitaine"
+      }
+    }
+  ],
+  "genus": "Prunus",
+  "germplasmDbId": 13705,
+  "germplasmPUI": "https://doi.org/10.15454/QOYDZ8",
+  "instituteCode": "FRA057",
+  "mlsStatus": "0",
+  "remarks": "Quelques auteurs disent que cette variété a été obtenue vers 1795 par un nommé Chatenay, dit le Magnifique, pépiniériste à Vitry-sur-Seine (Pomologie de la France 1871).  D'autres disent qu'elle a été trouvée dans une propriété à Chatenay, et multipliée par les pépiniéristes de Sceaux et de Chatenay, localités où elle a porté pendant longtemps le nom de Cerise de la Madeleine (Pomologie de la France 1871).",
+  "safetyDuplicateInstitues": [
+    {
+      "instituteCode": null,
+      "instituteName": null
+    }
+  ],
+  "species": "cerasus",
+  "speciesAuthority": "L.",
+  "storageTypeCodes": [
+    ""
+  ],
+  "subtaxon": "",
+  "subtaxonAuthority": "L."
+}
+]
diff --git a/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/urgi_xref_test-group0.json b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/urgi_xref_test-group0.json
index 05809a8c..a51b8787 100644
--- a/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/urgi_xref_test-group0.json
+++ b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/urgi_xref_test-group0.json
@@ -17,6 +17,7 @@
     "sequence_id": "",
     "sequence_version": "",
     "start_position": "",
+
     "end_position": "",
     "map": "",
     "map_position": "",
diff --git a/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/index/germplasm-mcpd_mapping.json b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/index/germplasm-mcpd_mapping.json
new file mode 100644
index 00000000..64e68c06
--- /dev/null
+++ b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/index/germplasm-mcpd_mapping.json
@@ -0,0 +1,13 @@
+{
+  "germplasm-mcpd": {
+    "dynamic": "false",
+    "properties": {
+      "germplasmDbId": {
+        "type": "keyword"
+      },
+      "groupId": {
+        "type": "long"
+      }
+    }
+  }
+}
-- 
GitLab


From 4fe0b1fd5c650ddf80cd8c95afb1199bc1f3f718 Mon Sep 17 00:00:00 2001
From: Celia Michotey <celia.michotey@inra.fr>
Date: Thu, 20 Jun 2019 15:09:17 +0200
Subject: [PATCH 2/3] Update Germplasm and Germplasm MCPD calls. GNP-5428.

---
 .../api/brapi/v1/GermplasmController.java     |  10 +-
 .../v1/data/BrapiGermplasmCollectingInfo.java |  25 ++
 .../data/BrapiGermplasmCollectingSite.java}   |   4 +-
 .../v1/data/BrapiGermplasmDonorInfo.java}     |   8 +-
 .../v1/data/BrapiGermplasmInstitute.java}     |  11 +-
 .../v1/data/BrapiGermplasmMcpd.java}          |  73 ++--
 .../urgi/gpds/domain/data/GnpISInternal.java  |   6 -
 .../urgi/gpds/domain/data/LocationVO.java     |   9 -
 .../inra/urgi/gpds/domain/data/ProgramVO.java |   9 -
 .../inra/urgi/gpds/domain/data/TrialVO.java   |   9 -
 .../data/germplasm/BreedingInstituteVO.java   |  26 --
 .../gpds/domain/data/germplasm/CollPopVO.java |   6 +-
 .../domain/data/germplasm/CollectingInfo.java |  34 --
 .../data/germplasm/CollectingInfoVO.java      |  87 ++---
 .../data/germplasm/CollectingInstitute.java   |  18 -
 .../data/germplasm/CollectingInstituteVO.java |  27 --
 .../data/germplasm/CollectingSiteVO.java      |  30 +-
 .../data/germplasm/DistributorInfo.java       |  18 +
 .../data/germplasm/DistributorInfoVO.java     |  35 ++
 .../domain/data/germplasm/DonorInfoVO.java    |  26 +-
 .../domain/data/germplasm/DonorInstitute.java |  14 -
 .../data/germplasm/DonorInstituteVO.java      |  22 --
 .../gpds/domain/data/germplasm/DonorVO.java   |  22 +-
 .../germplasm/ExtendedCollectingInfo.java     |  18 +
 .../germplasm/ExtendedCollectingSite.java     |  19 +
 ...endedDonor.java => ExtendedDonorInfo.java} |  15 +-
 .../data/germplasm/ExtendedGermplasm.java     |  33 --
 .../data/germplasm/ExtendedGermplasmMcpd.java |  54 +++
 ...{Institute.java => ExtendedInstitute.java} |   9 +-
 .../gpds/domain/data/germplasm/Genealogy.java |   2 +-
 .../domain/data/germplasm/GenealogyVO.java    |   6 +-
 .../GermplasmAttributeValueListVO.java        |   9 -
 .../data/germplasm/GermplasmInstitute.java    |  36 --
 .../data/germplasm/GermplasmInstituteVO.java  | 103 ------
 .../data/germplasm/GermplasmMcpdVO.java       | 327 ++++++++++++------
 .../domain/data/germplasm/GermplasmVO.java    | 137 +-------
 .../domain/data/germplasm/InstituteVO.java    |   4 +-
 .../{SimpleVO.java => PuiNameValueVO.java}    |   6 +-
 .../germplasm/SafetyDuplicateInstitue.java    |  15 -
 .../germplasm/SafetyDuplicateInstitueVO.java  |  27 --
 .../urgi/gpds/domain/data/germplasm/Site.java |   2 +-
 .../gpds/domain/data/germplasm/SiteVO.java    |  10 +-
 .../data/phenotype/ObservationUnitVO.java     |   9 -
 .../gpds/domain/data/study/StudyDetailVO.java |   9 -
 .../domain/data/study/StudySummaryVO.java     |   9 -
 .../es/XRefDocumentRepositoryImpl.java        |   2 +-
 .../gpds/service/es/GermplasmService.java     |   1 -
 backend/src/main/resources/application.yml    |   2 +-
 48 files changed, 564 insertions(+), 829 deletions(-)
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java
 rename backend/src/main/java/fr/inra/urgi/gpds/domain/{data/germplasm/CollectingSite.java => brapi/v1/data/BrapiGermplasmCollectingSite.java} (87%)
 rename backend/src/main/java/fr/inra/urgi/gpds/domain/{data/germplasm/DonorInfo.java => brapi/v1/data/BrapiGermplasmDonorInfo.java} (52%)
 rename backend/src/main/java/fr/inra/urgi/gpds/domain/{data/germplasm/BreedingInstitute.java => brapi/v1/data/BrapiGermplasmInstitute.java} (67%)
 rename backend/src/main/java/fr/inra/urgi/gpds/domain/{data/germplasm/GermplasmMcpd.java => brapi/v1/data/BrapiGermplasmMcpd.java} (69%)
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstituteVO.java
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfo.java
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstitute.java
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstituteVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfo.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfoVO.java
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstitute.java
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstituteVO.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingInfo.java
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingSite.java
 rename backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/{ExtendedDonor.java => ExtendedDonorInfo.java} (50%)
 create mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasmMcpd.java
 rename backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/{Institute.java => ExtendedInstitute.java} (76%)
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstitute.java
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstituteVO.java
 rename backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/{SimpleVO.java => PuiNameValueVO.java} (82%)
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitue.java
 delete mode 100644 backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitueVO.java

diff --git a/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java b/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
index db7374fc..900f2e5b 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
@@ -1,10 +1,7 @@
 package fr.inra.urgi.gpds.api.brapi.v1;
 
 import fr.inra.urgi.gpds.api.NotFoundException;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasm;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmAttributeValueList;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiPedigree;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiProgeny;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.*;
 import fr.inra.urgi.gpds.domain.brapi.v1.response.BrapiListResponse;
 import fr.inra.urgi.gpds.domain.brapi.v1.response.BrapiResponse;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmAttributeCriteria;
@@ -12,7 +9,6 @@ import fr.inra.urgi.gpds.domain.criteria.GermplasmGETSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmPOSTSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.base.PaginationCriteriaImpl;
-import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpd;
 import fr.inra.urgi.gpds.domain.response.ApiResponseFactory;
 import fr.inra.urgi.gpds.domain.response.PaginatedList;
 import fr.inra.urgi.gpds.domain.response.Pagination;
@@ -67,9 +63,9 @@ public class GermplasmController {
      */
     @ApiOperation("Get germplasm mcpd by id")
     @GetMapping("/brapi/v1/germplasm/{germplasmDbId}/mcpd")
-    public BrapiResponse<GermplasmMcpd> getGermplasmMcpd(@PathVariable String germplasmDbId) {
+    public BrapiResponse<BrapiGermplasmMcpd> getGermplasmMcpd(@PathVariable String germplasmDbId) {
         LOGGER.debug("germplasmDbId = " + germplasmDbId);
-        GermplasmMcpd germplasm = germplasmService.getMcpdById(germplasmDbId);
+        BrapiGermplasmMcpd germplasm = germplasmService.getMcpdById(germplasmDbId);
         if (germplasm == null) {
             throw new NotFoundException("Germplasm not found for id '" + germplasmDbId + "'");
         }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java
new file mode 100644
index 00000000..23f9e8cc
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java
@@ -0,0 +1,25 @@
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.data.germplasm.ExtendedInstitute;
+import fr.inra.urgi.gpds.domain.data.germplasm.InstituteVO;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface BrapiGermplasmCollectingInfo extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<? extends BrapiGermplasmInstitute> getCollectingInstitutes();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCollectingMissionIdentifier();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCollectingNumber();
+
+    @JsonView(JSONView.BrapiFields.class)
+    BrapiGermplasmCollectingSite getCollectingSite();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSite.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java
similarity index 87%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSite.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java
index 36b5e6da..11f9f78f 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSite.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java
@@ -1,11 +1,11 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import fr.inra.urgi.gpds.domain.JSONView;
 
 import java.io.Serializable;
 
-public interface CollectingSite extends Serializable {
+public interface BrapiGermplasmCollectingSite extends Serializable {
 
     @JsonView(JSONView.BrapiFields.class)
     String getCoordinateUncertainty();
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java
similarity index 52%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfo.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java
index 1a7244b0..dea76ad4 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfo.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java
@@ -1,15 +1,17 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.data.germplasm.ExtendedInstitute;
 
 import java.io.Serializable;
 
-public interface DonorInfo extends Serializable {
+public interface BrapiGermplasmDonorInfo extends Serializable {
 
     @JsonView(JSONView.BrapiFields.class)
     String getDonorAccessionNumber();
 
     @JsonView(JSONView.BrapiFields.class)
-    DonorInstitute getDonorInstitute();
+    BrapiGermplasmInstitute getDonorInstitute();
+
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmInstitute.java
similarity index 67%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstitute.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmInstitute.java
index 8acdde99..57664b56 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstitute.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmInstitute.java
@@ -1,12 +1,15 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import fr.inra.urgi.gpds.domain.JSONView;
 
-public interface BreedingInstitute {
+/**
+ * @author gcornut
+ */
+public interface BrapiGermplasmInstitute {
     @JsonView(JSONView.BrapiFields.class)
-    String getInstituteCode();
+    String getInstituteName();
 
     @JsonView(JSONView.BrapiFields.class)
-    String getInstituteName();
+    String getInstituteCode();
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmMcpd.java
similarity index 69%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpd.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmMcpd.java
index da71da2d..f84a9dc6 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpd.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmMcpd.java
@@ -1,53 +1,84 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.data.germplasm.DonorInfoVO;
+import fr.inra.urgi.gpds.domain.data.germplasm.InstituteVO;
 
-import java.io.Serializable;
 import java.util.List;
 
-public interface GermplasmMcpd extends Serializable {
+/**
+ * @author gcornut
+ */
+public interface BrapiGermplasmMcpd {
+
     @JsonView(JSONView.BrapiFields.class)
     String getGermplasmDbId();
+
     @JsonView(JSONView.BrapiFields.class)
-    List<String> getAccessionNames();
+    String getGermplasmPUI();
+
     @JsonView(JSONView.BrapiFields.class)
     String getAccessionNumber();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getAcquisitionDate();
-    @JsonView(JSONView.BrapiFields.class)
-    String getAcquisitionSourceCode();
+    List<String> getAccessionNames();
+
     @JsonView(JSONView.BrapiFields.class)
     List<String> getAlternateIDs();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getAncestralData();
+    String getCropName();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getBiologicalStatusOfAccessionCode();
+    String getGenus();
+
     @JsonView(JSONView.BrapiFields.class)
-    CollectingInfo getCollectingInfo();
+    String getSpecies();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getGenus();
+    String getSpeciesAuthority();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getGermplasmPUI();
+    String getSubtaxon();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getInstituteCode();
+    String getSubtaxonAuthority();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getAncestralData();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getBiologicalStatusOfAccessionCode();
+
     @JsonView(JSONView.BrapiFields.class)
     String getMlsStatus();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getRemarks();
+    String getCountryOfOriginCode();
+
     @JsonView(JSONView.BrapiFields.class)
-    List<SafetyDuplicateInstitue> getSafetyDuplicateInstitues();
+    String getInstituteCode();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getSpecies();
+    BrapiGermplasmCollectingInfo getCollectingInfo();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getSpeciesAuthority();
+    String getAcquisitionDate();
 
-    List<BreedingInstitute> getBreedingInstitutes();
+    @JsonView(JSONView.BrapiFields.class)
+    String getAcquisitionSourceCode();
 
     @JsonView(JSONView.BrapiFields.class)
-    List<String> getStorageTypeCodes();
+    List<DonorInfoVO> getDonorInfo();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getSubtaxon();
+    List<? extends BrapiGermplasmInstitute> getBreedingInstitutes();
+
     @JsonView(JSONView.BrapiFields.class)
-    String getSubtaxonAuthority();
+    List<? extends BrapiGermplasmInstitute> getSafetyDuplicateInstitutes();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<String> getStorageTypeCodes();
+
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/GnpISInternal.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/GnpISInternal.java
index 1bdc77a9..e31e9d2b 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/GnpISInternal.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/GnpISInternal.java
@@ -13,12 +13,6 @@ import java.util.List;
  */
 public interface GnpISInternal extends Serializable {
 
-    /**
-     * List of species group the VO belongs to
-     */
-    @JsonView(JSONView.Internal.class)
-    List<Long> getSpeciesGroup();
-
     /**
      * Restricted group DB identifier from which the VO belong
      */
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/LocationVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/LocationVO.java
index 010ebf16..53711063 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/LocationVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/LocationVO.java
@@ -212,15 +212,6 @@ public class LocationVO implements GnpISInternal, BrapiLocation, HasURI, HasURL,
         this.additionalInfo = additionalInfo;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/ProgramVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/ProgramVO.java
index d96141e5..9b03d8e2 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/ProgramVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/ProgramVO.java
@@ -123,15 +123,6 @@ public class ProgramVO implements GnpISInternal, BrapiProgram, HasURI, HasURL, I
         this.programDbId = programDbId;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/TrialVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/TrialVO.java
index b2b39d4c..49d11890 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/TrialVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/TrialVO.java
@@ -198,15 +198,6 @@ public class TrialVO implements GnpISInternal, BrapiTrial, HasURI, HasURL, Inclu
         this.additionalInfo = additionalInfo;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstituteVO.java
deleted file mode 100644
index de8804c0..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/BreedingInstituteVO.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-public class BreedingInstituteVO implements BreedingInstitute {
-
-    private String instituteCode;
-    private String instituteName;
-
-    @Override
-    public String getInstituteCode() {
-        return instituteCode;
-    }
-
-    @Override
-    public String getInstituteName() {
-        return instituteName;
-    }
-
-
-    public void setInstituteCode(String instituteCode) {
-        this.instituteCode = instituteCode;
-    }
-
-    public void setInstituteName(String instituteName) {
-        this.instituteName = instituteName;
-    }
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPopVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPopVO.java
index 9b87927d..f9b79f32 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPopVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPopVO.java
@@ -12,7 +12,7 @@ public class CollPopVO implements Serializable, CollPop {
     private Long id;
     private String name;
     private String type;
-    private SimpleVO germplasmRef;
+    private PuiNameValueVO germplasmRef;
     private Integer germplasmCount;
 
     @Override
@@ -43,11 +43,11 @@ public class CollPopVO implements Serializable, CollPop {
     }
 
     @Override
-    public SimpleVO getGermplasmRef() {
+    public PuiNameValueVO getGermplasmRef() {
         return germplasmRef;
     }
 
-    public void setGermplasmRef(SimpleVO germplasmRef) {
+    public void setGermplasmRef(PuiNameValueVO germplasmRef) {
         this.germplasmRef = germplasmRef;
     }
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfo.java
deleted file mode 100644
index e6457d4c..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfo.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import com.fasterxml.jackson.annotation.JsonView;
-import fr.inra.urgi.gpds.domain.JSONView;
-
-import java.io.Serializable;
-import java.util.List;
-
-public interface CollectingInfo extends Serializable {
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getCollectingDate();
-
-    @JsonView(JSONView.BrapiFields.class)
-    List<CollectingInstitute> getCollectingInstitutes();
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getCollectingMissionIdentifier();
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getCollectingNumber();
-
-    @JsonView(JSONView.BrapiFields.class)
-    CollectingSite getCollectingSite();
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getCommonCropName();
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getCountryOfOrigin();
-
-    @JsonView(JSONView.BrapiFields.class)
-    DonorInfo getDonorInfo();
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java
index 9e85d473..20a4cab2 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java
@@ -1,104 +1,75 @@
 package fr.inra.urgi.gpds.domain.data.germplasm;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmCollectingInfo;
 
 import java.io.Serializable;
 import java.util.List;
 
-public class CollectingInfoVO implements CollectingInfo, Serializable {
+public class CollectingInfoVO implements BrapiGermplasmCollectingInfo, ExtendedCollectingInfo, Serializable {
 
-
-    private String collectingDate;
-
-    @JsonDeserialize(contentAs = CollectingInstituteVO.class)
-    private List<CollectingInstitute> collectingInstitutes;
+    @JsonDeserialize(contentAs = InstituteVO.class)
+    private List<InstituteVO> collectingInstitutes;
 
     private String collectingMissionIdentifier;
     private String collectingNumber;
+    private String materialType;
+    private String collectors;
 
     @JsonDeserialize(as = CollectingSiteVO.class)
-    private CollectingSite collectingSite;
-
-    private String commonCropName;
-    private String countryOfOrigin;
-
-
-    @Override
-    public DonorInfo getDonorInfo() {
-        return donorInfo;
-    }
-
-    @JsonDeserialize(as = DonorInfoVO.class)
-    private DonorInfo donorInfo;
-
+    private CollectingSiteVO collectingSite;
 
     @Override
-    public String getCollectingDate() {
-        return collectingDate;
-    }
-
-
-    @Override
-    public List<CollectingInstitute> getCollectingInstitutes() {
+    public List<InstituteVO> getCollectingInstitutes() {
         return collectingInstitutes;
     }
 
+    public void setCollectingInstitutes(List<InstituteVO> collectingInstitutes) {
+        this.collectingInstitutes = collectingInstitutes;
+    }
 
     @Override
     public String getCollectingMissionIdentifier() {
         return collectingMissionIdentifier;
     }
 
-    @Override
-    public String getCollectingNumber() {
-        return collectingNumber;
+    public void setCollectingMissionIdentifier(String collectingMissionIdentifier) {
+        this.collectingMissionIdentifier = collectingMissionIdentifier;
     }
 
     @Override
-    public String getCommonCropName() {
-        return commonCropName;
+    public String getCollectingNumber() {
+        return collectingNumber;
     }
 
-    @Override
-    public String getCountryOfOrigin() {
-        return countryOfOrigin;
+    public void setCollectingNumber(String collectingNumber) {
+        this.collectingNumber = collectingNumber;
     }
 
-
-    @Override
-    public CollectingSite getCollectingSite() {
-        return collectingSite;
+    public String getMaterialType() {
+        return materialType;
     }
 
-    public void setCollectingDate(String collectingDate) {
-        this.collectingDate = collectingDate;
+    public void setMaterialType(String materialType) {
+        this.materialType = materialType;
     }
 
-    public void setCollectingInstitutes(List<CollectingInstitute> collectingInstitute) {
-        this.collectingInstitutes = collectingInstitute;
+    public String getCollectors() {
+        return collectors;
     }
 
-    public void setCollectingMissionIdentifier(String collectingMissionIdentifier) {
-        this.collectingMissionIdentifier = collectingMissionIdentifier;
+    public void setCollectors(String collectors) {
+        this.collectors = collectors;
     }
 
-    public void setCollectingNumber(String collectingNumber) {
-        this.collectingNumber = collectingNumber;
+    @Override
+    public CollectingSiteVO getCollectingSite() {
+        return collectingSite;
     }
 
-    public void setCollectingSite(CollectingSite collectingSite) {
+    public void setCollectingSite(CollectingSiteVO collectingSite) {
         this.collectingSite = collectingSite;
     }
 
-    public void setCommonCropName(String commonCropName) {
-        this.commonCropName = commonCropName;
-    }
-
-    public void setCountryOfOrigin(String countryOfOrigin) {
-        this.countryOfOrigin = countryOfOrigin;
-    }
 
-    public void setDonorInfo(DonorInfo donorInfo) {
-        this.donorInfo = donorInfo;
-    }
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstitute.java
deleted file mode 100644
index 380d4010..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstitute.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import com.fasterxml.jackson.annotation.JsonView;
-import fr.inra.urgi.gpds.domain.JSONView;
-
-import java.io.Serializable;
-
-public interface CollectingInstitute extends Serializable {
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getInstituteAddress();
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getInstituteCode();
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getInstituteName();
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstituteVO.java
deleted file mode 100644
index 614af35e..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInstituteVO.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import java.io.Serializable;
-
-public class CollectingInstituteVO implements CollectingInstitute, Serializable {
-
-private String instituteAddress;
-private String instituteCode;
-private String instituteName;
-
-
-    @Override
-    public String getInstituteAddress() {
-        return instituteAddress;
-    }
-
-    @Override
-    public String getInstituteCode() {
-        return instituteCode;
-    }
-
-    @Override
-    public String getInstituteName() {
-        return instituteName;
-    }
-}
-
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java
index 7b6db0c2..bc8b5248 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java
@@ -1,9 +1,12 @@
 package fr.inra.urgi.gpds.domain.data.germplasm;
 
-import java.io.Serializable;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmCollectingSite;
 
-public class CollectingSiteVO implements CollectingSite {
+public class CollectingSiteVO implements BrapiGermplasmCollectingSite, ExtendedCollectingSite {
 
+    private String locationDbId;
+    private String siteName;
+    private String siteType;
     private String coordinateUncertainty;
     private String elevation;
     private String georeferencingMethod;
@@ -14,8 +17,31 @@ public class CollectingSiteVO implements CollectingSite {
     private String longitudeDegrees;
     private String spatialReferenceSystem;
 
+    @Override
+    public String getLocationDbId() {
+        return locationDbId;
+    }
+
+    public void setLocationDbId(String locationDbId) {
+        this.locationDbId = locationDbId;
+    }
 
+    public String getSiteName() {
+        return siteName;
+    }
 
+    public void setSiteName(String siteName) {
+        this.siteName = siteName;
+    }
+
+
+    public String getSiteType() {
+        return siteType;
+    }
+
+    public void setSiteType(String siteType) {
+        this.siteType = siteType;
+    }
 
     @Override
     public String getCoordinateUncertainty() {
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfo.java
new file mode 100644
index 00000000..6fdee085
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfo.java
@@ -0,0 +1,18 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+
+public interface DistributorInfo extends Serializable {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getAccessionNumber();
+
+    @JsonView(JSONView.GnpISFields.class)
+    ExtendedInstitute getInstitute();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getDistributionStatus();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfoVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfoVO.java
new file mode 100644
index 00000000..5dabd5e0
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfoVO.java
@@ -0,0 +1,35 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+public class DistributorInfoVO implements DistributorInfo {
+
+    private String accessionNumber;
+    private InstituteVO institute;
+    private String distributionStatus;
+
+    public String getAccessionNumber() {
+        return accessionNumber;
+    }
+
+    public void setAccessionNumber(String accessionNumber) {
+        this.accessionNumber = accessionNumber;
+    }
+
+    public InstituteVO getInstitute() {
+        return institute;
+    }
+
+    public void setInstitute(InstituteVO institute) {
+        this.institute = institute;
+    }
+
+    public String getDistributionStatus() {
+        return distributionStatus;
+    }
+
+    public void setDistributionStatus(String distributionStatus) {
+        this.distributionStatus = distributionStatus;
+    }
+
+
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java
index 379f3d4c..0254a714 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java
@@ -1,14 +1,12 @@
 package fr.inra.urgi.gpds.domain.data.germplasm;
 
-import java.io.Serializable;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmDonorInfo;
 
-public class DonorInfoVO implements DonorInfo {
+public class DonorInfoVO implements BrapiGermplasmDonorInfo, ExtendedDonorInfo {
 
     private String donorAccessionNumber;
-
-
-    private DonorInstituteVO donorInfo;
-
+    private InstituteVO donorInstitute;
+    private String donationDate;
 
     @Override
     public String getDonorAccessionNumber() {
@@ -16,15 +14,23 @@ public class DonorInfoVO implements DonorInfo {
     }
 
     @Override
-    public DonorInstituteVO getDonorInstitute() {
-        return donorInfo;
+    public InstituteVO getDonorInstitute() {
+        return donorInstitute;
     }
 
     public void setDonorAccessionNumber(String donorAccessionNumber) {
         this.donorAccessionNumber = donorAccessionNumber;
     }
 
-    public void setDonorInfo(DonorInstituteVO donorInfo) {
-        this.donorInfo = donorInfo;
+    public void setDonorInstitute(InstituteVO donorInstitute) {
+        this.donorInstitute = donorInstitute;
+    }
+
+    public String getDonationDate() {
+        return donationDate;
+    }
+
+    public void setDonationDate(String donationDate) {
+        this.donationDate = donationDate;
     }
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstitute.java
deleted file mode 100644
index 3eedeb78..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstitute.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import com.fasterxml.jackson.annotation.JsonView;
-import fr.inra.urgi.gpds.domain.JSONView;
-
-import java.io.Serializable;
-
-public interface DonorInstitute extends Serializable {
-    @JsonView(JSONView.BrapiFields.class)
-    String getInstituteCode();
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getInstituteName();
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstituteVO.java
deleted file mode 100644
index aea19577..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInstituteVO.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import java.io.Serializable;
-
-public class DonorInstituteVO implements DonorInstitute {
-
-
-    private String instituteCode;
-    private String instituteName;
-
-
-    @Override
-    public String getInstituteCode() {
-        return instituteCode;
-    }
-
-    @Override
-    public String getInstituteName() {
-        return instituteName;
-    }
-
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorVO.java
index 8cd5d7cd..9f09793d 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorVO.java
@@ -4,15 +4,13 @@ import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmDonor;
 
 import java.io.Serializable;
 
-public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor {
+public class DonorVO implements Serializable, BrapiGermplasmDonor {
 
     private static final long serialVersionUID = 7976964107440923573L;
 
     private String donorGermplasmPUI;
     private String donorAccessionNumber;
     private String donorInstituteCode;
-    private Integer donationDate;
-    private InstituteVO donorInstitute;
 
     @Override
     public String getDonorGermplasmPUI() {
@@ -41,22 +39,4 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor
         this.donorInstituteCode = donorInstituteCode;
     }
 
-    @Override
-    public InstituteVO getDonorInstitute() {
-        return donorInstitute;
-    }
-
-    public void setDonorInstitute(InstituteVO donorInstitute) {
-        this.donorInstitute = donorInstitute;
-    }
-
-    @Override
-    public Integer getDonationDate() {
-        return donationDate;
-    }
-
-    public void setDonationDate(Integer donationDate) {
-        this.donationDate = donationDate;
-    }
-
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingInfo.java
new file mode 100644
index 00000000..57240ac2
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingInfo.java
@@ -0,0 +1,18 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmCollectingInfo;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface ExtendedCollectingInfo extends Serializable, BrapiGermplasmCollectingInfo {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getMaterialType();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getCollectors();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingSite.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingSite.java
new file mode 100644
index 00000000..affd7472
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingSite.java
@@ -0,0 +1,19 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmCollectingSite;
+
+import java.io.Serializable;
+
+public interface ExtendedCollectingSite extends Serializable, BrapiGermplasmCollectingSite {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getLocationDbId();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getSiteName();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getSiteType() ;
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonor.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonorInfo.java
similarity index 50%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonor.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonorInfo.java
index a18dd7e4..968070d6 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonor.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonorInfo.java
@@ -2,18 +2,13 @@ package fr.inra.urgi.gpds.domain.data.germplasm;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import fr.inra.urgi.gpds.domain.JSONView;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmDonor;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmDonorInfo;
 
-/**
- * Extends the BrAPI germplasm with GnpIS fields
- *
- * @author gcornut
- */
-public interface ExtendedDonor extends BrapiGermplasmDonor {
+import java.io.Serializable;
 
-    @JsonView(JSONView.GnpISFields.class)
-    Institute getDonorInstitute();
+public interface ExtendedDonorInfo extends Serializable, BrapiGermplasmDonorInfo {
 
     @JsonView(JSONView.GnpISFields.class)
-    Integer getDonationDate();
+    String getDonationDate();
+
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasm.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasm.java
index 254e0c33..a0874d77 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasm.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasm.java
@@ -23,51 +23,18 @@ public interface ExtendedGermplasm extends BrapiGermplasm, GnpISInternal {
     @JsonView(JSONView.GnpISFields.class)
     String getTaxonComment();
 
-    @JsonView(JSONView.GnpISFields.class)
-    String getGeneticNature();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getComment();
-
     @JsonView(JSONView.GnpISFields.class)
     Photo getPhoto();
 
-    @JsonView(JSONView.GnpISFields.class)
-    Institute getHoldingInstitute();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Institute getHoldingGenbank();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getPresenceStatus();
-
     @JsonView(JSONView.GnpISFields.class)
     Genealogy getGenealogy();
 
     @JsonView(JSONView.GnpISFields.class)
     List<? extends Genealogy> getChildren();
 
-    @JsonView(JSONView.GnpISFields.class)
-    List<? extends PuiNameValue> getDescriptors();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Site getOriginSite();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Site getCollectingSite();
-
     @JsonView(JSONView.GnpISFields.class)
     List<? extends Site> getEvaluationSites();
 
-    @JsonView(JSONView.GnpISFields.class)
-    GermplasmInstitute getCollector();
-
-    @JsonView(JSONView.GnpISFields.class)
-    GermplasmInstitute getBreeder();
-
-    @JsonView(JSONView.GnpISFields.class)
-    List<? extends GermplasmInstitute> getDistributors();
-
     @JsonView(JSONView.GnpISFields.class)
     List<? extends CollPop> getPanel();
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasmMcpd.java
new file mode 100644
index 00000000..b5d3e112
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasmMcpd.java
@@ -0,0 +1,54 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasm;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmMcpd;
+import fr.inra.urgi.gpds.domain.data.GnpISInternal;
+
+import java.util.List;
+
+/**
+ * Extends the BrAPI germplasm with GnpIS fields
+ *
+ * @author gcornut
+ */
+public interface ExtendedGermplasmMcpd extends BrapiGermplasmMcpd, GnpISInternal {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getGeneticNature();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getPresenceStatus();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getRemarks();
+
+    @JsonView(JSONView.GnpISFields.class)
+    Site getOriginSite();
+
+    @JsonView(JSONView.GnpISFields.class)
+    ExtendedInstitute getHoldingInstitute();
+
+    @JsonView(JSONView.GnpISFields.class)
+    ExtendedInstitute getHoldingGenbank();
+
+    @JsonView(JSONView.GnpISFields.class)
+    List<? extends DistributorInfo> getDistributorInfo();
+
+    @JsonView(JSONView.GnpISFields.class)
+    List<? extends ExtendedInstitute> getBreedingInstitutes();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getBreederAccessionNumber();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getBreedingCreationYear();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getCatalogRegistrationYear();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getCatalogDeregistrationYear();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Institute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedInstitute.java
similarity index 76%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Institute.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedInstitute.java
index 0dccd21f..cc2a7a13 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Institute.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedInstitute.java
@@ -2,17 +2,12 @@ package fr.inra.urgi.gpds.domain.data.germplasm;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmInstitute;
 
 /**
  * @author gcornut
  */
-public interface Institute {
-    @JsonView(JSONView.GnpISFields.class)
-    String getInstituteName();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getInstituteCode();
-
+public interface ExtendedInstitute extends BrapiGermplasmInstitute {
     @JsonView(JSONView.GnpISFields.class)
     String getAcronym();
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Genealogy.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Genealogy.java
index 34c11b70..6a9d5ec8 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Genealogy.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Genealogy.java
@@ -37,5 +37,5 @@ public interface Genealogy {
     String getSecondParentType();
 
     @JsonView(JSONView.GnpISFields.class)
-    List<SimpleVO> getSibblings();
+    List<PuiNameValueVO> getSibblings();
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GenealogyVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GenealogyVO.java
index 492157c7..cbcf4f4e 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GenealogyVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GenealogyVO.java
@@ -21,7 +21,7 @@ public class GenealogyVO implements java.io.Serializable, Genealogy {
     private String secondParentPUI;
     private String secondParentType;
 
-    private List<SimpleVO> sibblings; // puid + name
+    private List<PuiNameValueVO> sibblings; // puid + name
 
     @Override
     public String getCrossingPlan() {
@@ -105,11 +105,11 @@ public class GenealogyVO implements java.io.Serializable, Genealogy {
     }
 
     @Override
-    public List<SimpleVO> getSibblings() {
+    public List<PuiNameValueVO> getSibblings() {
         return sibblings;
     }
 
-    public void setSibblings(List<SimpleVO> sibblings) {
+    public void setSibblings(List<PuiNameValueVO> sibblings) {
         this.sibblings = sibblings;
     }
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmAttributeValueListVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmAttributeValueListVO.java
index a4d153cb..2c8f4da1 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmAttributeValueListVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmAttributeValueListVO.java
@@ -43,15 +43,6 @@ public class GermplasmAttributeValueListVO implements BrapiGermplasmAttributeVal
         this.data = data;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstitute.java
deleted file mode 100644
index a90b324a..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstitute.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import com.fasterxml.jackson.annotation.JsonView;
-import fr.inra.urgi.gpds.domain.JSONView;
-
-/**
- * @author gcornut
- */
-public interface GermplasmInstitute {
-    @JsonView(JSONView.GnpISFields.class)
-    Institute getInstitute();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getGermplasmPUI();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getAccessionNumber();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Integer getAccessionCreationDate();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getMaterialType();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getCollectors();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Integer getRegistrationYear();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Integer getDeregistrationYear();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getDistributionStatus();
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstituteVO.java
deleted file mode 100644
index e8a9d5f8..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstituteVO.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import java.io.Serializable;
-
-/**
- * @author C. Michotey
- */
-public class GermplasmInstituteVO implements Serializable, GermplasmInstitute {
-
-    private static final long serialVersionUID = 7976964107440923573L;
-
-    private InstituteVO institute;
-    private String germplasmPUI;
-    private String accessionNumber;
-    private Integer accessionCreationDate;
-    private String materialType;
-    private String collectors;
-    private Integer registrationYear;
-    private Integer deregistrationYear;
-    private String distributionStatus;
-
-    @Override
-    public InstituteVO getInstitute() {
-        return institute;
-    }
-
-    public void setInstitute(InstituteVO institute) {
-        this.institute = institute;
-    }
-
-    @Override
-    public String getGermplasmPUI() {
-        return germplasmPUI;
-    }
-
-    public void setGermplasmPUI(String germplasmPUI) {
-        this.germplasmPUI = germplasmPUI;
-    }
-
-    @Override
-    public String getAccessionNumber() {
-        return accessionNumber;
-    }
-
-    public void setAccessionNumber(String accessionNumber) {
-        this.accessionNumber = accessionNumber;
-    }
-
-    @Override
-    public Integer getAccessionCreationDate() {
-        return accessionCreationDate;
-    }
-
-    public void setAccessionCreationDate(Integer accessionCreationDate) {
-        this.accessionCreationDate = accessionCreationDate;
-    }
-
-    @Override
-    public String getMaterialType() {
-        return materialType;
-    }
-
-    public void setMaterialType(String materialType) {
-        this.materialType = materialType;
-    }
-
-    @Override
-    public String getCollectors() {
-        return collectors;
-    }
-
-    public void setCollectors(String collectors) {
-        this.collectors = collectors;
-    }
-
-    @Override
-    public Integer getRegistrationYear() {
-        return registrationYear;
-    }
-
-    public void setRegistrationYear(Integer registrationYear) {
-        this.registrationYear = registrationYear;
-    }
-
-    @Override
-    public Integer getDeregistrationYear() {
-        return deregistrationYear;
-    }
-
-    public void setDeregistrationYear(Integer deregistrationYear) {
-        this.deregistrationYear = deregistrationYear;
-    }
-
-    @Override
-    public String getDistributionStatus() {
-        return distributionStatus;
-    }
-
-    public void setDistributionStatus(String distributionStatus) {
-        this.distributionStatus = distributionStatus;
-    }
-
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
index dfb95bfc..d8e2e436 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
@@ -1,8 +1,7 @@
 package fr.inra.urgi.gpds.domain.data.germplasm;
 
-import com.fasterxml.jackson.annotation.JsonSetter;
-import com.fasterxml.jackson.annotation.Nulls;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmMcpd;
 import fr.inra.urgi.gpds.elasticsearch.document.annotation.Document;
 import fr.inra.urgi.gpds.elasticsearch.document.annotation.Id;
 
@@ -10,227 +9,333 @@ import java.io.Serializable;
 import java.util.List;
 
 @Document(type = "germplasm-mcpd")
-public class GermplasmMcpdVO implements GermplasmMcpd, Serializable {
+public class GermplasmMcpdVO implements Serializable, BrapiGermplasmMcpd, ExtendedGermplasmMcpd {
+
+    private Long groupId;
 
     @Id
     private String germplasmDbId;
-    private List<String> accessionNames;
+    private String germplasmPUI;
     private String accessionNumber;
-    private String acquisitionDate;
+    private List<String> alternateIDs;
+    private List<String> accessionNames;
 
-    @JsonSetter(nulls = Nulls.AS_EMPTY)
-    private String acquisitionSourceCode;
+    private String cropName;
+    private String genus;
+    private String species;
+    private String speciesAuthority;
+    private String subtaxon;
+    private String subtaxonAuthority;
 
-    private List<String> alternateIDs;
     private String ancestralData;
     private String biologicalStatusOfAccessionCode;
+    private String mlsStatus;
+    private String geneticNature;
+    private String presenceStatus;
+    private String remarks;
 
-    @JsonDeserialize(contentAs = BreedingInstituteVO.class)
-    private List<BreedingInstitute> breedingInstitutes;
+    private String countryOfOriginCode;
+    private Site originSite;
+
+    private String instituteCode;
+    private InstituteVO holdingInstitute;
+    private InstituteVO holdingGenbank;
 
     private CollectingInfoVO collectingInfo;
+    private String acquisitionDate;
+    private String acquisitionSourceCode;
 
-    private String genus;
-    private String germplasmPUI;
-    private String instituteCode;
-    private String mlsStatus;
-    private String remarks;
-    @JsonDeserialize(contentAs = SafetyDuplicateInstitueVO.class)
-    private List<SafetyDuplicateInstitue> safetyDuplicateInstitues;
-    private String species;
-    private String speciesAuthority;
+    private List<DonorInfoVO> donorInfo;
+    private List<DistributorInfoVO> distributorInfo;
+
+    @JsonDeserialize(contentAs = InstituteVO.class)
+    private List<InstituteVO> breedingInstitutes;
+    private String breederAccessionNumber;
+    private String breedingCreationYear;
+    private String catalogRegistrationYear;
+    private String catalogDeregistrationYear;
+
+    @JsonDeserialize(contentAs = InstituteVO.class)
+    private List<InstituteVO> safetyDuplicateInstitutes;
     private List<String> storageTypeCodes;
-    private String subtaxon;
-    private String subtaxonAuthority;
 
+    public Long getGroupId() {
+        return groupId;
+    }
 
-    @Override
-    public CollectingInfo getCollectingInfo() {
-        return collectingInfo;
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
     }
 
-    @Override
     public String getGermplasmDbId() {
         return germplasmDbId;
     }
 
-    @Override
-    public List<String> getAccessionNames() {
-        return accessionNames;
+    public void setGermplasmDbId(String germplasmDbId) {
+        this.germplasmDbId = germplasmDbId;
     }
 
-    @Override
-    public String getAccessionNumber() {
-        return accessionNumber;
+    public String getGermplasmPUI() {
+        return germplasmPUI;
     }
 
-    @Override
-    public String getAcquisitionDate() {
-        return acquisitionDate;
+    public void setGermplasmPUI(String germplasmPUI) {
+        this.germplasmPUI = germplasmPUI;
     }
 
-    @Override
-    public String getAcquisitionSourceCode() {
-        return acquisitionSourceCode;
+    public String getAccessionNumber() {
+        return accessionNumber;
+    }
+
+    public void setAccessionNumber(String accessionNumber) {
+        this.accessionNumber = accessionNumber;
     }
 
-    @Override
     public List<String> getAlternateIDs() {
         return alternateIDs;
     }
 
-    @Override
-    public String getAncestralData() {
-        return ancestralData;
+    public void setAlternateIDs(List<String> alternateIDs) {
+        this.alternateIDs = alternateIDs;
     }
 
-    @Override
-    public String getBiologicalStatusOfAccessionCode() {
-        return biologicalStatusOfAccessionCode;
+    public List<String> getAccessionNames() {
+        return accessionNames;
+    }
+
+    public void setAccessionNames(List<String> accessionNames) {
+        this.accessionNames = accessionNames;
+    }
+
+    public String getCropName() {
+        return cropName;
     }
 
+    public void setCropName(String cropName) {
+        this.cropName = cropName;
+    }
 
-    @Override
     public String getGenus() {
         return genus;
     }
 
-    @Override
-    public String getGermplasmPUI() {
-        return germplasmPUI;
+    public void setGenus(String genus) {
+        this.genus = genus;
     }
 
-    @Override
-    public String getInstituteCode() {
-        return instituteCode;
+    public String getSpecies() {
+        return species;
+    }
+
+    public void setSpecies(String species) {
+        this.species = species;
+    }
+
+    public String getSpeciesAuthority() {
+        return speciesAuthority;
+    }
+
+    public void setSpeciesAuthority(String speciesAuthority) {
+        this.speciesAuthority = speciesAuthority;
+    }
+
+    public String getSubtaxon() {
+        return subtaxon;
+    }
+
+    public void setSubtaxon(String subtaxon) {
+        this.subtaxon = subtaxon;
+    }
+
+    public String getSubtaxonAuthority() {
+        return subtaxonAuthority;
+    }
+
+    public void setSubtaxonAuthority(String subtaxonAuthority) {
+        this.subtaxonAuthority = subtaxonAuthority;
+    }
+
+    public String getAncestralData() {
+        return ancestralData;
+    }
+
+    public void setAncestralData(String ancestralData) {
+        this.ancestralData = ancestralData;
+    }
+
+    public String getBiologicalStatusOfAccessionCode() {
+        return biologicalStatusOfAccessionCode;
+    }
+
+    public void setBiologicalStatusOfAccessionCode(String biologicalStatusOfAccessionCode) {
+        this.biologicalStatusOfAccessionCode = biologicalStatusOfAccessionCode;
     }
 
-    @Override
     public String getMlsStatus() {
         return mlsStatus;
     }
 
-    @Override
+    public void setMlsStatus(String mlsStatus) {
+        this.mlsStatus = mlsStatus;
+    }
+
+    public String getGeneticNature() {
+        return geneticNature;
+    }
+
+    public void setGeneticNature(String geneticNature) {
+        this.geneticNature = geneticNature;
+    }
+
+    public String getPresenceStatus() {
+        return presenceStatus;
+    }
+
+    public void setPresenceStatus(String presenceStatus) {
+        this.presenceStatus = presenceStatus;
+    }
+
     public String getRemarks() {
         return remarks;
     }
 
-    @Override
-    public List<SafetyDuplicateInstitue> getSafetyDuplicateInstitues() {
-        return safetyDuplicateInstitues;
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
     }
 
-    @Override
-    public String getSpecies() {
-        return species;
+    public String getCountryOfOriginCode() {
+        return countryOfOriginCode;
     }
 
-    @Override
-    public String getSpeciesAuthority() {
-        return speciesAuthority;
+    public void setCountryOfOriginCode(String countryOfOriginCode) {
+        this.countryOfOriginCode = countryOfOriginCode;
     }
 
-    @Override
-    public List<BreedingInstitute> getBreedingInstitutes() {
-        return breedingInstitutes;
+    public Site getOriginSite() {
+        return originSite;
     }
 
-    @Override
-    public List<String> getStorageTypeCodes() {
-        return storageTypeCodes;
+    public void setOriginSite(Site originSite) {
+        this.originSite = originSite;
     }
 
-    @Override
-    public String getSubtaxon() {
-        return subtaxon;
+    public String getInstituteCode() {
+        return instituteCode;
     }
 
-    @Override
-    public String getSubtaxonAuthority() {
-        return subtaxonAuthority;
+    public void setInstituteCode(String instituteCode) {
+        this.instituteCode = instituteCode;
     }
 
-    public void setGermplasmDbId(String germplasmDbId) {
-        this.germplasmDbId = germplasmDbId;
+    public InstituteVO getHoldingInstitute() {
+        return holdingInstitute;
     }
 
-    public void setAccessionNames(List<String> accessionNames) {
-        this.accessionNames = accessionNames;
+    public void setHoldingInstitute(InstituteVO holdingInstitute) {
+        this.holdingInstitute = holdingInstitute;
     }
 
-    public void setAccessionNumber(String accessionNumber) {
-        this.accessionNumber = accessionNumber;
+    public InstituteVO getHoldingGenbank() {
+        return holdingGenbank;
+    }
+
+    public void setHoldingGenbank(InstituteVO holdingGenbank) {
+        this.holdingGenbank = holdingGenbank;
+    }
+
+    public CollectingInfoVO getCollectingInfo() {
+        return collectingInfo;
+    }
+
+    public void setCollectingInfo(CollectingInfoVO collectingInfo) {
+        this.collectingInfo = collectingInfo;
+    }
+
+    public String getAcquisitionDate() {
+        return acquisitionDate;
     }
 
     public void setAcquisitionDate(String acquisitionDate) {
         this.acquisitionDate = acquisitionDate;
     }
 
+    public String getAcquisitionSourceCode() {
+        return acquisitionSourceCode;
+    }
+
     public void setAcquisitionSourceCode(String acquisitionSourceCode) {
         this.acquisitionSourceCode = acquisitionSourceCode;
     }
 
-    public void setAlternateIDs(List<String> alternateIDs) {
-        this.alternateIDs = alternateIDs;
+    public List<DonorInfoVO> getDonorInfo() {
+        return donorInfo;
     }
 
-    public void setAncestralData(String ancestralData) {
-        this.ancestralData = ancestralData;
+    public void setDonorInfo(List<DonorInfoVO> donorInfo) {
+        this.donorInfo = donorInfo;
     }
 
-    public void setBiologicalStatusOfAccessionCode(String biologicalStatusOfAccessionCode) {
-        this.biologicalStatusOfAccessionCode = biologicalStatusOfAccessionCode;
+    public List<DistributorInfoVO> getDistributorInfo() {
+        return distributorInfo;
+    }
+
+    public void setDistributorInfo(List<DistributorInfoVO> distributorInfo) {
+        this.distributorInfo = distributorInfo;
+    }
+
+    public List<InstituteVO> getBreedingInstitutes() {
+        return breedingInstitutes;
     }
 
-    public void setBreedingInstitutes(List<BreedingInstitute> breedingInstitutes) {
+    public void setBreedingInstitutes(List<InstituteVO> breedingInstitutes) {
         this.breedingInstitutes = breedingInstitutes;
     }
 
-    public void setCollectingInfo(CollectingInfoVO collectingInfo) {
-        this.collectingInfo = collectingInfo;
+    public String getBreederAccessionNumber() {
+        return breederAccessionNumber;
     }
 
-    public void setGenus(String genus) {
-        this.genus = genus;
+    public void setBreederAccessionNumber(String breederAccessionNumber) {
+        this.breederAccessionNumber = breederAccessionNumber;
     }
 
-    public void setGermplasmPUI(String germplasmPUI) {
-        this.germplasmPUI = germplasmPUI;
+    public String getBreedingCreationYear() {
+        return breedingCreationYear;
     }
 
-    public void setInstituteCode(String instituteCode) {
-        this.instituteCode = instituteCode;
+    public void setBreedingCreationYear(String breedingCreationYear) {
+        this.breedingCreationYear = breedingCreationYear;
     }
 
-    public void setMlsStatus(String mlsStatus) {
-        this.mlsStatus = mlsStatus;
+    public String getCatalogRegistrationYear() {
+        return catalogRegistrationYear;
     }
 
-    public void setRemarks(String remarks) {
-        this.remarks = remarks;
+    public void setCatalogRegistrationYear(String catalogRegistrationYear) {
+        this.catalogRegistrationYear = catalogRegistrationYear;
     }
 
-    public void setSafetyDuplicateInstitues(List<SafetyDuplicateInstitue> safetyDuplicateInstitues) {
-        this.safetyDuplicateInstitues = safetyDuplicateInstitues;
+    public String getCatalogDeregistrationYear() {
+        return catalogDeregistrationYear;
     }
 
-    public void setSpecies(String species) {
-        this.species = species;
+    public void setCatalogDeregistrationYear(String catalogDeregistrationYear) {
+        this.catalogDeregistrationYear = catalogDeregistrationYear;
     }
 
-    public void setSpeciesAuthority(String speciesAuthority) {
-        this.speciesAuthority = speciesAuthority;
+    public List<InstituteVO> getSafetyDuplicateInstitutes() {
+        return safetyDuplicateInstitutes;
     }
 
-    public void setStorageTypeCodes(List<String> storageTypeCodes) {
-        this.storageTypeCodes = storageTypeCodes;
+    public void setSafetyDuplicateInstitutes(List<InstituteVO> safetyDuplicateInstitutes) {
+        this.safetyDuplicateInstitutes = safetyDuplicateInstitutes;
     }
 
-    public void setSubtaxon(String subtaxon) {
-        this.subtaxon = subtaxon;
+    public List<String> getStorageTypeCodes() {
+        return storageTypeCodes;
     }
 
-    public void setSubtaxonAuthority(String subtaxonAuthority) {
-        this.subtaxonAuthority = subtaxonAuthority;
+    public void setStorageTypeCodes(List<String> storageTypeCodes) {
+        this.storageTypeCodes = storageTypeCodes;
     }
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmVO.java
index 10c8779f..2ff82565 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmVO.java
@@ -24,7 +24,6 @@ public class GermplasmVO
     private static final long serialVersionUID = -7719928853974382749L;
 
     private Long groupId;
-    private List<Long> speciesGroup;
 
     @Id
     private String germplasmDbId;
@@ -56,25 +55,13 @@ public class GermplasmVO
     private List<String> taxonSynonyms;
     private List<String> taxonCommonNames;
     private String taxonComment;
-    private String geneticNature;
-    private String comment;
-    private PhotoVO photo;
-    private InstituteVO holdingInstitute;
-    private InstituteVO holdingGenbank;
-    private String presenceStatus;
 
     private GenealogyVO genealogy;
     private List<GenealogyVO> children;
-    private List<SimpleVO> descriptors;
 
-    private SiteVO originSite;
-    private SiteVO collectingSite;
+    private PhotoVO photo;
     private List<SiteVO> evaluationSites;
 
-    private GermplasmInstituteVO collector;
-    private GermplasmInstituteVO breeder;
-    private List<GermplasmInstituteVO> distributors;
-
     private List<CollPopVO> panel;
     private List<CollPopVO> collection;
     private List<CollPopVO> population;
@@ -130,16 +117,7 @@ public class GermplasmVO
         this.groupId = groupId;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
-    @Override
+   @Override
     public String getGermplasmDbId() {
         return germplasmDbId;
     }
@@ -364,60 +342,6 @@ public class GermplasmVO
         this.taxonComment = taxonComment;
     }
 
-    @Override
-    public String getGeneticNature() {
-        return geneticNature;
-    }
-
-    public void setGeneticNature(String geneticNature) {
-        this.geneticNature = geneticNature;
-    }
-
-    @Override
-    public String getComment() {
-        return comment;
-    }
-
-    public void setComment(String comment) {
-        this.comment = comment;
-    }
-
-    @Override
-    public PhotoVO getPhoto() {
-        return photo;
-    }
-
-    public void setPhoto(PhotoVO photo) {
-        this.photo = photo;
-    }
-
-    @Override
-    public InstituteVO getHoldingInstitute() {
-        return holdingInstitute;
-    }
-
-    public void setHoldingInstitute(InstituteVO holdingInstitute) {
-        this.holdingInstitute = holdingInstitute;
-    }
-
-    @Override
-    public InstituteVO getHoldingGenbank() {
-        return holdingGenbank;
-    }
-
-    public void setHoldingGenbank(InstituteVO holdingGenbank) {
-        this.holdingGenbank = holdingGenbank;
-    }
-
-    @Override
-    public String getPresenceStatus() {
-        return presenceStatus;
-    }
-
-    public void setPresenceStatus(String presenceStatus) {
-        this.presenceStatus = presenceStatus;
-    }
-
     @Override
     public GenealogyVO getGenealogy() {
         return genealogy;
@@ -437,30 +361,8 @@ public class GermplasmVO
     }
 
     @Override
-    public List<SimpleVO> getDescriptors() {
-        return descriptors;
-    }
-
-    public void setDescriptors(List<SimpleVO> descriptors) {
-        this.descriptors = descriptors;
-    }
-
-    @Override
-    public SiteVO getOriginSite() {
-        return originSite;
-    }
-
-    public void setOriginSite(SiteVO originSite) {
-        this.originSite = originSite;
-    }
-
-    @Override
-    public SiteVO getCollectingSite() {
-        return collectingSite;
-    }
-
-    public void setCollectingSite(SiteVO collectingSite) {
-        this.collectingSite = collectingSite;
+    public PhotoVO getPhoto() {
+        return photo;
     }
 
     @Override
@@ -468,35 +370,12 @@ public class GermplasmVO
         return evaluationSites;
     }
 
-    public void setEvaluationSites(List<SiteVO> evaluationSites) {
-        this.evaluationSites = evaluationSites;
-    }
-
-    @Override
-    public GermplasmInstituteVO getCollector() {
-        return collector;
-    }
-
-    public void setCollector(GermplasmInstituteVO collector) {
-        this.collector = collector;
-    }
-
-    @Override
-    public GermplasmInstituteVO getBreeder() {
-        return breeder;
-    }
-
-    public void setBreeder(GermplasmInstituteVO breeder) {
-        this.breeder = breeder;
-    }
-
-    @Override
-    public List<GermplasmInstituteVO> getDistributors() {
-        return distributors;
+    public void setPhoto(PhotoVO photo) {
+        this.photo = photo;
     }
 
-    public void setDistributors(List<GermplasmInstituteVO> distributors) {
-        this.distributors = distributors;
+    public void setEvaluationSites(List<SiteVO> evaluationSites) {
+        this.evaluationSites = evaluationSites;
     }
 
     @Override
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/InstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/InstituteVO.java
index b1e4f8fa..7e7eb0ea 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/InstituteVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/InstituteVO.java
@@ -1,8 +1,10 @@
 package fr.inra.urgi.gpds.domain.data.germplasm;
 
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmInstitute;
+
 import java.io.Serializable;
 
-public class InstituteVO implements Serializable, Institute {
+public class InstituteVO implements Serializable, BrapiGermplasmInstitute, ExtendedInstitute {
 
     private static final long serialVersionUID = -680211100453576319L;
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SimpleVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/PuiNameValueVO.java
similarity index 82%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SimpleVO.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/PuiNameValueVO.java
index 27006991..4f881bf4 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SimpleVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/PuiNameValueVO.java
@@ -5,7 +5,7 @@ import java.io.Serializable;
 /**
  * @author C. Michotey
  */
-public class SimpleVO implements Serializable, PuiNameValue {
+public class PuiNameValueVO implements Serializable, PuiNameValue {
 
     private static final long serialVersionUID = 3440255005695104200L;
 
@@ -13,10 +13,10 @@ public class SimpleVO implements Serializable, PuiNameValue {
     private String name;
     private String value;
 
-    public SimpleVO() {
+    public PuiNameValueVO() {
     }
 
-    public SimpleVO(String pui, String name, String value) {
+    public PuiNameValueVO(String pui, String name, String value) {
         this.pui = pui;
         this.name = name;
         this.value = value;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitue.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitue.java
deleted file mode 100644
index 6bf3a5b8..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitue.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import com.fasterxml.jackson.annotation.JsonView;
-import fr.inra.urgi.gpds.domain.JSONView;
-
-import java.io.Serializable;
-
-public interface SafetyDuplicateInstitue extends Serializable {
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getInstituteCode();
-
-    @JsonView(JSONView.BrapiFields.class)
-    String getInstituteName();
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitueVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitueVO.java
deleted file mode 100644
index 8274385f..00000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SafetyDuplicateInstitueVO.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-public class SafetyDuplicateInstitueVO implements SafetyDuplicateInstitue {
-
-
-    private String instituteCode;
-    private String instituteName;
-
-    @Override
-    public String getInstituteCode() {
-        return instituteCode;
-    }
-
-    @Override
-    public String getInstituteName() {
-        return instituteName;
-    }
-
-    public void setInstituteCode(String instituteCode) {
-        this.instituteCode = instituteCode;
-    }
-
-    public void setInstituteName(String instituteName) {
-        this.instituteName = instituteName;
-    }
-}
-
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Site.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Site.java
index e23d19b3..afc0bad4 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Site.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Site.java
@@ -8,7 +8,7 @@ import fr.inra.urgi.gpds.domain.JSONView;
  */
 public interface Site {
     @JsonView(JSONView.GnpISFields.class)
-    Long getSiteId();
+    String getLocationDbId();
 
     @JsonView(JSONView.GnpISFields.class)
     String getSiteName();
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SiteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SiteVO.java
index 72db155a..dbc4626a 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SiteVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SiteVO.java
@@ -6,19 +6,19 @@ public class SiteVO implements Serializable, Site {
 
     private static final long serialVersionUID = 7058708694739141664L;
 
-    private Long siteId;
+    private String locationDbId;
     private String siteName;
     private Float latitude;
     private Float longitude;
     private String siteType;
 
     @Override
-    public Long getSiteId() {
-        return siteId;
+    public String getLocationDbId() {
+        return locationDbId;
     }
 
-    public void setSiteId(Long siteId) {
-        this.siteId = siteId;
+    public void setLocationDbId(String locationDbId) {
+        this.locationDbId = locationDbId;
     }
 
     @Override
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/phenotype/ObservationUnitVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/phenotype/ObservationUnitVO.java
index 88b4c725..a32f5aed 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/phenotype/ObservationUnitVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/phenotype/ObservationUnitVO.java
@@ -312,13 +312,4 @@ public class ObservationUnitVO implements BrapiObservationUnit, GnpISInternal, H
         this.groupId = groupId;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudyDetailVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudyDetailVO.java
index e61775ed..f0236e96 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudyDetailVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudyDetailVO.java
@@ -233,15 +233,6 @@ public class StudyDetailVO implements GnpISInternal, BrapiStudyDetail, HasURI, H
         this.additionalInfo = additionalInfo;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudySummaryVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudySummaryVO.java
index 328a695e..36bb922b 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudySummaryVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudySummaryVO.java
@@ -244,15 +244,6 @@ public class StudySummaryVO implements GnpISInternal, BrapiStudySummary, HasURI,
         this.seasons = seasons;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
index 93fbd70e..ae2f9e86 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
@@ -76,7 +76,7 @@ public class XRefDocumentRepositoryImpl implements XRefDocumentRepository {
                 .indices(aliases)
                 .source(source);
 
-            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT).;
+            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
 
             List<XRefDocumentVO> documents = parser.parseHits(response, XRefDocumentVO.class);
             Pagination pagination = PaginationImpl.create(criteria, parser.parseTotalHits(response));
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
index 0a8837d8..6ccf7a77 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
@@ -16,7 +16,6 @@ public interface GermplasmService {
 
     GermplasmMcpdVO getMcpdById(String germplasmDbId);
 
-
     PaginatedList<GermplasmVO> find(GermplasmSearchCriteria criteria);
 
     File exportCSV(GermplasmSearchCriteria criteria);
diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml
index f31b83cf..72884e5f 100644
--- a/backend/src/main/resources/application.yml
+++ b/backend/src/main/resources/application.yml
@@ -21,7 +21,7 @@ logging.level:
 
 gpds:
   elasticsearch-alias-template:
-    gnpis_{source}_{documentType}_9122_maggie-group{groupId}
+    gnpis_{source}_{documentType}_5432_krusty-group{groupId}
 
   elasticsearch-xref-index-name:
     urgi_xref_dev
-- 
GitLab


From fae93e08fadae9151076612fdc2a43bb6e08c761 Mon Sep 17 00:00:00 2001
From: Thomas Letellier <thomas.letellier@inra.fr>
Date: Thu, 11 Jul 2019 14:56:08 +0200
Subject: [PATCH 3/3] Front end refactoring. Fix GNP-5428.

---
 .../domain/data/germplasm/GermplasmMcpdVO.java   |  7 ++++---
 frontend/src/app/brapi.service.ts                |  7 ++++++-
 .../germplasm-card/germplasm-card.component.html | 16 +++++++++-------
 .../germplasm-card/germplasm-card.component.ts   | 13 +++++++++++--
 frontend/src/app/models/gnpis.model.ts           |  7 +++++++
 5 files changed, 37 insertions(+), 13 deletions(-)

diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
index d8e2e436..6f07e421 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
@@ -35,7 +35,7 @@ public class GermplasmMcpdVO implements Serializable, BrapiGermplasmMcpd, Extend
     private String remarks;
 
     private String countryOfOriginCode;
-    private Site originSite;
+    private SiteVO originSite;
 
     private String instituteCode;
     private InstituteVO holdingInstitute;
@@ -48,6 +48,7 @@ public class GermplasmMcpdVO implements Serializable, BrapiGermplasmMcpd, Extend
     private List<DonorInfoVO> donorInfo;
     private List<DistributorInfoVO> distributorInfo;
 
+
     @JsonDeserialize(contentAs = InstituteVO.class)
     private List<InstituteVO> breedingInstitutes;
     private String breederAccessionNumber;
@@ -211,11 +212,11 @@ public class GermplasmMcpdVO implements Serializable, BrapiGermplasmMcpd, Extend
         this.countryOfOriginCode = countryOfOriginCode;
     }
 
-    public Site getOriginSite() {
+    public SiteVO getOriginSite() {
         return originSite;
     }
 
-    public void setOriginSite(Site originSite) {
+    public void setOriginSite(SiteVO originSite) {
         this.originSite = originSite;
     }
 
diff --git a/frontend/src/app/brapi.service.ts b/frontend/src/app/brapi.service.ts
index a32154a5..ac197c24 100644
--- a/frontend/src/app/brapi.service.ts
+++ b/frontend/src/app/brapi.service.ts
@@ -12,7 +12,7 @@ import {
     BrapiStudy,
     BrapiTrial
 } from './models/brapi.model';
-import { Germplasm } from './models/gnpis.model';
+import { Germplasm, GermplasmMcpd } from './models/gnpis.model';
 
 export const BASE_URL = 'brapi/v1';
 
@@ -29,6 +29,11 @@ export class BrapiService {
             .get<Germplasm>(`${BASE_URL}/germplasm/${germplasmDbId}`);
     }
 
+    germplasmMcpd(germplasmDbId: string): Observable<BrapiResult<GermplasmMcpd>> {
+        return this.http
+            .get<BrapiResult<GermplasmMcpd>>(`${BASE_URL}/germplasm/${germplasmDbId}/mcpd`);
+    }
+
     germplasmPedigree(germplasmDbId: string): Observable<BrapiResult<BrapiGermplasmPedigree>> {
         return this.http
             .get<BrapiResult<BrapiGermplasmPedigree>>(`${BASE_URL}/germplasm/${germplasmDbId}/pedigree`);
diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.html b/frontend/src/app/germplasm-card/germplasm-card.component.html
index 45d8adb7..faac5778 100644
--- a/frontend/src/app/germplasm-card/germplasm-card.component.html
+++ b/frontend/src/app/germplasm-card/germplasm-card.component.html
@@ -1,10 +1,12 @@
 <gpds-loading-spinner [loading]="loading" class="float-right"></gpds-loading-spinner>
 
-<ng-container *ngIf="germplasmGnpis">
+<ng-container *ngIf="germplasmGnpis && germplasmMcpd">
   <h3 class="mb-4">
     <img *ngIf="germplasmGnpis.holdingGenbank && germplasmGnpis.holdingGenbank.instituteName"
          [src]="germplasmGnpis.holdingGenbank.logo"
          align="right"/>
+
+
     Germplasm: {{ germplasmGnpis.germplasmName }}
   </h3>
 
@@ -493,9 +495,7 @@
 
       <gpds-card-table
         [headers]="[
-                'Institute name',
                 'Institute code',
-                'Donation date',
                 'Accession number',
                 'Accession PUI'
                 ]"
@@ -503,7 +503,7 @@
         <ng-template let-row>
           <tr>
             <ng-template #donorInstituteTemplate>
-              <ng-container *ngTemplateOutlet="instituteTemplate;context:row.donorInstitute">
+              <ng-container *ngTemplateOutlet="instituteTemplate;context:row.donors">
               </ng-container>
             </ng-template>
 
@@ -511,12 +511,11 @@
               <a class="popovers" placement="auto"
                  [autoClose]="'outside'"
                  [ngbPopover]="donorInstituteTemplate"
-                 [popoverTitle]="row.donorInstitute.instituteName">
-                {{ row.donorInstitute.instituteName }}
+                 [popoverTitle]="row.donorInstituteCode">
+                {{ row.donorInstituteCode }}
               </a>
             </td>
             <td>{{ row.donorInstituteCode }}</td>
-            <td>{{ row.donationDate }}</td>
             <td>{{ row.donorAccessionNumber }}</td>
             <td>{{ row.donorGermplasmPUI }}</td>
             </tr>
@@ -782,6 +781,9 @@
     </ng-template>
   </gpds-card-section>
 
+
+
+
   <!-- XRefs part -->
   <gpds-xrefs [xrefId]="germplasmGnpis.germplasmPUI"></gpds-xrefs>
 </ng-container>
diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.ts b/frontend/src/app/germplasm-card/germplasm-card.component.ts
index b1aaf9f6..112d00ca 100644
--- a/frontend/src/app/germplasm-card/germplasm-card.component.ts
+++ b/frontend/src/app/germplasm-card/germplasm-card.component.ts
@@ -3,7 +3,7 @@ import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
 import { BrapiService } from '../brapi.service';
 import { GnpisService } from '../gnpis.service';
 import { BrapiAttributeData, BrapiGermplasmPedigree, BrapiLocation, BrapiTaxonIds } from '../models/brapi.model';
-import { Children, Germplasm, Site } from '../models/gnpis.model';
+import { Children, Germplasm, GermplasmMcpd, Site } from '../models/gnpis.model';
 import { DataDiscoverySource } from '../models/data-discovery.model';
 
 @Component({
@@ -36,6 +36,7 @@ export class GermplasmCardComponent implements OnInit {
     taxonIdsWithURL: BrapiTaxonIds[] = [];
 
     germplasmGnpis: Germplasm;
+    germplasmMcpd: GermplasmMcpd;
     germplasmPedigree: BrapiGermplasmPedigree;
     germplasmProgeny: Children[];
     germplasmAttributes: BrapiAttributeData[];
@@ -53,6 +54,13 @@ export class GermplasmCardComponent implements OnInit {
         this.germplasmId = this.route.snapshot.queryParams.id;
         this.germplasmPuid = this.route.snapshot.queryParams.pui;
 
+
+        const germplasmMcpd$ = this.brapiService.germplasmMcpd(this.germplasmId).toPromise();
+        germplasmMcpd$
+            .then(germplasmMcpd => {
+                this.germplasmMcpd = germplasmMcpd.result;
+            });
+
         const germplasm$ = this.getGermplasm(this.germplasmId, this.germplasmPuid);
         germplasm$.then(result => {
             const germplasmId = this.germplasmId ? this.germplasmId : result.germplasmDbId;
@@ -80,7 +88,7 @@ export class GermplasmCardComponent implements OnInit {
                 });
         });
 
-        this.loaded = Promise.all([germplasm$]);
+        this.loaded = Promise.all([germplasm$, germplasmMcpd$]);
         this.loaded.then(() => {
             this.loading = false;
             this.alreadyInitialize = true;
@@ -107,6 +115,7 @@ export class GermplasmCardComponent implements OnInit {
         return germplasm$;
     }
 
+
     // TODO Remove the condition when the field includedInDataCatalog will be added to URGI study.
     getGermplasmSource(sourceURI: string) {
         if (sourceURI) {
diff --git a/frontend/src/app/models/gnpis.model.ts b/frontend/src/app/models/gnpis.model.ts
index edee6ddf..d7cd3a47 100644
--- a/frontend/src/app/models/gnpis.model.ts
+++ b/frontend/src/app/models/gnpis.model.ts
@@ -25,6 +25,13 @@ export interface Germplasm extends BrapiGermplasm {
     population: GermplasmSet[];
 }
 
+
+
+export interface GermplasmMcpd extends  BrapiGermplasm{
+    mlsStatus: string;
+}
+
+
 export interface Site {
     latitude: number;
     longitude: number;
-- 
GitLab