@things-factory/kpi 9.1.19 → 10.0.0-beta.2

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 (140) hide show
  1. package/client/pages/kpi/kpi-list-page.ts +339 -525
  2. package/client/pages/kpi/kpi-tree-page.ts +135 -207
  3. package/client/pages/kpi-metric/kpi-metric-list-page.ts +146 -226
  4. package/client/pages/kpi-metric-value/kpi-metric-value-editor-page.ts +187 -295
  5. package/client/pages/kpi-metric-value/kpi-metric-value-list-page.ts +123 -194
  6. package/client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.ts +57 -91
  7. package/client/pages/kpi-statistic/kpi-statistic-editor-page.ts +180 -278
  8. package/client/pages/kpi-statistic/kpi-statistic-list-page.ts +186 -286
  9. package/client/pages/kpi-value/kpi-value-editor-page.ts +189 -292
  10. package/client/pages/kpi-value/kpi-value-list-page.ts +170 -264
  11. package/dist-client/pages/kpi/kpi-list-page.d.ts +0 -6
  12. package/dist-client/pages/kpi/kpi-list-page.js +150 -282
  13. package/dist-client/pages/kpi/kpi-list-page.js.map +1 -1
  14. package/dist-client/pages/kpi/kpi-tree-page.d.ts +1 -7
  15. package/dist-client/pages/kpi/kpi-tree-page.js +76 -127
  16. package/dist-client/pages/kpi/kpi-tree-page.js.map +1 -1
  17. package/dist-client/pages/kpi-metric/kpi-metric-list-page.d.ts +0 -6
  18. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +62 -116
  19. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +1 -1
  20. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +1 -7
  21. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +82 -140
  22. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -1
  23. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +0 -6
  24. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +54 -98
  25. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -1
  26. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +1 -7
  27. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +30 -57
  28. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +1 -1
  29. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.d.ts +1 -7
  30. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js +91 -153
  31. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js.map +1 -1
  32. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.d.ts +0 -6
  33. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js +81 -155
  34. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js.map +1 -1
  35. package/dist-client/pages/kpi-value/kpi-value-editor-page.d.ts +1 -7
  36. package/dist-client/pages/kpi-value/kpi-value-editor-page.js +80 -136
  37. package/dist-client/pages/kpi-value/kpi-value-editor-page.js.map +1 -1
  38. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +0 -6
  39. package/dist-client/pages/kpi-value/kpi-value-list-page.js +73 -134
  40. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -1
  41. package/dist-client/tsconfig.tsbuildinfo +1 -1
  42. package/dist-server/service/index.d.ts +1 -1
  43. package/dist-server/tsconfig.tsbuildinfo +1 -1
  44. package/package.json +18 -18
  45. package/client/tsconfig.json +0 -11
  46. package/dist-server/tsconfig.json +0 -10
  47. package/server/@types/index.d.ts +0 -11
  48. package/server/calculator/evaluator.ts +0 -45
  49. package/server/calculator/functions.ts +0 -67
  50. package/server/calculator/index.ts +0 -4
  51. package/server/calculator/parser.ts +0 -137
  52. package/server/calculator/provider.ts +0 -10
  53. package/server/controllers/index.ts +0 -2
  54. package/server/controllers/kpi-metric-value-provider.ts +0 -79
  55. package/server/controllers/kpi-value-provider.ts +0 -51
  56. package/server/index.ts +0 -6
  57. package/server/migrations/1752190849680-seed-kpi-metrics.ts +0 -124
  58. package/server/migrations/1752190849681-seed-kpi.ts +0 -356
  59. package/server/migrations/1752192090123-add-grades-to-kpi.ts +0 -67
  60. package/server/migrations/1752192090124-add-kpi-statistics.ts +0 -719
  61. package/server/migrations/1752192090128-seed-kpi-org-scope.ts +0 -132
  62. package/server/migrations/1752192090129-seed-kpi-values.ts +0 -207
  63. package/server/migrations/grade-data/x11-performance-table.json +0 -962
  64. package/server/migrations/grade-data/x12-performance-table.json +0 -611
  65. package/server/migrations/grade-data/x14-performance-table.json +0 -42
  66. package/server/migrations/grade-data/x21-performance-table.json +0 -889
  67. package/server/migrations/grade-data/x22-performance-table.json +0 -1064
  68. package/server/migrations/grade-data/x23-performance-table.json +0 -42
  69. package/server/migrations/grade-data/x31-performance-table.json +0 -644
  70. package/server/migrations/grade-data/x32-performance-table.json +0 -993
  71. package/server/migrations/grade-data/x33-performance-table.json +0 -195
  72. package/server/migrations/grade-data/x34-performance-table.json +0 -12
  73. package/server/migrations/grade-data/x35-performance-table.json +0 -42
  74. package/server/migrations/grade-data/x41-performance-table.json +0 -825
  75. package/server/migrations/grade-data/x42-performance-table.json +0 -786
  76. package/server/migrations/grade-data/x43-performance-table.json +0 -12
  77. package/server/migrations/grade-data/x44-performance-table.json +0 -42
  78. package/server/migrations/grade-data/x51-performance-table.json +0 -924
  79. package/server/migrations/grade-data/x52-performance-table.json +0 -42
  80. package/server/migrations/grade-data/x61-performance-table.json +0 -261
  81. package/server/migrations/grade-data/x62-performance-table.json +0 -42
  82. package/server/migrations/index.ts +0 -9
  83. package/server/migrations/seed-data/kpi-metrics-seed.json +0 -454
  84. package/server/migrations/seed-data/kpi-org-scope-seed.json +0 -1676
  85. package/server/migrations/seed-data/kpi-scopes-seed.json +0 -121
  86. package/server/migrations/seed-data/kpi-values-seed.json +0 -402
  87. package/server/migrations/seed-data/kpis-seed.json +0 -488
  88. package/server/migrations/seed-data/scope-definitions-seed.json +0 -90
  89. package/server/routes.ts +0 -81
  90. package/server/service/index.ts +0 -51
  91. package/server/service/kpi/aggregate-kpi.ts +0 -103
  92. package/server/service/kpi/event-subscriber.ts +0 -29
  93. package/server/service/kpi/index.ts +0 -9
  94. package/server/service/kpi/kpi-formula.service.ts +0 -164
  95. package/server/service/kpi/kpi-grade.types.ts +0 -28
  96. package/server/service/kpi/kpi-history.ts +0 -126
  97. package/server/service/kpi/kpi-mutation.ts +0 -553
  98. package/server/service/kpi/kpi-query.ts +0 -224
  99. package/server/service/kpi/kpi-type.ts +0 -151
  100. package/server/service/kpi/kpi.ts +0 -254
  101. package/server/service/kpi-alert/index.ts +0 -3
  102. package/server/service/kpi-alert/kpi-alert-query.ts +0 -59
  103. package/server/service/kpi-alert/kpi-alert-type.ts +0 -20
  104. package/server/service/kpi-metric/aggregate-kpi-metric.ts +0 -132
  105. package/server/service/kpi-metric/index.ts +0 -7
  106. package/server/service/kpi-metric/kpi-metric-mutation.ts +0 -309
  107. package/server/service/kpi-metric/kpi-metric-query.ts +0 -70
  108. package/server/service/kpi-metric/kpi-metric-type.ts +0 -111
  109. package/server/service/kpi-metric/kpi-metric.ts +0 -134
  110. package/server/service/kpi-metric-value/index.ts +0 -7
  111. package/server/service/kpi-metric-value/kpi-metric-value-mutation.ts +0 -270
  112. package/server/service/kpi-metric-value/kpi-metric-value-query.ts +0 -62
  113. package/server/service/kpi-metric-value/kpi-metric-value-type.ts +0 -82
  114. package/server/service/kpi-metric-value/kpi-metric-value.ts +0 -93
  115. package/server/service/kpi-org-scope/index.ts +0 -6
  116. package/server/service/kpi-org-scope/kpi-org-scope-mutation.ts +0 -173
  117. package/server/service/kpi-org-scope/kpi-org-scope-query.ts +0 -127
  118. package/server/service/kpi-org-scope/kpi-org-scope-type.ts +0 -68
  119. package/server/service/kpi-org-scope/kpi-org-scope.ts +0 -123
  120. package/server/service/kpi-scope/index.ts +0 -11
  121. package/server/service/kpi-scope/kpi-scope-mutation.ts +0 -129
  122. package/server/service/kpi-scope/kpi-scope-query.ts +0 -63
  123. package/server/service/kpi-scope/kpi-scope-type.ts +0 -96
  124. package/server/service/kpi-scope/kpi-scope.ts +0 -143
  125. package/server/service/kpi-statistic/index.ts +0 -7
  126. package/server/service/kpi-statistic/kpi-statistic-batch.service.ts +0 -231
  127. package/server/service/kpi-statistic/kpi-statistic-calculation.service.ts +0 -410
  128. package/server/service/kpi-statistic/kpi-statistic-mutation.ts +0 -291
  129. package/server/service/kpi-statistic/kpi-statistic-query.ts +0 -146
  130. package/server/service/kpi-statistic/kpi-statistic-type.ts +0 -152
  131. package/server/service/kpi-statistic/kpi-statistic.ts +0 -199
  132. package/server/service/kpi-value/index.ts +0 -7
  133. package/server/service/kpi-value/kpi-value-mutation.ts +0 -432
  134. package/server/service/kpi-value/kpi-value-query.ts +0 -61
  135. package/server/service/kpi-value/kpi-value-score.service.ts +0 -106
  136. package/server/service/kpi-value/kpi-value-type.ts +0 -122
  137. package/server/service/kpi-value/kpi-value.ts +0 -160
  138. package/server/service/utils/value-date-util.ts +0 -119
  139. package/server/tsconfig.json +0 -10
  140. package/server/types/global.d.ts +0 -8
