@boxa-devops/depo-shared 1.1.0 → 1.2.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.
package/openapi.json CHANGED
@@ -7610,6 +7610,9 @@
7610
7610
  {
7611
7611
  "$ref": "#/components/schemas/InspectCommand"
7612
7612
  },
7613
+ {
7614
+ "$ref": "#/components/schemas/StoreInCommand"
7615
+ },
7613
7616
  {
7614
7617
  "$ref": "#/components/schemas/DispositionCommand"
7615
7618
  },
@@ -7642,6 +7645,7 @@
7642
7645
  "RECEIVE_OPENING": "#/components/schemas/ReceiveOpeningCommand",
7643
7646
  "FOUND": "#/components/schemas/FoundCommand",
7644
7647
  "INSPECT": "#/components/schemas/InspectCommand",
7648
+ "STORE_IN": "#/components/schemas/StoreInCommand",
7645
7649
  "DISPOSITION": "#/components/schemas/DispositionCommand",
7646
7650
  "STORNO": "#/components/schemas/StornoCommand",
7647
7651
  "REPAIR_START": "#/components/schemas/RepairStartCommand",
@@ -7653,7 +7657,6 @@
7653
7657
  "SEND_TO_REPAIR": "#/components/schemas/GenericCommand",
7654
7658
  "QC_ACCEPT": "#/components/schemas/GenericCommand",
7655
7659
  "QC_REJECT": "#/components/schemas/GenericCommand",
7656
- "STORE_IN": "#/components/schemas/GenericCommand",
7657
7660
  "ASSEMBLE": "#/components/schemas/GenericCommand",
7658
7661
  "DISASSEMBLE": "#/components/schemas/GenericCommand",
7659
7662
  "SEND_TO_PLANT": "#/components/schemas/GenericCommand",
@@ -13447,6 +13450,93 @@
13447
13450
  }
13448
13451
  }
13449
13452
  },
13453
+ "/api/v1/refs/loco-sections": {
13454
+ "get": {
13455
+ "tags": [
13456
+ "refs"
13457
+ ],
13458
+ "summary": "Loco Sections",
13459
+ "description": "The places a part sits on the machine — what the position picker draws.\n\nA hint catalogue (TZ §14): nothing validates `mount_position` against it,\na place typed by hand stays legal, and a client that has never heard of a\nsection simply does not light it.",
13460
+ "operationId": "loco_sections_api_v1_refs_loco_sections_get",
13461
+ "parameters": [
13462
+ {
13463
+ "name": "authorization",
13464
+ "in": "header",
13465
+ "required": false,
13466
+ "schema": {
13467
+ "anyOf": [
13468
+ {
13469
+ "type": "string"
13470
+ },
13471
+ {
13472
+ "type": "null"
13473
+ }
13474
+ ],
13475
+ "title": "Authorization"
13476
+ }
13477
+ },
13478
+ {
13479
+ "name": "x-debug-person-id",
13480
+ "in": "header",
13481
+ "required": false,
13482
+ "schema": {
13483
+ "anyOf": [
13484
+ {
13485
+ "type": "string",
13486
+ "format": "uuid"
13487
+ },
13488
+ {
13489
+ "type": "null"
13490
+ }
13491
+ ],
13492
+ "title": "X-Debug-Person-Id"
13493
+ }
13494
+ },
13495
+ {
13496
+ "name": "depo_admin_session",
13497
+ "in": "cookie",
13498
+ "required": false,
13499
+ "schema": {
13500
+ "anyOf": [
13501
+ {
13502
+ "type": "string"
13503
+ },
13504
+ {
13505
+ "type": "null"
13506
+ }
13507
+ ],
13508
+ "title": "Depo Admin Session"
13509
+ }
13510
+ }
13511
+ ],
13512
+ "responses": {
13513
+ "200": {
13514
+ "description": "Successful Response",
13515
+ "content": {
13516
+ "application/json": {
13517
+ "schema": {
13518
+ "type": "array",
13519
+ "items": {
13520
+ "$ref": "#/components/schemas/LocoSectionRef"
13521
+ },
13522
+ "title": "Response Loco Sections Api V1 Refs Loco Sections Get"
13523
+ }
13524
+ }
13525
+ }
13526
+ },
13527
+ "422": {
13528
+ "description": "Validation Error",
13529
+ "content": {
13530
+ "application/json": {
13531
+ "schema": {
13532
+ "$ref": "#/components/schemas/HTTPValidationError"
13533
+ }
13534
+ }
13535
+ }
13536
+ }
13537
+ }
13538
+ }
13539
+ },
13450
13540
  "/api/v1/refs/loco-series-positions": {
13451
13541
  "get": {
13452
13542
  "tags": [
@@ -14961,6 +15051,152 @@
14961
15051
  }
14962
15052
  }
14963
15053
  },
15054
+ "/api/v1/reports/kpi-trend": {
15055
+ "get": {
15056
+ "tags": [
15057
+ "reports"
15058
+ ],
15059
+ "summary": "Kpi Trend",
15060
+ "description": "Daily series behind the dashboard tiles (what the tables can answer honestly).",
15061
+ "operationId": "kpi_trend_api_v1_reports_kpi_trend_get",
15062
+ "parameters": [
15063
+ {
15064
+ "name": "days",
15065
+ "in": "query",
15066
+ "required": false,
15067
+ "schema": {
15068
+ "type": "integer",
15069
+ "maximum": 90,
15070
+ "minimum": 2,
15071
+ "default": 14,
15072
+ "title": "Days"
15073
+ }
15074
+ },
15075
+ {
15076
+ "name": "x-debug-person-id",
15077
+ "in": "header",
15078
+ "required": false,
15079
+ "schema": {
15080
+ "anyOf": [
15081
+ {
15082
+ "type": "string",
15083
+ "format": "uuid"
15084
+ },
15085
+ {
15086
+ "type": "null"
15087
+ }
15088
+ ],
15089
+ "title": "X-Debug-Person-Id"
15090
+ }
15091
+ },
15092
+ {
15093
+ "name": "depo_admin_session",
15094
+ "in": "cookie",
15095
+ "required": false,
15096
+ "schema": {
15097
+ "anyOf": [
15098
+ {
15099
+ "type": "string"
15100
+ },
15101
+ {
15102
+ "type": "null"
15103
+ }
15104
+ ],
15105
+ "title": "Depo Admin Session"
15106
+ }
15107
+ }
15108
+ ],
15109
+ "responses": {
15110
+ "200": {
15111
+ "description": "Successful Response",
15112
+ "content": {
15113
+ "application/json": {
15114
+ "schema": {
15115
+ "$ref": "#/components/schemas/KpiTrend"
15116
+ }
15117
+ }
15118
+ }
15119
+ },
15120
+ "422": {
15121
+ "description": "Validation Error",
15122
+ "content": {
15123
+ "application/json": {
15124
+ "schema": {
15125
+ "$ref": "#/components/schemas/HTTPValidationError"
15126
+ }
15127
+ }
15128
+ }
15129
+ }
15130
+ }
15131
+ }
15132
+ },
15133
+ "/api/v1/reports/nav-counters": {
15134
+ "get": {
15135
+ "tags": [
15136
+ "reports"
15137
+ ],
15138
+ "summary": "Nav Counters",
15139
+ "description": "Badge counts for the admin menu — three COUNTs, scoped to what the caller sees.",
15140
+ "operationId": "nav_counters_api_v1_reports_nav_counters_get",
15141
+ "parameters": [
15142
+ {
15143
+ "name": "x-debug-person-id",
15144
+ "in": "header",
15145
+ "required": false,
15146
+ "schema": {
15147
+ "anyOf": [
15148
+ {
15149
+ "type": "string",
15150
+ "format": "uuid"
15151
+ },
15152
+ {
15153
+ "type": "null"
15154
+ }
15155
+ ],
15156
+ "title": "X-Debug-Person-Id"
15157
+ }
15158
+ },
15159
+ {
15160
+ "name": "depo_admin_session",
15161
+ "in": "cookie",
15162
+ "required": false,
15163
+ "schema": {
15164
+ "anyOf": [
15165
+ {
15166
+ "type": "string"
15167
+ },
15168
+ {
15169
+ "type": "null"
15170
+ }
15171
+ ],
15172
+ "title": "Depo Admin Session"
15173
+ }
15174
+ }
15175
+ ],
15176
+ "responses": {
15177
+ "200": {
15178
+ "description": "Successful Response",
15179
+ "content": {
15180
+ "application/json": {
15181
+ "schema": {
15182
+ "$ref": "#/components/schemas/NavCounters"
15183
+ }
15184
+ }
15185
+ }
15186
+ },
15187
+ "422": {
15188
+ "description": "Validation Error",
15189
+ "content": {
15190
+ "application/json": {
15191
+ "schema": {
15192
+ "$ref": "#/components/schemas/HTTPValidationError"
15193
+ }
15194
+ }
15195
+ }
15196
+ }
15197
+ }
15198
+ }
15199
+ },
14964
15200
  "/api/v1/reports/open-orders": {
14965
15201
  "get": {
14966
15202
  "tags": [
@@ -19567,25 +19803,15 @@
19567
19803
  }
19568
19804
  }
19569
19805
  },
