@kernhq/module-hr 0.19.0 → 0.20.0

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.
Files changed (40) hide show
  1. package/dist/contract/capabilities.d.ts.map +1 -1
  2. package/dist/contract/capabilities.js +29 -0
  3. package/dist/contract/capabilities.js.map +1 -1
  4. package/dist/contract/index.d.ts +1 -0
  5. package/dist/contract/index.d.ts.map +1 -1
  6. package/dist/contract/index.js +1 -0
  7. package/dist/contract/index.js.map +1 -1
  8. package/dist/contract/permissions.d.ts +2 -2
  9. package/dist/contract/permissions.d.ts.map +1 -1
  10. package/dist/contract/permissions.js +12 -2
  11. package/dist/contract/permissions.js.map +1 -1
  12. package/dist/contract/rosters.d.ts +183 -0
  13. package/dist/contract/rosters.d.ts.map +1 -0
  14. package/dist/contract/rosters.js +138 -0
  15. package/dist/contract/rosters.js.map +1 -0
  16. package/dist/contract/router.d.ts +621 -0
  17. package/dist/contract/router.d.ts.map +1 -1
  18. package/dist/contract/router.js +153 -1
  19. package/dist/contract/router.js.map +1 -1
  20. package/dist/server/router.d.ts +927 -0
  21. package/dist/server/router.d.ts.map +1 -1
  22. package/dist/server/router.js +462 -1
  23. package/dist/server/router.js.map +1 -1
  24. package/dist/server/schema.d.ts +727 -1
  25. package/dist/server/schema.d.ts.map +1 -1
  26. package/dist/server/schema.js +105 -0
  27. package/dist/server/schema.js.map +1 -1
  28. package/dist/server/services/rosters.d.ts +166 -0
  29. package/dist/server/services/rosters.d.ts.map +1 -0
  30. package/dist/server/services/rosters.js +268 -0
  31. package/dist/server/services/rosters.js.map +1 -0
  32. package/migrations/0012_rosters.sql +163 -0
  33. package/migrations/meta/0012_snapshot.json +4847 -0
  34. package/migrations/meta/_journal.json +7 -0
  35. package/package.json +1 -1
  36. package/src/contract/capabilities.ts +29 -0
  37. package/src/contract/index.ts +1 -0
  38. package/src/contract/permissions.ts +13 -2
  39. package/src/contract/rosters.ts +156 -0
  40. package/src/contract/router.ts +183 -0
@@ -6602,6 +6602,732 @@ export declare const regularizations: import("drizzle-orm/pg-core").PgTableWithC
6602
6602
  };
6603
6603
  dialect: "pg";
6604
6604
  }>;
