@steedos-labs/content-compliance 0.8.8 → 0.8.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/index.js +1 -1
  2. package/lib/actions/bypassApproval.js +18 -0
  3. package/lib/actions/bypassApproval.js.map +1 -1
  4. package/lib/actions/bypassMaterial.js +12 -0
  5. package/lib/actions/bypassMaterial.js.map +1 -1
  6. package/lib/index.js +128 -0
  7. package/lib/index.js.map +1 -1
  8. package/lib/methods/AI.d.ts +6 -0
  9. package/lib/methods/AI.js +116 -15
  10. package/lib/methods/AI.js.map +1 -1
  11. package/lib/methods/__tests__/plsReview.test.d.ts +1 -0
  12. package/lib/methods/__tests__/plsReview.test.js +428 -0
  13. package/lib/methods/__tests__/plsReview.test.js.map +1 -0
  14. package/lib/methods/__tests__/postponeReview.test.js +21 -0
  15. package/lib/methods/__tests__/postponeReview.test.js.map +1 -1
  16. package/lib/methods/__tests__/qcParallelReview.test.d.ts +1 -0
  17. package/lib/methods/__tests__/qcParallelReview.test.js +53 -0
  18. package/lib/methods/__tests__/qcParallelReview.test.js.map +1 -0
  19. package/lib/methods/__tests__/qcPreReview.test.d.ts +1 -0
  20. package/lib/methods/__tests__/qcPreReview.test.js +65 -0
  21. package/lib/methods/__tests__/qcPreReview.test.js.map +1 -0
  22. package/lib/methods/approval_engine.d.ts +4 -0
  23. package/lib/methods/approval_engine.js +388 -221
  24. package/lib/methods/approval_engine.js.map +1 -1
  25. package/lib/methods/consts.d.ts +35 -0
  26. package/lib/methods/consts.js +2 -0
  27. package/lib/methods/consts.js.map +1 -1
  28. package/lib/methods/material.js +13 -0
  29. package/lib/methods/material.js.map +1 -1
  30. package/lib/methods/pls.d.ts +31 -0
  31. package/lib/methods/pls.js +429 -130
  32. package/lib/methods/pls.js.map +1 -1
  33. package/lib/pages/__tests__/aiReviewCardStyles.test.d.ts +1 -0
  34. package/lib/pages/__tests__/aiReviewCardStyles.test.js +29 -0
  35. package/lib/pages/__tests__/aiReviewCardStyles.test.js.map +1 -0
  36. package/lib/pages/__tests__/aiReviewChineseColons.test.d.ts +1 -0
  37. package/lib/pages/__tests__/aiReviewChineseColons.test.js +132 -0
  38. package/lib/pages/__tests__/aiReviewChineseColons.test.js.map +1 -0
  39. package/lib/pages/__tests__/clientCssCacheVersion.test.d.ts +1 -0
  40. package/lib/pages/__tests__/clientCssCacheVersion.test.js +31 -0
  41. package/lib/pages/__tests__/clientCssCacheVersion.test.js.map +1 -0
  42. package/lib/pages/__tests__/materialDetailAIReviewFilter.test.d.ts +1 -0
  43. package/lib/pages/__tests__/materialDetailAIReviewFilter.test.js +51 -0
  44. package/lib/pages/__tests__/materialDetailAIReviewFilter.test.js.map +1 -0
  45. package/lib/pages/__tests__/plsReviewCardStyles.test.d.ts +1 -0
  46. package/lib/pages/__tests__/plsReviewCardStyles.test.js +98 -0
  47. package/lib/pages/__tests__/plsReviewCardStyles.test.js.map +1 -0
  48. package/lib/pages/__tests__/plsReviewPage.test.d.ts +1 -0
  49. package/lib/pages/__tests__/plsReviewPage.test.js +249 -0
  50. package/lib/pages/__tests__/plsReviewPage.test.js.map +1 -0
  51. package/main/default/applications/pepsico_content_setting.app.yml +4 -0
  52. package/main/default/client/pepsico_content.client.js +8 -3
  53. package/main/default/objects/ai_process_detail/ai_process_detail.object.yml +1 -0
  54. package/main/default/objects/ai_process_detail/fields/pls_extracted_data.field.yml +9 -0
  55. package/main/default/objects/ai_process_detail/fields/pls_file_ids.field.yml +9 -0
  56. package/main/default/objects/ai_process_detail/fields/pls_product_name_matched.field.yml +9 -0
  57. package/main/default/objects/ai_process_detail/fields/pls_rule_unique_matched.field.yml +9 -0
  58. package/main/default/objects/pepesio_ch__c/fields/company_id.field.yml +14 -0
  59. package/main/default/objects/pepesio_ch__c/fields/company_ids.field.yml +16 -0
  60. package/main/default/objects/pepesio_ch__c/fields/created.field.yml +10 -0
  61. package/main/default/objects/pepesio_ch__c/fields/created_by.field.yml +9 -0
  62. package/main/default/objects/pepesio_ch__c/fields/file_name.field.yml +8 -0
  63. package/main/default/objects/pepesio_ch__c/fields/instance_state.field.yml +25 -0
  64. package/main/default/objects/pepesio_ch__c/fields/locked.field.yml +12 -0
  65. package/main/default/objects/pepesio_ch__c/fields/material_type.field.yml +10 -0
  66. package/main/default/objects/pepesio_ch__c/fields/media_type.field.yml +13 -0
  67. package/main/default/objects/pepesio_ch__c/fields/modified.field.yml +10 -0
  68. package/main/default/objects/pepesio_ch__c/fields/modified_by.field.yml +9 -0
  69. package/main/default/objects/pepesio_ch__c/fields/name.field.yml +11 -0
  70. package/main/default/objects/pepesio_ch__c/fields/owner.field.yml +12 -0
  71. package/main/default/objects/pepesio_ch__c/fields/product.field.yml +10 -0
  72. package/main/default/objects/pepesio_ch__c/fields/time.field.yml +8 -0
  73. package/main/default/objects/pepesio_ch__c/fields/type.field.yml +22 -0
  74. package/main/default/objects/pepesio_ch__c/listviews/all.listview.yml +21 -0
  75. package/main/default/objects/pepesio_ch__c/listviews/recent.listview.yml +11 -0
  76. package/main/default/objects/pepesio_ch__c/pepesio_ch__c.object.yml +31 -0
  77. package/main/default/objects/pepesio_ch__c/permissions/admin.permission.yml +9 -0
  78. package/main/default/objects/pepesio_ch__c/permissions/user.permission.yml +9 -0
  79. package/main/default/objects/pepsico_ai_review/buttons/pepsico_adopt.button.yml +3 -3
  80. package/main/default/objects/pepsico_ai_review/fields/is_active.field.yml +7 -0
  81. package/main/default/objects/pepsico_ai_review/fields/pepsico_material_approval.field.yml +7 -0
  82. package/main/default/objects/pepsico_ai_review/fields/pls_file.field.yml +7 -0
  83. package/main/default/objects/pepsico_ai_review/fields/review_type.field.yml +12 -0
  84. package/main/default/objects/pepsico_approval_process/fields/type.field.yml +5 -1
  85. package/main/default/objects/pepsico_km_pls/fields/allergen_statement.field.yml +9 -0
  86. package/main/default/objects/pepsico_km_pls/fields/ingredient_list.field.yml +9 -0
  87. package/main/default/objects/pepsico_km_pls/listviews/all.listview.yml +6 -0
  88. package/main/default/objects/pepsico_km_pls_file/listviews/lookup.listview.yml +19 -0
  89. package/main/default/objects/pepsico_km_pls_file/permissions/user.permission.yml +2 -2
  90. package/main/default/objects/pepsico_material/fields/pre_qc_approval_status.field.yml +16 -0
  91. package/main/default/objects/pepsico_material/fields/qc_approval_status.field.yml +16 -0
  92. package/main/default/objects/pepsico_material/fields/qc_bypass_reason.field.yml +11 -0
  93. package/main/default/objects/pepsico_material/fields/qc_bypassed.field.yml +12 -0
  94. package/main/default/objects/pepsico_material/fields/qc_bypassed_at.field.yml +11 -0
  95. package/main/default/objects/pepsico_material/fields/qc_bypassed_by.field.yml +12 -0
  96. package/main/default/objects/pepsico_material/listviews/all.listview.yml +2 -0
  97. package/main/default/objects/pepsico_material_approval/buttons/pepsico_modify_pls.button.yml +70 -0
  98. package/main/default/objects/pepsico_material_approval/buttons/pepsico_postpone_review.button.yml +62 -37
  99. package/main/default/objects/pepsico_material_approval/buttons/pre_review_approve.button.yml +1 -1
  100. package/main/default/objects/pepsico_material_approval/buttons/pre_review_reject.button.yml +1 -1
  101. package/main/default/objects/pepsico_material_approval/fields/approved_flows.field.yml +2 -2
  102. package/main/default/objects/pepsico_material_approval/fields/assistance.field.yml +1 -1
  103. package/main/default/objects/pepsico_material_approval/fields/ca_assistance.field.yml +1 -1
  104. package/main/default/objects/pepsico_material_approval/fields/classification.field.yml +15 -0
  105. package/main/default/objects/pepsico_material_approval/fields/ec_check_food_name.field.yml +18 -0
  106. package/main/default/objects/pepsico_material_approval/fields/ec_check_ingredients.field.yml +18 -0
  107. package/main/default/objects/pepsico_material_approval/fields/ec_check_net_content.field.yml +18 -0
  108. package/main/default/objects/pepsico_material_approval/fields/ec_check_producer_address.field.yml +18 -0
  109. package/main/default/objects/pepsico_material_approval/fields/ec_check_producer_name.field.yml +18 -0
  110. package/main/default/objects/pepsico_material_approval/fields/ec_check_shelf_life.field.yml +18 -0
  111. package/main/default/objects/pepsico_material_approval/fields/ec_check_standard_code.field.yml +18 -0
  112. package/main/default/objects/pepsico_material_approval/fields/ec_check_storage_condition.field.yml +18 -0
  113. package/main/default/objects/pepsico_material_approval/fields/ec_has_detail_page.field.yml +18 -0
  114. package/main/default/objects/pepsico_material_approval/fields/ec_producers.$.field.yml +5 -0
  115. package/main/default/objects/pepsico_material_approval/fields/ec_producers.$.producer_address.field.yml +7 -0
  116. package/main/default/objects/pepsico_material_approval/fields/ec_producers.$.producer_name.field.yml +7 -0
  117. package/main/default/objects/pepsico_material_approval/fields/ec_producers.field.yml +16 -0
  118. package/main/default/objects/pepsico_material_approval/fields/ec_qc_production_email.field.yml +16 -0
  119. package/main/default/objects/pepsico_material_approval/fields/ec_related_approval.field.yml +9 -0
  120. package/main/default/objects/pepsico_material_approval/fields/form_version.field.yml +10 -0
  121. package/main/default/objects/pepsico_material_approval/fields/handler_preca.field.yml +1 -1
  122. package/main/default/objects/pepsico_material_approval/fields/handler_preguding.field.yml +1 -1
  123. package/main/default/objects/pepsico_material_approval/fields/handler_prens.field.yml +1 -1
  124. package/main/default/objects/pepsico_material_approval/fields/handler_preqc.field.yml +22 -0
  125. package/main/default/objects/pepsico_material_approval/fields/handler_presra.field.yml +1 -1
  126. package/main/default/objects/pepsico_material_approval/fields/handler_qc.field.yml +20 -0
  127. package/main/default/objects/pepsico_material_approval/fields/has_nutrition_table.field.yml +18 -0
  128. package/main/default/objects/pepsico_material_approval/fields/legal_assistance.field.yml +1 -1
  129. package/main/default/objects/pepsico_material_approval/fields/ns_assistance.field.yml +1 -1
  130. package/main/default/objects/pepsico_material_approval/fields/pls_file.field.yml +2 -2
  131. package/main/default/objects/pepsico_material_approval/fields/pls_km_files.field.yml +28 -0
  132. package/main/default/objects/pepsico_material_approval/fields/pls_upload_files.field.yml +21 -0
  133. package/main/default/objects/pepsico_material_approval/fields/pre_ca_reviewer.field.yml +1 -1
  134. package/main/default/objects/pepsico_material_approval/fields/pre_ns_reviewer.field.yml +1 -1
  135. package/main/default/objects/pepsico_material_approval/fields/pre_qc_approval_status.field.yml +17 -0
  136. package/main/default/objects/pepsico_material_approval/fields/pre_qc_materials_quantity.field.yml +21 -0
  137. package/main/default/objects/pepsico_material_approval/fields/pre_qc_reviewer.field.yml +19 -0
  138. package/main/default/objects/pepsico_material_approval/fields/pre_reviewer.field.yml +1 -1
  139. package/main/default/objects/pepsico_material_approval/fields/pre_sra_reviewer.field.yml +1 -1
  140. package/main/default/objects/pepsico_material_approval/fields/product.field.yml +15 -0
  141. package/main/default/objects/pepsico_material_approval/fields/qc_approval_status.field.yml +18 -0
  142. package/main/default/objects/pepsico_material_approval/fields/qc_assistance.field.yml +22 -0
  143. package/main/default/objects/pepsico_material_approval/fields/qc_bypass_reason.field.yml +8 -0
  144. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed.field.yml +12 -0
  145. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed_at.field.yml +8 -0
  146. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed_by.field.yml +8 -0
  147. package/main/default/objects/pepsico_material_approval/fields/qc_materials_quantity.field.yml +21 -0
  148. package/main/default/objects/pepsico_material_approval/fields/qc_reviewer.field.yml +22 -0
  149. package/main/default/objects/pepsico_material_approval/fields/sra_assistance.field.yml +1 -1
  150. package/main/default/objects/pepsico_material_approval/listviews/all.listview.yml +2 -0
  151. package/main/default/objects/pepsico_material_approval/pepsico_material_approval.object.yml +4 -0
  152. package/main/default/objects/pepsico_pls_change_log/fields/after_pls_files.field.yml +9 -0
  153. package/main/default/objects/pepsico_pls_change_log/fields/after_pls_names.field.yml +7 -0
  154. package/main/default/objects/pepsico_pls_change_log/fields/approval.field.yml +7 -0
  155. package/main/default/objects/pepsico_pls_change_log/fields/approval_name.field.yml +6 -0
  156. package/main/default/objects/pepsico_pls_change_log/fields/before_pls_files.field.yml +9 -0
  157. package/main/default/objects/pepsico_pls_change_log/fields/before_pls_names.field.yml +7 -0
  158. package/main/default/objects/pepsico_pls_change_log/fields/material.field.yml +8 -0
  159. package/main/default/objects/pepsico_pls_change_log/fields/operator.field.yml +7 -0
  160. package/main/default/objects/pepsico_pls_change_log/fields/scene.field.yml +13 -0
  161. package/main/default/objects/pepsico_pls_change_log/fields/source.field.yml +14 -0
  162. package/main/default/objects/pepsico_pls_change_log/fields/space.field.yml +6 -0
  163. package/main/default/objects/pepsico_pls_change_log/listviews/all.listview.yml +25 -0
  164. package/main/default/objects/pepsico_pls_change_log/pepsico_pls_change_log.object.yml +16 -0
  165. package/main/default/objects/pepsico_pls_change_log/permissions/admin.permission.yml +15 -0
  166. package/main/default/objects/pepsico_pls_change_log/permissions/user.permission.yml +14 -0
  167. package/main/default/objects/pepsico_review_postpone/fields/department_type.field.yml +4 -0
  168. package/main/default/objects/pepsico_reviewer/fields/pre_qc_reviewer.field.yml +10 -0
  169. package/main/default/objects/pepsico_reviewer/fields/qc_assistance.field.yml +14 -0
  170. package/main/default/objects/pepsico_reviewer/fields/qc_reviewer.field.yml +12 -0
  171. package/main/default/objects/pepsico_reviewer/listviews/all.listview.yml +4 -0
  172. package/main/default/pages/pepsico_content_review_detail.page.amis.json +19 -1
  173. package/main/default/pages/pepsico_material_detail.page.amis.json +623 -41
  174. package/main/default/pages/pepsico_material_detail_mobile.page.amis.json +307 -3
  175. package/main/default/tabs/object_pepsico_pls_change_log.tab.yml +14 -0
  176. package/main/default/triggers/pepsico_material_approval_change.trigger.yml +3 -0
  177. package/package.json +1 -1
  178. package/public/content-review/amis.css +338 -8
