@neobiotechlabs/neobiotech-dev-agent-codex 0.1.39

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 (87) hide show
  1. package/.codex-plugin/plugin.json +36 -0
  2. package/.mcp.json +20 -0
  3. package/data/cyber_sec.png +0 -0
  4. package/data/hazard_panel.png +0 -0
  5. package/data/review-criteria.md +185 -0
  6. package/data/risk_score.png +0 -0
  7. package/dist/build/plantuml-1.2026.1.jar +0 -0
  8. package/dist/data/Courier-Bold.afm +342 -0
  9. package/dist/data/Courier-BoldOblique.afm +342 -0
  10. package/dist/data/Courier-Oblique.afm +342 -0
  11. package/dist/data/Courier.afm +342 -0
  12. package/dist/data/Helvetica-Bold.afm +2827 -0
  13. package/dist/data/Helvetica-BoldOblique.afm +2827 -0
  14. package/dist/data/Helvetica-Oblique.afm +3051 -0
  15. package/dist/data/Helvetica.afm +3051 -0
  16. package/dist/data/Symbol.afm +213 -0
  17. package/dist/data/Times-Bold.afm +2588 -0
  18. package/dist/data/Times-BoldItalic.afm +2384 -0
  19. package/dist/data/Times-Italic.afm +2667 -0
  20. package/dist/data/Times-Roman.afm +2419 -0
  21. package/dist/data/ZapfDingbats.afm +225 -0
  22. package/dist/data/sRGB_IEC61966_2_1.icc +0 -0
  23. package/dist/doctor.js +15106 -0
  24. package/dist/doctor.js.map +1 -0
  25. package/dist/fonts/LICENSE.txt +94 -0
  26. package/dist/fonts/Pretendard-Bold.ttf +0 -0
  27. package/dist/fonts/Pretendard-Regular.ttf +0 -0
  28. package/dist/index.js +185999 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/setup-codex.js +164 -0
  31. package/dist/setup-codex.js.map +1 -0
  32. package/package.json +34 -0
  33. package/skills/doc-render/SKILL.md +84 -0
  34. package/skills/role-document-content-reviewer/SKILL.md +68 -0
  35. package/skills/role-mdr-cybersecurity-reviewer/SKILL.md +47 -0
  36. package/skills/role-mdr-regulatory-architect/SKILL.md +48 -0
  37. package/skills/role-requirement-coverage-tracker/SKILL.md +108 -0
  38. package/skills/role-sw-architect/SKILL.md +61 -0
  39. package/vendor/dev-docs-templates/templates/dev_docs/plan_template.md +104 -0
  40. package/vendor/dev-docs-templates/templates/dev_docs/prd_template.md +110 -0
  41. package/vendor/dev-docs-templates/templates/dev_docs/spec_template.md +81 -0
  42. package/vendor/dev-docs-templates/templates/dev_docs/tasks_template.md +122 -0
  43. package/vendor/dev-docs-templates/templates/mdr_docs/CA/checklist-clinical-evaluation.md +81 -0
  44. package/vendor/dev-docs-templates/templates/mdr_docs/CA/checklist-gspr-mdr.md +403 -0
  45. package/vendor/dev-docs-templates/templates/mdr_docs/CA/clinical-evaluation-report.md +492 -0
  46. package/vendor/dev-docs-templates/templates/mdr_docs/CA/instructions-for-use.md +132 -0
  47. package/vendor/dev-docs-templates/templates/mdr_docs/CA/literature-evaluation-table.md +15 -0
  48. package/vendor/dev-docs-templates/templates/mdr_docs/CA/mdr-declaration-of-conformity.md +75 -0
  49. package/vendor/dev-docs-templates/templates/mdr_docs/CA/post-market-clinical-follow-up-plan.md +162 -0
  50. package/vendor/dev-docs-templates/templates/mdr_docs/CA/post-market-surveillance-plan.md +175 -0
  51. package/vendor/dev-docs-templates/templates/mdr_docs/CA/risk-management-cybersecurity-checklist.md +67 -0
  52. package/vendor/dev-docs-templates/templates/mdr_docs/CA/risk-management-report.md +111 -0
  53. package/vendor/dev-docs-templates/templates/mdr_docs/CA/usability-evaluation-report.md +70 -0
  54. package/vendor/dev-docs-templates/templates/mdr_docs/EA/clinical-evaluation-plan.md +154 -0
  55. package/vendor/dev-docs-templates/templates/mdr_docs/EA/list-of-hazard-related-use-scenarios.md +34 -0
  56. package/vendor/dev-docs-templates/templates/mdr_docs/EA/risk-table-fmea.md +155 -0
  57. package/vendor/dev-docs-templates/templates/mdr_docs/EA/software-architecture-description.md +307 -0
  58. package/vendor/dev-docs-templates/templates/mdr_docs/EA/software-detailed-design.md +321 -0
  59. package/vendor/dev-docs-templates/templates/mdr_docs/EA/software-requirements-list.md +156 -0
  60. package/vendor/dev-docs-templates/templates/mdr_docs/EA/soup-list.md +82 -0
  61. package/vendor/dev-docs-templates/templates/mdr_docs/EA/usability-evaluation-plan.md +103 -0
  62. package/vendor/dev-docs-templates/templates/mdr_docs/ER/global/bug-fixes-documentation-list.md +35 -0
  63. package/vendor/dev-docs-templates/templates/mdr_docs/ER/global/change-evaluation-list.md +100 -0
  64. package/vendor/dev-docs-templates/templates/mdr_docs/ER/global/list-of-known-anomalies.md +29 -0
  65. package/vendor/dev-docs-templates/templates/mdr_docs/ER/sprint/algorithm-validation-report.md +170 -0
  66. package/vendor/dev-docs-templates/templates/mdr_docs/ER/sprint/checklist-software-release.md +52 -0
  67. package/vendor/dev-docs-templates/templates/mdr_docs/ER/sprint/checklist-software-requirements-review.md +50 -0
  68. package/vendor/dev-docs-templates/templates/mdr_docs/ER/sprint/software-architecture-checklist.md +41 -0
  69. package/vendor/dev-docs-templates/templates/mdr_docs/ER/sprint/software-system-test-plan.md +155 -0
  70. package/vendor/dev-docs-templates/templates/mdr_docs/ER/sprint/usability-evaluation-protocol.md +63 -0
  71. package/vendor/dev-docs-templates/templates/mdr_docs/PA/configuration-management-plan.md +112 -0
  72. package/vendor/dev-docs-templates/templates/mdr_docs/PA/intended-use.md +116 -0
  73. package/vendor/dev-docs-templates/templates/mdr_docs/PA/mdr-classification-document.md +114 -0
  74. package/vendor/dev-docs-templates/templates/mdr_docs/PA/risk-management-plan.md +198 -0
  75. package/vendor/dev-docs-templates/templates/mdr_docs/PA/security-management-plan.md +101 -0
  76. package/vendor/dev-docs-templates/templates/mdr_docs/PA/software-development-maintenance-plan.md +213 -0
  77. package/vendor/dev-docs-templates/templates/mdr_docs/PA/system-requirements-spec.md +182 -0
  78. package/vendor/dev-docs-templates/templates/mdr_docs/global/information_security/information-security-controls.md +966 -0
  79. package/vendor/dev-docs-templates/templates/mdr_docs/global/information_security/information-security-policy-and-scope.md +99 -0
  80. package/vendor/dev-docs-templates/templates/mdr_docs/global/qms/quality-manual-policy-objectives.md +187 -0
  81. package/vendor/dev-docs-templates/templates/mdr_docs/global/qms/sop-capa.md +112 -0
  82. package/vendor/dev-docs-templates/templates/mdr_docs/global/qms/sop-change-management.md +128 -0
  83. package/vendor/dev-docs-templates/templates/mdr_docs/global/qms/sop-clinical-evaluation.md +102 -0
  84. package/vendor/dev-docs-templates/templates/mdr_docs/global/qms/sop-feedback-management.md +140 -0
  85. package/vendor/dev-docs-templates/templates/mdr_docs/global/qms/sop-integrated-software-development.md +361 -0
  86. package/vendor/dev-docs-templates/templates/mdr_docs/global/qms/sop-post-market-surveillance.md +159 -0
  87. package/vendor/dev-docs-templates/templates/mdr_docs/global/qms/sop-software-problem-resolution.md +99 -0
