재무 보고서에서 현금, 지출, 부채를 예측하려면 미래 날짜의 거래를 별도의 시나리오 원장에 넣으세요. 이 가이드는 일반적인 Beancount 항목과 고정된 계획 기간을 사용합니다. 실제 장부는 가정과 분리되어 유지됩니다.
호환성 (2026년 9월 7일 확인): 예제는 표준 Beancount 3.2.3, beanquery 0.2.0, Fava 1.30.16에서 테스트되었습니다. 해당 Fava 릴리스에는 예측 플러그인이 포함되어 있지 않습니다. Beancount.io의 맞춤 소스에는 fava.plugins.forecast 구현이 포함되어 있지만, 이는 다른 런타임이며 소스 가용성이 귀하의 계정에 배포된 버전을 보장하지는 않습니다. 아래의 이식 가능한 워크플로우는 확장 기능이 필요 없습니다.
1단계: 예측 플러그인 활성화
이 워크플로우에서는 플러그인 활성화를 건너뜁니다. 테스트된 표준 설치에 plugin "fava.plugins.forecast"를 추가하면 가져오기 오류가 발생합니다. 일반적인 플러그인 설정은 플러그인 가이드를 참조하세요. 원장이 모듈을 로드하려면 먼저 해당 모듈이 실제로 설치되어 있어야 합니다.
사전 요구 사항: beancount==3.2.3, beanquery==0.2.0, fava==1.30.16이 설치된 로컬 Python 환경. 고정된 Fava 설정에 따라 해당 환경을 만드세요. 아래의 세 파일을 모두 같은 디렉터리에 저장하고 해당 디렉터리에서 명령을 실행하세요.
books.beancount를 이 완전한 예제 스냅샷으로 만드세요. 기준일은 2023년 12월 31일이며, 시작 거래 이후입니다. 당좌예금 잔액은 10,000.00 USD, 미상환 자동차 대출 원금은 14,400.00 USD입니다. 자본이 이 단순화된 시작 스냅샷의 균형을 맞춥니다.
; books.beancount — realized balances as of 2023-12-31
option "operating_currency" "USD"
2023-12-31 open Assets:Checking USD
2023-12-31 open Liabilities:Auto-Loan USD
2023-12-31 open Equity:Opening-Balances USD
2023-12-31 open Income:Salary USD
2023-12-31 open Expenses:Housing:Rent USD
2023-12-31 open Expenses:Food:Groceries USD
2023-12-31 open Expenses:Health:Gym USD
2023-12-31 open Expenses:Insurance:Auto USD
2023-12-31 open Expenses:Transportation:Interest USD
2023-12-31 * "Opening snapshot"
Assets:Checking 10000.00 USD
Liabilities:Auto-Loan -14400.00 USD
Equity:Opening-Balances 4400.00 USDscenario.beancount를 계획 진입점으로 만드세요. 두 개의 include는 실제 스냅샷과 다음에 작성할 가정을 로드합니다. Beancount는 이 파일을 기준으로 include 경로를 읽습니다.
; scenario.beancount — planning entry point
option "title" "January 2024 planning scenario"
option "operating_currency" "USD"
include "books.beancount"
include "scenario-2024-01.beancount"books.beancount에서 scenario.beancount 또는 scenario-2024-01.beancount를 include하지 마세요. 실제 진입점은 날짜가 지난 후에도 계획된 거래를 로드해서는 안 됩니다.
2단계: 예측 거래 만들기
scenario-2024-01.beancount를 이 첫 번째 항목으로 만드세요. 나중에 나오는 네 개의 시나리오 블록을 해당 파일에 각각 한 번씩 추가하세요. 이들은 컨텍스트 트랜잭션 블록입니다. 계정 선언은 books.beancount에서 가져오며 scenario.beancount를 통해 검증합니다.
2024-01-01 ! "Scenario: January rent" #forecast
Expenses:Housing:Rent 2500.00 USD
Assets:Checking -2500.00 USD! 플래그는 검토가 필요한 거래를 표시하고, #forecast는 일반적인 거래 태그입니다. 둘 다 반복을 생성하거나 보고서에서 거래를 제외하지 않습니다. 포함 여부는 별도의 진입점이 제어합니다. 검토 중에 식별할 수 있도록 계획된 항목에만 이 태그를 사용하세요.
예측 구문 이해하기
모든 날짜가 있는 항목은 한 번의 발생을 나타냅니다. [MONTHLY]와 같은 설명 텍스트는 표준 Beancount에서 반복 효과가 없습니다. 이전의 UNTIL, REPEAT, SKIP 지침은 맞춤 플러그인 규칙에 속하며 핵심 언어가 아닙니다. 이 워크플로우는 의도된 날짜를 명시적으로 표현합니다.
시나리오는 2024년 1월 1일부터 31일까지(포함) 를 다룹니다. 모든 계획된 날짜는 고정된 기준일 이후이며 2월 1일 이전입니다. 이러한 과거 날짜는 예제를 재현 가능하게 만듭니다. 오늘 날짜에 의존하는 것은 없습니다. 이를 적용할 때는 항목을 추가하기 전에 새로운 기준일과 유한한 기간을 선택하세요.
빈도
계획 기간 내의 각 만기일에 대해 거래 하나를 작성하세요. 완전한 1월 예제는 다음 규칙을 사용합니다:
| 항목 | 일정 | 2024년 1월에 포함된 날짜 |
|---|---|---|
| 임대료 | 매월 1일 | 1월 1일 |
| 식료품 | 1월 1일부터 7일마다 | 1월 1일, 8일, 15일, 22일, 29일 |
| 급여 | 1월 5일부터 14일마다 | 1월 5일, 19일 |
| 헬스장 | 매월 15일 | 1월 15일 |
| 대출 상환 | 매월 25일 | 1월 25일 |
| 자동차 보험 | 1월 15일부터 3개월마다 | 1월 15일; 다음 납부 4월 15일은 이 기간 밖 |
다른 일일 또는 연간 계획의 경우에도 같은 방식으로 실제 만기일을 나열하세요. 일정을 확장하기 전에 31일 또는 2월 29일과 같은 날짜에 대한 정책을 설정하세요. 조용히 이동시키거나 모든 달의 일수가 같다고 가정하지 마세요.
조건 (선택 사항)
1. 종료 날짜를 명시적으로 설정
헬스장 멤버십이 2024년 12월 31일에 종료된다고 가정해 보겠습니다. 1월 발생은 아래와 같습니다. 1월 시나리오는 1월 31일에 끝나므로 2월~12월 항목은 포함되지 않습니다. 기간을 확장하는 경우 12월 15일까지 각 후속 납부를 작성하고 거기서 중단하세요.
2024-01-15 ! "Scenario: gym membership" #forecast
Expenses:Health:Gym 80.00 USD
Assets:Checking -80.00 USD2. 발생 횟수 제한 및 대출 원금과 이자 분리
자동차 대출에 36회의 남은 상환이 있다고 가정해 보겠습니다. 이 1월 기간에는 첫 번째 상환만 포함하세요. 이 가상의 할부의 경우 450.00 USD 현금 지불이 400.00 USD 원금과 50.00 USD 이자로 구성된다고 가정합니다. 이는 시나리오 가정이며 이후 할부는 생성되지 않습니다.
2024-01-25 ! "Scenario: car loan payment 1 of 36" #forecast
Liabilities:Auto-Loan 400.00 USD
Expenses:Transportation:Interest 50.00 USD
Assets:Checking -450.00 USD양수 부채 포스팅은 부채 잔액을 −14,400.00 USD에서 −14,000.00 USD로 줄입니다. 현금은 450.00 USD 감소하고 50.00 USD만 비용입니다. 포스팅은 400.00 + 50.00 - 450.00 = 0이므로 균형을 이룹니다. 음수 부채 포스팅은 부채를 증가시킵니다.
지원 일정 없이 동일한 원금/이자 분할을 36회 모두에 반복하지 마세요. 향후 이자와 최종 지불은 다를 수 있습니다. 이 예제를 확장할 때는 대출 기관의 상환 일정을 사용하세요. 비용 인식과 부채 상환의 차이점은 할부 상환을 참조하세요.
3. 불규칙한 간격을 실제 날짜로 작성
1월 5일부터 격주 급여의 경우 1월 날짜는 1월 5일과 1월 19일입니다. 다음 발생은 2월 2일로 이 시나리오 밖입니다. 격주는 14일마다를 의미하며 달력상 월 2회가 아닙니다.
2024-01-05 ! "Scenario: salary" #forecast
Assets:Checking 3000.00 USD
Income:Salary -3000.00 USD
2024-01-19 ! "Scenario: salary" #forecast
Assets:Checking 3000.00 USD
Income:Salary -3000.00 USD실용 예제: 월별 예산
아래의 식료품 및 자동차 보험 항목을 scenario-2024-01.beancount에 추가하여 월별 예산을 완성하세요. 위의 임대료, 헬스장, 대출 상환, 두 급여 항목과 함께 11개의 계획된 거래가 생성됩니다.
2024-01-01 ! "Scenario: groceries" #forecast
Expenses:Food:Groceries 150.00 USD
Assets:Checking -150.00 USD
2024-01-08 ! "Scenario: groceries" #forecast
Expenses:Food:Groceries 150.00 USD
Assets:Checking -150.00 USD
2024-01-15 ! "Scenario: groceries" #forecast
Expenses:Food:Groceries 150.00 USD
Assets:Checking -150.00 USD
2024-01-22 ! "Scenario: groceries" #forecast
Expenses:Food:Groceries 150.00 USD
Assets:Checking -150.00 USD
2024-01-29 ! "Scenario: groceries" #forecast
Expenses:Food:Groceries 150.00 USD
Assets:Checking -150.00 USD
2024-01-15 ! "Scenario: quarterly car insurance" #forecast
Expenses:Insurance:Auto 450.00 USD
Assets:Checking -450.00 USD두 진입점을 모두 검증한 다음 마감 잔액을 조회하세요. date < 2024-02-01은 1월의 모든 포스팅을 포함합니다. 장부 조회는 고정된 기준일 경계인 date < 2024-01-01을 사용합니다.
bea --file books.beancount check
bea --file scenario.beancount check
bea --file books.beancount query "SELECT account, sum(position) WHERE date < 2024-01-01 GROUP BY account ORDER BY account"
bea --file scenario.beancount query "SELECT account, sum(position) WHERE date < 2024-02-01 GROUP BY account ORDER BY account"두 bea check 명령 모두 성공적으로 종료되어야 합니다. 조회 결과를 다음의 독립적인 계산과 대조하세요:
| 결과 | 실제 장부, 12월 31일 | 1월 시나리오, 1월 31일 |
|---|---|---|
| 당좌예금 | 10,000.00 USD | 10,000 + 6,000 − 2,500 − 750 − 80 − 450 − 450 = 11,770.00 USD |
| 대출 잔액 | −14,400.00 USD | −14,400 + 400 = −14,000.00 USD |
| 급여 소득 포스팅 | 0.00 USD | −6,000.00 USD |
| 총 비용 포스팅 | 0.00 USD | 2,500 + 750 + 80 + 450 + 50 = 3,830.00 USD |
1월의 예상 이익은 2,170.00 USD입니다: 소득 6,000에서 비용 3,830을 뺀 값입니다. 당좌예금은 추가 원금 상환 400이 부채를 줄이므로 이익이 아닌 1,770.00 USD 증가합니다.
표준 Fava에서 시나리오를 여세요:
fava scenario.beancountFava의 시간 필터를 2024-01로 설정하세요. 시간 필터링은 이전 자산 및 부채 잔액을 해당 기간으로 가져오고 이후 항목을 제거합니다. 대차대조표에서 11,770.00 USD 현금과 14,000.00 USD 미상환 부채를 확인하세요. 손익계산서에는 2,170.00 USD 예상 이익이 표시되어야 합니다. 대신 books.beancount를 열면 실제 스냅샷이 표시됩니다.
문제 해결 및 모범 사례
- 이전 플러그인의 가져오기 오류: 이 이식 가능한 워크플로우를 사용할 때 활성화 줄을 제거하세요. 표준 Fava 설치에는 Beancount.io의 맞춤 모듈이 제공되지 않습니다.
- 알 수 없는 계정 또는 누락된 include 파일: 세 파일을 모두 같은 디렉터리에 저장하고, opens를 복사하고, 시나리오 조각만이 아닌
scenario.beancount를 검증하세요. - Fava에서 예측이 누락됨:
scenario.beancount를 로드하고 시간 필터를2024-01로 설정하세요. 태그나 설명은 항목을 생성하지 않습니다. - 예상치 못한 잔액: 11개의 계획된 날짜와 금액을 표와 비교하세요. 발생을 두 번 로드하면 모든 거래가 균형을 이루더라도 재무 효과가 두 배가 됩니다.
- 예측을 분리 유지: 일반 플래그, 태그, 미래 날짜는 필터링되지 않은 보고서에서 항목이 영향을 미치는 것을 방지하지 않습니다. 실제 결과에는
books.beancount를 사용하세요. 지불이 발생하면 실제 금액을 여기에 기록하고 다음 시나리오에서 해당 가정을 제거하여 이중 계산을 방지하세요. - 기간 검토: 시나리오를 저장할 때 날짜가 있는 스냅샷을 보존하세요. 종료 날짜를 연장한다는 것은 특정 발생을 추가하고 대출 분할, 취소 날짜, 반올림을 다시 확인하는 것을 의미합니다.