# Jpk

> Generuje miesięczną deklarację VAT JPK_V7M (Jednolity Plik Kontrolny) jako XML z faktur z rejestru SQLite. Użyj gdy user prosi "wygeneruj JPK", "JPK za marzec", "deklaracja VAT za miesiąc", "przygotuj JPK_V7M", "rozliczenie VAT do urzędu".

- Skill: `dithiothreitol/jpk` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dithiothreitol/jpk`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dithiothreitol/jpk/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dithiothreitol (https://skillmd.com/u/dithiothreitol)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dithiothreitol/jpk

---


# Generator JPK_V7M

Generuje miesięczną deklarację VAT (`JPK_V7M(2)`) na podstawie faktur zapisanych w `data/registry.sqlite`.
Plik wynikowy: `data/jpk/JPK_V7M_YYYY_MM.xml` — gotowy do wysyłki przez bramkę MF lub e-Mikrofirma.

## Wymagane dane

- **month** — miesiąc (1-12)
- **year** — rok (np. 2026)

Jeśli user mówi "JPK za poprzedni miesiąc" — policz miesiąc/rok względem daty bieżącej (`2026-04-17`), nie wymyślaj.

## Wywołanie

```bash
python3 skills/jpk/scripts/generate_jpk.py --month 3 --year 2026
```

Zwraca JSON:
```json
{
  "period": "03/2026",
  "invoice_count": 4,
  "total_net": "42000.00",
  "total_vat": "9660.00",
  "file_path": "data/jpk/JPK_V7M_2026_03.xml"
}
```

## Po wygenerowaniu

Pokaż userowi: okres, liczbę faktur, sumę netto + VAT, ścieżkę pliku (jako klikalny markdown link).
Przypomnij: termin wysyłki JPK_V7M to **25-ty następnego miesiąca**.
Plik trzeba wysłać przez bramkę MF — ten skill nie wysyła automatycznie (na razie).

## Wymagane dane sprzedawcy (z .env)

`SELLER_NIP`, `SELLER_FIRST_NAME`, `SELLER_LAST_NAME`, `SELLER_BIRTH_DATE`, `SELLER_TAX_OFFICE_CODE`.
Jeśli skrypt rzuci błąd o braku któregoś — przerwij i powiedz userowi żeby uzupełnił `.env`.

## Import usług / odwrotne obciążenie

Koszty oznaczone `reverse_charge` (skill `expense --reverse-charge`) są rozliczane automatycznie:
samonaliczony VAT należny trafia do **K_27/K_28** (dostawca spoza UE) lub **K_29/K_30**
(dostawca z UE, art. 28b) po stronie sprzedaży, a jednocześnie do odliczenia (**K_42/K_43**) —
więc dla działalności opodatkowanej efekt na kwotę do zapłaty (P_51) jest **zerowy**. Ta sama
faktura pojawia się w ewidencji sprzedaży i zakupu.

## Uwagi

- Skrypt liczy sumy z rejestru, nie z surowych XML — upewnij się że wszystkie faktury miesiąca zostały wygenerowane przez skill `invoice` (czyli są w SQLite).
- Jeśli `invoice_count == 0` — ostrzeż usera, prawdopodobnie zapomniał wystawić faktury albo pomylił miesiąc.