@@ -0,0 +1,428 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var pls_1 = require("../pls");
5
+ describe('PLS change log', function () {
6
+ var buildCtx = function (changeLogInsert) { return ({
7
+ meta: { user: { userId: 'sra-1' } },
8
+ getObject: function (name) {
9
+ if (name === 'pepsico_km_pls_file') {
10
+ return {
11
+ directFind: jest.fn().mockResolvedValue([
12
+ { _id: 'pls-a', name: 'PLS 旧版' },
13
+ { _id: 'pls-d', name: 'PLS 新版' }
14
+ ])
15
+ };
16
+ }
17
+ if (name === 'pepsico_pls_change_log') {
18
+ return { directInsert: changeLogInsert };
19
+ }
20
+ throw new Error("Unexpected object ".concat(name));
21
+ }
22
+ }); };
23
+ it('records the change with redundant file names', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
24
+ var changeLogInsert;
25
+ return tslib_1.__generator(this, function (_a) {
26
+ switch (_a.label) {
27
+ case 0:
28
+ changeLogInsert = jest.fn();
29
+ return [4, (0, pls_1.logPLSChange)(buildCtx(changeLogInsert), {
30
+ approval: { _id: 'approval-1', name: 'AP-001', space: 'space-1' },
31
+ scene: 'reviewer_change',
32
+ materialId: 'material-1',
33
+ beforeIds: ['pls-a'],
34
+ afterIds: ['pls-d'],
35
+ source: 'upload'
36
+ })];
37
+ case 1:
38
+ _a.sent();
39
+ expect(changeLogInsert).toHaveBeenCalledWith(expect.objectContaining({
40
+ approval: 'approval-1',
41
+ approval_name: 'AP-001',
42
+ material: 'material-1',
43
+ scene: 'reviewer_change',
44
+ source: 'upload',
45
+ before_pls_files: ['pls-a'],
46
+ before_pls_names: 'PLS 旧版',
47
+ after_pls_files: ['pls-d'],
48
+ after_pls_names: 'PLS 新版',
49
+ operator: 'sra-1',
50
+ space: 'space-1'
51
+ }));
52
+ return [2];
53
+ }
54
+ });
55
+ }); });
56
+ it('skips approvals that never had a PLS file', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
57
+ var changeLogInsert;
58
+ return tslib_1.__generator(this, function (_a) {
59
+ switch (_a.label) {
60
+ case 0:
61
+ changeLogInsert = jest.fn();
62
+ return [4, (0, pls_1.logPLSChange)(buildCtx(changeLogInsert), {
63
+ approval: { _id: 'approval-1' },
64
+ scene: 'submit',
65
+ beforeIds: [],
66
+ afterIds: []
67
+ })];
68
+ case 1:
69
+ _a.sent();
70
+ expect(changeLogInsert).not.toHaveBeenCalled();
71
+ return [2];
72
+ }
73
+ });
74
+ }); });
75
+ it('never throws when the log write fails', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
76
+ var ctx;
77
+ return tslib_1.__generator(this, function (_a) {
78
+ switch (_a.label) {
79
+ case 0:
80
+ ctx = {
81
+ meta: { user: { userId: 'sra-1' } },
82
+ getObject: function () { throw new Error('boom'); }
83
+ };
84
+ return [4, expect((0, pls_1.logPLSChange)(ctx, {
85
+ approval: { _id: 'approval-1' },
86
+ scene: 'submit',
87
+ beforeIds: ['pls-a'],
88
+ afterIds: ['pls-a']
89
+ })).resolves.toBeUndefined()];
90
+ case 1:
91
+ _a.sent();
92
+ return [2];
93
+ }
94
+ });
95
+ }); });
96
+ });
97
+ describe('PLS review source management', function () {
98
+ it('backfills the approval on the PLS record without touching pls_km_files', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
99
+ var plsUpdate, approvalUpdate, ctx, result;
100
+ return tslib_1.__generator(this, function (_a) {
101
+ switch (_a.label) {
102
+ case 0:
103
+ plsUpdate = jest.fn();
104
+ approvalUpdate = jest.fn();
105
+ ctx = {
106
+ meta: { user: { userId: 'sra-1', spaceId: 'space-1' } },
107
+ getObject: function (name) {
108
+ if (name === 'cfs_files_filerecord') {
109
+ return {
110
+ directFind: jest.fn().mockResolvedValue([
111
+ { _id: 'file-1', original: { name: 'PLS新规.pdf', type: 'application/pdf' } }
112
+ ])
113
+ };
114
+ }
115
+ if (name === 'pepsico_km_pls_file') {
116
+ return {
117
+ directInsert: jest.fn().mockResolvedValue({ _id: 'pls-new', name: 'PLS新规' }),
118
+ directUpdate: plsUpdate
119
+ };
120
+ }
121
+ if (name === 'pepsico_material_approval') {
122
+ return { directUpdate: approvalUpdate };
123
+ }
124
+ throw new Error("Unexpected object ".concat(name));
125
+ }
126
+ };
127
+ return [4, (0, pls_1.createApplicationPLSFiles)(ctx, ['file-1'], {
128
+ _id: 'approval-1',
129
+ pls_km_files: ['pls-a']
130
+ })];
131
+ case 1:
132
+ result = _a.sent();
133
+ expect(result.records).toEqual([{ id: 'pls-new', name: 'PLS新规' }]);
134
+ expect(plsUpdate).toHaveBeenCalledWith('pls-new', expect.objectContaining({
135
+ pepsico_material_approval: 'approval-1'
136
+ }));
137
+ expect(approvalUpdate).not.toHaveBeenCalled();
138
+ return [2];
139
+ }
140
+ });
141
+ }); });
142
+ it('shows PLS opinions with true, null, or missing active status', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
143
+ var reviews, ctx, result;
144
+ return tslib_1.__generator(this, function (_a) {
145
+ switch (_a.label) {
146
+ case 0:
147
+ reviews = [
148
+ { _id: 'review-true', pls_file: 'pls-a', is_active: true },
149
+ { _id: 'review-false', pls_file: 'pls-a', is_active: false },
150
+ { _id: 'review-null', pls_file: 'pls-a', is_active: null },
151
+ { _id: 'review-missing', pls_file: 'pls-a' }
152
+ ];
153
+ ctx = {
154
+ meta: { user: { userId: 'viewer-1' } },
155
+ getObject: function (name) {
156
+ if (name === 'pepsico_material') {
157
+ return {
158
+ findOne: jest.fn().mockResolvedValue({
159
+ _id: 'material-1',
160
+ pepsico_material_approval: 'approval-1'
161
+ })
162
+ };
163
+ }
164
+ if (name === 'pepsico_material_approval') {
165
+ return {
166
+ findOne: jest.fn().mockResolvedValue({ _id: 'approval-1' })
167
+ };
168
+ }
169
+ if (name === 'pepsico_ai_review') {
170
+ return { find: jest.fn().mockResolvedValue(reviews) };
171
+ }
172
+ if (name === 'pepsico_km_pls_file') {
173
+ return {
174
+ directFind: jest.fn().mockResolvedValue([
175
+ { _id: 'pls-a', name: 'PLS A', is_active: true }
176
+ ])
177
+ };
178
+ }
179
+ throw new Error("Unexpected object ".concat(name));
180
+ }
181
+ };
182
+ return [4, (0, pls_1.getPLSReviewGroups)(ctx, 'material-1')];
183
+ case 1:
184
+ result = _a.sent();
185
+ expect(result.groups).toHaveLength(1);
186
+ expect(result.groups[0].reviews.map(function (review) { return review._id; })).toEqual([
187
+ 'review-true',
188
+ 'review-null',
189
+ 'review-missing'
190
+ ]);
191
+ return [2];
192
+ }
193
+ });
194
+ }); });
195
+ it('offers PLS files with true, null, or missing active status', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
196
+ var ctx, options;
197
+ return tslib_1.__generator(this, function (_a) {
198
+ switch (_a.label) {
199
+ case 0:
200
+ ctx = {
201
+ getObject: function (name) {
202
+ if (name === 'pepsico_km_pls_file') {
203
+ return {
204
+ find: jest.fn().mockResolvedValue([
205
+ { _id: 'pls-true', name: 'True', is_active: true },
206
+ { _id: 'pls-false', name: 'False', is_active: false },
207
+ { _id: 'pls-null', name: 'Null', is_active: null },
208
+ { _id: 'pls-missing', name: 'Missing' }
209
+ ])
210
+ };
211
+ }
212
+ throw new Error("Unexpected object ".concat(name));
213
+ }
214
+ };
215
+ return [4, (0, pls_1.getActivePLSOptions)(ctx)];
216
+ case 1:
217
+ options = _a.sent();
218
+ expect(options.map(function (option) { return option.value; })).toEqual([
219
+ 'pls-true',
220
+ 'pls-null',
221
+ 'pls-missing'
222
+ ]);
223
+ return [2];
224
+ }
225
+ });
226
+ }); });
227
+ it('invalidates PLS opinions unless they are explicitly inactive', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
228
+ var reviewUpdate, ctx, invalidated;
229
+ return tslib_1.__generator(this, function (_a) {
230
+ switch (_a.label) {
231
+ case 0:
232
+ reviewUpdate = jest.fn();
233
+ ctx = {
234
+ getObject: function (name) {
235
+ if (name === 'pepsico_ai_review') {
236
+ return {
237
+ directFind: jest.fn().mockResolvedValue([
238
+ { _id: 'review-true', is_active: true },
239
+ { _id: 'review-false', is_active: false },
240
+ { _id: 'review-null', is_active: null },
241
+ { _id: 'review-missing' }
242
+ ]),
243
+ directUpdateMany: reviewUpdate
244
+ };
245
+ }
246
+ throw new Error("Unexpected object ".concat(name));
247
+ }
248
+ };
249
+ return [4, (0, pls_1.invalidatePLSReviews)(ctx, 'approval-1')];
250
+ case 1:
251
+ invalidated = _a.sent();
252
+ expect(invalidated).toBe(3);
253
+ expect(reviewUpdate).toHaveBeenCalledWith(['_id', 'in', ['review-true', 'review-null', 'review-missing']], expect.objectContaining({ is_active: false }));
254
+ return [2];
255
+ }
256
+ });
257
+ }); });
258
+ it('recognizes users from the current reviewer configuration', function () {
259
+ var approval = {
260
+ sra_reviewer: ['sra-1'],
261
+ qc_reviewer: ['qc-1'],
262
+ reviewer: ['fixed-1']
263
+ };
264
+ expect((0, pls_1.isApprovalReviewer)(approval, 'sra-1')).toBe(true);
265
+ expect((0, pls_1.isApprovalReviewer)(approval, 'qc-1')).toBe(true);
266
+ expect((0, pls_1.isApprovalReviewer)(approval, 'owner-1')).toBe(false);
267
+ });
268
+ it('limits invalidation to one material when a material is given', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
269
+ var reviewFind, ctx;
270
+ return tslib_1.__generator(this, function (_a) {
271
+ switch (_a.label) {
272
+ case 0:
273
+ reviewFind = jest.fn().mockResolvedValue([]);
274
+ ctx = {
275
+ getObject: function (name) {
276
+ if (name === 'pepsico_ai_review') {
277
+ return { directFind: reviewFind, directUpdateMany: jest.fn() };
278
+ }
279
+ throw new Error("Unexpected object ".concat(name));
280
+ }
281
+ };
282
+ return [4, (0, pls_1.invalidatePLSReviews)(ctx, 'approval-1', 'pls-a', 'material-1')];
283
+ case 1:
284
+ _a.sent();
285
+ expect(reviewFind).toHaveBeenCalledWith(expect.objectContaining({
286
+ filters: [
287
+ ['pepsico_material_approval', '=', 'approval-1'],
288
+ ['review_type', '=', 'pls'],
289
+ ['pls_file', '=', 'pls-a'],
290
+ ['pepsico_material', '=', 'material-1']
291
+ ]
292
+ }));
293
+ return [2];
294
+ }
295
+ });
296
+ }); });
297
+ it('replaces only the selected PLS source and invalidates its old opinions', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
298
+ var approval, approvalUpdate, reviewUpdate, reviewFind, changeLogInsert, ctx, result;
299
+ return tslib_1.__generator(this, function (_a) {
300
+ switch (_a.label) {
301
+ case 0:
302
+ approval = {
303
+ _id: 'approval-1',
304
+ sra_reviewer: ['sra-1'],
305
+ pls_km_files: ['pls-a', 'pls-b', 'pls-c']
306
+ };
307
+ approvalUpdate = jest.fn();
308
+ reviewUpdate = jest.fn();
309
+ reviewFind = jest.fn().mockResolvedValue([{ _id: 'review-a' }]);
310
+ changeLogInsert = jest.fn();
311
+ ctx = {
312
+ meta: { user: { userId: 'sra-1' } },
313
+ getObject: function (name) {
314
+ if (name === 'pepsico_material_approval') {
315
+ return { findOne: jest.fn().mockResolvedValue(approval), directUpdate: approvalUpdate };
316
+ }
317
+ if (name === 'pepsico_km_pls_file') {
318
+ return { directFind: jest.fn().mockResolvedValue([{ _id: 'pls-d' }]) };
319
+ }
320
+ if (name === 'pepsico_ai_review') {
321
+ return {
322
+ directFind: reviewFind,
323
+ directUpdateMany: reviewUpdate
324
+ };
325
+ }
326
+ if (name === 'pepsico_pls_change_log') {
327
+ return { directInsert: changeLogInsert };
328
+ }
329
+ throw new Error("Unexpected object ".concat(name));
330
+ }
331
+ };
332
+ return [4, (0, pls_1.replaceApprovalPLSSource)(ctx, 'approval-1', 'pls-a', 'pls-d', 'material-1', 'existing')];
333
+ case 1:
334
+ result = _a.sent();
335
+ expect(result.pls_km_files).toEqual(['pls-d', 'pls-b', 'pls-c']);
336
+ expect(approvalUpdate).toHaveBeenCalledWith('approval-1', expect.objectContaining({
337
+ pls_km_files: ['pls-d', 'pls-b', 'pls-c']
338
+ }));
339
+ expect(reviewUpdate).toHaveBeenCalledWith(['_id', 'in', ['review-a']], expect.objectContaining({ is_active: false }));
340
+ expect(reviewFind).toHaveBeenCalledWith(expect.objectContaining({
341
+ filters: expect.arrayContaining([['pepsico_material', '=', 'material-1']])
342
+ }));
343
+ expect(changeLogInsert).toHaveBeenCalledWith(expect.objectContaining({
344
+ scene: 'reviewer_change',
345
+ material: 'material-1',
346
+ source: 'existing',
347
+ before_pls_files: ['pls-a'],
348
+ after_pls_files: ['pls-d']
349
+ }));
350
+ return [2];
351
+ }
352
+ });
353
+ }); });
354
+ it('accepts replacement sources that are not active yet', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
355
+ var approvalUpdate, ctx, result;
356
+ return tslib_1.__generator(this, function (_a) {
357
+ switch (_a.label) {
358
+ case 0:
359
+ approvalUpdate = jest.fn();
360
+ ctx = {
361
+ meta: { user: { userId: 'qc-1' } },
362
+ getObject: function (name) {
363
+ if (name === 'pepsico_material_approval') {
364
+ return {
365
+ findOne: jest.fn().mockResolvedValue({
366
+ _id: 'approval-1',
367
+ qc_reviewer: ['qc-1'],
368
+ pls_km_files: ['pls-a']
369
+ }),
370
+ directUpdate: approvalUpdate
371
+ };
372
+ }
373
+ if (name === 'pepsico_ai_review') {
374
+ return {
375
+ directFind: jest.fn().mockResolvedValue([]),
376
+ directUpdateMany: jest.fn()
377
+ };
378
+ }
379
+ if (name === 'pepsico_km_pls_file') {
380
+ return { directFind: jest.fn().mockResolvedValue([]) };
381
+ }
382
+ if (name === 'pepsico_pls_change_log') {
383
+ return { directInsert: jest.fn() };
384
+ }
385
+ throw new Error("Unexpected object ".concat(name));
386
+ }
387
+ };
388
+ return [4, (0, pls_1.replaceApprovalPLSSource)(ctx, 'approval-1', 'pls-a', 'pls-inactive')];
389
+ case 1:
390
+ result = _a.sent();
391
+ expect(result.pls_km_files).toEqual(['pls-inactive']);
392
+ expect(approvalUpdate).toHaveBeenCalledWith('approval-1', expect.objectContaining({
393
+ pls_km_files: ['pls-inactive']
394
+ }));
395
+ return [2];
396
+ }
397
+ });
398
+ }); });
399
+ it('still rejects sources that are not linked to the approval', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
400
+ var ctx;
401
+ return tslib_1.__generator(this, function (_a) {
402
+ switch (_a.label) {
403
+ case 0:
404
+ ctx = {
405
+ meta: { user: { userId: 'qc-1' } },
406
+ getObject: function (name) {
407
+ if (name === 'pepsico_material_approval') {
408
+ return {
409
+ findOne: jest.fn().mockResolvedValue({
410
+ _id: 'approval-1',
411
+ qc_reviewer: ['qc-1'],
412
+ pls_km_files: ['pls-a']
413
+ })
414
+ };
415
+ }
416
+ throw new Error("Unexpected object ".concat(name));
417
+ }
418
+ };
419
+ return [4, expect((0, pls_1.replaceApprovalPLSSource)(ctx, 'approval-1', 'pls-unlinked', 'pls-new'))
420
+ .rejects.toThrow('当前PLS来源未关联到审批单')];
421
+ case 1:
422
+ _a.sent();
423
+ return [2];
424
+ }
425
+ });
426
+ }); });
427
+ });
428
+ //# sourceMappingURL=plsReview.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plsReview.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/plsReview.test.ts"],"names":[],"mappings":"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"}
@@ -98,5 +98,26 @@ describe('postponeReview', function () {
98
98
  }
99
99
  });
