---
title: "Bilans otwarcia"
description: "Wprowadzenie sald początkowych na rozpoczęcie roku obrotowego lub migrację z innego systemu — z automatyczną kontrolą Aktywa = Pasywa + Kapitał, przypisaniem strony Wn/Ma według typu konta i idempotencją (jeden BO na rok)."
url: https://numifyai.com/docs/korzystanie-z-numify/opening-balance
review_status: numify-source
updated: 2026-04-17
---


**Bilans otwarcia (BO)** to zapis księgowy wprowadzający salda
początkowe kont — na dzień rozpoczęcia działalności lub pierwszy dzień
nowego roku obrotowego. W Numify jest to **jeden zapis w dzienniku** z
`source = 'opening_balance'`, podlegający tym samym regułom co zwykły
zapis (podwójny zapis, zakaz usuwania).

<ComplianceDisclaimer />

{/* SCREENSHOT: ekran /opening-balance — selektor roku i daty, tabela pozycji (konto, kwota Wn/Ma), live sumy Aktywa / Pasywa+Kapitał i badge balansu */}

## Kiedy używać [#kiedy-używać]

Trzy typowe scenariusze:

1. **Start nowej spółki w Numify** — spółka istniała wcześniej, ma już aktywa (kapitał zakładowy na rachunku, wyposażenie). BO na dzień pierwszego zapisu.
2. **Migracja z innego systemu** — spółka była księgowana w wFirma / księgowej zewnętrznej. BO to salda kont przeniesione na konkretny dzień (<LegalRef act="UoR" art="12" paragraph="1" />).
3. **Początek nowego roku obrotowego** — BO na 1 stycznia to **salda końcowe poprzedniego roku** (<LegalRef act="UoR" art="5" paragraph="1" /> — ciągłość). W Numify generuje się je poprzez <FeatureRef slug="fiscal-periods">zamknięcie roku</FeatureRef>, nie ręcznie.

Ta strona dotyczy scenariuszy 1 i 2.

## Zasada — Aktywa = Pasywa + Kapitał [#zasada--aktywa--pasywa--kapitał]

Każdy BO musi spełniać równanie bilansowe:

```
Aktywa = Pasywa + Kapitał
```

Numify sprawdza to na dwóch poziomach:

1. **Równanie bilansowe** — `validateOpeningBalance` w warstwie aplikacji: suma sald kont typu `asset` = suma kont `liability` + suma kont `equity`.
2. **Podwójny zapis w dzienniku** — `validateJournalBalance`: suma Wn = suma Ma w utworzonym zapisie (<LegalRef act="UoR" art="15" paragraph="1" />).

Przy niebilansowym wprowadzeniu zapis **nie zostanie utworzony** —
ekran pokaże czerwony badge „niezbilansowany" i przycisk zapisu
pozostanie zablokowany.

## Przypisanie strony Wn / Ma [#przypisanie-strony-wn--ma]

Użytkownik wprowadza **saldo** każdego konta (liczba dodatnia =
normalne saldo dla typu konta). Numify automatycznie kieruje je na
właściwą stronę zapisu:

| Typ konta            | Strona          | Przykład                                                                   |
| -------------------- | --------------- | -------------------------------------------------------------------------- |
| `asset` (aktywa)     | **Wn (debit)**  | <AccountRef code="130" /> rachunek bieżący 10 000 zł → Wn 10 000           |
| `liability` (pasywa) | **Ma (credit)** | <AccountRef code="202" /> zobowiązania wobec dostawców 3 000 zł → Ma 3 000 |
| `equity` (kapitał)   | **Ma (credit)** | <AccountRef code="800" /> kapitał podstawowy 5 000 zł → Ma 5 000           |
| `off_balance`        | **pomijane**    | Konta pozabilansowe nie wchodzą do A = P + K                               |

Konta typu `revenue` / `expense` w BO pojawiają się wyjątkowo — tylko
przy migracji w trakcie roku, gdy przenosi się narastające saldo kont
wynikowych. Normalnie rok zaczyna się z zerowymi saldami kont zespołu
4 i 7.

## Idempotencja — jeden BO na rok [#idempotencja--jeden-bo-na-rok]

Przed utworzeniem BO Numify sprawdza `hasOpeningBalance(companyId, fiscalYear)`:

* Jeśli istnieje już zapis z `source = 'opening_balance'` i `fiscalYear = YYYY`, próba utworzenia drugiego BO rzuci wyjątek `Opening balance already exists for fiscal year YYYY`.
* Korekta istniejącego BO **nie odbywa się przez ponowne wprowadzenie** — wymaga storna (zapis odwrotny) i ewentualnie kolejnego zapisu z prawidłowymi kwotami (zakaz usuwania, <LegalRef act="UoR" art="25" paragraph="1" />).

Ekran `/opening-balance` pokazuje istniejący BO (jeśli jest) w trybie
tylko do odczytu — wraz z datą, liczbą pozycji i sumami.

## Integracja z okresami fiskalnymi [#integracja-z-okresami-fiskalnymi]

