https://github.com/theajack/salary
工资计算器(2022年最新计税规则)
https://github.com/theajack/salary
salary-calculator
Last synced: 13 days ago
JSON representation
工资计算器(2022年最新计税规则)
- Host: GitHub
- URL: https://github.com/theajack/salary
- Owner: theajack
- License: other
- Created: 2022-09-15T00:23:46.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-11-01T03:24:00.000Z (over 1 year ago)
- Last Synced: 2025-03-28T00:41:38.727Z (about 1 month ago)
- Topics: salary-calculator
- Language: TypeScript
- Homepage: https://theajack.github.io/salary
- Size: 495 KB
- Stars: 30
- Watchers: 2
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## [easy-salary](https://github.com/theajack/salary) (工资计算器)
**[在线使用](https://theajack.github.io/salary)**
扫描或wx搜索`收入详情计算器`使用小程序
适用于2022年新个税计算法的工资计算器,包含基础月薪、年终奖、五险一金、个人所得税计算
### 0. 使用
#### 1. 安装使用
```
npm i easy-salary
``````ts
import Salary from 'easy-salary';const result = (new Salary({
salary: 10000,
// ... 其他配置
})).calculate();
``````ts
// 传入的配置参数
interface Config {
salary?: number; // 基础工资
specialAdditionalDeduction?: number; // 每月专项附加扣除 租房扣除
yearEndAwardsNumber?: number; // 年终奖月数
yearEndAwards?: number; // 年终奖 0表示默认使用 年终奖月数
insuranceAndFundBase?: number; // 五险一金计算基础,为上一年度平均薪资,默认为salary
startingSalary?: number; // 个税起征点
insuranceAndFundRate?: IInsuranceAndFund; // 五险一金个人部分
insuranceAndFundRateOfCompany?: IInsuranceAndFund; // 五险一金公司部分
extraBonus?: number | number[]; // 每月额外奖金
housingFundRange?: IHousingFundRange; // 公积金计算上下限
}
interface IInsuranceAndFund {
pension?: number; // 养老保险
medicalInsurance?: number; // 医疗保险
unemploymentInsurance?: number; // 失业保险
injuryInsurance?: number; // 工伤保险
maternityInsurance?: number; // 生育保险
housingFund?: number; // 住房公积金
supplementaryFund?: number; // 补充住房公积金
}
interface IHousingFundRange {
min: number;
max: number;
}
```详细配置与返回结果请参考 [声明文件](https://github.com/theajack/salary/blob/master/src/calculator/index.d.ts) 或 [在线使用](https://theajack.github.io/salary)
**cdn 引入**
```html
const result = (new window.Salary({
salary: 10000,
// ... 其他配置
})).calculate();```
#### 2. 在线使用
[点击前往](https://theajack.github.io/salary)
### 1. 工资算法
分为基本工资和年终奖
#### 1.1 基本工资
几个概念
`累计应纳税所得额` = 累计应税收入 - 累计免税收入 - 累计减除费用 - 累计专项扣除 - 累计专项附加扣除 - 累计依法确定的其他扣除
`累计应税收入` = 月薪 * 月数
`累计免税收入` = 无 (这部分不清楚,目前当0处理)
`累计减除费用` = 起征点 (上海为5000) * 月数
`累计专项扣除` = 五险一金 * 月数 = 月薪 * (五险一金比例) * 月数
`累计专项附加扣除` = 专项扣除数值 * 月数 (就是个税app里填的 包括租房、房贷、赡养、子女教育等专项附加扣除)
`累计依法确定的其他扣除` = 无(这部分不清楚,目前当0处理)
所以
`累计应纳税所得额` = (月薪 - 0 - 起征点 - 月薪 * 五险一金比例 - 专项扣除数值 - 0) * 月数
`当月个税` = (累计应纳税所得额 * 预扣率 - 速算扣除数)- 累计减免税额【这部分不清楚,目前当0处理】 - 累计已缴税额
`税后收入` = 月薪 - 月薪 * 五险一金比例 - 当月个税
**预扣率与速算扣除数表**
```js
const levels = [
{value: 36000, rate: 0.03, deduction: 0},
{value: 144000, rate: 0.1, deduction: 2520},
{value: 300000, rate: 0.2, deduction: 16920},
{value: 420000, rate: 0.25, deduction: 31920},
{value: 660000, rate: 0.3, deduction: 52920},
{value: 960000, rate: 0.35, deduction: 85920},
{value: 0, rate: 0.45, deduction: 181920},
];
```规则是累计应纳税所得额
不超过36000,预扣率=3%,速算扣除数=0,
不超过144000,预扣率=10%,速算扣除数=2520,
后续依次类推
**五险一金比例**
上海市:
养老保险单位缴费费率为20%,个人缴费费率为8%;
医疗保险单位缴费比例为10%,个人缴费比例为2%;
工伤保险单位缴费比例为0.2-1.9%,个人不缴费;
生育保险单位缴费比例为1%,个人不缴费;
失业保险单位缴费比例为1%,个人缴费比例为0.5%;
住房公积金单位和个人缴费比例各为7%。
如果有补充公积金的话另算: 一般补充为5%
**住房公积金缴存基数范围**
上海市:住房公积金和补充住房公积金缴存基数最高不超过`34188`元, 最低不低于`2590`元
也就是工资超过 34188 按照 34188计算,低于 2590 按 2590计算
#### 1.2 年终奖部分
年终奖部分计税规则
1、发放年终奖的当月工资高于`个税起征点`时,年终奖扣税方式为:年终奖乘税率-速算扣除数,税率是按年终奖/12作为“应纳税所得额”对应的税率。
2、当月工资低于`个税起征点`元时,年终奖个人所得税=(年终奖-(`个税起征点`-月工资))乘税率-速算扣除数,税率是按年终奖-(`个税起征点`-月工资)除以12作为“应纳税所得额”对应的税率。
年终奖应纳税所得额与税率和速算扣除数关系
表如下
```js
const levels = [
{value: 3000, rate: 0.03, deduction: 0},
{value: 12000, rate: 0.1, deduction: 210},
{value: 25000, rate: 0.2, deduction: 1410},
{value: 35000, rate: 0.25, deduction: 2660},
{value: 55000, rate: 0.3, deduction: 4410},
{value: 80000, rate: 0.35, deduction: 7360},
{value: 0, rate: 0.45, deduction: 15160},
];
```规则是年终奖应纳税所得额
不超过3000,预扣率=3%,速算扣除数=0,
不超过12000,预扣率=10%,速算扣除数=210,
后续依次类推
**综上整理出公式**
> 年终奖税前 = 月薪 * 年终奖系数
>> 当 月薪 > 起征点:
>>> 年终奖税率、速算扣除数 = 查表(年终奖税前 / 12)
>>> 年终奖个人所得税 = 年终奖税前 * 税率 - 速算扣除数
>> 当 月薪 < 起征点
>>> 年终奖税率、速算扣除数 = 查表( 年终奖 - ( 个税起征点 - 月薪 ))/ 12)
>>> 年终奖个人所得税 = (年终奖税前 - ( 个税起征点 - 月薪 ) ) * 税率 - 速算扣除数
> 然后年终奖税后收入
> 年终奖税后收入 = 年终奖税前 - 年终奖个人所得税
#### 1.3 示例
综上,那么可以举个例子
假设张三月工资3万(抬高工资是为了更方便体现累计跳档),年终奖系数为2个月,五险一金是 22.5%,每月专项附加扣除为1500
调用 `easy-salary` 计算
```js
calculateSalary({
salary: 30000, // 月薪
specialAdditionalDeduction: 1500, // 每月专项附加扣除 租房扣除
yearEndAwardsNumber: 2, // 年终奖月数
startingSalary: 5000, // 个税起征点
insuranceAndFundRate: {
pension: 0.08, // 养老保险 个人缴费费率为8%;
medicalInsurance: 0.02, // 医疗保险 个人缴费比例为2%;
unemploymentInsurance: 0.005, // 失业保险 个人缴费比例为0.5%;
housingFund: 0.07, // 住房公积金 7%
supplementaryFund: 0.05, // 补充公积金 5%
},
})
```得到结果:
```js
{
salaryAfterTax: [22747.5, 22747.5, 21750, 21575, 21575, 21575, 21575, 21575, 20900, 19900, 19900, 19900],
totalSalaryAfterTax: 309930,
awardsAfterTax: 54210,
insuranceAndFund: housingFund: 2100,
medicalInsurance: 600,
pension: 2400,
supplementaryFund: 1500,
totalFund: 6750,
totalHousingFund: 3600,
unemploymentInsurance: 150,
salaryTax: [502.5, 502.5, 1500, 1675, 1675, 1675, 1675, 1675, 2350, 3350, 3350, 3350],
salaryPreTax: 30000,
totalSalaryPreTax: 420000,
awardsPreTax: 60000,
awardsTax: 5790,
}
```其中主要的有
salaryAfterTax 表示12个月税后收入
totalSalaryAfterTax 表示年税后总收入(含年终)
awardsAfterTax 年终奖税后收入
salaryTax 12个月的个税数值
接下来分解一下计算过程
首先上公式:
`累计应纳税所得额` = (月薪 - 0 - 起征点 - 月薪 * 五险一金比例 - 专项扣除数值 - 0) * 月数
`当月个税` = (累计应纳税所得额 * 预扣率 - 速算扣除数)- 累计减免税额【这部分不清楚,目前当0处理】 - 累计已缴税额
`税后收入` = 月薪 - 月薪 * 五险一金比例 - 当月个税
则1月份
`累计应纳税所得额` = (30000 - 0 - 5000 - 30000 * 0.225 - 1500 - 0) * 1 = 16750
`当月个税` = 16750 * 0.03 - 0 - 0 = 502.5
`税后收入` = 30000 - 30000 * 0.225 - 502.5 = 22747.5
2月份
`累计应纳税所得额` = (30000 - 0 - 5000 - 30000 * 0.225 - 1500 - 0) * 2 = 33500
`当月个税` = 33500 * 0.03 - 0 - 502.5 = 502.5
`税后收入` = 30000 - 30000 * 0.225 - 502.5 = 22747.5
2月份
`累计应纳税所得额` = (30000 - 0 - 5000 - 30000 * 0.225 - 1500 - 0) * 3 = 50250
`当月个税` = 50250 * 0.1 - 2520 - 1005 = 1500 (超过了36000,发生跳档)
`税后收入` = 30000 - 30000 * 0.225 - 1500 = 21750
后续依次类推