@dssp/dkpi 1.0.0-y.0 → 1.0.0

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/KPI-STATISTICS-SERVICE.md +233 -0
  2. package/_index.html +4 -9
  3. package/assets/helps/index.md +1 -1
  4. package/assets/images/project-image.png +0 -0
  5. package/assets/manifest.json +2 -2
  6. package/config/config.development.js +2 -1
  7. package/config/config.production.js +2 -1
  8. package/kpi-module-service-tests.md +1286 -0
  9. package/kpi-module-test-report.md +676 -0
  10. package/kpi-module-unit-test-detailed-report.md +925 -0
  11. package/kpi-module-unit-tests-detailed.md +1452 -0
  12. package/openapi/unstable.yaml +2 -2
  13. package/package.json +58 -54
  14. package/recalculate-batch.sh +64 -0
  15. package/recalculate-projects-range.sh +98 -0
  16. package/schema.graphql +1159 -55
  17. package/things-factory.config.js +6 -1
  18. package/translations/en.json +5 -1
  19. package/translations/ko.json +5 -1
  20. package/views/auth-page.html +4 -5
  21. package/views/public/home.html +5 -6
  22. package/dist-client/bootstrap.d.ts +0 -8
  23. package/dist-client/bootstrap.js +0 -257
  24. package/dist-client/bootstrap.js.map +0 -1
  25. package/dist-client/components/kpi-single-boxplot-chart.d.ts +0 -24
  26. package/dist-client/components/kpi-single-boxplot-chart.js +0 -317
  27. package/dist-client/components/kpi-single-boxplot-chart.js.map +0 -1
  28. package/dist-client/components/sv-pagenation-control.d.ts +0 -18
  29. package/dist-client/components/sv-pagenation-control.js +0 -142
  30. package/dist-client/components/sv-pagenation-control.js.map +0 -1
  31. package/dist-client/entries/public/home.d.ts +0 -8
  32. package/dist-client/entries/public/home.js +0 -97
  33. package/dist-client/entries/public/home.js.map +0 -1
  34. package/dist-client/icons/menu-icons.d.ts +0 -11
  35. package/dist-client/icons/menu-icons.js +0 -126
  36. package/dist-client/icons/menu-icons.js.map +0 -1
  37. package/dist-client/index.d.ts +0 -0
  38. package/dist-client/index.js +0 -2
  39. package/dist-client/index.js.map +0 -1
  40. package/dist-client/menu.d.ts +0 -23
  41. package/dist-client/menu.js +0 -59
  42. package/dist-client/menu.js.map +0 -1
  43. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +0 -58
  44. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +0 -731
  45. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +0 -1
  46. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +0 -23
  47. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +0 -76
  48. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +0 -1
  49. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +0 -69
  50. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +0 -385
  51. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +0 -1
  52. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +0 -12
  53. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +0 -174
  54. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +0 -1
  55. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +0 -41
  56. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +0 -191
  57. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +0 -1
  58. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +0 -23
  59. package/dist-client/pages/kpi-value/kpi-value-importer.js +0 -93
  60. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +0 -1
  61. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +0 -72
  62. package/dist-client/pages/kpi-value/kpi-value-list-page.js +0 -465
  63. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +0 -1
  64. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +0 -13
  65. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +0 -248
  66. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +0 -1
  67. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +0 -10
  68. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +0 -229
  69. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +0 -1
  70. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.d.ts +0 -12
  71. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +0 -213
  72. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +0 -1
  73. package/dist-client/pages/sv-project-complete.d.ts +0 -22
  74. package/dist-client/pages/sv-project-complete.js +0 -213
  75. package/dist-client/pages/sv-project-complete.js.map +0 -1
  76. package/dist-client/pages/sv-project-completed-list.d.ts +0 -24
  77. package/dist-client/pages/sv-project-completed-list.js +0 -357
  78. package/dist-client/pages/sv-project-completed-list.js.map +0 -1
  79. package/dist-client/pages/sv-project-detail.d.ts +0 -13
  80. package/dist-client/pages/sv-project-detail.js +0 -494
  81. package/dist-client/pages/sv-project-detail.js.map +0 -1
  82. package/dist-client/pages/sv-project-list.d.ts +0 -157
  83. package/dist-client/pages/sv-project-list.js +0 -431
  84. package/dist-client/pages/sv-project-list.js.map +0 -1
  85. package/dist-client/pages/sv-user-management.d.ts +0 -5
  86. package/dist-client/pages/sv-user-management.js +0 -219
  87. package/dist-client/pages/sv-user-management.js.map +0 -1
  88. package/dist-client/route.d.ts +0 -1
  89. package/dist-client/route.js +0 -31
  90. package/dist-client/route.js.map +0 -1
  91. package/dist-client/shared/complete-api.d.ts +0 -5
  92. package/dist-client/shared/complete-api.js +0 -125
  93. package/dist-client/shared/complete-api.js.map +0 -1
  94. package/dist-client/shared/func.d.ts +0 -2
  95. package/dist-client/shared/func.js +0 -22
  96. package/dist-client/shared/func.js.map +0 -1
  97. package/dist-client/themes/dark.css +0 -51
  98. package/dist-client/themes/light.css +0 -51
  99. package/dist-client/tsconfig.tsbuildinfo +0 -1
  100. package/dist-client/viewparts/menu-tools.d.ts +0 -54
  101. package/dist-client/viewparts/menu-tools.js +0 -503
  102. package/dist-client/viewparts/menu-tools.js.map +0 -1
  103. package/dist-client/viewparts/user-circle.d.ts +0 -5
  104. package/dist-client/viewparts/user-circle.js +0 -26
  105. package/dist-client/viewparts/user-circle.js.map +0 -1
  106. package/dist-server/index.d.ts +0 -2
  107. package/dist-server/index.js +0 -6
  108. package/dist-server/index.js.map +0 -1
  109. package/dist-server/migrations/index.d.ts +0 -1
  110. package/dist-server/migrations/index.js +0 -12
  111. package/dist-server/migrations/index.js.map +0 -1
  112. package/dist-server/scripts/calculate-kpi-scores.d.ts +0 -10
  113. package/dist-server/scripts/calculate-kpi-scores.js +0 -271
  114. package/dist-server/scripts/calculate-kpi-scores.js.map +0 -1
  115. package/dist-server/scripts/load-grade-data-migration.d.ts +0 -10
  116. package/dist-server/scripts/load-grade-data-migration.js +0 -194
  117. package/dist-server/scripts/load-grade-data-migration.js.map +0 -1
  118. package/dist-server/scripts/propagate-parent-kpi-values.d.ts +0 -10
  119. package/dist-server/scripts/propagate-parent-kpi-values.js +0 -440
  120. package/dist-server/scripts/propagate-parent-kpi-values.js.map +0 -1
  121. package/dist-server/service/index.d.ts +0 -6
  122. package/dist-server/service/index.js +0 -21
  123. package/dist-server/service/index.js.map +0 -1
  124. package/dist-server/service/kpi-metric-value/index.d.ts +0 -4
  125. package/dist-server/service/kpi-metric-value/index.js +0 -8
  126. package/dist-server/service/kpi-metric-value/index.js.map +0 -1
  127. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +0 -7
  128. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +0 -112
  129. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +0 -1
  130. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +0 -7
  131. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +0 -47
  132. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +0 -1
  133. package/dist-server/service/kpi-value/index.d.ts +0 -3
  134. package/dist-server/service/kpi-value/index.js +0 -7
  135. package/dist-server/service/kpi-value/index.js.map +0 -1
  136. package/dist-server/service/kpi-value/kpi-value-query.d.ts +0 -7
  137. package/dist-server/service/kpi-value/kpi-value-query.js +0 -47
  138. package/dist-server/service/kpi-value/kpi-value-query.js.map +0 -1
  139. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,233 @@
