화살표는 FK 참조(자식 → 부모)입니다. 헤더의 점은 코드 연동 상태를 나타냅니다.
연동 판정 기준: Edge Function platform-api → platformRepository.ts의 Supabase REST 호출 + 앱 코드 실사용 여부.
소비자 계정, 약관 동의, 주소록, 푸시 기기, 탈퇴 요청
사진 업로드 → GPT-4o Vision 분석 → 견적 산출
Toss Payments 연동, 단계별(5단계) 에스크로 정산, 웹훅 멱등 처리
숙련공 프로필, 특허(10-2026-0010208) 가중치 매칭, 견적 제출/수락
계약서 제2조 산출물 기준으로 코드에서 확인된 실제 구현 기능만 나열했습니다. 화면 수는 저장소 내 기술 명세서(technical-specification.md) 기준이며, 계약 최소 요건(7·6화면, 5메뉴)을 상회합니다.
| 기능 | 화면/모듈 | 백엔드 API | DB | 상태 |
|---|---|---|---|---|
| ① 소비자 모바일 앱 — 계약 7화면 → 구현 18화면/상태 (Flutter · iOS/Android/Web) | ||||
| 스플래시 · 온보딩 3종(사진 진단/매칭/에스크로 안내) | 화면 1–4 | — | — | 구현 |
| 로그인/회원가입 진입 | 화면 5 | Supabase Auth | profiles | 구현 |
| 약관·개인정보 동의(전체/필수/선택 · 필수 검증) | 화면 6 | saveConsumerConsents · getConsumerConsentState | user_consents | 구현 |
| 홈 대시보드(주소 기반) · 진행중 요청 | 화면 7 | listConsumerRepairRequests | repair_requests | 구현 |
| 수리 요청 작성(카테고리·주소·일정·설명) | 화면 8–9 | createRepairRequest | repair_requests | 구현 |
| 사진 촬영·업로드·삭제 관리 | 화면 10 | registerRepairPhoto · deleteRepairPhoto | repair_photos · Storage | 구현 |
| AI 분석 진행/결과(손상·심각도·작업·금액·신뢰도·주의) | 화면 11–12 | analyzeRepairPhoto · calculateEstimate | ai_estimates | 구현 |
| 파트너 매칭 목록·상세(점수 근거·리뷰·가능 지역) | 화면 13–14 | matchPartnersForRequest | match_results | 구현 |
| 견적 비교·선택·수락(실패 복구 포함) | 화면 15 | listQuotesForRequest · acceptPartnerQuoteForRequest | partner_quotes | 구현 |
| Toss 결제(주문 생성·승인·조회·취소·영수증) | 화면 16 | createPaymentOrder… 외 5종 | payments | 구현 |
| 5단계 에스크로 상태 표시 | 화면 16 | getEscrowStagesForRequest | escrow_stages | 구현 |
| 진행 타임라인 · 알림 센터 | 화면 17 | notifyConsumerForRequest | notifications | 구현 |
| 완료 확인(검수 승인) | 화면 17 | confirmRepairCompletion | repair_requests | 구현 |
| FCM 푸시 기기 등록·해제 | 설정 | registerConsumerPushDevice · unregister… | consumer_push_devices | 구현 |
| 주소록 관리(추가·수정·삭제·기본 지정) | 마이페이지 | upsertConsumerAddress · deleteConsumerAddress | consumer_addresses | 구현 |
| 프로필 조회·수정 · 회원 탈퇴 요청 | 화면 18 | getConsumerProfile · updateConsumerProfile · requestConsumerAccountDeletion | profiles · account_deletion_requests | 구현 |
| 모바일 웹 버전(Flutter Web 빌드·전 화면) | 웹 | kIsWeb 분기 처리 | — | 웹 PG·카메라·푸시 계약상 제외 |
| ② 파트너(숙련공) 앱 — 계약 6화면 → 구현 12화면/상태 (Flutter) | ||||
| 스플래시 · 파트너 로그인 | 화면 1–2 | Supabase Auth | profiles | 구현 |
| 파트너 약관 동의(사업자·정산정보 처리 동의) | 화면 3 | savePartnerConsents | user_consents | 구현 |
| 프로필·인증 상태 · 워크스페이스(완성도·서류·성과) | 화면 4 | getPartnerWorkspace | partner_profiles | 구현 |
| 숙련도·카테고리·서비스 지역 설정 | 화면 5 | — | partner_skills | 구현 |
| 매칭된 요청 피드(관리자 전체 목록과 분리) | 화면 6 | partnerListRequests | match_results | 구현 |
| 요청 상세(사진·AI 분석 결과·예상 작업) | 화면 7 | — | repair_photos · ai_estimates | 구현 |
| 견적 제안(금액·예상 기간·메모) | 화면 8 | submitPartnerQuote | partner_quotes | 구현 |
| 요청 수락/거절 상태 전환 | 화면 9 | declinePartnerRequest | partner_request_declines | 구현 |
| 작업 단계 업데이트(방문→진행→완료→정산 대기) | 화면 10 | updateRepairStatus | repair_requests | 구현 |
| 정산·에스크로 조회 · 정산 계좌 마스킹 | 화면 11–12 | getEscrowStagesForRequest | escrow_stages | 구현 |
| 파트너 가입(계정 전환) 요청 | 화면 12 | submitPartnerAccountRequest | partner_account_requests | 구현 |
| ③ 관리자 웹 — 5개 메뉴 (React 19 + TypeScript + Vite) | ||||
| 대시보드(활성 요청·AI 견적 범위·추천 파트너·에스크로) | 대시보드 | adminGetDashboardSnapshot | platform_* 뷰 2종 | 구현 |
| 요청/견적/매칭 관리(요청 상세·AI 결과·매칭 결과) | 요청 관리 | adminListRequests | platform_repair_requests | 구현 |
| 사용자·파트너·정산/에스크로 관리 메뉴 | 3개 메뉴 | — | profiles · partner_profiles · escrow_stages | 구현 |
| ④ AI 사진 분석·견적 모듈 — OpenAI GPT-4o Vision | ||||
| 사진 → 견적 산출(출력 6필드: 손상유형·심각도·작업·금액범위·신뢰도·주의사항) | core/aiEstimator.ts | analyzeRepairPhoto | ai_estimates | 구현 |
| fail-closed 운영 보호(API 키 미설정 시 명시적 실패) | — | OpenAIResponsesVisionEstimator | — | 구현 |
| 로컬 검수/라이브 어댑터 이중화(결정적 검수 결과) | — | LocalVisionEstimator | — | 구현 |
| ⑤ 특허 다중 숙련도 가중치 매칭 엔진 — 10-2026-0010208 | ||||
| 7개 요소 가중치 스코어링(숙련도·거리·평점·응답속도·완료율·가용성·견적적합도) | core/matchingEngine.ts | matchPartnersForRequest | partner_skills · match_results | 구현 |
| 총점·순위·점수 breakdown·추천 근거 문장 자동 생성 | — | — | match_results.breakdown | 구현 |
| ⑥ 단계별 에스크로 정산 시스템 — Toss Payments 연동 | ||||
| 5단계 상태 전이(견적확정→착수금→진행→완료→잔금) · 단계 건너뛰기 방지 RPC | core/escrow.ts | advanceEscrowStageForRequest | escrow_stages | 구현 |
| 견적 수락 시 경쟁 견적 자동 거절 + 에스크로 원자적 생성 | — | acceptPartnerQuoteForRequest | partner_quotes · escrow_stages | 구현 |
| 결제 주문 생성·승인·조회·새로고침·취소(승인/취소 멱등키 분리) | — | createPaymentOrderForRequest 외 5종 | payments | 구현 |
| 결제 웹훅 수신·중복 차단(event_key · payload_hash unique) | — | handlePaymentWebhook | payment_events | 구현 |
| 결제 취소 시 에스크로 단계 자동 재개 | — | reopenEscrowStageAfterCancellation | escrow_stages | 구현 |
| 착수금/잔금 금액 분리 · 수락 견적 금액 일치 검증 | — | assertEscrowAmountsMatchAcceptedQuote | — | 구현 |
| ⑦ Backend 인프라 — Supabase | ||||
| Auth JWT 인증 + Edge Function Bearer 토큰 검증 | platform-api | Edge Function 721줄 | auth.users | 구현 |
| PostGIS 위치 저장(요청·파트너) · 거리 기반 매칭 | — | geography(point,4326) | repair_requests · partner_profiles | 구현 |
| Storage 사진 저장(경로 unique 제약) | — | — | repair_photos | 구현 |
| FCM 푸시 발송 모듈 | — | notificationSender.ts | notifications · consumer_push_devices | 구현 |
| 저장소 이중화(로컬 검수/운영 REST) · 환경변수 fail-fast 전환 | — | createPlatformRepositoryFromEnv | — | 구현 |
| ⑧ 보안 — JWT · RLS · HTTPS · PCI-DSS | ||||
| 전 테이블 RLS 활성화 + 소비자/파트너/관리자 정책 | migrations | — | 전체 | 구현 |
| 소유권·역할·매칭 파트너 행위 권한 검사 계층 | — | platformAccessControl.ts (212줄) | — | 구현 |
| is_admin() security definer 재귀 회피 · security_invoker 뷰 | — | — | platform_* 뷰 | 구현 |
| 카드정보 비저장 구조 — PG(PCI-DSS) 위임, 참조키만 보관 | — | — | payments(payment_key) | 구현 |