Przed utworzeniem BO serwis wywołuje:

* `ensurePeriodOpen(companyId, year, month)` — sprawdza, że okres nie jest `closed` / `locked`,
* `getOrCreatePeriod(companyId, year, month)` — tworzy okres pierwszego miesiąca, jeśli go brak.

Oznacza to, że **BO wymaga otwartego okresu** w miesiącu zapisu. Patrz
<FeatureRef slug="fiscal-periods" />.

## Workflow — migracja z innego systemu [#workflow--migracja-z-innego-systemu]

Rekomendowany proces:

1. **Wybierz dzień graniczny** — np. 1 stycznia nowego roku obrotowego albo dzień rozpoczęcia pracy w Numify.
2. **Pobierz z poprzedniego systemu** zestawienie obrotów i sald na ten dzień (zestawienie musi być zbilansowane — wykonaj w starym systemie własną walidację).
3. **Rozwiń analitykę** — dla <AccountRef code="201" /> / <AccountRef code="202" /> wprowadzaj salda **per kontrahent** (subkonto), nie tylko saldo syntetyczne. Inaczej księga główna się zgadza, ale nie będzie zgodna z rejestrem kontrahentów.
4. **Sprawdź <AccountRef code="220" /> (rozrachunki publicznoprawne)** — saldo z urzędu skarbowego (VAT do zapłaty / zwrot, CIT, PIT-4R) i z ZUS.
5. **Wprowadź BO w Numify** — pozycja po pozycji. Live sumy Aktywa / Pasywa+Kapitał pozwalają od razu zauważyć niezbilansowanie.
6. **Zapisz** — Numify utworzy jeden zapis „Bilans otwarcia YYYY" w dzienniku.
7. **Zweryfikuj** — otwórz <FeatureRef slug="trial-balance" /> i porównaj z zestawieniem ze starego systemu.

## Typowe pułapki [#typowe-pułapki]

* **Salda walutowe** — pamiętaj o przeliczeniu na PLN po kursie średnim NBP z dnia BO. Numify w BO przyjmuje kwoty w groszach PLN; analityka walutowa (kwota + waluta) wymaga osobnego wpisu w księdze pomocniczej rachunku bankowego.
* **Środki trwałe bez umorzenia** — jeśli wprowadzasz <AccountRef code="010" /> ze stanem 50 000 zł, a umorzenie dotąd wyniosło 20 000 zł, potrzebujesz **dwóch pozycji**: <AccountRef code="010" /> po stronie Wn (wartość początkowa brutto) i <AccountRef code="070" /> po stronie Ma (umorzenie). Patrz <FeatureRef slug="fixed-assets" />.
* **Kapitał własny jako różnica** — nie traktuj kapitału jako „resztki" do zbilansowania. Wprowadź rzeczywiste salda <AccountRef code="800" /> (kapitał podstawowy) i <AccountRef code="820" /> (wynik z lat ubiegłych), a następnie zweryfikuj, że BO rzeczywiście się zgadza. Rozjazd to sygnał błędu w danych źródłowych, nie do wyrównania ręcznie.
* **Brak aktywnych kont** — jeśli konto jest nieaktywne (<FeatureRef slug="chart-of-accounts" />), nie pojawi się w podpowiedziach. Aktywuj je przed wprowadzeniem BO.

## Co po zapisie [#co-po-zapisie]

* BO jest zwykłym zapisem w <FeatureRef slug="journal">dzienniku</FeatureRef> z `source = 'opening_balance'` — ma numer, datę, pozycje.
* Salda trafiają do <FeatureRef slug="general-ledger">księgi głównej</FeatureRef> i <FeatureRef slug="trial-balance">zestawienia obrotów i sald</FeatureRef>.
* Wpływa na <FeatureRef slug="balance-sheet">bilans</FeatureRef> jako stan początkowy; nie wpływa na <FeatureRef slug="profit-loss">RZiS</FeatureRef> (chyba że — wyjątkowo — BO zawierał konta wynikowe z migracji w trakcie roku).
* Z BO można generować pozycje <FeatureRef slug="fixed-assets">środków trwałych</FeatureRef> i rozrachunków — każda pozycja analityczna powinna mieć odpowiednik w rejestrze operacyjnym (nie wystarczy saldo syntetyczne).

## Powiązania [#powiązania]

* <FeatureRef slug="chart-of-accounts">Plan kont</FeatureRef> — BO używa wyłącznie aktywnych kont spółki.
* <FeatureRef slug="fiscal-periods">Okresy fiskalne</FeatureRef> — BO wymaga otwartego okresu na dzień zapisu.
* <FeatureRef slug="journal">Dziennik</FeatureRef> — BO to zapis z `source = 'opening_balance'`.
* <FeatureRef slug="fixed-assets">Środki trwałe</FeatureRef> — po BO uzupełnij ewidencję ŚT (ten sam saldo na <AccountRef code="010" /> musi mieć odpowiedniki w rejestrze).
