mirror of
https://github.com/NomaDamas/k-skill.git
synced 2026-06-24 02:04:11 +00:00
Add korean jangbu automation skill wrapper
Issue #173 needs a k-skill entry point centered on kimlawtech/korean-jangbu-for while preserving upstream attribution and accounting/tax disclaimers. Add a thin wrapper with pinned upstream install, bundled Apache license/disclaimer/notice, docs, and regression coverage for the required original link and @kimlawtech (SpeciAI) mention.\n\nConstraint: Upstream implementation remains in kimlawtech/korean-jangbu-for and is installed by pinned SHA instead of vendoring runtime payload into k-skill\nConstraint: Generated accounting/tax outputs are reference drafts, not official audits or tax filings\nRejected: Reimplement ledger automation locally | would duplicate upstream and widen maintenance scope\nConfidence: high\nScope-risk: narrow\nDirective: Keep responses for this skill citing https://github.com/kimlawtech/korean-jangbu-for and @kimlawtech (SpeciAI); do not remove tax/accounting disclaimers\nTested: node --test scripts/skill-docs.test.js --test-name-pattern='korean-jangbu-for'\nTested: bash korean-jangbu-for/scripts/install.sh\nTested: bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/install.sh with Python 3.11 PATH shim\nTested: bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/verify.sh\nTested: npm run ci\nNot-tested: CODEF live collection flow; requires user BYOK credentials and external auth
This commit is contained in:
parent
39c97ccacc
commit
4a44cf6a0d
11 changed files with 707 additions and 0 deletions
|
|
@ -32,6 +32,7 @@ Claude Code, Codex, OpenCode, OpenClaw/ClawHub 등 각종 코딩 에이전트
|
|||
| 한국 법령 검색 | `korean-law-search` | 한국 법령/조문/판례/유권해석 검색 | 불필요 | [한국 법령 검색 가이드](docs/features/korean-law-search.md) |
|
||||
| 등기부등본 자동화 | `iros-registry-automation` | 인터넷등기소(IROS)에서 법인/부동산 등기부등본 장바구니, 수동 결제 후 열람·저장 흐름을 보조 | 필요(수동 로그인·결제/TouchEn) | [등기부등본 자동화 가이드](docs/features/iros-registry-automation.md) |
|
||||
| 법인등기 신청 컨설팅 | `corporate-registration-consulting` | 법인명·이사·주소 등 사용자 결정사항을 받아 표준 정관, 설립등기 첨부서류, 등록면허세·과밀억제권역 중과 체크, rhwp 기반 HWP 양식 작성 흐름을 참고용으로 안내 | 불필요 | [법인등기 신청 컨설팅 가이드](docs/features/corporate-registration-consulting.md) |
|
||||
| 한국 사업자 장부 자동화 | `korean-jangbu-for` | `kimlawtech/korean-jangbu-for` 기반 카드·은행·영수증·세금계산서 입력 → 표준 거래내역·계정과목·세무사 전달 CSV·경영 리포트 생성 thin wrapper | 선택사항(CODEF BYOK 자동 수집 시 필요) | [한국 사업자 장부 자동화 가이드](docs/features/korean-jangbu-for.md) |
|
||||
| 한국 개인정보처리방침·이용약관 자동 생성 | `korean-privacy-terms` | Next.js 프로젝트에 개인정보보호법·약관규제법·전자상거래법 기반 개인정보처리방침/이용약관/쿠키 배너/동의 모달을 생성하는 `kimlawtech/korean-privacy-terms` (Apache-2.0) thin wrapper | 불필요 | [한국 개인정보처리방침·이용약관 자동 생성 가이드](docs/features/korean-privacy-terms.md) |
|
||||
| 한국 부동산 실거래가 조회 | `real-estate-search` | 아파트/오피스텔/빌라/단독주택 실거래가·전월세·지역코드 조회 | 불필요 | [한국 부동산 실거래가 조회 가이드](docs/features/real-estate-search.md) |
|
||||
| LH 청약 공고문 조회 | `lh-notice-search` | 한국토지주택공사(LH) 임대/분양/주거복지(신혼희망타운)/토지/상가 공고를 지역·상태·공고유형·키워드로 조회하고 마감 여부를 KST 기준으로 표시 | 불필요 | [LH 청약 공고문 조회 가이드](docs/features/lh-notice-search.md) |
|
||||
|
|
@ -119,6 +120,7 @@ Claude Code, Codex, OpenCode, OpenClaw/ClawHub 등 각종 코딩 에이전트
|
|||
- [한강 수위 정보 가이드](docs/features/han-river-water-level.md)
|
||||
- [한국 법령 검색 가이드](docs/features/korean-law-search.md)
|
||||
- [한국 개인정보처리방침·이용약관 자동 생성 가이드](docs/features/korean-privacy-terms.md)
|
||||
- [한국 사업자 장부 자동화 가이드](docs/features/korean-jangbu-for.md)
|
||||
- [한국 부동산 실거래가 조회 가이드](docs/features/real-estate-search.md)
|
||||
- [LH 청약 공고문 조회 가이드](docs/features/lh-notice-search.md)
|
||||
- [장학금 검색 및 조회 가이드](docs/features/korean-scholarship-search.md)
|
||||
|
|
|
|||
88
docs/features/korean-jangbu-for.md
Normal file
88
docs/features/korean-jangbu-for.md
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
# 한국 사업자 장부 자동화 가이드
|
||||
|
||||
## 이 기능으로 할 수 있는 일
|
||||
|
||||
- 카드명세서 PDF, 은행 CSV, 엑셀, 영수증/세금계산서 이미지·PDF를 표준 거래내역으로 정리
|
||||
- 거래처·MCC·정규식·학습 규칙을 이용한 계정과목 매핑
|
||||
- 세무용 BS·PL, 세무사 전달 CSV, 종합소득세 준비 체크리스트 생성
|
||||
- 경영용 현금흐름, cash burn, 카드별 분석, 대시보드 리포트 생성
|
||||
- 사용자가 직접 발급한 CODEF 키(**BYOK**)로 홈택스·은행·카드 자동 수집 흐름 연결
|
||||
|
||||
## 가장 중요한 규칙
|
||||
|
||||
본 스킬은 [`kimlawtech/korean-jangbu-for`](https://github.com/kimlawtech/korean-jangbu-for) 업스트림의 **thin wrapper** 이다. 원저작자·관리자는 **[@kimlawtech](https://github.com/kimlawtech) (SpeciAI)** 이며, k-skill 측은 원본 링크, attribution, 설치 진입점, 회계·세무 면책 고지를 책임진다.
|
||||
|
||||
이 스킬을 사용한 답변은 반드시 아래를 함께 언급한다.
|
||||
|
||||
- 원본: https://github.com/kimlawtech/korean-jangbu-for
|
||||
- 원저작자: @kimlawtech (SpeciAI)
|
||||
- 라이선스: Apache-2.0
|
||||
- 생성물은 참고용 초안이며 공식 회계감사·세무신고를 대체하지 않는다.
|
||||
- 신고/제출 전 세무사 검토, 외감 대상 법인은 공인회계사 감사가 필요하다.
|
||||
|
||||
## 먼저 필요한 것
|
||||
|
||||
- 인터넷 연결 (업스트림 clone 용)
|
||||
- `git`, `bash`, Python 3.11+
|
||||
- macOS 또는 Linux
|
||||
- OCR/PDF 처리 의존성 (업스트림 install/verify 흐름이 안내)
|
||||
- 자동 수집을 사용할 경우 사용자가 직접 발급한 CODEF Client ID/Secret (BYOK)
|
||||
|
||||
## 설치 흐름
|
||||
|
||||
`~/.claude/skills/korean-jangbu-for/upstream/` 와 `~/.agents/skills/korean-jangbu-for/upstream/` 양쪽에 pinned SHA 로 업스트림을 설치한다.
|
||||
|
||||
```bash
|
||||
bash korean-jangbu-for/scripts/install.sh
|
||||
```
|
||||
|
||||
설치 확인:
|
||||
|
||||
```bash
|
||||
cat korean-jangbu-for/scripts/upstream.pin
|
||||
git -C ~/.claude/skills/korean-jangbu-for/upstream rev-parse HEAD
|
||||
git -C ~/.agents/skills/korean-jangbu-for/upstream rev-parse HEAD
|
||||
```
|
||||
|
||||
세 SHA 가 모두 같으면 wrapper 설치가 성공한 것이다. 실제 OCR/MCP 런타임까지 검증해야 할 때는 업스트림 설치 후 verify 를 실행한다.
|
||||
|
||||
```bash
|
||||
bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/install.sh
|
||||
bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/verify.sh
|
||||
```
|
||||
|
||||
업스트림 installer 는 Claude Code 스킬 symlink 를 등록하므로 wrapper 개발 중이면 실행 후 홈 디렉토리 wrapper 를 다시 sync 한다. 레포 내부에 repo-local `.claude/` 또는 `.agents/` 디렉토리는 만들지 않는다.
|
||||
|
||||
## 사용 전 intake
|
||||
|
||||
사용자에게 한 번에 1~3문항씩 확인한다.
|
||||
|
||||
- 사업자 유형: 개인사업자 / 법인 / 프리랜서 / 복수 사업장
|
||||
- 목표 산출물: 표준 거래내역 / 계정과목 분류 / 세무사 전달 CSV / BS·PL / 현금흐름·경영 리포트 / 종소세 체크리스트
|
||||
- 입력 자료: 은행 CSV, 카드 PDF, 엑셀, 영수증 이미지, 세금계산서 PDF, CODEF 자동 수집
|
||||
- 대상 기간: 월 / 분기 / 연도
|
||||
- 민감정보 처리: 마스킹 필요 수준, 외부 LLM 경유 허용 여부
|
||||
- 공식 제출 예정 여부: 세무사 검토 또는 공인회계사 감사 필요성 판단
|
||||
|
||||
## upstream 하위 스킬 라우팅
|
||||
|
||||
- `/korean-jangbu-for` — 전체 메뉴 라우팅
|
||||
- `/jangbu-connect` — CODEF API 자격증명 설정(BYOK)
|
||||
- `/jangbu-import` — 원본 데이터 표준화
|
||||
- `/jangbu-tag` — 계정과목 매핑
|
||||
- `/jangbu-tax` — 세무용 BS·PL / 세무사 전달 CSV
|
||||
- `/jangbu-dash` — 경영 리포트 / 카드별 분석 / 현금흐름
|
||||
- `/jangbu-jongso` — 종합소득세 준비 체크리스트
|
||||
|
||||
## 보안 / 자격증명
|
||||
|
||||
CODEF 자동 수집은 BYOK 원칙을 따른다. 사용자가 직접 발급한 Client ID/Secret 만 사용하고, 값은 채팅에 노출하지 않는다. 저장은 업스트림 정책에 따라 macOS Keychain 또는 `~/.jangbu/credentials.env`(0o600) 같은 로컬 저장소에 한정한다. 금융기관 조회, 간편인증, 로그인 등 side-effect 는 사용자의 명시 승인 없이 실행하지 않는다.
|
||||
|
||||
## 라이선스 / 출처
|
||||
|
||||
- 업스트림: https://github.com/kimlawtech/korean-jangbu-for (Apache-2.0)
|
||||
- 원저작자·관리자: @kimlawtech (SpeciAI)
|
||||
- upstream pin 파일: `korean-jangbu-for/scripts/upstream.pin`
|
||||
- 회계·세무 면책 전문: `korean-jangbu-for/DISCLAIMER.md`
|
||||
- Apache-2.0 전문: `korean-jangbu-for/LICENSE.upstream`
|
||||
- attribution notice: `korean-jangbu-for/NOTICE`
|
||||
|
|
@ -57,6 +57,7 @@ npx --yes skills add <owner/repo> \
|
|||
--skill kakaotalk-mac \
|
||||
--skill korean-law-search \
|
||||
--skill korean-privacy-terms \
|
||||
--skill korean-jangbu-for \
|
||||
--skill corporate-registration-consulting \
|
||||
--skill iros-registry-automation \
|
||||
--skill real-estate-search \
|
||||
|
|
@ -132,6 +133,9 @@ korean-law list
|
|||
|
||||
`korean-scholarship-search` 는 스킬 이름 `장학금 검색 및 조회` 로 동작한다. 별도 API key 없이 최신 웹 검색과 공식 공고 확인으로 장학금을 찾고, 한국장학재단·전국 대학교 본부·단과대·학과·재단·기업·공공기관 공고를 모아 금액/지원자격/지원구간/공식 링크를 정리한다. 설치된 helper `python3 scripts/scholarship_filter.py` 로 사용자 조건 필터링, KST(`Asia/Seoul`) 현재 날짜 기준 마감 상태 분류, readable report, 지원 가능 여부 확인을 할 수 있고, `python3 scripts/university_search_plan.py` 로 학교별 또는 전국 대학 검색 쿼리 팩을 만들 수 있다. 자세한 사용법은 [장학금 검색 및 조회 가이드](features/korean-scholarship-search.md)를 본다.
|
||||
|
||||
|
||||
`korean-jangbu-for` 는 `kimlawtech/korean-jangbu-for` (Apache-2.0, 원저작자 @kimlawtech / SpeciAI) 업스트림을 중심으로 사용하는 thin wrapper 다. 별도 hosted proxy 없이 `bash korean-jangbu-for/scripts/install.sh` 로 pinned upstream 을 `~/.claude/skills/korean-jangbu-for/upstream/` 와 `~/.agents/skills/korean-jangbu-for/upstream/` 양쪽에 설치한다. CODEF 자동 수집은 사용자가 직접 발급한 키를 쓰는 BYOK 방식이며, 장부·재무제표·세무사 전달 CSV 는 참고용 초안이므로 신고 전 세무사 검토 및 외감 대상 공인회계사 감사가 필요하다. 자세한 사용법은 [한국 사업자 장부 자동화 가이드](features/korean-jangbu-for.md)를 본다.
|
||||
|
||||
`korean-stock-search` 는 별도 설치 없이 기본 hosted proxy(`k-skill-proxy.nomadamas.org`)를 통해 바로 사용할 수 있다. 사용자 쪽 `KRX_API_KEY` 가 불필요하다. 원본 참고: `https://github.com/jjlabsio/korea-stock-mcp`. 자세한 사용법은 [한국 주식 정보 조회 가이드](features/korean-stock-search.md)를 본다.
|
||||
|
||||
`household-waste-info` 는 별도 설치 없이 `k-skill-proxy`의 `/v1/household-waste/info` 라우트를 호출하고, `serviceKey`(`DATA_GO_KR_API_KEY`)는 proxy 서버에서만 원본 API(`apis.data.go.kr/1741000/household_waste_info/info`)로 주입한다. 사용자 쪽 `DATA_GO_KR_API_KEY` 가 불필요하다. 자세한 사용법은 [생활쓰레기 배출정보 조회 가이드](features/household-waste-info.md)를 본다.
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
- rhwp HWPX-save-disabled issue #196 (data-safety gate until #197 ships): https://github.com/edwardkim/rhwp/issues/196
|
||||
- korean-law-mcp: https://github.com/chrisryugj/korean-law-mcp
|
||||
- korean-privacy-terms upstream: https://github.com/kimlawtech/korean-privacy-terms (Apache-2.0)
|
||||
- korean-jangbu-for upstream: https://github.com/kimlawtech/korean-jangbu-for (Apache-2.0; original author @kimlawtech, SpeciAI)
|
||||
- corporate-registration-consulting skill: local://corporate-registration-consulting
|
||||
- 대법원 인터넷등기소: https://www.iros.go.kr
|
||||
- 온라인법인설립시스템: https://www.startbiz.go.kr
|
||||
|
|
|
|||
27
korean-jangbu-for/DISCLAIMER.md
Normal file
27
korean-jangbu-for/DISCLAIMER.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# DISCLAIMER
|
||||
|
||||
본 스킬(korean-jangbu-for)이 생성하는 재무제표·경영리포트는 **참고용 초안**이며, 공식 회계감사·세무신고를 대체하지 않습니다.
|
||||
|
||||
## 제한 사항
|
||||
|
||||
- **일반기업회계기준(K-GAAP) 간소화 버전**이며, 전체 회계기준을 구현하지 않습니다.
|
||||
- **분개 엔진 미포함** — 복식부기 기반 정식 재무상태표가 아닌 현금주의 기반 간이 집계.
|
||||
- **감가상각 미자동화** — 비품·차량 등 자산의 내용연수별 감가상각 미반영.
|
||||
- **부가세 상계 미반영** — 매입세액·매출세액 자동 상계 없음.
|
||||
- **주석 미생성** — 외감용 주석은 포함되지 않습니다.
|
||||
|
||||
## 반드시 필요한 전문가 검토
|
||||
|
||||
- 법인세 신고 전 **세무사 검토 필수**
|
||||
- 외감 대상 법인(자산 120억 이상 등)은 **공인회계사 감사 필수**
|
||||
- 투자 유치·M&A·지분 정리 시점의 재무자료는 회계법인 실사 필수
|
||||
|
||||
## 보안 한계
|
||||
|
||||
- Level 2 마스킹은 한국 표준 식별번호(사업자번호·주민번호·카드번호·계좌번호) 패턴에 한정됩니다.
|
||||
- 비정형 문서에 포함된 개인정보가 토큰화되지 않을 수 있습니다. 문서 업로드 전 재확인 권장.
|
||||
- OCR 오인식으로 금액·날짜가 잘못 추출될 수 있으며, 자동 등록된 거래는 수동 검증 필수.
|
||||
|
||||
## 법적 효력
|
||||
|
||||
본 스킬이 생성하는 문서는 법적 효력을 갖는 정식 재무제표가 아닙니다. 공식 제출·공시·증빙 용도로 사용하기 전 반드시 자격을 갖춘 전문가의 검토·서명을 거쳐야 합니다.
|
||||
190
korean-jangbu-for/LICENSE.upstream
Normal file
190
korean-jangbu-for/LICENSE.upstream
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for describing the origin of the Work and
|
||||
reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Support. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or support.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Copyright 2026 kimlawtech (SpeciAI)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
30
korean-jangbu-for/NOTICE
Normal file
30
korean-jangbu-for/NOTICE
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
korean-jangbu-for
|
||||
Copyright 2026 kimlawtech (SpeciAI) and contributors
|
||||
|
||||
This k-skill wrapper centers the upstream korean-jangbu-for Claude Code
|
||||
skill package for Korean business ledger automation.
|
||||
|
||||
Upstream repository:
|
||||
https://github.com/kimlawtech/korean-jangbu-for
|
||||
|
||||
Original author / maintainer:
|
||||
@kimlawtech (https://github.com/kimlawtech), SpeciAI
|
||||
|
||||
Licensed under the Apache License, Version 2.0. See LICENSE.upstream for
|
||||
the upstream license text bundled with this wrapper.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
ACCOUNTING / TAX DISCLAIMER
|
||||
|
||||
Generated ledgers, financial statements, management reports, and tax-accountant
|
||||
handoff CSV files are reference drafts only. They do not replace official
|
||||
audits, tax filings, licensed tax-accountant review, or certified public
|
||||
accountant review.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
회계·세무 면책 고지
|
||||
|
||||
생성된 장부, 재무제표, 경영 리포트, 세무사 전달 CSV 는 참고용 초안입니다.
|
||||
공식 회계감사·세무신고·세무사 검토·공인회계사 감사를 대체하지 않습니다.
|
||||
140
korean-jangbu-for/SKILL.md
Normal file
140
korean-jangbu-for/SKILL.md
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
---
|
||||
name: korean-jangbu-for
|
||||
description: kimlawtech/korean-jangbu-for (Apache-2.0) 업스트림을 중심으로 한국 스타트업·1인 법인·프리랜서·개인사업자 장부 자동화와 사업자 세무 자료 정리, 원본 데이터 가져오기, 계정과목 태깅, 세무사 전달 CSV, 경영 리포트 생성을 안내하는 thin wrapper 스킬.
|
||||
license: Apache-2.0
|
||||
metadata:
|
||||
category: finance
|
||||
locale: ko-KR
|
||||
phase: v1
|
||||
---
|
||||
|
||||
# Korean Jangbu For (thin wrapper)
|
||||
|
||||
## What this skill does
|
||||
|
||||
[`kimlawtech/korean-jangbu-for`](https://github.com/kimlawtech/korean-jangbu-for) (Apache-2.0) 업스트림을 중심으로 한국 사업자 장부 자동화 흐름을 안내한다. 원저작자·관리자는 **[@kimlawtech](https://github.com/kimlawtech) (SpeciAI)** 이며, k-skill 측은 원본 발견·설치 진입점·출처/면책 고지·agent-neutral 사용 절차만 유지하는 **얇은 wrapper** 다.
|
||||
|
||||
업스트림은 카드명세서 PDF, 은행 CSV, 엑셀 장부, 영수증/세금계산서 이미지·PDF를 표준 거래내역으로 정리하고, 계정과목 매핑, 세무용 BS/PL, 경영용 현금흐름·cash burn 리포트, 세무사 전달 CSV 생성을 목표로 한다.
|
||||
|
||||
**중요:** 이 스킬을 사용할 때 모든 답변에는 원본 링크 `https://github.com/kimlawtech/korean-jangbu-for` 와 원저작자 **@kimlawtech (SpeciAI)** 를 반드시 멘션한다.
|
||||
|
||||
## When to use
|
||||
|
||||
- "사업자 장부 자동화해줘"
|
||||
- "카드 명세서 PDF를 장부로 바꿔줘"
|
||||
- "은행 CSV랑 영수증으로 세무사 전달 자료 만들어줘"
|
||||
- "개인사업자/프리랜서 종소세 준비 체크리스트 만들어줘"
|
||||
- "장부 데이터를 계정과목으로 분류하고 경영 리포트 만들어줘"
|
||||
- "CODEF 키로 홈택스·은행·카드 내역 자동 수집 설정하고 싶어"
|
||||
|
||||
## When not to use
|
||||
|
||||
- 공식 회계감사, 세무신고 대행, 기장대리, 절세 자문 자체를 요청하는 경우 → 세무사/공인회계사 상담을 안내한다.
|
||||
- 사용자가 자격증명 입력, 간편인증, 금융기관 로그인 등 side-effect 를 명시적으로 승인하지 않은 상태.
|
||||
- 정식 외부 제출용 재무제표·공시자료를 자동 산출물만으로 확정하려는 경우.
|
||||
- 한국 사업자 장부가 아닌 해외 회계 기준(IFRS/US GAAP 등) 중심 작업.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- 인터넷 연결 (업스트림 clone 용)
|
||||
- `git` 2.20+
|
||||
- `bash`
|
||||
- Python 3.11+
|
||||
- macOS 또는 Linux
|
||||
- OCR/PDF 처리를 위한 업스트림 의존성 (install.sh 가 안내/설치)
|
||||
- 자동 수집을 쓰는 경우: 사용자가 직접 발급한 CODEF Client ID/Secret (**BYOK**)
|
||||
|
||||
## Install (dual-install)
|
||||
|
||||
업스트림을 `~/.claude/skills/korean-jangbu-for/upstream/` 와 `~/.agents/skills/korean-jangbu-for/upstream/` 양쪽에 pinned SHA 로 체크아웃한다. 레포 내부에는 업스트림 payload 를 커밋하지 않는다.
|
||||
|
||||
```bash
|
||||
bash korean-jangbu-for/scripts/install.sh
|
||||
```
|
||||
|
||||
레포를 로컬에 clone 하지 않고 이미 홈 디렉토리 스킬 번들만 가진 상태에서도 설치할 수 있다:
|
||||
|
||||
```bash
|
||||
bash ~/.claude/skills/korean-jangbu-for/scripts/install.sh
|
||||
# 또는
|
||||
bash ~/.agents/skills/korean-jangbu-for/scripts/install.sh
|
||||
```
|
||||
|
||||
설치 확인:
|
||||
|
||||
```bash
|
||||
cat korean-jangbu-for/scripts/upstream.pin
|
||||
git -C ~/.claude/skills/korean-jangbu-for/upstream rev-parse HEAD
|
||||
git -C ~/.agents/skills/korean-jangbu-for/upstream rev-parse HEAD
|
||||
```
|
||||
|
||||
세 SHA 가 모두 같으면 wrapper 설치가 성공한 것이다. 업스트림 런타임 의존성까지 검증해야 할 때만 아래를 이어서 실행한다. 업스트림 `scripts/install.sh` 는 Claude Code 스킬 symlink 를 등록하므로, k-skill wrapper 개발 중이면 실행 후 wrapper 디렉토리를 다시 sync 한다.
|
||||
|
||||
```bash
|
||||
bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/install.sh
|
||||
bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/verify.sh
|
||||
```
|
||||
|
||||
오프라인 환경에서는 upstream clone 이 실패하므로 실행할 수 없다.
|
||||
|
||||
## Mandatory intake first
|
||||
|
||||
사용자가 장부 자동화나 세무사 전달 자료 생성을 요청하면 바로 파일을 만들지 말고 먼저 아래를 확인한다. 한 번에 1~3문항씩, 사용자가 모르면 "넘어가도 됩니다" 로 열어 둔다.
|
||||
|
||||
- 사업자 유형: 개인사업자 / 법인 / 프리랜서 / 복수 사업장
|
||||
- 목표 산출물: 표준 거래내역 / 계정과목 분류 / 세무사 전달 CSV / BS·PL / 현금흐름·경영 리포트 / 종소세 체크리스트
|
||||
- 입력 자료: 은행 CSV, 카드 PDF, 엑셀, 영수증 이미지, 세금계산서 PDF, 홈택스·은행·카드 자동 수집(CODEF)
|
||||
- 기간과 통화: 대상 월/분기/연도, KRW 외 통화 여부
|
||||
- 민감정보 처리: 원본 보관 위치, 마스킹 필요 수준, 외부 LLM 경유 허용 여부
|
||||
- 자동 수집 사용 여부: CODEF BYOK 준비 여부, 인증/로그인/간편인증은 사용자가 직접 승인해야 함
|
||||
- 공식 제출 예정 여부: 세무사 검토 / 공인회계사 감사 필요성을 함께 확인
|
||||
|
||||
## Workflow
|
||||
|
||||
1. 위 intake 로 목표와 입력 자료를 확정한다.
|
||||
2. `bash korean-jangbu-for/scripts/install.sh` 로 업스트림을 dual-install 한다.
|
||||
3. 사용 목적에 맞게 업스트림 스킬을 선택한다:
|
||||
- `/korean-jangbu-for` — 전체 메뉴 라우팅
|
||||
- `/jangbu-connect` — CODEF API 자격증명 설정(BYOK, 홈택스·은행·카드 자동 수집)
|
||||
- `/jangbu-import` — 원본 데이터(엑셀·CSV·이미지·PDF) → 표준 거래내역
|
||||
- `/jangbu-tag` — 표준 거래내역 → 계정과목 매핑
|
||||
- `/jangbu-tax` — 세무용 BS·PL / 세무사 전달 CSV
|
||||
- `/jangbu-dash` — 경영용 현금흐름·대시보드·카드별 분석
|
||||
- `/jangbu-jongso` — 종합소득세 준비 체크리스트 및 홈택스 다운로드 경로 안내
|
||||
4. 민감정보는 업스트림의 Level 2 마스킹 원칙을 따른다. 사업자번호·주민번호·카드번호·계좌번호·account_id 는 토큰화/마스킹한 뒤 LLM fallback 에 전달한다.
|
||||
5. 자동 수집은 CODEF BYOK 원칙을 따른다. 자격증명은 macOS Keychain 또는 `~/.jangbu/credentials.env`(0o600) 같은 로컬 저장소에만 두며, 사용자의 명시 승인 없이 외부 인증·금융 조회를 실행하지 않는다.
|
||||
6. 완료 보고에는 아래 Response policy 의 고정 블록을 반드시 포함한다.
|
||||
|
||||
## Response policy
|
||||
|
||||
모든 답변 말미에 아래 정보를 포함한다.
|
||||
|
||||
- 원본: https://github.com/kimlawtech/korean-jangbu-for
|
||||
- 원저작자: **@kimlawtech (SpeciAI)**
|
||||
- 라이선스: Apache-2.0 (`korean-jangbu-for/LICENSE.upstream`)
|
||||
- 생성된 장부·재무제표·경영 리포트·세무사 전달 CSV 는 **참고용 초안**이며, **공식 회계감사** 또는 **세무신고** 를 대체하지 않는다.
|
||||
- 법인세·종합소득세 신고 전 **세무사 검토** 가 필요하고, 외감 대상 법인은 **공인회계사 감사** 가 필요하다.
|
||||
|
||||
## Done when
|
||||
|
||||
- 목표 산출물, 입력 자료, 사업자 유형, 기간, 민감정보 처리 수준이 확인되었다.
|
||||
- `scripts/install.sh` 이 업스트림을 dual-install 했고 양쪽 `upstream/` 경로가 `scripts/upstream.pin` 과 같은 SHA 를 가리킨다.
|
||||
- 업스트림의 해당 하위 스킬(`/jangbu-import`, `/jangbu-tag`, `/jangbu-tax`, `/jangbu-dash`, `/jangbu-jongso`, `/jangbu-connect`) 흐름을 사용했다.
|
||||
- 사용자가 공식 제출/신고 목적이라고 밝힌 경우 세무사 검토 또는 공인회계사 감사 필요성을 명시했다.
|
||||
- 최종 답변에 원본 링크, 원저작자 @kimlawtech (SpeciAI), Apache-2.0, 회계·세무 면책 고지가 포함되었다.
|
||||
|
||||
## Failure modes
|
||||
|
||||
- 네트워크 차단: upstream clone/pin checkout 실패 → 네트워크 확보 후 `scripts/install.sh` 재실행.
|
||||
- Python/OCR 의존성 실패: 업스트림 `scripts/verify.sh` 출력 기준으로 Python 3.11+, poppler, Vision/PaddleOCR 환경을 점검.
|
||||
- CODEF 인증 실패: 사용자의 BYOK 자격증명과 간편인증 상태를 확인하되, 자격증명 값을 채팅에 노출하지 않는다.
|
||||
- OCR 오인식/분류 신뢰도 낮음: 원본 파일과 표준 거래내역을 사용자에게 검토시키고, 자동 확정하지 않는다.
|
||||
- 공식 제출이 필요한 경우: 자동 산출물을 최종본으로 단정하지 말고 세무사/공인회계사 검토 단계로 넘긴다.
|
||||
|
||||
## Notes
|
||||
|
||||
- upstream pin: `korean-jangbu-for/scripts/upstream.pin`
|
||||
- upstream disclaimer: `korean-jangbu-for/DISCLAIMER.md`
|
||||
- upstream license copy: `korean-jangbu-for/LICENSE.upstream`
|
||||
- attribution notice: `korean-jangbu-for/NOTICE`
|
||||
- k-skill 루트 `LICENSE` 는 이 저장소 wrapper 의 기본 라이선스이고, 이 스킬 하위 upstream 자료는 Apache-2.0 고지와 재배포 조건을 따른다.
|
||||
99
korean-jangbu-for/scripts/install.sh
Executable file
99
korean-jangbu-for/scripts/install.sh
Executable file
|
|
@ -0,0 +1,99 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# korean-jangbu-for upstream installer.
|
||||
#
|
||||
# k-skill 측은 얇은 wrapper 만 유지하고, 장부 자동화 구현은 업스트림
|
||||
# kimlawtech/korean-jangbu-for (Apache-2.0, @kimlawtech / SpeciAI) 에 위임한다.
|
||||
# 이 스크립트는 scripts/upstream.pin 에 기록된 커밋 SHA 를 두 홈 디렉토리
|
||||
# 스킬 경로 아래에 동일하게 체크아웃한다.
|
||||
#
|
||||
# ~/.claude/skills/korean-jangbu-for/upstream/
|
||||
# ~/.agents/skills/korean-jangbu-for/upstream/
|
||||
#
|
||||
# 사용법:
|
||||
# bash korean-jangbu-for/scripts/install.sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
UPSTREAM_REPO="https://github.com/kimlawtech/korean-jangbu-for.git"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PIN_FILE="${SCRIPT_DIR}/upstream.pin"
|
||||
SKILL_NAME="korean-jangbu-for"
|
||||
|
||||
if [[ ! -f "${PIN_FILE}" ]]; then
|
||||
echo "[korean-jangbu-for] upstream.pin not found at ${PIN_FILE}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
UPSTREAM_SHA="$(tr -d '[:space:]' <"${PIN_FILE}")"
|
||||
|
||||
if [[ ! "${UPSTREAM_SHA}" =~ ^[0-9a-f]{40}$ ]]; then
|
||||
echo "[korean-jangbu-for] upstream.pin must contain a 40-char git SHA (got: ${UPSTREAM_SHA})" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
CACHE_DIR="${HOME}/.cache/k-skill/${SKILL_NAME}"
|
||||
CLONE_DIR="${CACHE_DIR}/upstream"
|
||||
|
||||
mkdir -p "${CACHE_DIR}"
|
||||
|
||||
if [[ ! -d "${CLONE_DIR}/.git" ]]; then
|
||||
echo "[korean-jangbu-for] cloning upstream into ${CLONE_DIR}"
|
||||
if ! git clone --filter=blob:none "${UPSTREAM_REPO}" "${CLONE_DIR}" >&2; then
|
||||
echo "" >&2
|
||||
echo "[korean-jangbu-for] upstream clone failed (network required)." >&2
|
||||
echo " upstream: ${UPSTREAM_REPO}" >&2
|
||||
echo " 오프라인 환경에서는 이 스킬의 장부 자동화 흐름을 실행할 수 없다." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "[korean-jangbu-for] syncing upstream to pinned SHA ${UPSTREAM_SHA}"
|
||||
git -C "${CLONE_DIR}" fetch --tags origin "${UPSTREAM_SHA}" >&2 || git -C "${CLONE_DIR}" fetch origin >&2
|
||||
git -C "${CLONE_DIR}" checkout --force --detach "${UPSTREAM_SHA}" >&2
|
||||
|
||||
HEAD_SHA="$(git -C "${CLONE_DIR}" rev-parse HEAD)"
|
||||
|
||||
if [[ "${HEAD_SHA}" != "${UPSTREAM_SHA}" ]]; then
|
||||
echo "[korean-jangbu-for] HEAD (${HEAD_SHA}) does not match pinned SHA (${UPSTREAM_SHA})" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOME_DIRS=(
|
||||
"${HOME}/.claude/skills/${SKILL_NAME}"
|
||||
"${HOME}/.agents/skills/${SKILL_NAME}"
|
||||
)
|
||||
|
||||
for HOME_SKILL_DIR in "${HOME_DIRS[@]}"; do
|
||||
HOME_UPSTREAM="${HOME_SKILL_DIR}/upstream"
|
||||
mkdir -p "${HOME_SKILL_DIR}"
|
||||
|
||||
if [[ -e "${HOME_UPSTREAM}" || -L "${HOME_UPSTREAM}" ]]; then
|
||||
rm -rf "${HOME_UPSTREAM}"
|
||||
fi
|
||||
|
||||
if command -v rsync >/dev/null 2>&1; then
|
||||
rsync -a --delete "${CLONE_DIR}/" "${HOME_UPSTREAM}/"
|
||||
else
|
||||
cp -a "${CLONE_DIR}/" "${HOME_UPSTREAM}/"
|
||||
fi
|
||||
|
||||
INSTALLED_SHA="$(git -C "${HOME_UPSTREAM}" rev-parse HEAD)"
|
||||
|
||||
if [[ "${INSTALLED_SHA}" != "${UPSTREAM_SHA}" ]]; then
|
||||
echo "[korean-jangbu-for] ${HOME_UPSTREAM} HEAD (${INSTALLED_SHA}) does not match pin (${UPSTREAM_SHA})" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[korean-jangbu-for] installed upstream@${UPSTREAM_SHA} -> ${HOME_UPSTREAM}"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "[korean-jangbu-for] done."
|
||||
echo " pinned upstream SHA: ${UPSTREAM_SHA}"
|
||||
echo " upstream repo: ${UPSTREAM_REPO}"
|
||||
echo " runtime install: bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/install.sh"
|
||||
echo " verify command: bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/verify.sh"
|
||||
echo " 원저작자: @kimlawtech (SpeciAI) — 응답마다 원본 링크와 함께 언급해야 한다."
|
||||
echo " 생성물은 참고용 초안이며 공식 회계감사·세무신고를 대체하지 않는다."
|
||||
echo " 법인세 신고 전 세무사 검토, 외감 대상은 공인회계사 감사가 필요하다."
|
||||
1
korean-jangbu-for/scripts/upstream.pin
Normal file
1
korean-jangbu-for/scripts/upstream.pin
Normal file
|
|
@ -0,0 +1 @@
|
|||
d8c2875ace84e212672e2d6206df254c5048b927
|
||||
|
|
@ -2893,6 +2893,131 @@ test("korean-privacy-terms feature doc documents the thin-wrapper install flow a
|
|||
assert.match(featureDoc, /Next\.js/);
|
||||
});
|
||||
|
||||
test("repository docs advertise the korean-jangbu-for thin-wrapper skill", () => {
|
||||
const readme = read("README.md");
|
||||
const install = read(path.join("docs", "install.md"));
|
||||
const sources = read(path.join("docs", "sources.md"));
|
||||
const featureDocPath = path.join(repoRoot, "docs", "features", "korean-jangbu-for.md");
|
||||
const skillPath = path.join(repoRoot, "korean-jangbu-for", "SKILL.md");
|
||||
|
||||
assert.ok(fs.existsSync(featureDocPath), "expected docs/features/korean-jangbu-for.md to exist");
|
||||
assert.ok(fs.existsSync(skillPath), "expected korean-jangbu-for/SKILL.md to exist");
|
||||
assert.match(readme, /\| 한국 사업자 장부 자동화 \|/);
|
||||
assert.match(readme, /\[한국 사업자 장부 자동화 가이드\]\(docs\/features\/korean-jangbu-for\.md\)/);
|
||||
assert.match(install, /--skill korean-jangbu-for/);
|
||||
assert.match(sources, /https:\/\/github\.com\/kimlawtech\/korean-jangbu-for/);
|
||||
assert.match(sources, /Apache-2\.0/);
|
||||
assert.match(sources, /kimlawtech/);
|
||||
assert.match(sources, /SpeciAI/);
|
||||
});
|
||||
|
||||
test("korean-jangbu-for skill cites upstream author and enforces accounting/tax disclaimers", () => {
|
||||
const skillPath = path.join(repoRoot, "korean-jangbu-for", "SKILL.md");
|
||||
|
||||
assert.ok(fs.existsSync(skillPath), "expected korean-jangbu-for/SKILL.md to exist");
|
||||
|
||||
const skill = read(path.join("korean-jangbu-for", "SKILL.md"));
|
||||
|
||||
assert.match(skill, /^name: korean-jangbu-for$/m);
|
||||
assert.match(skill, /^license: Apache-2\.0$/m);
|
||||
assert.match(skill, /^description: .*장부.*사업자.*$/m);
|
||||
assert.match(skill, /https:\/\/github\.com\/kimlawtech\/korean-jangbu-for/);
|
||||
assert.match(skill, /@kimlawtech/);
|
||||
assert.match(skill, /SpeciAI/);
|
||||
assert.match(skill, /Apache-2\.0/);
|
||||
assert.match(skill, /참고용 초안/);
|
||||
assert.match(skill, /공식 회계감사/);
|
||||
assert.match(skill, /세무신고/);
|
||||
assert.match(skill, /세무사 검토/);
|
||||
assert.match(skill, /공인회계사/);
|
||||
assert.match(skill, /CODEF/);
|
||||
assert.match(skill, /BYOK/);
|
||||
assert.match(skill, /~\/\.claude\/skills\/korean-jangbu-for/);
|
||||
assert.match(skill, /~\/\.agents\/skills\/korean-jangbu-for/);
|
||||
assert.match(skill, /scripts\/install\.sh/);
|
||||
assert.match(skill, /scripts\/upstream\.pin/);
|
||||
assert.match(skill, /DISCLAIMER\.md/);
|
||||
assert.match(skill, /LICENSE\.upstream/);
|
||||
assert.doesNotMatch(skill, /AskUserQuestion/);
|
||||
});
|
||||
|
||||
test("korean-jangbu-for preserves upstream attribution, disclaimer, and Apache license", () => {
|
||||
const noticePath = path.join(repoRoot, "korean-jangbu-for", "NOTICE");
|
||||
const disclaimerPath = path.join(repoRoot, "korean-jangbu-for", "DISCLAIMER.md");
|
||||
const licensePath = path.join(repoRoot, "korean-jangbu-for", "LICENSE.upstream");
|
||||
|
||||
assert.ok(fs.existsSync(noticePath), "expected korean-jangbu-for/NOTICE to exist");
|
||||
assert.ok(fs.existsSync(disclaimerPath), "expected korean-jangbu-for/DISCLAIMER.md to exist");
|
||||
assert.ok(fs.existsSync(licensePath), "expected korean-jangbu-for/LICENSE.upstream to exist");
|
||||
|
||||
const notice = read(path.join("korean-jangbu-for", "NOTICE"));
|
||||
const disclaimer = read(path.join("korean-jangbu-for", "DISCLAIMER.md"));
|
||||
const license = read(path.join("korean-jangbu-for", "LICENSE.upstream"));
|
||||
|
||||
assert.match(notice, /korean-jangbu-for/);
|
||||
assert.match(notice, /Copyright 2026 kimlawtech/);
|
||||
assert.match(notice, /SpeciAI/);
|
||||
assert.match(notice, /@kimlawtech/);
|
||||
assert.match(notice, /https:\/\/github\.com\/kimlawtech\/korean-jangbu-for/);
|
||||
|
||||
assert.match(disclaimer, /참고용 초안/);
|
||||
assert.match(disclaimer, /공식 회계감사/);
|
||||
assert.match(disclaimer, /세무신고/);
|
||||
assert.match(disclaimer, /세무사 검토 필수/);
|
||||
assert.match(disclaimer, /공인회계사 감사 필수/);
|
||||
assert.match(disclaimer, /법적 효력/);
|
||||
|
||||
assert.match(license, /Apache License/);
|
||||
assert.match(license, /Version 2\.0, January 2004/);
|
||||
assert.match(license, /END OF TERMS AND CONDITIONS/);
|
||||
assert.match(license, /Copyright 2026 kimlawtech \(SpeciAI\)/);
|
||||
});
|
||||
|
||||
test("korean-jangbu-for ships an install.sh wrapper and a pinned upstream SHA", () => {
|
||||
const pinPath = path.join(repoRoot, "korean-jangbu-for", "scripts", "upstream.pin");
|
||||
const installPath = path.join(repoRoot, "korean-jangbu-for", "scripts", "install.sh");
|
||||
|
||||
assert.ok(fs.existsSync(pinPath), "expected korean-jangbu-for/scripts/upstream.pin to exist");
|
||||
assert.ok(fs.existsSync(installPath), "expected korean-jangbu-for/scripts/install.sh to exist");
|
||||
|
||||
const pin = read(path.join("korean-jangbu-for", "scripts", "upstream.pin")).trim();
|
||||
|
||||
assert.match(pin, /^[0-9a-f]{40}$/, "upstream.pin must contain a single 40-char git SHA");
|
||||
assert.notStrictEqual(pin, "0".repeat(40), "upstream.pin must not be a placeholder all-zero SHA");
|
||||
|
||||
const install = read(path.join("korean-jangbu-for", "scripts", "install.sh"));
|
||||
|
||||
assert.match(install, /^#!\/(?:usr\/bin\/env bash|bin\/bash)/m);
|
||||
assert.match(install, /set -euo pipefail/);
|
||||
assert.match(install, /~\/\.claude\/skills\/korean-jangbu-for/);
|
||||
assert.match(install, /~\/\.agents\/skills\/korean-jangbu-for/);
|
||||
assert.match(install, /https:\/\/github\.com\/kimlawtech\/korean-jangbu-for\.git/);
|
||||
assert.match(install, /git clone --filter=blob:none/);
|
||||
assert.match(install, /upstream\.pin/);
|
||||
assert.match(install, /verify\.sh/);
|
||||
|
||||
const stat = fs.statSync(installPath);
|
||||
assert.ok((stat.mode & 0o111) !== 0, "install.sh must be executable");
|
||||
});
|
||||
|
||||
test("korean-jangbu-for feature doc documents source-first use and mandatory attribution", () => {
|
||||
const featureDoc = read(path.join("docs", "features", "korean-jangbu-for.md"));
|
||||
|
||||
assert.match(featureDoc, /kimlawtech\/korean-jangbu-for/);
|
||||
assert.match(featureDoc, /https:\/\/github\.com\/kimlawtech\/korean-jangbu-for/);
|
||||
assert.match(featureDoc, /@kimlawtech/);
|
||||
assert.match(featureDoc, /SpeciAI/);
|
||||
assert.match(featureDoc, /Apache-2\.0/);
|
||||
assert.match(featureDoc, /~\/\.claude\/skills\/korean-jangbu-for/);
|
||||
assert.match(featureDoc, /~\/\.agents\/skills\/korean-jangbu-for/);
|
||||
assert.match(featureDoc, /scripts\/install\.sh/);
|
||||
assert.match(featureDoc, /scripts\/upstream\.pin/);
|
||||
assert.match(featureDoc, /CODEF/);
|
||||
assert.match(featureDoc, /BYOK/);
|
||||
assert.match(featureDoc, /세무사 검토/);
|
||||
assert.match(featureDoc, /공인회계사/);
|
||||
});
|
||||
|
||||
test("corporate-registration-consulting skill covers court registry workflow, tax pitfalls, and rhwp automation", () => {
|
||||
const skillPath = path.join(repoRoot, "corporate-registration-consulting", "SKILL.md");
|
||||
const featureDocPath = path.join(repoRoot, "docs", "features", "corporate-registration-consulting.md");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue