@soddong/agentic-domain-methodology 0.11.1

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 (90) hide show
  1. package/.tbls.yml +64 -0
  2. package/CHANGELOG.md +97 -0
  3. package/README.md +501 -0
  4. package/dist/database.d.ts +8 -0
  5. package/dist/database.d.ts.map +1 -0
  6. package/dist/database.js +76 -0
  7. package/dist/database.js.map +1 -0
  8. package/dist/fixtures.d.ts +13 -0
  9. package/dist/fixtures.d.ts.map +1 -0
  10. package/dist/fixtures.js +413 -0
  11. package/dist/fixtures.js.map +1 -0
  12. package/dist/index.d.ts +31 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +19 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/repositories.d.ts +54 -0
  17. package/dist/repositories.d.ts.map +1 -0
  18. package/dist/repositories.js +652 -0
  19. package/dist/repositories.js.map +1 -0
  20. package/dist/seed-apply.d.ts +20 -0
  21. package/dist/seed-apply.d.ts.map +1 -0
  22. package/dist/seed-apply.js +728 -0
  23. package/dist/seed-apply.js.map +1 -0
  24. package/dist/service.d.ts +107 -0
  25. package/dist/service.d.ts.map +1 -0
  26. package/dist/service.js +225 -0
  27. package/dist/service.js.map +1 -0
  28. package/dist/types.d.ts +356 -0
  29. package/dist/types.d.ts.map +1 -0
  30. package/dist/types.js +2 -0
  31. package/dist/types.js.map +1 -0
  32. package/dist/validators.d.ts +17 -0
  33. package/dist/validators.d.ts.map +1 -0
  34. package/dist/validators.js +297 -0
  35. package/dist/validators.js.map +1 -0
  36. package/docs/build.md +47 -0
  37. package/docs/configuration.md +33 -0
  38. package/docs/delivery.md +52 -0
  39. package/docs/operations.md +55 -0
  40. package/docs/publishing.md +84 -0
  41. package/docs/schema/generated/README.md +39 -0
  42. package/docs/schema/generated/methodology_activities.md +121 -0
  43. package/docs/schema/generated/methodology_activities.svg +143 -0
  44. package/docs/schema/generated/methodology_activity_artifact_requirements.md +129 -0
  45. package/docs/schema/generated/methodology_activity_artifact_requirements.svg +52 -0
  46. package/docs/schema/generated/methodology_activity_criteria.md +112 -0
  47. package/docs/schema/generated/methodology_activity_criteria.svg +52 -0
  48. package/docs/schema/generated/methodology_baseline_requirements.md +103 -0
  49. package/docs/schema/generated/methodology_baseline_requirements.svg +27 -0
  50. package/docs/schema/generated/methodology_code_groups.md +70 -0
  51. package/docs/schema/generated/methodology_code_groups.svg +49 -0
  52. package/docs/schema/generated/methodology_codes.md +88 -0
  53. package/docs/schema/generated/methodology_codes.svg +49 -0
  54. package/docs/schema/generated/methodology_common_blueprint_policies.md +104 -0
  55. package/docs/schema/generated/methodology_common_blueprint_policies.svg +72 -0
  56. package/docs/schema/generated/methodology_common_blueprint_policy_nodes.md +118 -0
  57. package/docs/schema/generated/methodology_common_blueprint_policy_nodes.svg +59 -0
  58. package/docs/schema/generated/methodology_handoff_requirements.md +130 -0
  59. package/docs/schema/generated/methodology_handoff_requirements.svg +27 -0
  60. package/docs/schema/generated/methodology_lifecycles.md +105 -0
  61. package/docs/schema/generated/methodology_lifecycles.svg +71 -0
  62. package/docs/schema/generated/methodology_methodologies.md +92 -0
  63. package/docs/schema/generated/methodology_methodologies.svg +92 -0
  64. package/docs/schema/generated/methodology_phase_processes.md +106 -0
  65. package/docs/schema/generated/methodology_phase_processes.svg +77 -0
  66. package/docs/schema/generated/methodology_phases.md +107 -0
  67. package/docs/schema/generated/methodology_phases.svg +77 -0
  68. package/docs/schema/generated/methodology_processes.md +98 -0
  69. package/docs/schema/generated/methodology_processes.svg +118 -0
  70. package/docs/schema/generated/methodology_schema_migrations.md +52 -0
  71. package/docs/schema/generated/methodology_schema_migrations.svg +27 -0
  72. package/docs/schema/generated/methodology_stage_activities.md +106 -0
  73. package/docs/schema/generated/methodology_stage_activities.svg +77 -0
  74. package/docs/schema/generated/methodology_stage_artifact_requirements.md +109 -0
  75. package/docs/schema/generated/methodology_stage_artifact_requirements.svg +52 -0
  76. package/docs/schema/generated/methodology_stage_criteria.md +112 -0
  77. package/docs/schema/generated/methodology_stage_criteria.svg +52 -0
  78. package/docs/schema/generated/methodology_stages.md +117 -0
  79. package/docs/schema/generated/methodology_stages.svg +121 -0
  80. package/docs/schema/generated/methodology_steps.md +105 -0
  81. package/docs/schema/generated/methodology_steps.svg +52 -0
  82. package/docs/schema/generated/methodology_trace_policies.md +121 -0
  83. package/docs/schema/generated/methodology_trace_policies.svg +27 -0
  84. package/docs/schema/generated/schema.json +4253 -0
  85. package/docs/schema/generated/schema.mmd +296 -0
  86. package/docs/schema/generated/schema.svg +446 -0
  87. package/docs/schema/migrations.md +24 -0
  88. package/docs/usage.md +39 -0
  89. package/package.json +29 -0
  90. package/src/database/migrations/0001_methodology_base.sql +1190 -0
