diff --git a/src/main/java/no/nibio/vips/ipmdecisions/DataTransformer.java b/src/main/java/no/nibio/vips/ipmdecisions/DataTransformer.java
index cf746b4e7dfd1753af5a38dab35d057286d34871..1cdc24f45660774fbe2c960e14754b9b3159b2af 100644
--- a/src/main/java/no/nibio/vips/ipmdecisions/DataTransformer.java
+++ b/src/main/java/no/nibio/vips/ipmdecisions/DataTransformer.java
@@ -155,22 +155,113 @@ public class DataTransformer {
         return retVal;
     }
 
-    public List<Observation> getVIPSPestObservations(List<Map> fieldObservations, List<Map> fieldObservationQuantifications) {
+    /**
+     * Transform a field observation from IPM Decisions to VIPS entity
+     * 
+     * Example schema for an IPM Decisions DSS/model:
+     * 
+     * {
+          "type": "object",
+          "properties": {
+            "modelId": {
+              "type": "string",
+              "pattern": "^PSILAROBSE$",
+              "title": "Model Id",
+              "default": "PSILAROBSE",
+              "description": "Must be PSILAROBSE"
+            },
+            "configParameters": {
+              "title": "Configuration parameters",
+              "type": "object",
+              "properties": {
+                "timeZone": {
+                  "type": "string",
+                  "title": "Time zone (e.g. Europe/Oslo)",
+                  "default": "Europe/Oslo"
+                },
+                "startDateCalculation": {
+                  "type": "string",
+                  "format": "date",
+                  "default": "{CURRENT_YEAR}-03-01",
+                  "title": "Start date of calculation (YYYY-MM-DD)"
+                },
+                "endDateCalculation": {
+                  "type": "string",
+                  "format": "date",
+                  "default": "{CURRENT_YEAR}-09-01",
+                  "title": "End date of calculation (YYYY-MM-DD)"
+                },
+                "fieldObservations": {
+                  "title": "Field observations",
+                  "type": "array",
+                  "items": {
+                    "type": "object",
+                    "title": "Field observation",
+                    "properties": {
+                      "fieldObservation": {
+                        "title": "Generic field observation information",
+                        "$ref": "https://platform.ipmdecisions.net/api/dss/rest/schema/fieldobservation"
+                      },
+                      "quantification": {
+                        "$ref": "#/definitions/fieldObs_PSILRO"
+                      }
+                    }
+                  }
+                }
+              },
+              "required": [
+                "timeZone",
+                "startDateCalculation",
+                "endDateCalculation"
+              ]
+            }
+          },
+          "required": [
+            "modelId",
+            "configParameters"
+          ],
+          "definitions": {
+            "fieldObs_PSILRO": {
+              "title": "Psila rosae quantification",
+              "properties": {
+                "trapCountCropEdge": {
+                  "title": "Insect trap count at the edge of the field",
+                  "type": "integer"
+                },
+                "trapCountCropInside": {
+                  "title": "Insect trap count inside the field",
+                  "type": "integer"
+                }
+              },
+              "required": [
+                "trapCountCropEdge",
+                "trapCountCropInside"
+              ]
+            }
+          }
+        }
+     * 
+     * @param fieldObservations
+     * @return 
+     */
+    public List<Observation> getVIPSPestObservations(List<Map> fieldObservations) {
         List<Observation> retVal = new ArrayList<>();
         ObjectMapper om = new ObjectMapper();
         for(int i=0;i<fieldObservations.size();i++)
         {
             Map fieldObservation = fieldObservations.get(i);
+            Map commonInfo = (Map) fieldObservation.get("fieldObservation");
+            Map quantification = (Map) fieldObservation.get("quantification");
             ObservationImpl VIPSObs = new ObservationImpl();
-            VIPSObs.setGeoinfo(fieldObservation.get("location").toString());
+            VIPSObs.setGeoinfo(commonInfo.get("location").toString());
             try
             {
-                VIPSObs.setObservationData(om.writeValueAsString(fieldObservationQuantifications.get(i)));
+                VIPSObs.setObservationData(om.writeValueAsString(quantification));
             }catch(JsonProcessingException ex)
             {
                 ex.printStackTrace();
             }
-            VIPSObs.setTimeOfObservation(om.convertValue(fieldObservation.get("time"), Date.class));
+            VIPSObs.setTimeOfObservation(om.convertValue(commonInfo.get("time"), Date.class));
             retVal.add(VIPSObs);
         }
         return retVal;