For the complete documentation index, see llms.txt. This page is also available as Markdown.

📘Release History


V2.7

Created: 2026-08-07

  • Fixed missing overnight shift hours in incremental syncs by padding the retrospective time window by an extra day


V2.6

Created: 2026-08-06

feat: ingest job descriptions via a new jobs stream (CS906) UKG Pro carries only the job code on timecard data, where Kronos carried the full description. This adds a jobs stream materialising VW_JOBS, the Generic job catalogue that decodes a code into a description (RN -> REGISTERED NURSE), for the warehouse to join against timecard rows.

  • src/schemas.py: jobs_schema(), 11 fields mirroring the API's native camelCase. Verified live to declare exactly the field set the API returns.

  • src/plugin.py: _fetch_jobs performs one unpaginated request for the whole catalogue (668 jobs in Calvary's tenant) and emits the current revision of every job, retired ones included, so historical timecards still resolve. FULL_REFRESH only with primary key id — a small reference table does not justify the watermark machinery of ADRs 0002-0005.

  • A permission denial (403 WFP-90005) is tolerated with a warning and zero rows rather than raised: a raising worker sets the shared cancellation token and would abort every other in-flight stream. Jobs access is granted per tenant, so production can legitimately deny while UAT succeeds. Detection is on the structured errorCode, not a body substring; an unrecognised 403 still raises.

  • A 401 is recovered in place, since a single-request fetch cannot benefit from the chunk-boundary refresh (cf. ADR 0009).

  • sync_inbound now skips employee enumeration when no enabled stream needs it, so a hyperfind failure cannot stop static reference data from refreshing.

  • ADR 0008 records the decision and the rejected alternative: the description is also reachable for free via CORE_GENERICJOB_DESCRIPTION on the existing timecard feed, but that is a projection of the fact table and structurally cannot describe a job nobody has worked.

  • CONTEXT.md: Generic job, Job revision, Org job, and a note that the segment feed carries a bare job code while the transaction and workload feeds carry full org paths, so they require different joins. 15 tests; full suite 207 passed / 17 skipped.

  • Added a new 'jobs' stream which ingests the UKG Pro job catalogue via full refresh


V2.5

Created: 2026-08-04

  • Fixed an issue where timecard_spans and schedules experienced data loss due to token expiry


V2.4

Created: 2026-07-23

  • Improved the workload_planner stream fetch pattern with early stopping logic

  • Added additional checks for sync cancellation so that cancelled runs respond more immediately


V2.3

Created: 2026-07-15

  • Flattened the timecards and timecard_spans stream by expanding the JSON-schema


V2.2

Created: 2026-07-13

  • Timecards: flattened costCenter and labor-category fields into dedicated columns (e.g. costCenterQualifier, awardClassificationQualifier, allowanceTriggerQualifier); the raw costCenter/laborCategories JSON columns are removed.


V2.1

Created: 2026-07-06

  • Records are now enqueued with each page of results, and checkpointed after each date chunk

  • Fixed column issues with schedule streams

  • Fixed some pay code data issues with the timecard data

  • Improved sync performance and incremental logic


V2.0

Created: 2026-06-10

  • Flattened timecards to one row per processedSegments entry


V1.5

Created: 2026-06-03

  • timecard_spans now uses the multi_read API

  • Adjusted batching


V1.4

Created: 2026-05-28

  • Fix schedule field mappings, employee enrichment, and observability


V1.3

Created: 2026-05-21

  • Fix schedule segment field names to match UKG API (orgJobRef, workruleRef, costCenter.costCenter.qualifier, laborCategories.laborString)

  • Compute HOURS from segment start/end datetimes when API omits hours field

  • Add some missing fields to employee and timecard_spans

  • Restored PAYCODENAME/PAYCODETYPE to schedules schema

  • Add INFO-level per-chunk/per-batch logs to timecards and timecard_spans


V1.2

Created: 2026-05-07

  • Added date/datetime format annotations to JSON schemas

  • Improved error messages when performing connection tests

  • Added help text for OAuth audience


V1.1

Created: 2026-05-04

  • Exposed rest_batch_size as inbound tuning parameter

  • Sync reliability improvements: retry, token refresh, date chunking, workload planner


V1.0

Created: 2026-05-01

  • Initial plugin release


Last updated