@things-factory/dataset 7.0.0-alpha.0 → 7.0.0-alpha.18

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 (187) hide show
  1. package/client/activities/activity-data-collect-edit.ts +1 -7
  2. package/client/activities/activity-data-collect-view.ts +7 -0
  3. package/client/activities/activity-data-review-edit.ts +66 -32
  4. package/client/activities/activity-data-review-view.ts +75 -29
  5. package/client/activities/activity-ooc-resolve-edit.ts +44 -48
  6. package/client/activities/activity-ooc-resolve-view.ts +25 -35
  7. package/client/activities/activity-ooc-review-edit.ts +36 -29
  8. package/client/activities/activity-ooc-review-view.ts +9 -19
  9. package/client/bootstrap.ts +5 -9
  10. package/client/pages/data-entry/data-entry-list-page.ts +8 -23
  11. package/client/pages/data-ooc/data-ooc-list-page.ts +71 -27
  12. package/client/pages/data-ooc/{data-ooc-view-page.ts → data-ooc-page.ts} +45 -1
  13. package/client/pages/data-ooc/data-ooc-view.ts +198 -41
  14. package/client/pages/data-ooc/data-oocs-page.ts +200 -0
  15. package/client/pages/data-sample/data-sample-list-page.ts +53 -31
  16. package/client/pages/data-sample/{data-sample-view-page.ts → data-sample-page.ts} +8 -1
  17. package/client/pages/data-sample/data-sample-search-page.ts +30 -25
  18. package/client/pages/data-sample/data-sample-view.ts +192 -21
  19. package/client/pages/data-sample/data-samples-page.ts +249 -0
  20. package/client/pages/data-sensor/data-sensor-list-page.ts +28 -6
  21. package/client/pages/data-set/data-item-list.ts +14 -8
  22. package/client/pages/data-set/data-set-list-page.ts +11 -21
  23. package/client/pages/data-summary/data-summary-list-page.ts +12 -24
  24. package/client/route.ts +10 -2
  25. package/dist-client/activities/activity-data-collect-edit.js +1 -7
  26. package/dist-client/activities/activity-data-collect-edit.js.map +1 -1
  27. package/dist-client/activities/activity-data-collect-view.js +7 -0
  28. package/dist-client/activities/activity-data-collect-view.js.map +1 -1
  29. package/dist-client/activities/activity-data-review-edit.d.ts +1 -1
  30. package/dist-client/activities/activity-data-review-edit.js +63 -33
  31. package/dist-client/activities/activity-data-review-edit.js.map +1 -1
  32. package/dist-client/activities/activity-data-review-view.d.ts +1 -1
  33. package/dist-client/activities/activity-data-review-view.js +72 -30
  34. package/dist-client/activities/activity-data-review-view.js.map +1 -1
  35. package/dist-client/activities/activity-ooc-resolve-edit.d.ts +1 -1
  36. package/dist-client/activities/activity-ooc-resolve-edit.js +44 -48
  37. package/dist-client/activities/activity-ooc-resolve-edit.js.map +1 -1
  38. package/dist-client/activities/activity-ooc-resolve-view.d.ts +13 -0
  39. package/dist-client/activities/activity-ooc-resolve-view.js +24 -34
  40. package/dist-client/activities/activity-ooc-resolve-view.js.map +1 -1
  41. package/dist-client/activities/activity-ooc-review-edit.js +39 -29
  42. package/dist-client/activities/activity-ooc-review-edit.js.map +1 -1
  43. package/dist-client/activities/activity-ooc-review-view.js +9 -19
  44. package/dist-client/activities/activity-ooc-review-view.js.map +1 -1
  45. package/dist-client/bootstrap.d.ts +4 -4
  46. package/dist-client/bootstrap.js +4 -4
  47. package/dist-client/bootstrap.js.map +1 -1
  48. package/dist-client/pages/data-entry/data-entry-list-page.js +3 -15
  49. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  50. package/dist-client/pages/data-ooc/data-ooc-list-page.d.ts +6 -0
  51. package/dist-client/pages/data-ooc/data-ooc-list-page.js +67 -24
  52. package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +1 -1
  53. package/dist-client/pages/data-ooc/{data-ooc-view-page.js → data-ooc-page.js} +46 -2
  54. package/dist-client/pages/data-ooc/data-ooc-page.js.map +1 -0
  55. package/dist-client/pages/data-ooc/data-ooc-view.d.ts +11 -4
  56. package/dist-client/pages/data-ooc/data-ooc-view.js +193 -48
  57. package/dist-client/pages/data-ooc/data-ooc-view.js.map +1 -1
  58. package/dist-client/pages/data-ooc/data-oocs-page.d.ts +18 -0
  59. package/dist-client/pages/data-ooc/data-oocs-page.js +200 -0
  60. package/dist-client/pages/data-ooc/data-oocs-page.js.map +1 -0
  61. package/dist-client/pages/data-sample/data-sample-list-page.d.ts +6 -1
  62. package/dist-client/pages/data-sample/data-sample-list-page.js +51 -28
  63. package/dist-client/pages/data-sample/data-sample-list-page.js.map +1 -1
  64. package/dist-client/pages/data-sample/{data-sample-view-page.js → data-sample-page.js} +9 -2
  65. package/dist-client/pages/data-sample/data-sample-page.js.map +1 -0
  66. package/dist-client/pages/data-sample/data-sample-search-page.d.ts +6 -1
  67. package/dist-client/pages/data-sample/data-sample-search-page.js +28 -22
  68. package/dist-client/pages/data-sample/data-sample-search-page.js.map +1 -1
  69. package/dist-client/pages/data-sample/data-sample-view.d.ts +18 -0
  70. package/dist-client/pages/data-sample/data-sample-view.js +186 -19
  71. package/dist-client/pages/data-sample/data-sample-view.js.map +1 -1
  72. package/dist-client/pages/data-sample/data-samples-page.d.ts +21 -0
  73. package/dist-client/pages/data-sample/data-samples-page.js +249 -0
  74. package/dist-client/pages/data-sample/data-samples-page.js.map +1 -0
  75. package/dist-client/pages/data-sensor/data-sensor-list-page.js +28 -6
  76. package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +1 -1
  77. package/dist-client/pages/data-set/data-item-list.js +14 -8
  78. package/dist-client/pages/data-set/data-item-list.js.map +1 -1
  79. package/dist-client/pages/data-set/data-set-list-page.js +3 -10
  80. package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
  81. package/dist-client/pages/data-summary/data-summary-list-page.js +12 -21
  82. package/dist-client/pages/data-summary/data-summary-list-page.js.map +1 -1
  83. package/dist-client/route.js +8 -2
  84. package/dist-client/route.js.map +1 -1
  85. package/dist-client/tsconfig.tsbuildinfo +1 -1
  86. package/dist-server/activities/activity-data-collect.js.map +1 -1
  87. package/dist-server/activities/activity-data-review.js.map +1 -1
  88. package/dist-server/activities/activity-ooc-review.js +3 -2
  89. package/dist-server/activities/activity-ooc-review.js.map +1 -1
  90. package/dist-server/controllers/create-data-sample.js +27 -29
  91. package/dist-server/controllers/create-data-sample.js.map +1 -1
  92. package/dist-server/controllers/{generate-data-summary.js → finalize-data-collection.js} +10 -30
  93. package/dist-server/controllers/finalize-data-collection.js.map +1 -0
  94. package/dist-server/controllers/issue-collect-data.js +55 -0
  95. package/dist-server/controllers/issue-collect-data.js.map +1 -0
  96. package/dist-server/controllers/query-data-summary-by-period.js +4 -9
  97. package/dist-server/controllers/query-data-summary-by-period.js.map +1 -1
  98. package/dist-server/engine/index.js +4 -0
  99. package/dist-server/engine/index.js.map +1 -0
  100. package/dist-server/engine/task/create-data-sample.js +80 -0
  101. package/dist-server/engine/task/create-data-sample.js.map +1 -0
  102. package/dist-server/engine/task/index.js +5 -0
  103. package/dist-server/engine/task/index.js.map +1 -0
  104. package/dist-server/engine/task/issue-collect-data.js +40 -0
  105. package/dist-server/engine/task/issue-collect-data.js.map +1 -0
  106. package/dist-server/index.js +1 -0
  107. package/dist-server/index.js.map +1 -1
  108. package/dist-server/routes.js +36 -65
  109. package/dist-server/routes.js.map +1 -1
  110. package/dist-server/service/data-ooc/data-ooc-query.js +32 -0
  111. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -1
  112. package/dist-server/service/data-ooc/data-ooc-subscription.js +4 -4
  113. package/dist-server/service/data-ooc/data-ooc-subscription.js.map +1 -1
  114. package/dist-server/service/data-ooc/data-ooc.js +44 -37
  115. package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
  116. package/dist-server/service/data-sample/data-sample-query.js +24 -0
  117. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  118. package/dist-server/service/data-sample/data-sample.js +30 -31
  119. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  120. package/dist-server/service/data-sensor/data-sensor-query.js +16 -1
  121. package/dist-server/service/data-sensor/data-sensor-query.js.map +1 -1
  122. package/dist-server/service/data-sensor/data-sensor-type.js +8 -0
  123. package/dist-server/service/data-sensor/data-sensor-type.js.map +1 -1
  124. package/dist-server/service/data-sensor/data-sensor.js +15 -1
  125. package/dist-server/service/data-sensor/data-sensor.js.map +1 -1
  126. package/dist-server/service/data-set/data-item-type.js +17 -2
  127. package/dist-server/service/data-set/data-item-type.js.map +1 -1
  128. package/dist-server/service/data-set/data-set-mutation.js +2 -2
  129. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  130. package/dist-server/service/data-set/data-set-query.js +2 -2
  131. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  132. package/dist-server/service/data-summary/data-summary-mutation.js +34 -5
  133. package/dist-server/service/data-summary/data-summary-mutation.js.map +1 -1
  134. package/dist-server/service/data-summary/data-summary.js +8 -8
  135. package/dist-server/service/data-summary/data-summary.js.map +1 -1
  136. package/dist-server/tsconfig.tsbuildinfo +1 -1
  137. package/helps/config/dataArchive.md +21 -0
  138. package/helps/config/dataReport.md +34 -0
  139. package/helps/dataset/task/create-data-sample.ja.md +28 -0
  140. package/helps/dataset/task/create-data-sample.ko.md +28 -0
  141. package/helps/dataset/task/create-data-sample.md +28 -0
  142. package/helps/dataset/task/create-data-sample.ms.md +30 -0
  143. package/helps/dataset/task/create-data-sample.zh.md +28 -0
  144. package/helps/dataset/task/issue-collect-data.ja.md +35 -0
  145. package/helps/dataset/task/issue-collect-data.ko.md +32 -0
  146. package/helps/dataset/task/issue-collect-data.md +32 -0
  147. package/helps/dataset/task/issue-collect-data.ms.md +34 -0
  148. package/helps/dataset/task/issue-collect-data.zh.md +32 -0
  149. package/helps/dataset/ui/data-item-list.ko.md +17 -2
  150. package/package.json +14 -11
  151. package/server/activities/activity-data-collect.ts +3 -11
  152. package/server/activities/activity-data-review.ts +1 -5
  153. package/server/activities/activity-ooc-review.ts +6 -16
  154. package/server/controllers/create-data-sample.ts +31 -38
  155. package/server/controllers/{generate-data-summary.ts → finalize-data-collection.ts} +7 -39
  156. package/server/controllers/issue-collect-data.ts +61 -0
  157. package/server/controllers/query-data-summary-by-period.ts +5 -18
  158. package/server/engine/index.ts +1 -0
  159. package/server/engine/task/create-data-sample.ts +92 -0
  160. package/server/engine/task/index.ts +2 -0
  161. package/server/engine/task/issue-collect-data.ts +45 -0
  162. package/server/index.ts +1 -0
  163. package/server/routes.ts +47 -76
  164. package/server/service/data-ooc/data-ooc-query.ts +17 -0
  165. package/server/service/data-ooc/data-ooc-subscription.ts +7 -7
  166. package/server/service/data-ooc/data-ooc.ts +39 -51
  167. package/server/service/data-sample/data-sample-query.ts +17 -17
  168. package/server/service/data-sample/data-sample.ts +29 -52
  169. package/server/service/data-sensor/data-sensor-query.ts +13 -1
  170. package/server/service/data-sensor/data-sensor-type.ts +6 -0
  171. package/server/service/data-sensor/data-sensor.ts +13 -11
  172. package/server/service/data-set/data-item-type.ts +19 -10
  173. package/server/service/data-set/data-set-mutation.ts +9 -31
  174. package/server/service/data-set/data-set-query.ts +7 -7
  175. package/server/service/data-summary/data-summary-mutation.ts +24 -7
  176. package/server/service/data-summary/data-summary.ts +10 -23
  177. package/things-factory.config.js +10 -2
  178. package/translations/en.json +17 -3
  179. package/translations/ja.json +14 -2
  180. package/translations/ko.json +16 -2
  181. package/translations/ms.json +13 -1
  182. package/translations/zh.json +14 -2
  183. package/dist-client/pages/data-ooc/data-ooc-view-page.js.map +0 -1
  184. package/dist-client/pages/data-sample/data-sample-view-page.js.map +0 -1
  185. package/dist-server/controllers/generate-data-summary.js.map +0 -1
  186. /package/dist-client/pages/data-ooc/{data-ooc-view-page.d.ts → data-ooc-page.d.ts} +0 -0
  187. /package/dist-client/pages/data-sample/{data-sample-view-page.d.ts → data-sample-page.d.ts} +0 -0
