Skip to content

g0v/labor-standards-tw

Repository files navigation

labor-standards-tw

台灣勞動基準法的函式庫,可用於計算違法罰款、加班費、特休假、確認班表是否違法等。

Taiwan Labor Standards Act Library for calculating penalty, overtime wages, annual paid leaves & checking shift work schedule is legal or not.

目錄

如何使用

首先可以使用 npm 安裝本函式庫:

npm install g0v/labor-standards-tw --save

安裝後,在 node.js 環境底下可以用 require() 引入函示庫,如在瀏覽器環境,可以用 webpack 後使用 import 語法引入:

// for Node.js
const {Labor, WorkTime} = require('labor-standards-tw')

// for Webpack
import {Labor, WorkTime} from 'labor-standards-tw'

Labor class

Labor 類別是本函式庫的基礎,所有功能都圍繞著這個類別。它可以用來設定一個勞工的就職日、月薪、年齡等條件。

import { Labor, Gender } from 'labor-standards-tw'

// 一個 20 歲的女性勞工於 2017/3/20 就職,月薪為 24000 元
const labor = new Labor()
labor.setGender(Gender.FEMALE)
     .setAge(20)
     .onBoard(new Date(2017, 4, 20))
     .setMonthlySalary(24000)

Labor 類別有兩種類型的 methods,第一種是如上述的一些 setter / getter 可以設定基本資訊,另外一種是依據這些基本資訊計算出更進一步的資訊,第二種類型的 methods 都會回傳 Result 類別

import { Labor, ChildLaborType } from 'labor-standards-tw'

const labor = new Labor().setAge(15)

// 驗證勞工是否為童工身分
let result = labor.validateChildLabor()

// 根據勞動基準法 44 條,此勞工為合法的童工身分
expect(result.value.legal).eq(true)
expect(result.value.type).eq(ChildLaborType.CHILD_LABOR)
let article = result.according[0]
expect(article.lawTitle).eq('勞動基準法')
expect(article.id).eq('44')

// 如果勞工年齡為 14 歲
result = labor.setAge(14).validateChildLabor()

// 非法
expect(result.value.legal).eq(false)

// 身分為非法勞工
expect(result.value.type).eq(ChildLaborType.ILLEGAL)

// 違反勞基法 44 條
article = result.violations[0]
expect(article.lawTitle).eq('勞動基準法')
expect(article.id).eq('44')

// 有三種可能性的罰則
// 1. 罰款 300,000 以下
// 2. 拘役 6 個月以下
// 3. 前面兩者加起來
const penalty = article.penalize()
expect(penalty.article.id).eq('77')
expect(penalty.possibilities.length).eq(3)

更詳細的用法,請參考程式內的 jsdoc 註解,或是 cucumber 的 測試案例

協助開發

本專案使用 node.js v6 LTS,如果你有許多專案使用不同版本的 node.js,推薦你使用 nvm

如何開發

你可以先使用 npm install 安裝所有相依性套件。接著用 npm test 可以執行所有測試。

如果需要除錯,可以使用 Visual Studio Code,在你需要下斷點的地方鍵入 debugger; 跳到除錯的頁籤,並且執行 Debug task。

比如說你想要在 Labor.ts 底下的 retire() 下斷點,就把 debugger 加在第一行如下面程式片段:

retire (date: Date): Result {
  debugger; // 加入在這裡
  const result = new Result()

  const years = moment(date).diff(this._onboard, 'years')
  const retirement = (years >= 15 && this.getAge() >= 55) ||
                      (years >= 25) ||
                      (years >= 10 && this.getAge() >= 60)

  result.value.retirement = retirement
  result.according.push(new Article('勞動基準法', '53'))

  return result
}

執行 Debug task 後,就會停在中斷點,並且可以逐步執行。

Screenshot for debugging

如何貢獻

如果你發現程式碼有錯誤,或任何需要改進的地方,請到 issues 頁面開一個新的 issue。

如果想協助本專案,請到 Github issue 逛逛,看看有沒有還沒解掉的 issues 可以協助。

若要提交你的修改,請送 pull request 到本專案,travis-ci 上面會有基本的語法與 coding style 檢查後,接著經由團隊成員審核後就會將您的變更合併入專案當中。

關於 cucumber 的測試方式,請參考 test.md

相關資訊

授權

本專案依照 MIT 授權 釋出,若需使用請確保您的使用方式符合 MIT 授權。

About

台灣勞動基準法函式庫, Taiwan Labor Standards Act Library

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6