Förslag till format

Svensk standard för import och export av sprutjournaler

Detta är ett förslag till gemensamt sprutjournalsformat för import, export och delning mellan system. Syftet är att beskriva vilka fält som ingår i respektive formatversion och hur en export kan struktureras.

Formatet är uppdelat i SJF 2015:1 för äldre sprutjournaler och SJF 2026:1 för sprutjournaler från 2026. Exempelobjekten nedan är avsedda som utgångspunkt för fortsatt dialog om JSON, XML och andra maskinläsbara format.

STANDARDER

Dokumentationskraven för användning av växtskyddsmedel förändras från år 2026. Svenska Sprutjournal AB föreslår därför att systemleverantörer på den svenska marknaden ska tillämpa två sprutjournals-format ("SJF").

SJF 2015:1 som ska användas för sprutjournaler med datum fram till och med 2025-12-31 och SJF 2026:1 som ska användas för sprutjournaler med datum från och med 2026-01-01.

En export av sprutjournaler ska kunna innehålla sprutjournaler i både SJF 2015:1 och SJF 2026:1.

Identitet och revision

Varje sprutjournal ska ha ett globalt unikt id och en revision. Detta gäller både SJF 2015:1 och SJF 2026:1 och gör det möjligt att känna igen samma journal även efter att den har överförts mellan system eller kompletterats i efterhand.

Saknade värden och inkompletta journaler

Både SJF 2015:1 och SJF 2026:1 ska stödja import och export av inkompletta journaler. Samtliga innehållsfält får ha värdet null när värdeangivelse saknas. Det gäller även nästlade fält, exempelvis en produkts dos, och hela objekt eller listor som location, crop och products. Fälten version, id och revision ska alltid ha ett värde så att journalens format, identitet och revision kan bestämmas.

Typbeskrivningarna nedan gäller när ett värde finns. Saknade värden anges med JSON-värdet null, inte texten "null". Fält markerade som valfria får även utelämnas och ska då tolkas som saknade. Import och vidareexport ska bevara saknade uppgifter utan att ersätta dem med exempelvis noll eller "inte relevant".

Listor ska vara null eller innehålla minst en post. Alla listposter ska ha den angivna typen; null används för hela listan, inte som en listpost. Tomma listor [] ska inte användas. Fälten fixed_protective_distances och adjusted_protective_distances ska innehålla minst en sträng när de är angivna. Fältet products, exportens journals och documents på både journal- och exportnivå ska innehålla minst ett objekt när de är angivna. När inga poster är angivna används null. Detta innebär inte i sig att en bedömning har gjorts.

När ett fält har en separat frånvaroorsak får både värdet och orsaken vara null. En frånvaroorsak får endast anges när själva värdet är null. När ett värde anges ska frånvaroorsaken vara null. Import och vidareexport ska bevara angivna orsaker och får inte gissa en orsak till ett saknat värde. Att en journal kan överföras enligt formatet innebär inte att dess dokumentation är komplett.

Skördedatum och frånvaroorsak

harvest_date anger den faktiska skördedagen som ett datum i formatet YYYY-MM-DD, eller null när datum saknas. Om orsaken till att datum saknas är känd anges den separat i harvest_date_absence_reason. Samma regler gäller för SJF 2015:1 och SJF 2026:1.

harvest_dateharvest_date_absence_reasonBetydelse
"2026-08-10"nullFaktisk skördedag är angiven.
nullnullUppgift om skördedatum och frånvaroorsak saknas.
null"not_applicable"Skördedatum är inte tillämpligt för denna användning.
null"not_yet_harvested"Det är känt att skörd ännu inte har skett.

En frånvaroorsak får endast anges när harvest_date är null. När ett skördedatum anges ska harvest_date_absence_reason vara null. Frånvaroorsaken ska vara en av koderna ovan eller null; visningstexten får översättas i gränssnittet, men koderna ska bevaras vid import och export.

Utvecklingsstadium och karenstid

I SJF 2026:1 anger crop.growth_stage en giltig BBCH-kod som heltal, där 0 betyder BBCH 00. När utvecklingsstadium inte är tillämpligt anges growth_stage: null och growth_stage_absence_reason: "not_applicable" inuti crop.

I båda formatversionerna anger quarantine_in_days karenstiden som ett heltal på minst noll dagar. Värdet 0 betyder en faktisk karenstid på noll dagar. När karenstid inte är tillämplig anges quarantine_in_days: null och quarantine_in_days_absence_reason: "not_applicable" på journalnivå.

