Skip to content

Commit 12d2f08

Browse files
committed
docs: add event booth sales module draft
1 parent ee546a6 commit 12d2f08

2 files changed

Lines changed: 345 additions & 0 deletions

File tree

Lines changed: 344 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,344 @@
1+
# 부스 운영·행사 판매 관리 모듈
2+
3+
## 개요
4+
5+
서울코믹월드(서코, 부코, 수코 등)와 일러스타 페스 등 오프라인 행사에서 개인 창작자 또는 소규모 팀이 부스를 운영할 때 필요한 재고, 현장 판매, 예약 수령, 행사 후 정산을 관리하는 모듈입니다.
6+
7+
이 모듈은 선입금 폼, 통판 폼, 주문 접수 서비스를 대체하지 않습니다. 윗치폼처럼 이미 강한 외부 서비스를 주문 원본으로 두고, Fieldstack은 행사 현장에서 필요한 **운영판** 역할을 맡습니다.
8+
9+
> **개발 시점:** Fieldstack V1 완성 이후 검토
10+
> **상태:** 아이디어 및 초기 설계 단계
11+
> **핵심 방향:** 윗치폼과 경쟁하지 않고, 엑셀 가져오기·현장 판매·재고·정산을 보조
12+
13+
---
14+
15+
## 역할 경계
16+
17+
### 윗치폼 등 외부 서비스가 담당하는 영역
18+
19+
- 선입금 폼 생성
20+
- 통판 폼 생성
21+
- 행사 당일 수령 예약
22+
- 주문 접수
23+
- 입금 확인
24+
- 주문자 정보 관리
25+
- 옵션 선택
26+
- 주문 취소·변경 요청 처리
27+
28+
### Fieldstack이 담당하는 영역
29+
30+
- 윗치폼 엑셀 파일 가져오기
31+
- 외부 예약/선입금 주문의 행사 수령 체크
32+
- 예약분과 현장 판매분 재고 분리
33+
- 현장 판매 수기 기록
34+
- 현금, 계좌이체, 카드 결제, 간편결제 결과 기록
35+
- 증정, 파손, 분실, 재고 조정 기록
36+
- 행사 종료 후 매출, 비용, 잔여 재고 정산
37+
- Ledger 및 세무 준비 지원 기능으로 요약 데이터 전달
38+
39+
### 명시적으로 하지 않는 일
40+
41+
- 선입금 폼 또는 통판 폼 제공
42+
- 결제 중개 또는 카드 결제 대행
43+
- 윗치폼 주문 데이터 실시간 동기화
44+
- 외부 서비스의 주문 상태를 원격으로 변경
45+
46+
---
47+
48+
## 윗치폼 연동 방향
49+
50+
윗치폼에는 API가 없다는 전제로 설계합니다. 주문 데이터는 사용자가 윗치폼에서 엑셀 파일로 내려받은 뒤 Fieldstack에 가져오는 방식만 고려합니다.
51+
52+
### 엑셀 가져오기 기능 (계획)
53+
54+
- 엑셀 또는 CSV 파일 업로드
55+
- 컬럼 자동 감지 및 수동 매핑
56+
- 주문번호, 닉네임, 입금자명, 전화번호 뒤 4자리 등 검색 키 생성
57+
- 상품명·옵션명·수량을 Fieldstack 상품과 매칭
58+
- 예약분 재고 자동 반영
59+
- 중복 가져오기 방지
60+
- 가져오기 이력 저장
61+
- 원본 파일명, 가져온 시각, 행 수, 실패 행 수 기록
62+
63+
가져온 윗치폼 데이터는 Fieldstack 내부에서 새 주문으로 재생성하지 않고, **외부 주문 원본의 스냅샷**으로 취급합니다.
64+
65+
---
66+
67+
## 주요 기능 (검토 중)
68+
69+
### 1. 행사 관리
70+
71+
- 행사명, 날짜, 장소, 부스명, 부스 번호 기록
72+
- 참가비, 교통비, 인쇄비, 포장비 등 행사 비용 연결
73+
- 행사별 준비 상태 관리
74+
- 행사 종료 후 정산 상태 관리
75+
76+
상태 예시:
77+
- 준비 중
78+
- 운영 중
79+
- 정산 필요
80+
- 정산 완료
81+
- 취소
82+
83+
### 2. 상품 및 재고 관리
84+
85+
- 굿즈, 회지, 엽서, 스티커, 키링 등 상품 등록
86+
- 행사별 준비 수량 입력
87+
- 예약분, 현장 판매 가능분, 판매 완료분, 미수령분 분리 표시
88+
- 증정, 파손, 분실, 재고 조정 기록
89+
- 다음 행사로 잔여 재고 이월
90+
91+
재고 계산 기준:
92+
93+
```text
94+
총 준비 수량
95+
- 예약 배정 수량
96+
- 현장 판매 수량
97+
- 수령 완료 수량
98+
- 증정 수량
99+
- 파손/분실 수량
100+
= 행사 후 잔여 수량
101+
```
102+
103+
### 3. 예약 수령 체크
104+
105+
윗치폼에서 가져온 선입금 또는 행사 당일 예약 구매 데이터를 현장 수령 체크에 사용합니다.
106+
107+
행사 당일 화면에서 필요한 기능:
108+
- 주문번호 검색
109+
- 닉네임 검색
110+
- 입금자명 검색
111+
- 전화번호 뒤 4자리 검색
112+
- 예약 상품 목록 표시
113+
- 전체 수령 완료
114+
- 일부 수령
115+
- 대리 수령 메모
116+
- 확인 필요 표시
117+
- 미수령 목록 확인
118+
119+
### 4. 현장 판매 기록
120+
121+
현장에서 윗치폼이 아닌 방식으로 결제된 판매도 기록할 수 있어야 합니다.
122+
123+
지원 결제수단 예시:
124+
- 현금
125+
- 계좌이체
126+
- 카드 결제
127+
- 간편결제
128+
- 기타 수기 입력
129+
130+
Fieldstack은 결제 자체를 처리하지 않습니다. 카드 단말기, 계좌이체, 간편결제 등 외부에서 결제가 끝난 결과를 운영자가 기록하는 방식입니다.
131+
132+
간단 POS 형태의 입력 흐름:
133+
- 상품 선택
134+
- 수량 선택
135+
- 할인 또는 세트 적용
136+
- 결제수단 선택
137+
- 메모 입력
138+
- 판매 완료
139+
- 재고 자동 차감
140+
141+
### 5. 행사 후 정산
142+
143+
행사 종료 후 다음 정보를 요약합니다.
144+
145+
- 총 매출
146+
- 윗치폼 예약/선입금 매출
147+
- 현장 현금 매출
148+
- 현장 계좌이체 매출
149+
- 현장 카드 매출
150+
- 현장 간편결제 매출
151+
- 상품별 판매량
152+
- 상품별 잔여 수량
153+
- 미수령 예약 목록
154+
- 증정/파손/분실 수량
155+
- 행사 비용
156+
- 순이익
157+
158+
정산 결과는 Ledger 모듈에 수입·지출 항목으로 연결할 수 있습니다.
159+
160+
### 6. 부스 준비 체크리스트
161+
162+
행사 준비 과정에서 반복적으로 필요한 항목을 체크리스트로 관리합니다.
163+
164+
예시:
165+
- 재고 포장 완료
166+
- 예약분 분리 완료
167+
- 가격표 출력
168+
- QR 결제 이미지 준비
169+
- 거스름돈 준비
170+
- 카드 단말기 준비
171+
- 테이블보, 진열대, 집게, 테이프 준비
172+
- 쓰레기봉투, 보조배터리 준비
173+
- 행사 후 정산 완료
174+
175+
---
176+
177+
## 판매 출처 구분
178+
179+
모든 판매 또는 재고 변동에는 출처를 기록합니다.
180+
181+
예시:
182+
183+
```ts
184+
type BoothTransactionSource =
185+
| 'witchform_prepaid' // 윗치폼 선입금/예약
186+
| 'witchform_eventday' // 윗치폼 행사 당일 폼 주문
187+
| 'onsite_cash' // 현장 현금
188+
| 'onsite_bank_transfer' // 현장 계좌이체
189+
| 'onsite_card' // 현장 카드 결제
190+
| 'onsite_simple_pay' // 현장 간편결제
191+
| 'free_sample' // 증정
192+
| 'lost_or_damaged' // 분실/파손
193+
| 'inventory_adjustment' // 재고 조정
194+
```
195+
196+
윗치폼 예약분과 현장 판매분은 모두 재고에 영향을 주지만, 정산과 검산을 위해 출처를 섞지 않습니다.
197+
198+
---
199+
200+
## 데이터 구조 (초안)
201+
202+
```ts
203+
interface BoothEvent {
204+
id: string
205+
userId: string
206+
title: string
207+
venue?: string
208+
boothName?: string
209+
boothNumber?: string
210+
startDate: string
211+
endDate?: string
212+
status: 'preparing' | 'active' | 'needs_settlement' | 'settled' | 'cancelled'
213+
notes?: string
214+
createdAt: string
215+
updatedAt: string
216+
}
217+
218+
interface BoothProduct {
219+
id: string
220+
userId: string
221+
name: string
222+
sku?: string
223+
price: number
224+
cost?: number
225+
category?: string
226+
notes?: string
227+
createdAt: string
228+
updatedAt: string
229+
}
230+
231+
interface BoothInventoryAllocation {
232+
id: string
233+
eventId: string
234+
productId: string
235+
preparedQuantity: number
236+
reservedQuantity: number
237+
onsiteAvailableQuantity: number
238+
soldQuantity: number
239+
pickedUpQuantity: number
240+
giftedQuantity: number
241+
lostOrDamagedQuantity: number
242+
remainingQuantity: number
243+
}
244+
245+
interface ExternalOrderSnapshot {
246+
id: string
247+
eventId: string
248+
source: 'witchform'
249+
externalOrderId?: string
250+
buyerAlias?: string
251+
depositorName?: string
252+
phoneLast4?: string
253+
importedFileName: string
254+
importedAt: string
255+
pickupStatus: 'pending' | 'picked_up' | 'partial' | 'needs_check' | 'not_picked_up'
256+
notes?: string
257+
}
258+
259+
interface BoothSaleRecord {
260+
id: string
261+
eventId: string
262+
source: BoothTransactionSource
263+
paymentMethod?: 'cash' | 'bank_transfer' | 'card' | 'simple_pay' | 'external_form' | 'free' | 'adjustment'
264+
totalAmount: number
265+
soldAt: string
266+
notes?: string
267+
}
268+
```
269+
270+
---
271+
272+
## 모듈 간 연동
273+
274+
### Booth → Ledger
275+
276+
행사 정산이 완료되면 다음 데이터를 Ledger에 전달할 수 있습니다.
277+
278+
- 행사별 총 매출
279+
- 결제수단별 매출
280+
- 행사 비용
281+
- 상품별 매출 요약
282+
- 현장 판매 기록
283+
- 윗치폼 예약/선입금 매출 요약
284+
285+
Ledger에는 세부 주문 전체가 아니라 정산된 수입·지출 항목과 참고 메타데이터를 연결하는 방향을 우선 검토합니다.
286+
287+
### Booth → 세무 준비 지원
288+
289+
세무 준비 지원 기능에는 다음 정보를 참고자료로 전달할 수 있습니다.
290+
291+
- 행사 매출 자료
292+
- 행사 비용 자료
293+
- 결제수단별 합계
294+
- 상품별 판매 내역
295+
- 영수증 및 증빙
296+
- 미수령 또는 환불 참고 기록
297+
298+
이 연동은 신고를 대신하기 위한 것이 아니라, 사용자가 세무사에게 전달할 자료를 정리하기 위한 보조 흐름입니다.
299+
300+
---
301+
302+
## API 엔드포인트 (초안)
303+
304+
```text
305+
GET /api/booth/events
306+
POST /api/booth/events
307+
GET /api/booth/events/:id
308+
PUT /api/booth/events/:id
309+
DELETE /api/booth/events/:id
310+
311+
GET /api/booth/events/:id/products
312+
POST /api/booth/events/:id/products
313+
PATCH /api/booth/events/:id/inventory
314+
315+
POST /api/booth/events/:id/import/witchform
316+
GET /api/booth/events/:id/external-orders
317+
PATCH /api/booth/external-orders/:id/pickup
318+
319+
POST /api/booth/events/:id/sales
320+
GET /api/booth/events/:id/settlement
321+
POST /api/booth/events/:id/settle
322+
```
323+
324+
---
325+
326+
## 검토 필요 항목
327+
328+
1. 윗치폼 엑셀 파일의 실제 컬럼 변형 대응
329+
2. 행사 당일 모바일/태블릿 입력 UX
330+
3. 오프라인 또는 네트워크 불안정 상황에서의 임시 저장
331+
4. 중복 수령 체크 방지 방식
332+
5. 대리 수령 기록에 필요한 최소 정보
333+
6. 카드 결제 수수료 또는 간편결제 수수료 입력 여부
334+
7. 여러 명이 같은 부스를 운영할 때 동시 입력 충돌 처리
335+
8. 행사 후 미수령/환불 처리 방식
336+
9. 개인정보 저장 최소화와 가져온 엑셀 원본 보관 정책
337+
338+
---
339+
340+
## 참고 서비스
341+
342+
- 윗치폼: 선입금, 통판, 행사 당일 예약 구매 폼 운영에 사용
343+
344+
Fieldstack은 윗치폼의 폼 운영 기능을 대체하지 않고, 윗치폼에서 내려받은 엑셀 데이터를 행사 운영용 참고 데이터로 가져와 재고, 수령, 현장 판매, 행사 후 정산을 돕는 방향으로 검토합니다.

‎docs/v2_FINANCIAL-LEDGER/modules/future/README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Fieldstack V1 완성 이후 개발이 검토되는 모듈들을 정리한 공간
1212
| 문서 | 모듈명 | 우선순위 | 비고 |
1313
|------|--------|----------|------|
1414
| [project-outsource.md](./02-project-outsource.md) | 프로젝트·외주 관리 | 높음 | 위드싸인, Gmail 연동 포함 |
15+
| [event-booth-sales.md](./05-event-booth-sales.md) | 부스 운영·행사 판매 관리 | 중간 | 윗치폼 엑셀 가져오기, 현장 판매·재고·정산 |
1516
| [todo-scheduler.md](./01-todo-scheduler.md) | TODO / 스케줄러 | 중간 | TickTick 참고 |
1617
| [planner.md](./03-planner.md) | 플래너 | 낮음 | 여행 계획 등 |
1718

0 commit comments

Comments
 (0)