1
+ # KPI Statistics Service Implementation
2
+
3
+ ## Overview
4
+
5
+ This implementation provides GraphQL services for KPI statistics visualization, specifically designed for box plots and radar charts. The service analyzes KPI values across different geographical groups and provides real-time statistical data for completed projects.
6
+
7
+ ## GraphQL Types
8
+
9
+ ### KpiBoxPlotStats
10
+ Box plot statistics for KPI values:
11
+ - `geoGroup`: Geographical group identifier
12
+ - `kpiName`: KPI name (optional for aggregated data)
13
+ - `minVal`: Minimum score value
14
+ - `q1Val`: First quartile (25th percentile)
15
+ - `medVal`: Median value (50th percentile)
16
+ - `q3Val`: Third quartile (75th percentile)
17
+ - `maxVal`: Maximum score value
18
+
19
+ ### KpiRadarStats
20
+ Radar chart statistics for KPI values:
21
+ - `geoGroup`: Geographical group identifier
22
+ - `kpiName`: KPI name
23
+ - `avgScore`: Average KPI score
24
+ - `projectCount`: Number of projects in calculation
25
+
26
+ ## GraphQL Queries
27
+
28
+ ### 1. kpiZValueBoxPlotStats
29
+ Returns box plot statistics for Z-category KPIs grouped by geographical region.
30
+
31
+ **Query:**
32
+ ```graphql
33
+ query GetZValueBoxPlot($geoGroup: String) {
34
+ kpiZValueBoxPlotStats(geoGroup: $geoGroup) {
35
+ geoGroup
36
+ minVal
37
+ q1Val
38
+ medVal
39
+ q3Val
40
+ maxVal
41
+ }
42
+ }
43
+ ```
44
+
45
+ **Parameters:**
46
+ - `geoGroup` (optional): Filter by specific geographical group
47
+
48
+ ### 2. kpiYValueBoxPlotStats
49
+ Returns box plot statistics for Y-category KPIs, broken down by both geographical region and individual KPI names.
50
+
51
+ **Query:**
52
+ ```graphql
53
+ query GetYValueBoxPlot($geoGroup: String) {
54
+ kpiYValueBoxPlotStats(geoGroup: $geoGroup) {
55
+ geoGroup
56
+ kpiName
57
+ minVal
58
+ q1Val
59
+ medVal
60
+ q3Val
61
+ maxVal
62
+ }
63
+ }
64
+ ```
65
+
66
+ **Parameters:**
67
+ - `geoGroup` (optional): Filter by specific geographical group
68
+
69
+ ### 3. kpiRadarStats
70
+ Returns radar chart statistics for KPIs matching a specific pattern.
71
+
72
+ **Query:**
73
+ ```graphql
74
+ query GetRadarStats($kpiPattern: String!, $geoGroup: String) {
75
+ kpiRadarStats(kpiPattern: $kpiPattern, geoGroup: $geoGroup) {
76
+ geoGroup
77
+ kpiName
78
+ avgScore
79
+ projectCount
80
+ }
81
+ }
82
+ ```
83
+
84
+ **Parameters:**
85
+ - `kpiPattern`: SQL LIKE pattern for KPI names (default: '%')
86
+ - `geoGroup` (optional): Filter by specific geographical group
87
+
88
+ ### 4. kpiComprehensiveStats
89
+ Returns comprehensive statistics for all KPIs across completed projects.
90
+
91
+ **Query:**
92
+ ```graphql
93
+ query GetComprehensiveStats($geoGroup: String, $includeOngoing: Boolean) {
94
+ kpiComprehensiveStats(geoGroup: $geoGroup, includeOngoing: $includeOngoing) {
95
+ geoGroup
96
+ kpiName
97
+ avgScore
98
+ projectCount
99
+ }
100
+ }
101
+ ```
102
+
103
+ **Parameters:**
104
+ - `geoGroup` (optional): Filter by specific geographical group
105
+ - `includeOngoing` (default: false): Include ongoing projects in analysis
106
+
107
+ ## Usage Examples
108
+
109
+ ### JavaScript/Frontend Usage
110
+
111
+ ```typescript
112
+ import { client } from '@operato/graphql'
113
+ import gql from 'graphql-tag'
114
+
115
+ // Get Z-category box plot data for all regions
116
+ const getZBoxPlotData = async () => {
117
+ const result = await client.query({
118
+ query: gql`
119
+ query {
120
+ kpiZValueBoxPlotStats {
121
+ geoGroup
122
+ minVal
123
+ q1Val
124
+ medVal
125
+ q3Val
126
+ maxVal
127
+ }
128
+ }
129
+ `
130
+ })
131
+ return result.data.kpiZValueBoxPlotStats
132
+ }
133
+
134
+ // Get Y-category box plot data for specific region
135
+ const getYBoxPlotData = async (region: string) => {
136
+ const result = await client.query({
137
+ query: gql`
138
+ query GetYBoxPlot($geoGroup: String) {
139
+ kpiYValueBoxPlotStats(geoGroup: $geoGroup) {
140
+ geoGroup
141
+ kpiName
142
+ minVal
143
+ q1Val
144
+ medVal
145
+ q3Val
146
+ maxVal
147
+ }
148
+ }
149
+ `,
150
+ variables: { geoGroup: region }
151
+ })
152
+ return result.data.kpiYValueBoxPlotStats
153
+ }
154
+
155
+ // Get radar chart data for X-category KPIs
156
+ const getRadarData = async () => {
157
+ const result = await client.query({
158
+ query: gql`
159
+ query {
160
+ kpiRadarStats(kpiPattern: "X%") {
161
+ geoGroup
162
+ kpiName
163
+ avgScore
164
+ projectCount
165
+ }
166
+ }
167
+ `
168
+ })
169
+ return result.data.kpiRadarStats
170
+ }
171
+ ```
172
+
173
+ ### Data Processing for Charts
174
+
175
+ ```typescript
176
+ // Process box plot data for Chart.js or similar
177
+ const processBoxPlotData = (data: KpiBoxPlotStats[]) => {
178
+ return data.map(item => ({
179
+ label: item.geoGroup,
180
+ data: [item.minVal, item.q1Val, item.medVal, item.q3Val, item.maxVal]
181
+ }))
182
+ }
183
+
184
+ // Process radar data for radar charts
185
+ const processRadarData = (data: KpiRadarStats[]) => {
186
+ const groupedData = data.reduce((acc, item) => {
187
+ if (!acc[item.geoGroup]) {
188
+ acc[item.geoGroup] = []
189
+ }
190
+ acc[item.geoGroup].push({
191
+ label: item.kpiName,
192
+ value: item.avgScore
193
+ })
194
+ return acc
195
+ }, {} as Record<string, Array<{label: string, value: number}>>)
196
+
197
+ return groupedData
198
+ }
199
+ ```
200
+
201
+ ## Database Schema Requirements
202
+
203
+ The service expects the following database structure:
204
+
205
+ - `kpi_values` table with columns: `id`, `score`, `kpi_id`, `kpi_org_scope_id`, `domain_id`
206
+ - `kpis` table with columns: `id`, `name`
207
+ - `projects` table with columns: `id`, `geo_group`, `end_date`
208
+
209
+ ## Security
210
+
211
+ All queries require KPI query privileges:
212
+ - Category: "kpi"
213
+ - Privilege: "query"
214
+ - Domain owner granted: true
215
+ - Super user granted: true
216
+
217
+ ## Performance Considerations
218
+
219
+ 1. **Indexing**: Ensure indexes on:
220
+ - `kpi_values.kpi_id`
221
+ - `kpi_values.kpi_org_scope_id`
222
+ - `kpi_values.domain_id`
223
+ - `projects.end_date`
224
+ - `projects.geo_group`
225
+ - `kpis.name`
226
+
227
+ 2. **Caching**: Consider implementing GraphQL query result caching for frequently accessed statistics.
228
+
229
+ 3. **Aggregation**: The percentile calculations may be expensive on large datasets. Consider pre-computing statistics for better performance.
230
+
231
+ ## File Location
232
+
233
+ Implementation: `/Users/super/Documents/GitHub/dssp/packages/dkpi/server/service/kpi/kpi-query.ts`
package/_index.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="google" content="notranslate" />
6
- <title>Digital KPI Platform</title>
6
+ <title>Digital platform-based KPI Navigator</title>
7
7
  <meta name="generator" content="Things Factory Starter Kit" />
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
9
9
  <meta name="description" content="Build Smarter with Every Metric" />