@@ -1,14 +1,17 @@
1
1
  {
2
2
  "button.corrected": "조치완료",
3
+ "button.print": "인쇄",
3
4
  "button.request-archive": "자료보관 신규 요청",
4
5
  "button.reviewed": "검토완료",
5
6
  "error.dataset not found": "주어진 이름의({dataSetName}) dataSet을 찾을 수 없습니다",
6
7
  "error.summary not supported": "주어진 dataSet({dataSetName})은 {period}의 레포트가 지원되지 않습니다",
8
+ "field.agg-function": "집계함수",
7
9
  "field.appliance": "어플라이언스",
8
10
  "field.assignees": "할당자 목록",
9
11
  "field.collected-at": "수집일시",
10
12
  "field.corrected-at": "조치 시간",
11
13
  "field.corrective-action": "조치 활동",
14
+ "field.corrective-instruction": "조치 지시",
12
15
  "field.corrector": "조치자",
13
16
  "field.count": "건수",
14
17
  "field.count-ooc": "관리한계이탈 건수",
@@ -24,11 +27,14 @@
24
27
  "field.data-sample": "데이타 샘플",
25
28
  "field.data-set": "데이타셋",
26
29
  "field.date": "일자",
30
+ "field.decoder": "디코더",
31
+ "field.decoder-scenario": "디코더 시나리오",
27
32
  "field.device-id": "디바이스 아이디",
28
33
  "field.download-url": "다운로드 주소",
29
34
  "field.entry-role": "입력담당 역할",
30
35
  "field.entry-type": "입력용 화면종류",
31
36
  "field.entry-view": "입력용 화면",
37
+ "field.finalizing-function": "마감함수",
32
38
  "field.hidden": "숨기기",
33
39
  "field.item": "항목",
34
40
  "field.key": "키",
@@ -64,7 +70,6 @@
64
70
  "field.role": "역할",
65
71
  "field.serial-no": "시리얼번호",
66
72
  "field.spec": "명세",
67
- "field.stat-function": "통계함수",
68
73
  "field.status": "상태",
69
74
  "field.subgroup": "서브그룹명",
70
75
  "field.summary": "서머리",
@@ -82,22 +87,28 @@
82
87
  "label.corrective action": "수정 조치",
83
88
  "label.corrective instruction": "수정 지시",
84
89
  "label.critical-limits": "허용 한계범위",
90
+ "label.data-set": "데이타셋",
85
91
  "label.data-set-type": "유형",
92
+ "label.datasample review timeline": "데이타샘플 리뷰 타임라인",
86
93
  "label.end-date": "종료일",
87
94
  "label.group-by data-keys": "각 데이터 키별로 그룹화",
88
95
  "label.maximum value": "최대값",
89
96
  "label.minimum value": "최소값",
97
+ "label.ooc resolve timeline": "OOC 조치 타임라인",
98
+ "label.ooc review timeline": "OOC 검토 타임라인",
90
99
  "label.pass-limits": "통과 허용범위",
91
100
  "label.period-12-months": "최근 12개월",
92
101
  "label.period-30-days": "최근 30일",
93
102
  "label.period-this-month": "이번달",
94
103
  "label.period-this-year": "올해",
95
104
  "label.period-today": "오늘",
105
+ "label.raw-data": "원시 데이타",
96
106
  "label.start-date": "시작일",
97
107
  "label.state-corrected": "조치완료",
98
108
  "label.state-issued": "발생",
99
109
  "label.state-reviewed": "검토완료",
100
110
  "label.target-limits": "관리 목표범위",
111
+ "label.timestamp": "타임스탬프",
101
112
  "text.automatically collected": "자동 수집",
102
113
  "text.corrective action placeholder": "시정 및 예방을 위한 조치 이행 사항을 입력해주세요",
103
114
  "text.corrective instruction placeholder": "시정 및 예방을 위한 조치 지시 사항을 입력해주세요",
@@ -138,10 +149,13 @@
138
149
  "title.edit duration": "주기 편집",
139
150
  "title.edit hashtag": "해시태그 편집",
140
151
  "title.edit json": "JSON 편집",
152
+ "title.lookup scenario": "시나리오 선택",
141
153
  "title.open data sample report page": "데이타 샘플 레포트 페이지 열기",
142
154
  "title.open data sample search page": "데이타 샘플 검색 페이지 열기",
143
155
  "title.open data sample view": "데이타 샘플 뷰페이지 열기",
144
156
  "title.open data summary view": "데이타 수집 마감 뷰페이지 열기",
145
157
  "title.ready": "준비 중",
146
- "title.view detail ooc data": "OOC 데이타 상세보기"
158
+ "title.view detail ooc data": "OOC 데이타 상세보기",
159
+ "title.Data Key Set Master": "데이타 키셋 관리",
160
+ "menu.Data Key Set Master": "데이타 키셋 관리"
147
161
  }
