ochintin-daicho-0.1.0.1: A module to manage payroll books for Japanese companies.

CopyrightKadzuya Okamoto 2017
LicenseMIT
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Business.OchintinDaicho

Contents

Description

This module exports core functions and types for payroll books.

Synopsis

Usage examples

>>> import Business.Bookkeeping hiding (ppr)
>>> :{
let
  taroYamada :: Person
  taroYamada = Person
    { name = "山田 太郎"
    , sex = "男"
    , payments = \y -> case y of
      2017 ->
        [ ( (1, 10)
          , Payment
            { _賃金計算期間 = (2016, 12)
            , _労働日数 = 13
            , _労働時間数 = 13 * 5
            , _休日労働時間数 = 0
            , _早出残業時間数 = 0
            , _深夜労働時間数 = 0
            , _課税支給額 = 250000
            , _控除社会保険料 = \debit amount -> do
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "健康保険料(社員負担分)"
                $ if (200000 < amount && amount < 300000)
                  then 15000
                  else error "undefined 健康保険料"
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "厚生年金(社員負担分)"
                $ if (200000 < amount && amount < 300000)
                  then 20000
                  else error "undefined 厚生年金"
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "雇用保険料(社員負担分)"
                $ if (200000 < amount && amount < 300000)
                  then 1000
                  else error "undefined 雇用保険料"
            , _所得税額 = \debit amount ->
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "源泉所得税"
                $ if (200000 < amount && amount < 250000)
                  then 5000
                  else error $ "undefined 所得税額 for " <> show amount
            , _非課税支給額 = \credit -> do
              dateTrans
                (DebitCategory $ Category "旅費・交通費" Expenses)
                credit
                "立替交通費"
                3000
            , _その他控除 = \debit ->
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "親睦会費"
                5000
            }
          )
        , ( (2, 10)
          , Payment
            { _賃金計算期間 = (2017, 1)
            , _労働日数 = 12
            , _労働時間数 = 12 * 5
            , _休日労働時間数 = 0
            , _早出残業時間数 = 0
            , _深夜労働時間数 = 0
            , _課税支給額 = 250000
            , _控除社会保険料 = \debit amount -> do
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "健康保険料(社員負担分)"
                $ if (200000 < amount && amount < 300000)
                  then 15000
                  else error "undefined 健康保険料"
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "厚生年金(社員負担分)"
                $ if (200000 < amount && amount < 300000)
                  then 20000
                  else error "undefined 厚生年金"
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "雇用保険料(社員負担分)"
                $ if (200000 < amount && amount < 300000)
                  then 1000
                  else error "undefined 雇用保険料"
            , _所得税額 = \debit amount ->
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "源泉所得税"
                $ if (200000 < amount && amount < 250000)
                  then 5000
                  else error $ "undefined 所得税額2 for " <> show amount
            , _非課税支給額 = \credit -> do
              dateTrans
                (DebitCategory $ Category "旅費・交通費" Expenses)
                credit
                "立替交通費"
                4000
            , _その他控除 = \debit ->
              dateTrans debit
                (CreditCategory $ Category "預り金" Liabilities)
                "親睦会費"
                5000
            }
          )
        ]
      _ ->
        []
    }
:}

Types

data Person Source #

Main data type to represent payroll books for a person.

Constructors

Person 

Fields

type Payments = [((Month, Date), Payment)] Source #

A type for handling Payment values.

data Hours Source #

Pretty printers

ppr :: Person -> Year -> IO () Source #

A pretty printer for payroll books.

>>> ppr taroYamada 2017
氏名: 山田 太郎
性別: 男

== 2017年支給分 ==

支給日: 1月10日
賃金計算期間: 2016年12月
労働日数: 13日
労働時間数: 65時間
休日労働時間数: 0時間
早出残業時間数: 0時間
深夜労働時間数: 0時間
課税支給額: 250000円
控除社会保険料: 36000円
社会保険料等控除の金額: 214000円
所得税額: 5000円
非課税支給額: 3000円
その他控除: 5000円
--> 実支払額: 207000円

支給日: 2月10日
賃金計算期間: 2017年1月
労働日数: 12日
労働時間数: 60時間
休日労働時間数: 0時間
早出残業時間数: 0時間
深夜労働時間数: 0時間
課税支給額: 250000円
控除社会保険料: 36000円
社会保険料等控除の金額: 214000円
所得税額: 5000円
非課税支給額: 4000円
その他控除: 5000円
--> 実支払額: 208000円

Converters

toBookkeeping :: Person -> Year -> DebitCategory -> CreditCategory -> Transactions Source #

>>> :{
Business.Bookkeeping.ppr $ toBookkeeping taroYamada 2017
  (DebitCategory $ Category "給与手当" Expenses)
  (CreditCategory $ Category "普通預金" Liabilities)
:}
tDay: 2017-01-10
tDescription: 12月度
tSubDescription: 立替交通費
tDebit: 旅費・交通費 (Expenses)
tCredit: 普通預金 (Liabilities)
tAmount: 3000

tDay: 2017-01-10
tDescription: 12月度
tSubDescription: 健康保険料(社員負担分)
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 15000

tDay: 2017-01-10
tDescription: 12月度
tSubDescription: 厚生年金(社員負担分)
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 20000

tDay: 2017-01-10
tDescription: 12月度
tSubDescription: 雇用保険料(社員負担分)
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 1000

tDay: 2017-01-10
tDescription: 12月度
tSubDescription: 源泉所得税
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 5000

tDay: 2017-01-10
tDescription: 12月度
tSubDescription: 親睦会費
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 5000

tDay: 2017-01-10
tDescription: 12月度
tSubDescription: 給与支払い
tDebit: 給与手当 (Expenses)
tCredit: 普通預金 (Liabilities)
tAmount: 207000

tDay: 2017-02-10
tDescription: 1月度
tSubDescription: 立替交通費
tDebit: 旅費・交通費 (Expenses)
tCredit: 普通預金 (Liabilities)
tAmount: 4000

tDay: 2017-02-10
tDescription: 1月度
tSubDescription: 健康保険料(社員負担分)
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 15000

tDay: 2017-02-10
tDescription: 1月度
tSubDescription: 厚生年金(社員負担分)
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 20000

tDay: 2017-02-10
tDescription: 1月度
tSubDescription: 雇用保険料(社員負担分)
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 1000

tDay: 2017-02-10
tDescription: 1月度
tSubDescription: 源泉所得税
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 5000

tDay: 2017-02-10
tDescription: 1月度
tSubDescription: 親睦会費
tDebit: 給与手当 (Expenses)
tCredit: 預り金 (Liabilities)
tAmount: 5000

tDay: 2017-02-10
tDescription: 1月度
tSubDescription: 給与支払い
tDebit: 給与手当 (Expenses)
tCredit: 普通預金 (Liabilities)
tAmount: 208000

Convenient functions for 年末調整

_年度内課税支給金額 :: Person -> Year -> Amount Source #

対象年度内の課税支給額総計

>>> _年度内課税支給金額 taroYamada 2017
Amount {unAmount = 500000}

_年度内社会保険控除額 :: Person -> Year -> Amount Source #

対象年度内の社会保険料等控除額総計

>>> _年度内社会保険控除額 taroYamada 2017
Amount {unAmount = 72000}

_年度内所得税控除額 :: Person -> Year -> Amount Source #

対象年度内の所得税控除額総計

>>> _年度内所得税控除額 taroYamada 2017
Amount {unAmount = 10000}