Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Calculator interactiv pentru proiectul noii legi a salarizării personalului bugetar (MMFTSS, 25 mai 2026). Wizard UX + MCP server pentru AI.
翻译准备中
正在加载完整 README。
查看完整 README ↗Webapp interactiv pentru calculul salariului brut/net al personalului plătit din fonduri publice conform proiectului de lege a salarizării (MMFTSS 2026) — în toate cele trei variante oficiale publicate: 25 mai, 17 iulie și 20 august 2026.
⚠️ Proiectul de lege NU a fost adoptat. Pe 26 august 2026 partidele au anunțat că nu au ajuns la consens (jalonul PNRR de 770 mil. € a fost pierdut) și s-au angajat să adopte legea până la sfârșitul anului. Instrumentul este neoficial și informativ. Valoarea de referință pentru anii următori urmează a fi stabilită anual prin Hotărâre de Guvern.
Trei variante ale proiectului, selectabile din bara de sus (implicit: 20 august, ultimul text oficial). Fiecare variantă are propriul set de coeficienți, valoarea de referință, grila soldelor de grad și trimiterile la articole:
| Variantă | Funcții indexate | Valoarea de referință | Intrare în vigoare | Diferența tranzitorie |
|---|---|---|---|---|
| I — 25 mai 2026 | 2.614 (2.627 rânduri) | 4.100 lei (2027) — art. 35 alin. (2) | 1 ianuarie 2027 | față de dec. 2026, până la 31 dec. 2031 (art. 32) |
| II — 17 iulie 2026 | 2.809 | 4.100 lei (dec. 2026 + 2027) — art. 36 alin. (2) | 1 decembrie 2026 | față de nov. 2026 (art. 33) |
| III — 20 august 2026 | 3.000 | 4.000 lei (dec. 2026 + 2027) — art. 38 alin. (3) | 1 decembrie 2026 | față de nov. 2026, fără limita 2031 (art. 33) |
Calculează salariul de bază (coeficient × valoare de referință + gradații)
Aplică gradații de vechime (0–5) conform art. 13 (identic în toate variantele)
Tratează corect cazurile speciale (funcții de conducere, Anexa V, Anexa IX, solda de grad pentru Anexa VI)
Adaugă sporuri configurabile (control financiar, fonduri EU, noapte, ore suplimentare, handicap, condiții de muncă și sporurile specifice pe anexe) cu plafon 20%
Calculează brut → net (CAS 25%, CASS 10%, impozit 10%)
Estimează diferența salarială tranzitorie (art. 32 / art. 33, după variantă)
Expune totul ca server MCP (/api/mcp) și chat AI (/api/chat), cu parametrul varianta
Ce NU este modelat (depinde de acte ulterioare sau nu e un drept lunar): categoriile de unități sanitare și factorii de multiplicare pe grupe din Anexa II cap. II (varianta 20 august — se stabilesc prin HG), indemnizația pentru titlul științific de doctor (500 lei brut/lună, art. 39 în varianta din 20 august), premiul de performanță (art. 22). Anexa III cap. V (case de cultură) lipsește din xlsx-ul din 20 august.
public/sources/ (text, coeficienți, anexe, calendar consultări)public/sources/proiect-coeficienti-16-iulie-2026.xlsx (oglinda SNPPC a fișierului MMFTSS) și proiect-lege-salarizare-16-iulie-2026.docxpublic/sources/Proiect-COEFICIENTI-1-8-20-august-2026.xlsx și Proiect-lege-20-august-2026.pdfMetadatele fiecărei variante (valoare de referință, articole, note despre ce s-a schimbat, surse) sunt în data/variants/index.json.
xlsx, devDependency) pentru importul coeficiențilorCerințe: Node.js 22 (vezi Dockerfile), npm 10.
npm install
npm run dev # http://localhost:3000
npm run lint # ESLint (preset Next.js)
npm run build # production build (standalone)
npm run verify:variants # verifică seturile de coeficienți pe variante (rulat și în CI)
Variabile de mediu (toate opționale — calculatorul merge fără ele):
cp .env.example .env.local # apoi completează ce ai nevoie
| Variabilă | Rol |
|---|---|
NVIDIA_API_KEY | cheie NVIDIA NIM pentru widget-ul de chat AI (/api/chat); fără ea, ruta răspunde 503 NOT_CONFIGURED |
NVIDIA_MODEL | modelul folosit de chat (implicit meta/llama-3.3-70b-instruct) |
OAUTH_SIGNING_SECRET | secretul HMAC (min. 32 caractere) pentru token-urile OAuth ale serverului MCP (/oauth/*); fără el OAuth e dezactivat (503), iar /api/mcp rămâne public — nu există secret de rezervă |
OAUTH_REDIRECT_ALLOWLIST | opțional: redirect_uri exacte suplimentare (separate prin virgulă); implicit doar conectorul Claude, ChatGPT și localhost |
PUBLIC_HOSTS | opțional: domeniile pe care răspunde serverul, separate prin virgulă (implicit salarii.romaniatransparenta.eu,salarizare.zed-zen.com). Metadatele OAuth folosesc gazda cererii doar dacă e în listă; altfel PUBLIC_BASE_URL sau primul domeniu. Antetele Host/X-Forwarded-Host nu mai pot muta issuer-ul pe alt domeniu |
OAUTH_TOKEN_EPOCH | opțional, implicit 1. Token-urile de acces trăiesc o oră, refresh token-urile 30 de zile (rotite la fiecare folosire); crește valoarea ca să retragi toate token-urile emise |
Build Docker identic cu cel din producție:
docker build -t salarizare-bugetari .
docker run --rm -p 3000:3000 --env-file .env.local salarizare-bugetari
CI (GitHub Actions, .github/workflows/ci.yml) rulează npm ci, npm run lint, npm run build, npm run verify:variants și npm audit --audit-level=high la fiecare push pe master și la fiecare PR.
Configurat pentru deploy via Docker pe Coolify, cu DNS la Cloudflare.
Push pe GitHub:
git init && git add -A && git commit -m "init"
gh repo create salarizare-bugetari --public --source=. --push
În Coolify (panou Hetzner):
https://github.com/<user>/salarizare-bugetarisalarii.romaniatransparenta.eu (sau alt subdomeniu)DNS Cloudflare:
salarii → <IP-server> sau <server>.coolifyAuto-deploy on push: configurat default de Coolify când conectezi GitHub.
Pagină a site-ului România Transparentă (din octombrie 2026): calculatorul e servit la
romaniatransparenta.eu/registre/salarii/ (basePath în next.config.mjs). nginx-ul site-ului face proxy spre
containerul aplicației, pe rețeaua Docker coolify, prin aliasul de rețea salarizare-bugetari
(Coolify → aplicație → Network → Network Aliases) și pune antetul/subsolul site-ului prin SSI (lib/shell.ts).
SALARII_REDIRECT=1 (variabilă de rulare): subdomeniile vechi trimit 301 spre site, cu aceeași cale și parametri.
/api, /mcp, /oauth și /.well-known rămân pe subdomeniu (conectorii MCP înregistrați). Implicit: oprit.SALARII_HOSTS (opțional): gazdele vechi, implicit salarii.romaniatransparenta.eu,salarizare.zed-zen.com.Când apare o variantă nouă a proiectului (sau un xlsx corectat), datele se regenerează cu importatorul din depozit — reproductibil, fără pași manuali:
# 1. Importă xlsx-ul; id-ul variantei = data publicării (ISO)
npm run import:coeficienti -- cale/catre/Proiect-COEFICIENTI-1-8.xlsx 2026-09-15 \
--compare data/variants/2026-08-20.min.json
# Rezultat: data/variants/2026-09-15.min.json (rândurile) și
# data/variants/2026-09-15.solde-grad.json (Anexa VI cap. I.2)
# Raportul de pe stdout listează TOT ce nu a putut fi interpretat: rânduri fără
# coeficient, coloane ignorate (sume în lei, factori), sheet-uri duplicate,
# coduri în alt format și diferențele de rânduri față de setul de referință.
# 2. Descrie varianta în data/variants/index.json (valoare de referință, articole,
# intrare în vigoare, surse, note) și înregistreaz-o în lib/variants.ts și
# lib/variants-data.ts (importurile JSON sunt statice).
# 3. Adaugă valorile-reper în scripts/verify-variants.mjs și rulează
npm run verify:variants
Opțiuni: --out-dir <dir> (implicit data/variants), --compare <ref.min.json>, --dry-run.
Reguli de interpretare (documentate și în antetul scriptului): coloanele de coeficient sunt cele cu valori în [0,05; 9,5]; etichetele „Grad I/Grad II”, „Nivel I/II”, „Grad managerial”, „minim/maxim”, „comandă/execuție” devin câmpul grad (un rând cu Grad I și Grad II → două înregistrări); Anexa IX cu coloane 2026/2027 … 2031 → o înregistrare cu coeficient = prima coloană și coeficientEsalonat = toate; soldele de grad (Anexa VI cap. I.2) merg în fișier separat, nu în lista de funcții; treapta de populație a sheet-urilor de administrație locală ajunge în subcapitol.
Setul din 25 mai (data/coefficients.min.json) este cel importat inițial și este păstrat neschimbat; importatorul rulat pe același xlsx produce 2.718 rânduri (față de 2.627) pentru că nu mai pierde rândurile cu „Nr. crt.” text și rândurile cu coeficienți identici pe coloane diferite.
.
├── app/
│ ├── layout.tsx # SEO meta + globals
│ ├── page.tsx # landing (banner, calculator, variante, surse)
│ ├── api/coeficienti/[varianta]/ # setul de coeficienți al unei variante (JSON)
│ ├── api/chat/ # chat AI (NVIDIA NIM) cu tool-urile din lib/tools.ts
│ └── api/mcp/ # server MCP (+ /oauth/*)
├── components/
│ ├── ModeSwitcher.tsx # selector variantă + mod (Ghidat / Expert)
│ ├── Wizard.tsx, Calculator.tsx # cele două interfețe de calcul
│ ├── BannerNeadoptat.tsx # starea proiectului (26 aug 2026)
│ ├── Variante.tsx # „Ce s-a schimbat între variante” + ce nu e modelat
│ └── Sources.tsx # documente sursă pe variantă
├── lib/
│ ├── tax.ts # calcul brut→net + gradații + sporuri (formule)
│ ├── variants.ts # metadatele variantelor (client-safe)
│ ├── variants-data.ts # seturile de coeficienți (server-only)
│ ├── varianta-context.tsx # varianta selectată, pentru componente
│ └── tools.ts # tool-urile MCP / chat
├── data/
│ ├── coefficients.min.json # varianta 25 mai (import inițial)
│ └── variants/ # index.json + seturi iulie/august + solde de grad
├── scripts/
│ ├── import-coeficienti.mjs # xlsx MMFTSS → .min.json
│ └── verify-variants.mjs # verificări rulate în CI
├── public/sources/ # copiile locale ale documentelor oficiale
├── Dockerfile # multi-stage build, standalone
└── next.config.mjs # output: 'standalone'
npm run lint, npm run build și npm run verify:variants (CI-ul le rulează automat). Nu modifica lib/tax.ts sau data/**/*.json în același PR cu schimbări de UI.MIT — © 2026 Alex Mantello (ZED-ZEN). Folosește, modifică, redistribuie. Datele oficiale aparțin Guvernului României.