agentsclimarketplace

Expense

Skill dithiothreitol/jdg-ksiegowy/.claude/skills/expense

Dodaje fakturę zakupu (koszt) do rejestru SQLite — zapisuje sprzedawcę, NIP, kwoty, kategorię, datę wpływu. Obsługuje wprowadzanie ręczne ORAZ OCR z pliku (PDF/JPG/PNG) przez lokalny Pixtral 12B z fallbackiem na Claude Haiku 4.5. Na ryczałcie koszty NIE pomniejszają podatku, ale VAT naliczony idzie do JPK_V7M jako odliczalny. Użyj gdy user mówi "dodaj fakturę zakupu", "zarejestruj koszt", "wprowadź wydatek", "kupiłem laptopa za...", "fakturę za hosting/SaaS/internet/paliwo", "dorzuć fakturę kosztową", "zeskanuj fakturę", "wczytaj PDF-a z fakturą", lub gdy user przesyła plik faktury.From its SKILL.md

Install
npx -y skills add dithiothreitol/jdg-ksiegowy --skill expense

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

4 things to look at

  • reads credentialsReads from 2 credential sources: `ANTHROPIC_API_KEY` and 1 more.
  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 4 commands, including `python3 skills/expense/scripts/add.py` and 3 more.
  • fetches URLsInstructs the agent to fetch 1 URL, including http://localhost:11434.

SKILL.md

5.5 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it

Dodawanie faktury zakupu (koszt)

Zapisuje koszt do tabeli expenses w SQLite. Używane potem przez skill jpk do wyliczenia VAT naliczonego do odliczenia.

Wymagane dane od usera

  • seller-name — nazwa sprzedawcy
  • seller-nip — NIP sprzedawcy (10 cyfr; dla zagranicznego: też string, ustaw --seller-country)
  • document-number — numer faktury (z faktury sprzedawcy)
  • issue-date — data wystawienia (YYYY-MM-DD)
  • netto — kwota netto
  • vat — kwota VAT (jeśli sprzedawca zwolniony — wpisz 0)

Opcjonalnie:

  • receive-date — data wpływu (domyślnie = issue-date). To ona decyduje o miesiącu w JPK_V7M.
  • description — co kupiłeś
  • categoryuslugi_obce | materialy | media | paliwo | samochod | biuro | sprzet | szkolenia | inne
  • vat-rate — stawka (domyślnie 23)
  • --vat-deduction-pct — procent VAT odliczalnego (0-100, domyślnie 100):
    • 100 — pełne odliczenie (typowe usługi/towary firmowe)
    • 50 — auto osobowe użytkowanie mieszane lub auto prywatne służbowo (paliwo, serwis)
    • 0 — brak odliczenia (reprezentacja, prywatny zakup)
  • file-path — ścieżka do PDF/JPG zachowanego skanu

Dopytaj usera jeśli czegoś brakuje, zwłaszcza NIP i kwot. Nie wymyślaj.

Wywołanie

python3 skills/expense/scripts/add.py \
  --seller-name "Hetzner Online GmbH" \
  --seller-nip "DE812871812" \
  --seller-country DE \
  --document-number "R0012345" \
  --issue-date "2026-04-15" \
  --description "Hosting VPS kwiecien 2026" \
  --category uslugi_obce \
  --netto 100 \
  --vat 23

Zwraca JSON z id rekordu, datami i statusem saved.

OCR z pliku (PDF/JPG/PNG)

Zamiast przepisywać dane, user może podać plik faktury:

# Podglad (preview, bez zapisu):
python3 skills/expense/scripts/scan.py --file faktura.pdf

# Zapis od razu:
python3 skills/expense/scripts/scan.py --file faktura.pdf --save

Flow:

  1. Bez --save skrypt zwraca JSON z wyciągniętymi polami + source (ollama | claude).
  2. Pokaż userowi preview i spytaj o akceptację/poprawki.
  3. Po akceptacji odpal ten sam skrypt z --save lub skills/expense/scripts/add.py z poprawionymi polami.

Backend domyślny: Pixtral 12B przez Ollama (http://localhost:11434). Przy błędzie/timeout → fallback na Claude Haiku 4.5 (wymaga ANTHROPIC_API_KEY). Konfiguracja przez OCR_PROVIDER (auto | ollama | claude) w .env.

Źródło z KSeF (faktury zakupowe B2B)

Dla faktur, które kontrahent wystawił w KSeF (większość polskich dostawców B2B — paliwo, SaaS, usługi), autorytatywnym źródłem jest inbox KSeF, nie OCR. Jeśli user ma paragon / „potwierdzenie transakcji" (np. Shell) z adnotacją, że faktura trafia do KSeF — użyj skilla ksef (skills/ksef/scripts/inbox.py), który pobierze dokładne kwoty, NIP i numer oraz zapisze koszt bez przepisywania. OCR (scan.py) zostaw dla faktur spoza KSeF (papierowe, zagraniczne, PDF mailem).

Listowanie

python3 skills/expense/scripts/list.py --month 4 --year 2026

Po zapisaniu

Pokaż userowi: sprzedawca, numer dokumentu, kwoty, procent odliczenia VAT. Jeśli vat_deduction_pct > 0 — przypomnij że ten koszt zwiększy VAT do odliczenia w JPK_V7M za dany miesiąc o vat × pct / 100.

Auto osobowe — heurystyka 50%

Jeśli kategoria to paliwo lub samochod, zapytaj usera czy auto jest:

  • prywatne używane służbowo / firmowe „mieszane" → --vat-deduction-pct 50 (domyślny scenariusz JDG)
  • firmowe wyłącznie do działalności (VAT-26 + ewidencja przebiegu) → --vat-deduction-pct 100
  • prywatne bez związku z firmą → wpis w ogóle nie powinien być rejestrowany

Uwagi

  • Ryczałt: koszty nie zmniejszają podatku dochodowego. Jedyny powód rejestracji to (a) wymóg przechowywania dowodów (art. 15 ustawy o ryczałcie), (b) odliczenie VAT.
  • Zagraniczny sprzedawca / import usług (SaaS, API, hosting): jeśli dostawca wystawił fakturę bez VAT (poprawne B2B), użyj --reverse-charge. Sam naliczasz VAT należny i odliczasz go (efekt netto 0). Ustaw --seller-country (UE → K_29/K_30 art. 28b; spoza UE, np. US → K_27/K_28). VAT liczony jest automatycznie z --netto × --vat-rate, więc --vat możesz pominąć.
    python3 skills/expense/scripts/add.py --seller-name "Hetzner Online GmbH" \
      --seller-nip "DE812871812" --seller-country DE --document-number "R123" \
      --issue-date 2026-05-10 --category uslugi_obce --netto 100 --vat-rate 23 --reverse-charge
    
    Pułapka OSS: jeśli zagraniczny dostawca naliczył już polski VAT przez OSS (traktując Cię jak konsumenta — brak Twojego nr VAT-UE), NIE rób reverse charge (podwójny VAT). Wtedy --vat-deduction-pct 0 i poproś dostawcę o fakturę B2B bez VAT. Wymóg: rejestracja VAT-UE (VAT-R) przed pierwszym importem usług.
  • Rabat / korekta: dodaj jako osobny wpis z ujemnymi kwotami i tym samym document_number z prefiksem KOR-.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.