hax-0.0.1: src/HAX/Germany/GmbH.hs
{-# LANGUAGE
NoMonomorphismRestriction
, OverloadedStrings
, TypeSynonymInstances
, FlexibleInstances
, TypeFamilies
, FlexibleContexts
#-}
-- | This module provides the 'Body' for German GmbH
-- as required to calculate income and business tax.
--
-- 'Body's are defined in "Accounting".
--
-- It uses the 'Auto' type from "Germany.NatuerlichePerson"
module HAX.Germany.GmbH where
import HAX.Accounting
import HAX.Bookkeeping
import HAX.Common
import HAX.Germany.Subjekte
import HAX.Germany.Gewerbe
-- * GmbH ('Body' und 'Gewerbetreibender' Instances)
instance Body GmbH where
nominalAccounts _ = gewerbeAccounts ++ verlustVortragsKonten ++
[ verdeckteGewinnausschuettungen
, verdeckteEinlagen
, giroKonto
, gewinnVerlustVortraege
]
bodyMonthly action = do
runGewerbe gewerbeMonatlich =<< readBody gGewerbe
action
atYearEnd $ do
kst <- koerperschaftSteuer
closingTx [ verdeckteGewinnausschuettungen
, verdeckteEinlagen
, jahresErgebnis
]
$ BalancingTx "GmbH KSt und Abschluss"
gewinnVerlustVortraege
[(giroKonto, -kst)]
instance Gewerbetreibender GmbH where
gwStFreibetrag _ = 0
gewerbeGewinn = jahresErgebnis'
-- nicht abziebares
-- https://www.smartsteuer.de/portal/lexikon/N/Nichtabziehbare-Aufwendungen-gem_-10-KStG.html
-- bezieht sich glaube ich hauptsächlich auf gewinne/verluste von
-- santeilen, die die körperschaft an anderen gesellschaften hält.
+ haben verdeckteGewinnausschuettungen
- soll verdeckteEinlagen
-- * Konten
verdeckteGewinnausschuettungen = "vGA"
verdeckteEinlagen = "vElg"
gewinnVerlustVortraege = "GVV"
-- * koerperschaftSteuer
--
-- https://www.smartsteuer.de/portal/lexikon/E/Einkommensermittlung.html
--
-- https://www.smartsteuer.de/portal/lexikon/K/Koerperschaftsteuertarif.html
koerperschaftSteuer :: AccountingRW GmbH Amount
koerperschaftSteuer = do
gewinn <- gwGewinn <$> (runGewerbe gewerbeSteuer =<< readBody gGewerbe )
-- -abzugsfähige Spenden und Beiträge (§ 9 Abs. 1 Nr. 2 KStG)
-- -abzugsfähige Großspenden (§ 9 Abs. 1 Nr. 2 Satz 4 und 5 KStG)
-- +/- Einkommensteuerzurechnung in Organschaftsfällen
kst <- fixed $ singleResult "KoerperschaftSteuer + Soli" $
0.15 * (1+solidaritaetsFaktor) * nachVerlustAbzug "KSt" gewinn
return kst