@things-factory/ops-master 10.1.247 → 10.1.248
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/package.json +3 -3
- package/dist-client/bootstrap.d.ts +0 -19
- package/dist-client/bootstrap.js +0 -66
- package/dist-client/bootstrap.js.map +0 -1
- package/dist-client/index.d.ts +0 -17
- package/dist-client/index.js +0 -21
- package/dist-client/index.js.map +0 -1
- package/dist-client/master-change-approval.d.ts +0 -14
- package/dist-client/master-change-approval.js +0 -36
- package/dist-client/master-change-approval.js.map +0 -1
- package/dist-client/master-change-policy-axes.d.ts +0 -37
- package/dist-client/master-change-policy-axes.js +0 -29
- package/dist-client/master-change-policy-axes.js.map +0 -1
- package/dist-client/master-change-policy-panel.d.ts +0 -59
- package/dist-client/master-change-policy-panel.js +0 -454
- package/dist-client/master-change-policy-panel.js.map +0 -1
- package/dist-client/master-change-providers.d.ts +0 -4
- package/dist-client/master-change-providers.js +0 -91
- package/dist-client/master-change-providers.js.map +0 -1
- package/dist-client/pages/master/applied-when-dialog.d.ts +0 -48
- package/dist-client/pages/master/applied-when-dialog.js +0 -137
- package/dist-client/pages/master/applied-when-dialog.js.map +0 -1
- package/dist-client/pages/master/assignment-fields.d.ts +0 -27
- package/dist-client/pages/master/assignment-fields.js +0 -62
- package/dist-client/pages/master/assignment-fields.js.map +0 -1
- package/dist-client/pages/master/equipment-class.d.ts +0 -12
- package/dist-client/pages/master/equipment-class.js +0 -42
- package/dist-client/pages/master/equipment-class.js.map +0 -1
- package/dist-client/pages/master/equipment.d.ts +0 -12
- package/dist-client/pages/master/equipment.js +0 -58
- package/dist-client/pages/master/equipment.js.map +0 -1
- package/dist-client/pages/master/grist-iso-duration.d.ts +0 -20
- package/dist-client/pages/master/grist-iso-duration.js +0 -70
- package/dist-client/pages/master/grist-iso-duration.js.map +0 -1
- package/dist-client/pages/master/grist-reference.d.ts +0 -91
- package/dist-client/pages/master/grist-reference.js +0 -419
- package/dist-client/pages/master/grist-reference.js.map +0 -1
- package/dist-client/pages/master/import-rows.d.ts +0 -35
- package/dist-client/pages/master/import-rows.js +0 -66
- package/dist-client/pages/master/import-rows.js.map +0 -1
- package/dist-client/pages/master/iso-duration.d.ts +0 -34
- package/dist-client/pages/master/iso-duration.js +0 -76
- package/dist-client/pages/master/iso-duration.js.map +0 -1
- package/dist-client/pages/master/master-options.d.ts +0 -40
- package/dist-client/pages/master/master-options.js +0 -54
- package/dist-client/pages/master/master-options.js.map +0 -1
- package/dist-client/pages/master/master-page-base.d.ts +0 -369
- package/dist-client/pages/master/master-page-base.js +0 -657
- package/dist-client/pages/master/master-page-base.js.map +0 -1
- package/dist-client/pages/master/material-class.d.ts +0 -12
- package/dist-client/pages/master/material-class.js +0 -42
- package/dist-client/pages/master/material-class.js.map +0 -1
- package/dist-client/pages/master/material-definition.d.ts +0 -5
- package/dist-client/pages/master/material-definition.js +0 -14
- package/dist-client/pages/master/material-definition.js.map +0 -1
- package/dist-client/pages/master/material-revision-fields.d.ts +0 -2
- package/dist-client/pages/master/material-revision-fields.js +0 -43
- package/dist-client/pages/master/material-revision-fields.js.map +0 -1
- package/dist-client/pages/master/operation-definition.d.ts +0 -12
- package/dist-client/pages/master/operation-definition.js +0 -49
- package/dist-client/pages/master/operation-definition.js.map +0 -1
- package/dist-client/pages/master/operational-location.d.ts +0 -84
- package/dist-client/pages/master/operational-location.js +0 -432
- package/dist-client/pages/master/operational-location.js.map +0 -1
- package/dist-client/pages/master/person.d.ts +0 -12
- package/dist-client/pages/master/person.js +0 -41
- package/dist-client/pages/master/person.js.map +0 -1
- package/dist-client/pages/master/personnel-class.d.ts +0 -12
- package/dist-client/pages/master/personnel-class.js +0 -43
- package/dist-client/pages/master/personnel-class.js.map +0 -1
- package/dist-client/pages/master/physical-asset-class.d.ts +0 -12
- package/dist-client/pages/master/physical-asset-class.js +0 -40
- package/dist-client/pages/master/physical-asset-class.js.map +0 -1
- package/dist-client/pages/master/physical-asset.d.ts +0 -12
- package/dist-client/pages/master/physical-asset.js +0 -41
- package/dist-client/pages/master/physical-asset.js.map +0 -1
- package/dist-client/pages/master/recipe-definition.d.ts +0 -5
- package/dist-client/pages/master/recipe-definition.js +0 -14
- package/dist-client/pages/master/recipe-definition.js.map +0 -1
- package/dist-client/pages/master/reference-targets.d.ts +0 -42
- package/dist-client/pages/master/reference-targets.js +0 -82
- package/dist-client/pages/master/reference-targets.js.map +0 -1
- package/dist-client/pages/master/revision-comparison.d.ts +0 -49
- package/dist-client/pages/master/revision-comparison.js +0 -560
- package/dist-client/pages/master/revision-comparison.js.map +0 -1
- package/dist-client/pages/master/revision-view.d.ts +0 -34
- package/dist-client/pages/master/revision-view.js +0 -145
- package/dist-client/pages/master/revision-view.js.map +0 -1
- package/dist-client/pages/master/revision-workspace.d.ts +0 -50
- package/dist-client/pages/master/revision-workspace.js +0 -763
- package/dist-client/pages/master/revision-workspace.js.map +0 -1
- package/dist-client/pages/master/route-definition.d.ts +0 -19
- package/dist-client/pages/master/route-definition.js +0 -40
- package/dist-client/pages/master/route-definition.js.map +0 -1
- package/dist-client/pages/master/stop-reason.d.ts +0 -12
- package/dist-client/pages/master/stop-reason.js +0 -48
- package/dist-client/pages/master/stop-reason.js.map +0 -1
- package/dist-client/pages/master/test-specification.d.ts +0 -5
- package/dist-client/pages/master/test-specification.js +0 -14
- package/dist-client/pages/master/test-specification.js.map +0 -1
- package/dist-client/pages/master-axes.d.ts +0 -24
- package/dist-client/pages/master-axes.js +0 -39
- package/dist-client/pages/master-axes.js.map +0 -1
- package/dist-client/route.d.ts +0 -1
- package/dist-client/route.js +0 -81
- package/dist-client/route.js.map +0 -1
- package/dist-client/tsconfig.tsbuildinfo +0 -1
- package/dist-server/index.d.ts +0 -1
- package/dist-server/index.js +0 -19
- package/dist-server/index.js.map +0 -1
- package/dist-server/service/ai-entry/master-entry-rules.d.ts +0 -175
- package/dist-server/service/ai-entry/master-entry-rules.js +0 -302
- package/dist-server/service/ai-entry/master-entry-rules.js.map +0 -1
- package/dist-server/service/ai-entry/master-entry-targets.d.ts +0 -23
- package/dist-server/service/ai-entry/master-entry-targets.js +0 -293
- package/dist-server/service/ai-entry/master-entry-targets.js.map +0 -1
- package/dist-server/service/approval-route.d.ts +0 -37
- package/dist-server/service/approval-route.js +0 -34
- package/dist-server/service/approval-route.js.map +0 -1
- package/dist-server/service/asset/asset-lifecycle.d.ts +0 -106
- package/dist-server/service/asset/asset-lifecycle.js +0 -126
- package/dist-server/service/asset/asset-lifecycle.js.map +0 -1
- package/dist-server/service/asset/asset-master-resolver.d.ts +0 -53
- package/dist-server/service/asset/asset-master-resolver.js +0 -185
- package/dist-server/service/asset/asset-master-resolver.js.map +0 -1
- package/dist-server/service/asset/asset-master.d.ts +0 -21
- package/dist-server/service/asset/asset-master.js +0 -25
- package/dist-server/service/asset/asset-master.js.map +0 -1
- package/dist-server/service/asset/asset-query.d.ts +0 -16
- package/dist-server/service/asset/asset-query.js +0 -72
- package/dist-server/service/asset/asset-query.js.map +0 -1
- package/dist-server/service/asset/index.d.ts +0 -6
- package/dist-server/service/asset/index.js +0 -10
- package/dist-server/service/asset/index.js.map +0 -1
- package/dist-server/service/asset/physical-asset-class.d.ts +0 -34
- package/dist-server/service/asset/physical-asset-class.js +0 -104
- package/dist-server/service/asset/physical-asset-class.js.map +0 -1
- package/dist-server/service/asset/physical-asset.d.ts +0 -66
- package/dist-server/service/asset/physical-asset.js +0 -123
- package/dist-server/service/asset/physical-asset.js.map +0 -1
- package/dist-server/service/assignment/applied-when.d.ts +0 -24
- package/dist-server/service/assignment/applied-when.js +0 -16
- package/dist-server/service/assignment/applied-when.js.map +0 -1
- package/dist-server/service/assignment/assignment-history.d.ts +0 -92
- package/dist-server/service/assignment/assignment-history.js +0 -289
- package/dist-server/service/assignment/assignment-history.js.map +0 -1
- package/dist-server/service/assignment/assignment-write.d.ts +0 -42
- package/dist-server/service/assignment/assignment-write.js +0 -101
- package/dist-server/service/assignment/assignment-write.js.map +0 -1
- package/dist-server/service/assignment/master-value-claim.d.ts +0 -135
- package/dist-server/service/assignment/master-value-claim.js +0 -174
- package/dist-server/service/assignment/master-value-claim.js.map +0 -1
- package/dist-server/service/equipment/equipment-class.d.ts +0 -34
- package/dist-server/service/equipment/equipment-class.js +0 -104
- package/dist-server/service/equipment/equipment-class.js.map +0 -1
- package/dist-server/service/equipment/equipment-master-resolver.d.ts +0 -77
- package/dist-server/service/equipment/equipment-master-resolver.js +0 -266
- package/dist-server/service/equipment/equipment-master-resolver.js.map +0 -1
- package/dist-server/service/equipment/equipment-master.d.ts +0 -30
- package/dist-server/service/equipment/equipment-master.js +0 -53
- package/dist-server/service/equipment/equipment-master.js.map +0 -1
- package/dist-server/service/equipment/equipment-query.d.ts +0 -16
- package/dist-server/service/equipment/equipment-query.js +0 -72
- package/dist-server/service/equipment/equipment-query.js.map +0 -1
- package/dist-server/service/equipment/equipment.d.ts +0 -71
- package/dist-server/service/equipment/equipment.js +0 -138
- package/dist-server/service/equipment/equipment.js.map +0 -1
- package/dist-server/service/equipment/index.d.ts +0 -8
- package/dist-server/service/equipment/index.js +0 -12
- package/dist-server/service/equipment/index.js.map +0 -1
- package/dist-server/service/equipment/state-period-rules.d.ts +0 -95
- package/dist-server/service/equipment/state-period-rules.js +0 -122
- package/dist-server/service/equipment/state-period-rules.js.map +0 -1
- package/dist-server/service/equipment/stop-reason-query.d.ts +0 -11
- package/dist-server/service/equipment/stop-reason-query.js +0 -39
- package/dist-server/service/equipment/stop-reason-query.js.map +0 -1
- package/dist-server/service/equipment/stop-reason.d.ts +0 -58
- package/dist-server/service/equipment/stop-reason.js +0 -114
- package/dist-server/service/equipment/stop-reason.js.map +0 -1
- package/dist-server/service/index.d.ts +0 -82
- package/dist-server/service/index.js +0 -145
- package/dist-server/service/index.js.map +0 -1
- package/dist-server/service/location/index.d.ts +0 -5
- package/dist-server/service/location/index.js +0 -9
- package/dist-server/service/location/index.js.map +0 -1
- package/dist-server/service/location/location-master-resolver.d.ts +0 -60
- package/dist-server/service/location/location-master-resolver.js +0 -313
- package/dist-server/service/location/location-master-resolver.js.map +0 -1
- package/dist-server/service/location/location-master.d.ts +0 -26
- package/dist-server/service/location/location-master.js +0 -28
- package/dist-server/service/location/location-master.js.map +0 -1
- package/dist-server/service/location/location-query.d.ts +0 -15
- package/dist-server/service/location/location-query.js +0 -56
- package/dist-server/service/location/location-query.js.map +0 -1
- package/dist-server/service/location/operational-location.d.ts +0 -116
- package/dist-server/service/location/operational-location.js +0 -157
- package/dist-server/service/location/operational-location.js.map +0 -1
- package/dist-server/service/master-axis.d.ts +0 -40
- package/dist-server/service/master-axis.js +0 -57
- package/dist-server/service/master-axis.js.map +0 -1
- package/dist-server/service/master-change-approval/approval-input.d.ts +0 -17
- package/dist-server/service/master-change-approval/approval-input.js +0 -35
- package/dist-server/service/master-change-approval/approval-input.js.map +0 -1
- package/dist-server/service/master-change-approval/builtin-axes.d.ts +0 -4
- package/dist-server/service/master-change-approval/builtin-axes.js +0 -96
- package/dist-server/service/master-change-approval/builtin-axes.js.map +0 -1
- package/dist-server/service/master-change-approval/index.d.ts +0 -14
- package/dist-server/service/master-change-approval/index.js +0 -37
- package/dist-server/service/master-change-approval/index.js.map +0 -1
- package/dist-server/service/master-change-approval/master-change-axis.d.ts +0 -54
- package/dist-server/service/master-change-approval/master-change-axis.js +0 -17
- package/dist-server/service/master-change-approval/master-change-axis.js.map +0 -1
- package/dist-server/service/master-change-approval/master-change-flow.d.ts +0 -65
- package/dist-server/service/master-change-approval/master-change-flow.js +0 -125
- package/dist-server/service/master-change-approval/master-change-flow.js.map +0 -1
- package/dist-server/service/master-change-approval/master-change-resolver.d.ts +0 -18
- package/dist-server/service/master-change-approval/master-change-resolver.js +0 -58
- package/dist-server/service/master-change-approval/master-change-resolver.js.map +0 -1
- package/dist-server/service/master-change-policy.d.ts +0 -122
- package/dist-server/service/master-change-policy.js +0 -304
- package/dist-server/service/master-change-policy.js.map +0 -1
- package/dist-server/service/master-conformance-resolver.d.ts +0 -34
- package/dist-server/service/master-conformance-resolver.js +0 -153
- package/dist-server/service/master-conformance-resolver.js.map +0 -1
- package/dist-server/service/master-conformance.d.ts +0 -80
- package/dist-server/service/master-conformance.js +0 -266
- package/dist-server/service/master-conformance.js.map +0 -1
- package/dist-server/service/master-crud.d.ts +0 -55
- package/dist-server/service/master-crud.js +0 -93
- package/dist-server/service/master-crud.js.map +0 -1
- package/dist-server/service/master-list.d.ts +0 -12
- package/dist-server/service/master-list.js +0 -30
- package/dist-server/service/master-list.js.map +0 -1
- package/dist-server/service/master-page-query.d.ts +0 -33
- package/dist-server/service/master-page-query.js +0 -55
- package/dist-server/service/master-page-query.js.map +0 -1
- package/dist-server/service/master-page.d.ts +0 -85
- package/dist-server/service/master-page.js +0 -104
- package/dist-server/service/master-page.js.map +0 -1
- package/dist-server/service/material/index.d.ts +0 -7
- package/dist-server/service/material/index.js +0 -12
- package/dist-server/service/material/index.js.map +0 -1
- package/dist-server/service/material/material-axis-status.d.ts +0 -8
- package/dist-server/service/material/material-axis-status.js +0 -19
- package/dist-server/service/material/material-axis-status.js.map +0 -1
- package/dist-server/service/material/material-class.d.ts +0 -34
- package/dist-server/service/material/material-class.js +0 -104
- package/dist-server/service/material/material-class.js.map +0 -1
- package/dist-server/service/material/material-definition.d.ts +0 -45
- package/dist-server/service/material/material-definition.js +0 -125
- package/dist-server/service/material/material-definition.js.map +0 -1
- package/dist-server/service/material/material-effective-list.d.ts +0 -39
- package/dist-server/service/material/material-effective-list.js +0 -54
- package/dist-server/service/material/material-effective-list.js.map +0 -1
- package/dist-server/service/material/material-master-resolver.d.ts +0 -106
- package/dist-server/service/material/material-master-resolver.js +0 -351
- package/dist-server/service/material/material-master-resolver.js.map +0 -1
- package/dist-server/service/material/material-master.d.ts +0 -9
- package/dist-server/service/material/material-master.js +0 -24
- package/dist-server/service/material/material-master.js.map +0 -1
- package/dist-server/service/material/material-query.d.ts +0 -16
- package/dist-server/service/material/material-query.js +0 -79
- package/dist-server/service/material/material-query.js.map +0 -1
- package/dist-server/service/material/material-revision-content.d.ts +0 -10
- package/dist-server/service/material/material-revision-content.js +0 -92
- package/dist-server/service/material/material-revision-content.js.map +0 -1
- package/dist-server/service/material/material-revision-resolver.d.ts +0 -60
- package/dist-server/service/material/material-revision-resolver.js +0 -96
- package/dist-server/service/material/material-revision-resolver.js.map +0 -1
- package/dist-server/service/material/material-revision-service.d.ts +0 -179
- package/dist-server/service/material/material-revision-service.js +0 -687
- package/dist-server/service/material/material-revision-service.js.map +0 -1
- package/dist-server/service/material/material-revision.d.ts +0 -86
- package/dist-server/service/material/material-revision.js +0 -339
- package/dist-server/service/material/material-revision.js.map +0 -1
- package/dist-server/service/material/recipe-index.d.ts +0 -23
- package/dist-server/service/material/recipe-index.js +0 -44
- package/dist-server/service/material/recipe-index.js.map +0 -1
- package/dist-server/service/operation/index.d.ts +0 -6
- package/dist-server/service/operation/index.js +0 -10
- package/dist-server/service/operation/index.js.map +0 -1
- package/dist-server/service/operation/operation-definition.d.ts +0 -52
- package/dist-server/service/operation/operation-definition.js +0 -143
- package/dist-server/service/operation/operation-definition.js.map +0 -1
- package/dist-server/service/operation/operation-master-resolver.d.ts +0 -52
- package/dist-server/service/operation/operation-master-resolver.js +0 -187
- package/dist-server/service/operation/operation-master-resolver.js.map +0 -1
- package/dist-server/service/operation/operation-master.d.ts +0 -21
- package/dist-server/service/operation/operation-master.js +0 -28
- package/dist-server/service/operation/operation-master.js.map +0 -1
- package/dist-server/service/operation/operation-query.d.ts +0 -15
- package/dist-server/service/operation/operation-query.js +0 -56
- package/dist-server/service/operation/operation-query.js.map +0 -1
- package/dist-server/service/operation/operation-readiness-resolver.d.ts +0 -39
- package/dist-server/service/operation/operation-readiness-resolver.js +0 -111
- package/dist-server/service/operation/operation-readiness-resolver.js.map +0 -1
- package/dist-server/service/operation/operation-readiness.d.ts +0 -34
- package/dist-server/service/operation/operation-readiness.js +0 -133
- package/dist-server/service/operation/operation-readiness.js.map +0 -1
- package/dist-server/service/personnel/index.d.ts +0 -6
- package/dist-server/service/personnel/index.js +0 -10
- package/dist-server/service/personnel/index.js.map +0 -1
- package/dist-server/service/personnel/person.d.ts +0 -51
- package/dist-server/service/personnel/person.js +0 -119
- package/dist-server/service/personnel/person.js.map +0 -1
- package/dist-server/service/personnel/personnel-class-readiness.d.ts +0 -22
- package/dist-server/service/personnel/personnel-class-readiness.js +0 -98
- package/dist-server/service/personnel/personnel-class-readiness.js.map +0 -1
- package/dist-server/service/personnel/personnel-class.d.ts +0 -54
- package/dist-server/service/personnel/personnel-class.js +0 -114
- package/dist-server/service/personnel/personnel-class.js.map +0 -1
- package/dist-server/service/personnel/personnel-master-resolver.d.ts +0 -53
- package/dist-server/service/personnel/personnel-master-resolver.js +0 -187
- package/dist-server/service/personnel/personnel-master-resolver.js.map +0 -1
- package/dist-server/service/personnel/personnel-master.d.ts +0 -39
- package/dist-server/service/personnel/personnel-master.js +0 -34
- package/dist-server/service/personnel/personnel-master.js.map +0 -1
- package/dist-server/service/personnel/personnel-query.d.ts +0 -29
- package/dist-server/service/personnel/personnel-query.js +0 -79
- package/dist-server/service/personnel/personnel-query.js.map +0 -1
- package/dist-server/service/personnel/qualification.d.ts +0 -104
- package/dist-server/service/personnel/qualification.js +0 -147
- package/dist-server/service/personnel/qualification.js.map +0 -1
- package/dist-server/service/quality/index.d.ts +0 -4
- package/dist-server/service/quality/index.js +0 -8
- package/dist-server/service/quality/index.js.map +0 -1
- package/dist-server/service/quality/nonconformance-cause-resolver.d.ts +0 -12
- package/dist-server/service/quality/nonconformance-cause-resolver.js +0 -60
- package/dist-server/service/quality/nonconformance-cause-resolver.js.map +0 -1
- package/dist-server/service/quality/nonconformance-cause.d.ts +0 -20
- package/dist-server/service/quality/nonconformance-cause.js +0 -90
- package/dist-server/service/quality/nonconformance-cause.js.map +0 -1
- package/dist-server/service/recipe/index.d.ts +0 -10
- package/dist-server/service/recipe/index.js +0 -16
- package/dist-server/service/recipe/index.js.map +0 -1
- package/dist-server/service/recipe/recipe-definition.d.ts +0 -75
- package/dist-server/service/recipe/recipe-definition.js +0 -143
- package/dist-server/service/recipe/recipe-definition.js.map +0 -1
- package/dist-server/service/recipe/recipe-effective-list.d.ts +0 -49
- package/dist-server/service/recipe/recipe-effective-list.js +0 -96
- package/dist-server/service/recipe/recipe-effective-list.js.map +0 -1
- package/dist-server/service/recipe/recipe-master-resolver.d.ts +0 -28
- package/dist-server/service/recipe/recipe-master-resolver.js +0 -128
- package/dist-server/service/recipe/recipe-master-resolver.js.map +0 -1
- package/dist-server/service/recipe/recipe-master.d.ts +0 -37
- package/dist-server/service/recipe/recipe-master.js +0 -47
- package/dist-server/service/recipe/recipe-master.js.map +0 -1
- package/dist-server/service/recipe/recipe-query.d.ts +0 -21
- package/dist-server/service/recipe/recipe-query.js +0 -82
- package/dist-server/service/recipe/recipe-query.js.map +0 -1
- package/dist-server/service/recipe/recipe-revision-content.d.ts +0 -32
- package/dist-server/service/recipe/recipe-revision-content.js +0 -70
- package/dist-server/service/recipe/recipe-revision-content.js.map +0 -1
- package/dist-server/service/recipe/recipe-revision-line.d.ts +0 -30
- package/dist-server/service/recipe/recipe-revision-line.js +0 -95
- package/dist-server/service/recipe/recipe-revision-line.js.map +0 -1
- package/dist-server/service/recipe/recipe-revision-resolver.d.ts +0 -65
- package/dist-server/service/recipe/recipe-revision-resolver.js +0 -96
- package/dist-server/service/recipe/recipe-revision-resolver.js.map +0 -1
- package/dist-server/service/recipe/recipe-revision-service.d.ts +0 -183
- package/dist-server/service/recipe/recipe-revision-service.js +0 -754
- package/dist-server/service/recipe/recipe-revision-service.js.map +0 -1
- package/dist-server/service/recipe/recipe-revision.d.ts +0 -102
- package/dist-server/service/recipe/recipe-revision.js +0 -373
- package/dist-server/service/recipe/recipe-revision.js.map +0 -1
- package/dist-server/service/recipe/route-definition.d.ts +0 -51
- package/dist-server/service/recipe/route-definition.js +0 -114
- package/dist-server/service/recipe/route-definition.js.map +0 -1
- package/dist-server/service/resource/class-lineage.d.ts +0 -46
- package/dist-server/service/resource/class-lineage.js +0 -80
- package/dist-server/service/resource/class-lineage.js.map +0 -1
- package/dist-server/service/resource/class-members.d.ts +0 -36
- package/dist-server/service/resource/class-members.js +0 -59
- package/dist-server/service/resource/class-members.js.map +0 -1
- package/dist-server/service/resource/referrers.d.ts +0 -54
- package/dist-server/service/resource/referrers.js +0 -99
- package/dist-server/service/resource/referrers.js.map +0 -1
- package/dist-server/service/resource/resource-class.d.ts +0 -25
- package/dist-server/service/resource/resource-class.js +0 -29
- package/dist-server/service/resource/resource-class.js.map +0 -1
- package/dist-server/service/revision-baseline.d.ts +0 -71
- package/dist-server/service/revision-baseline.js +0 -87
- package/dist-server/service/revision-baseline.js.map +0 -1
- package/dist-server/service/row-lock.d.ts +0 -22
- package/dist-server/service/row-lock.js +0 -31
- package/dist-server/service/row-lock.js.map +0 -1
- package/dist-server/service/status/axis-stamp.d.ts +0 -16
- package/dist-server/service/status/axis-stamp.js +0 -22
- package/dist-server/service/status/axis-stamp.js.map +0 -1
- package/dist-server/service/status/index.d.ts +0 -3
- package/dist-server/service/status/index.js +0 -7
- package/dist-server/service/status/index.js.map +0 -1
- package/dist-server/service/status/master-status.d.ts +0 -38
- package/dist-server/service/status/master-status.js +0 -129
- package/dist-server/service/status/master-status.js.map +0 -1
- package/dist-server/service/test-spec/criteria-check.d.ts +0 -53
- package/dist-server/service/test-spec/criteria-check.js +0 -142
- package/dist-server/service/test-spec/criteria-check.js.map +0 -1
- package/dist-server/service/test-spec/criteria-rows.d.ts +0 -89
- package/dist-server/service/test-spec/criteria-rows.js +0 -139
- package/dist-server/service/test-spec/criteria-rows.js.map +0 -1
- package/dist-server/service/test-spec/index.d.ts +0 -6
- package/dist-server/service/test-spec/index.js +0 -11
- package/dist-server/service/test-spec/index.js.map +0 -1
- package/dist-server/service/test-spec/test-spec-effective-list.d.ts +0 -34
- package/dist-server/service/test-spec/test-spec-effective-list.js +0 -42
- package/dist-server/service/test-spec/test-spec-effective-list.js.map +0 -1
- package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +0 -44
- package/dist-server/service/test-spec/test-spec-master-resolver.js +0 -144
- package/dist-server/service/test-spec/test-spec-master-resolver.js.map +0 -1
- package/dist-server/service/test-spec/test-spec-master.d.ts +0 -6
- package/dist-server/service/test-spec/test-spec-master.js +0 -18
- package/dist-server/service/test-spec/test-spec-master.js.map +0 -1
- package/dist-server/service/test-spec/test-spec-query.d.ts +0 -15
- package/dist-server/service/test-spec/test-spec-query.js +0 -61
- package/dist-server/service/test-spec/test-spec-query.js.map +0 -1
- package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +0 -59
- package/dist-server/service/test-spec/test-spec-revision-resolver.js +0 -96
- package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +0 -1
- package/dist-server/service/test-spec/test-spec-revision-service.d.ts +0 -178
- package/dist-server/service/test-spec/test-spec-revision-service.js +0 -685
- package/dist-server/service/test-spec/test-spec-revision-service.js.map +0 -1
- package/dist-server/service/test-spec/test-spec-revision.d.ts +0 -86
- package/dist-server/service/test-spec/test-spec-revision.js +0 -334
- package/dist-server/service/test-spec/test-spec-revision.js.map +0 -1
- package/dist-server/service/test-spec/test-specification.d.ts +0 -47
- package/dist-server/service/test-spec/test-specification.js +0 -119
- package/dist-server/service/test-spec/test-specification.js.map +0 -1
- package/dist-server/tsconfig.tsbuildinfo +0 -1
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OperationalLocation = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const typeorm_1 = require("typeorm");
|
|
6
|
-
const type_graphql_1 = require("type-graphql");
|
|
7
|
-
const shell_1 = require("@things-factory/shell");
|
|
8
|
-
const auth_base_1 = require("@things-factory/auth-base");
|
|
9
|
-
/**
|
|
10
|
-
* 자리 — **ISA-95 `OperationalLocation`**.
|
|
11
|
-
*
|
|
12
|
-
* 표준 원문은 「자원이 놓이거나 놓일 것으로 예상되는 논리적·물리적 장소」다. 자기 계층을 재귀로 갖고,
|
|
13
|
-
* 설비는 자기 자리를 이것으로 가리킨다. 자리와 설비를 나눠 두는 것은 표준의 구조다.
|
|
14
|
-
*
|
|
15
|
-
* ── 용량을 지어내지 않는다 ──────────────────────────────────────────────────
|
|
16
|
-
* `capacity` 는 그 자리에 몇이 들어가는가다. 모르면 비워 둔다. 실측에서 임의로 1 을 넣었더니 물품
|
|
17
|
-
* 하나에 포화 경고가 났다 — 없는 것보다 나쁜 수다.
|
|
18
|
-
*/
|
|
19
|
-
let OperationalLocation = class OperationalLocation {
|
|
20
|
-
};
|
|
21
|
-
exports.OperationalLocation = OperationalLocation;
|
|
22
|
-
tslib_1.__decorate([
|
|
23
|
-
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
|
24
|
-
(0, type_graphql_1.Field)(type => type_graphql_1.ID),
|
|
25
|
-
tslib_1.__metadata("design:type", String)
|
|
26
|
-
], OperationalLocation.prototype, "id", void 0);
|
|
27
|
-
tslib_1.__decorate([
|
|
28
|
-
(0, typeorm_1.ManyToOne)(type => shell_1.Domain),
|
|
29
|
-
(0, type_graphql_1.Field)(type => shell_1.Domain),
|
|
30
|
-
tslib_1.__metadata("design:type", shell_1.Domain)
|
|
31
|
-
], OperationalLocation.prototype, "domain", void 0);
|
|
32
|
-
tslib_1.__decorate([
|
|
33
|
-
(0, typeorm_1.RelationId)((location) => location.domain),
|
|
34
|
-
tslib_1.__metadata("design:type", String)
|
|
35
|
-
], OperationalLocation.prototype, "domainId", void 0);
|
|
36
|
-
tslib_1.__decorate([
|
|
37
|
-
(0, typeorm_1.Column)(),
|
|
38
|
-
(0, type_graphql_1.Field)(),
|
|
39
|
-
tslib_1.__metadata("design:type", String)
|
|
40
|
-
], OperationalLocation.prototype, "name", void 0);
|
|
41
|
-
tslib_1.__decorate([
|
|
42
|
-
(0, typeorm_1.Column)({ nullable: true }),
|
|
43
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
44
|
-
tslib_1.__metadata("design:type", String)
|
|
45
|
-
], OperationalLocation.prototype, "description", void 0);
|
|
46
|
-
tslib_1.__decorate([
|
|
47
|
-
(0, typeorm_1.Column)(),
|
|
48
|
-
(0, type_graphql_1.Field)(),
|
|
49
|
-
tslib_1.__metadata("design:type", String)
|
|
50
|
-
], OperationalLocation.prototype, "type", void 0);
|
|
51
|
-
tslib_1.__decorate([
|
|
52
|
-
(0, typeorm_1.Column)({ nullable: true }),
|
|
53
|
-
(0, type_graphql_1.Field)({ nullable: true, description: 'Which system owns this place: wms | yms | mes | ems' }),
|
|
54
|
-
tslib_1.__metadata("design:type", String)
|
|
55
|
-
], OperationalLocation.prototype, "system", void 0);
|
|
56
|
-
tslib_1.__decorate([
|
|
57
|
-
(0, typeorm_1.Column)({ nullable: true }),
|
|
58
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
59
|
-
tslib_1.__metadata("design:type", String)
|
|
60
|
-
], OperationalLocation.prototype, "level", void 0);
|
|
61
|
-
tslib_1.__decorate([
|
|
62
|
-
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
63
|
-
(0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true }),
|
|
64
|
-
tslib_1.__metadata("design:type", Number)
|
|
65
|
-
], OperationalLocation.prototype, "capacity", void 0);
|
|
66
|
-
tslib_1.__decorate([
|
|
67
|
-
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
68
|
-
(0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true }),
|
|
69
|
-
tslib_1.__metadata("design:type", Number)
|
|
70
|
-
], OperationalLocation.prototype, "parallelism", void 0);
|
|
71
|
-
tslib_1.__decorate([
|
|
72
|
-
(0, typeorm_1.Column)({ nullable: true }),
|
|
73
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
74
|
-
tslib_1.__metadata("design:type", String)
|
|
75
|
-
], OperationalLocation.prototype, "parentId", void 0);
|
|
76
|
-
tslib_1.__decorate([
|
|
77
|
-
(0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true, description: 'How many locations sit directly under this one' }),
|
|
78
|
-
tslib_1.__metadata("design:type", Number)
|
|
79
|
-
], OperationalLocation.prototype, "childCount", void 0);
|
|
80
|
-
tslib_1.__decorate([
|
|
81
|
-
(0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
|
|
82
|
-
(0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true, description: 'ResourceProperty[]' }),
|
|
83
|
-
tslib_1.__metadata("design:type", Array)
|
|
84
|
-
], OperationalLocation.prototype, "properties", void 0);
|
|
85
|
-
tslib_1.__decorate([
|
|
86
|
-
(0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
|
|
87
|
-
(0, type_graphql_1.Field)(type => [String], {
|
|
88
|
-
nullable: true,
|
|
89
|
-
description: 'work shift names that run here — locations below inherit this unless they say their own'
|
|
90
|
-
}),
|
|
91
|
-
tslib_1.__metadata("design:type", Array)
|
|
92
|
-
], OperationalLocation.prototype, "workShiftNames", void 0);
|
|
93
|
-
tslib_1.__decorate([
|
|
94
|
-
(0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
|
|
95
|
-
(0, type_graphql_1.Field)(type => [String], { nullable: true }),
|
|
96
|
-
tslib_1.__metadata("design:type", Array)
|
|
97
|
-
], OperationalLocation.prototype, "testSpecificationIds", void 0);
|
|
98
|
-
tslib_1.__decorate([
|
|
99
|
-
(0, typeorm_1.Column)({ nullable: true }),
|
|
100
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
101
|
-
tslib_1.__metadata("design:type", Date
|
|
102
|
-
/**
|
|
103
|
-
* 언제까지 유효한가 — 표준 `EffectiveEndDate`.
|
|
104
|
-
*
|
|
105
|
-
* **없앨 때 행을 지우지 않고 이 칸을 채운다.** 지우면 그것을 가리키는 지난 기록이 가리킬 것을 잃는다.
|
|
106
|
-
*/
|
|
107
|
-
)
|
|
108
|
-
], OperationalLocation.prototype, "effectiveStart", void 0);
|
|
109
|
-
tslib_1.__decorate([
|
|
110
|
-
(0, typeorm_1.Column)({ nullable: true }),
|
|
111
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
112
|
-
tslib_1.__metadata("design:type", Date)
|
|
113
|
-
], OperationalLocation.prototype, "effectiveEnd", void 0);
|
|
114
|
-
tslib_1.__decorate([
|
|
115
|
-
(0, typeorm_1.CreateDateColumn)(),
|
|
116
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
117
|
-
tslib_1.__metadata("design:type", Date)
|
|
118
|
-
], OperationalLocation.prototype, "createdAt", void 0);
|
|
119
|
-
tslib_1.__decorate([
|
|
120
|
-
(0, typeorm_1.UpdateDateColumn)(),
|
|
121
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
122
|
-
tslib_1.__metadata("design:type", Date)
|
|
123
|
-
], OperationalLocation.prototype, "updatedAt", void 0);
|
|
124
|
-
tslib_1.__decorate([
|
|
125
|
-
(0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
|
|
126
|
-
(0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
|
|
127
|
-
tslib_1.__metadata("design:type", auth_base_1.User)
|
|
128
|
-
], OperationalLocation.prototype, "creator", void 0);
|
|
129
|
-
tslib_1.__decorate([
|
|
130
|
-
(0, typeorm_1.RelationId)((location) => location.creator),
|
|
131
|
-
tslib_1.__metadata("design:type", String)
|
|
132
|
-
], OperationalLocation.prototype, "creatorId", void 0);
|
|
133
|
-
tslib_1.__decorate([
|
|
134
|
-
(0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
|
|
135
|
-
(0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
|
|
136
|
-
tslib_1.__metadata("design:type", auth_base_1.User)
|
|
137
|
-
], OperationalLocation.prototype, "updater", void 0);
|
|
138
|
-
tslib_1.__decorate([
|
|
139
|
-
(0, typeorm_1.RelationId)((location) => location.updater),
|
|
140
|
-
tslib_1.__metadata("design:type", String)
|
|
141
|
-
], OperationalLocation.prototype, "updaterId", void 0);
|
|
142
|
-
exports.OperationalLocation = OperationalLocation = tslib_1.__decorate([
|
|
143
|
-
(0, typeorm_1.Entity)({ name: 'ops_operational_location' }),
|
|
144
|
-
(0, typeorm_1.Index)('ix_ops_operational_location_0', (location) => [location.domain, location.name], {
|
|
145
|
-
unique: true
|
|
146
|
-
})
|
|
147
|
-
/*
|
|
148
|
-
* 상위로 찾는 색인.
|
|
149
|
-
*
|
|
150
|
-
* 화면이 계층을 한 단씩 걷는다 — 「이 자리의 자식」을 부를 때마다 이 칸으로 거른다. 그리고 줄마다 하위
|
|
151
|
-
* 개수를 세므로(`childCount`), 색인이 없으면 한 화면에 표 전체 훑기가 스무 번 일어난다.
|
|
152
|
-
*/
|
|
153
|
-
,
|
|
154
|
-
(0, typeorm_1.Index)('ix_ops_operational_location_1', (location) => [location.domain, location.parentId]),
|
|
155
|
-
(0, type_graphql_1.ObjectType)({ description: 'ISA-95 OperationalLocation — where resources are placed' })
|
|
156
|
-
], OperationalLocation);
|
|
157
|
-
//# sourceMappingURL=operational-location.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"operational-location.js","sourceRoot":"","sources":["../../../server/service/location/operational-location.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\nimport { Field, ID, Int, ObjectType } from 'type-graphql'\n\nimport { type DomainSystem } from '@operato/ops-contract'\n\nimport { Domain, ScalarObject } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\n/**\n * 자리 — **ISA-95 `OperationalLocation`**.\n *\n * 표준 원문은 「자원이 놓이거나 놓일 것으로 예상되는 논리적·물리적 장소」다. 자기 계층을 재귀로 갖고,\n * 설비는 자기 자리를 이것으로 가리킨다. 자리와 설비를 나눠 두는 것은 표준의 구조다.\n *\n * ── 용량을 지어내지 않는다 ──────────────────────────────────────────────────\n * `capacity` 는 그 자리에 몇이 들어가는가다. 모르면 비워 둔다. 실측에서 임의로 1 을 넣었더니 물품\n * 하나에 포화 경고가 났다 — 없는 것보다 나쁜 수다.\n */\n@Entity({ name: 'ops_operational_location' })\n@Index('ix_ops_operational_location_0', (location: OperationalLocation) => [location.domain, location.name], {\n unique: true\n})\n/*\n * 상위로 찾는 색인.\n *\n * 화면이 계층을 한 단씩 걷는다 — 「이 자리의 자식」을 부를 때마다 이 칸으로 거른다. 그리고 줄마다 하위\n * 개수를 세므로(`childCount`), 색인이 없으면 한 화면에 표 전체 훑기가 스무 번 일어난다.\n */\n@Index('ix_ops_operational_location_1', (location: OperationalLocation) => [location.domain, location.parentId])\n@ObjectType({ description: 'ISA-95 OperationalLocation — where resources are placed' })\nexport class OperationalLocation {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field(type => Domain)\n domain?: Domain\n\n @RelationId((location: OperationalLocation) => location.domain)\n domainId?: string\n\n /** 표준 `ID` — 트윈으로 나갈 때 `locations[].id` 가 된다. */\n @Column()\n @Field()\n name: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description?: string\n\n /** 자리 타입 — 도메인 카탈로그가 정한 키(`raw-store` · `weld-station` 같은 것). */\n @Column()\n @Field()\n type: string\n\n /**\n * **이 자리의 주인 영역** — 창고(`wms`) · 야드(`yms`) · 공장(`mes`) · 에너지(`ems`)(ADR-0081).\n *\n * ── 왜 칸이어야 하나 (2026-09-19 에 세어 보고 정함) ─────────────────────────\n * 한 현장에 제품이 둘 서면 「이 자리는 누구 것인가」를 물어야 한다. 창고의 재고는 **창고가 주인인 자리에\n * 선 것**이고, 라인 쪽 자리에 선 물건은 공장의 것이다. 그 답이 없으면 불출한 자재가 창고 재고에 그대로\n * 남아 가용 수와 할당 후보에 든다.\n *\n * 있는 칸으로는 가를 수 없다 — 전부 **추론**이 된다.\n *\n * ```\n * type WMS 타입(dock · storage …)과 MES 타입(raw-store · weld-station …)이 한 칸에 섞인다.\n * 현장이 자기 타입을 선언할 수 있어(DomainDefinition.locationTypes) 새 타입이 생기는 날 틀린다\n * level ISA-95 단이라 같은 문제다\n * properties 열린 Record 라 읽는 쪽마다 키를 정하고, 그러면 방언이 된다\n * parentId 「창고 아래」로 가를 수는 있으나 그 뿌리가 누구 것인지는 여전히 선언이 없다\n * ```\n *\n * ── 모르면 모르는 것이다 ───────────────────────────────────────────────────\n * 비어 있으면 **어느 제품의 재고에도 들지 않는다.** `type` 을 보고 채우는 대체값을 두지 않는다 — 그 추론이\n * 틀리는 날 남의 자리에 선 물건이 우리 재고가 되고, 아무도 오류를 보지 못한다. 선언되지 않은 자리의 수는\n * 화면이 말한다.\n *\n * 낱말은 계약의 `DOMAIN_SYSTEMS` 다. 글자로 다시 적지 않는다.\n */\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Which system owns this place: wms | yms | mes | ems' })\n system?: DomainSystem\n\n /**\n * ISA-95 설비 계층 단 — `ProductionLine` · `WorkCell` · `StorageZone` · `ProcessCell` · `Unit` 등.\n *\n * 적지 않으면 타입으로 알아낸다. 적으면 그것이 기준이다 — 현장이 자기 계층을 더 잘 안다.\n */\n @Column({ nullable: true })\n @Field({ nullable: true })\n level?: string\n\n /** 이 자리에 몇이 들어가나. **모르면 비운다.** */\n @Column({ type: 'int', nullable: true })\n @Field(type => Int, { nullable: true })\n capacity?: number\n\n /** 동시에 몇을 처리하나(대기 이론의 서버 수). 표준에 없는 우리 축이다. */\n @Column({ type: 'int', nullable: true })\n @Field(type => Int, { nullable: true })\n parallelism?: number\n\n /** 상위 자리 — 표준 `OperationalLocationChild`(재귀)의 반대 방향. */\n @Column({ nullable: true })\n @Field({ nullable: true })\n parentId?: string\n\n /**\n * 바로 아래에 몇이 있나. **저장하지 않는다** — 목록 리졸버가 채운다(`attachChildCounts`).\n *\n * 계층을 한 단씩 걷는 화면이 이 값으로 「그 줄에 들어갈 것이 있나」를 말한다. 세어서 넣는 값이라\n * 컬럼이 아니다 — 컬럼으로 두면 자식이 생기고 없어질 때마다 이 줄을 함께 고쳐야 하고, 한 번 빠뜨리면\n * 틀린 개수가 남는다.\n */\n @Field(type => Int, { nullable: true, description: 'How many locations sit directly under this one' })\n childCount?: number\n\n /** 자리 속성 — 표준 `OperationalLocationProperty`. */\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => ScalarObject, { nullable: true, description: 'ResourceProperty[]' })\n properties?: Record<string, unknown>[]\n\n /**\n * 이 자리에서 도는 **근무조 이름들** — 아래 단이 물려받는다.\n *\n * ── 왜 자리가 드나 (2026-09-07) ─────────────────────────────────────────\n * 근무조는 지금까지 도메인 단위 선언이고 **어디에 걸리는지가 없었다.** 그래서 씨앗이 설비마다\n * 사본을 뿌렸고(`Equipment.workCalendar`), 한 공장 22대가 같은 값을 22벌 들고 있었다. 3교대를\n * 2교대로 바꾸면 22줄을 고쳐야 하고, 한 줄을 빠뜨리면 그 설비만 조용히 옛 근무로 계산된다.\n *\n * 근무조는 **사람의 일정**이다. 사람은 기계 한 대가 아니라 라인·셀에 배치된다. 그래서 자리가\n * 들고 아래가 물려받는다 — 공장에 한 줄 적으면 그 아래 전부가 그것으로 돈다.\n *\n * ── 비어 있는 것이 정상이다 ───────────────────────────────────────────────\n * 채우는 것은 **위와 다를 때뿐**이다. 라인 하나만 주간이면 그 라인에만 적는다. 아무 데도 안 적으면\n * 도메인의 근무조 전부로 떨어져 지금 거동 그대로다 — 이 칸이 생겼다고 기존 공장이 바뀌지 않는다.\n *\n * ── 설비에는 적지 않는다 ──────────────────────────────────────────────────\n * 「이 기계만 24시간 돈다」는 근무조가 다른 것이 아니라 **자기 가동 계획이 다른 것**이다(에이징\n * 로가 그렇다). 그 사실은 `Equipment.workCalendar` — 이 설비가 가동하도록 계획된 시간 — 에 적힌다.\n * 근무조로 적으면 아무도 근무하지 않는 시간이 근무 시간으로 기록된다.\n *\n * ── 거는 단은 work center 급 이상이다 — 규칙이지 제약이 아니다 ────────────\n * ISA-95 Part 1 이 일정과 능력을 work center 에 둔다. 사람은 라인에 배치되지 기계 한 대에\n * 배치되지 않으므로, `Site` · `Area` · `ProductionLine` · `WorkCenter` 가 이 칸을 든다.\n *\n * **거절하지는 않는다.** 아래 단에 적어도 상속이 그것을 먼저 만나 그냥 돈다. 셀 단위 근무가\n * 실제로 있는 현장에서 저장을 막으면 그 현장은 모델링 자체가 안 된다 — 적합성 표에 줄 하나가\n * 서는 것보다 나쁘다. 어긋난 것은 성숙도가 이름과 함께 낸다.\n */\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => [String], {\n nullable: true,\n description: 'work shift names that run here — locations below inherit this unless they say their own'\n })\n workShiftNames?: string[]\n\n /** 이 자리에 걸리는 `TestSpecification` 참조들 — 구역 온도 기준 같은 것이 여기 붙는다. */\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => [String], { nullable: true })\n testSpecificationIds?: string[]\n\n /** 언제부터 유효한가 — 표준 `EffectiveStartDate`. */\n @Column({ nullable: true })\n @Field({ nullable: true })\n effectiveStart?: Date\n\n /**\n * 언제까지 유효한가 — 표준 `EffectiveEndDate`.\n *\n * **없앨 때 행을 지우지 않고 이 칸을 채운다.** 지우면 그것을 가리키는 지난 기록이 가리킬 것을 잃는다.\n */\n @Column({ nullable: true })\n @Field({ nullable: true })\n effectiveEnd?: Date\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((location: OperationalLocation) => location.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((location: OperationalLocation) => location.updater)\n updaterId?: string\n}\n"]}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { ObjectLiteral } from 'typeorm';
|
|
2
|
-
/**
|
|
3
|
-
* 마스터 축의 **한 줄짜리 선언** — 축마다 다른 것만 적는다.
|
|
4
|
-
*
|
|
5
|
-
* ── 왜 표로 두나 ───────────────────────────────────────────────────────────
|
|
6
|
-
* 축이 열다섯인데 조회와 저장은 모양이 같다. 축마다 리졸버를 통째로 베끼면 같은 코드가 열다섯 벌이 되고,
|
|
7
|
-
* 규칙 하나를 고칠 때 열다섯 곳을 고쳐야 한다. 그러다 한 곳을 빠뜨리면 그 축만 다르게 동작하는데
|
|
8
|
-
* 오류는 나지 않는다.
|
|
9
|
-
*
|
|
10
|
-
* 그래서 **다른 것만** 적는다 — 어느 표인가, 무엇으로 찾는가, 없앨 때 지우는가 끝을 채우는가.
|
|
11
|
-
*
|
|
12
|
-
* ── 왜 유효 기간 여부가 여기 있나 ──────────────────────────────────────────
|
|
13
|
-
* 지난 기록이 가리키는 축은 지우면 안 된다. 그것이 축마다 다르므로 축의 성질로 적는다. 정지 사유는
|
|
14
|
-
* 유효 기간이 있고, 등급도 있다. 지금 열다섯 모두 유효 기간을 갖는다 — 그래도 칸을 둔다. 없는 축이
|
|
15
|
-
* 생기면 그때 이 표만 고치면 된다.
|
|
16
|
-
*/
|
|
17
|
-
export interface MasterAxis {
|
|
18
|
-
/** GraphQL 이름의 바탕. `person` → `persons` · `updateMultiplePerson`. */
|
|
19
|
-
key: string;
|
|
20
|
-
entity: {
|
|
21
|
-
new (): ObjectLiteral;
|
|
22
|
-
};
|
|
23
|
-
/** 검색어가 걸리는 칸들. */
|
|
24
|
-
searchables: string[];
|
|
25
|
-
/** 없앨 때 행을 지우지 않고 `effectiveEnd` 를 채우나. */
|
|
26
|
-
hasEffectivePeriod: boolean;
|
|
27
|
-
/**
|
|
28
|
-
* 이 축의 바뀜을 **개정본으로 결재에 보낼 수 있나.**
|
|
29
|
-
*
|
|
30
|
-
* 승인으로 켜면 `assertDirectMasterChange` 가 이 축의 직접 쓰기를 전부 거절한다. 그 뒤로 고치는 길은
|
|
31
|
-
* 개정본을 결재로 보내는 것뿐이라, 그 길이 없는 축을 켜면 **그 축이 잠긴다**(2026-09-24). 그래서
|
|
32
|
-
* 정책은 이 칸이 참인 축만 승인으로 켜게 한다(`declareMasterChangePolicy`).
|
|
33
|
-
*
|
|
34
|
-
* 앱이 정하지 않는다 — 개정본 문은 이 패키지가 지었고, 어느 앱에서도 없는 문으로는 보낼 수 없다.
|
|
35
|
-
* 축마다 적게 한 것은, 새 축이 이 물음에 답하지 않고 들어오지 못하게 하려는 것이다.
|
|
36
|
-
*/
|
|
37
|
-
revisable: boolean;
|
|
38
|
-
}
|
|
39
|
-
export declare const MASTER_AXES: readonly MasterAxis[];
|
|
40
|
-
export declare function masterAxisOf(key: string): MasterAxis;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MASTER_AXES = void 0;
|
|
4
|
-
exports.masterAxisOf = masterAxisOf;
|
|
5
|
-
const equipment_1 = require("./equipment/equipment");
|
|
6
|
-
const equipment_class_1 = require("./equipment/equipment-class");
|
|
7
|
-
const stop_reason_1 = require("./equipment/stop-reason");
|
|
8
|
-
const nonconformance_cause_1 = require("./quality/nonconformance-cause");
|
|
9
|
-
const material_class_1 = require("./material/material-class");
|
|
10
|
-
const material_definition_1 = require("./material/material-definition");
|
|
11
|
-
const operation_definition_1 = require("./operation/operation-definition");
|
|
12
|
-
const operational_location_1 = require("./location/operational-location");
|
|
13
|
-
const person_1 = require("./personnel/person");
|
|
14
|
-
const personnel_class_1 = require("./personnel/personnel-class");
|
|
15
|
-
const physical_asset_1 = require("./asset/physical-asset");
|
|
16
|
-
const physical_asset_class_1 = require("./asset/physical-asset-class");
|
|
17
|
-
const recipe_definition_1 = require("./recipe/recipe-definition");
|
|
18
|
-
const route_definition_1 = require("./recipe/route-definition");
|
|
19
|
-
const test_specification_1 = require("./test-spec/test-specification");
|
|
20
|
-
exports.MASTER_AXES = [
|
|
21
|
-
{ key: 'personnelClass', entity: personnel_class_1.PersonnelClass, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
22
|
-
{ key: 'person', entity: person_1.Person, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
23
|
-
{ key: 'equipmentClass', entity: equipment_class_1.EquipmentClass, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
24
|
-
{ key: 'equipment', entity: equipment_1.Equipment, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
25
|
-
{ key: 'stopReason', entity: stop_reason_1.StopReason, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
26
|
-
{ key: 'nonconformanceCause', entity: nonconformance_cause_1.NonconformanceCause, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
27
|
-
{ key: 'physicalAssetClass', entity: physical_asset_class_1.PhysicalAssetClass, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
28
|
-
{ key: 'physicalAsset', entity: physical_asset_1.PhysicalAsset, searchables: ['name', 'description', 'identity'], hasEffectivePeriod: true, revisable: false },
|
|
29
|
-
{ key: 'materialClass', entity: material_class_1.MaterialClass, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
30
|
-
{ key: 'materialDefinition', entity: material_definition_1.MaterialDefinition, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: true },
|
|
31
|
-
{ key: 'operationalLocation', entity: operational_location_1.OperationalLocation, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
32
|
-
{ key: 'operationDefinition', entity: operation_definition_1.OperationDefinition, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
33
|
-
{ key: 'testSpecification', entity: test_specification_1.TestSpecification, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: true },
|
|
34
|
-
/*
|
|
35
|
-
* 라우팅과 레시피 (2026-08-31) — 커널에 `RouteDef`·`RecipeDef` 가 있고 `JobOrder.routeKey` 가 그것을
|
|
36
|
-
* 가리키는데 **그 값이 가리킬 표가 없었다.** 사람이 문자열을 손으로 적는 상태였고, 그래서 MES 가 받은
|
|
37
|
-
* 작업지시에 라우팅을 자동으로 붙일 수 없었다.
|
|
38
|
-
*/
|
|
39
|
-
{ key: 'routeDefinition', entity: route_definition_1.RouteDefinition, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },
|
|
40
|
-
{
|
|
41
|
-
key: 'recipeDefinition',
|
|
42
|
-
entity: recipe_definition_1.RecipeDefinition,
|
|
43
|
-
/* 만드는 품목으로도 찾는다 — 「이 품목을 만드는 레시피」가 MES 가 지시마다 묻는 물음이다. */
|
|
44
|
-
searchables: ['name', 'description', 'materialDefinitionName'],
|
|
45
|
-
hasEffectivePeriod: true,
|
|
46
|
-
revisable: true
|
|
47
|
-
}
|
|
48
|
-
];
|
|
49
|
-
function masterAxisOf(key) {
|
|
50
|
-
const axis = exports.MASTER_AXES.find(candidate => candidate.key === key);
|
|
51
|
-
if (!axis) {
|
|
52
|
-
/* 없는 축을 조용히 지나치지 않는다 — 지나치면 그 축의 화면이 빈 목록을 보이고 아무도 모른다. */
|
|
53
|
-
throw new Error(`masterAxisOf: unknown master axis "${key}"`);
|
|
54
|
-
}
|
|
55
|
-
return axis;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=master-axis.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"master-axis.js","sourceRoot":"","sources":["../../server/service/master-axis.ts"],"names":[],"mappings":"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","sourcesContent":["import { ObjectLiteral } from 'typeorm'\n\nimport { Equipment } from './equipment/equipment'\nimport { EquipmentClass } from './equipment/equipment-class'\nimport { StopReason } from './equipment/stop-reason'\nimport { NonconformanceCause } from './quality/nonconformance-cause'\nimport { MaterialClass } from './material/material-class'\nimport { MaterialDefinition } from './material/material-definition'\nimport { OperationDefinition } from './operation/operation-definition'\nimport { OperationalLocation } from './location/operational-location'\nimport { Person } from './personnel/person'\nimport { PersonnelClass } from './personnel/personnel-class'\nimport { PhysicalAsset } from './asset/physical-asset'\nimport { PhysicalAssetClass } from './asset/physical-asset-class'\nimport { RecipeDefinition } from './recipe/recipe-definition'\nimport { RouteDefinition } from './recipe/route-definition'\nimport { TestSpecification } from './test-spec/test-specification'\n\n/**\n * 마스터 축의 **한 줄짜리 선언** — 축마다 다른 것만 적는다.\n *\n * ── 왜 표로 두나 ───────────────────────────────────────────────────────────\n * 축이 열다섯인데 조회와 저장은 모양이 같다. 축마다 리졸버를 통째로 베끼면 같은 코드가 열다섯 벌이 되고,\n * 규칙 하나를 고칠 때 열다섯 곳을 고쳐야 한다. 그러다 한 곳을 빠뜨리면 그 축만 다르게 동작하는데\n * 오류는 나지 않는다.\n *\n * 그래서 **다른 것만** 적는다 — 어느 표인가, 무엇으로 찾는가, 없앨 때 지우는가 끝을 채우는가.\n *\n * ── 왜 유효 기간 여부가 여기 있나 ──────────────────────────────────────────\n * 지난 기록이 가리키는 축은 지우면 안 된다. 그것이 축마다 다르므로 축의 성질로 적는다. 정지 사유는\n * 유효 기간이 있고, 등급도 있다. 지금 열다섯 모두 유효 기간을 갖는다 — 그래도 칸을 둔다. 없는 축이\n * 생기면 그때 이 표만 고치면 된다.\n */\n\nexport interface MasterAxis {\n /** GraphQL 이름의 바탕. `person` → `persons` · `updateMultiplePerson`. */\n key: string\n entity: { new (): ObjectLiteral }\n /** 검색어가 걸리는 칸들. */\n searchables: string[]\n /** 없앨 때 행을 지우지 않고 `effectiveEnd` 를 채우나. */\n hasEffectivePeriod: boolean\n /**\n * 이 축의 바뀜을 **개정본으로 결재에 보낼 수 있나.**\n *\n * 승인으로 켜면 `assertDirectMasterChange` 가 이 축의 직접 쓰기를 전부 거절한다. 그 뒤로 고치는 길은\n * 개정본을 결재로 보내는 것뿐이라, 그 길이 없는 축을 켜면 **그 축이 잠긴다**(2026-09-24). 그래서\n * 정책은 이 칸이 참인 축만 승인으로 켜게 한다(`declareMasterChangePolicy`).\n *\n * 앱이 정하지 않는다 — 개정본 문은 이 패키지가 지었고, 어느 앱에서도 없는 문으로는 보낼 수 없다.\n * 축마다 적게 한 것은, 새 축이 이 물음에 답하지 않고 들어오지 못하게 하려는 것이다.\n */\n revisable: boolean\n}\n\nexport const MASTER_AXES: readonly MasterAxis[] = [\n { key: 'personnelClass', entity: PersonnelClass, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'person', entity: Person, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'equipmentClass', entity: EquipmentClass, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'equipment', entity: Equipment, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'stopReason', entity: StopReason, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'nonconformanceCause', entity: NonconformanceCause, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'physicalAssetClass', entity: PhysicalAssetClass, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'physicalAsset', entity: PhysicalAsset, searchables: ['name', 'description', 'identity'], hasEffectivePeriod: true, revisable: false },\n { key: 'materialClass', entity: MaterialClass, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'materialDefinition', entity: MaterialDefinition, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: true },\n { key: 'operationalLocation', entity: OperationalLocation, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'operationDefinition', entity: OperationDefinition, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n { key: 'testSpecification', entity: TestSpecification, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: true },\n /*\n * 라우팅과 레시피 (2026-08-31) — 커널에 `RouteDef`·`RecipeDef` 가 있고 `JobOrder.routeKey` 가 그것을\n * 가리키는데 **그 값이 가리킬 표가 없었다.** 사람이 문자열을 손으로 적는 상태였고, 그래서 MES 가 받은\n * 작업지시에 라우팅을 자동으로 붙일 수 없었다.\n */\n { key: 'routeDefinition', entity: RouteDefinition, searchables: ['name', 'description'], hasEffectivePeriod: true, revisable: false },\n {\n key: 'recipeDefinition',\n entity: RecipeDefinition,\n /* 만드는 품목으로도 찾는다 — 「이 품목을 만드는 레시피」가 MES 가 지시마다 묻는 물음이다. */\n searchables: ['name', 'description', 'materialDefinitionName'],\n hasEffectivePeriod: true,\n revisable: true\n }\n]\n\nexport function masterAxisOf(key: string): MasterAxis {\n const axis = MASTER_AXES.find(candidate => candidate.key === key)\n\n if (!axis) {\n /* 없는 축을 조용히 지나치지 않는다 — 지나치면 그 축의 화면이 빈 목록을 보이고 아무도 모른다. */\n throw new Error(`masterAxisOf: unknown master axis \"${key}\"`)\n }\n\n return axis\n}\n"]}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/** How a revision was published, as the plan that published it says. A revision is published at most once. */
|
|
2
|
-
export type ReleaseKind = 'approved' | 'policy' | 'baseline';
|
|
3
|
-
/**
|
|
4
|
-
* The publishing kind of each revision, from the plans of one subject: `kindOf(revisionId)` is null until the
|
|
5
|
-
* revision is published.
|
|
6
|
-
*/
|
|
7
|
-
export declare function releaseKinds(plans: {
|
|
8
|
-
publishedRevisionId?: string | null;
|
|
9
|
-
releaseKind: ReleaseKind;
|
|
10
|
-
}[]): (revisionId: string) => ReleaseKind | null;
|
|
11
|
-
/**
|
|
12
|
-
* Whether the approval input a work item carries is still what its frozen revision projects to, key by key.
|
|
13
|
-
*
|
|
14
|
-
* One shape only. Work items issued before `before.detail.releaseKind` joined the projection (2026-10-20) are
|
|
15
|
-
* brought up to it by a one-off data fix, not read here in their old shape.
|
|
16
|
-
*/
|
|
17
|
-
export declare function approvalInputMatches(carried: Record<string, any>, expected: Record<string, any>): boolean;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.releaseKinds = releaseKinds;
|
|
4
|
-
exports.approvalInputMatches = approvalInputMatches;
|
|
5
|
-
/** Sorted object keys, ordered arrays — the same encoding the axes use for their submission hashes. */
|
|
6
|
-
function canonical(value) {
|
|
7
|
-
if (value === null || typeof value !== 'object')
|
|
8
|
-
return JSON.stringify(value);
|
|
9
|
-
if (Array.isArray(value))
|
|
10
|
-
return '[' + value.map(canonical).join(',') + ']';
|
|
11
|
-
return ('{' +
|
|
12
|
-
Object.keys(value)
|
|
13
|
-
.sort()
|
|
14
|
-
.map(key => JSON.stringify(key) + ':' + canonical(value[key]))
|
|
15
|
-
.join(',') +
|
|
16
|
-
'}');
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* The publishing kind of each revision, from the plans of one subject: `kindOf(revisionId)` is null until the
|
|
20
|
-
* revision is published.
|
|
21
|
-
*/
|
|
22
|
-
function releaseKinds(plans) {
|
|
23
|
-
const kinds = new Map(plans.map(plan => [plan.publishedRevisionId, plan.releaseKind]));
|
|
24
|
-
return (revisionId) => kinds.get(revisionId) ?? null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Whether the approval input a work item carries is still what its frozen revision projects to, key by key.
|
|
28
|
-
*
|
|
29
|
-
* One shape only. Work items issued before `before.detail.releaseKind` joined the projection (2026-10-20) are
|
|
30
|
-
* brought up to it by a one-off data fix, not read here in their old shape.
|
|
31
|
-
*/
|
|
32
|
-
function approvalInputMatches(carried, expected) {
|
|
33
|
-
return Object.keys(expected).every(key => canonical(carried?.[key]) === canonical(expected[key]));
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=approval-input.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approval-input.js","sourceRoot":"","sources":["../../../server/service/master-change-approval/approval-input.ts"],"names":[],"mappings":";;AAqBA,oCAGC;AAQD,oDAEC;AA/BD,uGAAuG;AACvG,SAAS,SAAS,CAAC,KAAU;IAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;IAC3E,OAAO,CACL,GAAG;QACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aACf,IAAI,EAAE;aACN,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aAC7D,IAAI,CAAC,GAAG,CAAC;QACZ,GAAG,CACJ,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,KAA0E;IACrG,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACtF,OAAO,CAAC,UAAkB,EAAsB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAA;AAClF,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,OAA4B,EAAE,QAA6B;IAC9F,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACnG,CAAC","sourcesContent":["/** How a revision was published, as the plan that published it says. A revision is published at most once. */\nexport type ReleaseKind = 'approved' | 'policy' | 'baseline'\n\n/** Sorted object keys, ordered arrays — the same encoding the axes use for their submission hashes. */\nfunction canonical(value: any): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return '[' + value.map(canonical).join(',') + ']'\n return (\n '{' +\n Object.keys(value)\n .sort()\n .map(key => JSON.stringify(key) + ':' + canonical(value[key]))\n .join(',') +\n '}'\n )\n}\n\n/**\n * The publishing kind of each revision, from the plans of one subject: `kindOf(revisionId)` is null until the\n * revision is published.\n */\nexport function releaseKinds(plans: { publishedRevisionId?: string | null; releaseKind: ReleaseKind }[]) {\n const kinds = new Map(plans.map(plan => [plan.publishedRevisionId, plan.releaseKind]))\n return (revisionId: string): ReleaseKind | null => kinds.get(revisionId) ?? null\n}\n\n/**\n * Whether the approval input a work item carries is still what its frozen revision projects to, key by key.\n *\n * One shape only. Work items issued before `before.detail.releaseKind` joined the projection (2026-10-20) are\n * brought up to it by a one-off data fix, not read here in their old shape.\n */\nexport function approvalInputMatches(carried: Record<string, any>, expected: Record<string, any>): boolean {\n return Object.keys(expected).every(key => canonical(carried?.[key]) === canonical(expected[key]))\n}\n"]}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MATERIAL_DEFINITION_CHANGE = exports.RECIPE_CHANGE = exports.TEST_SPECIFICATION_CHANGE = void 0;
|
|
4
|
-
const material_revision_service_1 = require("../material/material-revision-service");
|
|
5
|
-
const recipe_revision_service_1 = require("../recipe/recipe-revision-service");
|
|
6
|
-
const test_spec_revision_service_1 = require("../test-spec/test-spec-revision-service");
|
|
7
|
-
/*
|
|
8
|
-
* The three axes whose revisions live in ops-master. Words are plant's, which carried all five languages.
|
|
9
|
-
*/
|
|
10
|
-
const NOT_SELF = 'An empty approval line refuses submission. The author cannot approve their own change.';
|
|
11
|
-
const POLICY_NOTE = 'Declared regulated axes require this approval. Non-regulated publication records its policy and publisher.';
|
|
12
|
-
exports.TEST_SPECIFICATION_CHANGE = {
|
|
13
|
-
axis: 'testSpecification',
|
|
14
|
-
activity: 'TestSpecificationChangeApproval',
|
|
15
|
-
label: 'test specification change approval',
|
|
16
|
-
description: 'Approve a frozen test specification and its effective date',
|
|
17
|
-
category: 'quality',
|
|
18
|
-
guide: [
|
|
19
|
-
'Compare the previous and proposed criteria and check when the new criteria will apply.',
|
|
20
|
-
'Approval publishes this exact revision. It does not change inspections already recorded.',
|
|
21
|
-
NOT_SELF
|
|
22
|
-
],
|
|
23
|
-
readiness: {
|
|
24
|
-
stage: 'partial',
|
|
25
|
-
tests: ['things-factory/packages/ops-master/test/master-change-approval.db.test.cjs'],
|
|
26
|
-
gaps: ['Multi-specification atomic submission is not implemented in this single-specification slice.'],
|
|
27
|
-
notes: `${POLICY_NOTE} Recorded inspections keep their exact revision.`
|
|
28
|
-
},
|
|
29
|
-
before: 'previous criteria',
|
|
30
|
-
after: 'proposed criteria',
|
|
31
|
-
issuedAs: '검사 명세 변경',
|
|
32
|
-
caveat: 'The signed revision stays. Correct it with another approved revision; recorded inspections keep their basis.',
|
|
33
|
-
Refusal: test_spec_revision_service_1.TestSpecificationRefusal,
|
|
34
|
-
freeze: test_spec_revision_service_1.freezeTestSpecificationDraft,
|
|
35
|
-
approvalInput: test_spec_revision_service_1.testSpecificationApprovalInput,
|
|
36
|
-
bind: test_spec_revision_service_1.bindTestSpecificationApproval,
|
|
37
|
-
assertApprovalInput: test_spec_revision_service_1.assertTestSpecificationApprovalInput,
|
|
38
|
-
publish: test_spec_revision_service_1.publishTestSpecificationRevision
|
|
39
|
-
};
|
|
40
|
-
exports.RECIPE_CHANGE = {
|
|
41
|
-
axis: 'recipeDefinition',
|
|
42
|
-
activity: 'RecipeChangeApproval',
|
|
43
|
-
label: 'recipe change approval',
|
|
44
|
-
description: 'Approve a frozen recipe and its effective date',
|
|
45
|
-
category: 'production',
|
|
46
|
-
guide: [
|
|
47
|
-
'Compare the previous and proposed composition and check when the new composition will apply.',
|
|
48
|
-
'Approval publishes this exact revision. It does not change executions already recorded.',
|
|
49
|
-
NOT_SELF
|
|
50
|
-
],
|
|
51
|
-
readiness: {
|
|
52
|
-
stage: 'partial',
|
|
53
|
-
tests: ['things-factory/packages/ops-master/test/master-change-approval.db.test.cjs'],
|
|
54
|
-
gaps: ['Multi-recipe atomic submission is not implemented in this single-recipe slice.'],
|
|
55
|
-
notes: `${POLICY_NOTE} Recorded executions keep their exact revision.`
|
|
56
|
-
},
|
|
57
|
-
before: 'previous composition',
|
|
58
|
-
after: 'proposed composition',
|
|
59
|
-
issuedAs: '레시피 변경',
|
|
60
|
-
caveat: 'The signed revision stays. Correct it with another approved revision; recorded executions keep their basis.',
|
|
61
|
-
Refusal: recipe_revision_service_1.RecipeRefusal,
|
|
62
|
-
freeze: recipe_revision_service_1.freezeRecipeDraft,
|
|
63
|
-
approvalInput: recipe_revision_service_1.recipeApprovalInput,
|
|
64
|
-
bind: recipe_revision_service_1.bindRecipeApproval,
|
|
65
|
-
assertApprovalInput: recipe_revision_service_1.assertRecipeApprovalInput,
|
|
66
|
-
publish: recipe_revision_service_1.publishRecipeRevision
|
|
67
|
-
};
|
|
68
|
-
exports.MATERIAL_DEFINITION_CHANGE = {
|
|
69
|
-
axis: 'materialDefinition',
|
|
70
|
-
activity: 'MaterialDefinitionChangeApproval',
|
|
71
|
-
label: 'material change approval',
|
|
72
|
-
description: 'Approve a frozen material and its effective date',
|
|
73
|
-
category: 'production',
|
|
74
|
-
guide: [
|
|
75
|
-
'Compare the previous and proposed definition and check when the new definition will apply.',
|
|
76
|
-
'Approval publishes this exact revision. It does not change executions already recorded.',
|
|
77
|
-
NOT_SELF
|
|
78
|
-
],
|
|
79
|
-
readiness: {
|
|
80
|
-
stage: 'partial',
|
|
81
|
-
tests: ['things-factory/packages/ops-master/test/master-change-approval.db.test.cjs'],
|
|
82
|
-
gaps: ['Multi-material atomic submission is not implemented in this single-material slice.'],
|
|
83
|
-
notes: `${POLICY_NOTE} Recorded executions keep their exact revision.`
|
|
84
|
-
},
|
|
85
|
-
before: 'previous definition',
|
|
86
|
-
after: 'proposed definition',
|
|
87
|
-
issuedAs: '품목 변경',
|
|
88
|
-
caveat: 'The signed revision stays. Correct it with another approved revision; recorded executions keep their basis.',
|
|
89
|
-
Refusal: material_revision_service_1.MaterialDefinitionRefusal,
|
|
90
|
-
freeze: material_revision_service_1.freezeMaterialDefinitionDraft,
|
|
91
|
-
approvalInput: material_revision_service_1.materialDefinitionApprovalInput,
|
|
92
|
-
bind: material_revision_service_1.bindMaterialDefinitionApproval,
|
|
93
|
-
assertApprovalInput: material_revision_service_1.assertMaterialDefinitionApprovalInput,
|
|
94
|
-
publish: material_revision_service_1.publishMaterialDefinitionRevision
|
|
95
|
-
};
|
|
96
|
-
//# sourceMappingURL=builtin-axes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builtin-axes.js","sourceRoot":"","sources":["../../../server/service/master-change-approval/builtin-axes.ts"],"names":[],"mappings":";;;AAAA,qFAO8C;AAC9C,+EAO0C;AAC1C,wFAOgD;AAGhD;;GAEG;AACH,MAAM,QAAQ,GAAG,wFAAwF,CAAA;AACzG,MAAM,WAAW,GAAG,4GAA4G,CAAA;AAEnH,QAAA,yBAAyB,GAAqB;IACzD,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,iCAAiC;IAC3C,KAAK,EAAE,oCAAoC;IAC3C,WAAW,EAAE,4DAA4D;IACzE,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE;QACL,wFAAwF;QACxF,0FAA0F;QAC1F,QAAQ;KACT;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,CAAC,4EAA4E,CAAC;QACrF,IAAI,EAAE,CAAC,8FAA8F,CAAC;QACtG,KAAK,EAAE,GAAG,WAAW,kDAAkD;KACxE;IACD,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,8GAA8G;IACtH,OAAO,EAAE,qDAA+B;IACxC,MAAM,EAAE,yDAAmC;IAC3C,aAAa,EAAE,2DAAqC;IACpD,IAAI,EAAE,0DAAoC;IAC1C,mBAAmB,EAAE,iEAA2C;IAChE,OAAO,EAAE,6DAAuC;CACjD,CAAA;AAEY,QAAA,aAAa,GAAqB;IAC7C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,sBAAsB;IAChC,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,gDAAgD;IAC7D,QAAQ,EAAE,YAAY;IACtB,KAAK,EAAE;QACL,8FAA8F;QAC9F,yFAAyF;QACzF,QAAQ;KACT;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,CAAC,4EAA4E,CAAC;QACrF,IAAI,EAAE,CAAC,gFAAgF,CAAC;QACxF,KAAK,EAAE,GAAG,WAAW,iDAAiD;KACvE;IACD,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,6GAA6G;IACrH,OAAO,EAAE,uCAAoB;IAC7B,MAAM,EAAE,2CAAwB;IAChC,aAAa,EAAE,6CAA0B;IACzC,IAAI,EAAE,4CAAyB;IAC/B,mBAAmB,EAAE,mDAAgC;IACrD,OAAO,EAAE,+CAA4B;CACtC,CAAA;AAEY,QAAA,0BAA0B,GAAqB;IAC1D,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,kCAAkC;IAC5C,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE,kDAAkD;IAC/D,QAAQ,EAAE,YAAY;IACtB,KAAK,EAAE;QACL,4FAA4F;QAC5F,yFAAyF;QACzF,QAAQ;KACT;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,CAAC,4EAA4E,CAAC;QACrF,IAAI,EAAE,CAAC,oFAAoF,CAAC;QAC5F,KAAK,EAAE,GAAG,WAAW,iDAAiD;KACvE;IACD,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE,qBAAqB;IAC5B,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,6GAA6G;IACrH,OAAO,EAAE,qDAAgC;IACzC,MAAM,EAAE,yDAAoC;IAC5C,aAAa,EAAE,2DAAsC;IACrD,IAAI,EAAE,0DAAqC;IAC3C,mBAAmB,EAAE,iEAA4C;IACjE,OAAO,EAAE,6DAAwC;CAClD,CAAA","sourcesContent":["import {\n assertMaterialDefinitionApprovalInput,\n bindMaterialDefinitionApproval,\n freezeMaterialDefinitionDraft,\n materialDefinitionApprovalInput,\n MaterialDefinitionRefusal,\n publishMaterialDefinitionRevision\n} from '../material/material-revision-service'\nimport {\n assertRecipeApprovalInput,\n bindRecipeApproval,\n freezeRecipeDraft,\n publishRecipeRevision,\n recipeApprovalInput,\n RecipeRefusal\n} from '../recipe/recipe-revision-service'\nimport {\n assertTestSpecificationApprovalInput,\n bindTestSpecificationApproval,\n freezeTestSpecificationDraft,\n publishTestSpecificationRevision,\n testSpecificationApprovalInput,\n TestSpecificationRefusal\n} from '../test-spec/test-spec-revision-service'\nimport type { MasterChangeAxis } from './master-change-axis'\n\n/*\n * The three axes whose revisions live in ops-master. Words are plant's, which carried all five languages.\n */\nconst NOT_SELF = 'An empty approval line refuses submission. The author cannot approve their own change.'\nconst POLICY_NOTE = 'Declared regulated axes require this approval. Non-regulated publication records its policy and publisher.'\n\nexport const TEST_SPECIFICATION_CHANGE: MasterChangeAxis = {\n axis: 'testSpecification',\n activity: 'TestSpecificationChangeApproval',\n label: 'test specification change approval',\n description: 'Approve a frozen test specification and its effective date',\n category: 'quality',\n guide: [\n 'Compare the previous and proposed criteria and check when the new criteria will apply.',\n 'Approval publishes this exact revision. It does not change inspections already recorded.',\n NOT_SELF\n ],\n readiness: {\n stage: 'partial',\n tests: ['things-factory/packages/ops-master/test/master-change-approval.db.test.cjs'],\n gaps: ['Multi-specification atomic submission is not implemented in this single-specification slice.'],\n notes: `${POLICY_NOTE} Recorded inspections keep their exact revision.`\n },\n before: 'previous criteria',\n after: 'proposed criteria',\n issuedAs: '검사 명세 변경',\n caveat: 'The signed revision stays. Correct it with another approved revision; recorded inspections keep their basis.',\n Refusal: TestSpecificationRefusal as any,\n freeze: freezeTestSpecificationDraft as any,\n approvalInput: testSpecificationApprovalInput as any,\n bind: bindTestSpecificationApproval as any,\n assertApprovalInput: assertTestSpecificationApprovalInput as any,\n publish: publishTestSpecificationRevision as any\n}\n\nexport const RECIPE_CHANGE: MasterChangeAxis = {\n axis: 'recipeDefinition',\n activity: 'RecipeChangeApproval',\n label: 'recipe change approval',\n description: 'Approve a frozen recipe and its effective date',\n category: 'production',\n guide: [\n 'Compare the previous and proposed composition and check when the new composition will apply.',\n 'Approval publishes this exact revision. It does not change executions already recorded.',\n NOT_SELF\n ],\n readiness: {\n stage: 'partial',\n tests: ['things-factory/packages/ops-master/test/master-change-approval.db.test.cjs'],\n gaps: ['Multi-recipe atomic submission is not implemented in this single-recipe slice.'],\n notes: `${POLICY_NOTE} Recorded executions keep their exact revision.`\n },\n before: 'previous composition',\n after: 'proposed composition',\n issuedAs: '레시피 변경',\n caveat: 'The signed revision stays. Correct it with another approved revision; recorded executions keep their basis.',\n Refusal: RecipeRefusal as any,\n freeze: freezeRecipeDraft as any,\n approvalInput: recipeApprovalInput as any,\n bind: bindRecipeApproval as any,\n assertApprovalInput: assertRecipeApprovalInput as any,\n publish: publishRecipeRevision as any\n}\n\nexport const MATERIAL_DEFINITION_CHANGE: MasterChangeAxis = {\n axis: 'materialDefinition',\n activity: 'MaterialDefinitionChangeApproval',\n label: 'material change approval',\n description: 'Approve a frozen material and its effective date',\n category: 'production',\n guide: [\n 'Compare the previous and proposed definition and check when the new definition will apply.',\n 'Approval publishes this exact revision. It does not change executions already recorded.',\n NOT_SELF\n ],\n readiness: {\n stage: 'partial',\n tests: ['things-factory/packages/ops-master/test/master-change-approval.db.test.cjs'],\n gaps: ['Multi-material atomic submission is not implemented in this single-material slice.'],\n notes: `${POLICY_NOTE} Recorded executions keep their exact revision.`\n },\n before: 'previous definition',\n after: 'proposed definition',\n issuedAs: '품목 변경',\n caveat: 'The signed revision stays. Correct it with another approved revision; recorded executions keep their basis.',\n Refusal: MaterialDefinitionRefusal as any,\n freeze: freezeMaterialDefinitionDraft as any,\n approvalInput: materialDefinitionApprovalInput as any,\n bind: bindMaterialDefinitionApproval as any,\n assertApprovalInput: assertMaterialDefinitionApprovalInput as any,\n publish: publishMaterialDefinitionRevision as any\n}\n"]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { type MasterChangeAxis } from './master-change-axis';
|
|
2
|
-
import { MasterChangeApprovalResolver } from './master-change-resolver';
|
|
3
|
-
export * from './master-change-axis';
|
|
4
|
-
export * from './master-change-flow';
|
|
5
|
-
export * from './builtin-axes';
|
|
6
|
-
export * from './master-change-resolver';
|
|
7
|
-
export * from './approval-input';
|
|
8
|
-
/**
|
|
9
|
-
* Puts an axis on the approval flow: its activity template, and its door — submitting is the act, so an
|
|
10
|
-
* empty approval line refuses (ADR-0077 `approval-is-the-act`). Registration is at module import; the
|
|
11
|
-
* bootstrap hook runs after the schema is built, which is too late.
|
|
12
|
-
*/
|
|
13
|
-
export declare function installMasterChangeAxis(axis: MasterChangeAxis, module?: string): void;
|
|
14
|
-
export declare const resolvers: (typeof MasterChangeApprovalResolver)[];
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resolvers = void 0;
|
|
4
|
-
exports.installMasterChangeAxis = installMasterChangeAxis;
|
|
5
|
-
const tslib_1 = require("tslib");
|
|
6
|
-
const worklist_1 = require("@things-factory/worklist");
|
|
7
|
-
const approval_route_1 = require("../approval-route");
|
|
8
|
-
const builtin_axes_1 = require("./builtin-axes");
|
|
9
|
-
const master_change_axis_1 = require("./master-change-axis");
|
|
10
|
-
const master_change_flow_1 = require("./master-change-flow");
|
|
11
|
-
const master_change_resolver_1 = require("./master-change-resolver");
|
|
12
|
-
tslib_1.__exportStar(require("./master-change-axis"), exports);
|
|
13
|
-
tslib_1.__exportStar(require("./master-change-flow"), exports);
|
|
14
|
-
tslib_1.__exportStar(require("./builtin-axes"), exports);
|
|
15
|
-
tslib_1.__exportStar(require("./master-change-resolver"), exports);
|
|
16
|
-
tslib_1.__exportStar(require("./approval-input"), exports);
|
|
17
|
-
/**
|
|
18
|
-
* Puts an axis on the approval flow: its activity template, and its door — submitting is the act, so an
|
|
19
|
-
* empty approval line refuses (ADR-0077 `approval-is-the-act`). Registration is at module import; the
|
|
20
|
-
* bootstrap hook runs after the schema is built, which is too late.
|
|
21
|
-
*/
|
|
22
|
-
function installMasterChangeAxis(axis, module = 'ops-master') {
|
|
23
|
-
(0, master_change_axis_1.registerMasterChangeAxis)(axis);
|
|
24
|
-
worklist_1.ActivityInstallations.installActivityTemplate((0, master_change_flow_1.masterChangeActivity)(axis));
|
|
25
|
-
doorsOf.set(module, [...(doorsOf.get(module) ?? []).filter(name => name !== axis.activity), axis.activity]);
|
|
26
|
-
(0, worklist_1.registerWorkDoors)({
|
|
27
|
-
module,
|
|
28
|
-
doors: doorsOf.get(module).map(name => ({ name, kind: 'approval', whenNoLine: 'refuse', because: 'approval-is-the-act' }))
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
const doorsOf = new Map();
|
|
32
|
-
for (const axis of [builtin_axes_1.TEST_SPECIFICATION_CHANGE, builtin_axes_1.RECIPE_CHANGE, builtin_axes_1.MATERIAL_DEFINITION_CHANGE])
|
|
33
|
-
installMasterChangeAxis(axis);
|
|
34
|
-
/* Raising an axis to approval asks whether its activity has someone who approves. */
|
|
35
|
-
(0, approval_route_1.registerApprovalRouteInspector)(master_change_flow_1.inspectMasterChangeRoute);
|
|
36
|
-
exports.resolvers = [master_change_resolver_1.MasterChangeApprovalResolver];
|
|
37
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/master-change-approval/index.ts"],"names":[],"mappings":";;;AAmBA,0DAQC;;AA3BD,uDAAmF;AAEnF,sDAAkE;AAClE,iDAAqG;AACrG,6DAAsF;AACtF,6DAAqF;AACrF,qEAAuE;AAEvE,+DAAoC;AACpC,+DAAoC;AACpC,yDAA8B;AAC9B,mEAAwC;AACxC,2DAAgC;AAEhC;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,IAAsB,EAAE,MAAM,GAAG,YAAY;IACnF,IAAA,6CAAwB,EAAC,IAAI,CAAC,CAAA;IAC9B,gCAAqB,CAAC,uBAAuB,CAAC,IAAA,yCAAoB,EAAC,IAAI,CAAQ,CAAC,CAAA;IAChF,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC3G,IAAA,4BAAiB,EAAC;QAChB,MAAM;QACN,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAU,CAAC;KACrI,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAA;AAE3C,KAAK,MAAM,IAAI,IAAI,CAAC,wCAAyB,EAAE,4BAAa,EAAE,yCAA0B,CAAC;IAAE,uBAAuB,CAAC,IAAI,CAAC,CAAA;AAExH,qFAAqF;AACrF,IAAA,+CAA8B,EAAC,6CAAwB,CAAC,CAAA;AAE3C,QAAA,SAAS,GAAG,CAAC,qDAA4B,CAAC,CAAA","sourcesContent":["import { ActivityInstallations, registerWorkDoors } from '@things-factory/worklist'\n\nimport { registerApprovalRouteInspector } from '../approval-route'\nimport { MATERIAL_DEFINITION_CHANGE, RECIPE_CHANGE, TEST_SPECIFICATION_CHANGE } from './builtin-axes'\nimport { registerMasterChangeAxis, type MasterChangeAxis } from './master-change-axis'\nimport { inspectMasterChangeRoute, masterChangeActivity } from './master-change-flow'\nimport { MasterChangeApprovalResolver } from './master-change-resolver'\n\nexport * from './master-change-axis'\nexport * from './master-change-flow'\nexport * from './builtin-axes'\nexport * from './master-change-resolver'\nexport * from './approval-input'\n\n/**\n * Puts an axis on the approval flow: its activity template, and its door — submitting is the act, so an\n * empty approval line refuses (ADR-0077 `approval-is-the-act`). Registration is at module import; the\n * bootstrap hook runs after the schema is built, which is too late.\n */\nexport function installMasterChangeAxis(axis: MasterChangeAxis, module = 'ops-master'): void {\n registerMasterChangeAxis(axis)\n ActivityInstallations.installActivityTemplate(masterChangeActivity(axis) as any)\n doorsOf.set(module, [...(doorsOf.get(module) ?? []).filter(name => name !== axis.activity), axis.activity])\n registerWorkDoors({\n module,\n doors: doorsOf.get(module)!.map(name => ({ name, kind: 'approval', whenNoLine: 'refuse', because: 'approval-is-the-act' }) as const)\n })\n}\n\nconst doorsOf = new Map<string, string[]>()\n\nfor (const axis of [TEST_SPECIFICATION_CHANGE, RECIPE_CHANGE, MATERIAL_DEFINITION_CHANGE]) installMasterChangeAxis(axis)\n\n/* Raising an axis to approval asks whether its activity has someone who approves. */\nregisterApprovalRouteInspector(inspectMasterChangeRoute)\n\nexport const resolvers = [MasterChangeApprovalResolver]\n"]}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { EntityManager } from 'typeorm';
|
|
2
|
-
/**
|
|
3
|
-
* One master axis whose changes pass an approval (ADR-0086 decision 1, amended 2026-10-10).
|
|
4
|
-
*
|
|
5
|
-
* ops-master owns the whole flow: the activity template, what the approval publishes, the submit door, the
|
|
6
|
-
* work-door declaration and the readiness check. An axis brings only what is its own — the revision
|
|
7
|
-
* steps and its words. ops-master registers recipe, material definition and test specification; a module
|
|
8
|
-
* whose axis lives elsewhere (work-shift) registers its own with `registerMasterChangeAxis`.
|
|
9
|
-
*
|
|
10
|
-
* The names stay what plant and warehouse used, so activities already installed at a site, and the
|
|
11
|
-
* approval lines set on them, keep working.
|
|
12
|
-
*/
|
|
13
|
-
export interface MasterChangeAxis {
|
|
14
|
-
/** The policy axis (`ops_master_change_policy.axis`). */
|
|
15
|
-
axis: string;
|
|
16
|
-
/** The activity name the approval runs under. */
|
|
17
|
-
activity: string;
|
|
18
|
-
label: string;
|
|
19
|
-
description: string;
|
|
20
|
-
category: string;
|
|
21
|
-
guide: string[];
|
|
22
|
-
readiness: {
|
|
23
|
-
stage: string;
|
|
24
|
-
tests: string[];
|
|
25
|
-
gaps: string[];
|
|
26
|
-
notes: string;
|
|
27
|
-
};
|
|
28
|
-
/** Decision-key names for the before/after columns, in this axis's words. */
|
|
29
|
-
before: string;
|
|
30
|
-
after: string;
|
|
31
|
-
/** The work item's name, before the headline. */
|
|
32
|
-
issuedAs: string;
|
|
33
|
-
/** How a signed revision is corrected, for the approver. */
|
|
34
|
-
caveat: string;
|
|
35
|
-
/** The axis's refusal, so a refused submission speaks the axis's codes. */
|
|
36
|
-
Refusal: new (code: string, detail?: string) => Error;
|
|
37
|
-
freeze(manager: EntityManager, domainId: string, userId: string, revisionId: string, editGeneration: number): Promise<{
|
|
38
|
-
id: string;
|
|
39
|
-
reason?: string;
|
|
40
|
-
contentHash?: string;
|
|
41
|
-
}>;
|
|
42
|
-
approvalInput(manager: EntityManager, domainId: string, revisionId: string): Promise<any>;
|
|
43
|
-
bind(manager: EntityManager, domainId: string, revisionId: string, activityInstanceId: string): Promise<unknown>;
|
|
44
|
-
assertApprovalInput(manager: EntityManager, domainId: string, input: unknown): Promise<unknown>;
|
|
45
|
-
publish(manager: EntityManager, domainId: string, revisionId: string, signed: {
|
|
46
|
-
activityInstanceId: string;
|
|
47
|
-
approverId: string;
|
|
48
|
-
submissionHash: string;
|
|
49
|
-
}): Promise<unknown>;
|
|
50
|
-
}
|
|
51
|
-
/** Adds an axis to the approval flow. Called at module import, before the schema is built. */
|
|
52
|
-
export declare function registerMasterChangeAxis(axis: MasterChangeAxis): void;
|
|
53
|
-
export declare function masterChangeAxis(axis: string): MasterChangeAxis | undefined;
|
|
54
|
-
export declare function masterChangeAxes(): MasterChangeAxis[];
|