@@ -1,14 +1,17 @@
1
1
  {
2
2
  "button.corrected": "diperbetulkan",
3
+ "button.print": "cetak",
3
4
  "button.request-archive": "permintaan arkib",
4
5
  "button.reviewed": "disemak",
5
6
  "error.dataset not found": "Tidak dapat mencari dataSet dengan nama yang diberi({dataSetName})",
6
7
  "error.summary not supported": "DataSet yang diberi({dataSetName}) tidak menyokong laporan untuk {period}",
8
+ "field.agg-function": "fungsi agregasi",
7
9
  "field.appliance": "peralatan",
8
10
  "field.assignees": "penugasan",
9
11
  "field.collected-at": "dikumpulkan pada",
10
12
  "field.corrected-at": "diperbetulkan pada",
11
13
  "field.corrective-action": "tindakan pembetulan",
14
+ "field.corrective-instruction": "arahan pembetulan",
12
15
  "field.corrector": "pembetul",
13
16
  "field.count": "jumlah",
14
17
  "field.count-ooc": "jumlah ooc",
@@ -24,11 +27,14 @@
24
27
  "field.data-sample": "sampel data",
25
28
  "field.data-set": "set data",
26
29
  "field.date": "tarikh",
30
+ "field.decoder": "Pengekod",
31
+ "field.decoder-scenario": "Skenario Pengekod",
27
32
  "field.device-id": "id peranti",
28
33
  "field.download-url": "url muat turun",
29
34
  "field.entry-role": "peranan masukan",
30
35
  "field.entry-type": "jenis masukan",
31
36
  "field.entry-view": "paparan masukan",
37
+ "field.finalizing-function": "fungsi penyempurnaan",
32
38
  "field.hidden": "tersembunyi",
33
39
  "field.item": "item",
34
40
  "field.key": "kunci",
@@ -64,7 +70,6 @@
64
70
  "field.role": "peranan",
65
71
  "field.serial-no": "no. siri",
66
72
  "field.spec": "spesifikasi",
67
- "field.stat-function": "fungsi stat.",
68
73
  "field.status": "status",
69
74
  "field.subgroup": "Nama subkumpulan",
70
75
  "field.summary": "ringkasan",
@@ -82,22 +87,28 @@
82
87
  "label.corrective action": "tindakan pembetulan",
83
88
  "label.corrective instruction": "instruksi pembetulan",
84
89
  "label.critical-limits": "had kritikal",
90
+ "label.data-set": "set data",
85
91
  "label.data-set-type": "jenis",
92
+ "label.datasample review timeline": "garis masa ulasan sampel data",
86
93
  "label.end-date": "tarikh tamat",
87
94
  "label.group-by data-keys": "kumpulkan mengikut setiap data-keys",
88
95
  "label.maximum value": "nilai maksimum",
89
96
  "label.minimum value": "nilai minimum",
97
+ "label.ooc resolve timeline": "garis masa penyelesaian OOC",
98
+ "label.ooc review timeline": "garis masa ulasan OOC",
90
99
  "label.pass-limits": "had lulus",
91
100
  "label.period-12-months": "12 bulan",
92
101
  "label.period-30-days": "30 hari",
93
102
  "label.period-this-month": "bulan ini",
94
103
  "label.period-this-year": "tahun ini",
95
104
  "label.period-today": "hari ini",
105
+ "label.raw-data": "data mentah",
96
106
  "label.start-date": "tarikh mula",
97
107
  "label.state-corrected": "diperbetulkan",
98
108
  "label.state-issued": "dikeluarkan",
99
109
  "label.state-reviewed": "disemak",
100
110
  "label.target-limits": "had sasaran",
111
+ "label.timestamp": "Cap waktu",
101
112
  "text.automatically collected": "dikumpulkan secara automatik",
102
113
  "text.corrective action placeholder": "Sila masukkan butiran pelaksanaan tindakan pembetulan dan pencegahan",
103
114
  "text.corrective instruction placeholder": "Sila masukkan arahan tindakan pembetulan dan pencegahan",
@@ -139,6 +150,7 @@
139
150
  "title.edit duration": "edit tempoh",
140
151
  "title.edit hashtag": "edit hashtag",
141
152
  "title.edit json": "edit json",
153
+ "title.lookup scenario": "skenario carian",
142
154
  "title.open data sample report page": "buka laman laporan sampel data",
143
155
  "title.open data sample search page": "buka laman pencarian sampel data",
144
156
  "title.open data sample view": "buka paparan sampel data",
@@ -1,14 +1,17 @@
1
1
  {
2
2
  "button.corrected": "已处理",
3
+ "button.print": "打印",
3
4
  "button.request-archive": "新资料存档请求",
4
5
  "button.reviewed": "审核完成",
5
6
  "error.dataset not found": "无法找到给定名称的({dataSetName})数据集",
6
7
  "error.summary not supported": "给定的数据集({dataSetName})不支持{period}的报告",
8
+ "field.agg-function": "聚合函数",
7
9
  "field.appliance": "应用设备",
8
10
  "field.assignees": "分配者列表",
9
11
  "field.collected-at": "收集时间",
10
12
  "field.corrected-at": "处理时间",
11
- "field.corrective-action": "纠正活动",
13
+ "field.corrective-action": "纠正措施",
14
+ "field.corrective-instruction": "纠正指令",
12
15
  "field.corrector": "处理人",
13
16
  "field.count": "数量",
14
17
  "field.count-ooc": "管理限制偏离数量",
@@ -24,11 +27,14 @@
24
27
  "field.data-sample": "数据样本",
25
28
  "field.data-set": "数据集",
26
29
  "field.date": "日期",
30
+ "field.decoder": "解码器",
31
+ "field.decoder-scenario": "解码器场景",
27
32
  "field.device-id": "设备ID",
28
33
  "field.download-url": "下载地址",
29
34
  "field.entry-role": "输入负责角色",
30
35
  "field.entry-type": "输入界面类型",
31
36
  "field.entry-view": "输入界面",
37
+ "field.finalizing-function": "完成函数",
32
38
  "field.hidden": "隐藏",
33
39
  "field.item": "项目",
34
40
  "field.key": "键",
@@ -64,7 +70,6 @@
64
70
  "field.role": "角色",
65
71
  "field.serial-no": "序列号",
66
72
  "field.spec": "规格",
67
- "field.stat-function": "统计函数",
68
73
  "field.status": "状态",
69
74
  "field.subgroup": "子组名称",
70
75
  "field.summary": "摘要",
@@ -82,22 +87,28 @@
82
87
  "label.corrective action": "纠正措施",
83
88
  "label.corrective instruction": "纠正指示",
84
89
  "label.critical-limits": "临界限制",
90
+ "label.data-set": "数据集",
85
91
  "label.data-set-type": "类型",
92
+ "label.datasample review timeline": "数据样本审查时间线",
86
93
  "label.end-date": "结束日期",
87
94
  "label.group-by data-keys": "按每个数据键分组",
88
95
  "label.maximum value": "最大值",
89
96
  "label.minimum value": "最小值",
97
+ "label.ooc resolve timeline": "OOC 解决时间线",
98
+ "label.ooc review timeline": "OOC 审查时间线",
90
99
  "label.pass-limits": "通过限制",
91
100
  "label.period-12-months": "最近12个月",
92
101
  "label.period-30-days": "最近30天",
93
102
  "label.period-this-month": "本月",
94
103
  "label.period-this-year": "今年",
95
104
  "label.period-today": "今天",
105
+ "label.raw-data": "原始数据",
96
106
  "label.start-date": "开始日期",
97
107
  "label.state-corrected": "已处理",
98
108
  "label.state-issued": "发生",
99
109
  "label.state-reviewed": "审核完成",
100
110
  "label.target-limits": "管理目标范围",
111
+ "label.timestamp": "时间戳",
101
112
  "text.automatically collected": "自动收集",
102
113
  "text.corrective action placeholder": "请输入实施纠正和预防措施的事项",
103
114
  "text.corrective instruction placeholder": "请输入纠正和预防措施的指示事项",
@@ -138,6 +149,7 @@
138
149
  "title.edit duration": "周期编辑",
139
150
  "title.edit hashtag": "哈希标签编辑",
140
151
  "title.edit json": "JSON编辑",
152
+ "title.lookup scenario": "查找场景",
141
153
  "title.open data sample report page": "打开数据样本报告页面",
142
154
  "title.open data sample search page": "打开数据样本搜索页面",
143
155
  "title.open data sample view": "打开数据样本视图页面",
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-ooc-view-page.js","sourceRoot":"","sources":["../../../client/pages/data-ooc/data-ooc-view-page.ts"],"names":[],"mappings":";AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAkB,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,oBAAoB,CAAA;AAGpB,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IAe9D,IAAI,OAAO;QACT,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;YACvC,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,EAAE;SACZ,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,4BAA4B,IAAI,CAAC,OAAO,oBAAoB,CAAA;IACzE,CAAC;IAED,OAAO,CAAC,OAA6B,IAAG,CAAC;IAEzC,WAAW,CAAC,OAAY,EAAE,SAAc,EAAE,MAAW;QACnD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf;;eAEG;YACH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;SACpC;aAAM;YACL,8BAA8B;SAC/B;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0DT;YACD,SAAS,EAAE;gBACT,EAAE;aACH;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAA;IACtC,CAAC;;AA1GM,sBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;KAQF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDAAc;AAb9B,eAAe;IAD3B,aAAa,CAAC,oBAAoB,CAAC;GACvB,eAAe,CA4G3B;SA5GY,eAAe","sourcesContent":["import gql from 'graphql-tag'\n\nimport { PropertyValues, html, css } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { PageView } from '@operato/shell'\nimport { i18next, localize } from '@operato/i18n'\nimport { client } from '@operato/graphql'\n\nimport './data-ooc-view.js'\n\n@customElement('data-ooc-view-page')\nexport class DataOocViewPage extends localize(i18next)(PageView) {\n static styles = [\n css`\n :host {\n display: flex;\n }\n\n data-ooc-view {\n flex: 1;\n }\n `\n ]\n\n @property({ type: Object }) dataOoc?: any\n\n get context() {\n return {\n title: i18next.t('title.data-ooc view'),\n help: 'dataset/data-ooc',\n actions: []\n }\n }\n\n render() {\n return html` <data-ooc-view .dataOoc=${this.dataOoc}></data-ooc-view> `\n }\n\n updated(changes: PropertyValues<this>) {}\n\n pageUpdated(changes: any, lifecycle: any, before: any) {\n if (this.active) {\n /*\n * this page is activated\n */\n this.fetchOoc(lifecycle.resourceId)\n } else {\n /* this page is deactivated */\n }\n }\n\n async fetchOoc(id: string) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataOoc(id: $id) {\n id\n name\n description\n useCase\n dataSet {\n id\n name\n }\n key01\n key02\n key03\n key04\n key05\n partitionKeys\n dataItems {\n name\n description\n active\n tag\n group\n type\n unit\n options\n quota\n spec\n }\n data\n rawData\n judgment\n ooc\n oos\n state\n history\n workDate\n workShift\n correctiveInstruction\n correctiveAction\n reviewedAt\n reviewer {\n id\n name\n }\n correctedAt\n corrector {\n id\n name\n }\n updater {\n id\n name\n }\n updatedAt\n collectedAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.dataOoc = response.data.dataOoc\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-sample-view-page.js","sourceRoot":"","sources":["../../../client/pages/data-sample/data-sample-view-page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAkB,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,uBAAuB,CAAA;AAGvB,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IAejE,IAAI,OAAO;QACT,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;YAC1C,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,EAAE;SACZ,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,oCAAoC,IAAI,CAAC,YAAY,uBAAuB,CAAA;IACzF,CAAC;IAED,OAAO,CAAC,OAA6B,IAAG,CAAC;IAEzC,WAAW,CAAC,OAAY,EAAE,SAAc,EAAE,MAAW;QACnD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf;;eAEG;YACH,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,UAAU,CAAA;SACzC;aAAM;YACL,8BAA8B;SAC/B;IACH,CAAC;;AArCM,yBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;KAQF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;wDAAmB;AAbnC,kBAAkB;IAD9B,aAAa,CAAC,uBAAuB,CAAC;GAC1B,kBAAkB,CAuC9B;SAvCY,kBAAkB","sourcesContent":["import { PropertyValues, html, css } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { PageView } from '@operato/shell'\nimport { i18next, localize } from '@operato/i18n'\n\nimport './data-sample-view.js'\n\n@customElement('data-sample-view-page')\nexport class DataSampleViewPage extends localize(i18next)(PageView) {\n static styles = [\n css`\n :host {\n display: flex;\n }\n\n data-sample-view {\n flex: 1;\n }\n `\n ]\n\n @property({ type: Object }) dataSampleId?: any\n\n get context() {\n return {\n title: i18next.t('title.data-sample view'),\n help: 'dataset/data-sample',\n actions: []\n }\n }\n\n render() {\n return html` <data-sample-view .dataSampleId=${this.dataSampleId}></data-sample-view> `\n }\n\n updated(changes: PropertyValues<this>) {}\n\n pageUpdated(changes: any, lifecycle: any, before: any) {\n if (this.active) {\n /*\n * this page is activated\n */\n this.dataSampleId = lifecycle.resourceId\n } else {\n /* this page is deactivated */\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-data-summary.js","sourceRoot":"","sources":["../../server/controllers/generate-data-summary.ts"],"names":[],"mappings":"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","sourcesContent":["const statistics = require('simple-statistics')\nconst deepClone = require('lodash/cloneDeep')\n\nimport moment from 'moment-timezone'\nimport { In } from 'typeorm'\n\nimport { Sorting, getQueryBuilderFromListParams } from '@things-factory/shell'\nimport { logger } from '@things-factory/env'\nimport {\n getDateRangeForWorkDate,\n getDateRangeForWorkShift,\n getLatestWorkDateAndShift,\n getSummaryScheduleForWorkDate,\n getSummaryScheduleForWorkShift\n} from '@things-factory/work-shift'\n\nimport { DataSample } from '../service/data-sample/data-sample'\nimport { DataSet, DataSetSummaryPeriodType } from '../service/data-set/data-set'\n\nimport { DataSummary } from '../service/data-summary/data-summary'\nimport { DataKeyItem } from '../service/data-key-set/data-key-item-type'\n\nimport { DataItem } from 'service'\n\nconst STAT_FUNCTION_MAP = {\n sum: 'sum',\n mean: 'mean',\n stddev: 'standardDeviation',\n variance: 'variance',\n min: 'min',\n max: 'max',\n range: 'range',\n median: 'median',\n mode: 'mode'\n}\n\nconst compareKeys = (dataKeyItems: DataKeyItem[], summary: Partial<DataSummary>, sample: DataSample): boolean => {\n return dataKeyItems.every((item, index) => {\n const prop = `key0${index + 1}`\n return sample[prop] === summary[prop]\n })\n}\n\nconst buildKeysFromSample = (dataKeyItems: DataKeyItem[], sample: DataSample): Partial<DataSummary> => {\n return dataKeyItems.reduce((sum, item, index) => {\n const prop = `key0${index + 1}`\n sum[prop] = sample[prop]\n\n return sum\n }, {} as Partial<DataSummary>)\n}\n\nconst buildKeySortingList = (dataKeyItems: DataKeyItem[]): Sorting[] => {\n return dataKeyItems.reduce((sum, item, index) => {\n const name = `key0${index + 1}`\n sum.push({ name, desc: true })\n return sum\n }, [])\n}\n\nconst calculateSummary = (dataItems: DataItem[], base: { [tag: string]: any[] }) => {\n return dataItems.reduce((summary, item) => {\n const tag = item.tag\n\n const data = base[tag]\n .flat(Infinity)\n .map(Number)\n .filter(item => !isNaN(item))\n\n if (data.length > 0) {\n try {\n switch (item.stat) {\n case 'range':\n summary[tag] = statistics.max(data) - statistics.min(data)\n break\n\n default:\n const functionName = STAT_FUNCTION_MAP[item.stat]\n summary[tag] = (functionName && statistics[functionName](data)) || ''\n }\n } catch (err) {\n summary[tag] = null\n console.error(err)\n }\n } else {\n summary[tag] = null\n }\n\n return summary\n }, {})\n}\n\nconst fillSummaryResult = (\n dataSummary: Partial<DataSummary>,\n dataItems: DataItem[],\n base: { [tag: string]: any[] }\n): void => {\n const summary = calculateSummary(dataItems, base)\n\n dataSummary.summary = summary\n dataItems.slice(0, 4).forEach((dataItem, idx) => {\n const value = Number(summary[dataItem.tag])\n dataSummary[`data0${idx + 1}`] = isNaN(value) ? null : value\n })\n}\n\nasync function getLatestTimesForPeriod(\n periodType: DataSetSummaryPeriodType,\n context: ResolverContext\n): Promise<{ date?: string; period?: string; range: Date[] }> {\n const { domain } = context.state\n const now = moment()\n\n if (periodType == DataSetSummaryPeriodType.Hour) {\n const begin = now.clone().subtract(1, 'hour').startOf('hour')\n const end = now.clone().startOf('hour')\n const date = begin.clone().tz(domain.timezone)\n\n return {\n date: date.format('YYYY-MM-DD'),\n period: date.format('HH'),\n range: [begin.toDate(), end.toDate()]\n }\n } else if (periodType == DataSetSummaryPeriodType.WorkShift) {\n const { workDate, workShift, shiftRange } = await getLatestWorkDateAndShift(domain, new Date())\n\n return { date: workDate, period: workShift, range: shiftRange }\n } else if (periodType == DataSetSummaryPeriodType.WorkDate) {\n const { workDate, dateRange } = await getLatestWorkDateAndShift(domain, new Date())\n\n return { date: workDate, range: dateRange }\n } else if (periodType == DataSetSummaryPeriodType.Day) {\n const begin = now.clone().subtract(1, 'day').startOf('day')\n const end = now.clone().startOf('day')\n const date = begin.clone().tz(domain.timezone)\n\n return {\n date: date.format('YYYY-MM-DD'),\n range: [begin.toDate(), end.toDate()]\n }\n }\n}\n\nasync function getTimesForPeriod(\n periodType: DataSetSummaryPeriodType,\n date: string,\n period: string,\n context: ResolverContext\n): Promise<{ date?: string; period?: string; range: Date[] }> {\n const { domain } = context.state\n\n if (periodType == DataSetSummaryPeriodType.Hour) {\n const theDate = moment.tz(`${date} ${period}:00:00`, 'YYYY-MM-DD HH:mm:ss', domain.timezone)\n\n const begin = theDate.clone().startOf('hour').toDate()\n const end = theDate.clone().add(+1, 'hour').startOf('hour').toDate()\n\n return {\n date,\n period,\n range: [begin, end]\n }\n } else if (periodType == DataSetSummaryPeriodType.WorkShift) {\n const range = await getDateRangeForWorkShift(domain, date, period)\n\n return { date, period, range }\n } else if (periodType == DataSetSummaryPeriodType.WorkDate) {\n const range = await getDateRangeForWorkDate(domain, date)\n\n return { date, range }\n } else if (periodType == DataSetSummaryPeriodType.Day) {\n const theDate = moment.tz(`${date} 00:00:00`, 'YYYY-MM-DD HH:mm:ss', domain.timezone)\n\n const begin = theDate.clone().startOf('day').toDate()\n const end = theDate.clone().add(1, 'day').startOf('day').toDate()\n\n return {\n date: moment(begin).tz(domain.timezone).format('YYYY-MM-DD'),\n range: [begin, end]\n }\n }\n}\n\nexport async function getDataSummaryCrontabSchedule(dataSet: DataSet, context: ResolverContext): Promise<string> {\n const { domain, user, tx } = context.state\n\n try {\n const { summaryPeriod } = dataSet\n\n if (summaryPeriod == DataSetSummaryPeriodType.Hour) {\n return '0 5 * * * *'\n } else if (summaryPeriod == DataSetSummaryPeriodType.WorkShift) {\n return await getSummaryScheduleForWorkShift(domain)\n } else if (summaryPeriod == DataSetSummaryPeriodType.WorkDate) {\n return await getSummaryScheduleForWorkDate(domain)\n } else if (summaryPeriod == DataSetSummaryPeriodType.Day) {\n return '0 10 0 * * *'\n }\n } catch (err) {\n console.error(err)\n }\n}\n\nexport async function generateLatestDataSummaries(dataSetId: string, context: ResolverContext): Promise<boolean> {\n const { domain, user, tx } = context.state\n\n try {\n const dataSet = await tx.getRepository(DataSet).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId },\n relations: ['dataKeySet']\n })\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n const dataItems = dataSet.dataItems.filter(item => item.stat)\n const initialSummary = dataItems.reduce((sum, item) => {\n sum[item.tag] = []\n return sum\n }, {})\n\n const { date, period, range } = await getLatestTimesForPeriod(dataSet.summaryPeriod, context)\n const limit = 100\n var page = 1\n\n var summaries: Partial<DataSummary>[] = []\n var summary: Partial<DataSummary>\n\n do {\n const samples = await getQueryBuilderFromListParams({\n repository: tx.getRepository(DataSample),\n domain,\n params: {\n filters: [{ name: 'dataSetId', operator: 'eq', value: dataSetId }],\n pagination: { page, limit },\n sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]\n },\n alias: 'datasample'\n })\n // The 'Between' operator includes the 'to' time in the filtering, making it unsuitable for the desired use case.\n // .andWhere({ collectedAt: Between.apply(null, range) })\n .andWhere('datasample.collectedAt >= :from', { from: range[0] })\n .andWhere('datasample.collectedAt < :to', { to: range[1] })\n .getMany()\n\n for (const sample of samples) {\n if (!summary || !compareKeys(dataKeyItems, summary, sample)) {\n if (summary) {\n fillSummaryResult(summary, dataItems, summary.summary)\n summaries.push(summary)\n }\n\n summary = {\n domain,\n name: dataSet.name,\n description: dataSet.description,\n date,\n period,\n dataSet,\n ...buildKeysFromSample(dataKeyItems, sample),\n count: 0,\n countOoc: 0,\n countOos: 0,\n summary: deepClone(initialSummary),\n updater: user,\n creator: user\n }\n }\n\n summary.count++\n sample.ooc && summary.countOoc++\n sample.oos && summary.countOos++\n\n dataItems.forEach(item => {\n summary.summary[item.tag].push(sample.data[item.tag])\n })\n }\n\n if (samples.length < limit) {\n if (summary) {\n fillSummaryResult(summary, dataItems, summary.summary)\n summaries.push(summary)\n }\n break\n }\n\n page++\n } while (true)\n\n tx.getRepository(DataSummary).upsert(summaries, [\n 'domain',\n 'dataSet',\n 'key01',\n 'key02',\n 'key03',\n 'key04',\n 'key05',\n 'date',\n 'period'\n ])\n\n return true\n } catch (e) {\n logger.error(e)\n }\n\n return false\n}\n\nexport async function generateDataSummary(\n dataSetId: string,\n date: string,\n period: string,\n context: ResolverContext\n): Promise<boolean> {\n const { domain, user, tx } = context.state\n\n try {\n const dataSet =\n dataSetId &&\n (await tx.getRepository(DataSet).findOne({\n where: { domain: In([domain.id, domain.parentId].filter(Boolean)), id: dataSetId },\n relations: ['dataKeySet']\n }))\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n const dataItems = dataSet.dataItems.filter(item => item.stat)\n const initialSummary = dataItems.reduce((sum, item) => {\n sum[item.tag] = []\n return sum\n }, {})\n\n const times = await getTimesForPeriod(dataSet.summaryPeriod, date, period, context)\n const range = times.range\n period = times.period\n\n const limit = 100\n var page = 1\n\n var summaries: Partial<DataSummary>[] = []\n var summary: Partial<DataSummary>\n\n do {\n const samples = await getQueryBuilderFromListParams({\n repository: tx.getRepository(DataSample),\n params: {\n filters: [{ name: 'dataSetId', operator: 'eq', value: dataSetId }],\n pagination: { page, limit },\n sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]\n },\n domain,\n alias: 'datasample'\n })\n // The 'Between' operator includes the 'to' time in the filtering, making it unsuitable for the desired use case.\n // .andWhere({ collectedAt: Between.apply(null, range) })\n .andWhere('datasample.collectedAt >= :from', { from: range[0] })\n .andWhere('datasample.collectedAt < :to', { to: range[1] })\n .getMany()\n\n for (const sample of samples) {\n if (!summary || !compareKeys(dataKeyItems, summary, sample)) {\n if (summary) {\n fillSummaryResult(summary, dataItems, summary.summary)\n summaries.push(summary)\n }\n\n summary = {\n domain,\n name: dataSet.name,\n description: dataSet.description,\n date,\n period,\n dataSet,\n ...buildKeysFromSample(dataKeyItems, sample),\n count: 0,\n countOoc: 0,\n countOos: 0,\n summary: deepClone(initialSummary),\n updater: user,\n creator: user\n }\n }\n\n summary.count++\n sample.ooc && summary.countOoc++\n sample.oos && summary.countOos++\n\n dataItems.forEach(item => {\n summary.summary[item.tag].push(sample.data[item.tag])\n })\n }\n\n if (samples.length < limit) {\n if (summary) {\n fillSummaryResult(summary, dataItems, summary.summary)\n summaries.push(summary)\n }\n break\n }\n\n page++\n } while (true)\n\n tx.getRepository(DataSummary).upsert(summaries, [\n 'domain',\n 'dataSet',\n 'key01',\n 'key02',\n 'key03',\n 'key04',\n 'key05',\n 'date',\n 'period'\n ])\n\n return true\n } catch (e) {\n logger.error(e)\n }\n\n return false\n}\n"]}