projection0 = aq
.from(projection0_)
.groupby(["year_in", "formula"])
.orderby("input_cursor_id")
.derive({ A: (d) => aq.op.lag(d.value, 1, 0), B: (d) => d.value })
.filter((d) => d.input_cursor_id == 1)
.derive({
keep: (
d
) => {
if (d.A < 0) return Math.min(0, Math.max(d.A, d.B));
return Math.max(0, Math.min(d.A, d.B));
},
add: (d) => Math.max(0, d.B - d.A),
subtract: (d) => Math.max(0, d.A - d.B)
})
.fold(["A", "B", "keep", "add", "subtract"], { as: ["partition", "value"] })