@@ -0,0 +1,307 @@
1
+ # Software Architecture Description (SAD): {PRODUCT_NAME}
2
+
3
+ <!-- AI AGENT 작성 지침
4
+ 이 문서는 IEC 62304 Cl.5.3 기반 SW 아키텍처 설계서입니다.
5
+ 작성 전 반드시 다음 문서를 참조하세요:
6
+ - 시스템 요구사항 명세서(system-requirements-spec.md): 시스템 요구사항 및 안전등급 확인
7
+ - SOUP 리스트(soup-list.md): 외부 라이브러리 목록 확인
8
+ - 위험 관리 계획서(risk-management-plan.md): 위험 통제 관련 아키텍처 결정 반영
9
+
10
+ 작성 지침:
11
+ 1. 모든 SW 아이템은 고유 식별자를 부여하세요 (예: ITEM-001)
12
+ 2. 안전 등급(Class A/B/C)을 아이템마다 명시하세요
13
+ 3. SOUP는 반드시 격리 전략을 기술하세요 (IEC 62304 Cl.5.3.5)
14
+ 4. 다이어그램은 아래 PlantUML 지침에 따라 작성하세요
15
+ 5. 보안 아키텍처 섹션을 반드시 채워주세요 (MDR Annex I 17.2)
16
+
17
+ PlantUML 다이어그램 작성 지침:
18
+ - 컴포넌트 다이어그램: SW 아이템 간 관계 표현 -> 섹션 2.3에 작성
19
+ - 시퀀스 다이어그램: 주요 데이터 흐름 표현 -> 섹션 4에 작성
20
+ - 배포 다이어그램: 실행 환경 구성 표현 -> 섹션 5에 작성
21
+
22
+ PlantUML 문법 예시 (```plantuml ... ``` 블록 사용):
23
+ ```
24
+ @startuml Component_Overview
25
+ package "Medical Device Software" {
26
+ component [Frontend Module] as FE
27
+ component [Backend Module] as BE
28
+ component [AI Algorithm Module] as AI
29
+ }
30
+ FE --> BE : REST API
31
+ BE --> AI : Internal Call
32
+ @enduml
33
+ ```
34
+ -->
35
+
36
+ **문서 번호**: {DOC_ID}
37
+ **버전**: {VERSION} | **상태**: Draft
38
+ **작성일**: {DATE} | **작성자**: {AUTHOR}
39
+ **검토자**: {REVIEWER} | **승인자**: {APPROVER}
40
+
41
+ ---
42
+
43
+ ## 표준 요건 매핑 (Standard Requirements Mapping)
44
+
45
+ | IEC 62304 조항 | 제목 | 해당 섹션 | Class |
46
+ | ------------------ | ---------------------------- | -------------------------- | ----- |
47
+ | Cl. 5.3.1 | SW 아키텍처 변환 | 2. SW 시스템 구조 | B, C |
48
+ | Cl. 5.3.2 | SW 아이템 간 인터페이스 정의 | 3. 인터페이스 정의 | B, C |
49
+ | Cl. 5.3.3 | 공개된 알려진 이상 식별 | 2. SW 시스템 구조 | B, C |
50
+ | Cl. 5.3.4 | 추가 위험 평가 실시 | 6. 위험 관련 아키텍처 결정 | B, C |
51
+ | Cl. 5.3.5 | SOUP 소프트웨어 아이템 격리 | 5. SOUP 격리 전략 | B, C |
52
+ | Cl. 5.3.6 | 형상 항목 식별 | 7. 형상 항목 목록 | B, C |
53
+ | MDR Annex II 3.(c) | 설계 및 제조 정보 | 전체 | - |
54
+ | MDR Annex I 17.2 | IT 보안 고려 | 4. 보안 아키텍처 | - |
55
+
56
+ ---
57
+
58
+ ## 1. 개요 (Overview)
59
+
60
+ ### 1.1 목적
61
+
62
+ 이 문서는 {PRODUCT_NAME}의 SW 아키텍처를 정의한다.
63
+ IEC 62304의 안전 등급 결정에 따라 SW 시스템을 아이템(Item) 단위로 분해하고, 아이템 간 인터페이스 및 SOUP 격리 전략을 명시한다.
64
+
65
+ ### 1.2 연관 문서
66
+
67
+ | 문서명 | 문서 ID | 비고 |
68
+ | ---------------------- | --------------- | -------------------- |
69
+ | 시스템 요구사항 명세서 | {SRS_DOC_ID} | 아키텍처의 입력 |
70
+ | SW 요구사항 명세서 | {SRS_SW_DOC_ID} | 기능 요구사항 출처 |
71
+ | 위험 관리 계획서 | {RMP_DOC_ID} | 위험 통제 조치 반영 |
72
+ | SOUP 리스트 | {SOUP_DOC_ID} | 외부 라이브러리 목록 |
73
+
74
+ ### 1.3 SW 안전 등급 요약
75
+
76
+ <!-- AI AGENT: 시스템 요구사항 명세서의 등급 분류 결과를 옮겨 기재하세요 -->
77
+
78
+ | SW 아이템 | IEC 62304 등급 | 근거 |
79
+ | ------------- | -------------- | ----------- |
80
+ | {ITEM_1_NAME} | Class {A/B/C} | {RATIONALE} |
81
+ | {ITEM_2_NAME} | Class {A/B/C} | {RATIONALE} |
82
+
83
+ ---
84
+
85
+ ## 2. SW 시스템 구조 (SW System Architecture)
86
+
87
+ > IEC 62304 Cl.5.3.1: SW 시스템을 SW 아이템으로 분해하고 각각의 기능, 인터페이스, 안전 등급을 정의해야 함
88
+
89
+ ### 2.1 전체 구조 요약
90
+
91
+ <!-- AI AGENT: 제품의 주요 SW 아이템을 나열하고 각각의 역할을 간략히 기술하세요
92
+ 예시:
93
+ - Frontend (ITEM-001): 사용자 인터페이스, 웹 브라우저 기반
94
+ - Backend API (ITEM-002): 비즈니스 로직 처리, REST API 제공
95
+ - AI/ML 추론 모듈 (ITEM-003): 진단 보조 알고리즘 실행
96
+ - 데이터베이스 (ITEM-004): 환자 데이터 영구 저장
97
+ -->
98
+
99
+ {ARCHITECTURE_SUMMARY}
100
+
101
+ ### 2.2 SW 아이템 목록
102
+
103
+ | 아이템 ID | 아이템 명 | 기능 설명 | 안전 등급 | 기술 스택 | 배포 방식 |
104
+ | --------- | ------------- | ----------------- | ------------- | ------------ | ------------ |
105
+ | ITEM-001 | {ITEM_1_NAME} | {ITEM_1_FUNCTION} | Class {CLASS} | {TECH_STACK} | {DEPLOYMENT} |
106
+ | ITEM-002 | {ITEM_2_NAME} | {ITEM_2_FUNCTION} | Class {CLASS} | {TECH_STACK} | {DEPLOYMENT} |
107
+
108
+ ### 2.3 컴포넌트 다이어그램
109
+
110
+ <!-- AI AGENT: 아래 PlantUML 블록 안에 SW 아이템 간 관계를 컴포넌트 다이어그램으로 작성하세요
111
+ IEC 62304 Cl.5.3.1 요구: SW 아이템 간 관계 및 인터페이스를 시각적으로 정의해야 함
112
+
113
+ 지침:
114
+ - 각 SW 아이템은 component 또는 package로 표현
115
+ - 아이템 간 통신 방향과 프로토콜을 화살표에 명시
116
+ - SOUP는 별도 영역(package)으로 표현하여 격리 관계를 명시
117
+ - 외부 시스템(HW, 외부 서비스)은 actor 또는 boundary로 표현
118
+
119
+ 예시: -->
120
+
121
+ ```plantuml
122
+ @startuml SAD_Component
123
+ skinparam componentStyle rectangle
124
+
125
+ package "Medical Device Software (IEC 62304)" {
126
+ component [Frontend\nITEM-001\nClass B] as FE #LightBlue
127
+ component [Backend API\nITEM-002\nClass B] as BE #LightGreen
128
+ component [AI Algorithm\nITEM-003\nClass C] as AI #Orange
129
+ }
130
+
131
+ package "SOUP (외부 라이브러리)" {
132
+ component [React v18\n(SOUP-001)] as REACT
133
+ component [PyTorch v2\n(SOUP-002)] as TORCH
134
+ }
135
+
136
+ actor "Healthcare User" as USER
137
+ actor "EHR System" as EHR
138
+
139
+ USER --> FE : HTTPS
140
+ FE --> BE : REST API (JSON)
141
+ BE --> AI : Internal gRPC
142
+ BE --> EHR : HL7 FHIR
143
+
144
+ FE ..> REACT : uses
145
+ AI ..> TORCH : uses
146
+
147
+ note right of AI
148
+ Class C: 진단 보조 출력
149
+ 오분류 시 환자 위해 가능성
150
+ end note
151
+ @enduml
152
+ ```
153
+
154
+ ---
155
+
156
+ ## 3. 인터페이스 정의 (Interface Definitions)
157
+
158
+ > IEC 62304 Cl.5.3.2: 각 SW 아이템 간 인터페이스를 명확하게 정의해야 함
159
+
160
+ ### 3.1 내부 인터페이스 (Internal Interfaces)
161
+
162
+ | 인터페이스 ID | 송신 아이템 | 수신 아이템 | 프로토콜 | 데이터 형식 | 보안 요건 |
163
+ | ------------- | ------------------- | ------------------ | ---------- | ----------- | ------------- |
164
+ | INT-001 | ITEM-001 (Frontend) | ITEM-002 (Backend) | HTTPS REST | JSON | JWT 인증 필수 |
165
+ | INT-002 | ITEM-002 (Backend) | ITEM-003 (AI) | gRPC | Protobuf | mTLS |
166
+
167
+ ### 3.2 외부 인터페이스 (External Interfaces)
168
+
169
+ <!-- AI AGENT: 외부 시스템과의 연동 규격을 기술하세요. 없으면 해당 없음으로 기재 -->
170
+
171
+ | 인터페이스 ID | 대상 시스템 | 프로토콜 | 표준 | 데이터 형식 | 비고 |
172
+ | ------------- | ----------------- | ---------- | ---------- | ----------- | ------ |
173
+ | EXT-001 | {EXTERNAL_SYSTEM} | {PROTOCOL} | {STANDARD} | {FORMAT} | {NOTE} |
174
+
175
+ ---
176
+
177
+ ## 4. 보안 아키텍처 (Security Architecture)
178
+
179
+ > MDR Annex I 17.2 (IT 보안), IEC 81001-5-1 Cl.5.3
180
+
181
+ <!-- AI AGENT: 보안 아키텍처를 데이터 흐름 관점에서 기술하세요.
182
+ 아래 항목을 반드시 포함하세요:
183
+ - 인증/인가 방식
184
+ - 데이터 암호화 (저장/전송)
185
+ - 네트워크 격리 방식
186
+ - 감사 로그 전략 -->
187
+
188
+ ### 4.1 데이터 보호
189
+
190
+ | 구분 | 방식 | 표준/알고리즘 |
191
+ | -------------------------------- | ------------------- | ------------- |
192
+ | 전송 중 데이터 (Data in Transit) | TLS 1.3 | AES-256-GCM |
193
+ | 저장 데이터 (Data at Rest) | {ENCRYPTION_METHOD} | {ALGORITHM} |
194
+ | 민감 데이터 마스킹 | {MASKING_METHOD} | {STANDARD} |
195
+
196
+ ### 4.2 인증 및 접근 제어
197
+
198
+ <!-- AI AGENT: RBAC/ABAC 방식, MFA 적용 여부, 세션 관리 방식을 기술하세요 -->
199
+
200
+ {AUTH_AND_ACCESS_CONTROL_DESCRIPTION}
201
+
202
+ ### 4.3 보안 데이터 흐름 다이어그램
203
+
204
+ <!-- AI AGENT: 인증 흐름을 시퀀스 다이어그램으로 표현하세요
205
+
206
+ 예시: -->
207
+
208
+ ```plantuml
209
+ @startuml SAD_Security_Sequence
210
+ actor "User" as USER
211
+ participant "Frontend\n(ITEM-001)" as FE
212
+ participant "Auth Service\n(ITEM-002)" as AUTH
213
+ participant "Backend API\n(ITEM-002)" as BE
214
+ database "Database\n(ITEM-004)" as DB
215
+
216
+ USER -> FE : Login (ID/PW)
217
+ FE -> AUTH : POST /auth/login
218
+ AUTH -> DB : Verify credentials (hashed)
219
+ DB --> AUTH : User record
220
+ AUTH --> FE : JWT Access Token (exp: 1h)
221
+ FE -> BE : API Request + Bearer Token
222
+ BE -> AUTH : Token validation
223
+ AUTH --> BE : Valid (User Role: {ROLE})
224
+ BE --> FE : Response data (encrypted)
225
+ @enduml
226
+ ```
227
+
228
+ ---
229
+
230
+ ## 5. SOUP 격리 전략 (SOUP Isolation Strategy)
231
+
232
+ > IEC 62304 Cl.5.3.5: SOUP 소프트웨어 아이템을 격리하여 잠재적 결함이 안전 기능에 미치는 영향을 최소화해야 함
233
+
234
+ <!-- AI AGENT: SOUP 리스트(soup-list.md)를 참조하여 각 SOUP의 격리 전략을 기술하세요 -->
235
+
236
+ | SOUP ID | SOUP 명 | 버전 | 사용 아이템 | 격리 방식 | 고장 시 영향 | 알려진 취약점 |
237
+ | -------- | ------------- | --------- | ----------- | ------------------ | ------------ | ---------------- |
238
+ | SOUP-001 | {SOUP_1_NAME} | {VERSION} | ITEM-001 | {ISOLATION_METHOD} | {IMPACT} | CVE 검토: {DATE} |
239
+ | SOUP-002 | {SOUP_2_NAME} | {VERSION} | ITEM-003 | {ISOLATION_METHOD} | {IMPACT} | CVE 검토: {DATE} |
240
+
241
+ ### 5.1 배포 환경 구성도
242
+
243
+ <!-- AI AGENT: 실제 배포 환경(컨테이너, 네트워크 경계 등)을 배포 다이어그램으로 표현하세요
244
+
245
+ 예시: -->
246
+
247
+ ```plantuml
248
+ @startuml SAD_Deployment
249
+ node "User Device" {
250
+ artifact "Web Browser" as BROWSER
251
+ }
252
+
253
+ node "Cloud (VPC - Private Network)" {
254
+ node "API Server" {
255
+ artifact "Backend API\n(Docker Container)" as BE_APP
256
+ artifact "AI Module\n(Docker Container)" as AI_APP
257
+ }
258
+ database "Database\n(Encrypted at rest)" as DB
259
+ }
260
+
261
+ node "CDN" {
262
+ artifact "Frontend\n(Static Assets)" as FE
263
+ }
264
+
265
+ BROWSER --> FE : HTTPS
266
+ BROWSER --> BE_APP : HTTPS REST API
267
+ BE_APP --> AI_APP : gRPC (Internal)
268
+ BE_APP --> DB : TLS (Internal)
269
+ @enduml
270
+ ```
271
+
272
+ ---
273
+
274
+ ## 6. 위험 관련 아키텍처 결정 (Risk-Related Architecture Decisions)
275
+
276
+ > IEC 62304 Cl.5.3.4: 아키텍처 설계 단계에서 추가 위험 평가를 수행해야 함
277
+
278
+ <!-- AI AGENT: 위험 관리 계획서(risk-management-plan.md) 및 FMEA(risk-table-fmea.md)를
279
+ 참조하여 아키텍처 결정이 위험 통제에 기여하는 방식을 기술하세요 -->
280
+
281
+ | 위험 ID | 위험 설명 | 아키텍처 통제 결정 | 관련 아이템 |
282
+ | ----------- | ----------- | ------------------ | ----------- |
283
+ | {RISK_ID_1} | {RISK_DESC} | {ARCH_DECISION} | ITEM-{N} |
284
+
285
+ ---
286
+
287
+ ## 7. 형상 항목 목록 (Configuration Items)
288
+
289
+ > IEC 62304 Cl.5.3.6: 형상 관리 대상 SW 아이템을 식별해야 함
290
+
291
+ | 항목 ID | 항목명 | 유형 | 버전 관리 방식 | 저장소 경로 |
292
+ | ------- | ---------------- | ------------ | -------------------------- | ------------- |
293
+ | CI-001 | {ITEM_1_NAME} | 소스 코드 | Git (tag: v{VERSION}) | {REPO_PATH} |
294
+ | CI-002 | {ITEM_2_NAME} | Docker Image | Container Registry | {IMAGE_URL} |
295
+ | CI-003 | 시스템 구성 파일 | 설정 | Git (암호화된 secret 제외) | {CONFIG_PATH} |
296
+
297
+ ---
298
+
299
+ ## 8. 변경 이력 (Revision History)
300
+
301
+ | 버전 | 날짜 | 작성자 | 변경 내용 |
302
+ | ---- | ------ | -------- | --------- |
303
+ | 0.1 | {DATE} | {AUTHOR} | 초안 작성 |
304
+
305
+ ---
306
+
307
+ > Template based on IEC 62304:2006/AMD1:2015 Clause 5.3, MDR 2017/745 Annex I/II, IEC 81001-5-1
@@ -0,0 +1,321 @@
1
+ # Software Detailed Design (SDD): {PRODUCT_NAME}
2
+
3
+ <!-- AI AGENT 작성 지침
4
+ 이 문서는 IEC 62304 Cl.5.4 기반 SW 상세 설계서 (Class B/C 필수)입니다.
5
+ 작성 전 반드시 다음 문서를 참조하세요:
6
+ - SAD(software-architecture-description.md): 아키텍처 및 아이템 구조 확인
7
+ - SW 요구사항 명세서(software-requirements-list.md): 각 요구사항 ID 확인
8
+ - FMEA(risk-table-fmea.md): 위험 통제 관련 설계 반영 여부 확인
9
+
10
+ 작성 지침:
11
+ 1. 유닛(Unit)별로 섹션 3.x를 반복 작성하세요
12
+ 2. Class C의 경우 알고리즘, 분기 조건, 오류 처리를 상세히 기술해야 합니다
13
+ 3. Class B의 경우 인터페이스 수준까지 기술합니다
14
+ 4. 모든 유닛은 SRS 요구사항 ID와 추적 연결을 명시해야 합니다 (Cl.5.4.2)
15
+ 5. SOUP 연동 유닛의 경우 격리 전략과 오류 처리를 반드시 기술하세요
16
+
17
+ PlantUML 다이어그램 작성 지침:
18
+ - 클래스 다이어그램: 유닛 간 의존성 표현 -> 섹션 2.2에 작성
19
+ - 활동 다이어그램: 유닛 처리 흐름 표현 -> 각 유닛 섹션(3.x)에 작성
20
+ - 시퀀스 다이어그램: 유닛 간 상호작용 표현 -> 섹션 4.1에 작성
21
+ - 상태 다이어그램: 상태 전이가 있는 유닛에 사용
22
+
23
+ PlantUML 블록 형식: ```plantuml ... ```
24
+ -->
25
+
26
+ **문서 번호**: {DOC_ID}
27
+ **버전**: {VERSION} | **상태**: Draft
28
+ **작성일**: {DATE} | **작성자**: {AUTHOR}
29
+ **검토자**: {REVIEWER} | **승인자**: {APPROVER}
30
+
31
+ ---
32
+
33
+ ## 표준 요건 매핑 (Standard Requirements Mapping)
34
+
35
+ | IEC 62304 조항 | 제목 | 해당 섹션 | Class |
36
+ | -------------- | ------------------------- | ------------------ | ----- |
37
+ | Cl. 5.4.1 | SW 유닛 구현 및 검증 계획 | 1. 설계 개요 | B, C |
38
+ | Cl. 5.4.2 | SW 유닛 검증 | 5. 유닛 검증 계획 | B, C |
39
+ | Cl. 5.4.3 | SW 유닛 추가 상세 설계 | 3. 유닛 상세 설계 | C |
40
+ | Cl. 5.3.2 | 아키텍처 인터페이스 | 4. 인터페이스 설계 | B, C |
41
+ | Cl. 5.5.2 | 유닛 구현 검증 | 5. 유닛 검증 계획 | B, C |
42
+ | ISO 14971 Cl.6 | 위험 통제 조치 | 6. 위험 관련 설계 | - |
43
+
44
+ ---
45
+
46
+ ## 1. 설계 개요 (Design Overview)
47
+
48
+ ### 1.1 목적 및 범위
49
+
50
+ 이 문서는 {PRODUCT_NAME}의 {SW_ITEM_NAME} 아이템을 구성하는 SW 유닛의 상세 설계를 기술한다.
51
+
52
+ - **대상 SW 아이템**: {SW_ITEM_NAME} ({ITEM_ID})
53
+ - **IEC 62304 SW 안전 등급**: Class {IEC62304_CLASS}
54
+ - **참조 SAD 문서**: {SAD_DOC_ID}
55
+
56
+ ### 1.2 포함 유닛 목록
57
+
58
+ <!-- AI AGENT: SAD에서 정의된 아이템 내 유닛 목록을 가져와 작성하세요 -->
59
+
60
+ | 유닛 ID | 유닛 명 | 안전 등급 | 주요 기능 |
61
+ | -------- | ------------- | ------------- | ----------------- |
62
+ | UNIT-001 | {UNIT_1_NAME} | Class {CLASS} | {UNIT_1_FUNCTION} |
63
+ | UNIT-002 | {UNIT_2_NAME} | Class {CLASS} | {UNIT_2_FUNCTION} |
64
+
65
+ ---
66
+
67
+ ## 2. 유닛 구조 (Unit Structure)
68
+
69
+ ### 2.1 유닛 분해 구조
70
+
71
+ ```
72
+ {SW_ITEM_NAME} ({ITEM_ID})
73
+ |-- {MODULE_1_NAME}
74
+ | |-- UNIT-001: {UNIT_1_NAME}
75
+ | |-- UNIT-002: {UNIT_2_NAME}
76
+ |-- {MODULE_2_NAME}
77
+ |-- UNIT-003: {UNIT_3_NAME}
78
+ ```
79
+
80
+ ### 2.2 유닛 의존성 다이어그램
81
+
82
+ <!-- AI AGENT: 유닛 간 의존 관계를 클래스 다이어그램 형태로 표현하세요
83
+ 유닛이 다른 유닛의 함수를 호출하거나 인터페이스를 사용하는 경우 화살표로 표현합니다
84
+
85
+ 지침:
86
+ - 각 유닛을 class로 표현
87
+ - 의존 방향을 --> 또는 ..> 으로 표현
88
+ - SOUP 의존성은 <<external>> 스테레오타입 사용
89
+
90
+ 예시: -->
91
+
92
+ ```plantuml
93
+ @startuml SDD_Unit_Dependencies
94
+ skinparam classStyle rectangle
95
+
96
+ class "UNIT-001\nDataInputHandler" as U1 {
97
+ + validate(input: InputData): bool
98
+ + preprocess(data: InputData): ProcessedData
99
+ }
100
+
101
+ class "UNIT-002\nInferenceEngine" as U2 {
102
+ + predict(data: ProcessedData): Result
103
+ - loadModel(): void
104
+ }
105
+
106
+ class "UNIT-003\nResultFormatter" as U3 {
107
+ + format(result: Result): OutputDTO
108
+ + applyThreshold(result: Result): RiskLevel
109
+ }
110
+
111
+ class "PyTorch v2.0\n(SOUP-002)" as SOUP <<external>>
112
+
113
+ U1 --> U2 : passes ProcessedData
114
+ U2 --> U3 : passes Result
115
+ U2 ..> SOUP : uses (isolated via wrapper)
116
+
117
+ note bottom of U2
118
+ Class C: 오분류 시 환자 위해 가능성
119
+ SOUP 격리: InferenceWrapper 래퍼 클래스 사용
120
+ end note
121
+ @enduml
122
+ ```
123
+
124
+ ---
125
+
126
+ ## 3. 유닛 상세 설계 (Unit Detailed Design)
127
+
128
+ > IEC 62304 Cl.5.4.3 (Class C 필수): 알고리즘, 데이터 구조, 처리 조건 상세 기술
129
+
130
+ ---
131
+
132
+ ### 3.1 {UNIT_1_NAME} (UNIT-001)
133
+
134
+ #### 3.1.1 목적 (Purpose)
135
+
136
+ <!-- AI AGENT: 이 유닛이 수행하는 단일 책임(Single Responsibility)을 한 문장으로 기술하세요 -->
137
+
138
+ {UNIT_1_PURPOSE}
139
+
140
+ #### 3.1.2 알고리즘 / 처리 흐름 (Algorithm / Processing Flow)
141
+
142
+ <!-- AI AGENT: 처리 로직을 활동 다이어그램으로 표현하고, 아래에 설명을 추가하세요
143
+ Class C: 분기 조건(if/else, try/except)을 모두 명시해야 합니다
144
+
145
+ 예시: -->
146
+
147
+ ```plantuml
148
+ @startuml UNIT001_Activity
149
+ start
150
+ :입력 데이터 수신;
151
+ if (입력 유효성 검사?) then (통과)
152
+ :데이터 전처리\n(정규화, 포맷 변환);
153
+ :처리 결과 반환;
154
+ else (실패)
155
+ :유효성 오류 로깅;
156
+ :ValidationError 발생;
157
+ stop
158
+ endif
159
+ :정상 반환;
160
+ stop
161
+ @enduml
162
+ ```
163
+
164
+ **처리 단계 설명:**
165
+
166
+ 1. **입력 검증**: {INPUT_VALIDATION_DESCRIPTION}
167
+ 2. **전처리**: {PREPROCESSING_DESCRIPTION}
168
+ 3. **핵심 처리**: {CORE_PROCESSING_DESCRIPTION}
169
+ 4. **출력**: {OUTPUT_DESCRIPTION}
170
+
171
+ #### 3.1.3 데이터 구조 (Data Structures)
172
+
173
+ <!-- AI AGENT: 유닛이 처리하는 주요 입출력 데이터 구조를 정의하세요
174
+ 범위 제한이 있는 필드는 반드시 허용 범위를 명시하세요 (안전 관련 값의 경우 필수) -->
175
+
176
+ **입력 (Input)**
177
+
178
+ | 필드명 | 타입 | 허용 범위 / 값 | 필수 여부 | 설명 |
179
+ | --------- | ------ | -------------- | --------- | ------ |
180
+ | {FIELD_1} | {TYPE} | {RANGE} | 필수 | {DESC} |
181
+ | {FIELD_2} | {TYPE} | {RANGE} | 선택 | {DESC} |
182
+
183
+ **출력 (Output)**
184
+
185
+ | 필드명 | 타입 | 범위 | 설명 |
186
+ | ---------------- | ------ | ------- | ------ |
187
+ | {OUTPUT_FIELD_1} | {TYPE} | {RANGE} | {DESC} |
188
+
189
+ #### 3.1.4 오류 처리 (Error Handling)
190
+
191
+ <!-- AI AGENT: 가능한 모든 오류 조건과 처리 방법을 기술하세요
192
+ IEC 62304 Cl.5.4.3: 안전 관련 오류는 반드시 Fail-Safe 동작을 정의해야 합니다 -->
193
+
194
+ | 오류 조건 | 오류 코드 | 처리 동작 | Fail-Safe 여부 | 로그 레벨 |
195
+ | ----------------- | --------- | ------------------------ | -------------- | ------------ |
196
+ | {ERROR_1} | ERR-{N} | {ACTION} | Yes / No | ERROR / WARN |
197
+ | 입력 값 범위 초과 | ERR-001 | 처리 중단 후 기본값 반환 | Yes | ERROR |
198
+
199
+ #### 3.1.5 요구사항 추적 (Requirements Traceability)
200
+
201
+ | SRS 요구사항 ID | 요구사항 설명 | 구현 방법 |
202
+ | --------------- | ------------- | ------------- |
203
+ | {SRS_ID_1} | {REQ_DESC} | {IMPL_METHOD} |
204
+
205
+ ---
206
+
207
+ ### 3.2 {UNIT_2_NAME} (UNIT-002)
208
+
209
+ <!-- AI AGENT: 3.1 양식을 반복하여 각 유닛을 기술하세요 -->
210
+
211
+ ---
212
+
213
+ ## 4. 인터페이스 설계 (Interface Design)
214
+
215
+ > IEC 62304 Cl.5.3.2 아키텍처 인터페이스, Cl.5.4.3 상세 인터페이스
216
+
217
+ ### 4.1 유닛 간 인터페이스 시퀀스
218
+
219
+ <!-- AI AGENT: 유닛 간 주요 상호작용을 시퀀스 다이어그램으로 표현하세요
220
+ 요청-응답 사이의 데이터 타입과 오류 분기를 포함하세요
221
+
222
+ 예시: -->
223
+
224
+ ```plantuml
225
+ @startuml SDD_Unit_Sequence
226
+ participant "Caller\n(ITEM-001)" as CALLER
227
+ participant "UNIT-001\nDataInputHandler" as U1
228
+ participant "UNIT-002\nInferenceEngine" as U2
229
+ participant "UNIT-003\nResultFormatter" as U3
230
+
231
+ CALLER -> U1 : process(rawInput: RawInput)
232
+ activate U1
233
+ U1 -> U1 : validate(rawInput)
234
+ alt 유효하지 않은 입력
235
+ U1 --> CALLER : raise ValidationError(ERR-001)
236
+ else 유효한 입력
237
+ U1 -> U1 : preprocess(rawInput)
238
+ U1 -> U2 : predict(processedData: ProcessedData)
239
+ activate U2
240
+ U2 -> U2 : loadModel()
241
+ U2 -> U2 : inference(processedData)
242
+ U2 --> U1 : Result
243
+ deactivate U2
244
+ U1 -> U3 : format(result: Result)
245
+ activate U3
246
+ U3 -> U3 : applyThreshold(result)
247
+ U3 --> U1 : OutputDTO
248
+ deactivate U3
249
+ U1 --> CALLER : OutputDTO
250
+ end
251
+ deactivate U1
252
+ @enduml
253
+ ```
254
+
255
+ ### 4.2 SOUP 연동 인터페이스
256
+
257
+ > IEC 62304 Cl.5.3.5 (SOUP 격리)
258
+
259
+ | SOUP ID | SOUP 명 | 연동 방식 | 래퍼 클래스 | 고장 시 동작 |
260
+ | -------- | ----------- | ---------------- | --------------- | ------------------ |
261
+ | SOUP-001 | {SOUP_NAME} | {INTERFACE_TYPE} | {WRAPPER_CLASS} | {FAILURE_BEHAVIOR} |
262
+
263
+ ---
264
+
265
+ ## 5. 유닛 검증 계획 (Unit Verification Plan)
266
+
267
+ > IEC 62304 Cl.5.4.2, Cl.5.5.2 (유닛 검증 방법 및 합격 기준)
268
+
269
+ ### 5.1 검증 방법
270
+
271
+ | 방법 | 설명 | 적용 유닛 | 담당자 |
272
+ | -------------- | ----------------------------- | ------------------ | ---------- |
273
+ | 코드 리뷰 | 정적 분석 및 피어 리뷰 | 전체 | {REVIEWER} |
274
+ | 유닛 테스트 | pytest / unittest 기반 자동화 | UNIT-001, UNIT-002 | {DEV} |
275
+ | 정적 분석 도구 | {STATIC_ANALYSIS_TOOL} | 전체 | CI/CD |
276
+
277
+ ### 5.2 합격 기준 (Acceptance Criteria)
278
+
279
+ <!-- AI AGENT: SW 안전 등급에 따른 커버리지 기준을 적용하세요
280
+ Class A: 요구사항 기반 테스트 / Class B: Statement 커버리지 / Class C: Branch 커버리지 -->
281
+
282
+ | 유닛 ID | 커버리지 기준 | 최소 기준값 | 허용 정적 분석 경고 |
283
+ | ------------------ | ------------------ | ----------- | -------------------- |
284
+ | UNIT-001 (Class B) | Statement Coverage | >= 80% | 0건 (정당화 시 허용) |
285
+ | UNIT-002 (Class C) | Branch Coverage | 100% | 0건 |
286
+
287
+ ---
288
+
289
+ ## 6. 위험 관련 설계 고려사항 (Risk-Related Design Considerations)
290
+
291
+ > ISO 14971 Cl.6 (위험 통제 조치), IEC 62304 Cl.7.1
292
+
293
+ <!-- AI AGENT: FMEA(risk-table-fmea.md)의 Risk Control Measures를
294
+ 이 섹션에서 어떻게 구현하는지 연결하세요 -->
295
+
296
+ | 위험 ID | 위험 설명 | 설계 통제 방법 | 구현 유닛 | 검증 방법 |
297
+ | ----------- | ----------- | ---------------- | --------- | -------------- |
298
+ | {RISK_ID_1} | {RISK_DESC} | {DESIGN_CONTROL} | UNIT-{N} | {VERIFICATION} |
299
+
300
+ ---
301
+
302
+ ## 7. 추적성 매트릭스 요약 (Traceability Summary)
303
+
304
+ > IEC 62304 Cl.5.1.1(c), Cl.5.7.4
305
+
306
+ | SRS 요구사항 ID | 유닛 ID | 유닛 테스트 ID | 위험 ID |
307
+ | --------------- | -------- | -------------- | --------- |
308
+ | {SRS_ID_1} | UNIT-001 | TEST-{N} | {RISK_ID} |
309
+ | {SRS_ID_2} | UNIT-002 | TEST-{N} | - |
310
+
311
+ ---
312
+
313
+ ## 8. 변경 이력 (Revision History)
314
+
315
+ | 버전 | 날짜 | 작성자 | 변경 내용 |
316
+ | ---- | ------ | -------- | --------- |
317
+ | 0.1 | {DATE} | {AUTHOR} | 초안 작성 |
318
+
319
+ ---
320
+
321
+ > Template based on IEC 62304:2006/AMD1:2015 Cl.5.4, ISO 14971:2019