Generic CLI for eac.zigbang.in (E-Accounting / UniDocu).
Drives the UniDocu named-service API directly over HTTP. No headless browser at runtime โ auth is just the JSESSIONID cookie pulled out of your local Chrome profile.
The CLI intentionally stays domain-agnostic: it only knows about EAC data and verbs. Company-/personal-specific policy (e.g. "์๊ธฐ๊ด๋ฆฌ๋น ํ๊ธ์ ์์์ฆ ร 70%") belongs in your own shell scripts or runbooks.
npm install -g @zigbang-smarthome/eac-cli
brew install zigbang-smarthome/tap/eac-cli
curl -fsSL https://github.com/zigbang-smarthome/eac-cli/releases/latest/download/install.sh | shBefore first use: open Chrome and log in to https://eac.zigbang.in at least once so the session cookie lands in your Chrome cookie store. The CLI reads that cookie each run.
-
EAC uses Google SSO + MS Azure AD SAML โ login itself can't be automated. The CLI piggybacks on your normal Chrome session.
-
Each run,
eaccopies Chrome's cookie DB to tmpdir, decrypts theJSESSIONIDfor*.zigbang.in(AES-128-CBC, key from"Chrome Safe Storage"Keychain), and pings EAC to confirm the session is alive. -
If the session is missing or expired, the CLI opens Chrome at
https://eac.zigbang.in/unidocu/view.doand prompts:- Finish the Google SSO login in Chrome.
- Quit Chrome (Cmd+Q) so the new
JSESSIONIDis flushed to disk. Chrome's cookie monster keeps cookies in memory and writes to the SQLite store on a delayed batch schedule โ without an explicit quit the CLI may keep reading a stale value. - Return to the terminal and hit Enter โ the CLI re-reads the fresh cookie and continues.
- Reopen Chrome normally afterwards.
Tip: turn on Chrome โ Settings โ On startup โ "Continue where you left off" so the session cookie survives the Cmd+Q cycle. EAC re-login becomes infrequent (only when the SAP-side session truly expires).
-
macOS may prompt for Keychain access the first time (click Always Allow).
-
Override: set
EAC_JSESSIONID=<value>to bypass the keychain entirely and use a cookie sourced elsewhere (e.g. extracted from Playwright/CDP-controlled Chrome). Useful when EAC is open in a non-default Chrome profile or in CI scripts. -
Non-TTY environments (CI, piped scripts) error out instead of prompting โ pass
EAC_JSESSIONIDexplicitly there.
Before the commands it helps to see the data model the CLI talks to. UniDocu has two related document spaces and two separate attachment layers.
| ๊ณต๊ฐ | ์๋ณ์ | UI ๋ฉ๋ด | Backend service prefix |
|---|---|---|---|
| ์ ํ (FI) | BELNR (SAP ๋ฌธ์๋ฒํธ) |
๋น์ฉ์ ์ฐ โบ ๊ฐ์ธ๋น์ฉ โบ EA์ ํ๊ฒฐ์ฌ (UD_0302_000) |
ZUNIEFI_* |
| ๊ฒฐ์ฌ๋ฌธ์ (WF) | GRONO (๊ทธ๋ฃน๋ฒํธ) + WF_KEY |
๊ฒฐ์ฌํจ (UFL_0401_020 ๋ฑ) |
ZUNIEWF_* |
ํ๋์ ์ ํ(BELNR)์ ๊ฒฐ์ฌ์์ฒญ์ ๊ฑธ๋ฉด ๊ฒฐ์ฌ๋ฌธ์(GRONO)๊ฐ ์์ฝ๋ผ ์ ํ์ ๋ถ๋๋ค. ๊ด๊ณ๋ 1:1.
๊ฐ์ ์์์ฆ PDF๋ฅผ ์ฌ๋ฆฌ๋๋ผ๋ ์ด๋ ๋ ์ด์ด์ ๋ถ์ด๋๋๊ฐ ๊ฒฐ์ฌ์ UX๋ฅผ ๊ฐ๋ฅธ๋ค.
- ์ ํ ๋ ์ด์ด (
voucher attach) โZUNIEFI_4006์ ์ฅ ์ ํจ๊ป ์ฐ๊ฒฐ๋จ. ์ธ๋ฌด/ํ๊ณํ์ด ์ ํ ์์ธ๋ทฐ์์ ํ์ธ. - ๊ฒฐ์ฌ๋ฌธ์ ๋ ์ด์ด (
approval attach) โApprovalStepbody์EVI_SEQํ๋๋ก ์ ๋ฌ๋จ. ์ด๊ฒ ์์ด์ผ ๊ฒฐ์ฌํจ ๋ฆฌ์คํธ์์๐์์ด์ฝ์ด ๋ฌ๋ค (WF_ATTACH_FLAG = X). ์์ผ๋ฉด ๊ฒฐ์ฌ์ ์ ์ฅ์์ "์ฒจ๋ถ ์๋ ๋ฌธ์"๋ก ๋ณด์.
voucher create ๋ 1๋ฒ ๋ ์ด์ด์, voucher request-approval ์ 2๋ฒ ๋ ์ด์ด์ ๊ฐ๊ฐ ์ฌ๋ฆฐ๋ค. ๋ ๋ช
๋ น ๋ชจ๋ --attach-dir๋ฅผ ๋ฐ์ ๊ฐ์ ์์์ฆ ํด๋๋ฅผ ๋ ๋ฒ ์ฌ๋ฆผ. (๊ฐ์ ํ์ผ์ ์ค๋ณต ์
๋ก๋๋ ์๋ฒ ์ ์ฅ์์ ๋ณ๊ฐ ๊ธฐ๋ก์ผ๋ก ๋จ๋๋ค.)
ZUNIEFI_4003โ ๊ธฐ๋ณธ๊ฐ ๊ณ์ฐ (ZFBDT ๋ฑ)ZUNIECM_5030โ ์ ํ ๋ ์ด์ด EVI_SEQ ์ฑ๋ฒfineuploader/request.doโ ์ ํ ๋ ์ด์ด์ ํ์ผ ์ ๋ก๋ZUNIEFI_4006โ ๋น์ฉํญ๋ชฉ ์ ์ฅ (EVI_SEQ ์ฐ๊ฒฐ)ZUNIEFI_5000โ SAP posting โ BELNR ๋ฐ๊ธZUNIEFI_4203โ GRONO ์์ฝ (์์ง ์์ ์๋)ZUNIECM_5030โ ๊ฒฐ์ฌ ๋ ์ด์ด EVI_SEQ ์ฑ๋ฒfineuploader/request.doโ ๊ฒฐ์ฌ ๋ ์ด์ด์ ํ์ผ ์ ๋ก๋ZUNIEWF_2200โ ๊ฐ์ธ๊ฒฐ์ฌ์ ๋ชฉ๋ก ์กฐํZUNIEWF_4101โ ๊ฒฐ์ฌ์ ๋ฆฌ์คํธ ์กฐํApprovalStep(targetNamedServiceIdZUNIEWF_4201) โ ์ต์ข ์์
15 = 11 = voucher create, 6voucher request-approval.
eac
โโโ voucher ์ ํ (FI, ZUNIEFI_*)
โ โโโ list ZUNIEFI_4200
โ โโโ show <BELNR|GRONO> ZUNIEFI_4207
โ โโโ create ์ ํ ์์ฑ (Steps 1-5 โ BELNR)
โ โโโ request-approval <BELNR> ๊ฒฐ์ฌ์์ฒญ (Steps 6-11 โ GRONO + ์์ )
โ โโโ cancel-group <GRONO> ๊ทธ๋ฃน๋ฒํธ์ทจ์ (ZUNIEFI_4202)
โ โโโ delete <BELNR> ์์์ ํ์ญ์ (ZUNIEFI_4103)
โ โโโ attach new|upload|list ์ ํ ๋ ์ด์ด EVI_SEQ primitive
โโโ corpcard ๋ฒ์ธ์นด๋(๊ณต์ฉ) โ ์นด๋์ฌ ๊ฑฐ๋ โ ์์์ ํ
โ โโโ list ZUNIEFI_1000 (๋ฏธ์ ์ฐ ๊ฑฐ๋)
โ โโโ create <CRD_SEQ> ZUNIEFI_4006 + ZUNIEFI_1009 โ BELNR
โโโ approval ๊ฒฐ์ฌ๋ฌธ์ (WF, ZUNIEWF_*)
โ โโโ list [--box] ZUNIEWF_4500 (๊ฒฐ์ฌํจ)
โ โโโ recall <GRONO> ํ์ (ApprovalStep + ZUNIEWF_4320)
โ โโโ attach new|upload|list ๊ฒฐ์ฌ ๋ ์ด์ด EVI_SEQ primitive
โ โโโ line
โ โโโ list ZUNIEWF_2200 (๊ฐ์ธ๊ฒฐ์ฌ์ ๋ชฉ๋ก)
โ โโโ show <SEQ> [--json] ZUNIEWF_2203 (๊ฒฐ์ฌ์ + ๊ฒฐ์ฌ์)
โ โโโ approvers <SEQ> --grono <G> ZUNIEWF_4101 (ํน์ GRONO์ฉ)
โ โโโ save <SEQ> <approvers.json> ZUNIEWF_2201 (๊ฒฐ์ฌ์ ํต์งธ ์ ์ฅ)
โ โโโ add <SEQ> <user> [--at lev] ์ฌ์ฉ์ ์ถ๊ฐ (read โ splice โ save)
โ โโโ remove <SEQ> <level|wf_id> ๊ฒฐ์ฌ์ ์ ๊ฑฐ (read โ splice โ save)
โ โโโ search-user <name> ZUNIEWF_1035 (์ด๋ฆ์ผ๋ก EAC ์ฌ์ฉ์ ๊ฒ์)
โโโ call <id> --prog [--data] raw named-service escape hatch
โโโ config show|init ~/.config/eac/config.json
voucher list โ ZUNIEFI_4200. ๊ธฐ๋ณธ์ ํ์ฌ ์, BSTAT=V (์์์ ํ). --bstat *๋ก ์ ์ฒด, --stats๋ก ๋ฏธ์์ /์งํ์ค/์น์ธ/ํ์/๋ฐ๋ ค ํํฐ.
voucher show <BELNR|GRONO> โ ZUNIEFI_4207. BELNR/GRONO ์๋ฌด ๊ฑฐ๋ ๋ฐ์ ์์ธ ํ์ (BELNR์ ์๋ฒ 3-๊ฐ์ ์กฐํ ์๋์ฐ ๋ด์์ ์๋ resolve).
voucher create โ ์ ํ ์์ฑ. Steps 1-5. BELNR ๋ฐํ. ์์ง GRONO ์์ (๊ฒฐ์ฌ ์ ).
--item <name> Preset name from config.items (e.g. "์๊ธฐ๊ด๋ฆฌ๋น")
--title <text> ์ ํ ์ ๋ชฉ (SGTXT)
--bldat <YYYYMMDD> ์์์ฆ ๋ ์ง
--budat <YYYYMMDD> ์ ๊ธฐ์ผ์ (default: today)
--amount <won> ๊ธ์ก (์ ์)
--attach-dir <path> ์ฒจ๋ถ ํด๋ (optional)
voucher request-approval <BELNR> โ ๊ฒฐ์ฌ์์ฒญ. Steps 6-11. GRONO ๋ฐ๊ธ + ์ค์ ์์ . --attach-dir ํ์ (๊ฒฐ์ฌ ๋ ์ด์ด ์ฒจ๋ถ).
voucher cancel-group <GRONO> โ ๊ทธ๋ฃน๋ฒํธ์ทจ์ (ZUNIEFI_4202). ํ์(STATS=C) ๋๋ ๋ฐ๋ ค(STATS=R)๋ ์ ํ์ ๋ถ์ GRONO๋ฅผ ํ์ด์ค๋ค. ํ๋ฆฐ BELNR์ ๋ค์ ๊ฒฐ์ฌ์์ฒญ ๊ฐ๋ฅ (์์ ์ฌํญ์ด ์์ผ๋ฉด request-approval๋ก ๋ฐ๋ก ์ฌ์์ , HKONT/์ ์ ๋ฑ ์์ ํด์ผ ํ๋ค๋ฉด delete ํ ์๋ก create).
voucher delete <BELNR> โ ์์์ ํ์ญ์ (ZUNIEFI_4103). GRONO๊ฐ ๋น์ด์๋(๋ฏธ์์ ) ์์์ ํ๋ฅผ ์์ ์ญ์ ํ๋ค. ๋ฒ์ธ์นด๋ ์ ์ฐ ๊ฑด์ด๋ผ๋ฉด ์๋์ ์นด๋ ๊ฑฐ๋(CRD_SEQ)๊ฐ ๋ฏธ์ ์ฐ ํ๋ก ๋์์ corpcard list/corpcard create๋ก ๋ค์ ์ก์ ์ ์๋ค. GRONO๊ฐ ๋ถ์ด์์ผ๋ฉด ๋จผ์ cancel-group์ ๊ฑฐ์ณ์ผ ํ๋ค.
voucher attach {new, upload, list} โ ์ ํ ๋ ์ด์ด EVI_SEQ ์ง์ ์กฐ์ (๋ณดํต create๊ฐ ์๋ ์ฒ๋ฆฌํ๋ฏ๋ก ์ธ ์ผ ๋ง์ง ์์).
๋ฒ์ธ์นด๋(๊ณต์ฉ) ์ฌ์ฉ๋ด์ญ์ ์นด๋์ฌ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ์์์ ํํํ๋ค. ์๊ธฐ๊ด๋ฆฌ๋น/์ผ๋ฐ๊ฒฝ๋น์ ๋ฌ๋ฆฌ ์์์ฆ์ ์ง์ ์ฒจ๋ถํ์ง ์๋๋ค (์นด๋์ฌ๊ฐ SAP ํ๋จ์ ๊ฑฐ๋ ๋ฐ์ดํฐ๋ก ์๋ ์ฒจ๋ถ).
corpcard list [--from] [--to] [--merch] โ ๋ฏธ์ ์ฐ ์นด๋ ๊ฑฐ๋ ๋ชฉ๋ก (ZUNIEFI_1000). ์ด๋ฏธ ์ ํํ๋ ๊ฑฐ๋๋ ๋น ์ง๋ค. ๊ฐ ํ์ด CRD_SEQ๋ก ์๋ณ๋จ.
corpcard create <CRD_SEQ> --hkont --remark [--budat] [--bldat] โ ์นด๋ ๊ฑฐ๋๋ฅผ ์์์ ํ๋ก ๋ณํ (ZUNIEFI_4006 + ZUNIEFI_1009 โ BELNR). ์ฒจ๋ถ EVI_SEQ ํธ์ถ ์์.
--hkont <code> G/L ๊ณ์ (์: 52010102 ํ์๋ / 52060101 ํ์๋น / 52050104 ์ ๋๋น-์ ์ฉ์นด๋ / 52030203 ์๋ด๊ตํต๋น)
--hkont-text <name> ํ๊ธฐ์ฉ (์ต์
)
--remark <text> ์ ์. ํ์: [๋ฒ์ธ์นด๋/๊ฑฐ๋์ฒ/์ฐธ์์] ๋๋ [๋ฒ์ธ์นด๋/์ถ๋ฐโ๋์ฐฉ]
--budat <YYYYMMDD> ์ ๊ธฐ์ผ (default: today; ๊ฒฐ์ ์ ๋ง๊ฐ ํ์ ์ต์ 1์ผ ๊ฐ์ )
--bldat <YYYYMMDD> ์ฆ๋น์ผ (default: ์นด๋ ์น์ธ์ผ)
๋ฐ๊ธ๋ BELNR์ ๊ทธ๋๋ก eac voucher request-approval <BELNR> --item ๋ฒ์ธ์นด๋ --title "..."๋ก ๊ฒฐ์ฌ์์ฒญ. ๊ฒฐ์ฌ์ ์ [๊ฐ์ธ]-์ผ๋ฐ๊ฒฝ๋น ๊ทธ๋๋ก (์ฑ๋ฏผ์ง โ Leah Song).
์ฐธ๊ณ : ๋ฒ์ธ์นด๋๋ ํ์ฌ ์ ์ฑ ์ ๋ถ๊ฐ์ธ V3 (๋ถ๊ณต์ ๋งค์ ์ธ์ก)์ ๊ฐ์ ๋ก ์ ์ฉ. EVIKB=FI_12 (๋ฒ์ธ์นด๋๊ธฐ๋ช ์). MWSKZ/EVIKB๋ ์ฝ๋์์ ์๋ ์ธํ .
approval list [--box progress|approved|rejected|pending] โ ZUNIEWF_4500. ๐ ํ์๋ก ๊ฒฐ์ฌ ๋ ์ด์ด ์ฒจ๋ถ ์ ๋ฌด ํ๋์ ๋ณด์.
approval recall <GRONO> โ ์งํ์ค ๊ฒฐ์ฌ๋ฌธ์ ํ์. ๋ด๋ถ๋ ApprovalStep + targetNamedServiceId=ZUNIEWF_4320 + APPR_STAT=E.
approval attach {new, upload, list} โ ๊ฒฐ์ฌ ๋ ์ด์ด EVI_SEQ ์ง์ ์กฐ์ (๋ณดํต request-approval์ด ์๋ ์ฒ๋ฆฌ).
approval line list โ ๊ฐ์ธ๊ฒฐ์ฌ์ ๋ชฉ๋ก (ZUNIEWF_2200).
approval line show <SEQ> โ ๊ฒฐ์ฌ์ ์ ๊ฒฐ์ฌ์๋ฅผ ๊ทธ ์์ฒด๋ก ์กฐํ (ZUNIEWF_2203). --json์ ๋ถ์ด๋ฉด raw ๋ฐฐ์ด์ ์ถ๋ ฅ โ ๊ทธ๋๋ก line save ์
๋ ฅ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ.
approval line approvers <SEQ> --grono <G> โ ํน์ ๊ฒฐ์ฌ๋ฌธ์(GRONO)์ ๋ฌถ์ธ ๊ฒฐ์ฌ์ ํ๊ฐ ๊ฒฐ๊ณผ (ZUNIEWF_4101). ๊ฒฐ์ฌ์ ์์ฒด๋ณด๋ค๋ ๊ทธ ๋ฌธ์๊ฐ ์ง์ง ๋๊ตฌ๋ฅผ ๊ฑฐ์น๋๊ฐ๋ฅผ ๋ณธ๋ค.
approval line save <SEQ> <approvers.json> โ ๊ฒฐ์ฌ์ ๋ฆฌ์คํธ ํต์งธ ์ ์ฅ (ZUNIEWF_2201). ํ์ผ์ line show --json ์ถ๋ ฅ ํ์.
approval line add <SEQ> <name|wf_id> [--at lev] โ ๊ฒฐ์ฌ์ ์ ์ฌ์ฉ์ ํ ๋ช
์ถ๊ฐ. <name>์ด๋ฉด ZUNIEWF_1035๋ก ๊ฒ์ํด ๋จ์ผ ๋งค์นญ์ผ ๋๋ง ์งํ. --at์ 1-based ์์น (์์ผ๋ฉด ๋์ ์ถ๊ฐ). ๋ด๋ถ์ ์ผ๋ก show โ splice โ save.
approval line remove <SEQ> <level|wf_id> โ ๊ฒฐ์ฌ์ ์์ ํ ๋ช
์ ๊ฑฐ. ์ซ์๋ฉด 1-based level, ์๋๋ฉด WF_ID (์: ZB01010)๋ก ๋งค์นญ.
approval line search-user <name> โ EAC ์ฌ์ฉ์ ๊ฒ์ (ZUNIEWF_1035). ํ๊ธ/์๋ฌธ ๋จํธ ๋ชจ๋ ๊ฐ๋ฅ.
๊ฒฐ์ฌ์ ์์ฑ/์ญ์ ์์ฒด๋ ์์ง ์๋ํ ์ ๋จ (์๋ UI์์ ํ ๋ฒ๋ ์บก์ณ ์ ์กํ). ์ ๋ผ์ธ์ด ํ์ํ๋ฉด EAC UI์์ ์์ฑํ ๋ค
add/remove/save๋ก ๊ฒฐ์ฌ์๋ง ์๋ํ.
Wrapping ์๋ ์๋น์ค ์ง์ ํธ์ถ์ฉ escape hatch.
eac call ZUNIEFI_4207 --prog DRAFT_0010 --data '{"GRONO":"FI20260000023922"}'config showโ ํ์ฌ config JSON ํ๋ฆฐํธconfig initโ~/.config/eac/config.json์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ์์ฑ
eac-cli๋ "์ ํ ์์ฑ + ๊ฒฐ์ฌ์์ฒญ ํ ๋ฒ์"๋ผ๋ composite๋ฅผ ์ผ๋ถ๋ฌ ์ ๊ณตํ์ง ์๋๋ค. ์ค๊ฐ์ ์คํจํ๋ฉด ์ํ(BELNR ๋ฐ๊ธ๋๋๋ฐ GRONO ์์)๊ฐ ์จ๊ฒจ์ ธ ๋ณต๊ตฌ๊ฐ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ. ํ์ํ๋ฉด shell script๋ก 2 ๋จ๊ณ๋ฅผ ๋ช ์์ ์ผ๋ก ์กฐํฉ.
# Step 1: ์ ํ ์์ฑ
BELNR=$(eac voucher create \
--item "์๊ธฐ๊ด๋ฆฌ๋น" \
--title "2026๋
5์ ์๊ธฐ๊ด๋ฆฌ๋น" \
--bldat 20260503 \
--amount 30800 \
--attach-dir ./์๊ธฐ๊ด๋ฆฌ๋น/202605 \
| awk '/^BELNR/ {print $2}')
echo "BELNR=$BELNR"
# Step 2: ๊ฒฐ์ฌ์์ฒญ
eac voucher request-approval "$BELNR" \
--item "์๊ธฐ๊ด๋ฆฌ๋น" \
--title "2026๋
5์ ์๊ธฐ๊ด๋ฆฌ๋น" \
--attach-dir ./์๊ธฐ๊ด๋ฆฌ๋น/202605์ด๊ฑธ ๊ทธ๋๋ก ์๋ณ task script๋ก ๊ฐ์ธ์ ~/bin/ ๋๋ repo์ scripts/์ ๋๋ฉด ๋จ:
#!/usr/bin/env bash
# scripts/์๊ธฐ๊ด๋ฆฌ๋น-์์ .sh
set -euo pipefail
month="$1"; bldat="$2"; receipt="$3"
y="${month:0:4}"; m=$((10#${month:4:2}))
title="${y}๋
${m}์ ์๊ธฐ๊ด๋ฆฌ๋น"
amount=$(( receipt * 7 / 10 ))
dir="./์๊ธฐ๊ด๋ฆฌ๋น/${month}"
BELNR=$(eac voucher create --item "์๊ธฐ๊ด๋ฆฌ๋น" --title "$title" \
--bldat "$bldat" --amount "$amount" --attach-dir "$dir" \
| awk '/^BELNR/ {print $2}')
eac voucher request-approval "$BELNR" --item "์๊ธฐ๊ด๋ฆฌ๋น" \
--title "$title" --attach-dir "$dir"# ์: 23922 ์์ ํ๋๋ฐ ์์์ฆ ์๋ชป ๋ฃ์์
eac approval recall FI20260000023922
eac voucher cancel-group FI20260000023922
# ์ด์ BELNR 3200005520 ์ "๋ฏธ์์ " ์ํ. ๋ค์ ๊ฒฐ์ฌ์์ฒญ ๊ฐ๋ฅ:
eac voucher request-approval 3200005520 \
--item "์๊ธฐ๊ด๋ฆฌ๋น" \
--title "2026๋
5์ ์๊ธฐ๊ด๋ฆฌ๋น (์์ )" \
--attach-dir ./์๊ธฐ๊ด๋ฆฌ๋น/202605์ ํ(BELNR)๋ HKONT/EVIKB ํ์ ํ SAP์ posting๋๋ฏ๋ก item์ ๋ฐ๊พธ๋ ค๋ฉด ์ ์ ํ ํ์. ๊ธฐ์กด ๊ฒ์ ํ์ โ ๊ทธ๋ฃน๋ฒํธ์ทจ์ โ ์์์ ํ์ญ์ ํ ์๋ก create:
# ์๋ชป๋ item
eac approval recall FI20260000023877
eac voucher cancel-group FI20260000023877
eac voucher delete 3200005641 # ์์์ ํ ์์ ์ญ์
# ์ฌ๋ฐ๋ฅธ item ์ผ๋ก ์๋ก ์์
BELNR=$(eac voucher create --item "์๊ธฐ๊ด๋ฆฌ๋น" ...)
eac voucher request-approval "$BELNR" --item "์๊ธฐ๊ด๋ฆฌ๋น" ...ํ์๋(52010102) ์ ํ์๋น(52060101) ์ฒ๋ผ ์๋ชป ๋ถ๋ฅํ๋ค๊ฐ ํ๊ณํ ๋ฐ๋ ค๋ฅผ ๋ฐ์์ ๋. ์นด๋ ๊ฑฐ๋(CRD_SEQ)๋ ์ด๋ฆฌ๊ณ HKONT/์ ์๋ง ๋ค์ ์ก์ผ๋ฉด ๋๋ค.
# 1) ๋ฐ๋ ค ๊ฒฐ์ฌ๋ฌธ์์ GRONO ํ์ด๋ด๊ธฐ
eac voucher cancel-group FI20260000023988 # GRONO ๊ฐ ๋ถ์ด์๋ ํ์/๋ฐ๋ ค ์ ํ detach
# 2) ์์์ ํ ์์ฒด๋ฅผ ์ญ์ โ CRD_SEQ ๊ฐ ๋ฏธ์ ์ฐ ํ๋ก ๋ณต๊ท
eac voucher delete 3200005642
# 3) ์นด๋ ๊ฑฐ๋ ๋ค์ ์ก๊ธฐ (CRD_SEQ ๊ทธ๋๋ก โ list ๋ก ํ์ธ)
eac corpcard list --merch ์ด๋งํธ24
BELNR=$(eac corpcard create 20260421001000020116 \
--hkont 52010102 \
--hkont-text "ํ)๋ณต๋ฆฌํ์๋น-ํ์๋" \
--remark "[๋ฒ์ธ์นด๋/์ด๋งํธ24์ฒญ๋ด๋ฆฌํ
์ผ์ /๋ฐ์๊ฑธ, ์คํ์]")
# 4) ๊ฒฐ์ฌ์์ฒญ
eac voucher request-approval "$BELNR" --item ๋ฒ์ธ์นด๋ --title "[๋ฒ์ธ์นด๋/...]"๐ก ํ๊ณํ ๋ฃฐ: ์ฐธ์์๊ฐ ์ ์ ์ง์์ด๋ฉด ํ์๋(
52010102), ์ธ๋ถ์ธ 1๋ช ์ด์ + ์ฌ์ ํ์ ๊ธฐ์์๊ฐ ์์ด์ผ๋ง ํ์๋น(52060101).
eac voucher list # ๋ด ์์์ ํ
eac voucher list --bstat '*' --stats '*' # ์ ์ฒด
eac voucher show FI20260000023922
eac approval list # ์งํ์ค
eac approval list --box rejected # ๋ฐ๋ ค/ํ์
# ๊ฒฐ์ฌ์ ๊ตฌ์กฐ ํ์ธ
eac approval line list
eac approval line approvers 0000000002 --grono FI20260000023922~/.config/eac/config.json. ํ ๋ฒ ์ค์ ํ๊ณ --item <name> ์ผ๋ก ์ฌ์ฌ์ฉ.
{
"user": {
"pernr": "ZB01135",
"bukrs": "K001",
"pernrName": "๋ฐ์๊ฑธ",
"wfIdText": "YG Park (๋ฐ์๊ฑธ)",
"kostl": "226020",
"kostlText": "Device Engineering",
"wfDept": "0000252100",
"wfDeptText": "Service Engineering"
},
"items": {
"์๊ธฐ๊ด๋ฆฌ๋น": {
"hkont": "52010108",
"hkontText": "ํ)๋ณต๋ฆฌํ์๋น-์๊ธฐ๊ด๋ฆฌ๋น",
"evikb": "FI_21",
"evikbText": "์ฅ๋ ค์ง์๊ธ",
"wfLineSeq": "0000000002",
"wfLineLin1": "0000000816"
}
}
}์ item ์ถ๊ฐ ์ ํ์ํ ๊ฐ:
hkontโ G/L ๊ณ์ (e.g.52010177ํ)๋ณต๋ฆฌํ์๋น-๊ธฐํ)evikbโ ์ ํ ์ข ๋ฅ ์ฝ๋ (e.g.FI_21์ฅ๋ ค์ง์๊ธ,FI_22์ผ๋ฐ๊ฒฝ๋น)wfLineSeq/wfLineLin1โ ํด๋น item์ ๊ฐ์ธ๊ฒฐ์ฌ์ (์ฐธ๊ณ :eac approval line list๋ก ํ์ธ)
Preset key๋ ํ๊ธ ์ด๋ฆ(์๊ธฐ๊ด๋ฆฌ๋น, ๊ฐ์กฑ์์ฌ๋น, ์๊ฒฉ๊ทผ๋ฌด์ง์๋น, โฆ) ์ฌ์ฉ ๊ถ์ฅ.
bun install
bun run src/index.ts --helpRelease: gh workflow run release.yml โ oneup๊ฐ version bump + npm/Homebrew publish ์๋ํ.
MIT