| 항목 | 내용 |
| 기능 ID | FEAT-GOV |
| 연결 시스템 | 마스터 시스템⑨ 지자체연계 · ③ 생존지킴(d02 SOS) · 사업플랜 B2G |
| 한 줄 정의 | 지자체·복지기관이 관할 어르신의 안전·돌봄 현황을 보고, SOS·복지 연계를 처리 |
| 관련 액터 | 지자체 관제(웹)실벗서버어르신 PWA |
개인정보 최우선 — 지자체에 제공되는 데이터는 어르신 동의 범위 내로 한정하고, 모든 조회는 audit_logs에 기록한다. 공공 연계라도 존엄·프라이버시가 먼저다.
▍설계 7계층 체크리스트
| 계층 | 이 문서의 섹션 |
| ① UI | 지자체 관제 대시보드 SCR-GOV-01 |
| ② Flow | SOS·이상징후 → 지자체 접수 → 처리 상태 머신 |
| ③ Data | gov_orgs / gov_cases / audit_logs |
| ④ API | 관할 현황·케이스·리포팅 엔드포인트 |
| ⑤ Seq | SOS 에스컬레이션 → 지자체 접수 시퀀스 |
| ⑥ Comp | 지자체 브릿지·권한 모듈 |
| ⑦ Test | 검수 체크리스트 |
① UI · 화면 명세
지자체 관제 대시보드 SCR-GOV-01 (웹·담당자용)
| 영역 | 요소 / 동작 |
| 관할 현황 요약 | 등록 어르신 수·오늘 SOS·미응답 안부·복지 대기 건수 |
| 실시간 케이스 목록 | SOS·이상징후 케이스(상태·시각·위치), 긴급순 정렬 |
| 케이스 처리 | 접수→출동→완료 상태 변경, 메모, 119 이관 |
| 리포팅 | 주간/월간 통계 다운로드(B2G 보고용) |
담당자 화면은 어르신 PWA와 별개의 관리자 웹(데스크톱 기준). 단, 동일 디자인 토큰 사용.
② Flow · 케이스 처리 상태 머신
발생(SOS/이상징후)→
지자체 접수(received)→
출동/조치(dispatched)→
완료(resolved)
d02 SOS 에스컬레이션 2단계(가족 무응답)에서 지자체 케이스가 자동 생성된다. 지자체는 SOS의 보조 안전망.
③ Data · DB 스키마
MariaDB · UTF8MB4 · InnoDB
CREATE TABLE gov_orgs (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100), -- '○○구 복지과'
region VARCHAR(60), -- 관할 지역코드
is_active TINYINT DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE gov_cases (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
org_id INT NOT NULL,
user_id BIGINT NOT NULL,
case_type ENUM('sos','no_response','welfare'),
sos_event_id BIGINT, -- d02 sos_events 연계
status ENUM('received','dispatched','resolved') DEFAULT 'received',
memo TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (org_id) REFERENCES gov_orgs(id),
FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE audit_logs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
actor VARCHAR(80), -- 담당자/시스템
action VARCHAR(60), -- 'view_user','update_case'
target_id BIGINT,
detail JSON,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
설계 포인트 — 지자체의 모든 개인정보 조회는 audit_logs에 남는다. 누가·언제·무엇을 봤는지 추적 가능 — 공공 신뢰의 기반.
④ API · 엔드포인트 명세 (관리자 권한)
| M | 경로 | 설명 |
| GET | /gov/dashboard | 관할 현황 요약(권한·관할 필터) |
| GET | /gov/cases | 케이스 목록(긴급순) |
| PUT | /gov/cases/{id} | 케이스 상태 변경·메모(audit 기록) |
| GET | /gov/report | 주간/월간 통계 리포팅 |
권한 — 모든 /gov/* 는 관리자 역할 + 관할 지역 일치를 검증. 권한 밖 회원 조회 시 FORBIDDEN(403) + audit 기록.
⑥ Comp · 컴포넌트 / 모듈 구조
프론트엔드 (관리자 웹)
admin/gov/
├─ GovDashboard.js
├─ CaseList.js
├─ CaseDetail.js
└─ ReportExport.js
백엔드 (PHP)
app/
├─ Controllers/GovController.php
├─ Middleware/GovAuthGuard.php # 관리자+관할 검증
└─ Services/
├─ GovBridge.php # SOS→케이스 생성(d02 연계)
└─ AuditLogger.php # 모든 조회·변경 기록
| 모듈 | 책임 |
GovAuthGuard | 관리자 역할 + 관할 지역 일치 검증. 권한 밖 접근 차단·기록. |
AuditLogger | 개인정보 조회/변경을 빠짐없이 audit_logs에 기록. 공공 신뢰의 근거. |
⑦ Test · 검수 체크리스트
| ID | 시나리오 | 기대 결과 |
| T-01 | SOS 가족 무응답 2단계 | 관할 gov_cases 자동 생성, 관제 알림 |
| T-02 | 담당자 케이스 처리 | 상태 변경 + audit_logs 기록 |
| T-03 | 관할 밖 회원 조회 시도 | FORBIDDEN(403) + audit 기록 |
| T-04 | 비동의 항목 조회 | share_scope 밖 데이터 미제공 |
| T-05 | 월간 리포팅 다운로드 | 통계 집계 정상, 개인 식별정보 비식별화 |
완료 판정 — T-01~T-05 통과 시 FEAT-GOV 완료. T-03·T-04(권한·동의)는 공공 연계의 법적·윤리적 필수.
기능설계 ⑨ 완성 — 지자체 연계를 7계층으로 설계했습니다. 공공 돌봄과 잇되, 존엄·프라이버시를 먼저 지킵니다.