@@ -20,7 +20,7 @@
20
20
 
21
21
  <!-- Add to homescreen for Chrome on Android. Fallback for manifest.json -->
22
22
  <meta name="mobile-web-app-capable" content="yes" />
23
- <meta name="application-name" content="Digital KPI Platform" />
23
+ <meta name="application-name" content="Digital platform-based KPI Navigator" />
24
24
  <meta name="application-description" content="Build Smarter with Every Metric" />
25
25
  <meta name="application-copyright" content="Copyright © hatiolab.com. All Rights Reserved." />
26
26
  <link rel="application-icon" href="/assets/manifest/icon-96x96.png" />
@@ -28,7 +28,7 @@
28
28
  <!-- Add to homescreen for Safari on iOS -->
29
29
  <meta name="apple-mobile-web-app-capable" content="yes" />
30
30
  <meta name="apple-mobile-web-app-status-bar-style" content="default" />
31
- <meta name="apple-mobile-web-app-title" content="Digital KPI Platform" />
31
+ <meta name="apple-mobile-web-app-title" content="Digital platform-based KPI Navigator" />
32
32
 
33
33
  <!-- Homescreen icons -->
34
34
  <link rel="apple-touch-icon" href="/assets/manifest/icon-48x48.png" />
@@ -46,7 +46,7 @@
46
46
  <meta name="twitter:card" content="summary" />
