Commit & Push

https://github.com/wild-mental/SRS-from-PRD-HealthProdInfo/commit/922b2ddf4bee738b7242b024bfa65477aacb89eb

flowchart TB
    subgraph P0["Phase 0 — 인프라 스캐폴딩"]
        direction TB
        DATA_001["DATA-001"]
    end

    subgraph P1["Phase 1 — 데이터·계약 (SSOT)"]
        direction TB
        API_001["API-001"]
        API_002["API-002"]
        API_003["API-003"]
        API_004["API-004"]
        API_005["API-005"]
        API_006["API-006"]
        API_007["API-007"]
        API_008["API-008"]
        DATA_002["DATA-002"]
        DATA_003["DATA-003"]
        DATA_004["DATA-004"]
        DATA_005["DATA-005"]
        DATA_006["DATA-006"]
        DATA_007["DATA-007"]
        DATA_008["DATA-008"]
        DATA_009["DATA-009"]
        DATA_010["DATA-010"]
        DATA_011["DATA-011"]
        DATA_012["DATA-012"]
        MOCK_001["MOCK-001"]
        MOCK_002["MOCK-002"]
        MOCK_003["MOCK-003"]
        MOCK_004["MOCK-004"]
        MOCK_005["MOCK-005"]
        MOCK_006["MOCK-006"]
    end

    subgraph P2["Phase 2 — 핵심 로직 (CQRS)"]
        direction TB
        ADM_C_001["ADM-C-001"]
        ADM_C_002["ADM-C-002"]
        ADM_Q_001["ADM-Q-001"]
        ADM_Q_002["ADM-Q-002"]
        COM_C_001["COM-C-001"]
        COM_C_002["COM-C-002"]
        COM_C_003["COM-C-003"]
        COM_C_004["COM-C-004"]
        COM_C_005["COM-C-005"]
        COM_Q_001["COM-Q-001"]
        COM_Q_002["COM-Q-002"]
        COM_RH_001["COM-RH-001"]
        CRON_001["CRON-001"]
        F1_C_001["F1-C-001"]
        F1_C_002["F1-C-002"]
        F1_C_003["F1-C-003"]
        F1_C_004["F1-C-004"]
        F1_Q_001["F1-Q-001"]
        F1_Q_002["F1-Q-002"]
        F1_RH_001["F1-RH-001"]
        F2_C_001["F2-C-001"]
        F2_C_002["F2-C-002"]
        F2_C_003["F2-C-003"]
        F2_C_004["F2-C-004"]
        F2_C_005["F2-C-005"]
        F2_Q_001["F2-Q-001"]
        F2_Q_002["F2-Q-002"]
        F2_RH_001["F2-RH-001"]
        F3_C_001["F3-C-001"]
        F3_C_002["F3-C-002"]
        F3_C_003["F3-C-003"]
        F3_Q_001["F3-Q-001"]
        F4_C_001["F4-C-001"]
        F4_C_002["F4-C-002"]
        F4_C_003["F4-C-003"]
        F4_C_004["F4-C-004"]
        F4_C_005["F4-C-005"]
        F4_Q_001["F4-Q-001"]
        F4_Q_002["F4-Q-002"]
    end

    subgraph P3["Phase 3 — 테스트 자동화"]
        direction TB
        TEST_COM_001["TEST-COM-001"]
        TEST_COM_002["TEST-COM-002"]
        TEST_COM_003["TEST-COM-003"]
        TEST_F1_001["TEST-F1-001"]
        TEST_F1_002["TEST-F1-002"]
        TEST_F1_003["TEST-F1-003"]
        TEST_F1_004["TEST-F1-004"]
        TEST_F1_005["TEST-F1-005"]
        TEST_F1_006["TEST-F1-006"]
        TEST_F2_001["TEST-F2-001"]
        TEST_F2_002["TEST-F2-002"]
        TEST_F2_003["TEST-F2-003"]
        TEST_F2_004["TEST-F2-004"]
        TEST_F2_005["TEST-F2-005"]
        TEST_F2_006["TEST-F2-006"]
        TEST_F3_001["TEST-F3-001"]
        TEST_F3_002["TEST-F3-002"]
        TEST_F3_003["TEST-F3-003"]
        TEST_F4_001["TEST-F4-001"]
        TEST_F4_002["TEST-F4-002"]
        TEST_F4_003["TEST-F4-003"]
        TEST_F4_004["TEST-F4-004"]
        TEST_F4_005["TEST-F4-005"]
        TEST_F4_006["TEST-F4-006"]
    end

    subgraph P4["Phase 4 — 비기능·인프라·보안"]
        direction TB
        NFR_001["NFR-001"]
        NFR_002["NFR-002"]
        NFR_003["NFR-003"]
        NFR_004["NFR-004"]
        NFR_005["NFR-005"]
        NFR_006["NFR-006"]
        NFR_ARCH_001["NFR-ARCH-001"]
        NFR_COST_001["NFR-COST-001"]
        NFR_COST_002["NFR-COST-002"]
        NFR_MON_001["NFR-MON-001"]
        NFR_MON_002["NFR-MON-002"]
        NFR_MON_003["NFR-MON-003"]
        NFR_MON_004["NFR-MON-004"]
        NFR_PERF_001["NFR-PERF-001"]
        NFR_PERF_002["NFR-PERF-002"]
        NFR_SEC_001["NFR-SEC-001"]
        NFR_SEC_002["NFR-SEC-002"]
        NFR_SEC_003["NFR-SEC-003"]
    end

    subgraph P5["Phase 5 — UI/UX 프론트엔드"]
        direction TB
        UI_001["UI-001"]
        UI_002["UI-002"]
        UI_003["UI-003"]
        UI_004["UI-004"]
        UI_010["UI-010"]
        UI_011["UI-011"]
        UI_012["UI-012"]
        UI_013["UI-013"]
        UI_020["UI-020"]
        UI_021["UI-021"]
        UI_022["UI-022"]
        UI_023["UI-023"]
        UI_024["UI-024"]
        UI_025["UI-025"]
        UI_030["UI-030"]
        UI_031["UI-031"]
        UI_040["UI-040"]
        UI_041["UI-041"]
        UI_042["UI-042"]
        UI_050["UI-050"]
        UI_051["UI-051"]
        UI_060["UI-060"]
        UI_061["UI-061"]
        UI_062["UI-062"]
    end

    subgraph P6["Phase 6 — 부록 (Should/Could)"]
        direction TB
        P2_001["P2-001"]
        P2_002["P2-002"]
        P2_003["P2-003"]
        P2_004["P2-004"]
        P2_005["P2-005"]
        P2_006["P2-006"]
        P2_007["P2-007"]
    end

    %% --- Dependency edges ---
    ADM_Q_001 --> ADM_C_001
    ADM_Q_002 --> ADM_C_002
    F4_C_003 --> ADM_C_002
    COM_C_003 --> ADM_Q_001
    F4_C_001 --> ADM_Q_002
    DATA_004 --> API_001
    DATA_005 --> API_002
    DATA_002 --> API_003
    DATA_003 --> API_003
    DATA_007 --> API_004
    DATA_002 --> API_005
    DATA_001 --> API_006
    DATA_001 --> API_007
    DATA_001 --> API_008
    DATA_009 --> COM_C_001
    COM_C_001 --> COM_C_002
    API_005 --> COM_C_003
    DATA_002 --> COM_C_003
    DATA_001 --> COM_C_004
    DATA_001 --> COM_C_005
    API_003 --> COM_Q_001
    DATA_002 --> COM_Q_001
    DATA_003 --> COM_Q_001
    COM_Q_001 --> COM_Q_002
    COM_Q_001 --> COM_RH_001
    COM_Q_002 --> COM_RH_001
    F1_Q_001 --> CRON_001
    F1_C_004 --> CRON_001
    NFR_001 --> CRON_001
    DATA_001 --> DATA_002
    DATA_002 --> DATA_003
    DATA_002 --> DATA_004
    DATA_003 --> DATA_005
    DATA_002 --> DATA_006
    DATA_002 --> DATA_007
    DATA_009 --> DATA_007
    DATA_009 --> DATA_008
    DATA_001 --> DATA_009
    DATA_007 --> DATA_012
    DATA_009 --> DATA_012
    DATA_002 --> DATA_010
    DATA_012 --> DATA_010
    DATA_010 --> DATA_011
    API_001 --> F1_C_001
    DATA_004 --> F1_C_001
    F1_C_001 --> F1_C_002
    F1_C_001 --> F1_C_003
    F1_C_001 --> F1_C_004
    DATA_004 --> F1_C_004
    API_006 --> F1_Q_001
    MOCK_005 --> F1_Q_001
    F1_Q_001 --> F1_Q_002
    DATA_004 --> F1_Q_002
    F1_Q_001 --> F1_RH_001
    F1_Q_002 --> F1_RH_001
    F1_C_001 --> F1_RH_001
    F1_C_004 --> F1_RH_001
    F2_Q_001 --> F2_C_001
    F2_Q_002 --> F2_C_001
    DATA_005 --> F2_C_001
    F2_C_002 --> F2_C_001
    DATA_001 --> F2_C_002
    DATA_003 --> F2_C_003
    F2_C_001 --> F2_C_004
    F2_C_001 --> F2_C_005
    DATA_003 --> F2_Q_001
    API_007 --> F2_Q_002
    MOCK_006 --> F2_Q_002
    F2_Q_001 --> F2_RH_001
    F2_C_001 --> F2_RH_001
    DATA_001 --> F3_C_001
    F3_C_001 --> F3_C_002
    F3_C_002 --> F3_C_003
    F1_RH_001 --> F3_Q_001
    API_004 --> F4_C_001
    DATA_007 --> F4_C_001
    F4_C_001 --> F4_C_002
    F4_C_001 --> F4_C_003
    F4_C_003 --> F4_C_004
    F4_C_003 --> F4_C_005
    F4_C_004 --> F4_C_005
    DATA_012 --> F4_C_005
    COM_C_002 --> F4_C_005
    DATA_005 --> F4_Q_001
    DATA_006 --> F4_Q_001
    DATA_006 --> F4_Q_002
    NFR_003 --> F4_Q_002
    API_001 --> MOCK_001
    API_002 --> MOCK_002
    API_003 --> MOCK_003
    API_004 --> MOCK_004
    API_006 --> MOCK_005
    API_007 --> MOCK_006
    DATA_001 --> NFR_001
    DATA_001 --> NFR_002
    NFR_002 --> NFR_003
    NFR_001 --> NFR_004
    NFR_001 --> NFR_005
    NFR_001 --> NFR_006
    NFR_005 --> NFR_006
    API_006 --> NFR_ARCH_001
    NFR_001 --> NFR_COST_001
    NFR_002 --> NFR_COST_001
    NFR_COST_001 --> NFR_COST_002
    NFR_001 --> NFR_MON_001
    NFR_MON_001 --> NFR_MON_002
    NFR_001 --> NFR_MON_003
    F4_C_003 --> NFR_MON_004
    NFR_MON_002 --> NFR_MON_004
    NFR_001 --> NFR_PERF_001
    UI_001 --> NFR_PERF_001
    F1_RH_001 --> NFR_PERF_002
    F2_RH_001 --> NFR_PERF_002
    NFR_001 --> NFR_SEC_001
    COM_C_001 --> NFR_SEC_002
    F2_C_002 --> NFR_SEC_003
    DATA_008 --> P2_001
    COM_C_002 --> P2_001
    F2_RH_001 --> P2_002
    CRON_001 --> P2_003
    F4_C_004 --> P2_003
    UI_010 --> P2_004
    UI_011 --> P2_004
    DATA_010 --> P2_005
    COM_C_002 --> P2_005
    NFR_002 --> P2_006
    NFR_MON_001 --> P2_007
    COM_C_001 --> TEST_COM_001
    COM_RH_001 --> TEST_COM_002
    COM_C_004 --> TEST_COM_003
    COM_C_005 --> TEST_COM_003
    F1_C_001 --> TEST_F1_001
    F1_C_002 --> TEST_F1_002
    F1_C_003 --> TEST_F1_003
    F1_Q_002 --> TEST_F1_004
    F1_RH_001 --> TEST_F1_004
    COM_Q_002 --> TEST_F1_005
    F1_RH_001 --> TEST_F1_006
    F2_RH_001 --> TEST_F2_001
    F2_C_001 --> TEST_F2_002
    F2_C_002 --> TEST_F2_003
    F2_C_003 --> TEST_F2_004
    F2_C_004 --> TEST_F2_005
    F2_RH_001 --> TEST_F2_006
    F3_C_001 --> TEST_F3_001
    F3_C_003 --> TEST_F3_002
    F3_Q_001 --> TEST_F3_003
    F4_Q_001 --> TEST_F4_001
    F4_Q_002 --> TEST_F4_002
    F4_C_001 --> TEST_F4_003
    F4_C_002 --> TEST_F4_004
    F4_C_003 --> TEST_F4_005
    F4_C_004 --> TEST_F4_005
    F4_C_005 --> TEST_F4_005
    F4_C_001 --> TEST_F4_006
    DATA_001 --> UI_001
    UI_001 --> UI_002
    UI_001 --> UI_003
    UI_001 --> UI_004
    UI_002 --> UI_010
    MOCK_003 --> UI_010
    UI_002 --> UI_011
    MOCK_001 --> UI_011
    UI_011 --> UI_012
    UI_010 --> UI_013
    UI_002 --> UI_020
    MOCK_001 --> UI_020
    MOCK_002 --> UI_020
    UI_001 --> UI_021
    UI_001 --> UI_022
    UI_021 --> UI_023
    UI_020 --> UI_024
    UI_024 --> UI_025
    UI_002 --> UI_030
    MOCK_004 --> UI_030
    UI_003 --> UI_031
    UI_001 --> UI_040
    UI_003 --> UI_040
    UI_011 --> UI_040
    F3_C_001 --> UI_040
    F3_C_002 --> UI_040
    F3_C_003 --> UI_040
    COM_C_005 --> UI_040
    UI_040 --> UI_041
    UI_003 --> UI_041
    UI_011 --> UI_042
    UI_002 --> UI_050
    UI_020 --> UI_051
    COM_C_002 --> UI_060
    ADM_Q_001 --> UI_061
    UI_002 --> UI_061
    ADM_Q_002 --> UI_062
    UI_002 --> UI_062

    %% --- Epic-based color classes ---
    classDef cInfra  fill:#E5E7EB,stroke:#6B7280,color:#111827
    classDef cData   fill:#DBEAFE,stroke:#2563EB,color:#1E3A8A
    classDef cApi    fill:#CFFAFE,stroke:#0891B2,color:#164E63
    classDef cMock   fill:#EDE9FE,stroke:#7C3AED,color:#4C1D95
    classDef cF1     fill:#FFEDD5,stroke:#EA580C,color:#7C2D12
    classDef cF2     fill:#FEE2E2,stroke:#DC2626,color:#7F1D1D
    classDef cF3     fill:#FCE7F3,stroke:#DB2777,color:#831843
    classDef cF4     fill:#FEF3C7,stroke:#D97706,color:#78350F
    classDef cCommon fill:#CCFBF1,stroke:#0D9488,color:#134E4A
    classDef cAdmin  fill:#E9D5FF,stroke:#9333EA,color:#581C87
    classDef cNfr    fill:#F5F5F4,stroke:#78716C,color:#44403C
    classDef cUi     fill:#D1FAE5,stroke:#059669,color:#064E3B
    classDef cTest   fill:#F3F4F6,stroke:#9CA3AF,color:#374151

    %% --- Apply Epic colors to nodes ---
    class ADM_C_001,ADM_C_002,ADM_Q_001,ADM_Q_002,P2_005,UI_060,UI_061,UI_062 cAdmin
    class API_001,API_002,API_003,API_004,API_005,API_006,API_007,API_008 cApi
    class COM_C_001,COM_C_002,COM_C_003,COM_C_004,COM_C_005,COM_Q_001,COM_Q_002,COM_RH_001,P2_001 cCommon
    class DATA_002,DATA_003,DATA_004,DATA_005,DATA_006,DATA_007,DATA_008,DATA_009,DATA_010,DATA_011,DATA_012 cData
    class CRON_001,F1_C_001,F1_C_002,F1_C_003,F1_C_004,F1_Q_001,F1_Q_002,F1_RH_001,P2_003 cF1
    class F2_C_001,F2_C_002,F2_C_003,F2_C_004,F2_C_005,F2_Q_001,F2_Q_002,F2_RH_001,P2_002 cF2
    class F3_C_001,F3_C_002,F3_C_003,F3_Q_001 cF3
    class F4_C_001,F4_C_002,F4_C_003,F4_C_004,F4_C_005,F4_Q_001,F4_Q_002 cF4
    class DATA_001 cInfra
    class MOCK_001,MOCK_002,MOCK_003,MOCK_004,MOCK_005,MOCK_006 cMock
    class NFR_001,NFR_002,NFR_003,NFR_004,NFR_005,NFR_006,NFR_ARCH_001,NFR_COST_001,NFR_COST_002,NFR_MON_001,NFR_MON_002,NFR_MON_003,NFR_MON_004,NFR_PERF_001,NFR_PERF_002,NFR_SEC_001,NFR_SEC_002,NFR_SEC_003,P2_006,P2_007 cNfr
    class TEST_COM_001,TEST_COM_002,TEST_COM_003,TEST_F1_001,TEST_F1_002,TEST_F1_003,TEST_F1_004,TEST_F1_005,TEST_F1_006,TEST_F2_001,TEST_F2_002,TEST_F2_003,TEST_F2_004,TEST_F2_005,TEST_F2_006,TEST_F3_001,TEST_F3_002,TEST_F3_003,TEST_F4_001,TEST_F4_002,TEST_F4_003,TEST_F4_004,TEST_F4_005,TEST_F4_006 cTest
    class P2_004,UI_001,UI_002,UI_003,UI_004,UI_010,UI_011,UI_012,UI_013,UI_020,UI_021,UI_022,UI_023,UI_024,UI_025,UI_030,UI_031,UI_040,UI_041,UI_042,UI_050,UI_051 cUi