현금 흐름 예측: 13주 롤링 예측 방법
이 가이드는 CFO 수준의 간단한 방법으로 회사의 유동성을 관리하는 방법을 제공합니다. 13주 롤링 현금 예측을 구축하면 주간 단위로 현금 런웨이를 파악하고, 수금과 지급을 전략적으로 조정하며, 재무적 돌발 상황을 제거할 수 있습니다. 이는 창업자를 위해 만들어진 시스템이며, 이 페이지는 실제 모델을 제공합니다: 샘플 데이터가 포함된 수식 기반 워크북과 그 첫 2주를 뒷받침하는 샘플 Beancount 원장입니다 (아래 다운로드 참조).
이 가이드가 아닌 두 가지: 예측은 직접 입력하는 미래 추정치이고, 회계 실적은 이미 원장에 기록된 은행 거래입니다 — 따라서 워크북은 이 둘을 분리합니다. 계획의 사본을 날짜가 지정된 기준선(Baseline) 으로 동결하고, 마감된 각 주의 은행 현금을 별도의 실적(Actuals) 시트에 입력하며, 차이(Variance) 시트에서 그 차이를 확인합니다. 비교 대상인 계획은 절대 덮어쓰이지 않습니다. 여기서 자동으로 동기화되는 것은 없습니다: 워크북에는 매크로나 외부 연결이 없으며, 어떤 단계도 은행이나 Beancount에서 자동으로 데이터를 가져오지 않습니다.
왜 13주인가?
13주 예측은 여러 핵심 이유로 운영 현금 관리의 표준입니다:
- 단기 통제: 약 한 분기(약 13주)를 포함하여 즉각적인 유동성을 명확히 볼 수 있습니다. 이 기간은 2~3회의 급여 주기, 세금 납부, 일반적인 공급업체 지급 조건을 포함할 만큼 충분히 길지만, 매우 정확하고 실행 가능하게 유지될 만큼 충분히 짧습니다.
- 수입 및 지출 관점: 예측은 "직접법"을 사용하여 순수하게 현금 유입과 유출에 초점을 맞춥니다. 이는 발생주의 회계나 수익성이 아니라 실제로 은행 계좌에 들어오거나 나가는 현금에 관한 것이며, 예측이 은행 잔액과 직접 연결되도록 합니다.
- 롤링, 정적이 아님: 이것은 일회성 예산이 아닙니다. 매주 방금 지나간 주를 제거하고, 끝에 새 주(13주차)를 추가하며, 가정을 업데이트합니다. 이렇게 하면 전방을 향한 시야가 일정하게 유지되어 예측이 역동적인 주간 규율이 됩니다.
무엇을 만들 것인가
- 하나의 예측 그리드: 시스템의 핵심은 13개 열(1주차부터 13주차)과 명확히 정의된 섹션 — 기초 현금, 수입, 지출, 순현금, 기말 현금 — 으로 구성된 하나의 시트입니다. 동일한 행을 가진 세 개의 보조 시트가 해당 계획의 동결된 기준선, 은행이 기록한 실적, 그리고 그 사이의 차이를 유지합니다.
- 카테고리 매핑: 원장의 거래를 예측 카테고리에 매핑하는 간단한 시스템입니다 (예: Stripe의 모든 지급은 "고객 수금"으로, Gusto 지급은 "급여"로 매핑). 워크북의 공급업체 매핑(Vendor Mapping) 탭에는 은행/카드 이중 계산 방지 규칙을 포함한 이 매핑이 이미 인코딩되어 있으니, 직접 만드는 대신 이것을 시작점으로 사용하세요.
- 주간 리듬: 실적을 기록하고, 약속한 기준선 대비 차이를 검토하고, 향후 주를 재추정하며, 재무 임계값에 도달했을 때 조치를 취하기 위한 사전 정의된 트리거 세트를 포함한 반복 가능한 프로세스입니다.
시작 파일 다운로드
빈 페이지 설정은 건너뛰세요: 이 가이드는 샘플 데이터가 포함된 수식 기반 워크북과 그 첫 2주를 뒷받침하는 샘플 원장을 제공합니다.
- 13주 예측 워크북 (XLSX, v1.1.0) — cash-flow-forecast-13-week-ko.xlsx. 편집 가능한 가정, 수식으로 연결된 주, 값만 있는 기준선 스냅샷, 실적 시트, 수식만 있는 차이 시트, 공급업체 매핑 탭. 모든 샘플 숫자는 예시이므로 자신의 숫자로 교체하세요 (아래 샘플 vs. 귀하의 데이터 참조).
- 샘플 원장 및 실적 (Beancount 원장,
.bean) — sample.bean. W1–W2 은행 현금이 워크북의 실적 시트가 첫 2주 동안 보유하는 값과 정확히 일치하는 균형 잡힌 예시 원장입니다.
시작 파일의 작동 방식 (입력하기 전에 읽어보세요)
시트. 워크북(cash-flow-forecast-13-week-ko.xlsx, v1.1.0)에는 다음 순서로 6개의 시트가 있습니다:
- Forecast — 실시간 계획: 13개의 날짜가 지정된 주, 가정, 수입, 지출, 순/기말 현금. 원하는 만큼 자주 편집할 수 있습니다.
- Baseline — Forecast의 2~29행을 값만으로 저장한 스냅샷으로,
B31에 버전,B32에 기준 날짜가 표시됩니다. 수식이 없으므로 다른 곳에서 무엇을 하든 변경되지 않습니다. - Actuals — 마감된 각 주에 실제로 이동한 은행 현금을 직접 입력: 3행에 상태(
complete또는partial), Forecast와 동일한 행에 카테고리 금액, 30행에 선택적 명세서 잔액. - Variance — 수식만: 주 시작 날짜로 매칭된 모든 카테고리와 합계에 대한 Actual − Baseline, 그리고 각 상태 단어를 설명하는 범례. Forecast를 읽지 않습니다.
- Vendor Mapping — 소스별 은행/카드 현금 계산 규칙이 포함된 원장→카테고리 매핑.
- Notes — 생성기에서 복제된 역학, 주간 검토, 시나리오 토글 및 버전으로, 파일이 오프라인에서 자체 설명합니다.
네 개의 주 그리드는 모두 하나의 레이아웃을 공유합니다: 주 W1–W13은 열 B–N이고, 2행에는 각 주의 시작 날짜, 기초 현금은 10행, 수입은 12–14행(합계 15), 지출은 17–26행(합계 27), 순현금은 28행, 기말 현금은 29행입니다. 따라서 B12는 모든 그리드에서 W1 고객 수금입니다.
시간 기준. 주는 월요일 시작이며, W1은 2026-09-14, W13은 2026-12-07에 시작합니다 (Forecast의 2행; 모델을 채택할 때 이 날짜를 편집하세요 — 모든 수식은 주 상대적이므로 체인이 유지됩니다 — 그리고 기준선을 캡처할 때 Baseline과 Actuals에 이 날짜를 반영하세요). 거래는 전기일이 포함된 주(월요일~일요일)에 속합니다.
단위. 전체 USD (숫자 형식 #,##0). 샘플 회사는 시드 단계 SaaS로 85,000으로 시작하며, 주간 급여는 0 / 11,000 교대, 월세, 주당 900의 대출 자동이체가 있습니다.
입력하는 것 vs. 계산되는 것. Forecast에서 파란색 셀은 수동 입력이고 나머지는 모두 수식입니다 (Actuals도 자체 입력으로 동일하게 작동하며, 기준선 캡처 및 아래 주간 검토에서 설명):
- 입력: 기초 잔액
B5(85,000), 토글B6/B7(1.0), 하한B8(40,000), 세 개의 수입 카테고리 기준, 열 개의 지출 카테고리 기준, 그리고 Forecast의 주 시작 날짜. - 수식 (열 B, 1주차 기준 — 이후 주는 열 문자가 이동): 기초
B10 = $B$5(2~13주차는 이월, 예:C10 = B29); 총 수입B15 = B12*$B$6+B13*$B$7+B14; 총 지출B27 = SUM(B17:B26); 순현금B28 = B15-B27; 기말B29 = B10+B28. - 재계산은 자동이며 파일은
fullCalcOnLoad를 설정하므로 Excel, LibreOffice, Numbers는 열 때 재계산합니다 (파일은 캐시된 수식 값을 저장하지 않습니다). 파란색 셀을 변경하면 13주 모두 이동합니다 — 예를 들어 수금 토글B6을 1.2로 설정하면 W1 수입이 12,200에서 14,600으로, W1 기말 현금이 87,500에서 89,900으로 변경됩니다. yarn generate:cash-flow-forecast로 언제든지 원본 파일을 재생성할 수 있습니다 (생성기:scripts/generate-cash-flow-forecast.py, 작성기 openpyxl 3.1.5;--verify는 파일을 다시 열어 모든 합계 셀이 실제 수식을 보유하는지 확인합니다).
샘플 vs. 귀하의 데이터. 세 가지가 미리 채워져 있으며, 모두 예시이지 귀하의 비즈니스가 아닙니다:
- Forecast의 파란색 셀 (샘플 회사의 현재 계획);
- Baseline의 스냅샷, 버전
B1, 2026-09-11 기준 — 첫 2주가 마감되기 전의 계획; - Actuals의 W1–W2 항목 (열 B–C)으로, 샘플 원장(
sample.bean, 위)의 은행 현금입니다. W3–W13은 비어 있습니다.
샘플 Baseline과 Actuals이 다르기 때문에 차이 시트는 실제 비교로 시작합니다: W1은 계획보다 +500 앞서고 W2는 +300입니다 (아래 차이 검토 참조). 자신의 첫 검토 전에 세 가지 모두를 교체하세요: Forecast에 계획을 입력하고, 샘플 Actuals 항목을 지우고, B1 위에 자신의 Baseline을 캡처하세요 (아래 단계). 두 토글(B6은 모든 고객 수금을 조정, B7은 모든 선수금을 조정)만 시나리오 플레이를 위해 일반적으로 유지되도록 설계되었습니다.
v1.0.0에서 오시나요? Forecast 시트의 레이아웃은 변경되지 않았으므로 계획을 신중하게 이전할 수 있습니다: 이전 파일에서 입력 범위만 복사하세요 — B2:N2 (날짜), B5:B8, B12:N14 및 B17:N26 — 그리고 새 파일의 Forecast에서 동일한 주소에 값으로 붙여넣으세요. 절대 수식 행 위에 붙여넣지 마세요. v1.0.0은 기준선을 유지하지 않았으므로 실적으로 덮어쓴 과거 주는 복구 가능한 계획이 없습니다: 해당 주의 은행 현금을 Actuals에 입력하고 오늘의 Forecast에서 첫 Baseline을 시작하세요.
구조 (필요한 행)
예측 시트는 모든 현금 이동을 포착하기 위해 다음 행으로 구성되어야 합니다. 워크북 레이아웃: 아래 행은 Forecast에 있습니다 (기초 현금, 세 개의 수입 카테고리, 열 개의 지출 카테고리, 순현금 및 기말 현금이 있는 13개의 날짜 지정 주), Baseline, Actuals, Variance는 행별로 이를 반복합니다; Vendor Mapping은 은행/카드 이중 계산 방지 규칙을 포함하여 원장 소스를 이러한 카테고리에 매핑하고, Notes는 오프라인에서 역학을 설명합니다. Forecast에서 수입은 고객 수금, 신규 예약/선수금 및 기타 유입으로 그룹화됩니다; 지출은 급여, 계약직, 클라우드/호스팅, 소프트웨어/SaaS, 마케팅, 임대료, 법률 및 회계, 세금 및 수수료, 부채 상환 및 일회성 항목으로 그룹화됩니다; 합계는 기초 → 총 수입 → 총 지출 → 순현금 → 기말로 이어집니다.
-
기초 현금 잔액 (전주 기말 현금 잔액과 일치해야 함)
-
수입 (현금 유입)
- 고객 수금: 기존 인보이스(매출채권)에서 수금할 것으로 예상되는 현금.
- 신규 예약/선수금: 13주 기간 내에 성사될 신규 거래에서 예상되는 선불금.
- 기타 유입: 세금 환급, 이자 수입, 보조금 등 기타 유입 현금.
-
지출 (현금 유출)
- 급여: 직원에게 지급되는 순급여와 모든 사용자 부담 급여세를 포함한 전체 현금 비용.
- 계약직 및 프리랜서: 비직원에 대한 지급.
- 클라우드/호스팅 (매출원가): AWS, GCP 등 핵심 인프라 비용.
- SaaS/도구: 모든 소프트웨어 구독.
- 마케팅: 광고비, 대행사 수수료 및 기타 브랜드 관련 비용.
- 임대료/사무실: 물리적 사무실 비용.
- 법률 및 회계: 전문 서비스 수수료.
- 세금 및 수수료: 판매세 납부 및 기타 정부 지급.
- 부채 상환: 모든 대출의 원금 및 이자 지급.
- 일회성 항목: 연간 보험료, 보증금, 하드웨어/자본지출(노트북, 장비) 등 크고 빈도가 낮은 지급 — 위에 자체 행이 없는 모든 항목은 여기에 들어갑니다.
-
순현금 흐름 (= 총 수입 − 총 지출)
-
기말 현금 잔액 (= 기초 현금 + 순현금 흐름)
13주 예시 (USD)
아래 표는 샘플 회사의 워크북 Forecast 시트를 주별로 보여줍니다 — 현재 계획으로, W1과 W2 마감 후 재예측된 것이므로 이 두 열은 은행이 실제로 수행한 값을 보유합니다. W1과 W2는 원장 실적입니다 — sample.bean에서 yarn check:cash-flow-actuals가 도출하는 합계와 동일합니다 (수입 12,200 / 13,200, 지출 9,700 / 17,200, 기말 87,500 / 83,500). W3–W13은 워크북 가정으로 생성기의 샘플 기준에서 나온 것입니다 (원장에 기록되지 않음). 회사가 사전에 약속한 계획은 Baseline에 별도로 보존되며 이 W1–W2 열과 다릅니다; 아래 차이 검토에서 두 가지를 비교합니다. 통화는 전체 USD; 기말 = 기초 + 수입 − 지출 (매주).
| 항목 | W1 | W2 | W3 | W4 | W5 | W6 | W7 | W8 | W9 | W10 | W11 | W12 | W13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 기초 | 85,000 | 87,500 | 83,500 | 92,500 | 82,000 | 81,000 | 72,000 | 80,000 | 72,800 | 75,300 | 63,800 | 79,800 | 71,800 |
| 수입 | 12,200 | 13,200 | 15,200 | 9,200 | 18,200 | 8,200 | 14,200 | 14,200 | 12,200 | 9,200 | 22,200 | 9,200 | 12,200 |
| 지출 | 9,700 | 17,200 | 6,200 | 19,700 | 19,200 | 17,200 | 6,200 | 21,400 | 9,700 | 20,700 | 6,200 | 17,200 | 9,700 |
| 순현금 | 2,500 | -4,000 | 9,000 | -10,500 | -1,000 | -9,000 | 8,000 | -7,200 | 2,500 | -11,500 | 16,000 | -8,000 | 2,500 |
| 기말 | 87,500 | 83,500 | 92,500 | 82,000 | 81,000 | 72,000 | 80,000 | 72,800 | 75,300 | 63,800 | 79,800 | 71,800 | 74,300 |
롤링 역학 (워크북에 구현된 대로)
롤링 예측의 논리는 간단하고 강력합니다 — 다운로드에서는 이미 Forecast 시트에 수식으로 연결되어 있습니다 (괄호 안은 행):
기초 현금 (1주차) = 기초 잔액 가정— 셀B10 = $B$5.기초 현금 (n주차) = 기말 현금 (n−1주차)— 예:C10 = B29(10행, 2–13주차).총 수입 (n주차) = 고객 수금 × 수금 토글 + 선수금 × 예약 토글 + 기타— 예:B15 = B12*$B$6+B13*$B$7+B14(15행).총 지출 (n주차) = 10개 카테고리 행의 SUM— 예:B27 = SUM(B17:B26)(27행).순현금 (n주차) = 총 수입 − 총 지출— 예:B28 = B15-B27(28행).기말 현금 (n주차) = 기초 현금 + 순현금— 예:B29 = B10+B28(29행).
동일한 행이 Actuals에도 단순 합계로 존재합니다 (B15 = SUM(B12:B14), B27 = SUM(B17:B26), B28 = B15-B27, B29 = B10+B28, C10 = B29), 해당 주의 실제 기초 현금은 Actuals!B10에 한 번 입력됩니다. Actuals에는 토글이 없으며 다른 시트를 참조하지 않습니다.
기준선 캡처 (기간당 한 번)
Forecast가 비교 기준으로 삼고자 하는 계획을 보유할 때 — 첫 주가 마감되기 전에 수행하세요.
- 계획을 값으로 복사하세요.
Forecast!B2:N29를 선택하고 복사하세요.Baseline!B2를 선택하고 값만 붙여넣으세요 — Excel: 선택하여 붙여넣기 → 값; LibreOffice: 선택하여 붙여넣기 → 값만; Numbers: 편집 → 수식 결과 붙여넣기. 일반 붙여넣기는 라이브 수식을 가져오고 "기준선"이 이후의 모든 편집을 조용히 따라갑니다. - 라벨을 붙이세요.
Baseline!B31에 버전(예:B1)을,Baseline!B32에 오늘 날짜를 입력하세요. 둘 다 붙여넣은 블록 아래에 있으므로 이후 캡처가 절대 덮어쓰지 않습니다. - 주를 정렬하세요.
Baseline!B2:N2를 복사하여Actuals!B2에 값으로 붙여넣어 두 시트가 동일한 13개의 주 시작 날짜를 갖도록 하고, 시작 은행 잔액을Actuals!B10에 입력하세요.
이후 실적을 입력하거나 Forecast를 편집하거나 토글을 움직이면 Forecast와 Variance가 재계산되고 Baseline은 캡처한 그대로 유지됩니다.
주간 월요일 검토 (이 워크북 기준)
- Actuals에 주를 기록하세요 — 절대 Forecast에 하지 마세요. 2행 날짜가 방금 마감된 월요일인 열에서, 카테고리별 해당 주의 은행 현금을 12–14행과 17–26행에 입력하세요 (아래 매핑). 현금이 이동하지 않은 곳에는
0을 입력하세요: 빈 셀은 0이 아니라 "아직 입력되지 않음"을 의미합니다. 30행에 은행 명세서의 기말 잔액을 입력하세요; 그러면 31행은0으로 표시되어야 합니다. 그렇지 않으면 매핑 오류이며 — 보통 계산된 카드 청구나 유지된 스윕 — 은행 오류가 아닙니다. - 주가 완료되었는지 확인하세요. 모든 카테고리 행에 숫자가 있으면 3행에
complete를 입력하고, 주가 아직 열려 있으면partial을 입력하세요 (드롭다운에서 둘 다 제공). Variance는 주가complete이고, 모든 카테고리가 입력되고, Actuals 날짜가 같은 열의 Baseline 날짜와 같을 때만 비교합니다. - Variance를 읽으세요. 3행은 각 주의 상태를 나타냅니다;
compared주만 숫자를 표시하고 다른 모든 상태는n/a를 표시하며 절대0을 표시하지 않으므로 입력되지 않은 주가 "계획대로"로 통과할 수 없습니다. 부호는 Actual − Baseline입니다 (열 O가 이를 반복): 수입, 순현금 및 기말 양수 = 계획보다 많은 현금; 지출 양수 = 계획보다 많은 지출. 29행은 누적이며 — 이전 모든 주를 포함 — 그 이전의 모든 주가compared일 때만 존재합니다. 32–35행은 합계를 기준선의 비율로 표현합니다 (기준선이 0이면n/a). - Forecast에서 미래를 재추정하세요. 다음 2–4주에 대해 가장 신선한 정보(새로 발송된 인보이스, 예정된 공급업체 지급, 확인된 급여 날짜)로 파란색 셀을 업데이트하세요. 전체 13주 전방 시야를 유지하려면 Forecast 창을 롤링하세요: 파란색 입력(2행 날짜 포함)을 왼쪽으로 한 열 이동(이전 2주차가 1주차가 됨), 그런 다음 열 N을 지우고 새로운 13주차 날짜를 지정하세요. 이월 수식은 자동으로 재정렬됩니다; Baseline, Actuals 및 Variance는 건드리지 않습니다.
검토 범위 롤링 (주간이 아닌 의도적인 단계)
Baseline과 Actuals는 이동하기로 결정할 때까지 캡처한 범위에 머무릅니다 — 일반적으로 Forecast가 한 달 또는 한 분기 앞으로 롤링되었거나, 계획이 충분히 변경되어 새로운 기준을 원할 때입니다.
- 보관하세요. 워크북 사본을 저장하세요 (예:
cash-flow-forecast-B1.xlsx). 이전 기준선, 실적 및 그 차이를 함께 유지합니다; 작업 파일은 이력을 유지하지 않습니다. - 실제 입력을 지우세요. Actuals에서 열 B–N의 3, 12–14, 17–26 및 30행과
B10을 지우세요.C10:N10, 15행 및 27–29행, 31행은 그대로 두세요 — 수식입니다. - 새 기준선을 캡처하세요 — 오늘의 Forecast에서 다음 버전(
B2)과 오늘 날짜로, 그런 다음 위 기준선 캡처에서처럼 Actuals 날짜와 기초 잔액을 정확히 정렬하세요.
주 열을 절대 삽입하거나 삭제하지 마세요. 기준선을 다시 캡처했지만 Actuals 날짜를 다시 지정하는 것을 잊으면, 영향을 받는 모든 주가 다른 주의 계획과 비교하는 대신 date mismatch를 표시합니다.
Beancount에서 예측으로의 매핑
은행 현금 범위 (이중 계산을 방지하는 규칙). 주간 실적은 Assets:Bank:*에 대한 전기만입니다 — 하나의 범위가 두 함정을 모두 해결합니다:
- 신용카드: 카드 구매는
Liabilities:CreditCard:*에 전기되며 은행 현금을 이동하지 않으므로 청구 시 계산되지 않습니다. 현금은 결제 시(은행→카드 지급) 한 번 나갑니다. 청구 더하기 결제를 계산하면 같은 지출을 두 번 계산합니다. 샘플 원장에서 W1은 420.00 USD의 Amex SaaS 청구(부채만, 무시됨)와 600.00 USD의 8월 명세서 결제(계산됨)를 함께 보유합니다. W1의 순진한 "은행 유출 + 카드 청구" 합계는 10,120.00 USD입니다 — 정확히 420.00이 너무 높습니다; 워크북은 9,700.00을 계산합니다. - 내부 이체: 당좌↔저축 스윕은 두 개의 반대 은행 레그를 가지므로 이 범위 내에서 순액이 0이 되고 수입과 지출 양쪽에서 제외됩니다. 샘플의 3,000.00 USD(W1) 및 1,500.00 USD(W2) 스윕은 그렇지 않으면 양쪽을 그만큼 부풀립니다.
- 따름정리: 수입/비용 레그가 아닌 은행 레그를 매핑하세요. 대출 원금은 비용이 아니지만 은행 유출입니다 (샘플의 900.00 USD 자동이체 = 원금 800 + 이자 100, 모두 부채 상환으로 계산); 카드 구매는 비용이지만 아직 은행 유출이 아닙니다.
수입/지출 분할. 내보낸 은행 레그에서: 양수 레그는 수입, 음수 레그는 지출, 이체 레그는 제외. 카테고리 매핑(공급업체 매핑 탭과 동일): Stripe/PayPal 지급 → 고객 수금; 신규 고객 와이어 → 신규 예약/선수금; 은행 이자/보조금 → 기타 유입; Gusto/ADP → 급여; AWS/GCP → 클라우드/호스팅; 은행 지급 SaaS → 소프트웨어/SaaS; 임대인 → 임대료; 법무법인 → 법률/회계; 세무 당국 → 세금 및 수수료; 대출 자동이체 → 부채 상환.
- 판매세 처리: 판매세는 수익이 아니지만 현금 흐름 항목입니다. 판매세 징수를 현금 수입으로, 정부에 대한 납부를 지출로 처리하세요. 수익 영향은 발생주의 장부에 있지만 현금 이동은 여기서 중요합니다.
W1을 뒷받침하는 Beancount 발췌
아래의 모든 전기는 제공된 sample.bean에도 존재합니다. 단독으로 저장하면 이 발췌는 uvx --from beancount bean-check를 통과하며, 위의 은행 현금 범위를 적용하면(당좌↔저축 스윕을 양쪽에서 제외; 부채 청구가 아닌 Amex 결제를 계산) 표의 W1 수입(12,200), 지출(9,700), 기말(87,500)을 생성합니다.
option "title" "Cash forecast sample — W1 excerpt"
option "operating_currency" "USD"
2026-09-13 open Assets:Bank:Checking USD
2026-09-13 open Assets:Bank:Savings USD
2026-09-13 open Liabilities:CreditCard:Amex USD
2026-09-13 open Liabilities:Loan USD
2026-09-13 open Equity:Opening-Balances USD
2026-09-13 open Income:Sales USD
2026-09-13 open Income:Interest USD
2026-09-13 open Expenses:Contractors USD
2026-09-13 open Expenses:Cloud USD
2026-09-13 open Expenses:Software USD
2026-09-13 open Expenses:Marketing USD
2026-09-13 open Expenses:Rent USD
2026-09-13 open Expenses:Interest USD
2026-09-13 * "Opening balances"
Assets:Bank:Checking 80000.00 USD
Assets:Bank:Savings 5000.00 USD
Liabilities:CreditCard:Amex -600.00 USD
Liabilities:Loan -20000.00 USD
Equity:Opening-Balances -64400.00 USD
2026-09-14 * "Stripe" "Customer receipts W1"
Assets:Bank:Checking 12000.00 USD
Income:Sales -12000.00 USD
2026-09-15 * "Contractor" "Contractors W1"
Expenses:Contractors 1500.00 USD
Assets:Bank:Checking -1500.00 USD
2026-09-15 * "AWS" "Cloud hosting W1"
Expenses:Cloud 2200.00 USD
Assets:Bank:Checking -2200.00 USD
2026-09-16 * "Bank" "Checking -> Savings sweep"
Assets:Bank:Savings 3000.00 USD
Assets:Bank:Checking -3000.00 USD
2026-09-17 * "SaaS vendor" "Amex SaaS charges"
Expenses:Software 250.00 USD
Liabilities:CreditCard:Amex -250.00 USD
2026-09-17 * "SaaS vendor" "Amex SaaS charges"
Expenses:Software 170.00 USD
Liabilities:CreditCard:Amex -170.00 USD
2026-09-18 * "Amex" "August statement settlement"
Liabilities:CreditCard:Amex 600.00 USD
Assets:Bank:Checking -600.00 USD
2026-09-19 * "Landlord" "Rent W1"
Expenses:Rent 3500.00 USD
Assets:Bank:Checking -3500.00 USD
2026-09-19 * "Agency" "Marketing W1"
Expenses:Marketing 1000.00 USD
Assets:Bank:Checking -1000.00 USD
2026-09-19 * "Bank" "Interest W1"
Assets:Bank:Checking 200.00 USD
Income:Interest -200.00 USD
2026-09-19 * "Lender" "Loan autopay W1"
Liabilities:Loan 800.00 USD
Expenses:Interest 100.00 USD
Assets:Bank:Checking -900.00 USD예시 주: W1 처음부터 끝까지 (2026-09-14 – 2026-09-20)
기초 은행 현금은 85,000.00입니다 (2026-09-13 당좌 80,000 + 저축 5,000) — Actuals!B10의 값. 원장의 W1 은행 레그는 3,000.00 스윕 쌍을 제외한 후 Actuals 시트의 열 B에 들어갑니다; 나열되지 않은 모든 카테고리는 0으로 입력되고, 3행은 complete로 설정됩니다:
| Actuals 항목 (셀) | 은행 레그 | 금액 |
|---|---|---|
고객 수금 (B12) | Stripe 12,000 | 12,000.00 |
기타 유입 (B14) | 은행 이자 200 | 200.00 |
| 총 수입 | B15 = SUM(B12:B14) = 12,000 + 0 + 200 | 12,200.00 |
계약직 (B18) | 1,500 | 1,500.00 |
클라우드/호스팅 (B19) | AWS 2,200 | 2,200.00 |
소프트웨어/SaaS (B20) | Amex 결제 600 (청구 제외) | 600.00 |
마케팅 (B21) | 대행사 1,000 | 1,000.00 |
임대료 (B22) | 임대인 3,500 | 3,500.00 |
부채 상환 (B25) | 대출 자동이체 900 | 900.00 |
| 총 지출 | B27 = SUM(B17:B26) | 9,700.00 |
| 순현금 | B28 = B15−B27 | +2,500.00 |
| 기말 | B29 = B10+B28 = 85,000 + 2,500 | 87,500.00 |
W2로의 이월. C10 = B29이므로 W2는 87,500.00으로 시작합니다. 은행 레그는 수입 8,000(Stripe) + 5,000(선수금) + 200(이자) = 13,200.00이고 지출은 11,000(Gusto 급여) + 1,500 + 2,200 + 600(은행 출금 SaaS) + 1,000 + 900 = 17,200.00입니다; 순현금 −4,000.00, 기말 83,500.00 — 정확히 Actuals의 워크북 W2 열(및 재예측된 Forecast 시트)입니다. 명세서 잔액 87,500과 83,500은 Actuals!B30:C30에 있으므로 31행은 두 주 모두 0으로 표시됩니다: 이것이 매핑이 작동한다는 증거입니다. 주가 계획 대비 어떻게 되었는지는 별개의 질문이며 아래 Variance에서 답변됩니다.
재현 (검증 2026-09-09, Beancount 3.2.3 + beanquery 0.2.0)
uvx --from beancount bean-check public/downloads/cash-flow-forecast/sample.bean
yarn check:cash-flow-actuals검사기는 bean-check(원장 자체의 balance 검증이 각 주의 기말 현금을 증명), 아래 내보내기 쿼리, 그리고 세 가지가 모두 일치함을 검증하는 독립적인 Python 이월을 실행합니다 — W1 12,200.00 / 9,700.00 / 87,500.00, W2 13,200.00 / 17,200.00 / 83,500.00:
SELECT date, narration, account, position
FROM date >= 2026-09-14 AND date <= 2026-09-20
WHERE account ~ "^Assets:Bank" ORDER BY date;
SELECT sum(position) AS net
FROM date >= 2026-09-14 AND date <= 2026-09-20
WHERE account ~ "^Assets:Bank";
SELECT sum(position) AS bank_cash
FROM close ON 2026-09-21 WHERE account ~ "^Assets:Bank";(W2는 날짜를 7일 이동하여 2026-09-28에 마감합니다.) 알아두어야 할 BQL 한계: 이 beanquery 버전은 부호로 전기를 필터링할 수 없으므로 수입/지출 분할은 내보낸 행에 적용됩니다 — 양수 은행 레그는 수입, 음수는 지출, 스윕 쌍은 제외 — 정확히 검사기가 수행하는 방식입니다.
업데이트 리듬 (주당 30–45분)
- 실적 가져오기 (15분): 해당 주의
Assets:Bank:*전기를 내보내고(위 쿼리를 실행하거나 은행 계좌에서 거래를 다운로드 — 카드 청구는 제외; 결제 지급만 계산됨) Actuals 시트에 입력하세요. Actuals의 주 기말 현금이 실제 결합 은행 잔액(당좌 + 저축)과 정확히 일치하는지 확인하세요 — 31행이0을 표시합니다. 이 조정은 양보할 수 없습니다. - 매출채권 검토 (10분): 모든 미수 인보이스를 나열하고 지급 예상 주에 배치하세요. 보수적으로 하고 과거 실적에 기반하여 현실적인 수금 지연을 적용하세요.
- 매입채무 및 급여 검토 (10분): 알려진 모든 예정 청구서의 만기일을 배치하세요. 전체 분기의 급여 날짜와 금액을 미리 채우세요. 주중 현금 옵션을 보존하기 위해 비핵심 지출을 금요일에 배치하세요.
- 차이 회의 (10분): Variance 시트를 열고 해당 주의
compared열을 검토하세요: 어떤 카테고리가 움직였는지, 어느 방향으로, 그리고 그것이 누적 기말 현금에 어떤 영향을 미쳤는지. 중요한 차이의 원인을 기록하고 향후 예측 규칙을 조정해야 하는지 결정하세요.
정확성 및 의사 결정
정확성 경험 규칙
- 1–2주차: ±5–10% 오류를 목표로 하세요. 이 날짜와 금액은 매우 확실해야 합니다.
- 3–6주차: ±10–20% 오류를 예상하세요. 이 기간은 알려진 청구서와 패턴 기반 추정의 혼합입니다.
- 7–13주차: 예측의 이 부분은 방향성입니다. 영업 파이프라인과 런레이트 비용에 의해 결정됩니다.
신뢰 코드: 예측을 더 쉽게 읽기 위해 각 예측 행에 신뢰 코드를 표시하세요: 확정(예: 급여, 임대료), 유력(예: 우량 고객에 대한 인보이스) 또는 업사이드(예: 파이프라인의 신규 거래).
트리거 및 조치 (사전에 결정하세요)
계획 없이는 예측이 무용합니다. 특정 임계값에 도달했을 때의 조치를 미리 정의하세요.
- 최소 현금 하한: 예를 들어, 규칙은 "항상 현금 ≥ 다음 전체 급여 금액의 1.5배를 유지해야 한다"일 수 있습니다. 예측이 이 하한을 위반할 것으로 보이면 즉시 사전 합의된 계획(예: 수금 스프린트 및 모든 재량 지출 중단)을 실행합니다.
- 런웨이 가드레일: 예를 들어, "13주차의 기말 현금이 X개월 미만의 번을 의미하면 자금 조달 계획을 시작한다." 여기에는 텀 시트 요청, 수익 선불에 대한 고객 할인 제공 또는 신용 한도 인출이 포함될 수 있습니다.
- 대규모 유출 규칙: 예를 들어, "급여가 아닌 단일 지출이 현재 현금 잔액의 5%를 초과하면 2주 전에 승인되어야 하고 대체 계획이 있어야 한다."
템플릿 및 시나리오
간단한 카테고리 세트 (시드 단계 SaaS용)
- 수입: 고객 수금, 기타 유입 (이자, 환급, 보조금)
- 지출: 급여 (순급여 + 사용자 부담 세금), 계약직, 클라우드/호스팅 (매출원가), 소프트웨어/SaaS (운영비), 마케팅 (유료/브랜드), 임대료/사무실, 법률/회계, 세금 및 수수료, 부채 상환, 일회성/연간 항목
- 계산됨: 순현금, 기말 현금
템플릿 (다운로드에 이미 구축됨; 빈 상태로 재구축하려면 복사)
아래 표는 Forecast 시트의 형태입니다 — 동일한 행, 동일한 수식 — 빈 시트에서 재구축하기 위한 것입니다. 다운로드에서는 2행에 이미 주 시작 날짜(W1 2026-09-14부터 W13 2026-12-07까지)가 있고 모든 합계가 연결되어 있습니다; 3행 아래와 열 A 오른쪽(파일에서는 B4)에서 틀 고정하여 일치시키세요.
| 행 / 주 | W1 | W2 | W3 | ... | W13 |
|---|---|---|---|---|---|
| 기초 현금 | |||||
| --- 수입 --- | |||||
| 고객 수금 | |||||
| 신규 선수금/선불 | |||||
| 기타 유입 | |||||
| 총 수입 | =SUM() | =SUM() | =SUM() | =SUM() | |
| --- 지출 --- | |||||
| 급여 (순급여 + 사용자 부담 세금) | |||||
| 계약직 | |||||
| 클라우드/호스팅 (매출원가) | |||||
| 소프트웨어/SaaS (운영비) | |||||
| 마케팅 | |||||
| 임대료/사무실 | |||||
| 법률/회계 | |||||
| 세금 및 수수료 | |||||
| 부채 상환 | |||||
| 일회성/연간 항목 | |||||
| 총 지출 | =SUM() | =SUM() | =SUM() | =SUM() | |
| 순현금 | =수입-지출 | ||||
| 기말 현금 | =기초+순현금 |
시나리오 토글 (가볍게 유지하세요)
복잡한 모델을 만들지 않고도 간단한 시나리오 계획을 구축할 수 있습니다. 시트 상단에 핵심 동인을 위한 "토글" 셀을 추가하세요. 예를 들어:
수금 둔화 토글 B6: [1.0](수금이 20% 둔화되는 모델링은 1.2로 변경 — 매주 총 수입이COL15 = COL12*$B$6+COL13*$B$7+COL14로 재계산됩니다)신규 예약 토글 B7: [1.0](계획 대비 20% 미달 모델링은 0.8로 변경)
이것들은 Forecast 시트의 실제 가정 셀이며 — 추가 배선이 필요하지 않습니다.
학습 및 실수 방지
차이 검토 (학습을 복리로 만드세요)
워크북은 차이의 부기를 대신 해줍니다: 차이 = 실제 − 기준선, 카테고리별 및 합계별로, Actuals가 complete이고 Baseline과 날짜가 같은 모든 주에 대해. 귀하의 일은 숫자를 설명하는 것입니다. 검토할 때 주요 차이의 원인을 태그하세요: 수금 지연, 범위 미끄러짐, 계획되지 않은 공급업체 구매, 타이밍 이동. 동일한 유형의 차이가 반복되면 모델의 기본 규칙을 변경하세요. 예를 들어, 수금이 일관되게 일주일 늦으면 기본 수금 지연 가정을 21일에서 28일로 변경하세요.
예시 비교 (제공된 샘플). Baseline B1은 85,000의 기초로 2026-09-11에 캡처되었습니다; Actuals는 샘플 원장의 은행 현금입니다. 부호는 Variance 시트를 따릅니다: 수입, 순현금 및 기말 양수 = 계획보다 많은 현금, 지출 양수 = 계획보다 많은 지출.
| 주 | 기준선 유입 / 유출 / 기말 | 실제 유입 / 유출 / 기말 | Δ 수입 | Δ 지출 | Δ 순현금 | Δ 기말 (누적) |
|---|---|---|---|---|---|---|
| W1 (2026-09-14) | 12,000 / 10,000 / 87,000 | 12,200 / 9,700 / 87,500 | +200 | −300 | +500 | +500 |
| W2 (2026-09-21) | 13,200 / 17,000 / 83,200 | 13,200 / 17,200 / 83,500 | 0 | +200 | −200 | +300 |
| W3 (2026-09-28) | 15,200 / 6,000 / 92,400 | 입력되지 않음 | n/a | n/a | n/a | n/a |
Variance 시트가 배치한 방식으로 읽기:
- W1, +500. 고객 수금이 계획 11,800 대비 200 높게 들어왔고(
Variance!B12= +200), AWS가 계획 2,500 대비 2,200을 청구했습니다(Variance!B19= −300: 지출 감소, 유리). 85,000 + 12,200 − 9,700 = 87,500 실제 대 85,000 + 12,000 − 10,000 = 87,000 계획. - W2, +300. 수입은 정확히 계획대로 들어왔지만 은행 지급 SaaS 청구가 계획 400 대비 600이었습니다(
Variance!C20= +200: 지출 증가, 불리). 주간 순현금은 −200이므로 누적 기말 리드는 +500에서 +300으로 축소됩니다(Variance!C29): 87,500 + 13,200 − 17,200 = 83,500 대 87,000 + 13,200 − 17,000 = 83,200. - W3 이후,
not observed. 아무것도 입력되지 않았으므로 모든 셀이n/a를 표시합니다 — 위안이 되는0이 아닙니다. - 백분율로 (32–33행): W1 수입 +1.67% 및 지출 −3.00%; W2 수입 0.00% 및 지출 +1.18%.
이로부터 두 가지 태그가 나옵니다: AWS 추정치가 높게 실행되고 있고, 은행 지급 SaaS 라인이 200 너무 낮게 계획되었습니다. 둘 다 Forecast의 가정에 대한 수정입니다 — Baseline B1은 그대로 유지되므로 다음 분기에도 원래 계획이 얼마나 벗어났는지 확인할 수 있습니다.
흔한 함정 (이것들을 피하세요)
- 계획 덮어쓰기: Forecast 셀 위에 실적을 입력하거나 매주 Baseline을 다시 붙여넣으면 비교 대상이었던 계획이 파괴됩니다. 실적은 Actuals에 들어가고; Baseline은 범위를 의도적으로 롤링할 때만 변경됩니다.
- 발생주의와 현금 혼합: 이 예측은 현금만을 위한 것입니다. 인식된 수익, 감가상각 및 기타 발생주의 개념은 여기가 아니라 주 원장에 속합니다.
- 크고 드문 연간 항목 잊기: 연간 보험료, 대규모 SaaS 갱신, 분기별 세금 납부는 큰 놀라움이 될 수 있습니다. 알게 되는 즉시 예측에 일정을 잡으세요.
- 판매세 현금 무시: 통과 부채라도 납부할 때까지 현금은 은행 계좌에 있습니다. 유입과 유출을 모두 모델링하세요.
- 조정하지 않기: Actuals의 주 기말 현금이 실제 결합 은행 잔액(당좌 + 저축; 카드 잔액 제외)과 일치하지 않으면 매핑 오류입니다 — 보통 계산된 카드 청구나 유지된 스윕. 예측을 신뢰하기 전에 반드시 수정해야 합니다.
- 명확한 담당자 없음: 매주 예측을 업데이트할 책임을 한 사람에게 할당하세요. 휴가를 위한 대리인을 지정하세요.
빠른 Beancount 연결
- 계정과목표: 현금 버킷을 깨끗하게 유지하세요 (예:
Assets:Bank:Checking,Assets:Bank:Savings,Liabilities:CreditCard:Amex). 주간 실적은Assets:Bank:*레그만입니다 — 카드 계정은 결제가 나올 곳이 필요해서 존재하지 두 번째 유출 소스가 아닙니다. - 손익계산서를 검사 기준으로 사용하지 마세요: Fava의 손익계산서는 발생주의입니다 — 카드 구매를 청구 시 기록하고 대출 원금을 무시합니다 — 따라서 설계상 이 현금 예측과 불일치합니다. 현금 검사는 위의 bean-query 내보내기 + 이월(
yarn check:cash-flow-actuals)이며, 이는 매주 기말 현금과 일치해야 합니다. - 문서화: 큰 일회성 항목이 있을 때 Beancount
documents/폴더에 인보이스 PDF를 첨부하고 예측의 메모 열에 링크하세요.
이사회/투자자 패키지 (슬라이드 하나)
- 그래프: 13주 전체에 대한 주별 기말 현금의 간단한 꺾은선 차트. 최소 현금 하한을 보여주는 가로선을 추가하세요.
- 표: W1–W13 기말 현금 숫자를 보여주는 작은 표와 해당 분기에 예상되는 상위 5개 최대 유입 및 유출의 글머리 기호 목록.
- 메모: 마지막 업데이트 이후 변경된 주요 가정과 도달했거나 도달할 것으로 예상되는 트리거에 대한 몇 개의 글머리 기호.