Error message
Deprecated function: Creation of dynamic property Drupal\tablefield\TableValue::$value is deprecated in Drupal\Core\TypedData\TypedData->setValue() (line 102 of core/lib/Drupal/Core/TypedData/TypedData.php).
Drupal\Core\TypedData\TypedData->setValue(NULL, ) (Line: 87) Drupal\Core\TypedData\Plugin\DataType\Map->setValue(Array, ) (Line: 125) Drupal\Core\Field\FieldItemBase->setValue(Array, ) (Line: 206) Drupal\tablefield\Plugin\Field\FieldType\TablefieldItem->setValue(Array, ) (Line: 208) Drupal\Core\TypedData\TypedDataManager->getPropertyInstance(Object, 0, Array) (Line: 91) Drupal\Core\Field\FieldTypePluginManager->createFieldItem(Object, 0, Array) (Line: 41) Drupal\Core\Field\FieldItemList->createItem(0, Array) (Line: 69) Drupal\Core\TypedData\Plugin\DataType\ItemList->setValue(Array, ) (Line: 107) Drupal\Core\Field\FieldItemList->setValue(Array, ) (Line: 208) Drupal\Core\TypedData\TypedDataManager->getPropertyInstance(Object, 'field_calc_table', Array) (Line: 83) Drupal\Core\Field\FieldTypePluginManager->createFieldItemList(Object, 'field_calc_table', Array) (Line: 633) Drupal\Core\Entity\ContentEntityBase->getTranslatedField('field_calc_table', 'x-default') (Line: 597) Drupal\Core\Entity\ContentEntityBase->get('field_calc_table') (Line: 325) Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'default') (Line: 281) Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Line: 18) Drupal\paragraphs\ParagraphViewBuilder->buildMultiple(Array) (Line: 238) Drupal\Core\Entity\EntityViewBuilder->build(Array) call_user_func_array(Array, Array) (Line: 111) Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 859) Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 421) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 68) __TwigTemplate_291debf4453c7ba2e34da4fa4cd83699->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('themes/techprosolutions/templates/field/field.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 111) __TwigTemplate_ff95cc8dbd011c21d5f5e7f83f8118b4->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('modules/custom/easytax_calculators/templates/ecp-calculator-page.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('ecp_calculator_page', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array, ) (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 627) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 21)Deprecated function: Creation of dynamic property Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter::$ModuleHandler is deprecated in Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->__construct() (line 57 of modules/contrib/tablefield/src/Plugin/Field/FieldFormatter/TablefieldFormatter.php).
Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->__construct('tablefield', Array, Object, Array, 'hidden', 'default', Array, Object, Object) (Line: 64) Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter::create(Object, Array, 'tablefield', Array) (Line: 64) Drupal\Core\Field\FormatterPluginManager->createInstance('tablefield', Array) (Line: 126) Drupal\Core\Field\FormatterPluginManager->getInstance(Array) (Line: 205) Drupal\Core\Entity\Entity\EntityViewDisplay->getRenderer('field_calc_table') (Line: 241) Drupal\Core\Entity\Entity\EntityViewDisplay->buildMultiple(Array) (Line: 339) Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'default') (Line: 281) Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Line: 18) Drupal\paragraphs\ParagraphViewBuilder->buildMultiple(Array) (Line: 238) Drupal\Core\Entity\EntityViewBuilder->build(Array) call_user_func_array(Array, Array) (Line: 111) Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 859) Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 421) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 68) __TwigTemplate_291debf4453c7ba2e34da4fa4cd83699->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('themes/techprosolutions/templates/field/field.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 111) __TwigTemplate_ff95cc8dbd011c21d5f5e7f83f8118b4->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('modules/custom/easytax_calculators/templates/ecp-calculator-page.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('ecp_calculator_page', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array, ) (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 627) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 21)Warning: Undefined array key "caption" in Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->viewElements() (line 150 of modules/contrib/tablefield/src/Plugin/Field/FieldFormatter/TablefieldFormatter.php).
Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->viewElements(Object, 'en') (Line: 91) Drupal\Core\Field\FormatterBase->view(Object, 'en') (Line: 268) Drupal\Core\Entity\Entity\EntityViewDisplay->buildMultiple(Array) (Line: 339) Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'default') (Line: 281) Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Line: 18) Drupal\paragraphs\ParagraphViewBuilder->buildMultiple(Array) (Line: 238) Drupal\Core\Entity\EntityViewBuilder->build(Array) call_user_func_array(Array, Array) (Line: 111) Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 859) Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 421) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 68) __TwigTemplate_291debf4453c7ba2e34da4fa4cd83699->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('themes/techprosolutions/templates/field/field.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 111) __TwigTemplate_ff95cc8dbd011c21d5f5e7f83f8118b4->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('modules/custom/easytax_calculators/templates/ecp-calculator-page.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('ecp_calculator_page', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array, ) (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 627) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 21)
Salary Calculator (In-Hand)
CTC to monthly take-home — employee and employer PF, gratuity accrual, professional tax and FY 2025-26 new-regime income tax all accounted for.
What this in-hand salary calculator does
The salary in your offer letter and the salary in your bank account are two different numbers. CTC — cost to company — bundles in things you never see as cash: the employer's PF contribution and the gratuity your employer sets aside. What remains is then trimmed by your own PF contribution, professional tax and income tax. This calculator walks that whole chain and shows what actually lands in your bank account each month.
It models the standard decomposition: basic salary as 40% or 50% of CTC, PF at 12% on the wage base you choose, gratuity accrual at 4.81% of basic, and FY 2025-26 new-regime income tax with the ₹75,000 standard deduction — which is why a ₹12,00,000 CTC pays zero income tax and still takes home ₹93,795 a month.
How CTC becomes in-hand
In-hand = CTC − employer PF − gratuity accrual − employee PF − professional tax − income tax
- Basic salary — CTC × the basic percentage you pick (40% or 50%)
- Employer PF — 12% of the PF wage base (₹15,000 a month under the EPFO ceiling, or full basic); subtracted from CTC because it goes to your PF account, not your bank
- Gratuity accrual — 4.81% of basic, the annualized cost of the 15-days-per-year gratuity promise
- Employee PF — matches the employer contribution, deducted from your gross
- Professional tax — a state levy; varies by state and is zero in some
- Income tax — full new-regime slab computation on your gross salary, standard deduction and 87A rebate included
How to use this calculator
- Enter your annual CTC from the offer letter or appraisal.
- Pick the basic salary percentage — 50% of CTC is the common structure; some employers use 40%.
- Choose the PF wage base: most employers compute PF on the ₹15,000-a-month statutory ceiling; some contribute on full basic, which lowers take-home but grows the corpus faster.
- Set the professional tax per month. This varies by state — around ₹200 a month in Maharashtra or Karnataka (capped at ₹2,500 a year), while Rajasthan levies none, so slide it to 0 if you work there.
- Pick the financial year for the tax slabs.
The result splits your CTC into every deduction and ends at the monthly in-hand figure.
A worked example
₹12,00,000 CTC, 50% basic, PF on the ₹15,000 ceiling, ₹200 a month professional tax, FY 2025-26:
- Basic salary: ₹6,00,000 · employer PF ₹21,600 · gratuity accrual ₹28,860
- Gross salary: ₹12,00,000 − 21,600 − 28,860 = ₹11,49,540
- Income tax: taxable ₹10,74,540 after the standard deduction — under ₹12,00,000, so the 87A rebate makes it ₹0
- Less employee PF ₹21,600 and professional tax ₹2,400 → annual in-hand ₹11,25,540
- Monthly in-hand: ₹93,795 — total deductions from CTC ₹74,460
Monthly in-hand at different CTCs (FY 2025-26)
| Annual CTC | Income tax | Monthly in-hand | Kept of CTC |
|---|---|---|---|
| ₹6,00,000 | ₹0 | ₹44,998 | 90.0% |
| ₹8,00,000 | ₹0 | ₹61,263 | 91.9% |
| ₹12,00,000 | ₹0 | ₹93,795 | 93.8% |
| ₹18,00,000 | ₹1,37,303 | ₹1,31,151 | 87.4% |
| ₹30,00,000 | ₹4,46,550 | ₹2,02,975 | 81.2% |
Assumes 50% basic, PF on the ₹15,000 ceiling, ₹200 a month professional tax, new regime. Note the jump at ₹18,00,000: once taxable income crosses the ₹12,00,000 rebate line, slab tax applies to all of it — which is why the share of CTC you keep drops.
Two chunks never reach your bank at all — the employer's PF contribution and the gratuity accrual are part of CTC but flow into your retirement benefits. From what remains, your own 12% PF, professional tax and income tax are deducted. On a ₹12,00,000 CTC these total ₹74,460 a year even with zero income tax.
It depends on your state: professional tax is a state levy constitutionally capped at ₹2,500 a year. Maharashtra and Karnataka charge around ₹200 a month at typical salaries; Rajasthan levies no professional tax at all, so set the slider to 0 if you work there.
EPFO's statutory wage ceiling is ₹15,000 a month — employers are only obliged to contribute 12% of that (₹1,800 a month), and many stop there. Others contribute 12% of full basic, which reduces your take-home but builds a larger corpus. Pick whichever your payslip shows.
The new regime, which is the default and the better deal for most salary-only earners: with the ₹75,000 standard deduction and the 87A rebate, salary income up to ₹12,75,000 pays zero tax in FY 2025-26. If you claim large old-regime deductions, compare with our income tax calculator.
Not from your salary — from your CTC. The 4.81% of basic is what your employer sets aside each year to fund the gratuity payable under the Payment of Gratuity Act (15 days' pay per year of service, generally after 5 years of service). You receive it when you leave, not monthly.
Because HRA exemption is an old-regime benefit and this model taxes salary under the new regime, where HRA is fully taxable anyway. The simplified decomposition treats everything above basic as a taxable allowance — for an itemized old-regime comparison, use the full regime tool.
