Open Net Worth
Open Net Worth는 직접 운영하는 오픈소스 개인 AI 자산 비서로, 전체 재무를 하나의 원장에 기록하고 사용자가 제어하는 AI가 관리
시간제 근무자용: 근무표를 올리면 월 급여와 OB 수당을 현지 브라우저에서 계산해 줍니다
För dig som jobbar i butik och har timlön: ladda upp schemat och se vad månaden faktiskt ger, med OB-tillägg enligt Detaljhandelsavtalet. Allt räknas ut lokalt i webbläsaren.
금융TypeScript · JavaScriptGitHub @abboud-said온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Lön med OB-tillägg för butiksanställda med timlön. Ladda upp schemat, se vad månaden ger. OB-regler enligt Detaljhandelsavtalet §8.1. Helt klientsida.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A web app for hourly-paid retail workers in Sweden. Upload your schedule, get what the month actually pays — OB (obekväm arbetstid) supplements, tax and net pay, with every hour attributed to the rule that paid for it. Detaljhandelsavtalet §7.3 settles the pay form: a heltidsanställd is always on månadslön, while a deltidsanställd is on timlön by default, moving to månadslön only if their hours are averaged over 11+ weeks or they agree to it.README 전문 보기 ↗
A web app for hourly-paid retail workers in Sweden. Upload your schedule, get what the month actually pays — OB (obekväm arbetstid) supplements, tax and net pay, with every hour attributed to the rule that paid for it.
Detaljhandelsavtalet §7.3 settles the pay form: a heltidsanställd is always on månadslön, while a deltidsanställd is on timlön by default, moving to månadslön only if their hours are averaged over 11+ weeks or they agree to it.
Someone on a monthly salary already knows roughly what lands in their account. Someone paid by the hour, on a schedule that shifts week to week with OB spread unevenly across it, does not. That second group is who this is for — part-time store staff, which is most of Swedish retail.
.csv/.xlsx export, text pasted from a PDF
or email, or shifts typed in by handEvery employer runs a different scheduling system, and a parser can only be written for a format someone has actually seen. So there are three routes in, and the last one always works:
.csv or .xlsx. Columns are found by their headings, in
Swedish or English. If the headings are unfamiliar the file is not rejected —
the columns are listed with sample values and you point out which is the
date, the start and the end.sjuk or semester becomes that kind of leave;
a semester line needs no times. Dates are parsed strictly, since guessing
day-versus-month would move a whole month onto the wrong weekdays, and
weekday is what decides OB.A date is work or leave, never both: adding one removes the other on that date and says so. Any shift in the list can be marked sick or semester, and back.
Taken verbatim from §8.1 of Detaljhandelsavtalet, 1 April 2025 – 31 March 2027 (Svensk Handel / Handelsanställdas förbund):
| When | Pays |
|---|---|
| måndag–fredag kl. 18.15 – 20.00 | 50 % |
| måndag–fredag efter kl. 20.00 | 70 % |
| lördagar efter kl. 12.00 | 100 % |
| söndagar och helgdagar | 100 % |
Med lördagar jämställs jul-, nyårs- och midsommarafton.
Supplements are paid on top of the base rate: an hour at OB 50% with a base of 177.44 kr/h pays 177.44 + 88.72 kr.
A rule set is a list of tiers (a name and a supplement percentage) and a list of time windows (day types, a start and end time, and the tier they pay). Any hour not covered by a window pays the base rate only. The preset is just the starting point — a different agreement, or a local addition like Coop's extra 05.00–06.00 tier, can be entered by hand.
A window targets day types, which is what makes "söndagar och helgdagar" work. Beyond the seven weekdays there are two more:
Detaljhandelsavtalet sets no minimum or maximum length for a rast — the schedule decides. What it does settle is whether the time is paid:
Arbetstidslagen §15 entitles you to a rast after at most five hours of work, so any shift longer than that with no break in the file is flagged — usually it means the export left the break out.
Leave days sit in the export with their scheduled hours intact, so they have to be told apart from work — and from each other, since each is paid differently. A day counts as leave only when the absence columns cover the whole shift; those columns routinely carry a minute or two on ordinary days, meaning someone arrived late.
Checked against three real Bestseller time exports and the payslips they produced. June and August 2026 match the payslip to the öre on gross, and to the krona on tax and on what was paid out; July is 1,77 kr under on gross, which is the payslip splitting one month over two stores and rounding each half on its own — something the export does not show. Every OB tier is exact. August is the sick month: two separate sick days, two karens periods, 4,16 h of sjuklön to the öre, and two days of approved mertid read from the Godkänd column.
The app rounds the way payroll does — the month's hours per row to two decimals, the rate to the öre, each row to the öre, the payout to whole kronor — because a krona's difference can cross a skattetabell bracket edge and move the tax by fifty.
There is no backend, no account, and no analytics. The schedule is parsed in the browser and the results never leave it.
Agreement periods change. If you are reading this after April 2027, re-check the figures against the current avtal.
Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4. Every route is statically prerendered — the app is entirely client-side.
The .xlsx reader is hand-rolled: it walks the zip's central directory and
inflates the entries with the browser's built-in DecompressionStream, so the
app ships no spreadsheet dependency. Persisted state is exposed to React through
useSyncExternalStore, which also picks up changes from other open tabs.
lib/
rules.ts tiers, windows, preset, day classification, validation
holidays.ts svenska helgdagar, incl. Easter-derived dates
calc.ts shift splitting and pay totals
parse.ts csv + xlsx readers, schedule column detection
storage.ts localStorage load/save
store.ts useSyncExternalStore bindings
i18n.ts sv/en strings
time.ts time parsing and formatting
npm install
npm run dev
Then open http://localhost:3000.
e2e/