@things-factory/dataset 5.0.0-alpha.13 → 5.0.0-alpha.17

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 (75) hide show
  1. package/client/pages/data-entry-form.js +3 -1
  2. package/client/pages/data-ooc.js +450 -0
  3. package/client/pages/data-sample.js +39 -37
  4. package/client/pages/data-sensor.js +1 -1
  5. package/client/pages/data-set.js +61 -0
  6. package/client/route.js +4 -0
  7. package/dist-server/controllers/create-data-sample.js +102 -0
  8. package/dist-server/controllers/create-data-sample.js.map +1 -0
  9. package/dist-server/controllers/data-use-case.js +57 -0
  10. package/dist-server/controllers/data-use-case.js.map +1 -0
  11. package/dist-server/controllers/index.js +17 -0
  12. package/dist-server/controllers/index.js.map +1 -1
  13. package/dist-server/index.js +1 -0
  14. package/dist-server/index.js.map +1 -1
  15. package/dist-server/routes.js +5 -16
  16. package/dist-server/routes.js.map +1 -1
  17. package/dist-server/service/data-item/data-item-type.js +6 -6
  18. package/dist-server/service/data-item/data-item-type.js.map +1 -1
  19. package/dist-server/service/data-item/data-item.js +1 -1
  20. package/dist-server/service/data-item/data-item.js.map +1 -1
  21. package/dist-server/service/data-ooc/data-ooc-mutation.js +130 -0
  22. package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -0
  23. package/dist-server/service/data-ooc/data-ooc-query.js +115 -0
  24. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -0
  25. package/dist-server/service/data-ooc/data-ooc-subscription.js +65 -0
  26. package/dist-server/service/data-ooc/data-ooc-subscription.js.map +1 -0
  27. package/dist-server/service/data-ooc/data-ooc-type.js +99 -0
  28. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -0
  29. package/dist-server/service/data-ooc/data-ooc.js +218 -0
  30. package/dist-server/service/data-ooc/data-ooc.js.map +1 -0
  31. package/dist-server/service/data-ooc/index.js +10 -0
  32. package/dist-server/service/data-ooc/index.js.map +1 -0
  33. package/dist-server/service/data-sample/data-sample-mutation.js +2 -140
  34. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
  35. package/dist-server/service/data-sample/data-sample-type.js +5 -43
  36. package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
  37. package/dist-server/service/data-sample/data-sample.js +17 -3
  38. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  39. package/dist-server/service/data-set/data-set-mutation.js +1 -2
  40. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  41. package/dist-server/service/data-set/data-set-query.js +12 -0
  42. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  43. package/dist-server/service/data-set/data-set-type.js +19 -3
  44. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  45. package/dist-server/service/data-set/data-set.js +22 -10
  46. package/dist-server/service/data-set/data-set.js.map +1 -1
  47. package/dist-server/service/index.js +6 -2
  48. package/dist-server/service/index.js.map +1 -1
  49. package/package.json +14 -14
  50. package/server/controllers/create-data-sample.ts +139 -0
  51. package/server/controllers/data-use-case.ts +85 -0
  52. package/server/controllers/index.ts +1 -0
  53. package/server/index.ts +1 -0
  54. package/server/routes.ts +12 -23
  55. package/server/service/data-item/data-item-type.ts +3 -4
  56. package/server/service/data-item/data-item.ts +1 -1
  57. package/server/service/data-ooc/data-ooc-mutation.ts +117 -0
  58. package/server/service/data-ooc/data-ooc-query.ts +63 -0
  59. package/server/service/data-ooc/data-ooc-subscription.ts +51 -0
  60. package/server/service/data-ooc/data-ooc-type.ts +62 -0
  61. package/server/service/data-ooc/data-ooc.ts +188 -0
  62. package/server/service/data-ooc/index.ts +7 -0
  63. package/server/service/data-sample/data-sample-mutation.ts +3 -171
  64. package/server/service/data-sample/data-sample-type.ts +3 -31
  65. package/server/service/data-sample/data-sample.ts +19 -3
  66. package/server/service/data-set/data-set-mutation.ts +1 -4
  67. package/server/service/data-set/data-set-query.ts +8 -1
  68. package/server/service/data-set/data-set-type.ts +15 -4
  69. package/server/service/data-set/data-set.ts +17 -7
  70. package/server/service/index.ts +6 -2
  71. package/things-factory.config.js +4 -0
  72. package/translations/en.json +12 -2
  73. package/translations/ko.json +12 -2
  74. package/translations/ms.json +11 -1
  75. package/translations/zh.json +11 -1
