Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/frank-boxes-join.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@svenvw/fdm-core": minor
---

For withCalculationCache add the option to provide which sensitive keys should be redacted in the cache
5 changes: 5 additions & 0 deletions .changeset/old-papayas-retire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@svenvw/fdm-calculator": minor
---

For balance calculation cache per field instead of per farm and thus replace getNitrogenBalance with getNitrogenBalanceField and getOrganicMatterBalance with getOrganicMatterBalanceField
5 changes: 5 additions & 0 deletions .changeset/young-dolls-cheat.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@svenvw/fdm-calculator": patch
---

Refactor Nitrogen and Organic Matter balance calculations to use a bottom-up (Field -> Farm) approach
32 changes: 19 additions & 13 deletions fdm-app/app/components/blocks/balance/nitrogen-chart.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type {
collectInputForNitrogenBalance,
getNitrogenBalance,
NitrogenBalanceFieldResultNumeric,
FieldInput as FdmFieldInput,
NitrogenBalanceFieldNumeric,
NitrogenBalanceNumeric,
} from "@svenvw/fdm-calculator"
import { format } from "date-fns/format"
import { useId, useMemo, useState } from "react"
Expand All @@ -16,9 +16,9 @@ import {
ChartTooltip,
} from "~/components/ui/chart"

type FieldInput = Awaited<ReturnType<typeof collectInputForNitrogenBalance>>
type FarmBalanceData = Awaited<ReturnType<typeof getNitrogenBalance>>
type FieldBalanceData = NitrogenBalanceFieldResultNumeric
type FieldInput = FdmFieldInput
type FarmBalanceData = NitrogenBalanceNumeric
type FieldBalanceData = NitrogenBalanceFieldNumeric

type ApplicationChartConfigItem = {
label: string
Expand Down Expand Up @@ -206,7 +206,7 @@ function buildChartDataAndLegend({
label: label,
unit: unit,
detail: [
application.p_name_nl,
application.p_name_nl ?? "Naam onbekend",
format(application.p_app_date, "PP", {
locale: nl,
}),
Expand Down Expand Up @@ -243,14 +243,14 @@ function buildChartDataAndLegend({
if (!styles[styleId]) {
styles[styleId] = {
...styles[""],
color: getCultivationColor(cultivation.b_lu_croprotation),
color: getCultivationColor(cultivation.b_lu_croprotation ?? undefined),
}
}
chartData[dataKey] = Math.abs(cultivationResult.value)
;(chartConfig as ExtendedChartConfig)[dataKey] = {
label: label,
unit: unit,
detail: [cultivation.b_lu_name],
detail: [cultivation.b_lu_name ?? "Naam onbekend"],
styleId: styleId,
}
bar.push(dataKey)
Expand Down Expand Up @@ -330,10 +330,16 @@ function buildChartDataAndLegend({
styleId: "removalHarvest",
detail: cultivationDetails
? [
cultivationDetails.b_lu_name,
format(harvestDetails.b_lu_harvest_date, "PP", {
locale: nl,
}),
cultivationDetails.b_lu_name ?? "Naam onbekend",
harvestDetails.b_lu_harvest_date
? format(
harvestDetails.b_lu_harvest_date,
"PP",
{
locale: nl,
},
)
: "Datum onbekend",
]
: [],
}
Expand Down
4 changes: 2 additions & 2 deletions fdm-app/app/components/blocks/balance/nitrogen-details.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type {
FieldInput,
NitrogenBalanceNumeric,
NitrogenBalanceFieldNumeric,
NitrogenEmissionNumeric,
NitrogenRemovalHarvestsNumeric,
NitrogenRemovalNumeric,
Expand All @@ -23,7 +23,7 @@ import {
} from "~/components/ui/accordion"

interface NitrogenBalanceDetailsProps {
balanceData: NitrogenBalanceNumeric
balanceData: NitrogenBalanceFieldNumeric
fieldInput: FieldInput
}

Expand Down
48 changes: 26 additions & 22 deletions fdm-app/app/components/blocks/fertilizer-applications/metrics.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type {
Dose,
GebruiksnormResult,
NitrogenBalanceNumeric,
NitrogenBalanceFieldResultNumeric,
NormFilling,
NutrientAdvice,
} from "@svenvw/fdm-calculator"
Expand Down Expand Up @@ -46,7 +46,7 @@ interface FertilizerApplicationMetricsData {
nitrogen: NormFilling
}
}>
nitrogenBalance: Promise<NitrogenBalanceNumeric> | undefined
nitrogenBalance: Promise<NitrogenBalanceFieldResultNumeric> | undefined
nutrientAdvice: NutrientAdvice
dose: Dose
b_id: string
Expand Down Expand Up @@ -327,11 +327,19 @@ export function FertilizerApplicationMetricsCard({
resolve={nitrogenBalance}
>
{(resolvedNitrogenBalance) => {
const balance =
resolvedNitrogenBalance?.balance
if (!balance) {
return (
<div>
Geen balans
beschikbaar
</div>
)
}
const task =
resolvedNitrogenBalance
.balance.target -
resolvedNitrogenBalance
.balance.balance
balance.target -
balance.balance
return (
<div className="flex flex-col space-y-1">
{/* Simplified Flow (Top Section) */}
Expand Down Expand Up @@ -360,10 +368,10 @@ export function FertilizerApplicationMetricsCard({

<span className="font-semibold text-right whitespace-nowrap px-2">
{Math.round(
resolvedNitrogenBalance
.balance
balance
.supply
.total,
?.total ??
0,
)}{" "}
kg N
</span>
Expand All @@ -389,10 +397,10 @@ export function FertilizerApplicationMetricsCard({
</Tooltip>
<span className="font-semibold text-right whitespace-nowrap px-2">
{Math.round(
resolvedNitrogenBalance
.balance
balance
.removal
.total,
?.total ??
0,
)}{" "}
kg N
</span>
Expand Down Expand Up @@ -420,11 +428,11 @@ export function FertilizerApplicationMetricsCard({
</Tooltip>
<span className="font-semibold text-right whitespace-nowrap px-2">
{Math.round(
resolvedNitrogenBalance
.balance
balance
.emission
.ammonia
.total,
?.ammonia
?.total ??
0,
)}{" "}
kg N
</span>
Expand All @@ -438,9 +446,7 @@ export function FertilizerApplicationMetricsCard({
</p>
<span className="text-xl font-bold text-right whitespace-nowrap px-2">
{Math.round(
resolvedNitrogenBalance
.balance
.balance,
balance.balance,
)}{" "}
kg N
</span>
Expand All @@ -451,9 +457,7 @@ export function FertilizerApplicationMetricsCard({
</p>
<span className="font-semibold text-right whitespace-nowrap px-2">
{Math.round(
resolvedNitrogenBalance
.balance
.target,
balance.target,
)}{" "}
kg N
</span>
Expand Down
Loading