All Projects → jenner → LstGen

jenner / LstGen

Licence: MIT license
Code-Generator für die Lohnsteuerberechnung aus PAP XML

Programming Languages

python
139335 projects - #7 most used programming language
PHP
23972 projects - #3 most used programming language
go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to LstGen

AUXify
Introduces macro/meta annotations @ aux, @ self, @ instance, @ apply, @ delegated, @ syntax and String-based type class LabelledGeneric
Stars: ✭ 25 (+31.58%)
Mutual labels:  code-generation
granate
Code generator for graphql
Stars: ✭ 21 (+10.53%)
Mutual labels:  code-generation
mr.boilerplate
Online app to generate Scala boilerplate
Stars: ✭ 32 (+68.42%)
Mutual labels:  code-generation
FSharpWrap
Utility that automatically generates F# modules and functions based on your F# project file's references
Stars: ✭ 14 (-26.32%)
Mutual labels:  code-generation
cscg
Code Generation as a Dual Task of Code Summarization.
Stars: ✭ 28 (+47.37%)
Mutual labels:  code-generation
code-fold
Write the pattern, then let your code write itself.
Stars: ✭ 13 (-31.58%)
Mutual labels:  code-generation
nmodl
Code Generation Framework For NEURON MODeling Language
Stars: ✭ 42 (+121.05%)
Mutual labels:  code-generation
create-graphql-app
Cli tool for bootstrapping serverless GraphQL api
Stars: ✭ 28 (+47.37%)
Mutual labels:  code-generation
sample-generator
Xcode Source Editor Extension to generate Swift model samples
Stars: ✭ 19 (+0%)
Mutual labels:  code-generation
Rosalina
Rosalina is a code generation tool for Unity's UI documents. It generates C# code-behind script based on a UXML template.
Stars: ✭ 57 (+200%)
Mutual labels:  code-generation
fling
A fluent API generator
Stars: ✭ 20 (+5.26%)
Mutual labels:  code-generation
designto-code
Design to code engine. A design ✌️ code standard. Supports React, Flutter and more.
Stars: ✭ 87 (+357.89%)
Mutual labels:  code-generation
eaf-linter
🤪 A linter, prettier, and test suite that does everything as-simple-as-possible.
Stars: ✭ 17 (-10.53%)
Mutual labels:  code-generation
toast
Plugin-driven CLI utility for code generation using Go source as IDL
Stars: ✭ 52 (+173.68%)
Mutual labels:  code-generation
LinqToXsdCore
LinqToXsd ported to .NET Core (targets .NET Standard 2 for generated code and .NET Core 3.1, .NET 5+ 6 for the code generator CLI tool).
Stars: ✭ 23 (+21.05%)
Mutual labels:  code-generation
Beef
Business Entity Execution Framework
Stars: ✭ 95 (+400%)
Mutual labels:  code-generation
Textrude
Code generation from YAML/JSON/CSV models via SCRIBAN templates
Stars: ✭ 79 (+315.79%)
Mutual labels:  code-generation
openvalidation
Compose validation rules in the language you use every day, openVALIDATION handles code creation for you.
Stars: ✭ 62 (+226.32%)
Mutual labels:  code-generation
laboratory
Feature flags for multi-module Kotlin Android projects
Stars: ✭ 71 (+273.68%)
Mutual labels:  code-generation
gonstructor
A command-line tool to generate a constructor for the struct.
Stars: ✭ 55 (+189.47%)
Mutual labels:  code-generation

LstGen

Mittels LstGen kann man aus den sgn. PAP (Programmablaufplan) Dateien, die unter https://www.bmf-steuerrechner.de zur Verfügung stehen, validen Code generieren, mit dem man ohne weitere Abhängigkeiten (wie z.B. einem externen Service) die Lohnsteuer berechnen kann.

Zur Zeit werden vier Sprachen unterstützt:

  • PHP
  • Python
  • Java
  • Javascript
  • Go (Golang)

Installation

  • Mit pip oder easy_install aus PyPI:
pip install lstgen

oder

easy_install lstgen

Danach ist das Program lstgen (für gewöhnlich) unter /usr/local/bin/lstgen verfügbar.

Beispiel 1: Erzeugen einer PHP-Datei zur Berechnung der Lohnsteuer für das Jahr 2016

lstgen -p 2016_1 -l php --class-name Lohnsteuer2016 --outfile Lohnsteuer2016.php

Der generierte Code benötigt für die Berechnung die Brick\Math Bibliothek und geht davon aus, dass sie mittels Composer installiert wurde.

Danach kann die generierte Klasse einfach importiert und folgendermassen in eigenem Code verwendet werden:

<?php

require "Lohnsteuer2016.php";