100
100
  }); });
101
+ it('rejects a blank postpone reason before touching any data', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
102
+ var getObject, ctx;
103
+ return tslib_1.__generator(this, function (_a) {
104
+ switch (_a.label) {
105
+ case 0:
106
+ getObject = jest.fn();
107
+ ctx = {
108
+ meta: { user: { userId: 'reviewer-1' } },
109
+ getObject: getObject
110
+ };
111
+ return [4, expect((0, approval_engine_1.postponeReview)(ctx, 'approval-1', { postpone_reason: ' ' })).rejects.toThrow('请填写延后原因')];
112
+ case 1:
113
+ _a.sent();
114
+ return [4, expect((0, approval_engine_1.postponeReview)(ctx, 'approval-1', {})).rejects.toThrow('请填写延后原因')];
115
+ case 2:
116
+ _a.sent();
117
+ expect(getObject).not.toHaveBeenCalled();
118
+ return [2];
119
+ }
120
+ });
121
+ }); });
101
122
  });
102
123
  //# sourceMappingURL=postponeReview.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"postponeReview.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/postponeReview.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postponeReview.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/postponeReview.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var approval_engine_1 = require("../approval_engine");
5
+ var material_1 = require("../material");
6
+ var consts_1 = require("../consts");
7
+ var approvedDepartments = {
8
+ _id: 'approval-qc',
9
+ current_step: consts_1.Step.departmental_review,
10
+ ns_approval_status: true,
11
+ legal_approval_status: true,
12
+ sra_approval_status: true,
13
+ ca_approval_status: true
14
+ };
15
+ describe('QC conditional parallel review', function () {
16
+ it('does not require QC when the approval has no product detail page', function () {
17
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { ec_has_detail_page: 'no' });
18
+ expect((0, approval_engine_1.needsQcReview)(approval)).toBe(false);
19
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(true);
20
+ expect((0, approval_engine_1.getDepartmentEffectiveStatuses)(approval)).toEqual([true, true, true, true]);
21
+ });
22
+ it('keeps the departmental review pending until QC finishes', function () {
23
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { ec_has_detail_page: 'yes', qc_approval_status: '' });
24
+ expect((0, approval_engine_1.needsQcReview)(approval)).toBe(true);
25
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(false);
26
+ });
27
+ it.each([true, 'pass'])('accepts QC result %p as completed', function (qcStatus) {
28
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { ec_has_detail_page: 'yes', qc_approval_status: qcStatus });
29
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(true);
30
+ expect((0, approval_engine_1.getDepartmentEffectiveStatuses)(approval)).toEqual([true, true, true, true, qcStatus]);
31
+ });
32
+ it('treats a QC rejection as completed but keeps the negative result for aggregation', function () {
33
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { ec_has_detail_page: 'yes', qc_approval_status: false });
34
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(true);
35
+ expect((0, approval_engine_1.getDepartmentEffectiveStatuses)(approval)).toEqual([true, true, true, true, false]);
36
+ });
37
+ it('maps QC process records to the QC material approval field', function () {
38
+ expect((0, material_1.getApproverFieldByType)(consts_1.ProcessApprovalType.QC)).toBe('qc_approval_status');
39
+ });
40
+ it('resolves QC as an eligible postponed review department', function () {
41
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { ec_has_detail_page: 'yes', qc_reviewer: ['qc-user'], handler_qc: ['qc-user'], qc_approval_status: false });
42
+ expect((0, approval_engine_1.getPostponeReviewDepartmentType)(approval, [{ type: consts_1.ProcessApprovalType.QC }], 'qc-user')).toBe(consts_1.ProcessApprovalType.QC);
43
+ });
44
+ it.each([
45
+ [{ pls_km_files: ['pls-1'], sra_approval_status: false, qc_approval_status: true }, true],
46
+ [{ pls_km_files: ['pls-1'], sra_approval_status: true, qc_approval_status: false }, true],
47
+ [{ pls_km_files: [], sra_approval_status: false, qc_approval_status: false }, false],
48
+ [{ pls_km_files: ['pls-1'], sra_approval_status: true, qc_approval_status: true }, false]
49
+ ])('decides whether a rejected approval needs PLS AI review', function (approval, expected) {
50
+ expect((0, approval_engine_1.needsPLSReReview)(approval)).toBe(expected);
51
+ });
52
+ });
53
+ //# sourceMappingURL=qcParallelReview.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qcParallelReview.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/qcParallelReview.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var approval_engine_1 = require("../approval_engine");
5
+ var material_1 = require("../material");
6
+ var consts_1 = require("../consts");
7
+ var approvedDepartments = {
8
+ _id: 'approval-pre-qc',
9
+ current_step: consts_1.Step.departmental_review,
10
+ ec_has_detail_page: 'yes',
11
+ ns_approval_status: true,
12
+ legal_approval_status: true,
13
+ sra_approval_status: true,
14
+ ca_approval_status: true
15
+ };
16
+ describe('QC pre review (QC预审)', function () {
17
+ it('keeps the QC cycle pending while the pre reviewer has not decided', function () {
18
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { pre_qc_reviewer: 'pre-qc-user', pre_qc_approval_status: '', qc_approval_status: '' });
19
+ expect((0, approval_engine_1.isDeptReviewComplete)(approval, 'qc')).toBe(false);
20
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(false);
21
+ });
22
+ it('keeps the QC cycle pending after the pre review passed but before the formal review', function () {
23
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { pre_qc_reviewer: 'pre-qc-user', pre_qc_approval_status: true, qc_approval_status: '' });
24
+ expect((0, approval_engine_1.isDeptReviewComplete)(approval, 'qc')).toBe(false);
25
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(false);
26
+ });
27
+ it('completes the QC cycle when both the pre review and the formal review passed', function () {
28
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { pre_qc_reviewer: 'pre-qc-user', pre_qc_approval_status: true, qc_approval_status: true });
29
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(true);
30
+ expect((0, approval_engine_1.getDepartmentEffectiveStatuses)(approval)).toEqual([true, true, true, true, true]);
31
+ });
32
+ it('ends the QC cycle as rejected when the pre review rejects, without waiting for the formal review', function () {
33
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { pre_qc_reviewer: 'pre-qc-user', pre_qc_approval_status: false, qc_approval_status: '' });
34
+ expect((0, approval_engine_1.isDeptReviewComplete)(approval, 'qc')).toBe(true);
35
+ expect((0, approval_engine_1.getDeptEffectiveStatus)(approval, 'qc')).toBe(false);
36
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(true);
37
+ expect((0, approval_engine_1.getDepartmentEffectiveStatuses)(approval)).toEqual([true, true, true, true, false]);
38
+ });
39
+ it('falls back to the formal QC review when no QC pre reviewer is configured', function () {
40
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { qc_approval_status: true });
41
+ expect((0, approval_engine_1.isDeptReviewComplete)(approval, 'qc')).toBe(true);
42
+ expect((0, approval_engine_1.areDepartmentReviewsComplete)(approval)).toBe(true);
43
+ });
44
+ it('only counts the QC pre reviewer when the approval contains a product detail page', function () {
45
+ var withDetailPage = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { pre_qc_reviewer: 'pre-qc-user' });
46
+ var withoutDetailPage = tslib_1.__assign(tslib_1.__assign({}, withDetailPage), { ec_has_detail_page: 'no' });
47
+ expect((0, approval_engine_1.hasAnyPreReviewer)(withDetailPage, consts_1.Step.departmental_review)).toBe(true);
48
+ expect((0, approval_engine_1.hasAnyPreReviewer)(withoutDetailPage, consts_1.Step.departmental_review)).toBe(false);
49
+ expect((0, approval_engine_1.getPreReviewStatuses)(withDetailPage).map(function (item) { return item.dept; })).toContain('QC');
50
+ expect((0, approval_engine_1.getPreReviewStatuses)(withoutDetailPage).map(function (item) { return item.dept; })).not.toContain('QC');
51
+ });
52
+ it('does not push QC into the formal review when its pre review is still in charge', function () {
53
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { pre_ns_reviewer: 'pre-ns-user', pre_legal_reviewer: 'pre-legal-user', pre_sra_reviewer: 'pre-sra-user', pre_ca_reviewer: 'pre-ca-user', pre_qc_reviewer: 'pre-qc-user', qc_approval_status: '' });
54
+ expect((0, approval_engine_1.hasNonPreReviewDepartments)(approval)).toBe(false);
55
+ expect((0, approval_engine_1.hasNonPreReviewDepartments)(tslib_1.__assign(tslib_1.__assign({}, approval), { pre_qc_reviewer: null }))).toBe(true);
56
+ });
57
+ it('maps QC pre review process records to the QC pre review field', function () {
58
+ expect((0, material_1.getApproverFieldByType)(consts_1.ProcessApprovalType.PreQC)).toBe('pre_qc_approval_status');
59
+ });
60
+ it('resolves QC预审 as an eligible postponed review department', function () {
61
+ var approval = tslib_1.__assign(tslib_1.__assign({}, approvedDepartments), { pre_qc_reviewer: 'pre-qc-user', handler_preqc: ['pre-qc-user'], pre_qc_approval_status: false });
62
+ expect((0, approval_engine_1.getPostponeReviewDepartmentType)(approval, [{ type: consts_1.ProcessApprovalType.PreQC }], 'pre-qc-user')).toBe(consts_1.ProcessApprovalType.PreQC);
63
+ });
64
+ });
65
+ //# sourceMappingURL=qcPreReview.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qcPreReview.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/qcPreReview.test.ts"],"names":[],"mappings":"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"}