使用例

食費の記録(現金払い)

from iikanji import KakeiboClient, JournalLine

with KakeiboClient("https://example.com", "ik_your_key") as client:
    client.create_journal(
        date="2026-02-15",
        description="スーパーで食材購入",
        lines=[
            JournalLine(account_id=12, debit=3500),   # 食費
            JournalLine(account_id=1, credit=3500),    # 現金
        ],
    )

給与の記録(複数行)

from datetime import date
from iikanji import KakeiboClient, JournalLine

with KakeiboClient("https://example.com", "ik_your_key") as client:
    client.create_journal(
        date=date(2026, 2, 25),
        description="2月分給与",
        lines=[
            JournalLine(account_id=2, debit=300000),     # 普通預金(手取り)
            JournalLine(account_id=30, debit=45000),      # 源泉所得税
            JournalLine(account_id=31, debit=25000),      # 住民税
            JournalLine(account_id=20, debit=30000),      # 社会保険料
            JournalLine(account_id=10, credit=400000),    # 給与収入
        ],
    )

CSV からの一括登録

import csv
from iikanji import KakeiboClient, JournalLine, KakeiboAPIError

ACCOUNT_MAP = {
    "食費": 12,
    "交通費": 16,
    "日用品": 17,
}

with KakeiboClient("https://example.com", "ik_your_key") as client:
    with open("expenses.csv") as f:
        reader = csv.DictReader(f)
        for row in reader:
            category = row["カテゴリ"]
            account_id = ACCOUNT_MAP.get(category)
            if not account_id:
                print(f"不明なカテゴリ: {category}, スキップ")
                continue

            try:
                result = client.create_journal(
                    date=row["日付"],
                    description=row["摘要"],
                    lines=[
                        JournalLine(account_id=account_id, debit=int(row["金額"])),
                        JournalLine(account_id=1, credit=int(row["金額"])),
                    ],
                )
                print(f"登録完了: 伝票#{result.entry_number}")
            except KakeiboAPIError as e:
                print(f"エラー: {row['摘要']} - {e.message}")

仕訳の閲覧

from iikanji import KakeiboClient

with KakeiboClient("https://example.com", "ik_your_key") as client:
    # 一覧取得(日付範囲で絞り込み)
    result = client.list_journals(date_from="2026-02-01", date_to="2026-02-28")
    print(f"全{result.total}件中 {len(result.journals)}件取得")

    for j in result.journals:
        print(f"  #{j.entry_number} {j.date} {j.description}")

    # 1件取得
    detail = client.get_journal(journal_id=42)
    print(f"伝票#{detail.entry_number}: {detail.description}")
    for line in detail.lines:
        print(f"  科目{line.account_id}: 借方{line.debit} 貸方{line.credit}")

仕訳の削除

from iikanji import KakeiboClient, KakeiboAPIError

with KakeiboClient("https://example.com", "ik_your_key") as client:
    try:
        client.delete_journal(journal_id=42)
        print("削除しました")
    except KakeiboAPIError as e:
        print(f"削除できません: {e.message}")

AI 証憑仕訳 — レシートから自動仕訳

from iikanji import KakeiboClient, JournalLine

with KakeiboClient("https://example.com", "ik_your_key") as client:
    # 画像を AI 解析(ファイルパス指定)
    result = client.analyze("receipt.jpg", comment="コンビニで購入")
    print(f"下書きID: {result.draft_id}")

    # 最初の候補を確認
    s = result.suggestions[0]
    print(f"候補: {s['entry_description']} ({s['date']})")
    for line in s["lines"]:
        print(f"  {line['account_name']}: 借方{line['debit_amount']} 貸方{line['credit_amount']}")

    # そのまま仕訳として確定
    client.create_journal(
        date=s["date"],
        description=s["entry_description"],
        lines=[
            JournalLine(
                account_id=line["account_id"],
                debit=line["debit_amount"],
                credit=line["credit_amount"],
            )
            for line in s["lines"]
        ],
        draft_id=result.draft_id,  # 下書きを確定済みにする
    )

AI 証憑仕訳 — 下書き一覧から処理

from iikanji import KakeiboClient, JournalLine

with KakeiboClient("https://example.com", "ik_your_key") as client:
    # 未確定の下書き一覧
    result = client.list_drafts(status="analyzed")
    print(f"未処理の下書き: {result.total}件")

    for item in result.drafts:
        # 詳細を取得
        draft = client.get_draft(item.id)
        s = draft.suggestions[0]
        print(f"  [{item.id}] {s['date']} {s['entry_description']}")

        # 仕訳確定
        client.create_journal(
            date=s["date"],
            description=s["entry_description"],
            lines=[
                JournalLine(
                    account_id=line["account_id"],
                    debit=line["debit_amount"],
                    credit=line["credit_amount"],
                )
                for line in s["lines"]
            ],
            draft_id=item.id,
        )
        print(f"    → 確定しました")

AI 証憑仕訳 — バイト列から解析

from iikanji import KakeiboClient

with KakeiboClient("https://example.com", "ik_your_key") as client:
    # カメラやHTTPレスポンスから取得したバイト列を直接渡す
    image_bytes = b"..."  # 画像のバイト列
    result = client.analyze(
        image_bytes,
        mime_type="image/png",
        comment="経費精算",
        notify=True,  # Webhook 通知を送信
    )

タイムアウトの変更

# AI 解析は時間がかかることがあるのでタイムアウトを延長
client = KakeiboClient(
    "https://example.com",
    "ik_your_key",
    timeout=60.0,
)

行レベルの摘要

仕訳全体の摘要とは別に、各明細行に摘要を付けられます。

with KakeiboClient("https://example.com", "ik_your_key") as client:
    client.create_journal(
        date="2026-02-15",
        description="日用品購入",
        lines=[
            JournalLine(account_id=17, debit=500, description="洗剤"),
            JournalLine(account_id=17, debit=300, description="ゴミ袋"),
            JournalLine(account_id=1, credit=800),
        ],
    )