Båda frånvaroorsakerna får endast vara "not_applicable" eller null. När värdet och orsaken båda är null saknas uppgift om både värdet och varför det saknas. Ett angivet värde, även 0, ska alltid ha frånvaroorsaken null. Ett villkor som inte kan uttryckas i antal dagar får inte automatiskt tolkas som att karenstid inte är tillämplig; villkoret ska bevaras i free_text.

Följande JSON-utdrag ur en SJF 2026:1-journal visar när båda uppgifterna är kända som inte tillämpliga:

{
  "crop": {
    "growth_stage": null,
    "growth_stage_absence_reason": "not_applicable"
  },
  "quarantine_in_days": null,
  "quarantine_in_days_absence_reason": "not_applicable"
}
	

Enhetssymboler och öppen enhetslista

Fälten dose_unit och area_unit ska använda etablerade enhetssymboler när sådana finns. Reglerna gäller både SJF 2015:1 och SJF 2026:1. Exemplen nedan är inte en uttömmande lista över tillåtna enheter.

SJF 2015:1

SJF 2015:1 är en standard för sprutjournaler med datum fram till och med 2025-12-31.

Alla innehållsfält nedan tillåter även null enligt reglerna för saknade värden.

version

as a string, always "2015:1"

id

as a globally unique string, preserved across systems, e.g. "sprutjournal-se-10403"

revision

as a string containing the last change timestamp of the structured journal data, excluding the entire documents field, in UTC formatted as YYYY-MM-DDTHH:mm:ss.sssZ, e.g. "2025-08-10T14:30:00.000Z"

date

as a string formatted as YYYY-MM-DD, e.g. "2024-10-24"

time

as a string formatted as hh:mm, e.g. "18:00"

spreader

as a string, e.g. "John Doe"

location

as an object containing

name as a string, e.g. "A5"

gnss_coordinate (optional) as an object containing

latitude as a number in WGS 84, e.g. 58.39123

longitude as a number in WGS 84, e.g. 13.84567

fixed_protective_distances as an array containing at least one string, e.g. ["2m till dräneringsbrunn"], or null when no entries are provided

adjusted_protective_distances as an array containing at least one string, e.g. ["8m till åkerholmens södra sida", "2m på områdets norra sida"], or null when no entries are provided

crop

as an object containing

name as a string, e.g. "Vete"

purpose

as a string, e.g. "Ogräsbekämpning"

products

as null when no entries are provided, or an array of at least one object containing

name as a string, e.g. "Boxer"

registration_number (optional) as a string, e.g. "5760"

dose_amount as a number, e.g. 1.5

dose_unit as a string using unit symbols, e.g. "L/ha", "mL/ha" or "g/ha", following the open unit list rules above

flowering_vegetation

as a string, e.g. "Ej relevant"

quarantine_in_days

as an integer with minimum value 0, e.g. 0; 0 means an actual waiting period of zero days, and null means no value has been provided

quarantine_in_days_absence_reason

as "not_applicable" (waiting period is not applicable), or null (no absence reason is specified). Must be null when quarantine_in_days contains a value, including 0.

harvest_date

as a string containing the actual harvest date formatted as YYYY-MM-DD, e.g. "2025-08-10", or null when no date is provided

harvest_date_absence_reason

as "not_applicable" (harvest date is not applicable), "not_yet_harvested" (harvest has not yet occurred), or null (no absence reason is specified). Must be null when harvest_date contains a date.

free_text

(optional) as a string, e.g. "Västlig vind, 1,5 m/s och 15°C"

documents

(optional) as an array of at least one document object attached to this journal, or null when no documents are included. Uses the document format below and is excluded from revision.

Sprutjournal enligt 2015:1 skulle därmed kunna se ut enligt följande JSON-objekt.

Visa/dölj JSON-exempel

