@things-factory/dataset 8.0.77 → 8.0.85
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/dist-server/activities/activity-data-collect.js +8 -4
- package/dist-server/activities/activity-data-collect.js.map +1 -1
- package/dist-server/activities/activity-data-review.js +5 -2
- package/dist-server/activities/activity-data-review.js.map +1 -1
- package/dist-server/activities/activity-ooc-review.js +2 -0
- package/dist-server/activities/activity-ooc-review.js.map +1 -1
- package/dist-server/controllers/create-data-ooc.js +2 -1
- package/dist-server/controllers/create-data-ooc.js.map +1 -1
- package/dist-server/controllers/create-data-sample.js +2 -2
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/controllers/finalize-data-collection.js +6 -4
- package/dist-server/controllers/finalize-data-collection.js.map +1 -1
- package/dist-server/controllers/issue-data-collection-task.js +9 -5
- package/dist-server/controllers/issue-data-collection-task.js.map +1 -1
- package/dist-server/controllers/issue-ooc-resolve.js +11 -6
- package/dist-server/controllers/issue-ooc-resolve.js.map +1 -1
- package/dist-server/controllers/issue-ooc-review.js +9 -6
- package/dist-server/controllers/issue-ooc-review.js.map +1 -1
- package/dist-server/controllers/query-data-summary-by-period.js +3 -1
- package/dist-server/controllers/query-data-summary-by-period.js.map +1 -1
- package/dist-server/service/data-ooc/index.d.ts +1 -1
- package/dist-server/service/data-sample/data-sample.js +3 -0
- package/dist-server/service/data-sample/data-sample.js.map +1 -1
- package/dist-server/service/data-sample/index.d.ts +1 -1
- package/dist-server/service/data-set/index.d.ts +1 -1
- package/dist-server/service/index.d.ts +2 -2
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/server/activities/activity-data-collect.ts +9 -4
- package/server/activities/activity-data-review.ts +6 -2
- package/server/activities/activity-ooc-review.ts +3 -0
- package/server/controllers/create-data-ooc.ts +3 -1
- package/server/controllers/create-data-sample.ts +2 -2
- package/server/controllers/finalize-data-collection.ts +8 -4
- package/server/controllers/issue-data-collection-task.ts +11 -5
- package/server/controllers/issue-ooc-resolve.ts +12 -6
- package/server/controllers/issue-ooc-review.ts +10 -6
- package/server/controllers/query-data-summary-by-period.ts +4 -1
- package/server/service/data-sample/data-sample.ts +3 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/dataset",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.85",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "dist-client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
"@things-factory/scheduler-client": "^8.0.75",
|
|
51
51
|
"@things-factory/shell": "^8.0.64",
|
|
52
52
|
"@things-factory/work-shift": "^8.0.75",
|
|
53
|
-
"@things-factory/worklist": "^8.0.
|
|
53
|
+
"@things-factory/worklist": "^8.0.84",
|
|
54
54
|
"cron-parser": "^4.3.0",
|
|
55
55
|
"moment-timezone": "^0.5.45",
|
|
56
56
|
"simple-statistics": "^7.8.3",
|
|
57
57
|
"statistics": "^3.3.0"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "c4dd3885e20d29c6e5d25c8f495e151ff71e3433"
|
|
60
60
|
}
|
|
@@ -19,10 +19,15 @@ async function callback(
|
|
|
19
19
|
const { input, output, state } = activityInstance
|
|
20
20
|
|
|
21
21
|
if (state == ActivityInstanceStatus.Ended) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
var activities = await tx.getRepository(Activity).find({
|
|
23
|
+
where: {
|
|
24
|
+
domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },
|
|
25
|
+
name: 'Collect Data'
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
// Prioritize the activity in the current domain
|
|
30
|
+
const activity = activities.find(a => a.domainId === domain.id) || activities.find(a => a.domainId === domain.parentId)
|
|
26
31
|
|
|
27
32
|
/* collect-data 액티비티는 한명의 assignee(thread)만 수행하는 multiple: false 액티비티이다. 따라서, output에는 assignee key가 없이, 순수한 data만 들어있다. */
|
|
28
33
|
const data = output
|
|
@@ -35,7 +35,8 @@ async function callback(
|
|
|
35
35
|
|
|
36
36
|
if (judgment == 'abnormal') {
|
|
37
37
|
/* Review 결과가 Ooc 조치가 필요하다고 하면, DataOoc를 생성하고, DataOocResolve를 이슈한다. */
|
|
38
|
-
|
|
38
|
+
const dataSet = dataSample.dataSet
|
|
39
|
+
var ooc = await createDataOoc(dataSample, dataSet, context)
|
|
39
40
|
|
|
40
41
|
ooc = await tx.getRepository(DataOoc).save({
|
|
41
42
|
...ooc,
|
|
@@ -46,7 +47,10 @@ async function callback(
|
|
|
46
47
|
state: DataOocStatus.REVIEWED
|
|
47
48
|
})
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
// save() 후 dataSet relation이 손실되므로 다시 설정
|
|
51
|
+
ooc.dataSet = dataSet
|
|
52
|
+
|
|
53
|
+
await issueOocResolve(ooc, dataSet, instruction, context)
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
56
|
}
|
|
@@ -33,7 +33,7 @@ export async function createDataOoc(
|
|
|
33
33
|
})
|
|
34
34
|
|
|
35
35
|
if (dataSet.outlierScenarioId) {
|
|
36
|
-
|
|
36
|
+
var scenarios = await tx.getRepository(Scenario).find({
|
|
37
37
|
where: {
|
|
38
38
|
domain: domain.parentId ? { id: In([domain.id, domain.parentId]) } : { id: domain.id },
|
|
39
39
|
id: dataSet.outlierScenarioId
|
|
@@ -41,6 +41,8 @@ export async function createDataOoc(
|
|
|
41
41
|
relations: ['domain', 'steps', 'updater']
|
|
42
42
|
})
|
|
43
43
|
|
|
44
|
+
const scenario = scenarios.find(s => s.domain.id === domain.id) || scenarios.find(s => s.domain.id === domain.parentId)
|
|
45
|
+
|
|
44
46
|
if (scenario) {
|
|
45
47
|
scenario.start({
|
|
46
48
|
instanceName: scenario.name + ':' + dataSet.name + ':' + dataSample.id,
|
|
@@ -291,8 +291,8 @@ export async function createDataSample(newDataSample: NewDataSample, context: Re
|
|
|
291
291
|
approvalLine: dataSet.reviewApprovalLine
|
|
292
292
|
}
|
|
293
293
|
|
|
294
|
-
|
|
295
|
-
await getRepository(DataSample, tx).
|
|
294
|
+
const reviewActivityInstance = await issue(activityInstance as any, context)
|
|
295
|
+
await getRepository(DataSample, tx).update({ id: dataSample.id }, { reviewActivityInstance })
|
|
296
296
|
|
|
297
297
|
try {
|
|
298
298
|
pubsub.publish('notification', {
|
|
@@ -205,11 +205,13 @@ export async function finalizeLatestDataCollection(dataSetId: string, context: R
|
|
|
205
205
|
const { domain, user, tx } = context.state
|
|
206
206
|
|
|
207
207
|
try {
|
|
208
|
-
|
|
208
|
+
var dataSets = await tx.getRepository(DataSet).find({
|
|
209
209
|
where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId },
|
|
210
210
|
relations: ['dataKeySet']
|
|
211
211
|
})
|
|
212
212
|
|
|
213
|
+
const dataSet = dataSets.find(ds => ds.domainId === domain.id) || dataSets.find(ds => ds.domainId === domain.parentId)
|
|
214
|
+
|
|
213
215
|
const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []
|
|
214
216
|
const dataItems = dataSet.dataItems.filter(item => item.stat)
|
|
215
217
|
const initialSummary = dataItems.reduce((sum, item) => {
|
|
@@ -314,14 +316,16 @@ export async function finalizeDataCollection(
|
|
|
314
316
|
const { domain, user, tx } = context.state
|
|
315
317
|
|
|
316
318
|
try {
|
|
317
|
-
|
|
319
|
+
var dataSets =
|
|
318
320
|
dataSetId &&
|
|
319
|
-
(await tx.getRepository(DataSet).
|
|
321
|
+
(await tx.getRepository(DataSet).find({
|
|
320
322
|
where: { domain: In([domain.id, domain.parentId].filter(Boolean)), id: dataSetId },
|
|
321
323
|
relations: ['dataKeySet']
|
|
322
324
|
}))
|
|
323
325
|
|
|
324
|
-
const
|
|
326
|
+
const dataSet = dataSets?.find(ds => ds.domainId === domain.id) || dataSets?.find(ds => ds.domainId === domain.parentId)
|
|
327
|
+
|
|
328
|
+
const dataKeyItems = dataSet?.dataKeySet?.dataKeyItems || []
|
|
325
329
|
const dataItems = dataSet.dataItems.filter(item => item.stat)
|
|
326
330
|
const initialSummary = dataItems.reduce((sum, item) => {
|
|
327
331
|
sum[item.tag] = []
|
|
@@ -17,7 +17,7 @@ export async function issueDataCollectionTask(
|
|
|
17
17
|
throw new Error(`domain(${domainId}) not found`)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
var dataSets = await tx.getRepository(DataSet).find({
|
|
21
21
|
where: {
|
|
22
22
|
domain: {
|
|
23
23
|
id: In([domain.id, domain.parentId].filter(Boolean))
|
|
@@ -27,10 +27,16 @@ export async function issueDataCollectionTask(
|
|
|
27
27
|
relations: ['entryRole']
|
|
28
28
|
})
|
|
29
29
|
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
const dataSet = dataSets.find(ds => ds.domainId === domain.id) || dataSets.find(ds => ds.domainId === domain.parentId)
|
|
31
|
+
|
|
32
|
+
var activities = await tx.getRepository(Activity).find({
|
|
33
|
+
where: {
|
|
34
|
+
domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },
|
|
35
|
+
name: 'Collect Data'
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
const activity = activities.find(a => a.domainId === domain.id) || activities.find(a => a.domainId === domain.parentId)
|
|
34
40
|
|
|
35
41
|
if (activity) {
|
|
36
42
|
const { entryRole, timeLimit } = dataSet
|
|
@@ -15,10 +15,16 @@ export async function issueOocResolve(
|
|
|
15
15
|
const { domain, user, tx } = context.state
|
|
16
16
|
const { resolverRoleId, outlierApprovalLine } = dataSet
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
var activities = await tx.getRepository(Activity).find({
|
|
19
|
+
where: {
|
|
20
|
+
domain: domain.parentId ? In([domain.id, domain.parentId]) : { id: domain.id },
|
|
21
|
+
name: 'OOC Resolve'
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
// Prioritize the activity in the current domain
|
|
26
|
+
// Assumes that if both exist, the one in my domain is the intended customization or override
|
|
27
|
+
var activity = activities.find(a => a.domainId === domain.id) || activities.find(a => a.domainId === domain.parentId)
|
|
22
28
|
|
|
23
29
|
if (activity) {
|
|
24
30
|
const assigneeRole =
|
|
@@ -45,8 +51,8 @@ export async function issueOocResolve(
|
|
|
45
51
|
approvalLine: outlierApprovalLine
|
|
46
52
|
}
|
|
47
53
|
|
|
48
|
-
|
|
49
|
-
await tx.getRepository(DataOoc).
|
|
54
|
+
const resolveActivityInstance = await issue(activityInstance, context)
|
|
55
|
+
await tx.getRepository(DataOoc).update({ id: dataOoc.id }, { resolveActivityInstance })
|
|
50
56
|
} else {
|
|
51
57
|
console.error(
|
|
52
58
|
`Assignees are not set. So, Data OOC Resolve task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`
|
|
@@ -11,10 +11,14 @@ export async function issueOocReview(dataOoc: DataOoc, dataSet: DataSet, context
|
|
|
11
11
|
const { domain, tx } = context.state
|
|
12
12
|
const { collectedAt } = dataOoc
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
var activities = await tx.getRepository(Activity).find({
|
|
15
|
+
where: {
|
|
16
|
+
domain: domain.parentId ? In([domain.id, domain.parentId]) : { id: domain.id },
|
|
17
|
+
name: 'OOC Review'
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
var activity = activities.find(a => a.domainId === domain.id) || activities.find(a => a.domainId === domain.parentId)
|
|
18
22
|
|
|
19
23
|
if (activity) {
|
|
20
24
|
const assigneeRole =
|
|
@@ -39,8 +43,8 @@ export async function issueOocReview(dataOoc: DataOoc, dataSet: DataSet, context
|
|
|
39
43
|
approvalLine: []
|
|
40
44
|
}
|
|
41
45
|
|
|
42
|
-
|
|
43
|
-
await tx.getRepository(DataOoc).
|
|
46
|
+
const reviewActivityInstance = await issue(activityInstance as any, context)
|
|
47
|
+
await tx.getRepository(DataOoc).update({ id: dataOoc.id }, { reviewActivityInstance })
|
|
44
48
|
} else {
|
|
45
49
|
console.error(
|
|
46
50
|
`Assignees are not set. So Data OOC Review task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`
|
|
@@ -27,11 +27,14 @@ export async function queryDataSummaryByPeriod(
|
|
|
27
27
|
const { domain, user, tx } = context.state
|
|
28
28
|
const { t } = context
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
var dataSets = await getRepository(DataSet).find({
|
|
31
31
|
where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name: dataSetName },
|
|
32
32
|
relations: ['dataKeySet']
|
|
33
33
|
})
|
|
34
34
|
|
|
35
|
+
// Prioritize the dataset in the current domain
|
|
36
|
+
const dataSet = dataSets.find(ds => ds.domainId === domain.id) || dataSets.find(ds => ds.domainId === domain.parentId)
|
|
37
|
+
|
|
35
38
|
if (!dataSet) {
|
|
36
39
|
throw new Error(t('error.dataset not found', { dataSetName }))
|
|
37
40
|
}
|
|
@@ -42,6 +42,9 @@ const DATABASE_TYPE = ORMCONFIG.type
|
|
|
42
42
|
(dataSample: DataSample) => [dataSample.domain, dataSample.dataSet, dataSample.collectedAt],
|
|
43
43
|
{ unique: false }
|
|
44
44
|
)
|
|
45
|
+
@Index('ix_data_sample_2', (dataSample: DataSample) => [dataSample.domain, dataSample.name, dataSample.workDate], {
|
|
46
|
+
unique: false
|
|
47
|
+
})
|
|
45
48
|
@ObjectType({ description: 'Entity for DataSample' })
|
|
46
49
|
export class DataSample {
|
|
47
50
|
@PrimaryGeneratedColumn('uuid')
|