SECTION 01 · STATUS지금까지 된 것
기반은 다 깔렸습니다. DB·서버·인증·물품 목록·자사몰이 붙어 있고, 백오피스 화면만 남았습니다.
DONE
20개 표
1차 13 + 2차 5(사진·재고·실사·대여·정산) + 4차 1(히어로) + 5차 1(설정)
DONE
247개 품목
16 라인 · 33 카테고리. 관리자에서 DB 에 바로 저장
DONE
45건 주문
7가지 상태에 흩뿌린 더미. 입금·발주·검수·배송까지 딸려 있음
DONE
9개 화면
물품 목록·상세 · 주문·입금 · 취합·발주·검수 · 배송·인도 · 재고·대여 · 히어로 · 정산
DONE
P1~P6 전부
남은 것은 자사몰 주문 수신(O-6)과 품목 추가·복제(D-4)
| 기반 | 상태 | 내용 |
|---|---|---|
| 데이터베이스 | 완료 | edm Open Database(MySQL 9) · 표 18개 · 서버 대행 API |
| 앱 서버 | 완료 | Node · 정적 서빙 + /api/* · 열람 제한 · 게이트 헤더 인증 |
| 권한 | 완료 | Role 판별 · app_user 역할 · 저장은 admin·hq 만 |
| 물품 목록 | 완료 | 247개 · 검색·필터·정렬 · 인라인 수정 · DB 저장 · 변경 이력 |
| 자사몰 | 완료 | 6 라인 · 장바구니 · 비회원 주문서 생성 (제출 API 는 P2) |
| 더미 데이터 | 완료 | 학원 5 · 학생 24 · 업체 5 · 주문 45 · 취합 48 · 발주 44 · 검수 35 · 배송 17 · 재고 이동 59 · 대여 6 · 정산 8일 |
PHASE 1물품 상세 — 설명 · 사진 · 매입가 · 비고
목록에서 고칠 수 없는 것들을 담는 화면입니다. 매입가가 여기 들어와야 정산이 성립하므로 P6 보다 먼저 와야 합니다.
| ID | 기능 | 내용 | 상태 |
|---|---|---|---|
| D-1 | 상세 조회·수정 | 이름·규격·단위·판매가·보증금·안전재고·상태에 더해 상세 설명·매입가·주 매입처·내부 비고 | 완료 |
| D-2 | 사진 업로드 | 여러 장 등록·순서 변경·대표 지정. 파일은 볼륨에, 경로만 DB(item_image) |
완료 |
| D-3 | 마진 즉시 계산 | 판매가와 매입가로 마진·마진율을 화면에서 바로 보여준다 — 값을 잘못 넣으면 눈에 띈다 | 완료 |
| D-4 | 품목 추가·복제 | 새 품목 등록. 비슷한 품목은 복제해서 이름만 바꾼다 | 완료 |
사진은 DB 에 넣지 않습니다. 조회 1000행 상한이 있고 용량이 커지면 백업이 무거워집니다. 파일은 앱 볼륨에 두고 경로만 남깁니다. 검수 사진(P3)도 같은 방식입니다.
PHASE 2주문 · 입금 확인
가장 먼저 손해가 나는 지점입니다. 주문은 시트에, 입금은 통장에 있어 사람이 눈으로 대조하는 동안 미입금 발송과 입금 후 누락 발송이 생깁니다.
| ID | 기능 | 내용 | 상태 |
|---|---|---|---|
| O-1 | 입금 대기 목록 | 미입금 주문을 배송 시작일 임박 순으로. 본사의 하루 시작점 | 완료 |
| O-2 | 입금 확인 처리 | 입금자명·금액·입금일 입력 → 주문이 확정으로. 금액이 다르면 차액을 표시하고 막는다 | 완료 |
| O-3 | 주문 목록·상세 | 상태·기간·학원·검색 필터. 주문 1건의 품목·입금·배송·변경 이력을 한 화면에 | 완료 |
| O-4 | 상태 전이 | 접수 → 확정 → 취합 → 발주 → 입고 → 인도. 한 문장으로 바꿔 중복 처리 방지 | 완료 |
| O-5 | 주문 등록·취소 | 담당자 대리 입력. 취소는 사유 필수, 발주 후 취소는 손실로 기록 | 완료 |
| O-6 | 자사몰 주문 수신 | 공개 API 로 들어온 주문을 같은 검증을 거쳐 저장. 출처(web/manual) 구분 | 완료 |
입금 확인 = 주문 확정입니다. 취합(P3)은 확정분만 집계합니다 — 미입금 주문이 발주 수량에 섞이면 손해가 그대로 발생합니다.
PHASE 3회차 취합 · 발주 · 검수
손으로 하던 합산을 시스템이 대신합니다. 여기서 수량이 틀리면 그대로 손해입니다.
| ID | 기능 | 내용 | 상태 |
|---|---|---|---|
| B-1 | 회차 취합표 | 마감 시각이 지나면 학원 × 품목 격자로 합산. 이 표가 발주서의 원본 | 완료 |
| B-2 | 발주 기록 | 업체별 수량·매입가·결제 금액·수단 | 완료 |
| B-3 | 취합 후 변경 잠금 | 취합표가 생기면 수량 수정 불가. 취소만 되고 손실로 기록 | 완료 |
| B-4 | 입고 검수 | 도착 수량 + 사진. 발주와 다르면 차이·사유 필수. 휴대폰 3 터치 | 완료 |
| B-5 | 발주서 내보내기 | 업체에 보낼 내역을 텍스트로 (현지 업체는 채팅으로 받는다) | 완료 |
PHASE 4배송 · 인도
현장에서 휴대폰으로 처리하는 구간입니다. 화면 수와 터치 수가 요구사항의 일부입니다.
| ID | 기능 | 내용 | 상태 |
|---|---|---|---|
| V-1 | 오늘 할 일 | 오늘 검수·배송·인도 대상을 한 화면에. 현지 담당자의 첫 화면 | 완료 |
| V-2 | 인도 처리 | 학생별 인도 체크. 과일은 도착 후 3시간 초과 시 경고 | 완료 |
| V-3 | 지연 기록 | 예정일 대비 지연 일수·사유 → 배송 지연률의 원천 | 완료 |
| V-4 | 학원별 보관 현황 | 인도 대기 물품이 어느 학원에 얼마나 있는지 | 완료 |
PHASE 5재고 · 대여
가용 재고 한 숫자는 이미 쓰고 있습니다(없는 물건을 팔면 안 되니까). 여기서는 원장과 실사를 붙였습니다. 원장이 진실이고 재고 수량은 그 결과입니다 — 입출고를 넣으면 자사몰 품절 판단에 바로 반영됩니다.
| ID | 기능 | 내용 | 상태 |
|---|---|---|---|
| S-1 | 입출고 원장 | 구매 입고·판매 출고·대여 출고·반납·폐기를 한 줄씩. 현재 수량은 여기서 도출 | 완료 |
| S-2 | 안전 재고 미달 | 기준치 이하 품목을 발주 대상으로 자동 표시 | 완료 |
| S-3 | 주간 실사 | 수요일 실물 수량 입력 → 장부 대비 차이와 조정 사유 | 완료 |
| S-4 | 대여대장 · 보증금 | 대여·반납·환불 상태와 미반납 목록 | 완료 |
| S-5 | 귀국 전 미반납 경고 | 귀국 예정일 기준 사전 경고. 귀국 후에는 회수가 사실상 불가 | 완료 |
PHASE 6정산
P1 의 매입가와 P2~P4 의 기록이 다 있어야 성립합니다. 그래서 마지막이었습니다. 매출은 인도 완료 기준이고 입금은 "현금 유입"으로 따로 봅니다 — 입금이 먼저 들어오므로 섞으면 아직 주지 않은 물건이 매출로 잡힙니다.
| ID | 기능 | 내용 | 상태 |
|---|---|---|---|
| T-1 | 일별 집계 | 인도 완료 기준 매출·원가·기여마진. 보증금은 예수금으로 분리 | 완료 |
| T-2 | 월 손익 | 월 고정비 대비 기여마진과 월 순부담 | 완료 |
| T-3 | 일 마감 | 마감하면 그 날짜는 수정 불가. 소급 변경을 막는다 | 완료 |
| T-4 | 시트 내보내기 | 기존 구글시트 보고를 병행 — 없으면 담당자가 두 번 입력한다 | 완료 |
SECTION 02 · SCHEDULE일정
한 단계를 끝까지 쓸 수 있는 상태로 만든 뒤 다음으로 갑니다. 반쯤 된 화면 여섯 개보다 끝난 화면 두 개가 낫습니다.
| 단계 | 범위 | 기간 | 끝났다고 보는 조건 | 막히면 |
|---|---|---|---|---|
| P1 | 물품 상세 · 사진 · 매입가 | 2일 | 247개 전부에 매입가가 들어가고 마진이 화면에 보인다 | 실제 매입가가 없으면 추정치로 시작 |
| P2 | 주문 · 입금 확인 | 3일 | 본사가 입금 대기 화면만 보고 하루를 마감할 수 있다 | 계좌 명세 형식을 모르면 수동 입력으로 |
| P3 | 취합 · 발주 · 검수 | 3일 | 현지가 취합표로 발주하고 검수 사진을 남긴다 | 마감 시각이 확정 안 되면 품목별 기본값으로 |
| P4 | 배송 · 인도 | 2일 | 현지가 휴대폰으로 오늘 할 일만 보고 움직인다 | 학원별 보관 장소가 없으면 학원 단위로 |
| P5 | 재고 · 대여 | 3일 | 수요일 실사가 화면에서 끝나고 미반납이 자동으로 뜬다 | - |
| P6 | 정산 | 2일 | 월말에 시트를 손으로 만들지 않는다 | P1 매입가가 비면 원가가 안 나온다 |
합계 15 영업일입니다. 액션 플랜의 5주 일정과는 별개로 돌아가며, 10/6 오픈은 주문서와 시트로 열립니다 — 이 로드맵이 늦어도 오픈은 늦어지지 않습니다.
순서를 바꿀 수 있는 곳과 없는 곳. P1 은 P6 보다 먼저여야 하고(매입가), P2 는 P3 보다 먼저여야 합니다(확정분만 취합). P4·P5 는 서로 순서를 바꿔도 됩니다.
SECTION 03 · DATA데이터와 더미
화면을 만들기 전에 데이터를 먼저 넣었습니다. 빈 화면으로는 무엇이 불편한지 알 수 없습니다.
| 표 | 더미 | 담는 것 | 쓰는 단계 |
|---|---|---|---|
item | 247 | 품목 · 판매가 · 보증금 · 안전재고 · 매입가 · 설명 · 비고 | P1 |
item_image | - | 사진 경로 · 대표 지정 · 순서 | P1 |
school / student | 5 / 24 | 학원·보관 장소 / 학생·귀국 예정일 | P2 |
orders / order_item | 45 / 84 | 주문 헤더·상태 / 품목·수량·금액 | P2 |
payment | 34 | 입금자명·금액·차액 (불일치 7건 포함) | P2 |
batch / purchase | 48 / 44 | 회차 합산 / 업체별 발주·매입가 | P3 |
inspection | 35 | 도착 수량·차이·사유·사진 (차이 6건 포함) | P3 |
delivery | 17 | 예정일·도착·인도·지연 (지연 5건 포함) | P4 |
stock_move / stock_audit | 59 / 10 | 입출고 원장 / 실사 차이 (차이 4건) | P5 |
rental | 6 | 대여·반납·보증금 (미반납 4건) | P5 |
settlement | 8일 | 일별 매출·원가·마진·예수금 | P6 |
audit_log | 누적 | 누가 언제 무엇을 바꿨는지 | 전체 |
app_user | 4 | 관리자 1 · 본사 1 · 현지 2 | 전체 |
더미는 일부러 깨진 데이터를 섞었습니다 — 입금 금액 불일치 7건, 검수 수량 차이 6건, 배송 지연 5건, 실사 차이 4건, 미반납 대여 4건. 정상 데이터만으로는 화면이 그 상황을 보여주는지 확인할 수 없습니다.
node server/seed-dummy.mjs --apply 로 넣고
--wipe 로 지웁니다. 난수 씨앗이 고정돼 다시 돌려도 같은 데이터가 나옵니다.
기준일은 2026-10-20 으로 못박아, 날짜가 흐른다고 화면이 달라지지 않습니다.