@@ -1,186 +1,18 @@
1
1
  import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { In } from 'typeorm'
3
2
 
4
- import { DataItem } from '../data-item/data-item'
5
- import { DataSet } from '../data-set/data-set'
6
3
  import { DataSample } from './data-sample'
7
- import { DataSamplePatch, NewDataSample } from './data-sample-type'
4
+ import { NewDataSample } from './data-sample-type'
8
5
 
9
- import moment from 'moment'
6
+ import { createDataSample } from '../../controllers/create-data-sample'
10
7
 
11
8
  const debug = require('debug')('things-factory:dataset:data-sample:data-sample-mutation')
12
9
 
13
- // parse variable javascript string pattern
14
- const replaceVariables = (keys, dic) => {
15
- for (const k in keys) {
16
- const matches = keys[k].match(/\$\{\w*\}/g)
17
- matches &&
18
- matches.forEach(m => {
19
- keys[k] = keys[k].replace(m, dic[m.slice(2, -1)])
20
- })
21
- }
22
- return keys
23
- }
24
-
25
- // It is required UTC date for Partitioning File System like AWS S3 from Athena.
26
- // ex) %YYYY, %MM, %DD
27
- const formatDate = (keys, _moment) => {
28
- for (const k in keys) {
29
- const matches = keys[k].match(/%\w*/g)
30
- matches &&
31
- matches.forEach(m => {
32
- keys[k] = keys[k].replace(m, _moment.format(m.substr(1)))
33
- })
34
- }
35
- return keys
36
- }
37
-
38
10
  @Resolver(DataSample)
