Social Insurance Calculator
You got an offer — 20,000 RMB/month. How much do you actually take home? HR says social insurance takes a big chunk, but the exact amount varies by city.
slex: "0.1",
namespace: "example_salary_calculator",
g: {
base: 20000,
city: "beijing",
rates: {
beijing: { pensionP: 8, medicalP: 2, unemploymentP: 0.5, pensionC: 16, medicalC: 8, unemploymentC: 0.5, injury: 0.2, maternity: 0.8, housing: 12 },
shanghai: { pensionP: 8, medicalP: 2, unemploymentP: 0.5, pensionC: 16, medicalC: 8, unemploymentC: 0.5, injury: 0.2, maternity: 0.8, housing: 7 },
guangzhou: { pensionP: 8, medicalP: 2, unemploymentP: 0.5, pensionC: 16, medicalC: 8, unemploymentC: 0.5, injury: 0.2, maternity: 0.8, housing: 5 },
shenzhen: { pensionP: 8, medicalP: 2, unemploymentP: 0.5, pensionC: 16, medicalC: 8, unemploymentC: 0.5, injury: 0.2, maternity: 0.8, housing: 5 }
},
currentRate: function () { return this.rates[this.city] || this.rates.beijing; },
personalRate: function () { var r = this.currentRate(); return r.pensionP + r.medicalP + r.unemploymentP + r.housing; },
companyRate: function () { var r = this.currentRate(); return r.pensionC + r.medicalC + r.unemploymentC + r.injury + r.maternity + r.housing; },
personalTotal: function () { return this.base * this.personalRate() / 100; },
companyTotal: function () { return this.base * this.companyRate() / 100; },
total: function () { return this.personalTotal() + this.companyTotal(); },
takeHome: function () { return this.base - this.personalTotal(); },
cityLabel: function () { return { beijing: "Beijing", shanghai: "Shanghai", guangzhou: "Guangzhou", shenzhen: "Shenzhen" }[this.city] || this.city; }
},
layout: {
"section:salary": {
eyebrow: "Calculator",
title: "Social Insurance Calculator",
subtitle: "Enter pre-tax salary and city to calculate social insurance breakdown in real time.",
"grid:params": {
columns: 1, mdColumns: 2,
"column:baseField": {
"input:base": { label: "Pre-tax salary", "$value": "g.base", type: "number", unit: "RMB/mo", onchange: "g.base = Number($event || 0)" },
"slider:base": { label: "Pre-tax salary", "$value": "g.base", min: 3000, max: 50000, step: 500, unit: "RMB", onchange: "g.base = Number($event)" }
},
"column:cityField": {
"select:city": {
label: "City",
"$value": "g.city",
options: [
{ label: "Beijing", value: "beijing" },
{ label: "Shanghai", value: "shanghai" },
{ label: "Guangzhou", value: "guangzhou" },
{ label: "Shenzhen", value: "shenzhen" }
],
onchange: "g.city = String($event)"
}
}
},
"grid:summary": {
columns: 1, mdColumns: 3,
"stat:personal": { label: "Personal deduction", "$value": "g.personalTotal().toFixed(0)", unit: "RMB" },
"stat:company": { label: "Employer contribution", "$value": "g.companyTotal().toFixed(0)", unit: "RMB" },
"stat:takehome": { label: "Take-home pay", "$value": "g.takeHome().toFixed(0)", unit: "RMB" }
}
}
}
}Try switching cities — the housing fund ratio varies a lot (12% in Beijing vs 7% in Shanghai), which can make hundreds of RMB difference in take-home pay.
slex: "0.1",
namespace: "example_salary_calculator",
layout: {
"card:detail": {
title: "Detailed Breakdown",
"grid:personal": {
columns: 1, mdColumns: 4,
"stat:pension_p": { label: "Pension (8%)", "$value": "(g.base * 0.08).toFixed(0)", unit: "RMB" },
"stat:medical_p": { label: "Medical (2%)", "$value": "(g.base * 0.02).toFixed(0)", unit: "RMB" },
"stat:unemployment_p": { label: "Unemployment (0.5%)", "$value": "(g.base * 0.005).toFixed(0)", unit: "RMB" },
"stat:housing_p": { label: "Housing fund", "$value": "(g.base * g.currentRate().housing / 100).toFixed(0)", unit: "RMB" }
},
"grid:company": {
columns: 1, mdColumns: 4,
"stat:pension_c": { label: "Pension (16%)", "$value": "(g.base * 0.16).toFixed(0)", unit: "RMB" },
"stat:medical_c": { label: "Medical (8%)", "$value": "(g.base * 0.08).toFixed(0)", unit: "RMB" },
"stat:unemployment_c": { label: "Unemployment (0.5%)", "$value": "(g.base * 0.005).toFixed(0)", unit: "RMB" },
"stat:other_c": { label: "Injury + Maternity", "$value": "(g.base * 0.01).toFixed(0)", unit: "RMB" }
},
"callout:note": {
"$tone": "g.personalTotal() > 3000 ? 'warning' : 'info'",
"$text": "g.personalTotal() > 3000 ? 'Personal deduction exceeds 3000 RMB — take-home pay may be lower than expected.' : 'Higher housing fund ratio means less take-home pay, but the fund is withdrawable.'"
}
}
}
}| City | Pension | Medical | Unemployment | Housing Fund | Personal Total |
|---|---|---|---|---|---|
| Beijing | 8% | 2% | 0.5% | 12% | 22.5% |
| Shanghai | 8% | 2% | 0.5% | 7% | 17.5% |
| Guangzhou | 8% | 2% | 0.5% | 5% | 15.5% |
| Shenzhen | 8% | 2% | 0.5% | 5% | 15.5% |