@elaraai/e3-ui 1.0.85 → 1.0.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bind/data-indexed.d.ts +159 -0
- package/dist/src/bind/data-indexed.d.ts.map +1 -0
- package/dist/src/bind/data-indexed.js +105 -0
- package/dist/src/bind/data-indexed.js.map +1 -0
- package/dist/src/bind/data.d.ts +5 -3
- package/dist/src/bind/data.d.ts.map +1 -1
- package/dist/src/bind/data.js +6 -0
- package/dist/src/bind/data.js.map +1 -1
- package/dist/src/bind/record.d.ts +34 -23
- package/dist/src/bind/record.d.ts.map +1 -1
- package/dist/src/bind/record.js +46 -19
- package/dist/src/bind/record.js.map +1 -1
- package/dist/src/calendar/index.d.ts +2923 -0
- package/dist/src/calendar/index.d.ts.map +1 -0
- package/dist/src/calendar/index.js +135 -0
- package/dist/src/calendar/index.js.map +1 -0
- package/dist/src/decision/queue.d.ts +3 -3
- package/dist/src/decision/queue.d.ts.map +1 -1
- package/dist/src/decision/queue.js +2 -2
- package/dist/src/decision/queue.js.map +1 -1
- package/dist/src/decision/types.d.ts +4 -0
- package/dist/src/decision/types.d.ts.map +1 -1
- package/dist/src/decision/types.js +4 -0
- package/dist/src/decision/types.js.map +1 -1
- package/dist/src/flowchart/canvas.d.ts +114 -0
- package/dist/src/flowchart/canvas.d.ts.map +1 -0
- package/dist/src/flowchart/canvas.js +84 -0
- package/dist/src/flowchart/canvas.js.map +1 -0
- package/dist/src/flowchart/flowchart.d.ts +79 -0
- package/dist/src/flowchart/flowchart.d.ts.map +1 -0
- package/dist/src/flowchart/flowchart.js +9 -0
- package/dist/src/flowchart/flowchart.js.map +1 -0
- package/dist/src/flowchart/index.d.ts +305 -0
- package/dist/src/flowchart/index.d.ts.map +1 -0
- package/dist/src/flowchart/index.js +267 -0
- package/dist/src/flowchart/index.js.map +1 -0
- package/dist/src/flowchart/library.d.ts +720 -0
- package/dist/src/flowchart/library.d.ts.map +1 -0
- package/dist/src/flowchart/library.js +611 -0
- package/dist/src/flowchart/library.js.map +1 -0
- package/dist/src/flowchart/over.d.ts +234 -0
- package/dist/src/flowchart/over.d.ts.map +1 -0
- package/dist/src/flowchart/over.js +220 -0
- package/dist/src/flowchart/over.js.map +1 -0
- package/dist/src/flowchart/patch.d.ts +64 -0
- package/dist/src/flowchart/patch.d.ts.map +1 -0
- package/dist/src/flowchart/patch.js +67 -0
- package/dist/src/flowchart/patch.js.map +1 -0
- package/dist/src/flowchart/payload.d.ts +8220 -0
- package/dist/src/flowchart/payload.d.ts.map +1 -0
- package/dist/src/flowchart/payload.js +521 -0
- package/dist/src/flowchart/payload.js.map +1 -0
- package/dist/src/flowchart/types.d.ts +393 -0
- package/dist/src/flowchart/types.d.ts.map +1 -0
- package/dist/src/flowchart/types.js +216 -0
- package/dist/src/flowchart/types.js.map +1 -0
- package/dist/src/flowchart/values.d.ts +267 -0
- package/dist/src/flowchart/values.d.ts.map +1 -0
- package/dist/src/flowchart/values.js +216 -0
- package/dist/src/flowchart/values.js.map +1 -0
- package/dist/src/flowchart/window.d.ts +521 -0
- package/dist/src/flowchart/window.d.ts.map +1 -0
- package/dist/src/flowchart/window.js +69 -0
- package/dist/src/flowchart/window.js.map +1 -0
- package/dist/src/index.d.ts +25 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +48 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +35 -3
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +72 -3
- package/dist/src/internal.js.map +1 -1
- package/dist/src/plan/assemble.d.ts +2224 -0
- package/dist/src/plan/assemble.d.ts.map +1 -0
- package/dist/src/plan/assemble.js +210 -0
- package/dist/src/plan/assemble.js.map +1 -0
- package/dist/src/plan/builders.d.ts +790 -0
- package/dist/src/plan/builders.d.ts.map +1 -0
- package/dist/src/plan/builders.js +749 -0
- package/dist/src/plan/builders.js.map +1 -0
- package/dist/src/plan/event-rows.d.ts +2565 -0
- package/dist/src/plan/event-rows.d.ts.map +1 -0
- package/dist/src/plan/event-rows.js +689 -0
- package/dist/src/plan/event-rows.js.map +1 -0
- package/dist/src/plan/factories.d.ts +458 -0
- package/dist/src/plan/factories.d.ts.map +1 -0
- package/dist/src/plan/factories.js +484 -0
- package/dist/src/plan/factories.js.map +1 -0
- package/dist/src/plan/index.d.ts +672 -0
- package/dist/src/plan/index.d.ts.map +1 -0
- package/dist/src/plan/index.js +532 -0
- package/dist/src/plan/index.js.map +1 -0
- package/dist/src/plan/ir.d.ts +2594 -0
- package/dist/src/plan/ir.d.ts.map +1 -0
- package/dist/src/plan/ir.js +78 -0
- package/dist/src/plan/ir.js.map +1 -0
- package/dist/src/plan/library.d.ts +772 -0
- package/dist/src/plan/library.d.ts.map +1 -0
- package/dist/src/plan/library.js +424 -0
- package/dist/src/plan/library.js.map +1 -0
- package/dist/src/plan/ordered-source.d.ts +27 -0
- package/dist/src/plan/ordered-source.d.ts.map +1 -0
- package/dist/src/plan/ordered-source.js +48 -0
- package/dist/src/plan/ordered-source.js.map +1 -0
- package/dist/src/plan/over.d.ts +247 -0
- package/dist/src/plan/over.d.ts.map +1 -0
- package/dist/src/plan/over.js +266 -0
- package/dist/src/plan/over.js.map +1 -0
- package/dist/src/plan/pick.d.ts +78 -0
- package/dist/src/plan/pick.d.ts.map +1 -0
- package/dist/src/plan/pick.js +146 -0
- package/dist/src/plan/pick.js.map +1 -0
- package/dist/src/plan/plan.d.ts +11611 -0
- package/dist/src/plan/plan.d.ts.map +1 -0
- package/dist/src/plan/plan.js +428 -0
- package/dist/src/plan/plan.js.map +1 -0
- package/dist/src/plan/refs.d.ts +218 -0
- package/dist/src/plan/refs.d.ts.map +1 -0
- package/dist/src/plan/refs.js +226 -0
- package/dist/src/plan/refs.js.map +1 -0
- package/dist/src/plan/root.d.ts +290 -0
- package/dist/src/plan/root.d.ts.map +1 -0
- package/dist/src/plan/root.js +463 -0
- package/dist/src/plan/root.js.map +1 -0
- package/dist/src/plan/series.d.ts +13554 -0
- package/dist/src/plan/series.d.ts.map +1 -0
- package/dist/src/plan/series.js +1921 -0
- package/dist/src/plan/series.js.map +1 -0
- package/dist/src/plan/types.d.ts +12400 -0
- package/dist/src/plan/types.d.ts.map +1 -0
- package/dist/src/plan/types.js +1335 -0
- package/dist/src/plan/types.js.map +1 -0
- package/dist/src/roster/coverage.d.ts +240 -0
- package/dist/src/roster/coverage.d.ts.map +1 -0
- package/dist/src/roster/coverage.js +109 -0
- package/dist/src/roster/coverage.js.map +1 -0
- package/dist/src/roster/index.d.ts +4028 -0
- package/dist/src/roster/index.d.ts.map +1 -0
- package/dist/src/roster/index.js +115 -0
- package/dist/src/roster/index.js.map +1 -0
- package/dist/src/roster/library.d.ts +106 -0
- package/dist/src/roster/library.d.ts.map +1 -0
- package/dist/src/roster/library.js +78 -0
- package/dist/src/roster/library.js.map +1 -0
- package/dist/src/roster/people.d.ts +50 -0
- package/dist/src/roster/people.d.ts.map +1 -0
- package/dist/src/roster/people.js +32 -0
- package/dist/src/roster/people.js.map +1 -0
- package/dist/src/roster/rules.d.ts +275 -0
- package/dist/src/roster/rules.d.ts.map +1 -0
- package/dist/src/roster/rules.js +162 -0
- package/dist/src/roster/rules.js.map +1 -0
- package/dist/src/roster/types.d.ts +672 -0
- package/dist/src/roster/types.d.ts.map +1 -0
- package/dist/src/roster/types.js +248 -0
- package/dist/src/roster/types.js.map +1 -0
- package/dist/src/roster/visibility.d.ts +66 -0
- package/dist/src/roster/visibility.d.ts.map +1 -0
- package/dist/src/roster/visibility.js +25 -0
- package/dist/src/roster/visibility.js.map +1 -0
- package/dist/src/schedule/days.d.ts +54 -0
- package/dist/src/schedule/days.d.ts.map +1 -0
- package/dist/src/schedule/days.js +68 -0
- package/dist/src/schedule/days.js.map +1 -0
- package/dist/src/schedule/events.d.ts +433 -0
- package/dist/src/schedule/events.d.ts.map +1 -0
- package/dist/src/schedule/events.js +851 -0
- package/dist/src/schedule/events.js.map +1 -0
- package/dist/src/schedule/index.d.ts +150 -0
- package/dist/src/schedule/index.d.ts.map +1 -0
- package/dist/src/schedule/index.js +132 -0
- package/dist/src/schedule/index.js.map +1 -0
- package/dist/src/schedule/library.d.ts +70 -0
- package/dist/src/schedule/library.d.ts.map +1 -0
- package/dist/src/schedule/library.js +102 -0
- package/dist/src/schedule/library.js.map +1 -0
- package/dist/src/schedule/patch.d.ts +74 -0
- package/dist/src/schedule/patch.d.ts.map +1 -0
- package/dist/src/schedule/patch.js +68 -0
- package/dist/src/schedule/patch.js.map +1 -0
- package/dist/src/schedule/record-window.d.ts +189 -0
- package/dist/src/schedule/record-window.d.ts.map +1 -0
- package/dist/src/schedule/record-window.js +95 -0
- package/dist/src/schedule/record-window.js.map +1 -0
- package/dist/src/schedule/resources.d.ts +165 -0
- package/dist/src/schedule/resources.d.ts.map +1 -0
- package/dist/src/schedule/resources.js +234 -0
- package/dist/src/schedule/resources.js.map +1 -0
- package/dist/src/schedule/templates.d.ts +47 -0
- package/dist/src/schedule/templates.d.ts.map +1 -0
- package/dist/src/schedule/templates.js +61 -0
- package/dist/src/schedule/templates.js.map +1 -0
- package/dist/src/schedule/types.d.ts +1677 -0
- package/dist/src/schedule/types.d.ts.map +1 -0
- package/dist/src/schedule/types.js +374 -0
- package/dist/src/schedule/types.js.map +1 -0
- package/dist/src/schedule/window.d.ts +154 -0
- package/dist/src/schedule/window.d.ts.map +1 -0
- package/dist/src/schedule/window.js +363 -0
- package/dist/src/schedule/window.js.map +1 -0
- package/dist/src/sheet/bridge.d.ts +385 -0
- package/dist/src/sheet/bridge.d.ts.map +1 -0
- package/dist/src/sheet/bridge.js +809 -0
- package/dist/src/sheet/bridge.js.map +1 -0
- package/dist/src/sheet/columns.d.ts +410 -0
- package/dist/src/sheet/columns.d.ts.map +1 -0
- package/dist/src/sheet/columns.js +99 -0
- package/dist/src/sheet/columns.js.map +1 -0
- package/dist/src/sheet/context-bridge.d.ts +48 -0
- package/dist/src/sheet/context-bridge.d.ts.map +1 -0
- package/dist/src/sheet/context-bridge.js +216 -0
- package/dist/src/sheet/context-bridge.js.map +1 -0
- package/dist/src/sheet/draft-bridge.d.ts +37 -0
- package/dist/src/sheet/draft-bridge.d.ts.map +1 -0
- package/dist/src/sheet/draft-bridge.js +153 -0
- package/dist/src/sheet/draft-bridge.js.map +1 -0
- package/dist/src/sheet/drafts.d.ts +14 -0
- package/dist/src/sheet/drafts.d.ts.map +1 -0
- package/dist/src/sheet/drafts.js +14 -0
- package/dist/src/sheet/drafts.js.map +1 -0
- package/dist/src/sheet/editing-bridge.d.ts +40 -0
- package/dist/src/sheet/editing-bridge.d.ts.map +1 -0
- package/dist/src/sheet/editing-bridge.js +231 -0
- package/dist/src/sheet/editing-bridge.js.map +1 -0
- package/dist/src/sheet/editing-types.d.ts +268 -0
- package/dist/src/sheet/editing-types.d.ts.map +1 -0
- package/dist/src/sheet/editing-types.js +34 -0
- package/dist/src/sheet/editing-types.js.map +1 -0
- package/dist/src/sheet/edits.d.ts +37 -0
- package/dist/src/sheet/edits.d.ts.map +1 -0
- package/dist/src/sheet/edits.js +31 -0
- package/dist/src/sheet/edits.js.map +1 -0
- package/dist/src/sheet/fields.d.ts +693 -0
- package/dist/src/sheet/fields.d.ts.map +1 -0
- package/dist/src/sheet/fields.js +280 -0
- package/dist/src/sheet/fields.js.map +1 -0
- package/dist/src/sheet/group.d.ts +165 -0
- package/dist/src/sheet/group.d.ts.map +1 -0
- package/dist/src/sheet/group.js +52 -0
- package/dist/src/sheet/group.js.map +1 -0
- package/dist/src/sheet/index.d.ts +542 -0
- package/dist/src/sheet/index.d.ts.map +1 -0
- package/dist/src/sheet/index.js +387 -0
- package/dist/src/sheet/index.js.map +1 -0
- package/dist/src/sheet/library.d.ts +284 -0
- package/dist/src/sheet/library.d.ts.map +1 -0
- package/dist/src/sheet/library.js +259 -0
- package/dist/src/sheet/library.js.map +1 -0
- package/dist/src/sheet/link.d.ts +398 -0
- package/dist/src/sheet/link.d.ts.map +1 -0
- package/dist/src/sheet/link.js +228 -0
- package/dist/src/sheet/link.js.map +1 -0
- package/dist/src/sheet/record.d.ts +75 -0
- package/dist/src/sheet/record.d.ts.map +1 -0
- package/dist/src/sheet/record.js +128 -0
- package/dist/src/sheet/record.js.map +1 -0
- package/dist/src/sheet/registers.d.ts +681 -0
- package/dist/src/sheet/registers.d.ts.map +1 -0
- package/dist/src/sheet/registers.js +671 -0
- package/dist/src/sheet/registers.js.map +1 -0
- package/dist/src/sheet/root.d.ts +329 -0
- package/dist/src/sheet/root.d.ts.map +1 -0
- package/dist/src/sheet/root.js +511 -0
- package/dist/src/sheet/root.js.map +1 -0
- package/dist/src/sheet/seed-bridge.d.ts +14 -0
- package/dist/src/sheet/seed-bridge.d.ts.map +1 -0
- package/dist/src/sheet/seed-bridge.js +51 -0
- package/dist/src/sheet/seed-bridge.js.map +1 -0
- package/dist/src/sheet/sheet.d.ts +11819 -0
- package/dist/src/sheet/sheet.d.ts.map +1 -0
- package/dist/src/sheet/sheet.js +236 -0
- package/dist/src/sheet/sheet.js.map +1 -0
- package/dist/src/sheet/sub-rows.d.ts +299 -0
- package/dist/src/sheet/sub-rows.d.ts.map +1 -0
- package/dist/src/sheet/sub-rows.js +272 -0
- package/dist/src/sheet/sub-rows.js.map +1 -0
- package/dist/src/sheet/templates.d.ts +161 -0
- package/dist/src/sheet/templates.d.ts.map +1 -0
- package/dist/src/sheet/templates.js +122 -0
- package/dist/src/sheet/templates.js.map +1 -0
- package/dist/src/sheet/transactions.d.ts +76 -0
- package/dist/src/sheet/transactions.d.ts.map +1 -0
- package/dist/src/sheet/transactions.js +40 -0
- package/dist/src/sheet/transactions.js.map +1 -0
- package/dist/src/sheet/types.d.ts +15226 -0
- package/dist/src/sheet/types.d.ts.map +1 -0
- package/dist/src/sheet/types.js +1070 -0
- package/dist/src/sheet/types.js.map +1 -0
- package/dist/src/sheet/views.d.ts +29 -0
- package/dist/src/sheet/views.d.ts.map +1 -0
- package/dist/src/sheet/views.js +43 -0
- package/dist/src/sheet/views.js.map +1 -0
- package/dist/src/studio/component.d.ts.map +1 -1
- package/dist/src/studio/component.js +11 -8
- package/dist/src/studio/component.js.map +1 -1
- package/dist/src/utils/derive.d.ts +134 -8
- package/dist/src/utils/derive.d.ts.map +1 -1
- package/dist/src/utils/derive.js +409 -7
- package/dist/src/utils/derive.js.map +1 -1
- package/dist/src/utils/ordered-source.d.ts +38 -0
- package/dist/src/utils/ordered-source.d.ts.map +1 -0
- package/dist/src/utils/ordered-source.js +45 -0
- package/dist/src/utils/ordered-source.js.map +1 -0
- package/dist/src/utils/row-inspector.d.ts +36 -0
- package/dist/src/utils/row-inspector.d.ts.map +1 -0
- package/dist/src/utils/row-inspector.js +49 -0
- package/dist/src/utils/row-inspector.js.map +1 -0
- package/dist/test/bind/data/data.examples.d.ts +21 -19
- package/dist/test/bind/data/data.examples.d.ts.map +1 -1
- package/dist/test/bind/data/data.examples.js +122 -122
- package/dist/test/bind/data/data.examples.js.map +1 -1
- package/dist/test/bind/record/record.examples.d.ts.map +1 -1
- package/dist/test/bind/record/record.examples.js +9 -9
- package/dist/test/bind/record/record.examples.js.map +1 -1
- package/dist/test/calendar/calendar-records.examples.d.ts +228 -0
- package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -0
- package/dist/test/calendar/calendar-records.examples.js +91 -0
- package/dist/test/calendar/calendar-records.examples.js.map +1 -0
- package/dist/test/calendar/calendar.examples.d.ts +776 -0
- package/dist/test/calendar/calendar.examples.d.ts.map +1 -0
- package/dist/test/calendar/calendar.examples.js +336 -0
- package/dist/test/calendar/calendar.examples.js.map +1 -0
- package/dist/test/decision/journal.examples.d.ts +28 -28
- package/dist/test/decision/journal.examples.d.ts.map +1 -1
- package/dist/test/decision/journal.examples.js +4 -4
- package/dist/test/decision/journal.examples.js.map +1 -1
- package/dist/test/decision/queue.examples.d.ts.map +1 -1
- package/dist/test/decision/queue.examples.js +5 -7
- package/dist/test/decision/queue.examples.js.map +1 -1
- package/dist/test/flowchart/flowchart.examples.d.ts +3713 -0
- package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -0
- package/dist/test/flowchart/flowchart.examples.js +465 -0
- package/dist/test/flowchart/flowchart.examples.js.map +1 -0
- package/dist/test/plan/plan-events.examples.d.ts +3666 -0
- package/dist/test/plan/plan-events.examples.d.ts.map +1 -0
- package/dist/test/plan/plan-events.examples.js +773 -0
- package/dist/test/plan/plan-events.examples.js.map +1 -0
- package/dist/test/plan/plan-records.examples.d.ts +3 -0
- package/dist/test/plan/plan-records.examples.d.ts.map +1 -0
- package/dist/test/plan/plan-records.examples.js +45 -0
- package/dist/test/plan/plan-records.examples.js.map +1 -0
- package/dist/test/plan/plan-windows.examples.d.ts +588 -0
- package/dist/test/plan/plan-windows.examples.d.ts.map +1 -0
- package/dist/test/plan/plan-windows.examples.js +170 -0
- package/dist/test/plan/plan-windows.examples.js.map +1 -0
- package/dist/test/plan/plan.examples.d.ts +8095 -0
- package/dist/test/plan/plan.examples.d.ts.map +1 -0
- package/dist/test/plan/plan.examples.js +2500 -0
- package/dist/test/plan/plan.examples.js.map +1 -0
- package/dist/test/roster/domain.examples.d.ts +367 -0
- package/dist/test/roster/domain.examples.d.ts.map +1 -0
- package/dist/test/roster/domain.examples.js +72 -0
- package/dist/test/roster/domain.examples.js.map +1 -0
- package/dist/test/roster/roster-records.examples.d.ts +729 -0
- package/dist/test/roster/roster-records.examples.d.ts.map +1 -0
- package/dist/test/roster/roster-records.examples.js +86 -0
- package/dist/test/roster/roster-records.examples.js.map +1 -0
- package/dist/test/roster/roster.examples.d.ts +750 -0
- package/dist/test/roster/roster.examples.d.ts.map +1 -0
- package/dist/test/roster/roster.examples.js +198 -0
- package/dist/test/roster/roster.examples.js.map +1 -0
- package/dist/test/roster/warehouse.d.ts +87 -0
- package/dist/test/roster/warehouse.d.ts.map +1 -0
- package/dist/test/roster/warehouse.js +883 -0
- package/dist/test/roster/warehouse.js.map +1 -0
- package/dist/test/sheet/sheet-link.examples.d.ts +7 -0
- package/dist/test/sheet/sheet-link.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet-link.examples.js +41 -0
- package/dist/test/sheet/sheet-link.examples.js.map +1 -0
- package/dist/test/sheet/sheet-records.examples.d.ts +421 -0
- package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet-records.examples.js +79 -0
- package/dist/test/sheet/sheet-records.examples.js.map +1 -0
- package/dist/test/sheet/sheet-transactions.examples.d.ts +7 -0
- package/dist/test/sheet/sheet-transactions.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet-transactions.examples.js +58 -0
- package/dist/test/sheet/sheet-transactions.examples.js.map +1 -0
- package/dist/test/sheet/sheet.examples.d.ts +5562 -0
- package/dist/test/sheet/sheet.examples.d.ts.map +1 -0
- package/dist/test/sheet/sheet.examples.js +1178 -0
- package/dist/test/sheet/sheet.examples.js.map +1 -0
- package/dist/test/studio/studio.examples.d.ts.map +1 -1
- package/dist/test/studio/studio.examples.js +11 -11
- package/dist/test/studio/studio.examples.js.map +1 -1
- package/package.json +12 -9
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
import { ArrayType, FloatType, OptionType, StringType, StructType } from "@elaraai/east";
|
|
6
|
+
/** Rest before and after an assignment, in hours. Infinity means no neighbouring assignment in this week. @internal */
|
|
7
|
+
export declare const RosterRestType: StructType<{
|
|
8
|
+
readonly before: FloatType;
|
|
9
|
+
readonly after: FloatType;
|
|
10
|
+
readonly minimum: FloatType;
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Measures rest against adjacent days within the supplied week.
|
|
14
|
+
* @param assignment - The assignment or candidate placement
|
|
15
|
+
* @param id - Its identifier, excluded from comparisons
|
|
16
|
+
* @param week - The drafted week
|
|
17
|
+
* @param context - Reference data defining shift times
|
|
18
|
+
* @returns Rest before, after and the smaller of the two
|
|
19
|
+
* @remarks Start offsets move the entire shift, while overtime extends its end. This same calculation checks prospective drops and existing assignments.
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export declare const rosterRest: import("@elaraai/east").CallableFunctionExpr<[StructType<{
|
|
23
|
+
readonly slot: StructType<{
|
|
24
|
+
readonly day: import("@elaraai/east").IntegerType;
|
|
25
|
+
readonly group: StringType;
|
|
26
|
+
readonly shift: StringType;
|
|
27
|
+
}>;
|
|
28
|
+
readonly who: import("@elaraai/east").VariantType<{
|
|
29
|
+
readonly person: StringType;
|
|
30
|
+
readonly request: StringType;
|
|
31
|
+
}>;
|
|
32
|
+
readonly position: StringType;
|
|
33
|
+
readonly activity: OptionType<StringType>;
|
|
34
|
+
readonly offset: FloatType;
|
|
35
|
+
readonly overtime: FloatType;
|
|
36
|
+
readonly agreed: OptionType<import("@elaraai/east").BooleanType>;
|
|
37
|
+
}>, StringType, StructType<{
|
|
38
|
+
readonly status: import("@elaraai/east").VariantType<{
|
|
39
|
+
readonly draft: import("@elaraai/east").NullType;
|
|
40
|
+
readonly published: StructType<{
|
|
41
|
+
readonly at: import("@elaraai/east").DateTimeType;
|
|
42
|
+
}>;
|
|
43
|
+
}>;
|
|
44
|
+
readonly assignments: import("@elaraai/east").DictType<StringType, StructType<{
|
|
45
|
+
readonly slot: StructType<{
|
|
46
|
+
readonly day: import("@elaraai/east").IntegerType;
|
|
47
|
+
readonly group: StringType;
|
|
48
|
+
readonly shift: StringType;
|
|
49
|
+
}>;
|
|
50
|
+
readonly who: import("@elaraai/east").VariantType<{
|
|
51
|
+
readonly person: StringType;
|
|
52
|
+
readonly request: StringType;
|
|
53
|
+
}>;
|
|
54
|
+
readonly position: StringType;
|
|
55
|
+
readonly activity: OptionType<StringType>;
|
|
56
|
+
readonly offset: FloatType;
|
|
57
|
+
readonly overtime: FloatType;
|
|
58
|
+
readonly agreed: OptionType<import("@elaraai/east").BooleanType>;
|
|
59
|
+
}>>;
|
|
60
|
+
readonly requirements: import("@elaraai/east").DictType<StructType<{
|
|
61
|
+
readonly day: import("@elaraai/east").IntegerType;
|
|
62
|
+
readonly group: StringType;
|
|
63
|
+
readonly shift: StringType;
|
|
64
|
+
}>, StructType<{
|
|
65
|
+
readonly positions: import("@elaraai/east").IntegerType;
|
|
66
|
+
readonly hours: import("@elaraai/east").DictType<StringType, FloatType>;
|
|
67
|
+
}>>;
|
|
68
|
+
readonly dismissed: import("@elaraai/east").SetType<StringType>;
|
|
69
|
+
}>, StructType<{
|
|
70
|
+
readonly people: import("@elaraai/east").DictType<StringType, StructType<{
|
|
71
|
+
readonly key: StringType;
|
|
72
|
+
readonly name: StringType;
|
|
73
|
+
readonly group: StringType;
|
|
74
|
+
readonly position: StringType;
|
|
75
|
+
readonly skills: import("@elaraai/east").SetType<StringType>;
|
|
76
|
+
readonly contract: FloatType;
|
|
77
|
+
readonly agency: import("@elaraai/east").BooleanType;
|
|
78
|
+
readonly trainer: import("@elaraai/east").BooleanType;
|
|
79
|
+
readonly trainee: import("@elaraai/east").BooleanType;
|
|
80
|
+
readonly usual: OptionType<StringType>;
|
|
81
|
+
}>>;
|
|
82
|
+
readonly groups: ArrayType<StructType<{
|
|
83
|
+
readonly key: StringType;
|
|
84
|
+
readonly label: StringType;
|
|
85
|
+
readonly skills: ArrayType<StructType<{
|
|
86
|
+
readonly key: StringType;
|
|
87
|
+
readonly label: StringType;
|
|
88
|
+
readonly code: StringType;
|
|
89
|
+
}>>;
|
|
90
|
+
}>>;
|
|
91
|
+
readonly duties: ArrayType<StructType<{
|
|
92
|
+
readonly key: StringType;
|
|
93
|
+
readonly label: StringType;
|
|
94
|
+
readonly code: StringType;
|
|
95
|
+
}>>;
|
|
96
|
+
readonly shifts: ArrayType<StructType<{
|
|
97
|
+
readonly key: StringType;
|
|
98
|
+
readonly label: StringType;
|
|
99
|
+
readonly code: StringType;
|
|
100
|
+
readonly start: StructType<{
|
|
101
|
+
readonly hour: import("@elaraai/east").IntegerType;
|
|
102
|
+
readonly minute: import("@elaraai/east").IntegerType;
|
|
103
|
+
}>;
|
|
104
|
+
readonly hours: FloatType;
|
|
105
|
+
}>>;
|
|
106
|
+
readonly positions: ArrayType<StructType<{
|
|
107
|
+
readonly key: StringType;
|
|
108
|
+
readonly label: StringType;
|
|
109
|
+
readonly code: StringType;
|
|
110
|
+
readonly lead: import("@elaraai/east").BooleanType;
|
|
111
|
+
}>>;
|
|
112
|
+
readonly agencies: ArrayType<StructType<{
|
|
113
|
+
readonly key: StringType;
|
|
114
|
+
readonly name: StringType;
|
|
115
|
+
}>>;
|
|
116
|
+
readonly rules: StructType<{
|
|
117
|
+
readonly rest: FloatType;
|
|
118
|
+
readonly lead: import("@elaraai/east").BooleanType;
|
|
119
|
+
readonly trainer: import("@elaraai/east").BooleanType;
|
|
120
|
+
readonly skill: import("@elaraai/east").BooleanType;
|
|
121
|
+
readonly agree: import("@elaraai/east").BooleanType;
|
|
122
|
+
}>;
|
|
123
|
+
readonly costs: OptionType<StructType<{
|
|
124
|
+
readonly currency: StringType;
|
|
125
|
+
readonly rates: StructType<{
|
|
126
|
+
readonly permanent: FloatType;
|
|
127
|
+
readonly overtime: FloatType;
|
|
128
|
+
readonly agency: FloatType;
|
|
129
|
+
}>;
|
|
130
|
+
readonly budget: OptionType<FloatType>;
|
|
131
|
+
}>>;
|
|
132
|
+
}>], StructType<{
|
|
133
|
+
readonly before: FloatType;
|
|
134
|
+
readonly after: FloatType;
|
|
135
|
+
readonly minimum: FloatType;
|
|
136
|
+
}>>;
|
|
137
|
+
/**
|
|
138
|
+
* Checks a drafted week for staffing gaps, breaches and unagreed hours.
|
|
139
|
+
* @param week - The week with draft assignments and targets
|
|
140
|
+
* @param context - Complete people and configuration
|
|
141
|
+
* @returns Issues in day, group and shift order, with actionable fixes
|
|
142
|
+
* @remarks Pure East, shared by tasks and the renderer. Rest is confined to this week. Issues explain the roster; they do not automatically block Save or Publish.
|
|
143
|
+
*/
|
|
144
|
+
export declare const rosterCheck: import("@elaraai/east").CallableFunctionExpr<[StructType<{
|
|
145
|
+
readonly status: import("@elaraai/east").VariantType<{
|
|
146
|
+
readonly draft: import("@elaraai/east").NullType;
|
|
147
|
+
readonly published: StructType<{
|
|
148
|
+
readonly at: import("@elaraai/east").DateTimeType;
|
|
149
|
+
}>;
|
|
150
|
+
}>;
|
|
151
|
+
readonly assignments: import("@elaraai/east").DictType<StringType, StructType<{
|
|
152
|
+
readonly slot: StructType<{
|
|
153
|
+
readonly day: import("@elaraai/east").IntegerType;
|
|
154
|
+
readonly group: StringType;
|
|
155
|
+
readonly shift: StringType;
|
|
156
|
+
}>;
|
|
157
|
+
readonly who: import("@elaraai/east").VariantType<{
|
|
158
|
+
readonly person: StringType;
|
|
159
|
+
readonly request: StringType;
|
|
160
|
+
}>;
|
|
161
|
+
readonly position: StringType;
|
|
162
|
+
readonly activity: OptionType<StringType>;
|
|
163
|
+
readonly offset: FloatType;
|
|
164
|
+
readonly overtime: FloatType;
|
|
165
|
+
readonly agreed: OptionType<import("@elaraai/east").BooleanType>;
|
|
166
|
+
}>>;
|
|
167
|
+
readonly requirements: import("@elaraai/east").DictType<StructType<{
|
|
168
|
+
readonly day: import("@elaraai/east").IntegerType;
|
|
169
|
+
readonly group: StringType;
|
|
170
|
+
readonly shift: StringType;
|
|
171
|
+
}>, StructType<{
|
|
172
|
+
readonly positions: import("@elaraai/east").IntegerType;
|
|
173
|
+
readonly hours: import("@elaraai/east").DictType<StringType, FloatType>;
|
|
174
|
+
}>>;
|
|
175
|
+
readonly dismissed: import("@elaraai/east").SetType<StringType>;
|
|
176
|
+
}>, StructType<{
|
|
177
|
+
readonly people: import("@elaraai/east").DictType<StringType, StructType<{
|
|
178
|
+
readonly key: StringType;
|
|
179
|
+
readonly name: StringType;
|
|
180
|
+
readonly group: StringType;
|
|
181
|
+
readonly position: StringType;
|
|
182
|
+
readonly skills: import("@elaraai/east").SetType<StringType>;
|
|
183
|
+
readonly contract: FloatType;
|
|
184
|
+
readonly agency: import("@elaraai/east").BooleanType;
|
|
185
|
+
readonly trainer: import("@elaraai/east").BooleanType;
|
|
186
|
+
readonly trainee: import("@elaraai/east").BooleanType;
|
|
187
|
+
readonly usual: OptionType<StringType>;
|
|
188
|
+
}>>;
|
|
189
|
+
readonly groups: ArrayType<StructType<{
|
|
190
|
+
readonly key: StringType;
|
|
191
|
+
readonly label: StringType;
|
|
192
|
+
readonly skills: ArrayType<StructType<{
|
|
193
|
+
readonly key: StringType;
|
|
194
|
+
readonly label: StringType;
|
|
195
|
+
readonly code: StringType;
|
|
196
|
+
}>>;
|
|
197
|
+
}>>;
|
|
198
|
+
readonly duties: ArrayType<StructType<{
|
|
199
|
+
readonly key: StringType;
|
|
200
|
+
readonly label: StringType;
|
|
201
|
+
readonly code: StringType;
|
|
202
|
+
}>>;
|
|
203
|
+
readonly shifts: ArrayType<StructType<{
|
|
204
|
+
readonly key: StringType;
|
|
205
|
+
readonly label: StringType;
|
|
206
|
+
readonly code: StringType;
|
|
207
|
+
readonly start: StructType<{
|
|
208
|
+
readonly hour: import("@elaraai/east").IntegerType;
|
|
209
|
+
readonly minute: import("@elaraai/east").IntegerType;
|
|
210
|
+
}>;
|
|
211
|
+
readonly hours: FloatType;
|
|
212
|
+
}>>;
|
|
213
|
+
readonly positions: ArrayType<StructType<{
|
|
214
|
+
readonly key: StringType;
|
|
215
|
+
readonly label: StringType;
|
|
216
|
+
readonly code: StringType;
|
|
217
|
+
readonly lead: import("@elaraai/east").BooleanType;
|
|
218
|
+
}>>;
|
|
219
|
+
readonly agencies: ArrayType<StructType<{
|
|
220
|
+
readonly key: StringType;
|
|
221
|
+
readonly name: StringType;
|
|
222
|
+
}>>;
|
|
223
|
+
readonly rules: StructType<{
|
|
224
|
+
readonly rest: FloatType;
|
|
225
|
+
readonly lead: import("@elaraai/east").BooleanType;
|
|
226
|
+
readonly trainer: import("@elaraai/east").BooleanType;
|
|
227
|
+
readonly skill: import("@elaraai/east").BooleanType;
|
|
228
|
+
readonly agree: import("@elaraai/east").BooleanType;
|
|
229
|
+
}>;
|
|
230
|
+
readonly costs: OptionType<StructType<{
|
|
231
|
+
readonly currency: StringType;
|
|
232
|
+
readonly rates: StructType<{
|
|
233
|
+
readonly permanent: FloatType;
|
|
234
|
+
readonly overtime: FloatType;
|
|
235
|
+
readonly agency: FloatType;
|
|
236
|
+
}>;
|
|
237
|
+
readonly budget: OptionType<FloatType>;
|
|
238
|
+
}>>;
|
|
239
|
+
}>], ArrayType<StructType<{
|
|
240
|
+
readonly kind: import("@elaraai/east").VariantType<{
|
|
241
|
+
readonly breach: import("@elaraai/east").NullType;
|
|
242
|
+
readonly gap: import("@elaraai/east").NullType;
|
|
243
|
+
readonly agree: import("@elaraai/east").NullType;
|
|
244
|
+
readonly proposal: import("@elaraai/east").NullType;
|
|
245
|
+
}>;
|
|
246
|
+
readonly tone: import("@elaraai/east").VariantType<{
|
|
247
|
+
readonly success: import("@elaraai/east").NullType;
|
|
248
|
+
readonly warning: import("@elaraai/east").NullType;
|
|
249
|
+
readonly danger: import("@elaraai/east").NullType;
|
|
250
|
+
readonly info: import("@elaraai/east").NullType;
|
|
251
|
+
readonly neutral: import("@elaraai/east").NullType;
|
|
252
|
+
}>;
|
|
253
|
+
readonly title: StringType;
|
|
254
|
+
readonly detail: StringType;
|
|
255
|
+
readonly slot: OptionType<StructType<{
|
|
256
|
+
readonly day: import("@elaraai/east").IntegerType;
|
|
257
|
+
readonly group: StringType;
|
|
258
|
+
readonly shift: StringType;
|
|
259
|
+
}>>;
|
|
260
|
+
readonly assignment: OptionType<StringType>;
|
|
261
|
+
readonly flag: OptionType<StringType>;
|
|
262
|
+
readonly fix: OptionType<import("@elaraai/east").VariantType<{
|
|
263
|
+
readonly request: StringType;
|
|
264
|
+
readonly agree: import("@elaraai/east").NullType;
|
|
265
|
+
readonly accept: StringType;
|
|
266
|
+
readonly move: StringType;
|
|
267
|
+
readonly start: FloatType;
|
|
268
|
+
readonly find: import("@elaraai/east").VariantType<{
|
|
269
|
+
readonly leads: import("@elaraai/east").NullType;
|
|
270
|
+
readonly trainers: import("@elaraai/east").NullType;
|
|
271
|
+
readonly skill: StringType;
|
|
272
|
+
}>;
|
|
273
|
+
}>>;
|
|
274
|
+
}>>>;
|
|
275
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/roster/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAQ,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAuB,MAAM,eAAe,CAAC;AAIpH,uHAAuH;AACvH,eAAO,MAAM,cAAc;;;;EAA0E,CAAC;AAEtG;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuBrB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmHtB,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
import { ArrayType, East, FloatType, OptionType, StringType, StructType, none, some, variant } from "@elaraai/east";
|
|
6
|
+
import { rosterCoverage } from "./coverage.js";
|
|
7
|
+
import { RosterAssignmentType, RosterContextType, RosterFixType, RosterIssueType, RosterSlotType, RosterWeekType } from "./types.js";
|
|
8
|
+
/** Rest before and after an assignment, in hours. Infinity means no neighbouring assignment in this week. @internal */
|
|
9
|
+
export const RosterRestType = StructType({ before: FloatType, after: FloatType, minimum: FloatType });
|
|
10
|
+
/**
|
|
11
|
+
* Measures rest against adjacent days within the supplied week.
|
|
12
|
+
* @param assignment - The assignment or candidate placement
|
|
13
|
+
* @param id - Its identifier, excluded from comparisons
|
|
14
|
+
* @param week - The drafted week
|
|
15
|
+
* @param context - Reference data defining shift times
|
|
16
|
+
* @returns Rest before, after and the smaller of the two
|
|
17
|
+
* @remarks Start offsets move the entire shift, while overtime extends its end. This same calculation checks prospective drops and existing assignments.
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export const rosterRest = East.function([RosterAssignmentType, StringType, RosterWeekType, RosterContextType], RosterRestType, ($, assignment, id, week, context) => {
|
|
21
|
+
const before = $.let(Infinity, FloatType);
|
|
22
|
+
const after = $.let(Infinity, FloatType);
|
|
23
|
+
const shifts = $.const(context.shifts.toDict((_$, shift) => shift.key, (_$, shift) => shift));
|
|
24
|
+
$.if(assignment.who.hasTag("person").and(() => shifts.has(assignment.slot.shift)), $ => {
|
|
25
|
+
const shift = $.const(shifts.get(assignment.slot.shift));
|
|
26
|
+
const start = $.const(shift.start.hour.toFloat().add(shift.start.minute.toFloat().divide(60.0)).add(assignment.offset));
|
|
27
|
+
const end = $.const(start.add(shift.hours).add(assignment.overtime));
|
|
28
|
+
$.for(week.assignments, ($, other, key) => {
|
|
29
|
+
$.if(East.notEqual(key, id).and(() => East.equal(other.who, assignment.who)).and(() => shifts.has(other.slot.shift)), $ => {
|
|
30
|
+
const otherShift = $.const(shifts.get(other.slot.shift));
|
|
31
|
+
const otherStart = $.const(otherShift.start.hour.toFloat().add(otherShift.start.minute.toFloat().divide(60.0)).add(other.offset));
|
|
32
|
+
const otherEnd = $.const(otherStart.add(otherShift.hours).add(other.overtime));
|
|
33
|
+
$.if(East.equal(other.slot.day, assignment.slot.day.subtract(1n)), $ => {
|
|
34
|
+
$.assign(before, East.min(before, start.add(24.0).subtract(otherEnd)));
|
|
35
|
+
});
|
|
36
|
+
$.if(East.equal(other.slot.day, assignment.slot.day.add(1n)), $ => {
|
|
37
|
+
$.assign(after, East.min(after, otherStart.add(24.0).subtract(end)));
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
return { before, after, minimum: East.min(before, after) };
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Checks a drafted week for staffing gaps, breaches and unagreed hours.
|
|
46
|
+
* @param week - The week with draft assignments and targets
|
|
47
|
+
* @param context - Complete people and configuration
|
|
48
|
+
* @returns Issues in day, group and shift order, with actionable fixes
|
|
49
|
+
* @remarks Pure East, shared by tasks and the renderer. Rest is confined to this week. Issues explain the roster; they do not automatically block Save or Publish.
|
|
50
|
+
*/
|
|
51
|
+
export const rosterCheck = East.function([RosterWeekType, RosterContextType], ArrayType(RosterIssueType), ($, week, context) => {
|
|
52
|
+
const coverageOf = $.const(rosterCoverage);
|
|
53
|
+
const restOf = $.const(rosterRest);
|
|
54
|
+
const coverage = $.const(coverageOf(week, context));
|
|
55
|
+
const issues = $.let([], ArrayType(RosterIssueType));
|
|
56
|
+
$.for(East.Array.range(0n, 7n), ($, day) => {
|
|
57
|
+
$.for(context.groups, ($, group) => {
|
|
58
|
+
$.for(context.shifts, ($, shift) => {
|
|
59
|
+
const slot = $.const({ day, group: group.key, shift: shift.key }, RosterSlotType);
|
|
60
|
+
const c = $.const(coverage.get(slot));
|
|
61
|
+
const location = $.const(East.str `${group.label} · ${shift.label}`);
|
|
62
|
+
const assignments = $.const(week.assignments.filter((_$, a) => East.equal(a.slot, slot)));
|
|
63
|
+
$.if(context.rules.lead.and(() => East.greater(c.positions, 0n)).and(() => East.greater(c.filled, 0n)).and(() => c.lead.not()), $ => {
|
|
64
|
+
$(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
|
|
65
|
+
title: East.str `No lead on ${location}`, detail: "Assign someone in a lead position",
|
|
66
|
+
slot: some(slot), assignment: none, flag: some("no lead"), fix: some(variant("find", variant("leads", null))) }));
|
|
67
|
+
});
|
|
68
|
+
$.for(assignments, ($, a, id) => {
|
|
69
|
+
$.match(a.who, { person: ($, key) => {
|
|
70
|
+
$.if(context.people.has(key), $ => {
|
|
71
|
+
const person = $.const(context.people.get(key));
|
|
72
|
+
const sameDay = $.const(week.assignments.filter((_$, other) => East.equal(other.who, a.who).and(() => East.equal(other.slot.day, day))));
|
|
73
|
+
$.if(East.greater(sameDay.size(), 1n), $ => {
|
|
74
|
+
$(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
|
|
75
|
+
title: East.str `${person.name} · double booked`, detail: East.str `${location} · on ${sameDay.size()} shifts this day`,
|
|
76
|
+
slot: some(slot), assignment: some(id), flag: some("double"), fix: none }));
|
|
77
|
+
});
|
|
78
|
+
const rest = $.const(restOf(a, id, week, context));
|
|
79
|
+
$.if(East.greater(context.rules.rest, 0.0).and(() => East.less(rest.minimum, context.rules.rest)), $ => {
|
|
80
|
+
const fix = $.let(none, OptionType(RosterFixType));
|
|
81
|
+
$.for(context.shifts, ($, alternative) => {
|
|
82
|
+
$.if(fix.hasTag("none").and(() => East.notEqual(alternative.key, shift.key)), $ => {
|
|
83
|
+
const candidate = $.const({
|
|
84
|
+
slot: { day, group: group.key, shift: alternative.key }, who: a.who,
|
|
85
|
+
position: a.position, activity: a.activity, offset: a.offset, overtime: a.overtime, agreed: a.agreed,
|
|
86
|
+
}, RosterAssignmentType);
|
|
87
|
+
$.if(East.greaterEqual(restOf(candidate, id, week, context).minimum, context.rules.rest), $ => {
|
|
88
|
+
$.assign(fix, some(variant("move", alternative.key)));
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
$.if(fix.hasTag("none").and(() => East.less(rest.before, context.rules.rest)), $ => {
|
|
93
|
+
const extra = $.const(East.Float.roundCeil(context.rules.rest.subtract(rest.before).multiply(2.0)).toFloat().divide(2.0));
|
|
94
|
+
// A later start must not fix the previous night by breaking the following one.
|
|
95
|
+
$.if(East.greaterEqual(rest.after.subtract(extra), context.rules.rest), $ => {
|
|
96
|
+
$.assign(fix, some(variant("start", a.offset.add(extra))));
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
$(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
|
|
100
|
+
title: East.str `${person.name} · ${rest.minimum} h rest`,
|
|
101
|
+
detail: East.lessEqual(rest.before, rest.after).ifElse(() => East.str `${location} · minimum ${context.rules.rest} h since the previous shift`, () => East.str `${location} · minimum ${context.rules.rest} h before the next shift`),
|
|
102
|
+
slot: some(slot), assignment: some(id), flag: some(East.str `${rest.minimum}h rest`), fix }));
|
|
103
|
+
});
|
|
104
|
+
$.if(context.rules.trainer.and(() => person.trainee).and(() => c.trainer.not()), $ => {
|
|
105
|
+
$(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
|
|
106
|
+
title: East.str `${person.name} · trainee without trainer`, detail: East.str `${location} · no trainer rostered on this shift`,
|
|
107
|
+
slot: some(slot), assignment: some(id), flag: some("trainee"), fix: some(variant("find", variant("trainers", null))) }));
|
|
108
|
+
});
|
|
109
|
+
$.if(context.rules.skill, $ => {
|
|
110
|
+
$.match(a.activity, { some: ($, activity) => {
|
|
111
|
+
$.for(group.skills, ($, skill) => {
|
|
112
|
+
$.if(East.equal(skill.key, activity).and(() => person.skills.has(activity).not()), $ => {
|
|
113
|
+
$(issues.pushLast({ kind: variant("breach", null), tone: variant("warning", null),
|
|
114
|
+
title: East.str `${person.name} · not skilled for ${skill.label}`,
|
|
115
|
+
detail: East.str `${location} · activity ${skill.code} needs the skill`,
|
|
116
|
+
slot: some(slot), assignment: some(id), flag: some("not skilled"), fix: none }));
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
} });
|
|
120
|
+
});
|
|
121
|
+
$.if(context.rules.agree.and(() => East.notEqual(a.offset, 0.0).or(() => East.notEqual(a.overtime, 0.0)))
|
|
122
|
+
.and(() => East.notEqual(a.agreed, some(true))), $ => {
|
|
123
|
+
$(issues.pushLast({ kind: variant("agree", null), tone: variant("info", null),
|
|
124
|
+
title: East.greater(a.overtime, 0.0).ifElse(() => East.str `${person.name} · +${a.overtime} h OT`, () => East.str `${person.name} · start offset ${a.offset} h`),
|
|
125
|
+
detail: East.str `${location} · not yet agreed`, slot: some(slot), assignment: some(id), flag: none,
|
|
126
|
+
fix: some(variant("agree", null)) }));
|
|
127
|
+
});
|
|
128
|
+
}).else($ => {
|
|
129
|
+
$(issues.pushLast({ kind: variant("breach", null), tone: variant("danger", null),
|
|
130
|
+
title: East.str `Unknown person · ${key}`, detail: East.str `${location} · this person is no longer in the staff source`,
|
|
131
|
+
slot: some(slot), assignment: some(id), flag: some("unknown person"), fix: none }));
|
|
132
|
+
});
|
|
133
|
+
} });
|
|
134
|
+
});
|
|
135
|
+
$.if(East.greater(c.open, 0n), $ => {
|
|
136
|
+
const fix = $.let(none, OptionType(RosterFixType));
|
|
137
|
+
$.if(East.greater(context.agencies.size(), 0n), $ => { $.assign(fix, some(variant("request", context.agencies.get(0n).key))); });
|
|
138
|
+
$(issues.pushLast({ kind: variant("gap", null), tone: variant("warning", null),
|
|
139
|
+
title: East.str `${c.open} open positions · ${location}`,
|
|
140
|
+
detail: East.str `${c.open.toFloat().multiply(shift.hours)} h unfilled · ${c.filled} of ${c.positions} positions`,
|
|
141
|
+
slot: some(slot), assignment: none, flag: some(East.str `${c.open} open`), fix }));
|
|
142
|
+
});
|
|
143
|
+
$.if(context.rules.skill.and(() => East.greater(c.filled, 0n)), $ => {
|
|
144
|
+
$.for(c.lines, ($, line) => {
|
|
145
|
+
$.if(East.greater(line.gap, 0.0), $ => {
|
|
146
|
+
$.for(group.skills, ($, skill) => {
|
|
147
|
+
$.if(East.equal(skill.key, line.skill), $ => {
|
|
148
|
+
$(issues.pushLast({ kind: variant("gap", null), tone: variant("warning", null),
|
|
149
|
+
title: East.str `${skill.label} · ${line.gap} h short`,
|
|
150
|
+
detail: East.str `${location} · ${line.capacity.unwrap("some")} h capacity of ${line.needed} h`,
|
|
151
|
+
slot: some(slot), assignment: none, flag: some("skill gap"), fix: some(variant("find", variant("skill", skill.key))) }));
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
return issues;
|
|
161
|
+
});
|
|
162
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/roster/rules.ts"],"names":[],"mappings":"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"}
|