{
  "version": "2015:1",
  "id": "sprutjournal-se-10403",
  "revision": "2025-08-10T14:30:00.000Z",
  "date": "2024-10-24",
  "time": "18:00",
  "spreader": "John Doe",
  "location": {
    "name": "A5",
    "gnss_coordinate": {
      "latitude": 58.39123,
      "longitude": 13.84567
    },
    "fixed_protective_distances": [
      "2m till dräneringsbrunn"
    ],
    "adjusted_protective_distances": [
      "8m till åkerholmens södra sida",
      "2m på områdets norra sida"
    ]
  },
  "crop": {
    "name": "Vete"
  },
  "purpose": "Ogräsbekämpning",
  "products": [
    {
      "name": "Boxer",
      "registration_number": "5760",
      "dose_amount": 1.5,
      "dose_unit": "L/ha"
    }
  ],
  "flowering_vegetation": "Ej relevant",
  "quarantine_in_days": 0,
  "quarantine_in_days_absence_reason": null,
  "harvest_date": "2025-08-10",
  "harvest_date_absence_reason": null,
  "free_text": "Västlig vind, 1,5 m/s och 15°C",
  "documents": null
}
    

SJF 2026:1

SJF 2026:1 är en standard för sprutjournaler med datum från och med 2026-01-01.

Alla innehållsfält nedan tillåter även null enligt reglerna för saknade värden.

version

as a string, always "2026:1"

id

as a globally unique string, preserved across systems, e.g. "datavaxt-crop-plan-83713"

revision

as a string containing the last change timestamp of the structured journal data, excluding the entire documents field, in UTC formatted as YYYY-MM-DDTHH:mm:ss.sssZ, e.g. "2026-06-02T10:30:00.000Z"

date

as a string formatted as YYYY-MM-DD, e.g. "2026-05-25"

time

as a string formatted as hh:mm, e.g. "12:00"

spreader

as a string, e.g. "John Doe"

type_of_use

as a string, e.g. "Behandling av ytor"

location

as an object containing

name as a string, e.g. "A1"

gnss_coordinate (optional for agricultural parcels eligible for agricultural support) as an object containing

latitude as a number in WGS 84, e.g. 58.39123

longitude as a number in WGS 84, e.g. 13.84567

fixed_protective_distances as an array containing at least one string, e.g. ["2m till dräneringsbrunn"], or null when no entries are provided

adjusted_protective_distances as an array containing at least one string, e.g. ["2m på områdets norra sida"], or null when no entries are provided

area_amount

as a number describing treated area, volume or amount of seed, e.g. 100

area_unit

as a string using unit symbols where available, e.g. "ha", "m3", "kg" or "antal frön", following the open unit list rules above

crop

as an object containing

name as a string, e.g. "Höstvete"

eppo_code as a string, e.g. "TRZAW"

growth_stage as an integer representing a valid BBCH code, e.g. 40; 0 means BBCH 00, and null means no value has been provided

growth_stage_absence_reason as "not_applicable" (growth stage is not applicable), or null (no absence reason is specified). Must be null when growth_stage contains a value, including 0.

purpose

as a string, e.g. "Svampbehandling"

products

as null when no entries are provided, or an array of at least one object containing

name as a string, e.g. "Revytrex"

registration_number as a string, e.g. "5585"

dose_amount as a number, e.g. 1.5

dose_unit as a string using unit symbols, e.g. "L/ha", "mL/ha" or "g/ha", following the open unit list rules above

flowering_vegetation

as a string, e.g. "Relevant men ingen blommande vegetation"

quarantine_in_days

as an integer with minimum value 0, e.g. 35; 0 means an actual waiting period of zero days, and null means no value has been provided

quarantine_in_days_absence_reason

as "not_applicable" (waiting period is not applicable), or null (no absence reason is specified). Must be null when quarantine_in_days contains a value, including 0.

harvest_date

as a string containing the actual harvest date formatted as YYYY-MM-DD, e.g. "2026-08-10", or null when no date is provided

harvest_date_absence_reason

as "not_applicable" (harvest date is not applicable), "not_yet_harvested" (harvest has not yet occurred), or null (no absence reason is specified). Must be null when harvest_date contains a date.

free_text

(optional) as a string, e.g. "Västlig vind, 1,5 m/s och 15°C"

documents

(optional) as an array of at least one document object attached to this journal, or null when no documents are included. Uses the document format below and is excluded from revision.

Sprutjournal enligt 2026:1 skulle därmed kunna se ut enligt följande JSON-objekt. Bilagan är en schematisk exempelkarta i SVG-format, med filstorlek och checksumma beräknade från den bifogade filens byte.

Visa/dölj JSON-exempel