6605
+ /**
6606
+ * A named shift. Early, Late, Night.
6607
+ *
6608
+ * Named rather than inlined into every rotation because coverage groups by it: "Early" in two
6609
+ * patterns has to be one column of one grid, which a wall-clock pair repeated in two jsonb blobs
6610
+ * cannot promise. Archived, never deleted — a pattern and a stored override both point at one by
6611
+ * id, and a deleted shift would leave a roster row referring to nothing.
6612
+ */
6613
+ export declare const rosterShifts: import("drizzle-orm/pg-core").PgTableWithColumns<{
6614
+ name: "roster_shifts";
6615
+ schema: string;
6616
+ columns: {
6617
+ id: import("drizzle-orm/pg-core").PgColumn<{
6618
+ name: "id";
6619
+ tableName: "roster_shifts";
6620
+ dataType: "string";
6621
+ columnType: "PgUUID";
6622
+ data: string;
6623
+ driverParam: string;
6624
+ notNull: true;
6625
+ hasDefault: true;
6626
+ isPrimaryKey: true;
6627
+ isAutoincrement: false;
6628
+ hasRuntimeDefault: false;
6629
+ enumValues: undefined;
6630
+ baseColumn: never;
6631
+ identity: undefined;
6632
+ generated: undefined;
6633
+ }, {}, {}>;
6634
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
6635
+ name: "workspace_id";
6636
+ tableName: "roster_shifts";
6637
+ dataType: "string";
6638
+ columnType: "PgUUID";
6639
+ data: string;
6640
+ driverParam: string;
6641
+ notNull: true;
6642
+ hasDefault: false;
6643
+ isPrimaryKey: false;
6644
+ isAutoincrement: false;
6645
+ hasRuntimeDefault: false;
6646
+ enumValues: undefined;
6647
+ baseColumn: never;
6648
+ identity: undefined;
6649
+ generated: undefined;
6650
+ }, {}, {}>;
6651
+ name: import("drizzle-orm/pg-core").PgColumn<{
6652
+ name: "name";
6653
+ tableName: "roster_shifts";
6654
+ dataType: "string";
6655
+ columnType: "PgText";
6656
+ data: string;
6657
+ driverParam: string;
6658
+ notNull: true;
6659
+ hasDefault: false;
6660
+ isPrimaryKey: false;
6661
+ isAutoincrement: false;
6662
+ hasRuntimeDefault: false;
6663
+ enumValues: [string, ...string[]];
6664
+ baseColumn: never;
6665
+ identity: undefined;
6666
+ generated: undefined;
6667
+ }, {}, {}>;
6668
+ code: import("drizzle-orm/pg-core").PgColumn<{
6669
+ name: "code";
6670
+ tableName: "roster_shifts";
6671
+ dataType: "string";
6672
+ columnType: "PgText";
6673
+ data: string;
6674
+ driverParam: string;
6675
+ notNull: false;
6676
+ hasDefault: false;
6677
+ isPrimaryKey: false;
6678
+ isAutoincrement: false;
6679
+ hasRuntimeDefault: false;
6680
+ enumValues: [string, ...string[]];
6681
+ baseColumn: never;
6682
+ identity: undefined;
6683
+ generated: undefined;
6684
+ }, {}, {}>;
6685
+ startTime: import("drizzle-orm/pg-core").PgColumn<{
6686
+ name: "start_time";
6687
+ tableName: "roster_shifts";
6688
+ dataType: "string";
6689
+ columnType: "PgText";
6690
+ data: string;
6691
+ driverParam: string;
6692
+ notNull: true;
6693
+ hasDefault: false;
6694
+ isPrimaryKey: false;
6695
+ isAutoincrement: false;
6696
+ hasRuntimeDefault: false;
6697
+ enumValues: [string, ...string[]];
6698
+ baseColumn: never;
6699
+ identity: undefined;
6700
+ generated: undefined;
6701
+ }, {}, {}>;
6702
+ endTime: import("drizzle-orm/pg-core").PgColumn<{
6703
+ name: "end_time";
6704
+ tableName: "roster_shifts";
6705
+ dataType: "string";
6706
+ columnType: "PgText";
6707
+ data: string;
6708
+ driverParam: string;
6709
+ notNull: true;
6710
+ hasDefault: false;
6711
+ isPrimaryKey: false;
6712
+ isAutoincrement: false;
6713
+ hasRuntimeDefault: false;
6714
+ enumValues: [string, ...string[]];
6715
+ baseColumn: never;
6716
+ identity: undefined;
6717
+ generated: undefined;
6718
+ }, {}, {}>;
6719
+ breakMinutes: import("drizzle-orm/pg-core").PgColumn<{
6720
+ name: "break_minutes";
6721
+ tableName: "roster_shifts";
6722
+ dataType: "number";
6723
+ columnType: "PgInteger";
6724
+ data: number;
6725
+ driverParam: string | number;
6726
+ notNull: true;
6727
+ hasDefault: true;
6728
+ isPrimaryKey: false;
6729
+ isAutoincrement: false;
6730
+ hasRuntimeDefault: false;
6731
+ enumValues: undefined;
6732
+ baseColumn: never;
6733
+ identity: undefined;
6734
+ generated: undefined;
6735
+ }, {}, {}>;
6736
+ graceInMinutes: import("drizzle-orm/pg-core").PgColumn<{
6737
+ name: "grace_in_minutes";
6738
+ tableName: "roster_shifts";
6739
+ dataType: "number";
6740
+ columnType: "PgInteger";
6741
+ data: number;
6742
+ driverParam: string | number;
6743
+ notNull: true;
6744
+ hasDefault: true;
6745
+ isPrimaryKey: false;
6746
+ isAutoincrement: false;
6747
+ hasRuntimeDefault: false;
6748
+ enumValues: undefined;
6749
+ baseColumn: never;
6750
+ identity: undefined;
6751
+ generated: undefined;
6752
+ }, {}, {}>;
6753
+ graceOutMinutes: import("drizzle-orm/pg-core").PgColumn<{
6754
+ name: "grace_out_minutes";
6755
+ tableName: "roster_shifts";
6756
+ dataType: "number";
6757
+ columnType: "PgInteger";
6758
+ data: number;
6759
+ driverParam: string | number;
6760
+ notNull: true;
6761
+ hasDefault: true;
6762
+ isPrimaryKey: false;
6763
+ isAutoincrement: false;
6764
+ hasRuntimeDefault: false;
6765
+ enumValues: undefined;
6766
+ baseColumn: never;
6767
+ identity: undefined;
6768
+ generated: undefined;
6769
+ }, {}, {}>;
6770
+ color: import("drizzle-orm/pg-core").PgColumn<{
6771
+ name: "color";
6772
+ tableName: "roster_shifts";
6773
+ dataType: "string";
6774
+ columnType: "PgText";
6775
+ data: string;
6776
+ driverParam: string;
6777
+ notNull: false;
6778
+ hasDefault: false;
6779
+ isPrimaryKey: false;
6780
+ isAutoincrement: false;
6781
+ hasRuntimeDefault: false;
6782
+ enumValues: [string, ...string[]];
6783
+ baseColumn: never;
6784
+ identity: undefined;
6785
+ generated: undefined;
6786
+ }, {}, {}>;
6787
+ archivedAt: import("drizzle-orm/pg-core").PgColumn<{
6788
+ name: string;
6789
+ tableName: "roster_shifts";
6790
+ dataType: "date";
6791
+ columnType: "PgTimestamp";
6792
+ data: Date;
6793
+ driverParam: string;
6794
+ notNull: false;
6795
+ hasDefault: false;
6796
+ isPrimaryKey: false;
6797
+ isAutoincrement: false;
6798
+ hasRuntimeDefault: false;
6799
+ enumValues: undefined;
6800
+ baseColumn: never;
6801
+ identity: undefined;
6802
+ generated: undefined;
6803
+ }, {}, {}>;
6804
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
6805
+ name: string;
6806
+ tableName: "roster_shifts";
6807
+ dataType: "date";
6808
+ columnType: "PgTimestamp";
6809
+ data: Date;
6810
+ driverParam: string;
6811
+ notNull: true;
6812
+ hasDefault: true;
6813
+ isPrimaryKey: false;
6814
+ isAutoincrement: false;
6815
+ hasRuntimeDefault: false;
6816
+ enumValues: undefined;
6817
+ baseColumn: never;
6818
+ identity: undefined;
6819
+ generated: undefined;
6820
+ }, {}, {}>;
6821
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
6822
+ name: string;
6823
+ tableName: "roster_shifts";
6824
+ dataType: "date";
6825
+ columnType: "PgTimestamp";
6826
+ data: Date;
6827
+ driverParam: string;
6828
+ notNull: true;
6829
+ hasDefault: true;
6830
+ isPrimaryKey: false;
6831
+ isAutoincrement: false;
6832
+ hasRuntimeDefault: false;
6833
+ enumValues: undefined;
6834
+ baseColumn: never;
6835
+ identity: undefined;
6836
+ generated: undefined;
6837
+ }, {}, {}>;
6838
+ };
6839
+ dialect: "pg";
6840
+ }>;
6841
+ /**
6842
+ * A rotation: a cycle of days, and the date the cycle starts from.
6843
+ *
6844
+ * `days` is an array of arrays of `roster_shifts.id` — one entry per day of the cycle, each holding
6845
+ * the shifts worked that day. An empty entry is a planned rest day. The cycle length is
6846
+ * `jsonb_array_length(days)` and is deliberately not a second column: two numbers that have to
6847
+ * agree is one number and a bug waiting for somebody to edit one of them.
6848
+ *
6849
+ * **Nothing here is expanded into rows.** A year of generated shifts per person is what makes a
6850
+ * roster impossible to change: moving a crew forward one day becomes a bulk rewrite with no way to
6851
+ * tell which rows a human had already corrected. What somebody works on a date is arithmetic from
6852
+ * `anchor_date`, the assignment's `cycle_offset` and this array.
6853
+ */
6854
+ export declare const rosterPatterns: import("drizzle-orm/pg-core").PgTableWithColumns<{
6855
+ name: "roster_patterns";
6856
+ schema: string;
6857
+ columns: {
6858
+ id: import("drizzle-orm/pg-core").PgColumn<{
6859
+ name: "id";
6860
+ tableName: "roster_patterns";
6861
+ dataType: "string";
6862
+ columnType: "PgUUID";
6863
+ data: string;
6864
+ driverParam: string;
6865
+ notNull: true;
6866
+ hasDefault: true;
6867
+ isPrimaryKey: true;
6868
+ isAutoincrement: false;
6869
+ hasRuntimeDefault: false;
6870
+ enumValues: undefined;
6871
+ baseColumn: never;
6872
+ identity: undefined;
6873
+ generated: undefined;
6874
+ }, {}, {}>;
6875
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
6876
+ name: "workspace_id";
6877
+ tableName: "roster_patterns";
6878
+ dataType: "string";
6879
+ columnType: "PgUUID";
6880
+ data: string;
6881
+ driverParam: string;
6882
+ notNull: true;
6883
+ hasDefault: false;
6884
+ isPrimaryKey: false;
6885
+ isAutoincrement: false;
6886
+ hasRuntimeDefault: false;
6887
+ enumValues: undefined;
6888
+ baseColumn: never;
6889
+ identity: undefined;
6890
+ generated: undefined;
6891
+ }, {}, {}>;
6892
+ name: import("drizzle-orm/pg-core").PgColumn<{
6893
+ name: "name";
6894
+ tableName: "roster_patterns";
6895
+ dataType: "string";
6896
+ columnType: "PgText";
6897
+ data: string;
6898
+ driverParam: string;
6899
+ notNull: true;
6900
+ hasDefault: false;
6901
+ isPrimaryKey: false;
6902
+ isAutoincrement: false;
6903
+ hasRuntimeDefault: false;
6904
+ enumValues: [string, ...string[]];
6905
+ baseColumn: never;
6906
+ identity: undefined;
6907
+ generated: undefined;
6908
+ }, {}, {}>;
6909
+ anchorDate: import("drizzle-orm/pg-core").PgColumn<{
6910
+ name: "anchor_date";
6911
+ tableName: "roster_patterns";
6912
+ dataType: "string";
6913
+ columnType: "PgDateString";
6914
+ data: string;
6915
+ driverParam: string;
6916
+ notNull: true;
6917
+ hasDefault: false;
6918
+ isPrimaryKey: false;
6919
+ isAutoincrement: false;
6920
+ hasRuntimeDefault: false;
6921
+ enumValues: undefined;
6922
+ baseColumn: never;
6923
+ identity: undefined;
6924
+ generated: undefined;
6925
+ }, {}, {}>;
6926
+ days: import("drizzle-orm/pg-core").PgColumn<{
6927
+ name: "days";
6928
+ tableName: "roster_patterns";
6929
+ dataType: "json";
6930
+ columnType: "PgJsonb";
6931
+ data: string[][];
6932
+ driverParam: unknown;
6933
+ notNull: true;
6934
+ hasDefault: true;
6935
+ isPrimaryKey: false;
6936
+ isAutoincrement: false;
6937
+ hasRuntimeDefault: false;
6938
+ enumValues: undefined;
6939
+ baseColumn: never;
6940
+ identity: undefined;
6941
+ generated: undefined;
6942
+ }, {}, {
6943
+ $type: string[][];
6944
+ }>;
6945
+ archivedAt: import("drizzle-orm/pg-core").PgColumn<{
6946
+ name: string;
6947
+ tableName: "roster_patterns";
6948
+ dataType: "date";
6949
+ columnType: "PgTimestamp";
6950
+ data: Date;
6951
+ driverParam: string;
6952
+ notNull: false;
6953
+ hasDefault: false;
6954
+ isPrimaryKey: false;
6955
+ isAutoincrement: false;
6956
+ hasRuntimeDefault: false;
6957
+ enumValues: undefined;
6958
+ baseColumn: never;
6959
+ identity: undefined;
6960
+ generated: undefined;
6961
+ }, {}, {}>;
6962
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
6963
+ name: string;
6964
+ tableName: "roster_patterns";
6965
+ dataType: "date";
6966
+ columnType: "PgTimestamp";
6967
+ data: Date;
6968
+ driverParam: string;
6969
+ notNull: true;
6970
+ hasDefault: true;
6971
+ isPrimaryKey: false;
6972
+ isAutoincrement: false;
6973
+ hasRuntimeDefault: false;
6974
+ enumValues: undefined;
6975
+ baseColumn: never;
6976
+ identity: undefined;
6977
+ generated: undefined;
6978
+ }, {}, {}>;
6979
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
6980
+ name: string;
6981
+ tableName: "roster_patterns";
6982
+ dataType: "date";
6983
+ columnType: "PgTimestamp";
6984
+ data: Date;
6985
+ driverParam: string;
6986
+ notNull: true;
6987
+ hasDefault: true;
6988
+ isPrimaryKey: false;
6989
+ isAutoincrement: false;
6990
+ hasRuntimeDefault: false;
6991
+ enumValues: undefined;
6992
+ baseColumn: never;
6993
+ identity: undefined;
6994
+ generated: undefined;
6995
+ }, {}, {}>;
6996
+ };
6997
+ dialect: "pg";
6998
+ }>;
6999
+ /**
7000
+ * A person on a rotation, over a period.
7001
+ *
7002
+ * Effective-dated like `schedule_assignments`, and with the same exclusion constraint from the day
7003
+ * the table exists rather than five migrations later: the resolver picks the assignment in force
7004
+ * with `limit 1`, so two in force is a roster that answers differently depending on which row the
7005
+ * executor hands back first.
7006
+ *
7007
+ * `cycle_offset` is what puts two crews on one pattern out of phase — crew B at offset 4 on a
7008
+ * 4-on-4-off cycle works exactly the days crew A is off. Without it each crew needs its own copy of
7009
+ * the rotation, and a change to the rotation has to be made once per copy.
7010
+ */
7011
+ export declare const rosterAssignments: import("drizzle-orm/pg-core").PgTableWithColumns<{
7012
+ name: "roster_assignments";
7013
+ schema: string;
7014
+ columns: {
7015
+ id: import("drizzle-orm/pg-core").PgColumn<{
7016
+ name: "id";
7017
+ tableName: "roster_assignments";
7018
+ dataType: "string";
7019
+ columnType: "PgUUID";
7020
+ data: string;
7021
+ driverParam: string;
7022
+ notNull: true;
7023
+ hasDefault: true;
7024
+ isPrimaryKey: true;
7025
+ isAutoincrement: false;
7026
+ hasRuntimeDefault: false;
7027
+ enumValues: undefined;
7028
+ baseColumn: never;
7029
+ identity: undefined;
7030
+ generated: undefined;
7031
+ }, {}, {}>;
7032
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
7033
+ name: "workspace_id";
7034
+ tableName: "roster_assignments";
7035
+ dataType: "string";
7036
+ columnType: "PgUUID";
7037
+ data: string;
7038
+ driverParam: string;
7039
+ notNull: true;
7040
+ hasDefault: false;
7041
+ isPrimaryKey: false;
7042
+ isAutoincrement: false;
7043
+ hasRuntimeDefault: false;
7044
+ enumValues: undefined;
7045
+ baseColumn: never;
7046
+ identity: undefined;
7047
+ generated: undefined;
7048
+ }, {}, {}>;
7049
+ personId: import("drizzle-orm/pg-core").PgColumn<{
7050
+ name: "person_id";
7051
+ tableName: "roster_assignments";
7052
+ dataType: "string";
7053
+ columnType: "PgUUID";
7054
+ data: string;
7055
+ driverParam: string;
7056
+ notNull: true;
7057
+ hasDefault: false;
7058
+ isPrimaryKey: false;
7059
+ isAutoincrement: false;
7060
+ hasRuntimeDefault: false;
7061
+ enumValues: undefined;
7062
+ baseColumn: never;
7063
+ identity: undefined;
7064
+ generated: undefined;
7065
+ }, {}, {}>;
7066
+ patternId: import("drizzle-orm/pg-core").PgColumn<{
7067
+ name: "pattern_id";
7068
+ tableName: "roster_assignments";
7069
+ dataType: "string";
7070
+ columnType: "PgUUID";
7071
+ data: string;
7072
+ driverParam: string;
7073
+ notNull: true;
7074
+ hasDefault: false;
7075
+ isPrimaryKey: false;
7076
+ isAutoincrement: false;
7077
+ hasRuntimeDefault: false;
7078
+ enumValues: undefined;
7079
+ baseColumn: never;
7080
+ identity: undefined;
7081
+ generated: undefined;
7082
+ }, {}, {}>;
7083
+ effectiveFrom: import("drizzle-orm/pg-core").PgColumn<{
7084
+ name: "effective_from";
7085
+ tableName: "roster_assignments";
7086
+ dataType: "string";
7087
+ columnType: "PgDateString";
7088
+ data: string;
7089
+ driverParam: string;
7090
+ notNull: true;
7091
+ hasDefault: false;
7092
+ isPrimaryKey: false;
7093
+ isAutoincrement: false;
7094
+ hasRuntimeDefault: false;
7095
+ enumValues: undefined;
7096
+ baseColumn: never;
7097
+ identity: undefined;
7098
+ generated: undefined;
7099
+ }, {}, {}>;
7100
+ effectiveTo: import("drizzle-orm/pg-core").PgColumn<{
7101
+ name: "effective_to";
7102
+ tableName: "roster_assignments";
7103
+ dataType: "string";
7104
+ columnType: "PgDateString";
7105
+ data: string;
7106
+ driverParam: string;
7107
+ notNull: false;
7108
+ hasDefault: false;
7109
+ isPrimaryKey: false;
7110
+ isAutoincrement: false;
7111
+ hasRuntimeDefault: false;
7112
+ enumValues: undefined;
7113
+ baseColumn: never;
7114
+ identity: undefined;
7115
+ generated: undefined;
7116
+ }, {}, {}>;
7117
+ cycleOffset: import("drizzle-orm/pg-core").PgColumn<{
7118
+ name: "cycle_offset";
7119
+ tableName: "roster_assignments";
7120
+ dataType: "number";
7121
+ columnType: "PgInteger";
7122
+ data: number;
7123
+ driverParam: string | number;
7124
+ notNull: true;
7125
+ hasDefault: true;
7126
+ isPrimaryKey: false;
7127
+ isAutoincrement: false;
7128
+ hasRuntimeDefault: false;
7129
+ enumValues: undefined;
7130
+ baseColumn: never;
7131
+ identity: undefined;
7132
+ generated: undefined;
7133
+ }, {}, {}>;
7134
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
7135
+ name: string;
7136
+ tableName: "roster_assignments";
7137
+ dataType: "date";
7138
+ columnType: "PgTimestamp";
7139
+ data: Date;
7140
+ driverParam: string;
7141
+ notNull: true;
7142
+ hasDefault: true;
7143
+ isPrimaryKey: false;
7144
+ isAutoincrement: false;
7145
+ hasRuntimeDefault: false;
7146
+ enumValues: undefined;
7147
+ baseColumn: never;
7148
+ identity: undefined;
7149
+ generated: undefined;
7150
+ }, {}, {}>;
7151
+ };
7152
+ dialect: "pg";
7153
+ }>;
7154
+ /**
7155
+ * One day that differs from the rotation, and nothing else.
7156
+ *
7157
+ * The whole reason a roster is not a schedule: a schedule change is effective-dated and rewrites
7158
+ * every day after it, while somebody covering one Tuesday needs one Tuesday changed.
7159
+ *
7160
+ * `shift_ids` is an array for the same reason a cycle day is — a split shift is two entries, not
7161
+ * something the model forbids. An empty array is "this person is off that day", which is why the
7162
+ * row exists at all: without it, "off" and "no override" would be the same absence of a row.
7163
+ *
7164
+ * The unique index is on the *record*, one per person-day, not on the shift. That distinction is
7165
+ * the whole of the split-shift question: a unique index on `(workspace, person, business_date,
7166
+ * shift)` would allow two shifts and forbid two overrides, and one on the person-day with a scalar
7167
+ * shift column would do the reverse. Neither is what an override means.
7168
+ */
7169
+ export declare const rosterOverrides: import("drizzle-orm/pg-core").PgTableWithColumns<{
7170
+ name: "roster_overrides";
7171
+ schema: string;
7172
+ columns: {
7173
+ id: import("drizzle-orm/pg-core").PgColumn<{
7174
+ name: "id";
7175
+ tableName: "roster_overrides";
7176
+ dataType: "string";
7177
+ columnType: "PgUUID";
7178
+ data: string;
7179
+ driverParam: string;
7180
+ notNull: true;
7181
+ hasDefault: true;
7182
+ isPrimaryKey: true;
7183
+ isAutoincrement: false;
7184
+ hasRuntimeDefault: false;
7185
+ enumValues: undefined;
7186
+ baseColumn: never;
7187
+ identity: undefined;
7188
+ generated: undefined;
7189
+ }, {}, {}>;
7190
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
7191
+ name: "workspace_id";
7192
+ tableName: "roster_overrides";
7193
+ dataType: "string";
7194
+ columnType: "PgUUID";
7195
+ data: string;
7196
+ driverParam: string;
7197
+ notNull: true;
7198
+ hasDefault: false;
7199
+ isPrimaryKey: false;
7200
+ isAutoincrement: false;
7201
+ hasRuntimeDefault: false;
7202
+ enumValues: undefined;
7203
+ baseColumn: never;
7204
+ identity: undefined;
7205
+ generated: undefined;
7206
+ }, {}, {}>;
7207
+ personId: import("drizzle-orm/pg-core").PgColumn<{
7208
+ name: "person_id";
7209
+ tableName: "roster_overrides";
7210
+ dataType: "string";
7211
+ columnType: "PgUUID";
7212
+ data: string;
7213
+ driverParam: string;
7214
+ notNull: true;
7215
+ hasDefault: false;
7216
+ isPrimaryKey: false;
7217
+ isAutoincrement: false;
7218
+ hasRuntimeDefault: false;
7219
+ enumValues: undefined;
7220
+ baseColumn: never;
7221
+ identity: undefined;
7222
+ generated: undefined;
7223
+ }, {}, {}>;
7224
+ businessDate: import("drizzle-orm/pg-core").PgColumn<{
7225
+ name: "business_date";
7226
+ tableName: "roster_overrides";
7227
+ dataType: "string";
7228
+ columnType: "PgDateString";
7229
+ data: string;
7230
+ driverParam: string;
7231
+ notNull: true;
7232
+ hasDefault: false;
7233
+ isPrimaryKey: false;
7234
+ isAutoincrement: false;
7235
+ hasRuntimeDefault: false;
7236
+ enumValues: undefined;
7237
+ baseColumn: never;
7238
+ identity: undefined;
7239
+ generated: undefined;
7240
+ }, {}, {}>;
7241
+ shiftIds: import("drizzle-orm/pg-core").PgColumn<{
7242
+ name: "shift_ids";
7243
+ tableName: "roster_overrides";
7244
+ dataType: "json";
7245
+ columnType: "PgJsonb";
7246
+ data: string[];
7247
+ driverParam: unknown;
7248
+ notNull: true;
7249
+ hasDefault: true;
7250
+ isPrimaryKey: false;
7251
+ isAutoincrement: false;
7252
+ hasRuntimeDefault: false;
7253
+ enumValues: undefined;
7254
+ baseColumn: never;
7255
+ identity: undefined;
7256
+ generated: undefined;
7257
+ }, {}, {
7258
+ $type: string[];
7259
+ }>;
7260
+ note: import("drizzle-orm/pg-core").PgColumn<{
7261
+ name: "note";
7262
+ tableName: "roster_overrides";
7263
+ dataType: "string";
7264
+ columnType: "PgText";
7265
+ data: string;
7266
+ driverParam: string;
7267
+ notNull: false;
7268
+ hasDefault: false;
7269
+ isPrimaryKey: false;
7270
+ isAutoincrement: false;
7271
+ hasRuntimeDefault: false;
7272
+ enumValues: [string, ...string[]];
7273
+ baseColumn: never;
7274
+ identity: undefined;
7275
+ generated: undefined;
7276
+ }, {}, {}>;
7277
+ createdBy: import("drizzle-orm/pg-core").PgColumn<{
7278
+ name: "created_by";
7279
+ tableName: "roster_overrides";
7280
+ dataType: "string";
7281
+ columnType: "PgUUID";
7282
+ data: string;
7283
+ driverParam: string;
7284
+ notNull: false;
7285
+ hasDefault: false;
7286
+ isPrimaryKey: false;
7287
+ isAutoincrement: false;
7288
+ hasRuntimeDefault: false;
7289
+ enumValues: undefined;
7290
+ baseColumn: never;
7291
+ identity: undefined;
7292
+ generated: undefined;
7293
+ }, {}, {}>;
7294
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
7295
+ name: string;
7296
+ tableName: "roster_overrides";
7297
+ dataType: "date";
7298
+ columnType: "PgTimestamp";
7299
+ data: Date;
7300
+ driverParam: string;
7301
+ notNull: true;
7302
+ hasDefault: true;
7303
+ isPrimaryKey: false;
7304
+ isAutoincrement: false;
7305
+ hasRuntimeDefault: false;
7306
+ enumValues: undefined;
7307
+ baseColumn: never;
7308
+ identity: undefined;
7309
+ generated: undefined;
7310
+ }, {}, {}>;
7311
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
7312
+ name: string;
7313
+ tableName: "roster_overrides";
7314
+ dataType: "date";
7315
+ columnType: "PgTimestamp";
7316
+ data: Date;
7317
+ driverParam: string;
7318
+ notNull: true;
7319
+ hasDefault: true;
7320
+ isPrimaryKey: false;
7321
+ isAutoincrement: false;
7322
+ hasRuntimeDefault: false;
7323
+ enumValues: undefined;
7324
+ baseColumn: never;
7325
+ identity: undefined;
7326
+ generated: undefined;
7327
+ }, {}, {}>;
7328
+ };
7329
+ dialect: "pg";
7330
+ }>;
6605
7331
  /**
6606
7332
  * A policy is a row, not a branch.
6607
7333
  *
@@ -7312,5 +8038,5 @@ export declare const retentionSettings: import("drizzle-orm/pg-core").PgTableWit
7312
8038
  dialect: "pg";
7313
8039
  }>;
7314
8040
  /** Every tenant table, so the RLS migration is checked against one list rather than memory. */