19570
- "/api/v1/work-orders/{wo_id}/accept": {
19806
+ "/api/v1/work-orders/measuring": {
19571
19807
  "post": {
19572
19808
  "tags": [
19573
19809
  "work-orders"
19574
19810
  ],
19575
- "summary": "Accept Order",
19576
- "description": "OPEN -> ACCEPTED: WORK_ORDER handover opener->accepter, both sign (TZ 5.4).",
19577
- "operationId": "accept_order_api_v1_work_orders__wo_id__accept_post",
19811
+ "summary": "Open Measuring Order",
19812
+ "description": "The measuring order of one visit — opened on the first ask, returned on\nevery later one (invariant 3: a replayed offline tap opens nothing new).",
19813
+ "operationId": "open_measuring_order_api_v1_work_orders_measuring_post",
19578
19814
  "parameters": [
19579
- {
19580
- "name": "wo_id",
19581
- "in": "path",
19582
- "required": true,
19583
- "schema": {
19584
- "type": "string",
19585
- "format": "uuid",
19586
- "title": "Wo Id"
19587
- }
19588
- },
19589
19815
  {
19590
19816
  "name": "authorization",
19591
19817
  "in": "header",
@@ -19625,7 +19851,7 @@
19625
19851
  "content": {
19626
19852
  "application/json": {
19627
19853
  "schema": {
19628
- "$ref": "#/components/schemas/AcceptIn"
19854
+ "$ref": "#/components/schemas/MeasuringOrderIn"
19629
19855
  }
19630
19856
  }
19631
19857
  }
@@ -19636,7 +19862,7 @@
19636
19862
  "content": {
19637
19863
  "application/json": {
19638
19864
  "schema": {
19639
- "$ref": "#/components/schemas/WorkOrderOut"
19865
+ "$ref": "#/components/schemas/WorkOrderDetail"
19640
19866
  }
19641
19867
  }
19642
19868
  }
@@ -19654,14 +19880,14 @@
19654
19880
  }
19655
19881
  }
19656
19882
  },
19657
- "/api/v1/work-orders/{wo_id}/take-over": {
19658
- "post": {
19883
+ "/api/v1/work-orders/measuring/{wo_id}/items": {
19884
+ "get": {
19659
19885
  "tags": [
19660
19886
  "work-orders"
19661
19887
  ],
19662
- "summary": "Take Over Order",
19663
- "description": "«Qabul qilish» on an order left open by a previous shift (TZ 3.7).\n\nThis IS the shift handover, and it is the only one the depot performs by\ndefault. The outgoing master signs nothing at the end of his hours — his\nshift closes on the clock (services/background) — so responsibility moves\nwhen, and only when, the next master picks the work up: accepted_by moves\nto him, and a Handover row of kind SHIFT_CARRYOVER records the pair with\nboth signatures, exactly like the accept of a fresh order.\n\nThe order's status is untouched: an IN_PROGRESS repair does not restart\nbecause a new master answers for it.",
19664
- "operationId": "take_over_order_api_v1_work_orders__wo_id__take_over_post",
19888
+ "summary": "Measuring Items",
19889
+ "description": "What stands on this machine and can be measured, with its numbers, the\nhints those numbers fire and the verdict already signed on it.",
19890
+ "operationId": "measuring_items_api_v1_work_orders_measuring__wo_id__items_get",
19665
19891
  "parameters": [
19666
19892
  {
19667
19893
  "name": "wo_id",
@@ -19707,23 +19933,17 @@
19707
19933
  }
19708
19934
  }
19709
19935
  ],
19710
- "requestBody": {
19711
- "required": true,
19712
- "content": {
19713
- "application/json": {
19714
- "schema": {
19715
- "$ref": "#/components/schemas/TakeOverIn"
19716
- }
19717
- }
19718
- }
19719
- },
19720
19936
  "responses": {
19721
19937
  "200": {
19722
19938
  "description": "Successful Response",
19723
19939
  "content": {
19724
19940
  "application/json": {
19725
19941
  "schema": {
19726
- "$ref": "#/components/schemas/WorkOrderOut"
19942
+ "type": "array",
19943
+ "items": {
19944
+ "$ref": "#/components/schemas/MeasuredItemOut"
19945
+ },
19946
+ "title": "Response Measuring Items Api V1 Work Orders Measuring Wo Id Items Get"
19727
19947
  }
19728
19948
  }
19729
19949
  }
@@ -19741,14 +19961,14 @@
19741
19961
  }
19742
19962
  }
19743
19963
  },
19744
- "/api/v1/work-orders/{wo_id}/tasks": {
19964
+ "/api/v1/work-orders/measuring/{wo_id}/verdict": {
19745
19965
  "post": {
19746
19966
  "tags": [
19747
19967
  "work-orders"
19748
19968
  ],
19749
- "summary": "Split Order",
19750
- "description": "Create the operations + dependencies (TZ 5.5). Once per order (MVP).",
19751
- "operationId": "split_order_api_v1_work_orders__wo_id__tasks_post",
19969
+ "summary": "Measuring Verdict",
19970
+ "description": "«Ремонтируем» / «Не трогаем» on one measured part, under the master's PIN.",
19971
+ "operationId": "measuring_verdict_api_v1_work_orders_measuring__wo_id__verdict_post",
19752
19972
  "parameters": [
19753
19973
  {
19754
19974
  "name": "wo_id",
@@ -19799,18 +20019,18 @@
19799
20019
  "content": {
19800
20020
  "application/json": {
19801
20021
  "schema": {
19802
- "$ref": "#/components/schemas/SplitIn"
20022
+ "$ref": "#/components/schemas/VerdictIn"
19803
20023
  }
19804
20024
  }
19805
20025
  }
19806
20026
  },
19807
20027
  "responses": {
19808
- "201": {
20028
+ "200": {
19809
20029
  "description": "Successful Response",
19810
20030
  "content": {
19811
20031
  "application/json": {
19812
20032
  "schema": {
19813
- "$ref": "#/components/schemas/WorkOrderDetail"
20033
+ "$ref": "#/components/schemas/VerdictOut"
19814
20034
  }
19815
20035
  }
19816
20036
  }
@@ -19828,14 +20048,14 @@
19828
20048
  }
19829
20049
  }
19830
20050
  },
19831
- "/api/v1/work-orders/{wo_id}/tasks/{task_id}/assign": {
20051
+ "/api/v1/work-orders/measuring/{wo_id}/verdicts": {
19832
20052
  "post": {
19833
20053
  "tags": [
19834
20054
  "work-orders"
19835
20055
  ],
19836
- "summary": "Assign Task",
19837
- "description": "Assign fitters to an operation of the shift (TZ 5.6).",
19838
- "operationId": "assign_task_api_v1_work_orders__wo_id__tasks__task_id__assign_post",
20056
+ "summary": "Inspection Sign",
20057
+ "description": "The inspection pass: several parts decided at once, signed once.\n\nThe single-part `/verdict` above stays what the master's own screen uses.\nThis one is the shop-floor walk — the man reads a handful of units, says\n«good» or «this one», names himself by tab_no and PIN, and signs the lot.\nOne signature whose payload_hash covers every line (invariant 6), one\nINSPECT event per part under a derived uuid, so a replayed tap of the whole\npass writes nothing twice (invariant 3).",
20058
+ "operationId": "inspection_sign_api_v1_work_orders_measuring__wo_id__verdicts_post",
19839
20059
  "parameters": [
19840
20060
  {
19841
20061
  "name": "wo_id",
@@ -19847,16 +20067,6 @@
19847
20067
  "title": "Wo Id"
19848
20068
  }
19849
20069
  },
19850
- {
19851
- "name": "task_id",
19852
- "in": "path",
19853
- "required": true,
19854
- "schema": {
19855
- "type": "string",
19856
- "format": "uuid",
19857
- "title": "Task Id"
19858
- }
19859
- },
19860
20070
  {
19861
20071
  "name": "authorization",
19862
20072
  "in": "header",
@@ -19896,18 +20106,18 @@
19896
20106
  "content": {
19897
20107
  "application/json": {
19898
20108
  "schema": {
19899
- "$ref": "#/components/schemas/AssignIn"
20109
+ "$ref": "#/components/schemas/InspectionSignIn"
19900
20110
  }
19901
20111
  }
19902
20112
  }
19903
20113
  },
19904
20114
  "responses": {
19905
- "201": {
20115
+ "200": {
19906
20116
  "description": "Successful Response",
19907
20117
  "content": {
19908
20118
  "application/json": {
19909
20119
  "schema": {
19910
- "$ref": "#/components/schemas/TaskOut"
20120
+ "$ref": "#/components/schemas/InspectionSignOut"
19911
20121
  }
19912
20122
  }
19913
20123
  }
@@ -19925,14 +20135,14 @@
19925
20135
  }
19926
20136
  }
19927
20137
  },
19928
- "/api/v1/work-orders/{wo_id}/tasks/{task_id}/start": {
20138
+ "/api/v1/work-orders/{wo_id}/accept": {
19929
20139
  "post": {
19930
20140
  "tags": [
19931
20141
  "work-orders"
19932
20142
  ],
19933
- "summary": "Start Task",
19934
- "operationId": "start_task_api_v1_work_orders__wo_id__tasks__task_id__start_post",
19935
- "deprecated": true,
20143
+ "summary": "Accept Order",
20144
+ "description": "OPEN -> ACCEPTED: WORK_ORDER handover opener->accepter, both sign (TZ 5.4).",
20145
+ "operationId": "accept_order_api_v1_work_orders__wo_id__accept_post",
19936
20146
  "parameters": [
19937
20147
  {
19938
20148
  "name": "wo_id",
@@ -19944,16 +20154,6 @@
19944
20154
  "title": "Wo Id"
19945
20155
  }
19946
20156
  },
19947
- {
19948
- "name": "task_id",
19949
- "in": "path",
19950
- "required": true,
19951
- "schema": {
19952
- "type": "string",
19953
- "format": "uuid",
19954
- "title": "Task Id"
19955
- }
19956
- },
19957
20157
  {
19958
20158
  "name": "authorization",
19959
20159
  "in": "header",
@@ -19993,7 +20193,7 @@
19993
20193
  "content": {
19994
20194
  "application/json": {
19995
20195
  "schema": {
19996
- "$ref": "#/components/schemas/TaskActionIn"
20196
+ "$ref": "#/components/schemas/AcceptIn"
19997
20197
  }
19998
20198
  }
19999
20199
  }
@@ -20004,7 +20204,7 @@
20004
20204
  "content": {
20005
20205
  "application/json": {
20006
20206
  "schema": {
20007
- "$ref": "#/components/schemas/TaskOut"
20207
+ "$ref": "#/components/schemas/WorkOrderOut"
20008
20208
  }
20009
20209
  }
20010
20210
  }
@@ -20022,14 +20222,14 @@
20022
20222
  }
20023
20223
  }
20024
20224
  },
20025
- "/api/v1/work-orders/{wo_id}/tasks/{task_id}/pause": {
20225
+ "/api/v1/work-orders/{wo_id}/take-over": {
20026
20226
  "post": {
20027
20227
  "tags": [
20028
20228
  "work-orders"
20029
20229
  ],
20030
- "summary": "Pause Task",
20031
- "operationId": "pause_task_api_v1_work_orders__wo_id__tasks__task_id__pause_post",
20032
- "deprecated": true,
20230
+ "summary": "Take Over Order",
20231
+ "description": "«Qabul qilish» on an order left open by a previous shift (TZ 3.7).\n\nThis IS the shift handover, and it is the only one the depot performs by\ndefault. The outgoing master signs nothing at the end of his hours — his\nshift closes on the clock (services/background) — so responsibility moves\nwhen, and only when, the next master picks the work up: accepted_by moves\nto him, and a Handover row of kind SHIFT_CARRYOVER records the pair with\nboth signatures, exactly like the accept of a fresh order.\n\nThe order's status is untouched: an IN_PROGRESS repair does not restart\nbecause a new master answers for it.",
20232
+ "operationId": "take_over_order_api_v1_work_orders__wo_id__take_over_post",
20033
20233
  "parameters": [
20034
20234
  {
20035
20235
  "name": "wo_id",
@@ -20042,13 +20242,90 @@
20042
20242
  }
20043
20243
  },
20044
20244
  {
20045
- "name": "task_id",
20245
+ "name": "authorization",
20246
+ "in": "header",
20247
+ "required": false,
20248
+ "schema": {
20249
+ "anyOf": [
20250
+ {
20251
+ "type": "string"
20252
+ },
20253
+ {
20254
+ "type": "null"
20255
+ }
20256
+ ],
20257
+ "title": "Authorization"
20258
+ }
20259
+ },
20260
+ {
20261
+ "name": "x-debug-person-id",
20262
+ "in": "header",
20263
+ "required": false,
20264
+ "schema": {
20265
+ "anyOf": [
20266
+ {
20267
+ "type": "string",
20268
+ "format": "uuid"
20269
+ },
20270
+ {
20271
+ "type": "null"
20272
+ }
20273
+ ],
20274
+ "title": "X-Debug-Person-Id"
20275
+ }
20276
+ }
20277
+ ],
20278
+ "requestBody": {
20279
+ "required": true,
20280
+ "content": {
20281
+ "application/json": {
20282
+ "schema": {
20283
+ "$ref": "#/components/schemas/TakeOverIn"
20284
+ }
20285
+ }
20286
+ }
20287
+ },
20288
+ "responses": {
20289
+ "200": {
20290
+ "description": "Successful Response",
20291
+ "content": {
20292
+ "application/json": {
20293
+ "schema": {
20294
+ "$ref": "#/components/schemas/WorkOrderOut"
20295
+ }
20296
+ }
20297
+ }
20298
+ },
20299
+ "422": {
20300
+ "description": "Validation Error",
20301
+ "content": {
20302
+ "application/json": {
20303
+ "schema": {
20304
+ "$ref": "#/components/schemas/HTTPValidationError"
20305
+ }
20306
+ }
20307
+ }
20308
+ }
20309
+ }
20310
+ }
20311
+ },
20312
+ "/api/v1/work-orders/{wo_id}/tasks": {
20313
+ "post": {
20314
+ "tags": [
20315
+ "work-orders"
20316
+ ],
20317
+ "summary": "Split Order",
20318
+ "description": "Create the operations + dependencies (TZ 5.5). Once per order (MVP).",
20319
+ "operationId": "split_order_api_v1_work_orders__wo_id__tasks_post",
20320
+ "parameters": [
20321
+ {
20322
+ "name": "wo_id",
20046
20323
  "in": "path",
20047
20324
  "required": true,
20048
20325
  "schema": {
20049
20326
  "type": "string",
20050
20327
  "format": "uuid",
20051
- "title": "Task Id"
20328
+ "title": "Wo Id"
20052
20329
  }
20053
20330
  },
20054
20331
  {
@@ -20090,18 +20367,18 @@
20090
20367
  "content": {
20091
20368
  "application/json": {
20092
20369
  "schema": {
20093
- "$ref": "#/components/schemas/TaskActionIn"
20370
+ "$ref": "#/components/schemas/SplitIn"
20094
20371
  }
20095
20372
  }
20096
20373
  }
20097
20374
  },
20098
20375
  "responses": {
20099
- "200": {
20376
+ "201": {
20100
20377
  "description": "Successful Response",
20101
20378
  "content": {
20102
20379
  "application/json": {
20103
20380
  "schema": {
20104
- "$ref": "#/components/schemas/TaskOut"
20381
+ "$ref": "#/components/schemas/WorkOrderDetail"
20105
20382
  }
20106
20383
  }
20107
20384
  }
@@ -20119,14 +20396,14 @@
20119
20396
  }
20120
20397
  }
20121
20398
  },
20122
- "/api/v1/work-orders/{wo_id}/tasks/{task_id}/resume": {
20399
+ "/api/v1/work-orders/{wo_id}/tasks/{task_id}/assign": {
20123
20400
  "post": {
20124
20401
  "tags": [
20125
20402
  "work-orders"
20126
20403
  ],
20127
- "summary": "Resume Task",
20128
- "operationId": "resume_task_api_v1_work_orders__wo_id__tasks__task_id__resume_post",
20129
- "deprecated": true,
20404
+ "summary": "Assign Task",
20405
+ "description": "Assign fitters to an operation of the shift (TZ 5.6).",
20406
+ "operationId": "assign_task_api_v1_work_orders__wo_id__tasks__task_id__assign_post",
20130
20407
  "parameters": [
20131
20408
  {
20132
20409
  "name": "wo_id",
@@ -20187,13 +20464,13 @@
20187
20464
  "content": {
20188
20465
  "application/json": {
20189
20466
  "schema": {
20190
- "$ref": "#/components/schemas/TaskActionIn"
20467
+ "$ref": "#/components/schemas/AssignIn"
20191
20468
  }
20192
20469
  }
20193
20470
  }
20194
20471
  },
20195
20472
  "responses": {
20196
- "200": {
20473
+ "201": {
20197
20474
  "description": "Successful Response",
20198
20475
  "content": {
20199
20476
  "application/json": {
@@ -20216,13 +20493,13 @@
20216
20493
  }
20217
20494
  }
20218
20495
  },
20219
- "/api/v1/work-orders/{wo_id}/tasks/{task_id}/finish": {
20496
+ "/api/v1/work-orders/{wo_id}/tasks/{task_id}/start": {
20220
20497
  "post": {
20221
20498
  "tags": [
20222
20499
  "work-orders"
20223
20500
  ],
20224
- "summary": "Finish Task",
20225
- "operationId": "finish_task_api_v1_work_orders__wo_id__tasks__task_id__finish_post",
20501
+ "summary": "Start Task",
20502
+ "operationId": "start_task_api_v1_work_orders__wo_id__tasks__task_id__start_post",
20226
20503
  "deprecated": true,
20227
20504
  "parameters": [
20228
20505
  {
@@ -20313,14 +20590,14 @@
20313
20590
  }
20314
20591
  }
20315
20592
  },
20316
- "/api/v1/work-orders/{wo_id}/work-accept-sign": {
20593
+ "/api/v1/work-orders/{wo_id}/tasks/{task_id}/pause": {
20317
20594
  "post": {
20318
20595
  "tags": [
20319
20596
  "work-orders"
20320
20597
  ],
20321
- "summary": "Work Accept Sign",
20322
- "description": "Fitter signs taking the order's work (card or tab_no + PIN, master's screen).",
20323
- "operationId": "work_accept_sign_api_v1_work_orders__wo_id__work_accept_sign_post",
20598
+ "summary": "Pause Task",
20599
+ "operationId": "pause_task_api_v1_work_orders__wo_id__tasks__task_id__pause_post",
20600
+ "deprecated": true,
20324
20601
  "parameters": [
20325
20602
  {
20326
20603
  "name": "wo_id",
@@ -20332,6 +20609,16 @@
20332
20609
  "title": "Wo Id"
20333
20610
  }
20334
20611
  },
20612
+ {
20613
+ "name": "task_id",
20614
+ "in": "path",
20615
+ "required": true,
20616
+ "schema": {
20617
+ "type": "string",
20618
+ "format": "uuid",
20619
+ "title": "Task Id"
20620
+ }
20621
+ },
20335
20622
  {
20336
20623
  "name": "authorization",
20337
20624
  "in": "header",
@@ -20371,7 +20658,7 @@
20371
20658
  "content": {
20372
20659
  "application/json": {
20373
20660
  "schema": {
20374
- "$ref": "#/components/schemas/WorkSignIn"
20661
+ "$ref": "#/components/schemas/TaskActionIn"
20375
20662
  }
20376
20663
  }
20377
20664
  }
@@ -20382,7 +20669,7 @@
20382
20669
  "content": {
20383
20670
  "application/json": {
20384
20671
  "schema": {
20385
- "$ref": "#/components/schemas/WorkSignOut"
20672
+ "$ref": "#/components/schemas/TaskOut"
20386
20673
  }
20387
20674
  }
20388
20675
  }
@@ -20400,14 +20687,14 @@
20400
20687
  }
20401
20688
  }
20402
20689
  },
20403
- "/api/v1/work-orders/{wo_id}/work-return-sign": {
20690
+ "/api/v1/work-orders/{wo_id}/tasks/{task_id}/resume": {
20404
20691
  "post": {
20405
20692
  "tags": [
20406
20693
  "work-orders"
20407
20694
  ],
20408
- "summary": "Work Return Sign",
20409
- "description": "Fitter signs handing the order's work back.",
20410
- "operationId": "work_return_sign_api_v1_work_orders__wo_id__work_return_sign_post",
20695
+ "summary": "Resume Task",
20696
+ "operationId": "resume_task_api_v1_work_orders__wo_id__tasks__task_id__resume_post",
20697
+ "deprecated": true,
20411
20698
  "parameters": [
20412
20699
  {
20413
20700
  "name": "wo_id",
@@ -20419,6 +20706,16 @@
20419
20706
  "title": "Wo Id"
20420
20707
  }
20421
20708
  },
20709
+ {
20710
+ "name": "task_id",
20711
+ "in": "path",
20712
+ "required": true,
20713
+ "schema": {
20714
+ "type": "string",
20715
+ "format": "uuid",
20716
+ "title": "Task Id"
20717
+ }
20718
+ },
20422
20719
  {
20423
20720
  "name": "authorization",
20424
20721
  "in": "header",
@@ -20458,7 +20755,7 @@
20458
20755
  "content": {
20459
20756
  "application/json": {
20460
20757
  "schema": {
20461
- "$ref": "#/components/schemas/WorkSignIn"
20758
+ "$ref": "#/components/schemas/TaskActionIn"
20462
20759
  }
20463
20760
  }
20464
20761
  }
@@ -20469,7 +20766,7 @@
20469
20766
  "content": {
20470
20767
  "application/json": {
20471
20768
  "schema": {
20472
- "$ref": "#/components/schemas/WorkSignOut"
20769
+ "$ref": "#/components/schemas/TaskOut"
20473
20770
  }
20474
20771
  }
20475
20772
  }
@@ -20487,14 +20784,14 @@
20487
20784
  }
20488
20785
  }
20489
20786
  },
20490
- "/api/v1/work-orders/{wo_id}/finish": {
20787
+ "/api/v1/work-orders/{wo_id}/tasks/{task_id}/finish": {
20491
20788
  "post": {
20492
20789
  "tags": [
20493
20790
  "work-orders"
20494
20791
  ],
20495
- "summary": "Finish Order",
20496
- "description": "All ops done -> REPAIR_FINISH on the item (IN_REPAIR -> AWAITING_QC).",
20497
- "operationId": "finish_order_api_v1_work_orders__wo_id__finish_post",
20792
+ "summary": "Finish Task",
20793
+ "operationId": "finish_task_api_v1_work_orders__wo_id__tasks__task_id__finish_post",
20794
+ "deprecated": true,
20498
20795
  "parameters": [
20499
20796
  {
20500
20797
  "name": "wo_id",
@@ -20506,6 +20803,16 @@
20506
20803
  "title": "Wo Id"
20507
20804
  }
20508
20805
  },
20806
+ {
20807
+ "name": "task_id",
20808
+ "in": "path",
20809
+ "required": true,
20810
+ "schema": {
20811
+ "type": "string",
20812
+ "format": "uuid",
20813
+ "title": "Task Id"
20814
+ }
20815
+ },
20509
20816
  {
20510
20817
  "name": "authorization",
20511
20818
  "in": "header",
@@ -20556,7 +20863,7 @@
20556
20863
  "content": {
20557
20864
  "application/json": {
20558
20865
  "schema": {
20559
- "$ref": "#/components/schemas/WorkOrderOut"
20866
+ "$ref": "#/components/schemas/TaskOut"
20560
20867
  }
20561
20868
  }
20562
20869
  }
@@ -20574,14 +20881,14 @@
20574
20881
  }
20575
20882
  }
20576
20883
  },
20577
- "/api/v1/work-orders/{wo_id}/qc": {
20884
+ "/api/v1/work-orders/{wo_id}/tasks/{task_id}/cosign-op": {
20578
20885
  "post": {
20579
20886
  "tags": [
20580
20887
  "work-orders"
20581
20888
  ],
20582
- "summary": "Qc Order",
20583
- "description": "AWAITING_QC -> QC_ACCEPT (IN_STOCK_OK, order DONE) or QC_REJECT (IN_REPAIR).",
20584
- "operationId": "qc_order_api_v1_work_orders__wo_id__qc_post",
20889
+ "summary": "Cosign Task Op",
20890
+ "description": "Start/pause/resume/finish one operation, verified by the fitter's card + PIN.",
20891
+ "operationId": "cosign_task_op_api_v1_work_orders__wo_id__tasks__task_id__cosign_op_post",
20585
20892
  "parameters": [
20586
20893
  {
20587
20894
  "name": "wo_id",
@@ -20593,6 +20900,16 @@
20593
20900
  "title": "Wo Id"
20594
20901
  }
20595
20902
  },
20903
+ {
20904
+ "name": "task_id",
20905
+ "in": "path",
20906
+ "required": true,
20907
+ "schema": {
20908
+ "type": "string",
20909
+ "format": "uuid",
20910
+ "title": "Task Id"
20911
+ }
20912
+ },
20596
20913
  {
20597
20914
  "name": "authorization",
20598
20915
  "in": "header",
@@ -20632,7 +20949,7 @@
20632
20949
  "content": {
20633
20950
  "application/json": {
20634
20951
  "schema": {
20635
- "$ref": "#/components/schemas/QcIn"
20952
+ "$ref": "#/components/schemas/TaskCosignIn"
20636
20953
  }
20637
20954
  }
20638
20955
  }
@@ -20643,7 +20960,7 @@
20643
20960
  "content": {
20644
20961
  "application/json": {
20645
20962
  "schema": {
20646
- "$ref": "#/components/schemas/WorkOrderOut"
20963
+ "$ref": "#/components/schemas/TaskOut"
20647
20964
  }
20648
20965
  }
20649
20966
  }
@@ -20661,14 +20978,14 @@
20661
20978
  }
20662
20979
  }
20663
20980
  },
20664
- "/api/v1/work-orders/{wo_id}/return": {
20981
+ "/api/v1/work-orders/{wo_id}/work-accept-sign": {
20665
20982
  "post": {
20666
20983
  "tags": [
20667
20984
  "work-orders"
20668
20985
  ],
20669
- "summary": "Return Order",
20670
- "description": "DONE -> RETURNED: WORK_ORDER handover back to the opener, both sign (TZ 5.11).",
20671
- "operationId": "return_order_api_v1_work_orders__wo_id__return_post",
20986
+ "summary": "Work Accept Sign",
20987
+ "description": "Fitter signs taking the order's work (card or tab_no + PIN, master's screen).",
20988
+ "operationId": "work_accept_sign_api_v1_work_orders__wo_id__work_accept_sign_post",
20672
20989
  "parameters": [
20673
20990
  {
20674
20991
  "name": "wo_id",
@@ -20719,7 +21036,7 @@
20719
21036
  "content": {
20720
21037
  "application/json": {
20721
21038
  "schema": {
20722
- "$ref": "#/components/schemas/AcceptIn"
21039
+ "$ref": "#/components/schemas/WorkSignIn"
20723
21040
  }
20724
21041
  }
20725
21042
  }
@@ -20730,7 +21047,7 @@
20730
21047
  "content": {
20731
21048
  "application/json": {
20732
21049
  "schema": {
20733
- "$ref": "#/components/schemas/WorkOrderOut"
21050
+ "$ref": "#/components/schemas/WorkSignOut"
20734
21051
  }
20735
21052
  }
20736
21053
  }
@@ -20748,14 +21065,362 @@
20748
21065
  }
20749
21066
  }
20750
21067
  },
20751
- "/api/v1/work-orders/{wo_id}/close": {
21068
+ "/api/v1/work-orders/{wo_id}/work-return-sign": {
20752
21069
  "post": {
20753
21070
  "tags": [
20754
21071
  "work-orders"
20755
21072
  ],
20756
- "summary": "Close Order",
20757
- "description": "RETURNED -> CLOSED (TZ 5.13), CLOSE_ORDER signature.",
20758
- "operationId": "close_order_api_v1_work_orders__wo_id__close_post",
21073
+ "summary": "Work Return Sign",
21074
+ "description": "Fitter signs handing the order's work back.",
21075
+ "operationId": "work_return_sign_api_v1_work_orders__wo_id__work_return_sign_post",
21076
+ "parameters": [
21077
+ {
21078
+ "name": "wo_id",
21079
+ "in": "path",
21080
+ "required": true,
21081
+ "schema": {
21082
+ "type": "string",
21083
+ "format": "uuid",
21084
+ "title": "Wo Id"
21085
+ }
21086
+ },
21087
+ {
21088
+ "name": "authorization",
21089
+ "in": "header",
21090
+ "required": false,
21091
+ "schema": {
21092
+ "anyOf": [
21093
+ {
21094
+ "type": "string"
21095
+ },
21096
+ {
21097
+ "type": "null"
21098
+ }
21099
+ ],
21100
+ "title": "Authorization"
21101
+ }
21102
+ },
21103
+ {
21104
+ "name": "x-debug-person-id",
21105
+ "in": "header",
21106
+ "required": false,
21107
+ "schema": {
21108
+ "anyOf": [
21109
+ {
21110
+ "type": "string",
21111
+ "format": "uuid"
21112
+ },
21113
+ {
21114
+ "type": "null"
21115
+ }
21116
+ ],
21117
+ "title": "X-Debug-Person-Id"
21118
+ }
21119
+ }
21120
+ ],
21121
+ "requestBody": {
21122
+ "required": true,
21123
+ "content": {
21124
+ "application/json": {
21125
+ "schema": {
21126
+ "$ref": "#/components/schemas/WorkSignIn"
21127
+ }
21128
+ }
21129
+ }
21130
+ },
21131
+ "responses": {
21132
+ "200": {
21133
+ "description": "Successful Response",
21134
+ "content": {
21135
+ "application/json": {
21136
+ "schema": {
21137
+ "$ref": "#/components/schemas/WorkSignOut"
21138
+ }
21139
+ }
21140
+ }
21141
+ },
21142
+ "422": {
21143
+ "description": "Validation Error",
21144
+ "content": {
21145
+ "application/json": {
21146
+ "schema": {
21147
+ "$ref": "#/components/schemas/HTTPValidationError"
21148
+ }
21149
+ }
21150
+ }
21151
+ }
21152
+ }
21153
+ }
21154
+ },
21155
+ "/api/v1/work-orders/{wo_id}/finish": {
21156
+ "post": {
21157
+ "tags": [
21158
+ "work-orders"
21159
+ ],
21160
+ "summary": "Finish Order",
21161
+ "description": "All ops done -> REPAIR_FINISH on the item (IN_REPAIR -> AWAITING_QC).",
21162
+ "operationId": "finish_order_api_v1_work_orders__wo_id__finish_post",
21163
+ "parameters": [
21164
+ {
21165
+ "name": "wo_id",
21166
+ "in": "path",
21167
+ "required": true,
21168
+ "schema": {
21169
+ "type": "string",
21170
+ "format": "uuid",
21171
+ "title": "Wo Id"
21172
+ }
21173
+ },
21174
+ {
21175
+ "name": "authorization",
21176
+ "in": "header",
21177
+ "required": false,
21178
+ "schema": {
21179
+ "anyOf": [
21180
+ {
21181
+ "type": "string"
21182
+ },
21183
+ {
21184
+ "type": "null"
21185
+ }
21186
+ ],
21187
+ "title": "Authorization"
21188
+ }
21189
+ },
21190
+ {
21191
+ "name": "x-debug-person-id",
21192
+ "in": "header",
21193
+ "required": false,
21194
+ "schema": {
21195
+ "anyOf": [
21196
+ {
21197
+ "type": "string",
21198
+ "format": "uuid"
21199
+ },
21200
+ {
21201
+ "type": "null"
21202
+ }
21203
+ ],
21204
+ "title": "X-Debug-Person-Id"
21205
+ }
21206
+ }
21207
+ ],
21208
+ "requestBody": {
21209
+ "required": true,
21210
+ "content": {
21211
+ "application/json": {
21212
+ "schema": {
21213
+ "$ref": "#/components/schemas/TaskActionIn"
21214
+ }
21215
+ }
21216
+ }
21217
+ },
21218
+ "responses": {
21219
+ "200": {
21220
+ "description": "Successful Response",
21221
+ "content": {
21222
+ "application/json": {
21223
+ "schema": {
21224
+ "$ref": "#/components/schemas/WorkOrderOut"
21225
+ }
21226
+ }
21227
+ }
21228
+ },
21229
+ "422": {
21230
+ "description": "Validation Error",
21231
+ "content": {
21232
+ "application/json": {
21233
+ "schema": {
21234
+ "$ref": "#/components/schemas/HTTPValidationError"
21235
+ }
21236
+ }
21237
+ }
21238
+ }
21239
+ }
21240
+ }
21241
+ },
21242
+ "/api/v1/work-orders/{wo_id}/qc": {
21243
+ "post": {
21244
+ "tags": [
21245
+ "work-orders"
21246
+ ],
21247
+ "summary": "Qc Order",
21248
+ "description": "AWAITING_QC -> QC_ACCEPT (IN_STOCK_OK, order DONE) or QC_REJECT (IN_REPAIR).",
21249
+ "operationId": "qc_order_api_v1_work_orders__wo_id__qc_post",
21250
+ "parameters": [
21251
+ {
21252
+ "name": "wo_id",
21253
+ "in": "path",
21254
+ "required": true,
21255
+ "schema": {
21256
+ "type": "string",
21257
+ "format": "uuid",
21258
+ "title": "Wo Id"
21259
+ }
21260
+ },
21261
+ {
21262
+ "name": "authorization",
21263
+ "in": "header",
21264
+ "required": false,
21265
+ "schema": {
21266
+ "anyOf": [
21267
+ {
21268
+ "type": "string"
21269
+ },
21270
+ {
21271
+ "type": "null"
21272
+ }
21273
+ ],
21274
+ "title": "Authorization"
21275
+ }
21276
+ },
21277
+ {
21278
+ "name": "x-debug-person-id",
21279
+ "in": "header",
21280
+ "required": false,
21281
+ "schema": {
21282
+ "anyOf": [
21283
+ {
21284
+ "type": "string",
21285
+ "format": "uuid"
21286
+ },
21287
+ {
21288
+ "type": "null"
21289
+ }
21290
+ ],
21291
+ "title": "X-Debug-Person-Id"
21292
+ }
21293
+ }
21294
+ ],
21295
+ "requestBody": {
21296
+ "required": true,
21297
+ "content": {
21298
+ "application/json": {
21299
+ "schema": {
21300
+ "$ref": "#/components/schemas/QcIn"
21301
+ }
21302
+ }
21303
+ }
21304
+ },
21305
+ "responses": {
21306
+ "200": {
21307
+ "description": "Successful Response",
21308
+ "content": {
21309
+ "application/json": {
21310
+ "schema": {
21311
+ "$ref": "#/components/schemas/WorkOrderOut"
21312
+ }
21313
+ }
21314
+ }
21315
+ },
21316
+ "422": {
21317
+ "description": "Validation Error",
21318
+ "content": {
21319
+ "application/json": {
21320
+ "schema": {
21321
+ "$ref": "#/components/schemas/HTTPValidationError"
21322
+ }
21323
+ }
21324
+ }
21325
+ }
21326
+ }
21327
+ }
21328
+ },
21329
+ "/api/v1/work-orders/{wo_id}/return": {
21330
+ "post": {
21331
+ "tags": [
21332
+ "work-orders"
21333
+ ],
21334
+ "summary": "Return Order",
21335
+ "description": "DONE -> RETURNED: WORK_ORDER handover back to the opener, both sign (TZ 5.11).",
21336
+ "operationId": "return_order_api_v1_work_orders__wo_id__return_post",
21337
+ "parameters": [
21338
+ {
21339
+ "name": "wo_id",
21340
+ "in": "path",
21341
+ "required": true,
21342
+ "schema": {
21343
+ "type": "string",
21344
+ "format": "uuid",
21345
+ "title": "Wo Id"
21346
+ }
21347
+ },
21348
+ {
21349
+ "name": "authorization",
21350
+ "in": "header",
21351
+ "required": false,
21352
+ "schema": {
21353
+ "anyOf": [
21354
+ {
21355
+ "type": "string"
21356
+ },
21357
+ {
21358
+ "type": "null"
21359
+ }
21360
+ ],
21361
+ "title": "Authorization"
21362
+ }
21363
+ },
21364
+ {
21365
+ "name": "x-debug-person-id",
21366
+ "in": "header",
21367
+ "required": false,
21368
+ "schema": {
21369
+ "anyOf": [
21370
+ {
21371
+ "type": "string",
21372
+ "format": "uuid"
21373
+ },
21374
+ {
21375
+ "type": "null"
21376
+ }
21377
+ ],
21378
+ "title": "X-Debug-Person-Id"
21379
+ }
21380
+ }
21381
+ ],
21382
+ "requestBody": {
21383
+ "required": true,
21384
+ "content": {
21385
+ "application/json": {
21386
+ "schema": {
21387
+ "$ref": "#/components/schemas/AcceptIn"
21388
+ }
21389
+ }
21390
+ }
21391
+ },
21392
+ "responses": {
21393
+ "200": {
21394
+ "description": "Successful Response",
21395
+ "content": {
21396
+ "application/json": {
21397
+ "schema": {
21398
+ "$ref": "#/components/schemas/WorkOrderOut"
21399
+ }
21400
+ }
21401
+ }
21402
+ },
21403
+ "422": {
21404
+ "description": "Validation Error",
21405
+ "content": {
21406
+ "application/json": {
21407
+ "schema": {
21408
+ "$ref": "#/components/schemas/HTTPValidationError"
21409
+ }
21410
+ }
21411
+ }
21412
+ }
21413
+ }
21414
+ }
21415
+ },
21416
+ "/api/v1/work-orders/{wo_id}/close": {
21417
+ "post": {
21418
+ "tags": [
21419
+ "work-orders"
21420
+ ],
21421
+ "summary": "Close Order",
21422
+ "description": "RETURNED -> CLOSED (TZ 5.13), CLOSE_ORDER signature.",
21423
+ "operationId": "close_order_api_v1_work_orders__wo_id__close_post",
20759
21424
  "parameters": [
20760
21425
  {
20761
21426
  "name": "wo_id",
@@ -26997,7 +27662,6 @@
26997
27662
  "SEND_TO_REPAIR",
26998
27663
  "QC_ACCEPT",
26999
27664
  "QC_REJECT",
27000
- "STORE_IN",
27001
27665
  "ASSEMBLE",
27002
27666
  "DISASSEMBLE",
27003
27667
  "SEND_TO_PLANT",
@@ -28401,6 +29065,13 @@
28401
29065
  }
28402
29066
  ],
28403
29067
  "title": "Requested Status"
29068
+ },
29069
+ "measurements": {
29070
+ "items": {
29071
+ "$ref": "#/components/schemas/MeasurementValueIn"
29072
+ },
29073
+ "type": "array",
29074
+ "title": "Measurements"
28404
29075
  }
28405
29076
  },
28406
29077
  "additionalProperties": false,
@@ -28411,7 +29082,121 @@
28411
29082
  "client_event_uuid",
28412
29083
  "event_type"
28413
29084
  ],
28414
- "title": "InspectCommand"
29085
+ "title": "InspectCommand",
29086
+ "description": "Defectation — and, since B21, the measuring pass under the machine.\n\nFrom INSTALLED it is a pure record: the numbers are taken, the rules speak,\nand nothing moves until the master signs a verdict\n(/work-orders/measuring/{id}/verdict). `work_order_id` + `task_id` point at\nthe measuring order of the visit, so the readings belong to an operation\nlike any other work."
29087
+ },
29088
+ "InspectionSignIn": {
29089
+ "properties": {
29090
+ "event_at": {
29091
+ "type": "string",
29092
+ "format": "date-time",
29093
+ "title": "Event At"
29094
+ },
29095
+ "client_event_uuid": {
29096
+ "type": "string",
29097
+ "format": "uuid",
29098
+ "title": "Client Event Uuid"
29099
+ },
29100
+ "terminal_id": {
29101
+ "anyOf": [
29102
+ {
29103
+ "type": "string",
29104
+ "format": "uuid"
29105
+ },
29106
+ {
29107
+ "type": "null"
29108
+ }
29109
+ ],
29110
+ "title": "Terminal Id"
29111
+ },
29112
+ "badge_uid": {
29113
+ "anyOf": [
29114
+ {
29115
+ "type": "string",
29116
+ "maxLength": 128,
29117
+ "minLength": 1
29118
+ },
29119
+ {
29120
+ "type": "null"
29121
+ }
29122
+ ],
29123
+ "title": "Badge Uid"
29124
+ },
29125
+ "tab_no": {
29126
+ "anyOf": [
29127
+ {
29128
+ "type": "string",
29129
+ "maxLength": 32,
29130
+ "minLength": 1
29131
+ },
29132
+ {
29133
+ "type": "null"
29134
+ }
29135
+ ],
29136
+ "title": "Tab No"
29137
+ },
29138
+ "pin": {
29139
+ "type": "string",
29140
+ "maxLength": 12,
29141
+ "minLength": 4,
29142
+ "title": "Pin"
29143
+ },
29144
+ "lines": {
29145
+ "items": {
29146
+ "$ref": "#/components/schemas/VerdictLine"
29147
+ },
29148
+ "type": "array",
29149
+ "minItems": 1,
29150
+ "title": "Lines"
29151
+ },
29152
+ "comment": {
29153
+ "anyOf": [
29154
+ {
29155
+ "type": "string"
29156
+ },
29157
+ {
29158
+ "type": "null"
29159
+ }
29160
+ ],
29161
+ "title": "Comment"
29162
+ }
29163
+ },
29164
+ "additionalProperties": false,
29165
+ "type": "object",
29166
+ "required": [
29167
+ "event_at",
29168
+ "client_event_uuid",
29169
+ "pin",
29170
+ "lines"
29171
+ ],
29172
+ "title": "InspectionSignIn",
29173
+ "description": "The whole inspection pass, signed once by the man who walked it.\n\nOne signature over the list, not one per line: the pass is a single act of\na single person — he looked at these parts, in this order, and says this\nabout them. The payload_hash covers every line, so no line can be edited\nout of a signed pass (invariant 6).\n\nHe names himself the way a co-signature does (badge_uid under RFID, tab_no\nunder the TABEL pilot, PIN in both): the terminal is logged in as whoever\nopened the shift, and the inspector is not always that man."
29174
+ },
29175
+ "InspectionSignOut": {
29176
+ "properties": {
29177
+ "signed_by_person_id": {
29178
+ "type": "string",
29179
+ "format": "uuid",
29180
+ "title": "Signed By Person Id"
29181
+ },
29182
+ "existing": {
29183
+ "type": "boolean",
29184
+ "title": "Existing",
29185
+ "default": false
29186
+ },
29187
+ "results": {
29188
+ "items": {
29189
+ "$ref": "#/components/schemas/VerdictOut"
29190
+ },
29191
+ "type": "array",
29192
+ "title": "Results"
29193
+ }
29194
+ },
29195
+ "type": "object",
29196
+ "required": [
29197
+ "signed_by_person_id"
29198
+ ],
29199
+ "title": "InspectionSignOut"
28415
29200
  },
28416
29201
  "InstallCommand": {
28417
29202
  "properties": {
@@ -29568,6 +30353,28 @@
29568
30353
  "type": "boolean",
29569
30354
  "title": "Marked No Duplicate"
29570
30355
  },
30356
+ "resource_pct": {
30357
+ "anyOf": [
30358
+ {
30359
+ "type": "number"
30360
+ },
30361
+ {
30362
+ "type": "null"
30363
+ }
30364
+ ],
30365
+ "title": "Resource Pct"
30366
+ },
30367
+ "resource_param": {
30368
+ "anyOf": [
30369
+ {
30370
+ "type": "string"
30371
+ },
30372
+ {
30373
+ "type": "null"
30374
+ }
30375
+ ],
30376
+ "title": "Resource Param"
30377
+ },
29571
30378
  "attrs": {
29572
30379
  "additionalProperties": {
29573
30380
  "anyOf": [
@@ -29783,6 +30590,56 @@
29783
30590
  "title": "ItemPatch",
29784
30591
  "description": "Admin correction of the instance facts the flows do not capture.\n\nDeliberately narrow: everything else on a part card is either a projection\n(invariant 2) or a journal fact. Every applied change writes an audit_log row."
29785
30592
  },
30593
+ "KpiTrend": {
30594
+ "properties": {
30595
+ "days": {
30596
+ "items": {
30597
+ "type": "string",
30598
+ "format": "date"
30599
+ },
30600
+ "type": "array",
30601
+ "title": "Days"
30602
+ },
30603
+ "open_orders": {
30604
+ "items": {
30605
+ "type": "integer"
30606
+ },
30607
+ "type": "array",
30608
+ "title": "Open Orders"
30609
+ },
30610
+ "orders_opened": {
30611
+ "items": {
30612
+ "type": "integer"
30613
+ },
30614
+ "type": "array",
30615
+ "title": "Orders Opened"
30616
+ },
30617
+ "orders_closed": {
30618
+ "items": {
30619
+ "type": "integer"
30620
+ },
30621
+ "type": "array",
30622
+ "title": "Orders Closed"
30623
+ },
30624
+ "defects_found": {
30625
+ "items": {
30626
+ "type": "integer"
30627
+ },
30628
+ "type": "array",
30629
+ "title": "Defects Found"
30630
+ }
30631
+ },
30632
+ "type": "object",
30633
+ "required": [
30634
+ "days",
30635
+ "open_orders",
30636
+ "orders_opened",
30637
+ "orders_closed",
30638
+ "defects_found"
30639
+ ],
30640
+ "title": "KpiTrend",
30641
+ "description": "Daily series under the dashboard tiles. Every list is `days` long."
30642
+ },
29786
30643
  "LocationContents": {
29787
30644
  "properties": {
29788
30645
  "location": {
@@ -30597,6 +31454,30 @@
30597
31454
  "title": "LocoOverviewRow",
30598
31455
  "description": "One tile of the terminal master-mode grid (GET /locomotives/overview).\n\nopen_order_ids lets the terminal join its own cached order rows offline;\nthe badge count is just len(open_order_ids). attention_order_ids is the\nsubset the master must decide on (same OPEN/ON_HOLD/RETURNED set the\nlocomotive card calls «требует внимания») — the grid sorts and dots by it\nwithout fetching every order."
30599
31456
  },
31457
+ "LocoSectionRef": {
31458
+ "properties": {
31459
+ "code": {
31460
+ "type": "string",
31461
+ "title": "Code"
31462
+ },
31463
+ "band": {
31464
+ "type": "string",
31465
+ "title": "Band"
31466
+ },
31467
+ "sort": {
31468
+ "type": "integer",
31469
+ "title": "Sort"
31470
+ }
31471
+ },
31472
+ "type": "object",
31473
+ "required": [
31474
+ "code",
31475
+ "band",
31476
+ "sort"
31477
+ ],
31478
+ "title": "LocoSectionRef",
31479
+ "description": "One place on the machine, as the position picker draws it.\n\nOrdered by `sort`; the band a section belongs to is drawn where its\nsmallest sort puts it, so one number orders both the strip and the row."
31480
+ },
30600
31481
  "LocoSeriesOut": {
30601
31482
  "properties": {
30602
31483
  "code": {
@@ -31562,6 +32443,232 @@
31562
32443
  ],
31563
32444
  "title": "MarkedDupeItem"
31564
32445
  },
32446
+ "MeasuredItemOut": {
32447
+ "properties": {
32448
+ "item_id": {
32449
+ "type": "string",
32450
+ "format": "uuid",
32451
+ "title": "Item Id"
32452
+ },
32453
+ "inventory_no": {
32454
+ "type": "string",
32455
+ "title": "Inventory No"
32456
+ },
32457
+ "marked_no": {
32458
+ "anyOf": [
32459
+ {
32460
+ "type": "string"
32461
+ },
32462
+ {
32463
+ "type": "null"
32464
+ }
32465
+ ],
32466
+ "title": "Marked No"
32467
+ },
32468
+ "nomenclature_id": {
32469
+ "type": "string",
32470
+ "format": "uuid",
32471
+ "title": "Nomenclature Id"
32472
+ },
32473
+ "nomenclature_name": {
32474
+ "anyOf": [
32475
+ {
32476
+ "type": "string"
32477
+ },
32478
+ {
32479
+ "type": "null"
32480
+ }
32481
+ ],
32482
+ "title": "Nomenclature Name"
32483
+ },
32484
+ "mount_position": {
32485
+ "anyOf": [
32486
+ {
32487
+ "type": "string"
32488
+ },
32489
+ {
32490
+ "type": "null"
32491
+ }
32492
+ ],
32493
+ "title": "Mount Position"
32494
+ },
32495
+ "measured_at": {
32496
+ "anyOf": [
32497
+ {
32498
+ "type": "string",
32499
+ "format": "date-time"
32500
+ },
32501
+ {
32502
+ "type": "null"
32503
+ }
32504
+ ],
32505
+ "title": "Measured At"
32506
+ },
32507
+ "values": {
32508
+ "items": {
32509
+ "$ref": "#/components/schemas/MeasuredValueOut"
32510
+ },
32511
+ "type": "array",
32512
+ "title": "Values"
32513
+ },
32514
+ "recommendations": {
32515
+ "items": {
32516
+ "additionalProperties": true,
32517
+ "type": "object"
32518
+ },
32519
+ "type": "array",
32520
+ "title": "Recommendations"
32521
+ },
32522
+ "verdict": {
32523
+ "anyOf": [
32524
+ {
32525
+ "type": "string"
32526
+ },
32527
+ {
32528
+ "type": "null"
32529
+ }
32530
+ ],
32531
+ "title": "Verdict"
32532
+ },
32533
+ "verdict_work_order_number": {
32534
+ "anyOf": [
32535
+ {
32536
+ "type": "string"
32537
+ },
32538
+ {
32539
+ "type": "null"
32540
+ }
32541
+ ],
32542
+ "title": "Verdict Work Order Number"
32543
+ }
32544
+ },
32545
+ "type": "object",
32546
+ "required": [
32547
+ "item_id",
32548
+ "inventory_no",
32549
+ "marked_no",
32550
+ "nomenclature_id",
32551
+ "nomenclature_name",
32552
+ "mount_position",
32553
+ "measured_at"
32554
+ ],
32555
+ "title": "MeasuredItemOut",
32556
+ "description": "One part standing on the machine: what it reads, what the rules say\nabout it, and what the master already decided."
32557
+ },
32558
+ "MeasuredValueOut": {
32559
+ "properties": {
32560
+ "param_code": {
32561
+ "type": "string",
32562
+ "title": "Param Code"
32563
+ },
32564
+ "param_name": {
32565
+ "anyOf": [
32566
+ {
32567
+ "type": "string"
32568
+ },
32569
+ {
32570
+ "type": "null"
32571
+ }
32572
+ ],
32573
+ "title": "Param Name"
32574
+ },
32575
+ "actual_value": {
32576
+ "anyOf": [
32577
+ {
32578
+ "type": "string",
32579
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
32580
+ },
32581
+ {
32582
+ "type": "null"
32583
+ }
32584
+ ],
32585
+ "title": "Actual Value"
32586
+ },
32587
+ "norm_min": {
32588
+ "anyOf": [
32589
+ {
32590
+ "type": "string",
32591
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
32592
+ },
32593
+ {
32594
+ "type": "null"
32595
+ }
32596
+ ],
32597
+ "title": "Norm Min"
32598
+ },
32599
+ "norm_max": {
32600
+ "anyOf": [
32601
+ {
32602
+ "type": "string",
32603
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
32604
+ },
32605
+ {
32606
+ "type": "null"
32607
+ }
32608
+ ],
32609
+ "title": "Norm Max"
32610
+ },
32611
+ "uom": {
32612
+ "anyOf": [
32613
+ {
32614
+ "type": "string"
32615
+ },
32616
+ {
32617
+ "type": "null"
32618
+ }
32619
+ ],
32620
+ "title": "Uom"
32621
+ },
32622
+ "is_pass": {
32623
+ "anyOf": [
32624
+ {
32625
+ "type": "boolean"
32626
+ },
32627
+ {
32628
+ "type": "null"
32629
+ }
32630
+ ],
32631
+ "title": "Is Pass"
32632
+ },
32633
+ "measured_at": {
32634
+ "anyOf": [
32635
+ {
32636
+ "type": "string",
32637
+ "format": "date-time"
32638
+ },
32639
+ {
32640
+ "type": "null"
32641
+ }
32642
+ ],
32643
+ "title": "Measured At"
32644
+ },
32645
+ "stage": {
32646
+ "anyOf": [
32647
+ {
32648
+ "type": "string"
32649
+ },
32650
+ {
32651
+ "type": "null"
32652
+ }
32653
+ ],
32654
+ "title": "Stage"
32655
+ }
32656
+ },
32657
+ "type": "object",
32658
+ "required": [
32659
+ "param_code",
32660
+ "param_name",
32661
+ "actual_value",
32662
+ "norm_min",
32663
+ "norm_max",
32664
+ "uom",
32665
+ "is_pass",
32666
+ "measured_at",
32667
+ "stage"
32668
+ ],
32669
+ "title": "MeasuredValueOut",
32670
+ "description": "The last reading of one parameter, as the master's screen shows it."
32671
+ },
31565
32672
  "MeasurementAddIn": {
31566
32673
  "properties": {
31567
32674
  "measured_at": {
@@ -31752,6 +32859,75 @@
31752
32859
  "title": "MeasurementValueIn",
31753
32860
  "description": "One number the terminal took. Only the code and the value travel: norms,\nunit and name are snapshot from the part type's passport form server-side,\nso a kiosk with a stale cache cannot record a norm nobody agreed to."
31754
32861
  },
32862
+ "MeasuringOrderIn": {
32863
+ "properties": {
32864
+ "event_at": {
32865
+ "type": "string",
32866
+ "format": "date-time",
32867
+ "title": "Event At"
32868
+ },
32869
+ "client_event_uuid": {
32870
+ "type": "string",
32871
+ "format": "uuid",
32872
+ "title": "Client Event Uuid"
32873
+ },
32874
+ "terminal_id": {
32875
+ "anyOf": [
32876
+ {
32877
+ "type": "string",
32878
+ "format": "uuid"
32879
+ },
32880
+ {
32881
+ "type": "null"
32882
+ }
32883
+ ],
32884
+ "title": "Terminal Id"
32885
+ },
32886
+ "locomotive_visit_id": {
32887
+ "anyOf": [
32888
+ {
32889
+ "type": "string",
32890
+ "format": "uuid"
32891
+ },
32892
+ {
32893
+ "type": "null"
32894
+ }
32895
+ ],
32896
+ "title": "Locomotive Visit Id"
32897
+ },
32898
+ "locomotive_id": {
32899
+ "anyOf": [
32900
+ {
32901
+ "type": "string",
32902
+ "format": "uuid"
32903
+ },
32904
+ {
32905
+ "type": "null"
32906
+ }
32907
+ ],
32908
+ "title": "Locomotive Id"
32909
+ },
32910
+ "repair_type_code": {
32911
+ "anyOf": [
32912
+ {
32913
+ "type": "string"
32914
+ },
32915
+ {
32916
+ "type": "null"
32917
+ }
32918
+ ],
32919
+ "title": "Repair Type Code"
32920
+ }
32921
+ },
32922
+ "additionalProperties": false,
32923
+ "type": "object",
32924
+ "required": [
32925
+ "event_at",
32926
+ "client_event_uuid"
32927
+ ],
32928
+ "title": "MeasuringOrderIn",
32929
+ "description": "Open (or re-fetch) the measuring order of one locomotive visit.\n\nThe visit may be named directly, or by the machine the terminal stands at.\nThe second shape exists because nothing in the depot opens a visit today\n(TZ 9.2): the man taps «tekshirish» on the locomotive screen, names what it\ncame in for, and the visit is born there — otherwise the button is dead\nuntil somebody remembers to enter the visit at a desk."
32930
+ },
31755
32931
  "MemberCloseIn": {
31756
32932
  "properties": {
31757
32933
  "valid_to": {
@@ -32013,6 +33189,51 @@
32013
33189
  ],
32014
33190
  "title": "MoveCommand"
32015
33191
  },
33192
+ "NavCounters": {
33193
+ "properties": {
33194
+ "orders_overdue": {
33195
+ "anyOf": [
33196
+ {
33197
+ "type": "integer"
33198
+ },
33199
+ {
33200
+ "type": "null"
33201
+ }
33202
+ ],
33203
+ "title": "Orders Overdue"
33204
+ },
33205
+ "disposition": {
33206
+ "anyOf": [
33207
+ {
33208
+ "type": "integer"
33209
+ },
33210
+ {
33211
+ "type": "null"
33212
+ }
33213
+ ],
33214
+ "title": "Disposition"
33215
+ },
33216
+ "inventory_open": {
33217
+ "anyOf": [
33218
+ {
33219
+ "type": "integer"
33220
+ },
33221
+ {
33222
+ "type": "null"
33223
+ }
33224
+ ],
33225
+ "title": "Inventory Open"
33226
+ }
33227
+ },
33228
+ "type": "object",
33229
+ "required": [
33230
+ "orders_overdue",
33231
+ "disposition",
33232
+ "inventory_open"
33233
+ ],
33234
+ "title": "NavCounters",
33235
+ "description": "What waits behind each menu line. None = the caller may not open it."
33236
+ },
32016
33237
  "NodeOut": {
32017
33238
  "properties": {
32018
33239
  "key": {
@@ -37902,6 +39123,9 @@
37902
39123
  {
37903
39124
  "type": "string",
37904
39125
  "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
39126
+ },
39127
+ {
39128
+ "type": "string"
37905
39129
  }
37906
39130
  ],
37907
39131
  "title": "Value"
@@ -37941,7 +39165,7 @@
37941
39165
  "value"
37942
39166
  ],
37943
39167
  "title": "RuleCondition",
37944
- "description": "One comparison. `param` is a nomenclature_fields.code; for a pair field\n`side` says which wheel is asked (any = either, both = both)."
39168
+ "description": "One comparison. `param` is a nomenclature_fields.code; for a pair field\n`side` says which wheel is asked (any = either, both = both).\n\n`value` is a number OR one answer of a select field: the regulation picks its\nnumber by a CLASS («elektrovoz», «to'liq ko'rik»), so a threshold that is not\na number is a class name and the only comparison it accepts is `=`."
37945
39169
  },
37946
39170
  "RuleCondition-Output": {
37947
39171
  "properties": {
@@ -37964,8 +39188,15 @@
37964
39188
  "title": "Op"
37965
39189
  },
37966
39190
  "value": {
37967
- "type": "string",
37968
- "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
39191
+ "anyOf": [
39192
+ {
39193
+ "type": "string",
39194
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
39195
+ },
39196
+ {
39197
+ "type": "string"
39198
+ }
39199
+ ],
37969
39200
  "title": "Value"
37970
39201
  },
37971
39202
  "value2": {
@@ -38000,7 +39231,7 @@
38000
39231
  "value"
38001
39232
  ],
38002
39233
  "title": "RuleCondition",
38003
- "description": "One comparison. `param` is a nomenclature_fields.code; for a pair field\n`side` says which wheel is asked (any = either, both = both)."
39234
+ "description": "One comparison. `param` is a nomenclature_fields.code; for a pair field\n`side` says which wheel is asked (any = either, both = both).\n\n`value` is a number OR one answer of a select field: the regulation picks its\nnumber by a CLASS («elektrovoz», «to'liq ko'rik»), so a threshold that is not\na number is a class name and the only comparison it accepts is `=`."
38004
39235
  },
38005
39236
  "RuleHitsReport": {
38006
39237
  "properties": {
@@ -40165,6 +41396,201 @@
40165
41396
  "title": "StockReceiveBatchIn",
40166
41397
  "description": "POST /items/stock-receive/batch (B18): a delivery booked into a room.\n\nDeliberately NOT a locomotive destination: a part going onto a machine is\n«Ro'yxatga olish» and writes FIELD_REGISTER/INSTALL. Two acts, two events,\none batch mechanism underneath.\n\n`condition` is chosen once for the whole pass — a delivery arrives in one\nstate, and asking per part would cost the operator a tap for nothing. The\npassport still rides per entry."
40167
41398
  },
41399
+ "StoreInCommand": {
41400
+ "properties": {
41401
+ "item_id": {
41402
+ "type": "string",
41403
+ "format": "uuid",
41404
+ "title": "Item Id"
41405
+ },
41406
+ "event_at": {
41407
+ "type": "string",
41408
+ "format": "date-time",
41409
+ "title": "Event At"
41410
+ },
41411
+ "client_event_uuid": {
41412
+ "type": "string",
41413
+ "format": "uuid",
41414
+ "title": "Client Event Uuid"
41415
+ },
41416
+ "to_location_id": {
41417
+ "anyOf": [
41418
+ {
41419
+ "type": "string",
41420
+ "format": "uuid"
41421
+ },
41422
+ {
41423
+ "type": "null"
41424
+ }
41425
+ ],
41426
+ "title": "To Location Id"
41427
+ },
41428
+ "to_locomotive_id": {
41429
+ "anyOf": [
41430
+ {
41431
+ "type": "string",
41432
+ "format": "uuid"
41433
+ },
41434
+ {
41435
+ "type": "null"
41436
+ }
41437
+ ],
41438
+ "title": "To Locomotive Id"
41439
+ },
41440
+ "to_holder_person_id": {
41441
+ "anyOf": [
41442
+ {
41443
+ "type": "string",
41444
+ "format": "uuid"
41445
+ },
41446
+ {
41447
+ "type": "null"
41448
+ }
41449
+ ],
41450
+ "title": "To Holder Person Id"
41451
+ },
41452
+ "to_parent_item_id": {
41453
+ "anyOf": [
41454
+ {
41455
+ "type": "string",
41456
+ "format": "uuid"
41457
+ },
41458
+ {
41459
+ "type": "null"
41460
+ }
41461
+ ],
41462
+ "title": "To Parent Item Id"
41463
+ },
41464
+ "counterparty_person_id": {
41465
+ "anyOf": [
41466
+ {
41467
+ "type": "string",
41468
+ "format": "uuid"
41469
+ },
41470
+ {
41471
+ "type": "null"
41472
+ }
41473
+ ],
41474
+ "title": "Counterparty Person Id"
41475
+ },
41476
+ "terminal_id": {
41477
+ "anyOf": [
41478
+ {
41479
+ "type": "string",
41480
+ "format": "uuid"
41481
+ },
41482
+ {
41483
+ "type": "null"
41484
+ }
41485
+ ],
41486
+ "title": "Terminal Id"
41487
+ },
41488
+ "shift_instance_id": {
41489
+ "anyOf": [
41490
+ {
41491
+ "type": "string",
41492
+ "format": "uuid"
41493
+ },
41494
+ {
41495
+ "type": "null"
41496
+ }
41497
+ ],
41498
+ "title": "Shift Instance Id"
41499
+ },
41500
+ "locomotive_visit_id": {
41501
+ "anyOf": [
41502
+ {
41503
+ "type": "string",
41504
+ "format": "uuid"
41505
+ },
41506
+ {
41507
+ "type": "null"
41508
+ }
41509
+ ],
41510
+ "title": "Locomotive Visit Id"
41511
+ },
41512
+ "work_order_id": {
41513
+ "anyOf": [
41514
+ {
41515
+ "type": "string",
41516
+ "format": "uuid"
41517
+ },
41518
+ {
41519
+ "type": "null"
41520
+ }
41521
+ ],
41522
+ "title": "Work Order Id"
41523
+ },
41524
+ "task_id": {
41525
+ "anyOf": [
41526
+ {
41527
+ "type": "string",
41528
+ "format": "uuid"
41529
+ },
41530
+ {
41531
+ "type": "null"
41532
+ }
41533
+ ],
41534
+ "title": "Task Id"
41535
+ },
41536
+ "defect_code": {
41537
+ "anyOf": [
41538
+ {
41539
+ "type": "string"
41540
+ },
41541
+ {
41542
+ "type": "null"
41543
+ }
41544
+ ],
41545
+ "title": "Defect Code"
41546
+ },
41547
+ "comment": {
41548
+ "anyOf": [
41549
+ {
41550
+ "type": "string"
41551
+ },
41552
+ {
41553
+ "type": "null"
41554
+ }
41555
+ ],
41556
+ "title": "Comment"
41557
+ },
41558
+ "payload": {
41559
+ "additionalProperties": true,
41560
+ "type": "object",
41561
+ "title": "Payload"
41562
+ },
41563
+ "is_offline": {
41564
+ "type": "boolean",
41565
+ "title": "Is Offline",
41566
+ "default": false
41567
+ },
41568
+ "event_type": {
41569
+ "type": "string",
41570
+ "const": "STORE_IN",
41571
+ "title": "Event Type"
41572
+ },
41573
+ "requested_status": {
41574
+ "type": "string",
41575
+ "enum": [
41576
+ "IN_STOCK_OK",
41577
+ "IN_STOCK_DEFECT"
41578
+ ],
41579
+ "title": "Requested Status",
41580
+ "default": "IN_STOCK_DEFECT"
41581
+ }
41582
+ },
41583
+ "additionalProperties": false,
41584
+ "type": "object",
41585
+ "required": [
41586
+ "item_id",
41587
+ "event_at",
41588
+ "client_event_uuid",
41589
+ "event_type"
41590
+ ],
41591
+ "title": "StoreInCommand",
41592
+ "description": "Storekeeper puts a part on a shelf and says WHICH shelf it belongs on.\n\nA part removed under a planned check has no defect; filing it as\nIN_STOCK_DEFECT made every stock report call serviceable parts defective.\nThe default keeps the old behaviour, so a silent client cannot promote one."
41593
+ },
40168
41594
  "StornoCommand": {
40169
41595
  "properties": {
40170
41596
  "item_id": {
@@ -40602,10 +42028,110 @@
40602
42028
  "type": "object",
40603
42029
  "required": [
40604
42030
  "event_at",
40605
- "client_event_uuid"
42031
+ "client_event_uuid"
42032
+ ],
42033
+ "title": "TaskActionIn",
42034
+ "description": "start/pause/resume/finish envelope; spent_minutes is now summed from the\njournal intervals by services.repair_tasks, not supplied by the client."
42035
+ },
42036
+ "TaskCosignIn": {
42037
+ "properties": {
42038
+ "event_at": {
42039
+ "type": "string",
42040
+ "format": "date-time",
42041
+ "title": "Event At"
42042
+ },
42043
+ "client_event_uuid": {
42044
+ "type": "string",
42045
+ "format": "uuid",
42046
+ "title": "Client Event Uuid"
42047
+ },
42048
+ "terminal_id": {
42049
+ "anyOf": [
42050
+ {
42051
+ "type": "string",
42052
+ "format": "uuid"
42053
+ },
42054
+ {
42055
+ "type": "null"
42056
+ }
42057
+ ],
42058
+ "title": "Terminal Id"
42059
+ },
42060
+ "badge_uid": {
42061
+ "anyOf": [
42062
+ {
42063
+ "type": "string",
42064
+ "maxLength": 128,
42065
+ "minLength": 1
42066
+ },
42067
+ {
42068
+ "type": "null"
42069
+ }
42070
+ ],
42071
+ "title": "Badge Uid"
42072
+ },
42073
+ "tab_no": {
42074
+ "anyOf": [
42075
+ {
42076
+ "type": "string",
42077
+ "maxLength": 32,
42078
+ "minLength": 1
42079
+ },
42080
+ {
42081
+ "type": "null"
42082
+ }
42083
+ ],
42084
+ "title": "Tab No"
42085
+ },
42086
+ "pin": {
42087
+ "type": "string",
42088
+ "maxLength": 12,
42089
+ "minLength": 4,
42090
+ "title": "Pin"
42091
+ },
42092
+ "action": {
42093
+ "type": "string",
42094
+ "enum": [
42095
+ "start",
42096
+ "pause",
42097
+ "resume",
42098
+ "finish"
42099
+ ],
42100
+ "title": "Action"
42101
+ },
42102
+ "result_note": {
42103
+ "anyOf": [
42104
+ {
42105
+ "type": "string"
42106
+ },
42107
+ {
42108
+ "type": "null"
42109
+ }
42110
+ ],
42111
+ "title": "Result Note"
42112
+ },
42113
+ "comment": {
42114
+ "anyOf": [
42115
+ {
42116
+ "type": "string"
42117
+ },
42118
+ {
42119
+ "type": "null"
42120
+ }
42121
+ ],
42122
+ "title": "Comment"
42123
+ }
42124
+ },
42125
+ "additionalProperties": false,
42126
+ "type": "object",
42127
+ "required": [
42128
+ "event_at",
42129
+ "client_event_uuid",
42130
+ "pin",
42131
+ "action"
40606
42132
  ],
40607
- "title": "TaskActionIn",
40608
- "description": "start/pause/resume/finish envelope; spent_minutes is now summed from the\njournal intervals by services.repair_tasks, not supplied by the client."
42133
+ "title": "TaskCosignIn",
42134
+ "description": "B10: the fitter moves his operation with his own card on the master's\nscreen — the counterpart of WorkSignIn for REPAIR_START/PAUSE/RESUME/FINISH.\n\nIdentification follows the installation switch exactly as WorkSignIn does\n(badge_uid under RFID, tab_no under the TABEL pilot, PIN in both). No\nsignature is written: repair steps are routine events (TZ 8), the second\ncard is here only so the work is journalled under the man who does it."
40609
42135
  },
40610
42136
  "TaskIn": {
40611
42137
  "properties": {
@@ -41303,6 +42829,193 @@
41303
42829
  ],
41304
42830
  "title": "ValidationError"
41305
42831
  },
42832
+ "VerdictIn": {
42833
+ "properties": {
42834
+ "event_at": {
42835
+ "type": "string",
42836
+ "format": "date-time",
42837
+ "title": "Event At"
42838
+ },
42839
+ "client_event_uuid": {
42840
+ "type": "string",
42841
+ "format": "uuid",
42842
+ "title": "Client Event Uuid"
42843
+ },
42844
+ "terminal_id": {
42845
+ "anyOf": [
42846
+ {
42847
+ "type": "string",
42848
+ "format": "uuid"
42849
+ },
42850
+ {
42851
+ "type": "null"
42852
+ }
42853
+ ],
42854
+ "title": "Terminal Id"
42855
+ },
42856
+ "item_id": {
42857
+ "type": "string",
42858
+ "format": "uuid",
42859
+ "title": "Item Id"
42860
+ },
42861
+ "decision": {
42862
+ "type": "string",
42863
+ "enum": [
42864
+ "REPAIR",
42865
+ "NO_ACTION"
42866
+ ],
42867
+ "title": "Decision"
42868
+ },
42869
+ "defect_code": {
42870
+ "anyOf": [
42871
+ {
42872
+ "type": "string"
42873
+ },
42874
+ {
42875
+ "type": "null"
42876
+ }
42877
+ ],
42878
+ "title": "Defect Code"
42879
+ },
42880
+ "repair_type_code": {
42881
+ "anyOf": [
42882
+ {
42883
+ "type": "string"
42884
+ },
42885
+ {
42886
+ "type": "null"
42887
+ }
42888
+ ],
42889
+ "title": "Repair Type Code"
42890
+ },
42891
+ "comment": {
42892
+ "anyOf": [
42893
+ {
42894
+ "type": "string"
42895
+ },
42896
+ {
42897
+ "type": "null"
42898
+ }
42899
+ ],
42900
+ "title": "Comment"
42901
+ }
42902
+ },
42903
+ "additionalProperties": false,
42904
+ "type": "object",
42905
+ "required": [
42906
+ "event_at",
42907
+ "client_event_uuid",
42908
+ "item_id",
42909
+ "decision"
42910
+ ],
42911
+ "title": "VerdictIn",
42912
+ "description": "The master's decision on ONE measured part: repair it, or leave it.\n\nREPAIR opens the removal order right there — with the reason he signed for,\na defect or a scheduled check, exactly one of the two like every other\norder. NO_ACTION moves nothing: it is a signed note on the part saying the\nnumbers were seen and found good enough."
42913
+ },
42914
+ "VerdictLine": {
42915
+ "properties": {
42916
+ "item_id": {
42917
+ "type": "string",
42918
+ "format": "uuid",
42919
+ "title": "Item Id"
42920
+ },
42921
+ "decision": {
42922
+ "type": "string",
42923
+ "enum": [
42924
+ "REPAIR",
42925
+ "NO_ACTION"
42926
+ ],
42927
+ "title": "Decision"
42928
+ },
42929
+ "defect_code": {
42930
+ "anyOf": [
42931
+ {
42932
+ "type": "string"
42933
+ },
42934
+ {
42935
+ "type": "null"
42936
+ }
42937
+ ],
42938
+ "title": "Defect Code"
42939
+ },
42940
+ "repair_type_code": {
42941
+ "anyOf": [
42942
+ {
42943
+ "type": "string"
42944
+ },
42945
+ {
42946
+ "type": "null"
42947
+ }
42948
+ ],
42949
+ "title": "Repair Type Code"
42950
+ },
42951
+ "capability_code": {
42952
+ "anyOf": [
42953
+ {
42954
+ "type": "string"
42955
+ },
42956
+ {
42957
+ "type": "null"
42958
+ }
42959
+ ],
42960
+ "title": "Capability Code"
42961
+ },
42962
+ "comment": {
42963
+ "anyOf": [
42964
+ {
42965
+ "type": "string"
42966
+ },
42967
+ {
42968
+ "type": "null"
42969
+ }
42970
+ ],
42971
+ "title": "Comment"
42972
+ }
42973
+ },
42974
+ "additionalProperties": false,
42975
+ "type": "object",
42976
+ "required": [
42977
+ "item_id",
42978
+ "decision"
42979
+ ],
42980
+ "title": "VerdictLine",
42981
+ "description": "One part's line in an inspection pass — the same decision as VerdictIn,\nminus the envelope, plus the operation the order should carry.\n\n`capability_code` is how «send it for investigation» is said: there is no\nthird reason_kind and there must not be one (a pseudo-defect «inspection»\nwould head the Pareto forever), so the order opens on its real reason and\ncarries e.g. дефектоскопия as its operation."
42982
+ },
42983
+ "VerdictOut": {
42984
+ "properties": {
42985
+ "decision": {
42986
+ "type": "string",
42987
+ "title": "Decision"
42988
+ },
42989
+ "work_order_id": {
42990
+ "anyOf": [
42991
+ {
42992
+ "type": "string",
42993
+ "format": "uuid"
42994
+ },
42995
+ {
42996
+ "type": "null"
42997
+ }
42998
+ ],
42999
+ "title": "Work Order Id"
43000
+ },
43001
+ "work_order_number": {
43002
+ "anyOf": [
43003
+ {
43004
+ "type": "string"
43005
+ },
43006
+ {
43007
+ "type": "null"
43008
+ }
43009
+ ],
43010
+ "title": "Work Order Number"
43011
+ }
43012
+ },
43013
+ "type": "object",
43014
+ "required": [
43015
+ "decision"
43016
+ ],
43017
+ "title": "VerdictOut"
43018
+ },
41306
43019
  "VisitOut": {
41307
43020
  "properties": {
41308
43021
  "id": {
@@ -41603,6 +43316,17 @@
41603
43316
  ],
41604
43317
  "title": "Closed At"
41605
43318
  },
43319
+ "item_status": {
43320
+ "anyOf": [
43321
+ {
43322
+ "type": "string"
43323
+ },
43324
+ {
43325
+ "type": "null"
43326
+ }
43327
+ ],
43328
+ "title": "Item Status"
43329
+ },
41606
43330
  "tasks": {
41607
43331
  "items": {
41608
43332
  "$ref": "#/components/schemas/TaskOut"
@@ -42076,6 +43800,17 @@
42076
43800
  }
42077
43801
  ],
42078
43802
  "title": "Closed At"
43803
+ },
43804
+ "item_status": {
43805
+ "anyOf": [
43806
+ {
43807
+ "type": "string"
43808
+ },
43809
+ {
43810
+ "type": "null"
43811
+ }
43812
+ ],
43813
+ "title": "Item Status"
42079
43814
  }
42080
43815
  },
42081
43816
  "type": "object",