文件版本:1.0 建立日期:2026-05-03 對應 SD:design.md | 對應 SA:api-spec.md | 對應 FE:frontend-spec.md
feedback_review_granularity.md)path = "/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-oscal", develop = true;最終驗收前才進版到 0.0.16 pin(依使用者明示)docs/features/FR-024-2605-compliance-framework-pdf-import-v2/referance/CMMC 2.0 Level 1 Assessment Guide.pdf + Level 2 Assessment Guide.pdf,兩者共用 ParserAdapterType.CMMC_2 adapterfeedback_sql_migration_use_cmmgr.md)依賴:無
scripts/sql/2026-05-03-oscal-framework-parse-jobs.sqlinfra/oscal/model/oscal_framework_parse_job.py — OscalFrameworkParseJob(schema=oscal)infra/oscal/mapper/oscal_framework_parse_job_mapper.pydomain/oscal/entity/oscal_framework_parse_job_entity.pydomain/oscal/entity/oscal_framework_parse_job_query_entity.pydomain/oscal/repository/oscal_framework_parse_job_repo.pydomain/oscal/service/oscal_framework_parse_job_domain_service.pyinfra/oscal/repository/oscal_framework_parse_job_repo_impl.py(繼承 BaseRepositoryImpl,session lazy)common/code/grc_error_code.py 新增 7 個 GRC error code(見 api-spec §3)di_containers/oscal/oscal_containers.py:新增 repo / domain service / app service providersSelf-check:
依賴:A 完成(不過 jedi-oscal 改動可平行;嚴格說 B 只在 Phase D BE parse endpoint 之前要好就行)
pyproject.toml:jedi-oscal pin 改為註解,啟用 [tool.poetry.dev-dependencies] 區塊的 path 行poetry updateparse_pdf_to_dictjedi_oscal/app/services/oscal_import_service.py:
parse_pdf_to_dict(file_stream, parser_type) -> dictoscal_parser_factory.get_oscal_parser_adapter(parser_type) 取 adapter,呼叫 pdf_parser() 拿 raw list[dict]convert_to_oscal_catalog_entity() 轉 CatalogEntity,序列化成 OSCAL-shaped dict(含 catalog metadata + groups[] + controls[] + assessments[],每筆給 stable uid)import_from_dictjedi_oscal/app/services/oscal_import_service.py:
import_from_dict(oscal_dict, payload, curr_user, locale=None, version_uid=None) -> FrameworkVersionEntity@transaction,但本方法已假設 caller 在 transaction scope 內(不再加裝飾器)import_or_update_oscal_from_pdf() 內部改成兩段呼叫(保留簽章不變)ImportFrameworkVersionPayload dataclassjedi_oscal/app/dto/...:替代散裝 dict 參數parse_pdf_to_dict smoke test,確認 dict 結構符合預期依賴:A、B
app/oscal/service/oscal_framework_parse_job_service.py:
list_jobs(filter) — list with summary countparse(file, payload, curr_user) — 建 parse_job + 同步呼叫 OscalImportService.parse_pdf_to_dict + 處理失敗 fallback to status=failedget_detail(uid, curr_user) — 取單筆,jedi-oscal framework_uid → name 補欄位confirm(uid, decisions, overrides, curr_user) — 套用 → 呼叫 import_from_dictdiscard(uid) — 軟刪@transactionapi/oscal/serializers/framework_parse_job/:
FrameworkParseRequestSchema、FrameworkParseJobConfirmRequestSchemaFrameworkParseJobListResponseSchema、FrameworkParseJobDetailResponseSchema、FrameworkParseJobConfirmResponseSchema、FrameworkParseResponseSchemaapi/oscal/routes/framework/oscal_framework_parse_job_route.py:
api/oscal/__init__.py 註冊 4 個 url(api.add_resource)ui_routes migration 加新前端路由(依 SOP reference_permission_system_sop)route_capabilities 對應 BE 4 個 endpointSelf-check:
依賴:A
core/scheduler.py:新 cron job framework_parse_job_cleanup,每天 01:00 跑
is_active=true AND created_at < now() - interval '7 days'is_active=false、status='expired'、updated_user='system'ssp_docx_parse_job_cleanup(若有);無則沿用 scheduler 模式依賴:A/B/C 完成(FE 需要實際端點才能 e2e)
src/router/index.ts:兩條動態路由src/config/api/api.js:OSCAL_FRAMEWORK_PARSE_JOBS 常數src/service/FrameworkImportService.js:5 個方法src/composables/useFrameworkImportDraft.jssrc/views/compliance-framework/FrameworkImportPage.vue(page wrapper + step 狀態機)src/components/compliance-framework/import/:
DraftBanner.vueFrameworkImportUploadStep.vueFrameworkImportPreviewStep.vueGroupTreeEditor.vueControlListEditor.vueAssessmentListEditor.vueErrorPanel.vuesrc/config/locales/i18n/zh-tw/compliance-framework-version-import.jsonsrc/config/locales/i18n/en/compliance-framework-version-import.jsonComplianceFrameworkVersionManage.vue:
importVersionDialog 整段(template + script + handlers)createDocByImportFile / updateDocByImportFile 兩個 handlerURL.createObjectURL(file),預覽用 <iframe :src="blobUrl">依賴:A–E 完成後
docs/changelog/2026-05-XX-feat-framework-pdf-import-v2-be.mddocs/changelog/2026-05-XX-feat-framework-pdf-import-v2-fe.mddocs/changelog/2026-05-XX-feat-jedi-oscal-import-service-split.md(jedi-oscal 改動)docs/api/oscal/api-spec.md / design.md 補 framework_parse_job 端點段落compliance-manager-fe/docs/features/compliance-framework-pdf-import/release-notes.mddocs/conversation-history/2026-05-03-compliance-framework-pdf-import/依賴:A–F 完成
pr-review-toolkit:code-reviewerpr-review-toolkit:code-reviewer| 項目 | 說明 |
|---|---|
audit_file_type 路徑舊端點處置 |
暫保留,待新流程穩定後再評估 deprecate |
| Excel 匯入兩階段化 | 本 spec 不做(明確 out of scope) |
| Adapter L1/L2 區分 | 共用 CMMC_2 adapter 即可,PDF 結構規律相同 |
| jedi-oscal 0.0.16 publish | 開發期 develop path,release 前再進版 |