$brutto = 500000; // Brutto in ¢ent
$lst = new Lohnsteuer2015Big();
$lst->setRe4($brutto);
$lst->setPkv(1);
$lst->setAlter1(0);
$lst->setAf(0);
$lst->setF(1);
$lst->setPvs(0);
$lst->setR(0);
$lst->setLzzhinzu(0);
$lst->setPvz(0);
$lst->setStkl(1);
$lst->setLzz(2);
$lst->setKrv(2);
$lst->main();
$steuer = floor($lst->getLstlzz()->toFloat() + $lst->getStv()->toFloat() + $lst->getSts()->toFloat());
$soli = floor($lst->getSolzlzz()->toFloat() + $lst->getSolzs()->toFloat() + $lst->getSolzv()->toFloat()) / 100;
$stges = $steuer + $soli;
echo "steuer: $steuer\nsoli: $soli\nstges: $stges\n";

Oberes Beispiel zeigt die Berechnung der Lohnsteuer und Solidaritätszuschlags für einen Arbeitnehmer mit Steuerklasse 1, monatlichem Brutto von 5000€, privat versichert und ohne Arbeitgeberzuschuss für PKV.

Eine detaillierte Erklärung zu den jeweiligen Eingabeparametern findet man entweder im generierten Code in Form von Kommentaren oder in der PDF Version des PAP unter https://www.bmf-steuerrechner.de/interface/programmablauf.xhtml

Beispiel 2: Erzeugen einer Python-Datei zur Berechnung der Lohnsteuer für das Jahr 2014 (gleiche Voraussetzungen wie im PHP Beispiel)

lstgen -p 2014_1 -l python --class-name Lohnsteuer2014 --outfile lst2014.py

Der generierte Code kann dann so verwendet werden:

import math
from lst2014 import Lohnsteuer2014

def print_lst(lst):
    steuer = math.floor(float(lst.getLstlzz()) + float(lst.getStv()) + float(lst.getSts())) / 100.0
    soli = math.floor(float(lst.getSolzlzz()) + float(lst.getSolzs()) + float(lst.getSolzv())) / 100
    stges = steuer + soli
    print("steuer: {steuer}\nsoli: {soli}\nstges: {stges}".format(
        steuer=steuer,
        soli=soli,
        stges=stges
    ))

brutto = 500000 # Brutto in ¢ent
# Setzen der Parameter mit Settern
lst2014 = Lohnsteuer2014()
lst2014.setRe4(brutto) # cent
lst2014.setPkv(1)
lst2014.setAlter1(0)
lst2014.setAf(0)
lst2014.setF(1)
lst2014.setPvs(0)
lst2014.setR(0)
lst2014.setLzzhinzu(0)
lst2014.setPvz(0)
lst2014.setStkl(1)
lst2014.setLzz(2)
lst2014.setKrv(2)
lst2014.MAIN()
print_lst(lst2014)

# Setzen der Parameter mittels Konstruktor-Argumente
lst2014 = Lohnsteuer2014(
    RE4=brutto,
    PKV=1,
    ALTER1=0,
    af=0,
    f=1,
    PVS=0,
    R=0,
    LZZHINZU=0,
    PVZ=0,
    STKL=1,
    LZZ=2,
    KRV=2
)
lst2014.MAIN()
print_lst(lst2014)

Beispiel 3: Erzeugen eines Go-Moduls zur Berechnung der Lohnsteuer für das Jahr 2014

Folgende Dateistruktur wird benötigt:

.
├── cmd/
│   ├── main.go
│   └── start
├── go.mod
├── go.sum
└── tax/
    └── 2014.go

tax-Modul erzeugen:

mkdir tax
lstgen -p 2014_1 -l go --class-name Lohnsteuer2014 --outfile tax/2014.go
mkdir cmd

Erstellen von main.go:

package main

import (
	"fmt"
	"github.com/shopspring/decimal"
	"yourpackage.com/tax"
)

func main() {
	lst := tax.NewLohnsteuer2014()
	lst.SetRe4(decimal.NewFromInt(50_000_00))  // in cents
	lst.SetPkv(1)
	lst.SetAlter1(0)
	lst.SetAf(0)
	lst.SetF(1)
	lst.SetPvs(0)
	lst.SetR(0)
	lst.SetLzzhinzu(decimal.NewFromInt(0))
	lst.SetPvz(0)
	lst.SetStkl(1)
	lst.SetLzz(2)
	lst.SetKrv(2)
	lst.MAIN()
	steuer := lst.GetLstlzz().Add(lst.GetStv().Add(lst.GetSts()))
	soli := lst.GetSolzlzz().Add(lst.GetSolzs().Add(lst.GetSolzv()))
	res := steuer.Add(soli).Div(decimal.NewFromInt(100))
	fmt.Printf("%v\n", res.StringFixed(2))
}

Ausführung:

go mod init yourpackage.com
go mod download
go build -o cmd/start cmd/main.go
cmd/start
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].