@@ -0,0 +1,1190 @@
1
+ PRAGMA foreign_keys = ON;
2
+
3
+ -- methodology 패키지의 migration 적용 이력을 관리한다.
4
+ CREATE TABLE IF NOT EXISTS methodology_schema_migrations (
5
+ -- migration 식별자
6
+ migration_id VARCHAR(128) PRIMARY KEY,
7
+
8
+ -- migration 이름
9
+ migration_name VARCHAR(256) NOT NULL,
10
+
11
+ -- 적용 시각
12
+ applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
13
+ );
14
+
15
+ -- 코드 그룹을 정의한다.
16
+ CREATE TABLE IF NOT EXISTS methodology_code_groups (
17
+ -- 코드 그룹 식별자
18
+ code_group_code VARCHAR(64) PRIMARY KEY,
19
+
20
+ -- 코드 그룹 한글명
21
+ code_group_name VARCHAR(128) NOT NULL,
22
+
23
+ -- 코드 그룹 설명
24
+ description TEXT,
25
+
26
+ -- 표시 정렬 순서
27
+ sort_order INTEGER NOT NULL DEFAULT 0,
28
+
29
+ -- 활성 여부. 1은 활성, 0은 비활성
30
+ is_active INTEGER NOT NULL DEFAULT 1
31
+ CHECK (is_active IN (0, 1)),
32
+
33
+ -- 생성 시각
34
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
35
+
36
+ -- 수정 시각
37
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
38
+ );
39
+
40
+ -- 코드 그룹별 코드 값을 정의한다.
41
+ CREATE TABLE IF NOT EXISTS methodology_codes (
42
+ -- 코드 그룹 식별자
43
+ code_group_code VARCHAR(64) NOT NULL,
44
+
45
+ -- 코드 값. lower_snake_case를 사용한다.
46
+ code VARCHAR(128) NOT NULL,
47
+
48
+ -- 코드 한글명
49
+ code_name VARCHAR(128) NOT NULL,
50
+
51
+ -- 코드 설명
52
+ description TEXT,
53
+
54
+ -- 표시 정렬 순서
55
+ sort_order INTEGER NOT NULL DEFAULT 0,
56
+
57
+ -- 활성 여부. 1은 활성, 0은 비활성
58
+ is_active INTEGER NOT NULL DEFAULT 1
59
+ CHECK (is_active IN (0, 1)),
60
+
61
+ -- 확장 메타데이터
62
+ metadata_json JSON
63
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
64
+
65
+ -- 생성 시각
66
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
67
+
68
+ -- 수정 시각
69
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
70
+
71
+ PRIMARY KEY (code_group_code, code),
72
+
73
+ FOREIGN KEY (code_group_code)
74
+ REFERENCES methodology_code_groups (code_group_code)
75
+ ON DELETE CASCADE
76
+ );
77
+
78
+ -- 방법론 정의의 최상위 versioned definition을 관리한다.
79
+ CREATE TABLE IF NOT EXISTS methodology_methodologies (
80
+ -- 방법론 식별자
81
+ methodology_id CHAR(36) PRIMARY KEY
82
+ CHECK (length(methodology_id) = 36),
83
+
84
+ -- 방법론 코드
85
+ methodology_code VARCHAR(128) NOT NULL,
86
+
87
+ -- 방법론명
88
+ methodology_name VARCHAR(256) NOT NULL,
89
+
90
+ -- 방법론 정의 데이터 버전
91
+ methodology_version VARCHAR(64) NOT NULL,
92
+
93
+ -- 방법론 상태 코드
94
+ methodology_status_code VARCHAR(32) NOT NULL DEFAULT 'draft'
95
+ CHECK (methodology_status_code IN ('draft', 'active', 'deprecated', 'archived')),
96
+
97
+ -- 방법론 설명
98
+ description TEXT,
99
+
100
+ -- 활성 여부. 1은 활성, 0은 비활성
101
+ is_active INTEGER NOT NULL DEFAULT 1
102
+ CHECK (is_active IN (0, 1)),
103
+
104
+ -- 생성 시각
105
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
106
+
107
+ -- 수정 시각
108
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
109
+
110
+ -- 확장 메타데이터
111
+ metadata_json JSON
112
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
113
+
114
+ UNIQUE (methodology_code, methodology_version)
115
+ );
116
+
117
+ -- 방법론 차원의 공통 문서 구조 정책을 관리한다.
118
+ CREATE TABLE IF NOT EXISTS methodology_common_blueprint_policies (
119
+ -- common blueprint policy 식별자
120
+ common_blueprint_policy_id CHAR(36) PRIMARY KEY
121
+ CHECK (length(common_blueprint_policy_id) = 36),
122
+
123
+ -- 소속 방법론 식별자
124
+ methodology_id CHAR(36) NOT NULL
125
+ CHECK (length(methodology_id) = 36),
126
+
127
+ -- policy 코드
128
+ policy_code VARCHAR(128) NOT NULL,
129
+
130
+ -- policy 이름
131
+ policy_name VARCHAR(256) NOT NULL,
132
+
133
+ -- 적용 대상 Artifact Standard 유형 코드. NULL이면 방법론 기본 공통 정책이다.
134
+ applies_to_standard_type_code VARCHAR(64),
135
+
136
+ -- 기본 policy 여부
137
+ is_default INTEGER NOT NULL DEFAULT 0
138
+ CHECK (is_default IN (0, 1)),
139
+
140
+ -- policy 상태 코드
141
+ status_code VARCHAR(32) NOT NULL DEFAULT 'DRAFT'
142
+ CHECK (status_code IN ('DRAFT', 'ACTIVE', 'DEPRECATED', 'ARCHIVED')),
143
+
144
+ -- 활성 여부
145
+ is_active INTEGER NOT NULL DEFAULT 1
146
+ CHECK (is_active IN (0, 1)),
147
+
148
+ -- 생성 시각
149
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
150
+
151
+ -- 수정 시각
152
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
153
+
154
+ -- 확장 메타데이터
155
+ metadata_json JSON
156
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
157
+
158
+ FOREIGN KEY (methodology_id)
159
+ REFERENCES methodology_methodologies (methodology_id)
160
+ ON DELETE CASCADE,
161
+
162
+ UNIQUE (methodology_id, policy_code)
163
+ );
164
+
165
+ -- 방법론 공통 문서 구조 정책의 node를 관리한다.
166
+ CREATE TABLE IF NOT EXISTS methodology_common_blueprint_policy_nodes (
167
+ -- common blueprint policy node 식별자
168
+ common_blueprint_policy_node_id CHAR(36) PRIMARY KEY
169
+ CHECK (length(common_blueprint_policy_node_id) = 36),
170
+
171
+ -- 소속 common blueprint policy 식별자
172
+ common_blueprint_policy_id CHAR(36) NOT NULL
173
+ CHECK (length(common_blueprint_policy_id) = 36),
174
+
175
+ -- 상위 common blueprint policy node 식별자
176
+ parent_policy_node_id CHAR(36)
177
+ CHECK (parent_policy_node_id IS NULL OR length(parent_policy_node_id) = 36),
178
+
179
+ -- node 코드
180
+ node_code VARCHAR(128) NOT NULL,
181
+
182
+ -- node 제목
183
+ node_title VARCHAR(256) NOT NULL,
184
+
185
+ -- node 유형 코드
186
+ node_type_code VARCHAR(32) NOT NULL
187
+ CHECK (node_type_code IN ('FRONT_MATTER', 'BACK_MATTER', 'BODY_POLICY')),
188
+
189
+ -- node level
190
+ node_level INTEGER NOT NULL
191
+ CHECK (node_level BETWEEN 1 AND 7),
192
+
193
+ -- 필수 여부
194
+ is_required INTEGER NOT NULL DEFAULT 0
195
+ CHECK (is_required IN (0, 1)),
196
+
197
+ -- 정렬 순서
198
+ sort_order INTEGER NOT NULL DEFAULT 0,
199
+
200
+ -- 생성 시각
201
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
202
+
203
+ -- 수정 시각
204
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
205
+
206
+ -- 확장 메타데이터
207
+ metadata_json JSON
208
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
209
+
210
+ FOREIGN KEY (common_blueprint_policy_id)
211
+ REFERENCES methodology_common_blueprint_policies (common_blueprint_policy_id)
212
+ ON DELETE CASCADE,
213
+
214
+ FOREIGN KEY (parent_policy_node_id)
215
+ REFERENCES methodology_common_blueprint_policy_nodes (common_blueprint_policy_node_id)
216
+ ON DELETE CASCADE,
217
+
218
+ UNIQUE (common_blueprint_policy_id, node_code),
219
+ UNIQUE (common_blueprint_policy_id, parent_policy_node_id, sort_order)
220
+ );
221
+
222
+ -- 방법론 생명주기 모델을 관리한다.
223
+ CREATE TABLE IF NOT EXISTS methodology_lifecycles (
224
+ -- lifecycle 식별자
225
+ lifecycle_id CHAR(36) PRIMARY KEY
226
+ CHECK (length(lifecycle_id) = 36),
227
+
228
+ -- 소속 방법론 식별자
229
+ methodology_id CHAR(36) NOT NULL
230
+ CHECK (length(methodology_id) = 36),
231
+
232
+ -- lifecycle 코드
233
+ lifecycle_code VARCHAR(128) NOT NULL,
234
+
235
+ -- lifecycle 이름
236
+ lifecycle_name VARCHAR(256) NOT NULL,
237
+
238
+ -- lifecycle 유형 코드
239
+ lifecycle_type_code VARCHAR(64) NOT NULL DEFAULT 'default',
240
+
241
+ -- 설명
242
+ description TEXT,
243
+
244
+ -- 표시 정렬 순서
245
+ sort_order INTEGER NOT NULL DEFAULT 0,
246
+
247
+ -- 활성 여부
248
+ is_active INTEGER NOT NULL DEFAULT 1
249
+ CHECK (is_active IN (0, 1)),
250
+
251
+ -- 생성 시각
252
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
253
+
254
+ -- 수정 시각
255
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
256
+
257
+ -- 확장 메타데이터
258
+ metadata_json JSON
259
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
260
+
261
+ FOREIGN KEY (methodology_id)
262
+ REFERENCES methodology_methodologies (methodology_id)
263
+ ON DELETE CASCADE,
264
+
265
+ UNIQUE (methodology_id, lifecycle_code),
266
+ UNIQUE (methodology_id, sort_order)
267
+ );
268
+
269
+ -- lifecycle 내 큰 구간을 관리한다.
270
+ CREATE TABLE IF NOT EXISTS methodology_phases (
271
+ -- phase 식별자
272
+ phase_id CHAR(36) PRIMARY KEY
273
+ CHECK (length(phase_id) = 36),
274
+
275
+ -- 소속 lifecycle 식별자
276
+ lifecycle_id CHAR(36) NOT NULL
277
+ CHECK (length(lifecycle_id) = 36),
278
+
279
+ -- phase 코드
280
+ phase_code VARCHAR(128) NOT NULL,
281
+
282
+ -- phase 이름
283
+ phase_name VARCHAR(256) NOT NULL,
284
+
285
+ -- phase 목적
286
+ phase_purpose TEXT,
287
+
288
+ -- 표시 정렬 순서
289
+ sort_order INTEGER NOT NULL DEFAULT 0,
290
+
291
+ -- 필수 여부
292
+ is_required INTEGER NOT NULL DEFAULT 1
293
+ CHECK (is_required IN (0, 1)),
294
+
295
+ -- 활성 여부
296
+ is_active INTEGER NOT NULL DEFAULT 1
297
+ CHECK (is_active IN (0, 1)),
298
+
299
+ -- 생성 시각
300
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
301
+
302
+ -- 수정 시각
303
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
304
+
305
+ -- 확장 메타데이터
306
+ metadata_json JSON
307
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
308
+
309
+ FOREIGN KEY (lifecycle_id)
310
+ REFERENCES methodology_lifecycles (lifecycle_id)
311
+ ON DELETE CASCADE,
312
+
313
+ UNIQUE (lifecycle_id, phase_code),
314
+ UNIQUE (lifecycle_id, sort_order)
315
+ );
316
+
317
+ -- 재사용 가능한 수행 절차를 관리한다.
318
+ CREATE TABLE IF NOT EXISTS methodology_processes (
319
+ -- process 식별자
320
+ process_id CHAR(36) PRIMARY KEY
321
+ CHECK (length(process_id) = 36),
322
+
323
+ -- 소속 방법론 식별자
324
+ methodology_id CHAR(36) NOT NULL
325
+ CHECK (length(methodology_id) = 36),
326
+
327
+ -- process 코드
328
+ process_code VARCHAR(128) NOT NULL,
329
+
330
+ -- process 이름
331
+ process_name VARCHAR(256) NOT NULL,
332
+
333
+ -- process 목적
334
+ process_purpose TEXT,
335
+
336
+ -- process 유형 코드
337
+ process_type_code VARCHAR(64) NOT NULL DEFAULT 'default',
338
+
339
+ -- 활성 여부
340
+ is_active INTEGER NOT NULL DEFAULT 1
341
+ CHECK (is_active IN (0, 1)),
342
+
343
+ -- 생성 시각
344
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
345
+
346
+ -- 수정 시각
347
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
348
+
349
+ -- 확장 메타데이터
350
+ metadata_json JSON
351
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
352
+
353
+ FOREIGN KEY (methodology_id)
354
+ REFERENCES methodology_methodologies (methodology_id)
355
+ ON DELETE CASCADE,
356
+
357
+ UNIQUE (methodology_id, process_code)
358
+ );
359
+
360
+ -- phase에서 어떤 process를 어떤 순서로 사용할지 관리한다.
361
+ CREATE TABLE IF NOT EXISTS methodology_phase_processes (
362
+ -- phase process 배치 식별자
363
+ phase_process_id CHAR(36) PRIMARY KEY
364
+ CHECK (length(phase_process_id) = 36),
365
+
366
+ -- 대상 phase 식별자
367
+ phase_id CHAR(36) NOT NULL
368
+ CHECK (length(phase_id) = 36),
369
+
370
+ -- 배치할 process 식별자
371
+ process_id CHAR(36) NOT NULL
372
+ CHECK (length(process_id) = 36),
373
+
374
+ -- phase 내 process 순서
375
+ sort_order INTEGER NOT NULL DEFAULT 0,
376
+
377
+ -- 필수 수행 여부
378
+ is_required INTEGER NOT NULL DEFAULT 1
379
+ CHECK (is_required IN (0, 1)),
380
+
381
+ -- tailoring 허용 여부
382
+ tailoring_allowed INTEGER NOT NULL DEFAULT 0
383
+ CHECK (tailoring_allowed IN (0, 1)),
384
+
385
+ -- 생성 시각
386
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
387
+
388
+ -- 수정 시각
389
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
390
+
391
+ -- 확장 메타데이터
392
+ metadata_json JSON
393
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
394
+
395
+ FOREIGN KEY (phase_id)
396
+ REFERENCES methodology_phases (phase_id)
397
+ ON DELETE CASCADE,
398
+
399
+ FOREIGN KEY (process_id)
400
+ REFERENCES methodology_processes (process_id)
401
+ ON DELETE CASCADE,
402
+
403
+ UNIQUE (phase_id, process_id),
404
+ UNIQUE (phase_id, sort_order)
405
+ );
406
+
407
+ -- process 내부의 기본 수행 활동을 관리한다.
408
+ CREATE TABLE IF NOT EXISTS methodology_activities (
409
+ -- activity 식별자
410
+ activity_id CHAR(36) PRIMARY KEY
411
+ CHECK (length(activity_id) = 36),
412
+
413
+ -- 소속 process 식별자
414
+ process_id CHAR(36) NOT NULL
415
+ CHECK (length(process_id) = 36),
416
+
417
+ -- activity 코드
418
+ activity_code VARCHAR(128) NOT NULL,
419
+
420
+ -- activity 이름
421
+ activity_name VARCHAR(256) NOT NULL,
422
+
423
+ -- activity 목적
424
+ activity_purpose TEXT,
425
+
426
+ -- activity 유형 코드
427
+ activity_type_code VARCHAR(64) NOT NULL DEFAULT 'default',
428
+
429
+ -- 책임 role 코드
430
+ responsible_role_code VARCHAR(64),
431
+
432
+ -- process 내 activity 순서
433
+ sort_order INTEGER NOT NULL DEFAULT 0,
434
+
435
+ -- 필수 수행 여부
436
+ is_required INTEGER NOT NULL DEFAULT 1
437
+ CHECK (is_required IN (0, 1)),
438
+
439
+ -- tailoring 허용 여부
440
+ tailoring_allowed INTEGER NOT NULL DEFAULT 0
441
+ CHECK (tailoring_allowed IN (0, 1)),
442
+
443
+ -- 활성 여부
444
+ is_active INTEGER NOT NULL DEFAULT 1
445
+ CHECK (is_active IN (0, 1)),
446
+
447
+ -- 생성 시각
448
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
449
+
450
+ -- 수정 시각
451
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
452
+
453
+ -- 확장 메타데이터
454
+ metadata_json JSON
455
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
456
+
457
+ FOREIGN KEY (process_id)
458
+ REFERENCES methodology_processes (process_id)
459
+ ON DELETE CASCADE,
460
+
461
+ UNIQUE (process_id, activity_code),
462
+ UNIQUE (process_id, sort_order)
463
+ );
464
+
465
+ -- activity 하위 순차 절차를 관리한다.
466
+ CREATE TABLE IF NOT EXISTS methodology_steps (
467
+ -- step 식별자
468
+ step_id CHAR(36) PRIMARY KEY
469
+ CHECK (length(step_id) = 36),
470
+
471
+ -- 소속 activity 식별자
472
+ activity_id CHAR(36) NOT NULL
473
+ CHECK (length(activity_id) = 36),
474
+
475
+ -- step 코드
476
+ step_code VARCHAR(128) NOT NULL,
477
+
478
+ -- step 이름
479
+ step_name VARCHAR(256) NOT NULL,
480
+
481
+ -- 수행 절차 설명
482
+ step_instruction TEXT,
483
+
484
+ -- step 유형 코드
485
+ step_type_code VARCHAR(64) NOT NULL DEFAULT 'default',
486
+
487
+ -- 필수 여부
488
+ is_required INTEGER NOT NULL DEFAULT 1
489
+ CHECK (is_required IN (0, 1)),
490
+
491
+ -- activity 내 step 순서
492
+ sort_order INTEGER NOT NULL DEFAULT 0,
493
+
494
+ -- 생성 시각
495
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
496
+
497
+ -- 수정 시각
498
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
499
+
500
+ -- 확장 메타데이터
501
+ metadata_json JSON
502
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
503
+
504
+ FOREIGN KEY (activity_id)
505
+ REFERENCES methodology_activities (activity_id)
506
+ ON DELETE CASCADE,
507
+
508
+ UNIQUE (activity_id, step_code),
509
+ UNIQUE (activity_id, sort_order)
510
+ );
511
+
512
+ -- process 내부 activity grouping, gate, 기준선, 전환 구간을 관리한다.
513
+ CREATE TABLE IF NOT EXISTS methodology_stages (
514
+ -- stage 식별자
515
+ stage_id CHAR(36) PRIMARY KEY
516
+ CHECK (length(stage_id) = 36),
517
+
518
+ -- 소속 process 식별자
519
+ process_id CHAR(36) NOT NULL
520
+ CHECK (length(process_id) = 36),
521
+
522
+ -- stage 코드
523
+ stage_code VARCHAR(128) NOT NULL,
524
+
525
+ -- stage 이름
526
+ stage_name VARCHAR(256) NOT NULL,
527
+
528
+ -- stage 목표
529
+ stage_objective TEXT,
530
+
531
+ -- stage 유형 코드
532
+ stage_type_code VARCHAR(64) NOT NULL DEFAULT 'default',
533
+
534
+ -- process 내 stage 순서
535
+ sort_order INTEGER NOT NULL DEFAULT 0,
536
+
537
+ -- 필수 여부
538
+ is_required INTEGER NOT NULL DEFAULT 1
539
+ CHECK (is_required IN (0, 1)),
540
+
541
+ -- tailoring 허용 여부
542
+ tailoring_allowed INTEGER NOT NULL DEFAULT 0
543
+ CHECK (tailoring_allowed IN (0, 1)),
544
+
545
+ -- 활성 여부
546
+ is_active INTEGER NOT NULL DEFAULT 1
547
+ CHECK (is_active IN (0, 1)),
548
+
549
+ -- 생성 시각
550
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
551
+
552
+ -- 수정 시각
553
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
554
+
555
+ -- 확장 메타데이터
556
+ metadata_json JSON
557
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
558
+
559
+ FOREIGN KEY (process_id)
560
+ REFERENCES methodology_processes (process_id)
561
+ ON DELETE CASCADE,
562
+
563
+ UNIQUE (process_id, stage_code),
564
+ UNIQUE (process_id, sort_order)
565
+ );
566
+
567
+ -- stage와 activity의 포함 관계를 관리한다.
568
+ CREATE TABLE IF NOT EXISTS methodology_stage_activities (
569
+ -- stage activity 배치 식별자
570
+ stage_activity_id CHAR(36) PRIMARY KEY
571
+ CHECK (length(stage_activity_id) = 36),
572
+
573
+ -- stage 식별자
574
+ stage_id CHAR(36) NOT NULL
575
+ CHECK (length(stage_id) = 36),
576
+
577
+ -- activity 식별자
578
+ activity_id CHAR(36) NOT NULL
579
+ CHECK (length(activity_id) = 36),
580
+
581
+ -- stage 내 activity 순서
582
+ sort_order INTEGER NOT NULL DEFAULT 0,
583
+
584
+ -- 필수 여부
585
+ is_required INTEGER NOT NULL DEFAULT 1
586
+ CHECK (is_required IN (0, 1)),
587
+
588
+ -- tailoring 허용 여부
589
+ tailoring_allowed INTEGER NOT NULL DEFAULT 0
590
+ CHECK (tailoring_allowed IN (0, 1)),
591
+
592
+ -- 생성 시각
593
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
594
+
595
+ -- 수정 시각
596
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
597
+
598
+ -- 확장 메타데이터
599
+ metadata_json JSON
600
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
601
+
602
+ FOREIGN KEY (stage_id)
603
+ REFERENCES methodology_stages (stage_id)
604
+ ON DELETE CASCADE,
605
+
606
+ FOREIGN KEY (activity_id)
607
+ REFERENCES methodology_activities (activity_id)
608
+ ON DELETE CASCADE,
609
+
610
+ UNIQUE (stage_id, activity_id),
611
+ UNIQUE (stage_id, sort_order)
612
+ );
613
+
614
+ -- activity의 input/output/supporting 산출물 요구를 관리한다.
615
+ CREATE TABLE IF NOT EXISTS methodology_activity_artifact_requirements (
616
+ -- activity artifact requirement 식별자
617
+ activity_artifact_requirement_id CHAR(36) PRIMARY KEY
618
+ CHECK (length(activity_artifact_requirement_id) = 36),
619
+
620
+ -- 소속 activity 식별자
621
+ activity_id CHAR(36) NOT NULL
622
+ CHECK (length(activity_id) = 36),
623
+
624
+ -- artifact standard 코드
625
+ artifact_standard_code VARCHAR(128) NOT NULL,
626
+
627
+ -- artifact standard 버전
628
+ artifact_standard_version VARCHAR(64) NOT NULL,
629
+
630
+ -- artifact-standard가 정의한 document component 코드. 산출물 전체가 아니라 특정 본문/부록 구성 단위를 대상으로 할 때 사용한다.
631
+ artifact_component_code VARCHAR(128),
632
+
633
+ -- artifact-standard document component 역할 코드. 예: MAIN, APPENDIX
634
+ artifact_component_role_code VARCHAR(64),
635
+
636
+ -- 산출물 요구 역할 코드
637
+ requirement_role_code VARCHAR(32) NOT NULL
638
+ CHECK (requirement_role_code IN ('input', 'output', 'supporting')),
639
+
640
+ -- output activity가 산출물을 어떻게 다루는지 나타내는 사용 코드
641
+ output_usage_code VARCHAR(32)
642
+ CHECK (output_usage_code IS NULL OR output_usage_code IN ('produces', 'refines', 'reviews', 'consolidates')),
643
+
644
+ -- activity 대표 output 여부
645
+ is_primary INTEGER NOT NULL DEFAULT 0
646
+ CHECK (is_primary IN (0, 1)),
647
+
648
+ -- 필수 여부
649
+ is_required INTEGER NOT NULL DEFAULT 1
650
+ CHECK (is_required IN (0, 1)),
651
+
652
+ -- validation 필수 여부
653
+ validation_required INTEGER NOT NULL DEFAULT 0
654
+ CHECK (validation_required IN (0, 1)),
655
+
656
+ -- activity 내 정렬 순서
657
+ sort_order INTEGER NOT NULL DEFAULT 0,
658
+
659
+ -- 생성 시각
660
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
661
+
662
+ -- 수정 시각
663
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
664
+
665
+ -- 확장 메타데이터
666
+ metadata_json JSON
667
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
668
+
669
+ FOREIGN KEY (activity_id)
670
+ REFERENCES methodology_activities (activity_id)
671
+ ON DELETE CASCADE,
672
+
673
+ UNIQUE (activity_id, sort_order)
674
+ );
675
+
676
+ -- stage gate, baseline, handoff, approval에 필요한 추가 산출물 요구를 관리한다.
677
+ CREATE TABLE IF NOT EXISTS methodology_stage_artifact_requirements (
678
+ -- stage artifact requirement 식별자
679
+ stage_artifact_requirement_id CHAR(36) PRIMARY KEY
680
+ CHECK (length(stage_artifact_requirement_id) = 36),
681
+
682
+ -- 소속 stage 식별자
683
+ stage_id CHAR(36) NOT NULL
684
+ CHECK (length(stage_id) = 36),
685
+
686
+ -- artifact standard 코드
687
+ artifact_standard_code VARCHAR(128) NOT NULL,
688
+
689
+ -- artifact standard 버전
690
+ artifact_standard_version VARCHAR(64) NOT NULL,
691
+
692
+ -- stage 산출물 요구 역할 코드
693
+ requirement_role_code VARCHAR(32) NOT NULL
694
+ CHECK (requirement_role_code IN ('required', 'supporting')),
695
+
696
+ -- 필수 여부
697
+ is_required INTEGER NOT NULL DEFAULT 1
698
+ CHECK (is_required IN (0, 1)),
699
+
700
+ -- validation 필수 여부
701
+ validation_required INTEGER NOT NULL DEFAULT 0
702
+ CHECK (validation_required IN (0, 1)),
703
+
704
+ -- stage 내 정렬 순서
705
+ sort_order INTEGER NOT NULL DEFAULT 0,
706
+
707
+ -- 생성 시각
708
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
709
+
710
+ -- 수정 시각
711
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
712
+
713
+ -- 확장 메타데이터
714
+ metadata_json JSON
715
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
716
+
717
+ FOREIGN KEY (stage_id)
718
+ REFERENCES methodology_stages (stage_id)
719
+ ON DELETE CASCADE,
720
+
721
+ UNIQUE (stage_id, artifact_standard_code, artifact_standard_version, requirement_role_code),
722
+ UNIQUE (stage_id, sort_order)
723
+ );
724
+
725
+ -- stage의 entry, exit, gate 판단 기준을 관리한다.
726
+ CREATE TABLE IF NOT EXISTS methodology_stage_criteria (
727
+ -- stage criteria 식별자
728
+ stage_criteria_id CHAR(36) PRIMARY KEY
729
+ CHECK (length(stage_criteria_id) = 36),
730
+
731
+ -- 소속 stage 식별자
732
+ stage_id CHAR(36) NOT NULL
733
+ CHECK (length(stage_id) = 36),
734
+
735
+ -- criteria 유형 코드
736
+ criteria_type_code VARCHAR(32) NOT NULL
737
+ CHECK (criteria_type_code IN ('entry', 'exit', 'gate')),
738
+
739
+ -- criteria 이름
740
+ criteria_name VARCHAR(256) NOT NULL,
741
+
742
+ -- criteria 내용
743
+ criteria_text TEXT NOT NULL,
744
+
745
+ -- 필수 여부
746
+ is_required INTEGER NOT NULL DEFAULT 1
747
+ CHECK (is_required IN (0, 1)),
748
+
749
+ -- validation 필수 여부
750
+ validation_required INTEGER NOT NULL DEFAULT 0
751
+ CHECK (validation_required IN (0, 1)),
752
+
753
+ -- 심각도 코드
754
+ severity_code VARCHAR(32) NOT NULL DEFAULT 'error'
755
+ CHECK (severity_code IN ('info', 'warning', 'error', 'critical')),
756
+
757
+ -- stage criteria 정렬 순서
758
+ sort_order INTEGER NOT NULL DEFAULT 0,
759
+
760
+ -- 생성 시각
761
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
762
+
763
+ -- 수정 시각
764
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
765
+
766
+ -- 확장 메타데이터
767
+ metadata_json JSON
768
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
769
+
770
+ FOREIGN KEY (stage_id)
771
+ REFERENCES methodology_stages (stage_id)
772
+ ON DELETE CASCADE,
773
+
774
+ UNIQUE (stage_id, criteria_type_code, sort_order)
775
+ );
776
+
777
+ -- activity의 completion 판단 기준을 관리한다.
778
+ CREATE TABLE IF NOT EXISTS methodology_activity_criteria (
779
+ -- activity criteria 식별자
780
+ activity_criteria_id CHAR(36) PRIMARY KEY
781
+ CHECK (length(activity_criteria_id) = 36),
782
+
783
+ -- 소속 activity 식별자
784
+ activity_id CHAR(36) NOT NULL
785
+ CHECK (length(activity_id) = 36),
786
+
787
+ -- criteria 유형 코드
788
+ criteria_type_code VARCHAR(32) NOT NULL DEFAULT 'completion'
789
+ CHECK (criteria_type_code = 'completion'),
790
+
791
+ -- criteria 이름
792
+ criteria_name VARCHAR(256) NOT NULL,
793
+
794
+ -- criteria 내용
795
+ criteria_text TEXT NOT NULL,
796
+
797
+ -- 필수 여부
798
+ is_required INTEGER NOT NULL DEFAULT 1
799
+ CHECK (is_required IN (0, 1)),
800
+
801
+ -- validation 필수 여부
802
+ validation_required INTEGER NOT NULL DEFAULT 0
803
+ CHECK (validation_required IN (0, 1)),
804
+
805
+ -- 심각도 코드
806
+ severity_code VARCHAR(32) NOT NULL DEFAULT 'error'
807
+ CHECK (severity_code IN ('info', 'warning', 'error', 'critical')),
808
+
809
+ -- activity criteria 정렬 순서
810
+ sort_order INTEGER NOT NULL DEFAULT 0,
811
+
812
+ -- 생성 시각
813
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
814
+
815
+ -- 수정 시각
816
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
817
+
818
+ -- 확장 메타데이터
819
+ metadata_json JSON
820
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
821
+
822
+ FOREIGN KEY (activity_id)
823
+ REFERENCES methodology_activities (activity_id)
824
+ ON DELETE CASCADE,
825
+
826
+ UNIQUE (activity_id, sort_order)
827
+ );
828
+
829
+ -- phase, process, stage, activity 간 전달 요구를 관리한다.
830
+ CREATE TABLE IF NOT EXISTS methodology_handoff_requirements (
831
+ -- handoff requirement 식별자
832
+ handoff_requirement_id CHAR(36) PRIMARY KEY
833
+ CHECK (length(handoff_requirement_id) = 36),
834
+
835
+ -- 전달 원천 scope 코드
836
+ source_scope_code VARCHAR(32) NOT NULL
837
+ CHECK (source_scope_code IN ('phase', 'process', 'stage', 'activity')),
838
+
839
+ -- 전달 원천 참조 식별자
840
+ source_ref_id CHAR(36) NOT NULL
841
+ CHECK (length(source_ref_id) = 36),
842
+
843
+ -- 전달 대상 scope 코드
844
+ target_scope_code VARCHAR(32) NOT NULL
845
+ CHECK (target_scope_code IN ('phase', 'process', 'stage', 'activity')),
846
+
847
+ -- 전달 대상 참조 식별자
848
+ target_ref_id CHAR(36) NOT NULL
849
+ CHECK (length(target_ref_id) = 36),
850
+
851
+ -- handoff 유형 코드
852
+ handoff_type_code VARCHAR(32) NOT NULL
853
+ CHECK (handoff_type_code IN ('artifact', 'issue', 'risk', 'decision', 'constraint', 'approval', 'context')),
854
+
855
+ -- handoff 항목명
856
+ handoff_item_name VARCHAR(256) NOT NULL,
857
+
858
+ -- handoff 설명
859
+ handoff_description TEXT,
860
+
861
+ -- artifact standard 코드. artifact 유형 handoff일 때 사용할 수 있다.
862
+ artifact_standard_code VARCHAR(128),
863
+
864
+ -- artifact standard 버전
865
+ artifact_standard_version VARCHAR(64),
866
+
867
+ -- 필수 여부
868
+ is_required INTEGER NOT NULL DEFAULT 1
869
+ CHECK (is_required IN (0, 1)),
870
+
871
+ -- validation 필수 여부
872
+ validation_required INTEGER NOT NULL DEFAULT 0
873
+ CHECK (validation_required IN (0, 1)),
874
+
875
+ -- 정렬 순서
876
+ sort_order INTEGER NOT NULL DEFAULT 0,
877
+
878
+ -- 생성 시각
879
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
880
+
881
+ -- 수정 시각
882
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
883
+
884
+ -- 확장 메타데이터
885
+ metadata_json JSON
886
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
887
+
888
+ CHECK (
889
+ (artifact_standard_code IS NULL AND artifact_standard_version IS NULL)
890
+ OR (artifact_standard_code IS NOT NULL AND artifact_standard_version IS NOT NULL)
891
+ )
892
+ );
893
+
894
+ -- baseline이 필요한 scope와 trigger를 관리한다.
895
+ CREATE TABLE IF NOT EXISTS methodology_baseline_requirements (
896
+ -- baseline requirement 식별자
897
+ baseline_requirement_id CHAR(36) PRIMARY KEY
898
+ CHECK (length(baseline_requirement_id) = 36),
899
+
900
+ -- baseline scope 코드
901
+ baseline_scope_code VARCHAR(32) NOT NULL
902
+ CHECK (baseline_scope_code IN ('phase', 'process', 'stage', 'activity')),
903
+
904
+ -- baseline scope 참조 식별자
905
+ baseline_scope_ref_id CHAR(36) NOT NULL
906
+ CHECK (length(baseline_scope_ref_id) = 36),
907
+
908
+ -- baseline trigger 코드
909
+ baseline_trigger_code VARCHAR(32) NOT NULL
910
+ CHECK (baseline_trigger_code IN ('entry', 'exit', 'gate', 'handoff', 'approval', 'manual')),
911
+
912
+ -- baseline 이름
913
+ baseline_name VARCHAR(256) NOT NULL,
914
+
915
+ -- baseline 설명
916
+ baseline_description TEXT,
917
+
918
+ -- 필수 여부
919
+ is_required INTEGER NOT NULL DEFAULT 1
920
+ CHECK (is_required IN (0, 1)),
921
+
922
+ -- validation 필수 여부
923
+ validation_required INTEGER NOT NULL DEFAULT 0
924
+ CHECK (validation_required IN (0, 1)),
925
+
926
+ -- 정렬 순서
927
+ sort_order INTEGER NOT NULL DEFAULT 0,
928
+
929
+ -- 생성 시각
930
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
931
+
932
+ -- 수정 시각
933
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
934
+
935
+ -- 확장 메타데이터
936
+ metadata_json JSON
937
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json))
938
+ );
939
+
940
+ -- 실제 trace link가 아니라 trace 필요 관계 정책을 관리한다.
941
+ CREATE TABLE IF NOT EXISTS methodology_trace_policies (
942
+ -- trace policy 식별자
943
+ trace_policy_id CHAR(36) PRIMARY KEY
944
+ CHECK (length(trace_policy_id) = 36),
945
+
946
+ -- policy 적용 scope 코드
947
+ policy_scope_code VARCHAR(32) NOT NULL
948
+ CHECK (policy_scope_code IN ('methodology', 'lifecycle', 'phase', 'process', 'stage', 'activity')),
949
+
950
+ -- policy 적용 scope 참조 식별자
951
+ policy_scope_ref_id CHAR(36) NOT NULL
952
+ CHECK (length(policy_scope_ref_id) = 36),
953
+
954
+ -- trace source scope 코드
955
+ source_scope_code VARCHAR(64) NOT NULL
956
+ CHECK (source_scope_code IN ('phase', 'process', 'stage', 'activity', 'artifact_requirement', 'artifact_standard')),
957
+
958
+ -- trace target scope 코드
959
+ target_scope_code VARCHAR(64) NOT NULL
960
+ CHECK (target_scope_code IN ('phase', 'process', 'stage', 'activity', 'artifact_requirement', 'artifact_standard')),
961
+
962
+ -- trace 유형 코드
963
+ trace_type_code VARCHAR(32) NOT NULL
964
+ CHECK (trace_type_code IN ('derives', 'produces', 'consumes', 'validates', 'hands_off', 'refines', 'impacts')),
965
+
966
+ -- policy 이름
967
+ policy_name VARCHAR(256) NOT NULL,
968
+
969
+ -- policy 설명
970
+ policy_description TEXT,
971
+
972
+ -- 필수 여부
973
+ is_required INTEGER NOT NULL DEFAULT 1
974
+ CHECK (is_required IN (0, 1)),
975
+
976
+ -- validation 필수 여부
977
+ validation_required INTEGER NOT NULL DEFAULT 0
978
+ CHECK (validation_required IN (0, 1)),
979
+
980
+ -- 심각도 코드
981
+ severity_code VARCHAR(32) NOT NULL DEFAULT 'error'
982
+ CHECK (severity_code IN ('info', 'warning', 'error', 'critical')),
983
+
984
+ -- 정렬 순서
985
+ sort_order INTEGER NOT NULL DEFAULT 0,
986
+
987
+ -- 생성 시각
988
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
989
+
990
+ -- 수정 시각
991
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
992
+
993
+ -- 확장 메타데이터
994
+ metadata_json JSON
995
+ CHECK (metadata_json IS NULL OR json_valid(metadata_json))
996
+ );
997
+
998
+ CREATE UNIQUE INDEX IF NOT EXISTS ux_methodology_activity_artifact_requirements_primary_output
999
+ ON methodology_activity_artifact_requirements (activity_id)
1000
+ WHERE is_primary = 1;
1001
+
1002
+ CREATE INDEX IF NOT EXISTS idx_methodology_lifecycles_methodology
1003
+ ON methodology_lifecycles (methodology_id);
1004
+
1005
+ CREATE INDEX IF NOT EXISTS idx_methodology_phases_lifecycle_order
1006
+ ON methodology_phases (lifecycle_id, sort_order);
1007
+
1008
+ CREATE INDEX IF NOT EXISTS idx_methodology_processes_methodology
1009
+ ON methodology_processes (methodology_id);
1010
+
1011
+ CREATE INDEX IF NOT EXISTS idx_methodology_phase_processes_process
1012
+ ON methodology_phase_processes (process_id);
1013
+
1014
+ CREATE UNIQUE INDEX IF NOT EXISTS ux_methodology_common_blueprint_policies_default
1015
+ ON methodology_common_blueprint_policies (methodology_id)
1016
+ WHERE is_default = 1;
1017
+
1018
+ CREATE INDEX IF NOT EXISTS idx_methodology_common_blueprint_policy_nodes_policy_type
1019
+ ON methodology_common_blueprint_policy_nodes (common_blueprint_policy_id, node_type_code, sort_order);
1020
+
1021
+ CREATE INDEX IF NOT EXISTS idx_methodology_activities_process_order
1022
+ ON methodology_activities (process_id, sort_order);
1023
+
1024
+ CREATE INDEX IF NOT EXISTS idx_methodology_steps_activity_order
1025
+ ON methodology_steps (activity_id, sort_order);
1026
+
1027
+ CREATE INDEX IF NOT EXISTS idx_methodology_stages_process_order
1028
+ ON methodology_stages (process_id, sort_order);
1029
+
1030
+ CREATE INDEX IF NOT EXISTS idx_methodology_stage_activities_activity
1031
+ ON methodology_stage_activities (activity_id);
1032
+
1033
+ CREATE INDEX IF NOT EXISTS idx_methodology_activity_artifact_requirements_activity_role
1034
+ ON methodology_activity_artifact_requirements (activity_id, requirement_role_code);
1035
+
1036
+ CREATE INDEX IF NOT EXISTS idx_methodology_activity_artifact_requirements_component
1037
+ ON methodology_activity_artifact_requirements (artifact_standard_code, artifact_component_code);
1038
+
1039
+ CREATE UNIQUE INDEX IF NOT EXISTS ux_methodology_activity_artifact_requirements_unique_target
1040
+ ON methodology_activity_artifact_requirements (
1041
+ activity_id,
1042
+ artifact_standard_code,
1043
+ artifact_standard_version,
1044
+ requirement_role_code,
1045
+ COALESCE(artifact_component_code, '')
1046
+ );
1047
+
1048
+ CREATE INDEX IF NOT EXISTS idx_methodology_stage_artifact_requirements_stage_role
1049
+ ON methodology_stage_artifact_requirements (stage_id, requirement_role_code);
1050
+
1051
+ CREATE INDEX IF NOT EXISTS idx_methodology_stage_criteria_stage_type
1052
+ ON methodology_stage_criteria (stage_id, criteria_type_code);
1053
+
1054
+ CREATE INDEX IF NOT EXISTS idx_methodology_activity_criteria_activity
1055
+ ON methodology_activity_criteria (activity_id);
1056
+
1057
+ CREATE INDEX IF NOT EXISTS idx_methodology_handoff_requirements_source
1058
+ ON methodology_handoff_requirements (source_scope_code, source_ref_id);
1059
+
1060
+ CREATE INDEX IF NOT EXISTS idx_methodology_handoff_requirements_target
1061
+ ON methodology_handoff_requirements (target_scope_code, target_ref_id);
1062
+
1063
+ CREATE INDEX IF NOT EXISTS idx_methodology_baseline_requirements_scope
1064
+ ON methodology_baseline_requirements (baseline_scope_code, baseline_scope_ref_id);
1065
+
1066
+ CREATE INDEX IF NOT EXISTS idx_methodology_trace_policies_policy_scope
1067
+ ON methodology_trace_policies (policy_scope_code, policy_scope_ref_id);
1068
+
1069
+ INSERT INTO methodology_schema_migrations (migration_id, migration_name)
1070
+ VALUES ('0001_methodology_base', 'methodology base schema')
1071
+ ON CONFLICT(migration_id) DO NOTHING;
1072
+
1073
+ INSERT INTO methodology_code_groups (code_group_code, code_group_name, description, sort_order)
1074
+ VALUES
1075
+ ('methodology_status', '방법론 상태', '방법론 정의 데이터의 상태를 정의한다.', 10),
1076
+ ('lifecycle_type', 'Lifecycle 유형', '방법론 lifecycle 유형을 정의한다.', 20),
1077
+ ('process_type', 'Process 유형', '재사용 process 유형을 정의한다.', 30),
1078
+ ('stage_type', 'Stage 유형', 'Stage의 governance 성격을 정의한다.', 40),
1079
+ ('activity_type', 'Activity 유형', 'Activity 수행 유형을 정의한다.', 50),
1080
+ ('step_type', 'Step 유형', 'Step 절차 유형을 정의한다.', 60),
1081
+ ('artifact_requirement_role', '산출물 요구 역할', 'Activity 산출물 요구 역할을 정의한다.', 70),
1082
+ ('stage_artifact_requirement_role', 'Stage 산출물 요구 역할', 'Stage 추가 산출물 요구 역할을 정의한다.', 80),
1083
+ ('stage_criteria_type', 'Stage Criteria 유형', 'Stage entry, exit, gate 기준을 정의한다.', 90),
1084
+ ('activity_criteria_type', 'Activity Criteria 유형', 'Activity completion 기준을 정의한다.', 100),
1085
+ ('criteria_severity', 'Criteria 심각도', 'Criteria와 trace policy의 심각도를 정의한다.', 110),
1086
+ ('common_blueprint_policy_status', 'Common Blueprint Policy 상태', '공통 문서 구조 정책 상태를 정의한다.', 120),
1087
+ ('common_blueprint_node_type', 'Common Blueprint Node 유형', '공통 문서 구조 정책 node 유형을 정의한다.', 130),
1088
+ ('handoff_scope', 'Handoff Scope', 'Handoff source/target scope를 정의한다.', 140),
1089
+ ('handoff_type', 'Handoff 유형', 'Handoff 전달 항목 유형을 정의한다.', 150),
1090
+ ('baseline_scope', 'Baseline Scope', 'Baseline requirement scope를 정의한다.', 160),
1091
+ ('baseline_trigger', 'Baseline Trigger', 'Baseline requirement trigger를 정의한다.', 170),
1092
+ ('trace_policy_scope', 'Trace Policy Scope', 'Trace policy 적용 scope를 정의한다.', 180),
1093
+ ('trace_target_type', 'Trace 대상 유형', 'Trace source/target 유형을 정의한다.', 190),
1094
+ ('trace_type', 'Trace 유형', 'Trace 관계 유형을 정의한다.', 200),
1095
+ ('activity_artifact_output_usage', 'Activity Artifact Output Usage', 'Activity가 output 산출물 또는 component를 어떻게 다루는지 정의한다.', 210)
1096
+ ON CONFLICT(code_group_code) DO UPDATE SET
1097
+ code_group_name = excluded.code_group_name,
1098
+ description = excluded.description,
1099
+ sort_order = excluded.sort_order,
1100
+ updated_at = CURRENT_TIMESTAMP;
1101
+
1102
+ INSERT INTO methodology_codes (code_group_code, code, code_name, description, sort_order, metadata_json)
1103
+ VALUES
1104
+ ('methodology_status', 'draft', '작성 중', '작성 중인 방법론 정의다.', 10, NULL),
1105
+ ('methodology_status', 'active', '활성', '사용 가능한 방법론 정의다.', 20, NULL),
1106
+ ('methodology_status', 'deprecated', '사용 중단 예정', '후속 버전으로 대체 예정인 방법론 정의다.', 30, NULL),
1107
+ ('methodology_status', 'archived', '보관', '보관된 방법론 정의다.', 40, NULL),
1108
+ ('lifecycle_type', 'default', '기본', '기본 lifecycle 유형이다.', 10, NULL),
1109
+ ('lifecycle_type', 'waterfall', 'Waterfall', '순차 lifecycle 유형이다.', 20, NULL),
1110
+ ('lifecycle_type', 'iterative', 'Iterative', '반복 lifecycle 유형이다.', 30, NULL),
1111
+ ('lifecycle_type', 'incremental', 'Incremental', '증분 lifecycle 유형이다.', 40, NULL),
1112
+ ('process_type', 'default', '기본', '기본 process 유형이다.', 10, NULL),
1113
+ ('stage_type', 'default', '기본', '기본 stage 유형이다.', 10, NULL),
1114
+ ('stage_type', 'gate', 'Gate', '전환 판단 중심 stage다.', 20, NULL),
1115
+ ('stage_type', 'baseline', 'Baseline', '기준선 관리 중심 stage다.', 30, NULL),
1116
+ ('activity_type', 'default', '기본', '기본 activity 유형이다.', 10, NULL),
1117
+ ('activity_type', 'authoring', '작성', '산출물 작성 activity다.', 20, NULL),
1118
+ ('activity_type', 'review', '검토', '검토 activity다.', 30, NULL),
1119
+ ('activity_type', 'validation', '검증', '검증 activity다.', 40, NULL),
1120
+ ('step_type', 'default', '기본', '기본 step 유형이다.', 10, NULL),
1121
+ ('artifact_requirement_role', 'input', '입력 산출물', 'Activity 수행 전에 필요한 산출물이다.', 10, NULL),
1122
+ ('artifact_requirement_role', 'output', '출력 산출물', 'Activity가 생성하거나 갱신하는 산출물이다.', 20, NULL),
1123
+ ('artifact_requirement_role', 'supporting', '참고 산출물', 'Activity 수행에 참고하는 보조 산출물이다.', 30, NULL),
1124
+ ('activity_artifact_output_usage', 'produces', '신규 작성', 'Activity가 산출물 또는 component를 신규 작성한다.', 10, NULL),
1125
+ ('activity_artifact_output_usage', 'refines', '정제', 'Activity가 기존 산출물 또는 component를 보완하거나 정제한다.', 20, NULL),
1126
+ ('activity_artifact_output_usage', 'reviews', '검토', 'Activity가 산출물 또는 component를 검토한다.', 30, NULL),
1127
+ ('activity_artifact_output_usage', 'consolidates', '종합', 'Activity가 여러 산출물 또는 component를 종합한다.', 40, NULL),
1128
+ ('stage_artifact_requirement_role', 'required', '필수 추가 산출물', 'Stage gate, baseline, handoff, approval에 필요한 추가 산출물이다.', 10, NULL),
1129
+ ('stage_artifact_requirement_role', 'supporting', '참고 산출물', 'Stage 검토에 참고하는 보조 산출물이다.', 20, NULL),
1130
+ ('stage_criteria_type', 'entry', '진입 기준', 'Stage를 시작할 수 있는 기준이다.', 10, NULL),
1131
+ ('stage_criteria_type', 'exit', '종료 기준', 'Stage를 완료할 수 있는 기준이다.', 20, NULL),
1132
+ ('stage_criteria_type', 'gate', '게이트 기준', 'Stage 전환 또는 승인 판단 기준이다.', 30, NULL),
1133
+ ('activity_criteria_type', 'completion', '완료 기준', 'Activity 완료 판단 기준이다.', 10, NULL),
1134
+ ('criteria_severity', 'info', '정보', '정보성 기준이다.', 10, NULL),
1135
+ ('criteria_severity', 'warning', '경고', '주의가 필요한 기준이다.', 20, NULL),
1136
+ ('criteria_severity', 'error', '오류', '충족되지 않으면 실패로 볼 기준이다.', 30, NULL),
1137
+ ('criteria_severity', 'critical', '치명', '반드시 충족해야 하는 중대 기준이다.', 40, NULL),
1138
+ ('common_blueprint_policy_status', 'DRAFT', 'Draft', '작성 중인 공통 문서 구조 정책이다.', 10, NULL),
1139
+ ('common_blueprint_policy_status', 'ACTIVE', 'Active', '사용 가능한 공통 문서 구조 정책이다.', 20, NULL),
1140
+ ('common_blueprint_policy_status', 'DEPRECATED', 'Deprecated', '후속 정책으로 대체 예정인 공통 문서 구조 정책이다.', 30, NULL),
1141
+ ('common_blueprint_policy_status', 'ARCHIVED', 'Archived', '보관된 공통 문서 구조 정책이다.', 40, NULL),
1142
+ ('common_blueprint_node_type', 'FRONT_MATTER', 'Front Matter', '본문 앞쪽에 공통으로 배치되는 문서 구조 node다.', 10, NULL),
1143
+ ('common_blueprint_node_type', 'BACK_MATTER', 'Back Matter', '본문 뒤쪽에 공통으로 배치되는 문서 구조 node다.', 20, NULL),
1144
+ ('common_blueprint_node_type', 'BODY_POLICY', 'Body Policy', '본문 상세 구조는 Artifact Standard가 정의한다는 정책 node다.', 30, NULL),
1145
+ ('handoff_scope', 'phase', 'Phase', 'Phase 수준 scope다.', 10, NULL),
1146
+ ('handoff_scope', 'process', 'Process', 'Process 수준 scope다.', 20, NULL),
1147
+ ('handoff_scope', 'stage', 'Stage', 'Stage 수준 scope다.', 30, NULL),
1148
+ ('handoff_scope', 'activity', 'Activity', 'Activity 수준 scope다.', 40, NULL),
1149
+ ('handoff_type', 'artifact', '산출물', '산출물 전달 항목이다.', 10, NULL),
1150
+ ('handoff_type', 'issue', '이슈', '이슈 전달 항목이다.', 20, NULL),
1151
+ ('handoff_type', 'risk', '리스크', '리스크 전달 항목이다.', 30, NULL),
1152
+ ('handoff_type', 'decision', '결정 사항', '결정 사항 전달 항목이다.', 40, NULL),
1153
+ ('handoff_type', 'constraint', '제약 조건', '제약 조건 전달 항목이다.', 50, NULL),
1154
+ ('handoff_type', 'approval', '승인 결과', '승인 결과 전달 항목이다.', 60, NULL),
1155
+ ('handoff_type', 'context', '배경 정보', '배경 정보 전달 항목이다.', 70, NULL),
1156
+ ('baseline_scope', 'phase', 'Phase', 'Phase 수준 기준선 scope다.', 10, NULL),
1157
+ ('baseline_scope', 'process', 'Process', 'Process 수준 기준선 scope다.', 20, NULL),
1158
+ ('baseline_scope', 'stage', 'Stage', 'Stage 수준 기준선 scope다.', 30, NULL),
1159
+ ('baseline_scope', 'activity', 'Activity', 'Activity 수준 기준선 scope다.', 40, NULL),
1160
+ ('baseline_trigger', 'entry', '진입', '수행 단위 진입 시 기준선이다.', 10, NULL),
1161
+ ('baseline_trigger', 'exit', '종료', '수행 단위 종료 시 기준선이다.', 20, NULL),
1162
+ ('baseline_trigger', 'gate', 'Gate', 'gate 통과 시 기준선이다.', 30, NULL),
1163
+ ('baseline_trigger', 'handoff', 'Handoff', 'handoff 시 기준선이다.', 40, NULL),
1164
+ ('baseline_trigger', 'approval', '승인', '승인 시 기준선이다.', 50, NULL),
1165
+ ('baseline_trigger', 'manual', '수동', '사용자가 수동 지정하는 기준선이다.', 60, NULL),
1166
+ ('trace_policy_scope', 'methodology', 'Methodology', '방법론 전체 scope다.', 10, NULL),
1167
+ ('trace_policy_scope', 'lifecycle', 'Lifecycle', 'Lifecycle scope다.', 20, NULL),
1168
+ ('trace_policy_scope', 'phase', 'Phase', 'Phase scope다.', 30, NULL),
1169
+ ('trace_policy_scope', 'process', 'Process', 'Process scope다.', 40, NULL),
1170
+ ('trace_policy_scope', 'stage', 'Stage', 'Stage scope다.', 50, NULL),
1171
+ ('trace_policy_scope', 'activity', 'Activity', 'Activity scope다.', 60, NULL),
1172
+ ('trace_target_type', 'phase', 'Phase', 'Phase trace 대상이다.', 10, NULL),
1173
+ ('trace_target_type', 'process', 'Process', 'Process trace 대상이다.', 20, NULL),
1174
+ ('trace_target_type', 'stage', 'Stage', 'Stage trace 대상이다.', 30, NULL),
1175
+ ('trace_target_type', 'activity', 'Activity', 'Activity trace 대상이다.', 40, NULL),
1176
+ ('trace_target_type', 'artifact_requirement', 'Artifact Requirement', '산출물 요구 trace 대상이다.', 50, NULL),
1177
+ ('trace_target_type', 'artifact_standard', 'Artifact Standard', '산출물 표준 trace 대상이다.', 60, NULL),
1178
+ ('trace_type', 'derives', '파생', 'source가 target을 파생한다.', 10, NULL),
1179
+ ('trace_type', 'produces', '생성', 'source가 target을 생성한다.', 20, NULL),
1180
+ ('trace_type', 'consumes', '소비', 'source가 target을 입력으로 사용한다.', 30, NULL),
1181
+ ('trace_type', 'validates', '검증', 'source가 target을 검증한다.', 40, NULL),
1182
+ ('trace_type', 'hands_off', '전달', 'source가 target으로 전달된다.', 50, NULL),
1183
+ ('trace_type', 'refines', '구체화', 'source가 target을 구체화한다.', 60, NULL),
1184
+ ('trace_type', 'impacts', '영향', 'source가 target에 영향을 준다.', 70, NULL)
1185
+ ON CONFLICT(code_group_code, code) DO UPDATE SET
1186
+ code_name = excluded.code_name,
1187
+ description = excluded.description,
1188
+ sort_order = excluded.sort_order,
1189
+ metadata_json = excluded.metadata_json,
1190
+ updated_at = CURRENT_TIMESTAMP;