Community생산성 & 협업github.com

3447nazmul/smb-bookkeeper-repo

하나의 작은 입력으로 인보이스, 견적서 또는 영수증을 생성하고, 일반 장부에 지출을 기록하며, 연체된 인보이스 목록과 함께 다음 지불 알림 초안을 일반 영어 또는 간단한 벵골어로 작성하고, 간단한 현금 흐름을 확인할 수 있는 도구입니다. 기술에 익숙하지 않은 소상공인을 위해 설계되었습니다. 지저분한 메시지에서 인보이스가 필요하거나, 누가 돈을 빚졌는지와 다음에 무엇을 써야 할지 알고 싶거나, 이번 달 수입, 지출, 빚진 금액을 한 화면에서 확인하려는 경우에 사용하세요.

smb-bookkeeper-repo란 무엇인가요?

이 스킬은 소상공인이 단일 JSON 입력 파일로부터 인보이스, 견적서, 영수증을 생성하고, JSON 형식의 일반 장부에 지출을 기록하며, 연체된 인보이스를 추적하고 6단계 알림 초안을 제공하는 오픈소스 CLI 도구입니다. 또한 간단한 현금 흐름 요약을 보여줍니다. Python 3.9 이상만 필요하며 표준 라이브러리만 사용하여 설치, 의존성, 네트워크 호출, API 키 또는 계정이 전혀 필요 없습니다. 데이터는 사용자가 열고, 복사하고, 어디든 가져갈 수 있는 일반 JSON 파일로 저장됩니다. 엄격한 금전 처리 규칙(ROUND_HALF_UP 반올림, 통화별 합계, 라인별 과세)을 적용하며, 명확한 벵골어 지원과 같이 현지화된 구성을 제공합니다. 이 스킬은 알림 초안만 생성하고 실제로는 발송하지 않으며, 법률, 세금 또는 재무 자문을 제공하지 않습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/3447nazmul/smb-bookkeeper-repo/tree/HEAD

Installed? Explore more 생산성 & 협업 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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, 2026년 6월 — 만기 3일 전, 만기일, 7일, 14일, 30일 — 및 16일 연체에 대한 조기 친절 알림 추가, 7터치 버전에서 21일 터치는 별도 단계가 아니며 14일 초안의 다음 터치(30일)가 그 범위를 포함): 만기 3일 전, 만기일, 7일 연체, 14일 연체, 30일 최종 통지, 그리고 16일 알림. 점진적 에스컬레이션, 결코 먼저 비난하지 않음: 초기에는 선의를 가정(잊음 / 파묻힘 / 승인 대기열에 있음); 연체료는 계약서에 명시되고 인보이스가 약 2주 연체된 경우에만 언급. 모든 초안은 인보이스 번호, 금액, 원래 마감일 — 및 실제 연체 일수(8일 된 인보이스는 "8일 연체"라고 알림, 단계 번호가 아님)를 다시 명시합니다.
  • 초안만 — 스킬은 절대 발송하지 않습니다. 사용자가 알림을 보냅니다. 보고서는 또한 다음 접촉 날짜를 인쇄하므로 에스컬레이션이 기억에 의존하지 않습니다. 이미 지난 다음 접촉일은 "지금 보내기(만기일 …이었음)"로 인쇄되며, 빈 과거 날짜로 인쇄되지 않습니다. 최종 통지는 오늘로부터 최소 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, receiptHTML, Markdown--format html (기본값) / --format md
overdue테이블, JSON--json
cashflow테이블, JSON, CSV--json / --csv
expense list테이블기본값
expense exportCSV--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일에 마지막으로 업데이트되었습니다.

관련 스킬