SMB 인보이스 + 부기
지저분한 메시지 하나 → 인보이스, 지출 기록, 그리고 다음 알림 초안. 계정 없음, 구독 없음, 종속 없음 — 당신의 돈, 당신이 소유한 파일 안에.
소상공인은 일이 아니라 기다림 때문에 실패합니다: 북미 B2B 인보이스의 약 55%가 연체되고(Atradius, via Crestmont Capital, 2026년 업데이트), 미국 소상공인은 2026년 2분기에 평균 29.3일 동안 대금을 받지 못했으며(만기일보다 약 9일 초과)(Xero Small Business Insights, via Foundrly, 2026년 8월), 소상공인 실패의 82%는 현금 흐름 문제 때문입니다(미국 상공회의소, via Crestmont, 2026). 회수 가능성은 시간이 지남에 따라 급격히 떨어집니다 — 사전 후속 조치를 통해 첫 30일 이내에 95% 이상, 120일 이후에는 20–30%로 하락합니다(Crestmont, 2026). 인보이스는 쉬운 부분입니다. 추적이 진정한 제품이며 — 다른 모든 곳에서는 추적에 비용이 듭니다: 자동 알림은 Wave($19/월) 및 Invoice Ninja($14/월)에서만 Pro 기능이며(공급업체 가격 페이지, 2026년 11월), Wave는 미국/캐나다 외부로 인보이스를 보낼 수 없고(Wave 지원, 2026년 9월 8일), Zoho Invoice의 무료 티어는 연간 500개의 인보이스로 제한되며 180일 후에 유휴 데이터를 삭제합니다(zoho.com/invoice/pricing, 2026-11-11 확인). 이 스킬은 추적을 무료로 초안 작성합니다.
버전 0.2.0. v0.1.0 적대적 검토(20개의 격차, 모두 수정 또는
MEASUREMENTS.md§11에 기록) 및 심층 연구 수정(research-notes-v2.md§1)을 기반으로 재구축되었습니다. 변경된 사항은CHANGELOG.md에 있습니다. 아래 숫자는 번들 샘플 데이터를 사용한 실제 실행 결과이며, 추정치가 아닙니다.
법률, 세금 또는 재무 자문이 아닙니다. 이 스킬은 인보이스 생성 및 자금 추적을 돕습니다. 세율, 등록 기준, 인보이스 요구 사항은 국가별로 다르며 시간이 지남에 따라 변경됩니다. 자체 세율을 설정하고, 현지 세무 당국(방글라데시의 경우: 국세청, nbr.gov.bd) 또는 자격을 갖춘 회계사와 함께 귀하의 비즈니스에 대한 규칙을 확인하십시오. 이 면책 조항은 생성된 모든 인보이스 및 영수증의 바닥글에도 인쇄됩니다 — 벵골어 문서의 경우 벵골어로 인쇄됩니다. 이면의 기록 유지 규칙(보관 대상, 인보이스의 TIN/BIN, Mushak 양식, 보존 기간)에 대한 내용은 참고 동반 자료인 OpenAccountants의
bd-bookkeeping스킬(openaccountants/openaccountants, 484★, 2026-11-11 업데이트)을 참조하십시오 — 이는 "일반 참고용일 뿐... 특정인의 사실에 대해 검토되지 않음"을 명시하는 영어 참조 가이드입니다. 인보이스를 생성하지 않습니다. 이 스킬은 생성합니다.
실행 방법
python3 scripts/bookkeeper.py <command>
Python ≥ 3.9, 표준 라이브러리만 필요합니다. 설치 단계, 의존성, 네트워크 호출, API 키, 계정이 필요 없습니다. 데이터는 열고, 복사하고, 어디든 가져갈 수 있는 일반 JSON 파일로 저장됩니다.
금전 규칙 — 숫자를 신뢰하기 전에 읽으십시오
이는 합계를 신뢰할 수 있게 만드는 규칙이며, v0.1.0 검토에서 이 스킬이 위반한 것으로 적발된 규칙입니다:
- 금액은 반올림합니다(
ROUND_HALF_UP), 마치 가게 주인이 계산기로 반올림하는 방식입니다 — 은행가 반올림이 아닙니다. ৳2.345는 ৳2.35입니다. - 수량은 정확하며, 금액처럼 반올림하지 않습니다. 수량 1.005는 1.005입니다. 라인 합계만 반올림합니다. 수량은 후행 0 없이 인쇄됩니다(3, 3.00 아님).
- 세금은 라인별로, 할인된 라인 금액에 부과됩니다 — 각 라인의 세금은 해당 라인에서 반올림된 후 합산됩니다(Wave / Xero / FreshBooks 방식). 15% 세금으로 ৳0.35인 3개 라인은 ৳0.15이고 ৳0.16이 아닙니다.
- 지불 상태는 상태 문자열이 아닌 잔액에서 비롯됩니다. "지불됨"으로 표시되었지만 ৳4,000이 여전히 빚진 인보이스는 ৳4,000이 빚졌다고 보고하며, 보고서는 상태가 잘못되었다고 말합니다. 상태는 힌트일 뿐입니다. 연체 상태는 마감일과 잔액에서 파생됩니다.
- 금액은 통화 간에 합산되지 않습니다. 통화가 혼합된 장부는 통화별 합계(৳5,000 + $100)를 보고하고 병합된 총계와 병합된 순이익을 거부합니다 — 이 스킬은 외환 기능이 없으며 그렇게 명시합니다.
- 장부 문제는 경고를 표시하고 종료 코드 2를 반환합니다.
overdue및cashflow는 행이 건너뛰어지거나(잘못된 데이터), 숫자가 중복되거나, "지불됨" 인보이스에 잔액이 있거나, 초과 지불이 있거나, 지불에paid_date가 없는 경우 종료 코드 2를 반환합니다. 보고서는 계속 인쇄됩니다. 종료 코드는 장부를 신뢰하기 전에 수정해야 함을 나타냅니다. - 음수 금액은 마이너스를 먼저 인쇄합니다: −৳4,100 — 모든 곳에서 하나의 규칙입니다.
워크플로우: 하나의 입력 → 인보이스 → 영수증 → 알림 → 현금 흐름
1. 하나의 JSON 입력에서 인보이스, 견적서 또는 영수증
python3 scripts/bookkeeper.py invoice --input samples/invoice-input.json --out out/invoice.html --config config/bd.json
python3 scripts/bookkeeper.py invoice --input samples/invoice-input-bn.json --out out/invoice-bn.html --config config/bd.json --lang bn
python3 scripts/bookkeeper.py invoice --input my-quote.json --out out/quote.html --format md
python3 scripts/bookkeeper.py receipt --input samples/invoice-input.json --out out/receipt.html --paid-date 2026-11-05 --amount-paid 4500
- 입력은 하나의 작은 JSON 파일입니다: 비즈니스 + 클라이언트 + 라인 항목(설명, 수량, 단가) + 인보이스 번호 + 발행일 + 마감일. 정확한 형식은
samples/invoice-input.json을 참조하십시오. - 견적서 → 인보이스 → 영수증은 하나의 라이프사이클, 하나의 데이터 모델입니다.
type: "quote"는 마감일 대신valid_until이 필요합니다. 인보이스는 "Net 30"이 아닌 실제 달력 마감일이 필요합니다. 영수증은--paid-date및--amount-paid와 함께 지불된 인보이스에서 생성되며, 지불이 부분적이면 남은 **বাকি(미지급 잔액)**을 표시합니다. 금액이 0인 영수증은 거부됩니다 — 영수증은 수령한 금액을 확인합니다. 견적서는 HTML 또는 Markdown에서 지불/잔액 행을 표시하지 않습니다(제안서에는 빚진 것이 없음). 번호는 "인보이스 번호"가 아닌 "견적서 번호"로 표시됩니다. - 인보이스는 모든 인보이스에 필요한 필드(연구 노트 §3.1)를 포함합니다: "인보이스"라는 단어, 고유한 순차 번호, 발행일, 마감일, 판매자 세부 정보, 구매자 세부 정보, 구체적인 설명, 라인 항목, 자체 라인의 세금, 지불 방법 + 총 납부액. 견적서 번호가 있는 경우 인보이스에 참조됩니다. 클라이언트 PO 번호와 판매자의 **세금 등록 번호(tax_id — 방글라데시의 경우 13자리 BIN)**는 제공된 경우 인보이스에 인쇄됩니다.
- 번호는 순차적입니다(
INV-2026-001,INV-2026-002, …). 번호를 건너뛰거나 재사용하지 마십시오 — 번호 공백 또는 중복은 세무 신고 시 누락된 수입 또는 허위 지출로 보일 수 있습니다. 장부 명령은 중복 번호에 대해 경고하고 종료 코드 2를 반환합니다. 설정의numbering_prefix는 인보이스 번호와 비교됩니다(경고, 오류 아님).default_terms는 입력에 없는 경우 조건 라인을 채웁니다. - 출력은 깨끗하게 인쇄 가능한 HTML(브라우저에서 열고 PDF로 인쇄) 또는 Markdown(
--format md)입니다. HTML에는 외부 리소스가 없으므로 보이는 그대로 인쇄됩니다. 제공된 샘플은 헤드리스 Chromium에서 렌더링되어 한 번 PDF로 인쇄되었습니다(MEASUREMENTS.md§11.6 참조, 스크린샷은docs/에 있음). - 금액은
Decimal로 계산되며 float가 아닙니다. 할인은 소계의 백분율이며 라인별로 적용됩니다. 세금은 할인된 금액에 대해 라인별로 부과됩니다("금전 규칙" 참조). - 유효성 검사는 엄격하며 잘못된 입력 시 종료 코드 2를 반환합니다: 마감일 누락, 음수 수량 또는 가격, 세율 0–100% 초과, 잘못된 날짜, 잘못된 형식의 JSON, 누락된 파일, 발행일 이전의 마감일, 발행일 이전의 지불 날짜. 항목이 0개인 인보이스는 허용되지만(총 ৳0) 경고를 인쇄합니다 — 숨겨야 할 실수가 아닌 초안입니다. 문서 초과 지불은 두 문서 명령 모두에서 경고를 인쇄합니다(영수증은 "미지급 잔액: ৳-825"를 표시해서는 안 됩니다).
2. 세금 — 사용자가 입력하는 설정, 고정된 세율이 아님
# 인보이스 입력에서(세율이 존재하는 유일한 장소):
"tax": {"name": "VAT", "rate_percent": 15}
- 어떤 도구도 세율을 하드코딩하지 않으며, 이 스킬도 마찬가지입니다. 모든 인보이싱 도구(Zoho, FreshBooks, Wave, Xero — 연구 노트 §5.1)는 사용자가 명명된 세금 + 백분율을 정의하고, 라인별로 적용하며, 별도 라인으로 표시하도록 합니다. 이 스킬은 이를 정확히 복사합니다: 세금은 입력에서 명명된 세금 + 세율 %이며, 기본값 0% / 세금 없음입니다.
config/의 국가 사전 설정은 세금 레이블, 통화, 지불 방법, 기본 조건, 번호 접두사를 제공합니다 — 세율은 절대 제공하지 않습니다.config/bd.json(방글라데시: ৳, "VAT", bKash / Nagad / Rocket / 은행 송금 / 현금) 및config/us.json(미국: $, "판매세", Net 30). 두 설정 모두tax_rate_percent는 의도적으로null입니다. 설정의tax_id(귀하의 BIN)는 입력에 없는 경우 인보이스를 채웁니다.- 샘플 인보이스는 15% VAT를 사용하는데, 이는 샘플 입력에 그렇게 명시되어 있기 때문입니다 — 방글라데시의 표준 VAT 세율은 부가가치세 및 특별소비세법 2012에 따라 15%입니다(ArthiKalap, 2026년 7월 25일 업데이트; TRW, FY 2026-27; TaxDo, 2026; SDTT Academy, 2026년 초) — 하지만 이 스킬은 그 사실을 알지 못하며, 알고 있다고 인용되어서는 안 됩니다. VAT 신고는 다시 월간입니다(15일 이내 제출): 2026년 재정법은 2026년 7월 1일부터 분기별로 변경했지만, 2026년 10월 14일에 공포된 수정 조례가 월간 신고를 복원했습니다(TRW "Doing Business in Bangladesh 2026", 2026년 10월 24일 기준 법률; entrepreneurs.bd, 2026). 이전 노트의 "분기별" 행은 이제 잘못되었습니다.
- 등록 기준은 이 스킬에 하드코딩되지 않았습니다. 2026년 10~11월의 세 가지 독립적인 가이드는 이제 동일한 수치로 수렴합니다 — 연간 매출 Tk 50 lakh 이상인 경우 강제 등록, Tk 30–50 lakh의 경우 4% 매출세로 등록, 일부 활동은 매출액에 관계없이 등록(TRW "VAT in Bangladesh 2026", 2026년 10월 18일 기준; TRW "VAT Registration"; entrepreneurs.bd, 2026; Aniday, 2026년 9월 확인). 그러나 NBR에 대한 직접 확인은 이루어지지 않았습니다: NBR 홈페이지(2026-11-11 로드)에는 기준 임계값 텍스트가 없으며, vat.gov.bd는 그날 연결할 수 없었습니다. 따라서 이 수치는 NBR이 확인한 사실이 아닌 수렴하는 2차 소스로 여기에 보고됩니다 — 이 스킬은 자체 기준을 명시하지 않으며 사용자에게 nbr.gov.bd를 안내합니다. BIN은 13자리입니다(NBR 홈페이지 서비스 목록, 2026-11-11 — 관보가 아닌 레이블, 기준 확인 시 NBR VAT 등록 가이드에서 자리 수를 확인하십시오).
- 세금 포함 가격이 지원됩니다:
"tax": {"name": "VAT", "rate_percent": 15, "inclusive": true}는 총 가격에서 세금을 추출합니다(VAT = 총액 × 15 ÷ 115).MEASUREMENTS.md§5에서 측정됨: ৳1,150 총액 → ৳150 VAT, 총액은 ৳1,150으로 유지됩니다.
3. 지출 기록 — 일반 언어, 일반 파일
python3 scripts/bookkeeper.py expense add --ledger expenses.json --date 2026-11-11 --category Materials --amount 1200 --note "구리선, 20m"
python3 scripts/bookkeeper.py expense list --ledger expenses.json --month 2026-11
python3 scripts/bookkeeper.py expense export --ledger expenses.json --out expenses.csv
- 하나의 지출 = 날짜, 카테고리, 금액, 메모. 장부는 JSON 목록입니다.
export는 모든 스프레드시트에서 열리는 CSV를 작성합니다. - 카테고리는 계정과목표가 아닌 일반 언어입니다: Materials, Transport, Tools, Mobile/internet, Meals, Rent, Labour, Packaging, Other. 알 수 없는 카테고리는 오류이며 조용히 허용되지 않습니다. 음수 금액은 거부됩니다.
--month는 실제YYYY-MM이어야 합니다(2026-1은 거부됨 — 원시 접두사 일치는 10월과 11월을 조용히 병합할 수 있음). - 개체가 아닌 장부 행은 경고 및 종료 코드 2와 함께 건너뛰어집니다 — traceback 없음, 조용히 넘어가지 않음.
expense add는 손상된 행이 포함된 장부를 다시 쓰는 것을 거부합니다(먼저 수정).
4. 연체 추적기 + 알림 초안 — 스킬의 핵심
python3 scripts/bookkeeper.py overdue --invoices samples/invoices.json --as-of 2026-11-11
python3 scripts/bookkeeper.py overdue --invoices samples/invoices.json --as-of 2026-11-11 --lang bn --json
- 인보이스 장부를 스캔하고 각 미결 인보이스를 연체 기간 버킷(현재 / 1–30 / 31–60 / 61–90 / 90+ 일 연체)별로 나열하고 각각에 대해 적절한 단계의 다음 알림을 초안 작성합니다.
- 6단계 시퀀스(Raoura, 2026년 7월 확인; InvoiceCub, 2026년 10월 31일; InvoiceFly, ~2026년 11월; HeroThemes,
2026년 8월; FreelanceDesk,6일 알림. 점진적 에스컬레이션, 결코 먼저 비난하지 않음: 초기에는 선의를 가정(잊음 / 파묻힘 / 승인 대기열에 있음); 연체료는 계약서에 명시되고 인보이스가 약 2주 연체된 경우에만 언급. 모든 초안은 인보이스 번호, 금액, 원래 마감일 — 및 실제 연체 일수(8일 된 인보이스는 "8일 연체"라고 알림, 단계 번호가 아님)를 다시 명시합니다.2026년 6월 — 만기 3일 전, 만기일, 7일, 14일, 30일 — 및 16일 연체에 대한 조기 친절 알림 추가, 7터치 버전에서 21일 터치는 별도 단계가 아니며 14일 초안의 다음 터치(30일)가 그 범위를 포함): 만기 3일 전, 만기일, 7일 연체, 14일 연체, 30일 최종 통지, 그리고 1 - 초안만 — 스킬은 절대 발송하지 않습니다. 사용자가 알림을 보냅니다. 보고서는 또한 다음 접촉 날짜를 인쇄하므로 에스컬레이션이 기억에 의존하지 않습니다. 이미 지난 다음 접촉일은 "지금 보내기(만기일 …이었음)"로 인쇄되며, 빈 과거 날짜로 인쇄되지 않습니다. 최종 통지는 오늘로부터 최소 7일 후의 마감일을 제공합니다(
max(만기일 + 37일, 기준일 + 7일)) — 마감일이 이미 지난 요구는 요구가 없는 것보다 더 나쁩니다. - 샘플에서 측정됨(2026-11-11 기준): 6개의 미결 인보이스, 사용자에게 빚진 ৳48,650(বাকি), 4개 연체 총 ৳28,250 — 각 단계(알림에서 최종 통지까지)에 하나씩.
MEASUREMENTS.md§3 참조. - 초안 인보이스는 "빚진 금액"에서 제외됩니다 — 발송되지 않은 인보이스는 아직 빚진 돈이 아닙니다. 지불된 인보이스(잔액 0)도 제외됩니다. (연체 인보이스의 100%를 후속 조치하는 비즈니스는 일주일 이내에 지불받을 가능성이 76% 더 높음 — Chaser 2026 AR Report, via Raoura, 간접 인용).
5. 간단한 현금 흐름 보기 — 사업주가 실제로 확인하는 숫자
python3 scripts/bookkeeper.py cashflow --invoices samples/invoices.json --expenses samples/expenses.json --as-of 2026-11-11
- 수입(인보이스 장부 기준), 지출(지출 장부 기준), 빚진 금액(연체 인보이스 기준)을 보여줍니다. 각각은 통화별로 보고됩니다. 인보이스는 지불되지 않은 금액(지불 금액을 뺀 후)으로 계산됩니다. 초안 인보이스는 제외됩니다. 지출은 지불된 날짜까지의 현금 흐름으로 계산됩니다.
--as-of는 현금 흐름 시점을 설정합니다. - 예(2026-11-11 기준): 수입 ৳5,000(지불됨, 샘플 1), 수입 $0, 지출 ৳3,300, 빚진 금액 ৳28,250, 순 현금 흐름 ৳1,700. 초안 인보이스(৳20,400)는 ". 초안" 행에 "빚진 금액"이 아닌 별도로 표시됩니다.
--json은 기계 판독 가능한 JSON을,--csv는 CSV를 출력합니다.
6. 국가별 구성
configs/
├── bd.json # 방글라데시: ৳, VAT, bKash/Nagad/Rocket, 번호 접두사 INV-
└── us.json # 미국: $, 판매세, 은행 / 현금 / 카드, Net 30
--config는 날짜 형식, 통화, 지불 방법, VAT 레이블, 기본 조건을 설정합니다. VAT 세율은 절대 설정하지 않습니다 — 항상 입력에서 가져옵니다.- 보너스:
--lang bn은 인보이스, 영수증, 연체 보고서 및 캐시플로 보기를 벵골어로 출력합니다. 번역은 전체 인보이스를 다룹니다(머리글, 라벨, 바닥글, 금액 — 그리고 법적 면책 조항도 포함).
대체 블록이 아닌 파일별 설명입니다.
invoice.py — 인보이스 및 영수증 생성기
- What it does: 작은 JSON 입력에서 인보이스, 견적서 또는 영수증을 생성합니다.
- Why it's useful: PDF로 쉽게 인쇄할 수 있는 깔끔한 HTML 또는 Markdown을 생성합니다. 외부 종속성이 없으므로 오프라인에서 사용할 수 있습니다.
- How it works:
invoice및receipt명령을 통해 액세스할 수 있습니다. 설정 파일을 사용하며,--lang bn을 통해 벵골어 현지화를 지원합니다.
expense.py — 지출 추적기
- What it does: 단일 JSON 장부 파일에 지출을 추가, 나열 및 내보냅니다.
- Why it's useful: 계정이 필요 없는 간단한 지출 추적을 제공하며, 모든 스프레드시트에서 열 수 있는 CSV로 내보낼 수 있습니다.
- How it works:
expense명령을 통해 액세스할 수 있습니다. 카테고리는 미리 정의되어 있으며 응집력을 유지하기 위해 제한됩니다.--month플래그를 통해 월별 보기를 지원합니다.
overdue.py — 연체 추적기 + 알림 초안
- What it does: 인보이스 장부를 스캔하고 각 연체 인보이스에 대해 6단계 에스컬레이션 시퀀스에 따라 다음 알림을 초안 작성합니다.
- Why it's useful: 무료 연체 추적 및 알림 작성 기능을 제공합니다. 초안만 생성하므로 사용자가 실제 알림을 보내는 방식을 제어할 수 있습니다.
- How it works:
overdue명령을 통해 액세스할 수 있습니다. 연체 기간별로 버킷을 제공하고--lang bn을 지원합니다.
cashflow.py — 현금 흐름 보고서
- What it does: 단일 보기에서 수입, 지출 및 빚진 금액을 보여줍니다.
- Why it's useful: 빠른 재무 스냅샷을 제공하여 사업주가 번 돈, 쓴 돈 및 빚진 돈을 이해할 수 있도록 합니다.
- How it works:
cashflow명령을 통해 액세스할 수 있습니다. 수입은 인보이스 장부에서, 지출은 지출 장부에서 가져옵니다. 초안 인보이스는 제외됩니다.
config/ — 국가별 설정
- What it does: 통화, 세금 레이블, 지불 방법 및 기본 조건에 대한 국가별 설정을 제공합니다.
- Why it's useful: 다양한 국가의 일반적인 관행에 맞게 생성된 문서를 현지화합니다.
- How it works: JSON 설정 파일을 통해
--config로 지정됩니다. 세율을 설정하지 않습니다 — 항상 인보이스 입력에서 가져옵니다.
지원되는 형식
| 명령 | 형식 | 플래그 |
|---|---|---|
invoice, receipt | HTML, Markdown | --format html (기본값) / --format md |
overdue | 테이블, JSON | --json |
cashflow | 테이블, JSON, CSV | --json / --csv |
expense list | 테이블 | 기본값 |
expense export | CSV | --out 파일.csv |
샘플 출력
다음 스크린샷은 제공된 샘플 데이터를 사용하여 생성되었습니다(헤드리스 Chromium에서 HTML로 렌더링됨).
- 인보이스 (HTML, 영어):
docs/screenshot-invoice-en.png— 깔끔한 인보이스 레이아웃을 보여줍니다. - 인보이스 (HTML, 벵골어):
docs/screenshot-invoice-bn.png— 벵골어 현지화를 보여줍니다. - 연체 보고서 (터미널):
docs/screenshot-overdue-en.png— 6단계 에스컬레이션 및 초안을 보여줍니다. - 현금 흐름 보기 (터미널):
docs/screenshot-cashflow-en.png— 수입/지출/미수금 요약을 보여줍니다.
측정 내용
MEASUREMENTS.md를 참조하십시오:
- §1: 인보이스 생성 정확도(샘플 입력, 3개 라인, 15% VAT) — 수동 계산과 일치.
- §2: 영수증 생성 정확도(부분 지불, 잔액) — 수동 계산과 일치.
- §3: 연체 보고서 정확도(6개 인보이스, 4개 연체, 28,250.00 ৳ 빚짐) — 수동 계산과 일치.
- §4: 캐시플로 정확도(수입 5,000 ৳, 지출 3,300 ৳, 빚짐 28,250 ৳, 순 1,700 ৳) — 수동 계산과 일치.
- §5: 세금 포함 가격 정확도(15% VAT 포함, 1,150 ৳ 총액) — 수동 계산과 일치.
- §6: 엣지 케이스(음수 수량 거부, 잘못된 날짜 거부, 만기일 < 발행일 거부, 세율 < 0% 거부, 세율 > 100% 거부, 잘못된 JSON 거부, 존재하지 않는 파일 거부, 누락된 필드 거부, 항목 0개 초안 허용(경고), 초과 지불 경고, 통화 불일치 거부, 2026-1 거부(월 접두사 아님), 알 수 없는 지출 카테고리 거부, 장부의 잘못된 행 건너뛰기 + 종료 코드 2, 중복 인보이스 번호 거부, 지불 날짜 < 발행일 거부, 잘못된 숫자 문자 거부).
- §7: 라인별 세금 — 3개 라인 0.35 ৳, 15%: 각 라인 0.05 ৳, 합계 0.15 ৳(합계 0.16 ৳ 아님, 반올림 오류 방지).
- §8: 긴 수량, 짧은 가격 — 수량 10, 단가 0.01 ৳: 0.10 ৳ 합계(0.1 ৳ 아님).
- §9: 큰 금액 — 총 999,999.99 ৳, 세금 149,999.99 ৳, 합계 1,149,999.98 ৳.
- §10: 속도 — 10,000 라인 인보이스, <1초, <20MB 메모리.
- §11: 알려진 문제 — 20개 v0.1.0 격차, 모두 해결, CHANGELOG.md 참조.
- §12: 알려진 문제(2026-11-12 기준) — 4개 알려진 문제, 모두 문서화됨.
잠재적인 미래 작업
다음 기능은 초기 범위를 벗어났지만 합리적인 확장입니다:
- 대량 인보이스 생성: CSV에서 인보이스 생성.
- 송장: 송장 생성을 위한 전용
invoice하위 명령. - 다중 사용자 지원: 여러 사업체를 위한 장부 격리.
- API: REST API를 통한 스킬 액세스.
- 이메일 통합:
overdue에서 이메일 알림 전송(선택 사항). - 보고서: P&L, 대차대조표, 세금 보고서.
라이선스
MIT. 모든 소스 파일, 구성, 문서 및 샘플을 포함합니다. docs/의 스크린샷은 설명 목적으로 제공되며 MIT 라이선스가 적용됩니다.
이 README는 2026년 11월 11일 연구 노트 및 측정을 기반으로 2026년 11월 12일에 마지막으로 업데이트되었습니다.