From f3cc7906590ee78c101c80ca8d9f3df441f3ae8a Mon Sep 17 00:00:00 2001 From: boris Date: Mon, 7 Sep 2026 19:38:28 +0800 Subject: [PATCH] fix(data): reject normalized reserved adjustment keys --- crates/fidc-core/src/data.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/crates/fidc-core/src/data.rs b/crates/fidc-core/src/data.rs index cf978ae..de3a361 100644 --- a/crates/fidc-core/src/data.rs +++ b/crates/fidc-core/src/data.rs @@ -4403,6 +4403,16 @@ fn normalize_factor_snapshots( } }) .collect(); + if snapshot + .extra_factors + .contains_key(BACKWARD_ADJUSTMENT_FACTOR_FIELD) + { + return Err(DataSetError::ReservedTypedFactorInExtraMap { + date: snapshot.date, + symbol: snapshot.symbol, + field: BACKWARD_ADJUSTMENT_FACTOR_FIELD, + }); + } Ok(snapshot) }) .collect() @@ -6349,6 +6359,21 @@ mod tests { normalize_factor_snapshots(vec![snapshot(Some(0.0), BTreeMap::new())]), Err(DataSetError::InvalidBackwardAdjustmentFactor { .. }) )); + for field in [ + " ADJUSTMENT_FACTOR_BACKWARD1 ", + "\"adjustment_factor_backward1\"", + "'adjustment_factor_backward1'", + ] { + for typed_value in [None, Some(1.0)] { + assert!(matches!( + normalize_factor_snapshots(vec![snapshot( + typed_value, + BTreeMap::from([(Cow::Borrowed(field), 2.0)]), + )]), + Err(DataSetError::ReservedTypedFactorInExtraMap { .. }) + ), "reserved alias accepted: {field}"); + } + } } #[test]