NEWS
SoilManageR 1.1.0.9903
New features
plot() of a management_df draws the management timeline of plot_management_df()
plot_management_df() marks mineral fertilization events with "F" (once per date), like tillage ("T") and crop protection ("P")
check_management_df() additionally returns its findings as a table diagnostics in the test report, with a stable code (e.g. SM-W204), the affected row of the input data and the attribute. The warnings are unchanged (#36)
- New management data template (version 3.0.0), generated from the specifications: dependent dropdowns (category > operation > device > unit) and checks for 500 rows, new sheets Options, Crops and Products instead of Choice_list, completed descriptions, no locked sheets (#36)
- Mineral fertilizers can be entered as product amount (
kg/ha, or l/ha for liquid fertilizers) with the fertilizer as product; the N input is derived from the new lookup table mineral_fertilizers_LUT. If a fertilizer is entered on the same date both as product amount and as kg N/ha, only the product amount is used (#36)
- Organic fertilizers can be entered as plant-available N (
kg N_available/ha). The total N input is the amount divided by the N availability of the fertilizer (new column N_availability of CN_input_amendments_LUT, default 0.7); the C input follows from the C/N ratio. CN_input_amendments() gets the arguments unit and N_availability (#36)
- Seed mixtures of the specifications (
inst/spec/seed_mixtures.json) can be entered as one sowing record with the mixture as product; plant_diversity() counts their component species. The Products sheet of the template lists the seed mixtures (#36)
- New catalogue data (drafts, to be reviewed): 61 mineral fertilizers, 17 liming materials and 5 organic fertilizers of the LANDOR DüngeKompass 2026, 32 seed mixtures and single-species products of the UFA green manure catalogue, and 22 cover crop species (without parameters for the calculations). Spring faba bean, spring and winter oat, spring pea, winter rye, sorghum and sunflower can also be selected as cover crops (#36)
- JSON input:
management_df_from_json() reads management data as JSON (an object with spec_version and records), validates types, dates, required values, the vocabulary (historical names allowed) and the allowed combinations of category, operation, device and unit, and returns a management_df; invalid data raises an error with a diagnostics table (codes SM-E4xx). management_df_to_json() writes a management_df as JSON. The JSON Schema management.schema.json (folder schemas of the package) is generated from the specifications and checked in addition if the package jsonvalidate is installed. jsonlite is now imported (#36)
check_management_df() warns about mineral fertilizers entered as product amount without N content or density (SM-W215) and about fertilizers entered twice on the same date (SM-W216), and informs about products that are not in the catalogue of their operation (SM-I301, message only; information alone returns no test report) (#36)
- Contributor guide
CONTRIBUTING.md (adding devices, crops, fertilizers, mixtures and products; drafts; releases). The GitLab CI checks the specifications, fails if generated files are not up to date (--check mode of tools/build-specifications.R and tools/build-template.R), runs R CMD check and provides the template as artifact. Tags template-vX.Y.Z create a draft of a new template version on Zenodo (tools/release-template.R) (#36)
Changes in behaviour and results
- The template is shipped as
inst/extdata/SoilManageR_mgmt_data_template.xlsx (without version in the file name; the version is shown on its Read_me sheet). The template V2.6 was removed from the package; templates filled with earlier versions can still be imported with management_df_from_excel() (#36)
- The lookup tables (
STIR_values_LUT, C_input_crops_LUT, plant_cover_LUT, N_fixation_legumes_LUT, CN_input_amendments_LUT), the allowed operations and the historical name corrections are now generated from JSON specifications in inst/spec. All values in the lookup tables are unchanged. The spreadsheet copies in inst/extdata are generated as well; C_input_crops_LUT.xlsx now contains the rounded values that the package uses (#36)
- Cover crops: a sowing with a roller now counts as a cover crop sowing (previously, all operations with a roller were ignored, so a cover crop sown with a roller was never terminated), and terminating operations without a device now end a cover crop. A roller pass still does not terminate a cover crop. For the
EXAMPLE_data, the C input of the cover crop in 2015 changes from 2197 to 2187 kg C/ha, because the roller pass of its two-step sowing now counts as sowing date (#36)
- Organic amendments that are not in
CN_input_amendments_LUT and have no DMC, C and N content: CN_input_amendments() gives a warning and returns NA instead of an error, so the other indicators are still calculated; these amendments get no C and N input (#36)
Azoplume (alias Azoplum) uses the values of the LANDOR DüngeKompass 2026: OM 850 instead of 750 g/kg and C from the declared C/N ratio (598 instead of 435 g/kg). The C input of this amendment increases by 37 %, the N input is unchanged (#36)
EXAMPLE_data (and EXAMPLE_data.xlsx): the combination marker "A" is replaced by 1, so combination is an integer as described in the template. The results are unchanged (#36)
plant_diversity() ignores sowing records without product instead of records with the device roller. The results for the EXAMPLE_data are unchanged (#36)
New features
C_input(), calculate_indicators(), calculate_indicators_by_crop(), and calculate_indicators_by_date() report the C input from above ground residues (product and straw left on the field) separately for crops and cover crops: C_input_crop_abvg and C_input_cover_crop_abvg (C_input_CC_abvg in the by crop and by date outputs). These values are part of the existing C input, not added on top
calculate_indicators() returns the main crop of the year (crop standing on June 1st) as column crop
check_management_df() warns about categories and combinations of category and operation that are not in the choice list of the management template, and about crops that are harvested more than once
- The indicator calculations are considerably faster
Changes in behaviour and results
- STIR: every sowing pass is now counted exactly once. Previously, sowings on the same day as another operation or with the same device as the previous operation, and cover crop mixtures, were left out. This increases the STIR values of
tillage_intensity(), calculate_indicators(), and calculate_indicators_by_crop(), e.g. for the EXAMPLE_data in 2019 from 42 to 49
- Soil cover: mixtures recorded as one sowing line per species bury residues only once per sowing pass and no longer start the crop or cover crop one day early.
- C input: if a crop (except temporary ley) is harvested more than once without a sowing in between, only the first harvest gets a C input
indicators_by_date() is renamed to calculate_indicators_by_date()
calculate_indicators_by_date() issues a warning instead of an error when the selected date is after the last management operation, and still computes the indicators
- Management template V2.6: the Choice_list uses the category "fertilizer_application" instead of "fertilization" for fertilizer operations
SoilManageR 1.1.0.9901
- Added new organic amendments: Azoplum, Bio_enne, Ramial_Chipped_Wood
- Added three categories for STIR to output of calculate_indicators_by_crop(): STIR_main_crop, STIR_cover_crop, STIR_weeding
- Added N fixation by crops and cover crops into calculate_N_input_tibble() (N_fixation_legumes())
- Added reference data for N fixation (N_fixation_legumes_LUT.xlsx and N_fixation_legumes_LUT.Rd)
SoilManageR 1.1.0 (2025-04-18)
- Integrated undersowing into soil_cover(), cover crops can now overlap with crops. However, crops can not overlap with each other (no intercropping)
- Updated the management data template (V2.6), incl. new operations (harvest_cover_crop, total_herbicide, frost_kill_cover_crop)
- Updated the way the C input by cover crops is calculated (now goes to 0 for short term cover crops)
- New indicator to count pesticide applications (count_pesticide_applications())
- New function to calculate management indicators by crop (calculate_indicators_by_crop())
- New function to calculate indicators by a specific date (calculate_indicators_by_date())
- Added specific color for cover crops into plot.soil_cover_tibble()
- PDI (plant diversity indicator) was renamed into CDI (crop diversity indicator)
- Updated Vignette and ReadMe files
SoilManageR 1.0.1 (2024-10-01)
- Initial release version of the SoilManageR