39
11
  export class DataSampleMutation {
40
12
  @Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
41
13
  @Directive('@transaction')
42
14
  @Mutation(returns => DataSample, { description: 'To create new data sample' })
43
15
  async createDataSample(@Arg('dataSample') dataSample: NewDataSample, @Ctx() context: any): Promise<DataSample> {
44
- const { domain, user, tx } = context.state
45
-
46
- const dataSet = await tx.getRepository(DataSet).findOne({ id: dataSample.dataSetId })
47
- const dataItems = await tx.getRepository(DataItem).find({
48
- where: {
49
- domain,
50
- dataSet
51
- },
52
- order: {
53
- sequence: 'DESC'
54
- }
55
- })
56
-
57
- const spec = dataItems.reduce((spec, dataItem) => {
58
- spec[dataItem.tag] = {
59
- ...dataItem.spec,
60
- name: dataItem.name /* do we need ? */
61
- }
62
-
63
- return spec
64
- }, {})
65
-
66
- // appending spec to data for reporting and optimizing AWS Athena search
67
- dataSample.data = { ...dataSample.data, _spec: JSON.stringify(spec) }
68
-
69
- var partitionKeys = {
70
- ...dataSet.partitionKeys
71
- }
72
-
73
- const collectedAt = dataSample.collectedAt || new Date()
74
- partitionKeys = formatDate(partitionKeys, moment(collectedAt).utc())
75
- partitionKeys = replaceVariables(partitionKeys, {
76
- domain: domain.subdomain,
77
- dataSetId: dataSample.dataSetId,
78
- ...dataSample.data
79
- })
80
-
81
- return await tx.getRepository(DataSample).save({
82
- name: dataSet.name,
83
- description: dataSet.description,
84
- ...dataSample,
85
- domain,
86
- partitionKeys,
87
- spec,
88
- collectedAt,
89
- creator: user,
90
- updater: user
91
- })
92
- }
93
-
94
- @Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
95
- @Directive('@transaction')
96
- @Mutation(returns => DataSample, { description: 'To modify data sample information' })
97
- async updateDataSample(
98
- @Arg('id') id: string,
99
- @Arg('patch') patch: DataSamplePatch,
100
- @Ctx() context: any
101
- ): Promise<DataSample> {
102
- const { domain, user, tx } = context.state
103
-
104
- const repository = tx.getRepository(DataSample)
105
- const dataSample = await repository.findOne({
106
- where: { domain, id }
107
- })
108
-
109
- return await repository.save({
110
- ...dataSample,
111
- ...patch,
112
- updater: user
113
- })
114
- }
115
-
116
- @Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
117
- @Directive('@transaction')
118
- @Mutation(returns => [DataSample], { description: "To modify multiple data samples' information" })
119
- async updateMultipleDataSample(
120
- @Arg('patches', type => [DataSamplePatch]) patches: DataSamplePatch[],
121
- @Ctx() context: any
122
- ): Promise<DataSample[]> {
123
- const { domain, user, tx } = context.state
124
-
125
- let results = []
126
- const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
127
- const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
128
- const dataSampleRepo = tx.getRepository(DataSample)
129
-
130
- if (_createRecords.length > 0) {
131
- for (let i = 0; i < _createRecords.length; i++) {
132
- const newRecord = _createRecords[i]
133
-
134
- const result = await dataSampleRepo.save({
135
- ...newRecord,
136
- domain,
137
- creator: user,
138
- updater: user
139
- })
140
-
141
- results.push({ ...result, cuFlag: '+' })
142
- }
143
- }
144
-
145
- if (_updateRecords.length > 0) {
146
- for (let i = 0; i < _updateRecords.length; i++) {
147
- const newRecord = _updateRecords[i]
148
- const dataSample = await dataSampleRepo.findOne(newRecord.id)
149
-
150
- const result = await dataSampleRepo.save({
151
- ...dataSample,
152
- ...newRecord,
153
- updater: user
154
- })
155
-
156
- results.push({ ...result, cuFlag: 'M' })
157
- }
158
- }
159
-
160
- return results
161
- }
162
-
163
- @Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
164
- @Directive('@transaction')
165
- @Mutation(returns => Boolean, { description: 'To delete a data sample' })
166
- async deleteDataSample(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
167
- const { domain, tx } = context.state
168
-
169
- await tx.getRepository(DataSample).delete({ domain, id })
170
- return true
171
- }
172
-
173
- @Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
174
- @Directive('@transaction')
175
- @Mutation(returns => Boolean, { description: 'To delete multiple data samples' })
176
- async deleteDataSamples(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {
177
- const { domain, tx } = context.state
178
-
179
- await tx.getRepository(DataSample).delete({
180
- domain,
181
- id: In(ids)
182
- })
183
-
184
- return true
16
+ return await createDataSample(dataSample, context)
185
17
  }
186
18
  }
@@ -1,6 +1,5 @@
1
1
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
-
3
- import { ScalarObject } from '@things-factory/shell'
2
+ import { ObjectRef, ScalarObject } from '@things-factory/shell'
4
3
 
5
4
  import { DataSample } from './data-sample'
6
5
 
@@ -12,8 +11,8 @@ export class NewDataSample {
12
11
  @Field({ nullable: true })
13
12
  description?: string
14
13
 
15
- @Field({ nullable: true })
16
- dataSetId?: string
14
+ @Field(type => ObjectRef, { nullable: true })
15
+ dataSet?: ObjectRef
17
16
 
18
17
  @Field(type => ScalarObject, { nullable: true })
19
18
  data?: ScalarObject
@@ -28,33 +27,6 @@ export class NewDataSample {
28
27
  collectedAt?: Date
29
28
  }
30
29
 
31
- @InputType()
32
- export class DataSamplePatch {
33
- @Field(type => ID, { nullable: true })
34
- id?: string
35
-
36
- @Field({ nullable: true })
37
- name?: string
38
-
39
- @Field({ nullable: true })
40
- description?: string
41
-
42
- @Field({ nullable: true })
43
- dataSetId?: string
44
-
45
- @Field(type => ScalarObject, { nullable: true })
46
- data?: ScalarObject
47
-
48
- @Field({ nullable: true })
49
- rawData?: string
50
-
51
- @Field({ nullable: true })
52
- source?: string
53
-
54
- @Field()
55
- cuFlag: string
56
- }
57
-
58
30
  @ObjectType()
59
31
  export class DataSampleList {
60
32
  @Field(type => [DataSample])
@@ -20,6 +20,11 @@ const ORMCONFIG = config.get('ormconfig', {})
20
20
  const DATABASE_TYPE = ORMCONFIG.type
21
21
  @Entity()
22
22
  @Index('ix_data_sample_0', (dataSample: DataSample) => [dataSample.domain, dataSample.dataSet], { unique: false })
23
+ @Index(
24
+ 'ix_data_sample_2',
25
+ (dataSample: DataSample) => [dataSample.domain, dataSample.dataSet, dataSample.collectedAt],
26
+ { unique: false }
27
+ )
23
28
  @ObjectType({ description: 'Entity for DataSample' })
24
29
  export class DataSample {
25
30
  @PrimaryGeneratedColumn('uuid')
@@ -53,12 +58,11 @@ export class DataSample {
53
58
  @Field(type => ScalarObject, { nullable: true })
54
59
  partitionKeys?: ScalarObject
55
60
 
56
- @ManyToOne(type => DataSet, dataSet => dataSet.dataSamples)
57
- @Field(type => DataSet, { nullable: true })
61
+ @ManyToOne(type => DataSet)
62
+ @Field(type => DataSet, { nullable: false })
58
63
  dataSet?: DataSet
59
64
 
60
65
  @RelationId((dataSample: DataSample) => dataSample.dataSet)
61
- @Field({ nullable: true })
62
66
  dataSetId?: string
63
67
 
64
68
  @Column('simple-json', { nullable: true })
@@ -87,6 +91,18 @@ export class DataSample {
87
91
  @Field({ nullable: true })
88
92
  source?: string
89
93
 
94
+ @Column({
95
+ nullable: true
96
+ })
97
+ @Field({ nullable: true })
98
+ ooc?: boolean
99
+
100
+ @Column({
101
+ nullable: true
102
+ })
103
+ @Field({ nullable: true })
104
+ oos?: boolean
105
+
90
106
  @Column({ nullable: true })
91
107
  @Field({ nullable: true })
92
108
  collectedAt?: Date
@@ -200,10 +200,7 @@ export class DataSetMutation {
200
200
 
201
201
  return copiedDataSets.map(dataSet => {
202
202
  dataSet.dataItems = copiedDataItems.filter(dataItem => dataItem.dataSet == dataSet.id)
203
- return {
204
- ...dataSet,
205
- state: 'UNLOADED' // DataSetInstanceStatus.UNLOADED
206
- }
203
+ return dataSet
207
204
  })
208
205
  }
209
206
  }
@@ -1,7 +1,7 @@
1
1
  import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
2
  import { getRepository } from 'typeorm'
3
3
 
4
- import { User } from '@things-factory/auth-base'
4
+ import { Role, User } from '@things-factory/auth-base'
5
5
  import { convertListParams, Domain, ListParam } from '@things-factory/shell'
6
6
 
7
7
  import { DataItem } from '../data-item/data-item'
@@ -38,6 +38,13 @@ export class DataSetQuery {
38
38
  })
39
39
  }
40
40
 
41
+ @FieldResolver(type => Role)
42
+ async supervisoryRole(@Root() dataSet: DataSet): Promise<Role> {
43
+ return await getRepository(Role).findOne({
44
+ id: dataSet.supervisoryRoleId
45
+ })
46
+ }
47
+
41
48
  @FieldResolver(type => Domain)
42
49
  async domain(@Root() dataSet: DataSet): Promise<Domain> {
43
50
  return await getRepository(Domain).findOne(dataSet.domainId)
@@ -1,6 +1,5 @@
1
1
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
-
3
- import { ScalarObject } from '@things-factory/shell'
2
+ import { ObjectRef, ScalarObject } from '@things-factory/shell'
4
3
 
5
4
  import { DataSet } from './data-set'
6
5
 
@@ -12,11 +11,17 @@ export class NewDataSet {
12
11
  @Field({ nullable: true })
13
12
  description?: string
14
13
 
14
+ @Field(type => ObjectRef, { nullable: true })
15
+ supervisoryRole?: ObjectRef
16
+
15
17
  @Field({ nullable: true })
16
18
  active?: boolean
17
19
 
18
20
  @Field({ nullable: true })
19
- type?: string
21
+ type?: 'manual' | 'automatic' | string
22
+
23
+ @Field({ nullable: true })
24
+ useCase?: string
20
25
 
21
26
  @Field(type => ScalarObject, { nullable: true })
22
27
  partitionKeys?: ScalarObject
@@ -39,11 +44,17 @@ export class DataSetPatch {
39
44
  @Field({ nullable: true })
40
45
  description?: string
41
46
 
47
+ @Field(type => ObjectRef, { nullable: true })
48
+ supervisoryRole?: ObjectRef
49
+
42
50
  @Field({ nullable: true })
43
51
  active?: boolean
44
52
 
45
53
  @Field({ nullable: true })
46
- type?: string
54
+ type?: 'manual' | 'automatic' | string
55
+
56
+ @Field({ nullable: true })
57
+ useCase?: string
47
58
 
48
59
  @Field(type => ScalarObject, { nullable: true })
49
60
  partitionKeys?: ScalarObject
@@ -11,11 +11,10 @@ import {
11
11
  UpdateDateColumn
12
12
  } from 'typeorm'
13
13
 
14
- import { User } from '@things-factory/auth-base'
14
+ import { Role, User } from '@things-factory/auth-base'
15
15
  import { Domain, ScalarObject } from '@things-factory/shell'
16
16
 
17
17
  import { DataItem } from '../data-item/data-item'
18
- import { DataSample } from '../data-sample/data-sample'
19
18
 
20
19
  @Entity()
21
20
  @Index('ix_data_set_0', (dataSet: DataSet) => [dataSet.domain, dataSet.name], { unique: true })
@@ -48,11 +47,26 @@ export class DataSet {
48
47
  @Field({ nullable: true })
49
48
  active?: boolean
50
49
 
50
+ @ManyToOne(type => Role, {
51
+ nullable: true
52
+ })
53
+ @Field(type => Role, { nullable: true })
54
+ supervisoryRole?: Role
55
+
56
+ @RelationId((dataSet: DataSet) => dataSet.supervisoryRole)
57
+ supervisoryRoleId?: string
58
+
59
+ @Column({
60
+ nullable: true
61
+ })
62
+ @Field({ nullable: true })
63
+ type?: 'manual' | 'automatic' | string
64
+
51
65
  @Column({
52
66
  nullable: true
53
67
  })
54
68
  @Field({ nullable: true })
55
- type?: string
69
+ useCase?: string
56
70
 
57
71
  @Column('simple-json', { nullable: true })
58
72
  @Field(type => ScalarObject, { nullable: true })
@@ -68,10 +82,6 @@ export class DataSet {
68
82
  @Field(type => [DataItem], { nullable: true })
69
83
  dataItems: DataItem[]
70
84
 
71
- @OneToMany(type => DataSample, dataSample => dataSample.dataSet)
72
- @Field(type => [DataSample], { nullable: true })
73
- dataSamples: DataSample[]
74
-
75
85
  @Column({
76
86
  nullable: true
77
87
  })
@@ -1,11 +1,13 @@
1
+ import { entities as DataItemEntities, resolvers as DataItemResolvers } from './data-item'
1
2
  /* IMPORT ENTITIES AND RESOLVERS */
2
- import { entities as DataSensorEntities, resolvers as DataSensorResolvers } from './data-sensor'
3
+ import { entities as DataOocEntities, resolvers as DataOocResolvers } from './data-ooc'
3
4
  import { entities as DataSampleEntities, resolvers as DataSampleResolvers } from './data-sample'
4
- import { entities as DataItemEntities, resolvers as DataItemResolvers } from './data-item'
5
+ import { entities as DataSensorEntities, resolvers as DataSensorResolvers } from './data-sensor'
5
6
  import { entities as DataSetEntities, resolvers as DataSetResolvers } from './data-set'
6
7
  import { entities as DataSpecEntities, resolvers as DataSpecResolvers } from './data-spec'
7
8
 
8
9
  /* EXPORT ENTITY TYPES */
10
+ export * from './data-ooc/data-ooc'
9
11
  export * from './data-sensor/data-sensor'
10
12
  export * from './data-sample/data-sample'
11
13
  export * from './data-item/data-item'
@@ -14,6 +16,7 @@ export * from './data-spec/data-spec'
14
16
 
15
17
  export const entities = [
16
18
  /* ENTITIES */
19
+ ...DataOocEntities,
17
20
  ...DataSensorEntities,
18
21
  ...DataSampleEntities,
19
22
  ...DataItemEntities,
@@ -24,6 +27,7 @@ export const entities = [
24
27
  export const schema = {
25
28
  resolverClasses: [
26
29
  /* RESOLVER CLASSES */
30
+ ...DataOocResolvers,
27
31
  ...DataSensorResolvers,
28
32
  ...DataSampleResolvers,
29
33
  ...DataItemResolvers,
@@ -15,6 +15,10 @@ export default {
15
15
  {
16
16
  tagname: 'data-sample-page',
17
17
  page: 'data-sample'
18
+ },
19
+ {
20
+ tagname: 'data-ooc-page',
21
+ page: 'data-ooc'
18
22
  }
19
23
  ],
20
24
  bootstrap
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "field.appliance": "appliance",
3
3
  "field.collected_at": "collected at",
4
+ "field.corrective-action": "corrective action",
5
+ "field.corrector": "corrector",
6
+ "field.corrected-at": "corrected at",
4
7
  "field.data": "data",
5
- "field.dataSet": "data set",
8
+ "field.data-sample": "data sample",
9
+ "field.data-set": "data set",
6
10
  "field.device-id": "device id",
7
11
  "field.netmask": "network mask",
12
+ "field.oos": "out of critical limit",
13
+ "field.ooc": "out of control limit",
8
14
  "field.options": "options",
9
15
  "field.partition-keys": "partition keys",
10
16
  "field.quota": "sampling #",
@@ -12,12 +18,16 @@
12
18
  "field.ref-by": "ref. by",
13
19
  "field.serial-no": "serial #",
14
20
  "field.spec": "spec",
21
+ "field.state": "state",
22
+ "field.supervisory-role": "supervisory role",
15
23
  "field.tag": "tag name",
16
24
  "field.unit": "unit",
25
+ "field.use-case": "use case",
17
26
  "text.data sample created successfully": "a data sample created successfully",
18
27
  "title.data-entry-form": "data entry form",
19
28
  "title.data-item list": "data item list",
29
+ "title.data-ooc list": "data OOC list",
20
30
  "title.data-sample list": "data sample list",
21
31
  "title.data-sensor list": "data sensor list",
22
32
  "title.data-set list": "data set list"
23
- }
33
+ }
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "field.appliance": "어플라이언스",
3
3
  "field.collected_at": "수집일시",
4
+ "field.corrective-action": "조치 활동",
5
+ "field.corrector": "조치자",
6
+ "field.corrected-at": "조치 시간",
4
7
  "field.data": "데이타",
5
- "field.dataSet": "데이타셋",
8
+ "field.data-sample": "데이타 샘플",
9
+ "field.data-set": "데이타셋",
6
10
  "field.device-id": "디바이스 아이디",
7
11
  "field.netmask": "네트워크마스크",
12
+ "field.oos": "허용한계 이탈여부",
13
+ "field.ooc": "관리한계 이탈여부",
8
14
  "field.options": "선택옵션",
9
15
  "field.partition-keys": "파티션 키",
10
16
  "field.quota": "샘플수",
@@ -12,12 +18,16 @@
12
18
  "field.ref-by": "참조아이템",
13
19
  "field.serial-no": "시리얼번호",
14
20
  "field.spec": "명세",
21
+ "field.state": "상태",
22
+ "field.supervisory-role": "관리자 역할",
15
23
  "field.tag": "태그이름",
16
24
  "field.unit": "단위",
25
+ "field.use-case": "사용 사례",
17
26
  "text.data sample created successfully": "데이타 샘플이 성공적으로 생성되었습니다",
18
27
  "title.data-entry-form": "데이타 입력",
19
28
  "title.data-item list": "데이타 아이템 조회",
29
+ "title.data-ooc list": "데이타 이탈점 조회",
20
30
  "title.data-sample list": "데이타 샘플 조회",
21
31
  "title.data-sensor list": "데이타 센서 조회",
22
32
  "title.data-set list": "데이타 셋 조회"
23
- }
33
+ }
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "field.appliance": "appliance",
3
3
  "field.collected_at": "collected at",
4
+ "field.corrective-action": "corrective action",
5
+ "field.corrector": "corrector",
6
+ "field.corrected-at": "corrected at",
4
7
  "field.data": "data",
5
- "field.dataSet": "data set",
8
+ "field.data-sample": "data sample",
9
+ "field.data-set": "data set",
6
10
  "field.device-id": "device id",
7
11
  "field.netmask": "network mask",
12
+ "field.oos": "out of critical limit",
13
+ "field.ooc": "out of control limit",
8
14
  "field.options": "options",
9
15
  "field.partition-keys": "partition keys",
10
16
  "field.quota": "sampling #",
@@ -12,11 +18,15 @@
12
18
  "field.ref-by": "ref. by",
13
19
  "field.serial-no": "serial #",
14
20
  "field.spec": "spec",
21
+ "field.state": "keadaan",
22
+ "field.supervisory-role": "supervisory role",
15
23
  "field.tag": "tag name",
16
24
  "field.unit": "unit",
25
+ "field.use-case": "use case",
17
26
  "text.data sample created successfully": "a data sample created successfully",
18
27
  "title.data-entry-form": "data entry form",
19
28
  "title.data-item list": "data item list",
29
+ "title.data-ooc list": "data OOC list",
20
30
  "title.data-sample list": "data sample list",
21
31
  "title.data-sensor list": "data sensor list",
22
32
  "title.data-set list": "data set list"
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "field.appliance": "appliance",
3
3
  "field.collected_at": "collected at",
4
+ "field.corrective-action": "corrective action",
5
+ "field.corrector": "corrector",
6
+ "field.corrected-at": "corrected at",
4
7
  "field.data": "data",
5
- "field.dataSet": "data set",
8
+ "field.data-sample": "data sample",
9
+ "field.data-set": "data set",
6
10
  "field.device-id": "device id",
7
11
  "field.netmask": "network mask",
12
+ "field.oos": "out of critical limit",
13
+ "field.ooc": "out of control limit",
8
14
  "field.options": "options",
9
15
  "field.partition-keys": "partition keys",
10
16
  "field.quota": "sampling #",
@@ -12,11 +18,15 @@
12
18
  "field.ref-by": "ref. by",
13
19
  "field.serial-no": "serial #",
14
20
  "field.spec": "spec",
21
+ "field.state": "状态",
22
+ "field.supervisory-role": "supervisory role",
15
23
  "field.tag": "tag name",
16
24
  "field.unit": "unit",
25
+ "field.use-case": "use case",
17
26
  "text.data sample created successfully": "a data sample created successfully",
18
27
  "title.data-entry-form": "data entry form",
19
28
  "title.data-item list": "data item list",
29
+ "title.data-ooc list": "data OOC list",
20
30
  "title.data-sample list": "data sample list",
21
31
  "title.data-sensor list": "data sensor list",
22
32
  "title.data-set list": "data set list"