47
47
  <meta name="twitter:site" content="@username" />
48
48
  <meta property="og:type" content="website" />
49
- <meta property="og:site_name" content="Digital KPI Platform, Build Smarter with Every Metric" />
49
+ <meta property="og:site_name" content="Digital platform-based KPI Navigator, Build Smarter with Every Metric" />
50
50
  <meta property="og:image" content="/assets/manifest/image-metaog.png" />
51
51
 
52
52
  <!-- Performance tip: hint to the browser to start the handshake for the fonts site -->
@@ -61,10 +61,5 @@
61
61
  <body class="light">
62
62
  <things-app></things-app>
63
63
  <noscript> Please enable JavaScript to view this website. </noscript>
64
- <!-- Load webcomponents-loader.js to check and load any polyfills your browser needs -->
65
- <script src="/node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js"></script>
66
- <script src="/node_modules/web-animations-js/web-animations-next.min.js"></script>
67
- <script src="/node_modules/@hatiolab/things-scene/things-scene-min.js"></script>
68
- <!-- Built with love using PWA Starter Kit -->
69
64
  </body>
70
65
  </html>
@@ -1 +1 @@
1
- # Digital Digital KPI Platform
1
+ # Digital Digital platform-based KPI Navigator
Binary file
@@ -1,7 +1,7 @@
1
1
  {
2
- "name": "Digital KPI Platform",
2
+ "name": "Digital platform-based KPI Navigator",
3
3
  "short_name": "dkpi",
4
- "description": "Digital KPI Platform, Build Smarter with Every Metric",
4
+ "description": "Digital platform-based KPI Navigator, Build Smarter with Every Metric",
5
5
  "icons": [
6
6
  {
7
7
  "src": "manifest/icon-192x192.png",
@@ -1,5 +1,6 @@
1
1
  module.exports = {
2
- subdomain: 'system',
2
+ subdomain: null,
3
+ domainTypes: ['domain', 'project'],
3
4
  applianceJwtExpiresIn: '10y',
4
5
  /* database field encryption key : 32 bytes - must be changed by every installation */
5
6
  dataEncryptionKey: 'V6g5oHJZb7KcazJyL6cM95XvIDouon5b',
@@ -1,5 +1,6 @@
1
1
  module.exports = {
2
- subdomain: 'system',
2
+ subdomain: null,
3
+ domainTypes: ['domain', 'project'],
3
4
  applianceJwtExpiresIn: '10y',
4
5
  /* database field encryption key : 32 bytes - must be changed by every installation */
5
6
  dataEncryptionKey: 'V6g5oHJZb7KcazJyL6cM95XvIDouon5b',