7315
- export declare const TENANT_TABLES: readonly ["legal_entities", "offices", "cost_centers", "org_units", "positions", "people", "people_sensitive", "employments", "office_assignments", "person_history", "sensitive_access_log", "person_documents", "custom_field_defs", "calendars", "calendar_days", "leave_types", "leave_ledger", "leave_balance_cursor", "leave_requests", "leave_request_days", "approval_chains", "approval_requests", "approval_steps", "approval_decisions", "delegations", "schedules", "schedule_assignments", "punches", "attendance_days", "regularizations", "policies", "policy_assignments", "periods", "retention_settings"];
8041
+ export declare const TENANT_TABLES: readonly ["legal_entities", "offices", "cost_centers", "org_units", "positions", "people", "people_sensitive", "employments", "office_assignments", "person_history", "sensitive_access_log", "person_documents", "custom_field_defs", "calendars", "calendar_days", "leave_types", "leave_ledger", "leave_balance_cursor", "leave_requests", "leave_request_days", "approval_chains", "approval_requests", "approval_steps", "approval_decisions", "delegations", "schedules", "schedule_assignments", "punches", "attendance_days", "regularizations", "roster_shifts", "roster_patterns", "roster_assignments", "roster_overrides", "policies", "policy_assignments", "periods", "retention_settings"];
7316
8042
  //# sourceMappingURL=schema.d.ts.map