{
  "version": "2026:1",
  "id": "datavaxt-crop-plan-83713",
  "revision": "2026-06-02T10:30:00.000Z",
  "date": "2026-06-02",
  "time": "12:00",
  "spreader": "John Doe",
  "type_of_use": "Behandling av ytor",
  "location": {
    "name": "A1",
    "gnss_coordinate": {
      "latitude": 58.39123,
      "longitude": 13.84567
    },
    "fixed_protective_distances": [
      "2m till dräneringsbrunn"
    ],
    "adjusted_protective_distances": [
      "2m på områdets norra sida"
    ]
  },
  "area_amount": 100,
  "area_unit": "ha",
  "crop": {
    "name": "Höstvete",
    "eppo_code": "TRZAW",
    "growth_stage": 40,
    "growth_stage_absence_reason": null
  },
  "purpose": "Svampbehandling",
  "products": [
    {
      "name": "Revytrex",
      "registration_number": "5585",
      "dose_amount": 1500,
      "dose_unit": "mL/ha"
    }
  ],
  "flowering_vegetation": "Relevant men ingen blommande vegetation",
  "quarantine_in_days": 35,
  "quarantine_in_days_absence_reason": null,
  "harvest_date": null,
  "harvest_date_absence_reason": "not_yet_harvested",
  "free_text": "Västlig vind, 1,5 m/s och 15°C",
  "documents": [
    {
      "name": "Schematisk exempelkarta A1",
      "mime_type": "image/svg+xml",
      "file_size": 227,
      "checksum": "1faf5905ed4b6aacd20427950305c8929f578013129d83220bb644fb86659622",
      "binary_object": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTIwIj48dGl0bGU+U2NoZW1hdGlzayBleGVtcGVsa2FydGEgZsO2ciBBMTwvdGl0bGU+PHBhdGggZD0iTTIwIDIwSDE4MFYxMDBIMjBaIiBmaWxsPSIjZDllZGMyIiBzdHJva2U9IiM0NDdiMjgiLz48dGV4dCB4PSIxMDAiIHk9IjY1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5BMTwvdGV4dD48L3N2Zz4="
    }
  ]
}
    

Exempel på en inkomplett journal

Här saknas bland annat datum, plats, utvecklingsstadium och dos. Journalen kan ändå exporteras och importeras. När uppgifterna kompletteras behålls dess id och revision uppdateras.

Visa/dölj JSON-exempel på en inkomplett journal

{
  "version": "2026:1",
  "id": "sprutjournal-se-10404",
  "revision": "2026-06-03T10:30:00.000Z",
  "date": null,
  "time": null,
  "spreader": null,
  "type_of_use": null,
  "location": null,
  "area_amount": null,
  "area_unit": null,
  "crop": {
    "name": "Höstvete",
    "eppo_code": null,
    "growth_stage": null,
    "growth_stage_absence_reason": null
  },
  "purpose": null,
  "products": [
    {
      "name": "Revytrex",
      "registration_number": "5585",
      "dose_amount": null,
      "dose_unit": null
    }
  ],
  "flowering_vegetation": null,
  "quarantine_in_days": null,
  "quarantine_in_days_absence_reason": null,
  "harvest_date": null,
  "harvest_date_absence_reason": null,
  "free_text": null,
  "documents": null
}
    

Dokument och bilagor

Dokument är valfria bilagor som kan bifogas både till en enskild sprutjournal och till exporten som helhet. Samma dokumentformat används på båda nivåerna i SJF 2015:1 och SJF 2026:1. Sprutföraren väljer vilka bilagor som ska följa med exporten.

På båda nivåerna är documents en lista med minst ett dokumentobjekt eller null när inga bilagor medföljer. Även dokumentens innehållsfält får vara null när uppgift saknas. Ett utelämnat eller null-värderat documents-fält är inte en instruktion att radera tidigare bilagor vid import. Medföljande bilagor ska hanteras även om journalens id och revision redan finns i mottagande system.

Dokumentens filinnehåll identifieras med checksum, en SHA-256-kontrollsumma beräknad på originalfilens byte före base64-kodning. När filinnehållet ändras ska kontrollsumman beräknas på nytt. Kontrollsumman omfattar inte dokumentets namn eller övriga metadata och anger inte vilken fil som är nyast eller om en fil ersätter en annan. En importör ska inte automatiskt ersätta en bilaga enbart för att ett dokument har samma namn och en annan checksumma. När checksum saknas kan den inte användas för att identifiera filinnehållet.

documents

as null when no entries are provided, or an array of at least one object containing

name as a string, e.g. "Behörighetsbevis"

mime_type as a string, e.g. "application/pdf", "image/png", "image/jpeg" or "image/svg+xml"

