- Wage type caches —
WageTypeCycleCacheandWageTypeConsolidatedCycleCachebulk-load cycle and consolidated wage-type results once per employee when wage types are tagged via the corresponding payroll cluster sets, reducing database round-trips during payrun scripts PasswordAvailable— user API and client models expose whether a password is set without transferring the hash- Exchange import — payrun jobs that end with
Abort/CancelandCompletedJobStatus=Abortare treated as an expected test outcome during import, not as a hard import failure
Database Update required — run the Update-Model scripts (SQL Server and MySQL) from schema 0.9.7 → 1.0.0 before starting the backend. The nine Payroll columns ClusterSetCase, ClusterSetCaseField, ClusterSetCollector, ClusterSetCollectorRetro, ClusterSetWageType, ClusterSetWageTypeRetro, ClusterSetCaseValue, ClusterSetWageTypePeriod, and ClusterSetWageTypeLookup are replaced by a single ClusterSet JSON column; existing data is migrated in the scripts. The persistence layer enforces minimum schema version 1.0.0 — the backend will not start against a pre-1.0.0 database.
New Features
WageTypeCycleCache— for wage types tagged viaPayroll.ClusterSet.ClusterSetWageTypeCycle,GetWageTypeResultsdata for the cycle/YTD path is loaded in bulk once per employee at payrun employee start; the cache is reset and reloaded before retro re-evaluationWageTypeConsolidatedCycleCache— for wage types tagged for the consolidated cache,GetConsolidatedWageTypeResultsis bulk-loaded once per employee; calls withnoRetro=truebypass the cache by designPasswordAvailablein the user API response — derived from the stored hash in memory; the password hash remains[JsonIgnore]on the model
Bug Fixes
- ClusterSet persistence — pre-serialize
ClusterSetas PascalCase JSON before write to avoidsql_variantconversion issues; registerJsonObjectTypeHandler<PayrollClusterSets>for correct Dapper deserialization on read - Payrun jobs —
CompletedJobStatus=Abortis no longer applied to successfully completed jobs; abort remains reserved for processor failures and expected-abort test scenarios PayrunProcessorSettings— XML documentation forMaxParallelPersistdefault corrected (validated by load tests)
Breaking Change
- Database schema 1.0.0 —
Payrollcluster-set columns consolidated into oneClusterSetJSON column; breaking change (see Database Update above)
- Client.Core —
IPayroll/Payroll: individualClusterSet*string properties replaced by a singleClusterSetproperty of typePayrollClusterSetsbreaking change;PasswordAvailableonIUser/User; ExchangeImport honors intentional abort status for test expectations; project references use$(Version)for PE dependencies; release workflow no longer patches versions withsed - Client.Scripting — fixed double-encoding of strings in
PayrunFunction; GitHub Actionspages.ymlpatches PE dependency versions before build
Breaking Change
- JSON schema (
PayrollEngine.Exchange.schema.json) — the former top-levelPayrollpropertiesclusterSetCase,clusterSetCaseField,clusterSetCollector,clusterSetCollectorRetro,clusterSetWageType,clusterSetWageTypeRetro,clusterSetCaseValue, andclusterSetWageTypePeriodare removed; the same references must appear underclusterSet(PayrollClusterSets). Existing payroll JSON files used for import/export must be migrated — breaking change