@@ -1,122 +0,0 @@
1
- import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
2
- import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
3
- import { ObjectType, Field, InputType, Int, ID, registerEnumType, Float } from 'type-graphql'
4
-
5
- import { ObjectRef, ScalarObject } from '@things-factory/shell'
6
-
7
- import { KpiValue, KpiValueInputType } from './kpi-value'
8
-
9
- @InputType({ description: 'Input type for creating a new KPI value. Used in mutations to provide KPI value details.' })
10
- export class NewKpiValue {
11
- @Field(type => ID, { description: 'ID of the KPI to which this value belongs.' })
12
- kpiId: string
13
-
14
- @Field(type => Int, { description: 'Version of the KPI definition at the time this value is calculated.' })
15
- version: number
16
-
17
- @Field({ description: 'Date or period for which this KPI value is recorded (e.g., day, month, quarter).' })
18
- valueDate: string
19
-
20
- @Field(type => Float, { description: 'The calculated numeric value for this KPI and period.' })
21
- value: number
22
-
23
- @Field(type => Float, {
24
- nullable: true,
25
- description: 'Performance score calculated from KPI value using scoreFormula or grades lookup table. Range: 0-1.'
26
- })
27
- score?: number
28
-
29
- @Field(type => ScalarObject, {
30
- nullable: true,
31
- description:
32
- 'Extended or non-numeric information related to this KPI value, stored as JSON5. Can include grade, status, comments, or other metadata.'
33
- })
34
- meta?: any
35
-
36
- @Field(type => ID, { nullable: true, description: 'ID of the KPI organization scope for this value.' })
37
- kpiOrgScopeId?: string
38
-
39
- @Field({ nullable: true, description: 'Legacy organizational unit identifier (for backward compatibility)' })
40
- org?: string
41
-
42
- @Field({ nullable: true, description: 'Group key for this value (organization, line, user, project, etc.)' })
43
- group?: string
44
-
45
- @Field(type => KpiValueInputType, {
46
- nullable: true,
47
- description: 'Indicates whether this value was entered manually or generated automatically.'
48
- })
49
- inputType?: KpiValueInputType
50
-
51
- @Field({ nullable: true, description: 'Source of the value (e.g., system, user, external integration).' })
52
- source?: string
53
- }
54
-
55
- @InputType({
56
- description: 'Input type for updating an existing KPI value. Used in mutations to patch KPI value details.'
57
- })
58
- export class KpiValuePatch {
59
- @Field(type => ID, { nullable: true, description: 'ID of the KPI value to update.' })
60
- id?: string
61
-
62
- @Field(type => ID, { nullable: true, description: 'ID of the KPI to which this value belongs.' })
63
- kpiId?: string
64
-
65
- @Field(type => Int, {
66
- nullable: true,
67
- description: 'Version of the KPI definition at the time this value is calculated.'
68
- })
69
- version?: number
70
-
71
- @Field({
72
- nullable: true,
73
- description: 'Date or period for which this KPI value is recorded (e.g., day, month, quarter).'
74
- })
75
- valueDate?: string
76
-
77
- @Field(type => Float, { nullable: true, description: 'The calculated numeric value for this KPI and period.' })
78
- value?: number
79
-
80
- @Field(type => Float, {
81
- nullable: true,
82
- description: 'Performance score calculated from KPI value using scoreFormula or grades lookup table. Range: 0-1.'
83
- })
84
- score?: number
85
-
86
- @Field(type => ScalarObject, {
87
- nullable: true,
88
- description:
89
- 'Extended or non-numeric information related to this KPI value, stored as JSON5. Can include grade, status, comments, or other metadata.'
90
- })
91
- meta?: any
92
-
93
- @Field(type => ID, { nullable: true, description: 'ID of the KPI organization scope for this value.' })
94
- kpiOrgScopeId?: string
95
-
96
- @Field({ nullable: true, description: 'Legacy organizational unit identifier (for backward compatibility)' })
97
- org?: string
98
-
99
- @Field({ nullable: true, description: 'Group key for this value (organization, line, user, project, etc.)' })
100
- group?: string
101
-
102
- @Field(type => KpiValueInputType, {
103
- nullable: true,
104
- description: 'Indicates whether this value was entered manually or generated automatically.'
105
- })
106
- inputType?: KpiValueInputType
107
-
108
- @Field({ nullable: true, description: 'Source of the value (e.g., system, user, external integration).' })
109
- source?: string
110
-
111
- @Field({ nullable: true, description: 'Custom flag for update operations (internal use).' })
112
- cuFlag?: string
113
- }
114
-
115
- @ObjectType()
116
- export class KpiValueList {
117
- @Field(type => [KpiValue])
118
- items: KpiValue[]
119
-
120
- @Field(type => Int)
121
- total: number
122
- }
@@ -1,160 +0,0 @@
1
- import {
2
- CreateDateColumn,
3
- UpdateDateColumn,
4
- Entity,
5
- Index,
6
- Column,
7
- RelationId,
8
- ManyToOne,
9
- PrimaryGeneratedColumn
10
- } from 'typeorm'
11
- import { ObjectType, Field, Int, ID, registerEnumType, Float } from 'type-graphql'
12
-
13
- import { User } from '@things-factory/auth-base'
14
- import { Domain, ScalarObject, json5Transformer } from '@things-factory/shell'
15
- import { config } from '@things-factory/env'
16
- import { Kpi, KpiPeriodType } from '../kpi/kpi'
17
- import { KpiOrgScope } from '../kpi-org-scope/kpi-org-scope'
18
-
19
- const ORMCONFIG = config.get('ormconfig', {})
20
- const DATABASE_TYPE = ORMCONFIG.type
21
-
22
- export enum KpiValueInputType {
23
- MANUAL = 'MANUAL',
24
- AUTO = 'AUTO'
25
- }
26
-
27
- registerEnumType(KpiValueInputType, {
28
- name: 'KpiValueInputType',
29
- description: 'Type of the input (Manual or Auto)'
30
- })
31
-
32
- @Entity()
33
- @Index('ix_kpi_value_latest', ['domain', 'kpi', 'valueDate', 'kpiOrgScope', 'version'], { unique: true })
34
- @Index('ix_kpi_value_latest_for_query', ['domain', 'kpi', 'valueDate', 'kpiOrgScope'], { unique: false })
35
- @Index('ix_kpi_value_group_kpi', ['domain', 'group', 'kpi', 'valueDate'], { unique: false })
36
- @Index('ix_kpi_value_kpi_group', ['domain', 'kpi', 'group', 'valueDate'], { unique: false })
37
- @ObjectType({ description: 'Entity for KpiValue' })
38
- export class KpiValue {
39
- @PrimaryGeneratedColumn('uuid')
40
- @Field(type => ID, { description: 'Unique identifier for this KPI value record.' })
41
- readonly id: string
42
-
43
- @ManyToOne(type => Domain)
44
- @Field({ nullable: true, description: 'Domain (tenant) to which this KPI value belongs.' })
45
- domain?: Domain
46
-
47
- @RelationId((kpiValue: KpiValue) => kpiValue.domain)
48
- @Field({ nullable: true, description: 'ID of the domain (tenant) for this KPI value.' })
49
- domainId?: string
50
-
51
- @ManyToOne(() => Kpi)
52
- @Field(type => Kpi, {
53
- nullable: true,
54
- description: 'Reference to the KPI definition for which this value is calculated.'
55
- })
56
- kpi: Kpi
57
-
58
- @RelationId((kpiValue: KpiValue) => kpiValue.kpi)
59
- @Field({ description: 'ID of the referenced KPI.' })
60
- kpiId: string
61
-
62
- @Column('int')
63
- @Field(type => Int, { description: 'Version of the KPI definition at the time this value was calculated.' })
64
- version: number
65
-
66
- @Column()
67
- @Field({
68
- description:
69
- 'Date or period for which this KPI value is recorded (e.g., day: YYYY-MM-DD, month: YYYY-MM, quarter: YYYY-Qn, range: YYYY-MM-DD~YYYY-MM-DD).'
70
- })
71
- valueDate: string
72
-
73
- @Column('float')
74
- @Field(type => Float, { description: 'The calculated numeric value for this KPI and period.' })
75
- value: number
76
-
77
- @Column('float', { nullable: true })
78
- @Field(type => Float, {
79
- nullable: true,
80
- description: 'Performance score calculated from KPI value using scoreFormula or grades lookup table.'
81
- })
82
- score?: number
83
-
84
- @Column({ nullable: true })
85
- @Field(type => String, {
86
- nullable: true,
87
- description: 'Group key for this value (organization, line, user, project, etc.)'
88
- })
89
- group?: string
90
-
91
- @ManyToOne(() => KpiOrgScope, { nullable: true })
92
- @Field(type => KpiOrgScope, {
93
- nullable: true,
94
- description: 'Reference to the organization scope mapping for this KPI value.'
95
- })
96
- kpiOrgScope?: KpiOrgScope
97
-
98
- @RelationId((kpiValue: KpiValue) => kpiValue.kpiOrgScope)
99
- @Field({ nullable: true, description: 'ID of the referenced KPI organization scope.' })
100
- kpiOrgScopeId?: string
101
-
102
- @Column({ nullable: true })
103
- @Field({
104
- nullable: true,
105
- description: 'Indicates whether this value was entered manually or generated automatically.'
106
- })
107
- inputType?: KpiValueInputType
108
-
109
- @Column({ nullable: true })
110
- @Field({ nullable: true, description: 'Source of the value (e.g., system, user, external integration).' })
111
- source?: string
112
-
113
- @Column({
114
- nullable: true,
115
- type:
116
- DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
117
- ? 'longtext'
118
- : DATABASE_TYPE == 'oracle'
119
- ? 'clob'
120
- : DATABASE_TYPE == 'mssql'
121
- ? 'nvarchar'
122
- : 'varchar',
123
- length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined,
124
- transformer: json5Transformer
125
- })
126
- @Field(type => ScalarObject, {
127
- nullable: true,
128
- description:
129
- 'Extended or non-numeric information related to this KPI value, stored as JSON5. Can include grade, status, comments, or other metadata.'
130
- })
131
- meta?: any
132
-
133
- @Column({ default: 'DAY' })
134
- @Field(type => KpiPeriodType, { description: 'Aggregation period type for this KPI value.' })
135
- periodType: KpiPeriodType
136
-
137
- @CreateDateColumn()
138
- @Field({ nullable: true, description: 'Timestamp when this KPI value record was created.' })
139
- createdAt?: Date
140
-
141
- @UpdateDateColumn()
142
- @Field({ nullable: true, description: 'Timestamp when this KPI value record was last updated.' })
143
- updatedAt?: Date
144
-
145
- @ManyToOne(type => User, { nullable: true })
146
- @Field(type => User, { nullable: true, description: 'User who created this KPI value record.' })
147
- creator?: User
148
-
149
- @RelationId((kpiValue: KpiValue) => kpiValue.creator)
150
- @Field({ nullable: true, description: 'ID of the user who created this KPI value record.' })
151
- creatorId?: string
152
-
153
- @ManyToOne(type => User, { nullable: true })
154
- @Field(type => User, { nullable: true, description: 'User who last updated this KPI value record.' })
155
- updater?: User
156
-
157
- @RelationId((kpiValue: KpiValue) => kpiValue.updater)
158
- @Field({ nullable: true, description: 'ID of the user who last updated this KPI value record.' })
159
- updaterId?: string
160
- }
@@ -1,119 +0,0 @@
1
- import { KpiPeriodType } from '../kpi/kpi'
2
-
3
- export function getISOWeek(date: Date): number {
4
- const tmp = new Date(date.getTime())
5
- tmp.setHours(0, 0, 0, 0)
6
- tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7))
7
- const yearStart = new Date(tmp.getFullYear(), 0, 1)
8
- const weekNo = Math.ceil(((tmp.getTime() - yearStart.getTime()) / 86400000 + 1) / 7)
9
- return weekNo
10
- }
11
-
12
- function getMonday(year: number, week: number): Date {
13
- const simple = new Date(year, 0, 1 + (week - 1) * 7)
14
- const dow = simple.getDay()
15
- const ISOweekStart = simple
16
- if (dow <= 4) ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1)
17
- else ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay())
18
- return ISOweekStart
19
- }
20
-
21
- export function normalizePeriodDate(valueDate: string, periodType: KpiPeriodType): Date {
22
- switch (periodType) {
23
- case KpiPeriodType.DAY:
24
- return new Date(valueDate + 'T00:00:00.000Z')
25
-
26
- case KpiPeriodType.WEEK: {
27
- // "2024-W03" → 해당 주의 월요일
28
- const [year, week] = valueDate.split('-W')
29
- return getMonday(parseInt(year), parseInt(week))
30
- }
31
-
32
- case KpiPeriodType.MONTH:
33
- return new Date(valueDate + '-01T00:00:00.000Z')
34
-
35
- case KpiPeriodType.QUARTER: {
36
- // "2024-Q1" → 해당 분기 시작일
37
- const [year, quarter] = valueDate.split('-Q')
38
- const month = (parseInt(quarter) - 1) * 3 + 1
39
- return new Date(`${year}-${month.toString().padStart(2, '0')}-01T00:00:00.000Z`)
40
- }
41
-
42
- case KpiPeriodType.YEAR:
43
- return new Date(valueDate + '-01-01T00:00:00.000Z')
44
-
45
- case KpiPeriodType.RANGE: {
46
- // "2024-01-01~2024-01-31" → 시작일 사용
47
- const startDate = valueDate.split('~')[0]
48
- return new Date(startDate + 'T00:00:00.000Z')
49
- }
50
-
51
- case KpiPeriodType.ALLTIME:
52
- return new Date('1900-01-01T00:00:00.000Z') // 고정 기준점
53
-
54
- default:
55
- return new Date(valueDate + 'T00:00:00.000Z')
56
- }
57
- }
58
-
59
- export function getDefaultValueDate(periodType: KpiPeriodType, mode: 'current' | 'last' = 'current'): string {
60
- const now = new Date()
61
- if (mode === 'last') {
62
- switch (periodType) {
63
- case KpiPeriodType.DAY: {
64
- const d = new Date(now)
65
- d.setDate(d.getDate() - 1)
66
- return d.toISOString().slice(0, 10)
67
- }
68
- case KpiPeriodType.MONTH: {
69
- const d = new Date(now)
70
- d.setMonth(d.getMonth() - 1)
71
- return d.toISOString().slice(0, 7)
72
- }
73
- case KpiPeriodType.QUARTER: {
74
- let year = now.getFullYear()
75
- let quarter = Math.floor(now.getMonth() / 3)
76
- if (quarter === 0) {
77
- year -= 1
78
- quarter = 4
79
- }
80
- return `${year}-Q${quarter}`
81
- }
82
- case KpiPeriodType.WEEK: {
83
- const d = new Date(now)
84
- d.setDate(d.getDate() - 7)
85
- const year = d.getFullYear()
86
- const week = getISOWeek(d)
87
- return `${year}-W${week}`
88
- }
89
- case KpiPeriodType.ALLTIME:
90
- return 'ALLTIME'
91
- default: {
92
- const d = new Date(now)
93
- d.setDate(d.getDate() - 1)
94
- return d.toISOString().slice(0, 10)
95
- }
96
- }
97
- } else {
98
- switch (periodType) {
99
- case KpiPeriodType.DAY:
100
- return now.toISOString().slice(0, 10)
101
- case KpiPeriodType.MONTH:
102
- return now.toISOString().slice(0, 7)
103
- case KpiPeriodType.QUARTER: {
104
- const year = now.getFullYear()
105
- const quarter = Math.floor(now.getMonth() / 3) + 1
106
- return `${year}-Q${quarter}`
107
- }
108
- case KpiPeriodType.WEEK: {
109
- const year = now.getFullYear()
110
- const week = getISOWeek(now)
111
- return `${year}-W${week}`
112
- }
113
- case KpiPeriodType.ALLTIME:
114
- return 'ALLTIME'
115
- default:
116
- return now.toISOString().slice(0, 10)
117
- }
118
- }
119
- }
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "../../tsconfig-base.json",
3
- "compilerOptions": {
4
- "strict": false,
5
- "module": "commonjs",
6
- "outDir": "../dist-server",
7
- "baseUrl": "./"
8
- },
9
- "include": ["./**/*"]
10
- }
@@ -1,8 +0,0 @@
1
- /// <reference types="@things-factory/auth-base/server/types" />
2
-
3
- // auth-base의 global 타입들을 여기서도 사용할 수 있도록 재선언
4
- declare global {
5
- // ResolverContext는 이미 auth-base에서 global로 선언되어 있음
6
- }
7
-
8
- export {}