Compliant генериране на отчети за български работодатели — извадете часове от clock събития, приложете официалните ставки за осигуровки и данъци за годината и свалете файлове, готови за НАП портала и банката ви.
BG payroll генериране е country-pluggable слой над wage и clock данните на модул Персонал. За заведения с country = 'BG' и конфигуриран bgPayrollProfileId, отварянето на payroll run за период материализира един PayrollLine на служител — брутно възнаграждение, employer/employee осигурителни дялове, 10% данък и нетно — използвайки ставките от годишния BgPayrollProfile (НОИ тавани, ДОО, ДЗПО, ЗО, ДОД в basis points). От run-а експортирайте salary register XLSX (ведомост), per-employee NRA XML (Декларация образец 1 + 6) и bank-importable CSV.
Не наричаме себе си „compliant payroll software“. Предоставяме отчети, съвместими с NRA portal upload форматите — счетоводителят на заведението подава и подписва. Архитектурата е country-pluggable: BG е първият генератор под src/lib/payroll/generators/bg/; бъдещи държави (UK PAYE, EL Ergani, RO REVISAL) се plug-ват чрез регистриране на нов генератор. Всеки payroll ред съхранява пълната computation snapshot така че всяка оспорена цифра може да бъде ре-извлечена месеци по-късно.
Осигурителните тавани и ставки се променят всяка година в България. BgPayrollProfile таблицата е year-keyed (year UNIQUE) — 2026 има свой ред, 2027 има свой ред, генераторът избира правилния за обработвания период.
Всеки PayrollLine съхранява пълната intermediate computation в computedSnapshot — base gross, overtime, tips, insurable base след clamp, employee/employer осигурителни дялове, taxable base, данък, нетно. Оспорена цифра е re-derivable от snapshot за секунди.
Декларация образец 1 (per-employee monthly filing) и образец 6 (monthly summary of contributions) се emit-ват като XML. Счетоводителят upload-ва в NRA портала директно — без ръчно препечатване в формите на портала.
bg-net-transfer експортът е универсален CSV формат, който се импортира чисто в bulk-payment workflows на UniCredit, ДСК, ОББ, Postbank и Райфайзенбанк България. Платете 30 служители в един upload вместо да печатате 30 трансфера ръчно.
Задайте venue.country = 'BG', попълнете bgEmployerEikBulstat (ЕИК / Булстат) и bgEmployerName (юридическо име) и свържете BgPayrollProfile чрез bgPayrollProfileId. Без тези, генераторът връща 400 със specific причина, така че счетоводителят знае какво липсва.
Отворете Персонал → Ведомост, изберете периода (по подразбиране: миналия календарен месец), кликнете Generate. Генераторът зарежда BgPayrollProfile за годината, агрегира отбити минути на служител, избира effective wage на всеки служител в края на периода и записва един PayrollLine на (run, потребител) с пълни computation snapshots.
От run-а експортирайте bg-vedomost (XLSX salary register), bg-deklaracia-1 (per-employee NRA XML), bg-deklaracia-6 (summary NRA XML), bg-bank-transfer (NRA contributions bank file), bg-net-transfer (employee-net-pay bank CSV).
След като счетоводителят е дал зелена светлина, lock-нете run-а. Статусът се мести DRAFT → LOCKED и не се позволяват по-нататъшни мутации. Линиите, snapshots и audit log запазват точното състояние за всеки бъдещ одит.
Всеки profile ред съхранява осигурителните тавани за годината (min/max insurable income в центове) и ставки като basis points (1410 = 14.10%) за ДОО, ДЗПО, ЗО на employer/employee, плюс 10% flat ДОД ставка. minimumByCategory улавя per-role минималните брackets.
Всеки PayrollLine.computedSnapshot съхранява: base gross, overtime gross при OT multiplier, tips, total gross, insurable base след clamp, employee/employer insurance basis points used, all three computed insurance shares, taxable base, данък, нетно. Линия може да бъде ре-извлечена без живо profile или жива заплата.
Декларация образец 1 + 6 emit-ват като schema-friendly XML. Pin-ваме NRA schema версия година по година (XSDs идват с генератора под schemas/) и re-валидираме преди всяко годишно release. XML-ът е каквото счетоводителят upload-ва в NRA портала.
Два bank-targeted CSVs: bg-bank-transfer за NRA central-account contributions (един ред на фонд: ДОО, ДЗПО, ЗО, ДОД); bg-net-transfer за служителското нетно възнаграждение (един ред на служител с IBAN от StaffEmploymentBg). И двата се импортират в основните BG bank bulk-payment workflows.
Край на март: отворете Персонал → Ведомост, генерирайте run за март, свалете bg-deklaracia-1 + 6, предайте на счетоводителя. Те upload-ват в NRA портала в петък следобед. Общо време: 5 минути. Предишният поток с отделен payroll vendor отнемаше 4 дни back-and-forth.
Нов служител се присъединява на 17-ти. Генераторът хваща само часовете му от 17-ти нататък, прилага заплатата в сила в края на периода и записва partial-month PayrollLine. Декларация образец 1 редът отчита правилния daysInsured.
Сервитьор с insuranceCategory = 'I' (тежък труд) получава по-висок минимален insurable base от minimumByCategory на profile-а. Генераторът прилага правилния минимум на служител; snapshot-ът записва коя категория е използвана.
Tip-pool разпределения за периода текат в PayrollLine.tipsCents и се добавят към брутото. Insurance и данък математиката работи срещу по-високия base, точно както NRA очаква за tipped income.
Служител оспорва май ведомостта си. Отворете Персонал → Ведомост, намерете май run-а, кликнете линията, видите пълния computedSnapshot — точни часове, точна wage rate, точни insurance shares, точно нетно. Re-derive за 30 секунди; покажете на служителя.
Януари 2027: NRA публикува нови ставки. Ordering.Tools екипът добавя 2027 BgPayrollProfile ред с обновени basis points и тавани. Всеки run за периоди в 2027 picks нов ред автоматично; run-ове за 2026 периоди продължават да използват 2026 реда. Year boundaries handled transparently.
BG payroll има три болезнени артефакта: ведомост, NRA monthly filings (Декларация образец 1 на служител + образец 6 summary) и bank-transfer файлове за NRA contributions и employee net pay. Повечето ресторанти изнасят това на vendor и плащат 50-100 BGN на служител на месец. Ordering.Tools генерира всичките три от wage и clock данните, които платформата вече има — счетоводителят на заведението получава portal-ready XML, XLSX salary register и bank-importable CSV с един клик. Vendor cost изчезва; audit trail е вграден.
BG insurance тавани и ставки се променят почти всеки януари. Naive payroll система съхранява текущите ставки като константи и тихо се чупи всеки януари, когато ставките се променят. Year-keyed profile таблица, индексирана по година, решава това: 2026 има реда си, 2027 има реда си, генераторът избира base period's year. Стари периоди винаги използват оригиналните ставки; нови периоди picks нови ставки на годишния boundary; без manual code change в полунощ на 31 декември.
Когато служител оспорва ведомост от 6 месеца назад, не искате да re-look-up-ватe BgPayrollProfile реда за този период и да опитате да възпроизведете математиката от нулата. Всеки PayrollLine съхранява пълния computedSnapshot — точни часове, точна wage rate, точни insurance shares, точно нетно — в момента на генериране. Snapshot-ът е JSON колона; query-ването му е една SQL row read; обясняването на ведомост е четене на JSON-а на глас. Без re-derivation, без maths грешки, без „съжаляваме, системата не може да каже защо“.
Казваме ясно в admin UI: „Този модул генерира готови за подаване файлове, но окончателната отговорност за коректността на данните и спазването на нормативните изисквания е на работодателя. Препоръчваме периодична проверка от лицензиран счетоводител.“ Този език не казва „use at your own risk“ — казва „системата изчислява; счетоводителят одитира“. Разделението на отговорности е здраво: софтуерът е бърз и никога не пропуска ред; хората хващат случаите, на които софтуерът не е учен (заплатно авансиране, eднократен бонус, category-change в средата на годината).