file_size as a non-negative integer containing the original file size in bytes before base64 encoding, e.g. 311130

checksum as a string of 64 lowercase hexadecimal characters containing the SHA-256 hash of the original file bytes before base64 encoding

binary_object as the original file bytes encoded as a base64 string, without a data URL prefix

Export

En export av sprutjournaler ska kunna innehålla sprutjournaler i både SJF 2015:1 och SJF 2026:1. Varje journal kan ha egna bilagor i sitt documents-fält. Gemensamma bilagor placeras i exportens documents-fält enligt dokumentformatet ovan.

journals

as an array containing at least one SJF 2015:1 or SJF 2026:1 journal object, or null when no journals are included

documents

as an array containing at least one document object shared at export level, or null when no such documents are included

Export av sprutjournaler skulle därmed kunna se ut enligt följande JSON-objekt.

Visa/dölj JSON-exempel

{
  "journals": [
    {
      "version": "2015:1",
      "id": "sprutjournal-se-10403",
      "revision": "2025-08-10T14:30:00.000Z",
      "date": "2024-10-24",
      "time": "18:00",
      "spreader": "John Doe",
      "location": {
        "name": "A5",
        "gnss_coordinate": {
          "latitude": 58.39123,
          "longitude": 13.84567
        },
        "fixed_protective_distances": [
          "2m till dräneringsbrunn"
        ],
        "adjusted_protective_distances": [
          "8m till åkerholmens södra sida",
          "2m på områdets norra sida"
        ]
      },
      "crop": {
        "name": "Vete"
      },
      "purpose": "Ogräsbekämpning",
      "products": [
        {
          "name": "Boxer",
          "registration_number": "5760",
          "dose_amount": 1.5,
          "dose_unit": "L/ha"
        }
      ],
      "flowering_vegetation": "Ej relevant",
      "quarantine_in_days": 0,
      "quarantine_in_days_absence_reason": null,
      "harvest_date": "2025-08-10",
      "harvest_date_absence_reason": null,
      "free_text": "Västlig vind, 1,5 m/s och 15°C",
      "documents": null
    },
    {
      "version": "2026:1",
      "id": "datavaxt-crop-plan-83713",
      "revision": "2026-06-02T10:30:00.000Z",
      "date": "2026-06-02",
      "time": "12:00",
      "spreader": "John Doe",
      "type_of_use": "Behandling av ytor",
      "location": {
        "name": "A1",
        "gnss_coordinate": {
          "latitude": 58.39123,
          "longitude": 13.84567
        },
        "fixed_protective_distances": [
          "2m till dräneringsbrunn"
        ],
        "adjusted_protective_distances": [
          "2m på områdets norra sida"
        ]
      },
      "area_amount": 100,
      "area_unit": "ha",
      "crop": {
        "name": "Höstvete",
        "eppo_code": "TRZAW",
        "growth_stage": 40,
        "growth_stage_absence_reason": null
      },
      "purpose": "Svampbehandling",
      "products": [
        {
          "name": "Revytrex",
          "registration_number": "5585",
          "dose_amount": 1500,
          "dose_unit": "mL/ha"
        }
      ],
      "flowering_vegetation": "Relevant men ingen blommande vegetation",
      "quarantine_in_days": 35,
      "quarantine_in_days_absence_reason": null,
      "harvest_date": null,
      "harvest_date_absence_reason": "not_yet_harvested",
      "free_text": "Västlig vind, 1,5 m/s och 15°C",
      "documents": [
        {
          "name": "Schematisk exempelkarta A1",
          "mime_type": "image/svg+xml",
          "file_size": 227,
          "checksum": "1faf5905ed4b6aacd20427950305c8929f578013129d83220bb644fb86659622",
          "binary_object": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTIwIj48dGl0bGU+U2NoZW1hdGlzayBleGVtcGVsa2FydGEgZsO2ciBBMTwvdGl0bGU+PHBhdGggZD0iTTIwIDIwSDE4MFYxMDBIMjBaIiBmaWxsPSIjZDllZGMyIiBzdHJva2U9IiM0NDdiMjgiLz48dGV4dCB4PSIxMDAiIHk9IjY1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5BMTwvdGV4dD48L3N2Zz4="
        }
      ]
    }
  ],
  "documents": null
}
                
    

Svenska Sprutjournal AB

Organisationsnummer: 559390-6984

Säte: Gemla

mejl: [email protected]

telefon: 076-020 81 44