@things-factory/kpi 9.2.5 → 10.0.0-beta.10

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 (139) 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/tsconfig.tsbuildinfo +1 -1
  43. package/package.json +18 -18
  44. package/client/tsconfig.json +0 -11
  45. package/dist-server/tsconfig.json +0 -10
  46. package/server/@types/index.d.ts +0 -11
  47. package/server/calculator/evaluator.ts +0 -45
  48. package/server/calculator/functions.ts +0 -67
  49. package/server/calculator/index.ts +0 -4
  50. package/server/calculator/parser.ts +0 -137
  51. package/server/calculator/provider.ts +0 -10
  52. package/server/controllers/index.ts +0 -2
  53. package/server/controllers/kpi-metric-value-provider.ts +0 -79
  54. package/server/controllers/kpi-value-provider.ts +0 -51
  55. package/server/index.ts +0 -6
  56. package/server/migrations/1752190849680-seed-kpi-metrics.ts +0 -124
  57. package/server/migrations/1752190849681-seed-kpi.ts +0 -356
  58. package/server/migrations/1752192090123-add-grades-to-kpi.ts +0 -67
  59. package/server/migrations/1752192090124-add-kpi-statistics.ts +0 -719
  60. package/server/migrations/1752192090128-seed-kpi-org-scope.ts +0 -132
  61. package/server/migrations/1752192090129-seed-kpi-values.ts +0 -207
  62. package/server/migrations/grade-data/x11-performance-table.json +0 -962
  63. package/server/migrations/grade-data/x12-performance-table.json +0 -611
  64. package/server/migrations/grade-data/x14-performance-table.json +0 -42
  65. package/server/migrations/grade-data/x21-performance-table.json +0 -889
  66. package/server/migrations/grade-data/x22-performance-table.json +0 -1064
  67. package/server/migrations/grade-data/x23-performance-table.json +0 -42
  68. package/server/migrations/grade-data/x31-performance-table.json +0 -644
  69. package/server/migrations/grade-data/x32-performance-table.json +0 -993
  70. package/server/migrations/grade-data/x33-performance-table.json +0 -195
  71. package/server/migrations/grade-data/x34-performance-table.json +0 -12
  72. package/server/migrations/grade-data/x35-performance-table.json +0 -42
  73. package/server/migrations/grade-data/x41-performance-table.json +0 -825
  74. package/server/migrations/grade-data/x42-performance-table.json +0 -786
  75. package/server/migrations/grade-data/x43-performance-table.json +0 -12
  76. package/server/migrations/grade-data/x44-performance-table.json +0 -42
  77. package/server/migrations/grade-data/x51-performance-table.json +0 -924
  78. package/server/migrations/grade-data/x52-performance-table.json +0 -42
  79. package/server/migrations/grade-data/x61-performance-table.json +0 -261
  80. package/server/migrations/grade-data/x62-performance-table.json +0 -42
  81. package/server/migrations/index.ts +0 -9
  82. package/server/migrations/seed-data/kpi-metrics-seed.json +0 -454
  83. package/server/migrations/seed-data/kpi-org-scope-seed.json +0 -1676
  84. package/server/migrations/seed-data/kpi-scopes-seed.json +0 -121
  85. package/server/migrations/seed-data/kpi-values-seed.json +0 -402
  86. package/server/migrations/seed-data/kpis-seed.json +0 -488
  87. package/server/migrations/seed-data/scope-definitions-seed.json +0 -90
  88. package/server/routes.ts +0 -81
  89. package/server/service/index.ts +0 -51
  90. package/server/service/kpi/aggregate-kpi.ts +0 -103
  91. package/server/service/kpi/event-subscriber.ts +0 -29
  92. package/server/service/kpi/index.ts +0 -9
  93. package/server/service/kpi/kpi-formula.service.ts +0 -164
  94. package/server/service/kpi/kpi-grade.types.ts +0 -28
  95. package/server/service/kpi/kpi-history.ts +0 -126
  96. package/server/service/kpi/kpi-mutation.ts +0 -553
  97. package/server/service/kpi/kpi-query.ts +0 -224
  98. package/server/service/kpi/kpi-type.ts +0 -151
  99. package/server/service/kpi/kpi.ts +0 -254
  100. package/server/service/kpi-alert/index.ts +0 -3
  101. package/server/service/kpi-alert/kpi-alert-query.ts +0 -59
  102. package/server/service/kpi-alert/kpi-alert-type.ts +0 -20
  103. package/server/service/kpi-metric/aggregate-kpi-metric.ts +0 -132
  104. package/server/service/kpi-metric/index.ts +0 -7
  105. package/server/service/kpi-metric/kpi-metric-mutation.ts +0 -309
  106. package/server/service/kpi-metric/kpi-metric-query.ts +0 -70
  107. package/server/service/kpi-metric/kpi-metric-type.ts +0 -111
  108. package/server/service/kpi-metric/kpi-metric.ts +0 -134
  109. package/server/service/kpi-metric-value/index.ts +0 -7
  110. package/server/service/kpi-metric-value/kpi-metric-value-mutation.ts +0 -270
  111. package/server/service/kpi-metric-value/kpi-metric-value-query.ts +0 -62
  112. package/server/service/kpi-metric-value/kpi-metric-value-type.ts +0 -82
  113. package/server/service/kpi-metric-value/kpi-metric-value.ts +0 -93
  114. package/server/service/kpi-org-scope/index.ts +0 -6
  115. package/server/service/kpi-org-scope/kpi-org-scope-mutation.ts +0 -173
  116. package/server/service/kpi-org-scope/kpi-org-scope-query.ts +0 -127
  117. package/server/service/kpi-org-scope/kpi-org-scope-type.ts +0 -68
  118. package/server/service/kpi-org-scope/kpi-org-scope.ts +0 -123
  119. package/server/service/kpi-scope/index.ts +0 -11
  120. package/server/service/kpi-scope/kpi-scope-mutation.ts +0 -129
  121. package/server/service/kpi-scope/kpi-scope-query.ts +0 -63
  122. package/server/service/kpi-scope/kpi-scope-type.ts +0 -96
  123. package/server/service/kpi-scope/kpi-scope.ts +0 -143
  124. package/server/service/kpi-statistic/index.ts +0 -7
  125. package/server/service/kpi-statistic/kpi-statistic-batch.service.ts +0 -231
  126. package/server/service/kpi-statistic/kpi-statistic-calculation.service.ts +0 -410
  127. package/server/service/kpi-statistic/kpi-statistic-mutation.ts +0 -291
  128. package/server/service/kpi-statistic/kpi-statistic-query.ts +0 -146
  129. package/server/service/kpi-statistic/kpi-statistic-type.ts +0 -152
  130. package/server/service/kpi-statistic/kpi-statistic.ts +0 -199
  131. package/server/service/kpi-value/index.ts +0 -7
  132. package/server/service/kpi-value/kpi-value-mutation.ts +0 -432
  133. package/server/service/kpi-value/kpi-value-query.ts +0 -61
  134. package/server/service/kpi-value/kpi-value-score.service.ts +0 -106
  135. package/server/service/kpi-value/kpi-value-type.ts +0 -122
  136. package/server/service/kpi-value/kpi-value.ts +0 -160
  137. package/server/service/utils/value-date-util.ts +0 -119
  138. package/server/tsconfig.json +0 -10
  139. 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 {}