Polish B2B Tax Calculator
Calculate your net income as a B2B contractor in Poland. Compare tax forms, ZUS contributions, and find the best option.
- 4 tax forms -- Progressive scale (12%/32%), Linear tax (19%), Ryczalt (2-17%), IP BOX (5%)
- ZUS contribution variants -- Full ZUS, preferential (first 2 years), health-only (ulga na start), or no ZUS
- Health insurance calculations -- Accurate per-tax-form health insurance with bracket-based amounts for ryczalt
- 2025 / 2026 tax year support -- Up-to-date constants for minimum wage, average salary, ZUS bases, and health brackets
- IP BOX with adjustable ratio -- Slider to set qualifying income percentage (5% rate on IP portion, 19% on the rest)
- Multiple rate inputs -- Enter your rate as hourly, daily, monthly, or annual
- Real-time calculations -- All results update instantly as you change inputs
- Monthly breakdown -- Detailed view of gross, ZUS social, health insurance, PIT, costs, and net
- Effective tax rate -- See your total tax burden as a percentage at a glance
- VAT support -- Optionally add 23% VAT to see invoice gross amounts
- Working days customization -- Adjust working days per year and paid vacation days
- Fully client-side -- No backend, no data sent anywhere. All calculations happen in your browser
- Mobile responsive -- Works on desktop, tablet, and mobile screens
| Layer | Technology |
|---|---|
| Framework | Nuxt 4 (v4.3) |
| UI Library | Vue 3 (v3.5) |
| Language | TypeScript (strict) |
| Styling | Tailwind CSS via @nuxtjs/tailwindcss |
| Fonts | Inter via @nuxtjs/google-fonts |
| Package Manager | npm |
- Node.js >= 18.x
- npm (comes with Node.js)
-
Clone the repository:
git clone https://github.com/whoisarjen/ratio.git cd ratio -
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open http://localhost:3000 in your browser.
# Build the application
npm run build
# Generate static site
npm run generate
# Preview the production build locally
npm run previewratio/
├── app/
│ ├── assets/css/main.css # Tailwind base styles and component classes
│ ├── composables/
│ │ ├── useConstants.ts # Tax year constants (2025/2026), lump sum rates
│ │ └── useTaxCalculator.ts # Core calculation engine (ZUS, health, PIT)
│ ├── types/
│ │ └── calculator.ts # TypeScript interfaces and type definitions
│ ├── layouts/
│ │ └── default.vue # App shell with header and footer
│ ├── pages/
│ │ └── index.vue # Main calculator page
│ └── app.vue # Root component
├── public/ # Static assets (favicon, logo)
├── nuxt.config.ts # Nuxt configuration
├── tailwind.config.ts # Tailwind theme (brand/surface colors, shadows)
├── tsconfig.json # TypeScript configuration
└── package.json # Dependencies and scripts
The calculator follows Polish tax law for B2B (sole proprietorship) contractors:
- Gross income is calculated from the input rate (hourly/daily/monthly/annual) and working days
- ZUS social contributions are computed on the appropriate base (full, preferential, or zero)
- Health insurance is calculated per tax form:
- Progressive: 9% of income (revenue - costs - ZUS social), minimum applies
- Linear / IP BOX: 4.9% of income, minimum applies
- Ryczalt: fixed monthly amounts based on annual revenue brackets
- PIT is calculated according to the chosen tax form, with applicable deductions
- Net income = Gross - ZUS social - Health insurance - PIT - Costs
Labor Fund (Fundusz Pracy) is displayed but NOT deducted from net income, matching the behavior of podatki.wtf.
Contributions are welcome! Please read the Contributing Guide before submitting a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.
Built with care for the Polish B2B community.
Star this repo if you find it useful!