Problem
DerivedCaseValidator.CaseValidate() and DerivedCaseBuilder.CaseBuild() create
CaseChangeRuntimeSettings / CaseRelationRuntimeSettings without setting the
Namespace property. This causes EnsureNamespace(null) to return field names
unchanged (no-op per StringExtensions.EnsureNamespace).
Impact: Any CaseValidate or CaseBuild script that uses short field names
(e.g. HasField("SvNummer"), GetValue("Salary"), InitValue("Target", v))
silently fails — field lookups return false or null because Case.Fields
stores fully qualified names (DE.SvNummer).
This is inconsistent with PayrunProcessorRegulation, which correctly resolves
and sets Namespace from the derived regulation for every WageType/Collector script.
Existing CaseValidate actions were unaffected because they always passed fully
qualified names as string parameters (e.g. DEValidiereSteuerIdNummer("DE.SteuerIdNummer")).
Affected code paths
| Class |
Method |
Settings type |
DerivedCaseValidator |
CaseValidate |
CaseChangeRuntimeSettings |
DerivedCaseValidator |
CaseRelationValidate |
CaseRelationRuntimeSettings |
DerivedCaseBuilder |
CaseBuild |
CaseChangeRuntimeSettings |
DerivedCaseBuilder |
CaseRelationBuild |
CaseRelationRuntimeSettings |
Fix
- Load derived regulations once in the outer async entry point
- Pass them through the recursion
- In each script loop, resolve
settings.Namespace from the DerivedCase.RegulationId
(or DerivedCaseRelation.RegulationId)
- Change
PayrollRuntimeSettings.Namespace from init to set
Regression risk
Low — adds the namespace that was always expected but never set.
Existing scripts that use fully qualified names are unaffected.
Problem
DerivedCaseValidator.CaseValidate()andDerivedCaseBuilder.CaseBuild()createCaseChangeRuntimeSettings/CaseRelationRuntimeSettingswithout setting theNamespaceproperty. This causesEnsureNamespace(null)to return field namesunchanged (no-op per
StringExtensions.EnsureNamespace).Impact: Any CaseValidate or CaseBuild script that uses short field names
(e.g.
HasField("SvNummer"),GetValue("Salary"),InitValue("Target", v))silently fails — field lookups return
falseornullbecauseCase.Fieldsstores fully qualified names (
DE.SvNummer).This is inconsistent with
PayrunProcessorRegulation, which correctly resolvesand sets
Namespacefrom the derived regulation for every WageType/Collector script.Existing CaseValidate actions were unaffected because they always passed fully
qualified names as string parameters (e.g.
DEValidiereSteuerIdNummer("DE.SteuerIdNummer")).Affected code paths
DerivedCaseValidatorCaseValidateCaseChangeRuntimeSettingsDerivedCaseValidatorCaseRelationValidateCaseRelationRuntimeSettingsDerivedCaseBuilderCaseBuildCaseChangeRuntimeSettingsDerivedCaseBuilderCaseRelationBuildCaseRelationRuntimeSettingsFix
settings.Namespacefrom theDerivedCase.RegulationId(or
DerivedCaseRelation.RegulationId)PayrollRuntimeSettings.NamespacefrominittosetRegression risk
Low — adds the namespace that was always expected but never set.
Existing scripts that use fully qualified names are unaffected.