LstGen


NameLstGen JSON
Version 0.6.4 PyPI version JSON
download
home_pagehttp://github.com/jenner/LstGen
SummaryLstGen
upload_time2024-04-02 11:31:11
maintainerNone
docs_urlNone
authorIgor Stroh
requires_pythonNone
licenseNone
keywords lohnsteuer code generator cli
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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.

Folgende Programmiersprachen werden zur Zeit unterstützt:
* PHP
* Python
* Java
* Javascript
* Go

## Installation
* Mit `pip` oder `easy_install` aus PyPI:
```bash
pip install lstgen
```
oder
```bash
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
```bash
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](https://github.com/brick/math)
und geht davon aus, dass sie mittels [Composer](https://getcomposer.org/) installiert wurde.

Danach kann die generierte Klasse einfach importiert und folgendermassen in eigenem Code verwendet werden:
```php
<?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)
```bash
lstgen -p 2014_1 -l python --class-name Lohnsteuer2014 --outfile lst2014.py
```

Der generierte Code kann dann so verwendet werden:
```python
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:

```bash
mkdir tax
lstgen -p 2014_1 -l go --go-package-name Lohnsteuer2014 --outfile tax/2014.go
mkdir cmd

alternativ für 2022 via python das gen Verzeichnis:
python cli.py -p 2022_1 -l golang --go-package-name income_tax --outfile ../gen/2022.go
```

Erstellen von main.go:

```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:

```bash
go mod init yourpackage.com
go mod download
go build -o cmd/start cmd/main.go
cmd/start
```

## Beispiel 4: Erzeugen einer Javascript Funktion zur Berechnung der Lohnsteuer für das Jahr 2022

```lstgen -p 2022_1 -l javascript --class-name Lohnsteuer2022 --outfile Lohnsteuer2022.js```

Das generierte Node Module erfordert eine BigDecimal Implementierung.

Dafür kann man zum Beispiel folgendes npm installieren: `npm install bigdecimal`

Um eine ordungsgemäße Nutzung der Klasse zu garantieren, muss man das BigDecimal des NPM wie folgt neu definieren

```
const big = require('../node_modules/bigdecimal')
const BigDecimal = big.BigDecimal;
```

Anschliessend kann man das Modul wie folgt nutzen:

```
const Lohnsteuer2022 = require('Lohnsteuer2022');
```


# Changes

## 0.6.4
* Added 2024 PAP (thanks antonio-masotti)

## 0.6.3
* Added fix for rounding in BigDecimal.SetScale for golang. (thanks Markus)

## 0.6.2
* Added 2023 PAP from July

## 0.6.1
* Added 2023 PAP

## 0.6.0
* Added golang generator which supersedes go generator (thanks polderudo)
* Fixed empty if-body in python
* Added javascript example (thanks 0xCCD)
* Added 2022 PAP (thanks 0xCCD)

## 0.5.4
* Added php BigDecimal fixes (thanks tburschka)

## 0.5.3
* Added python3.9 ast module compatiblity

## 0.5.2
* Added resources for year 2021 (thanks 0xCCD)

## 0.5.1
* Added fix for double types in Go (thanks knipknap)

## 0.5.0
* Added Go support (thanks knipknap for the code and Dexus for the review!)

## 0.4.3
* Fixed default value for "double" numbers
* Removee size literals (L/D) in python code
* Improved PAP naming (thanks knipknap)

## 0.4.2
* Added resources for year 2020 (thanks csarn)
* Fixed README python example (thanks csarn)

## 0.4.1
* Fixed CLI examples in README

## 0.4.0
* Added PAP for 2018 and 2019
* Fixed BMF URIs
* Added "version" cli option 

## 0.3.2
* Make pypi happy

## 0.3.1
* Added support for 2017 PAP
* Fixed unary operator conversion
* Replaced Decimal.\_rescale with Decimal.quantize to
  remain python3 compliant

## 0.3.0
* Added JS support
* Refactored generators for java-like languages
* Cleaned up a bit to satisfy pylint

## 0.2.0
* Refactored writers to generators
* Added basic tests
* Added BigDecimal PHP proxy class

## 0.1.1
* Fixed packaging issues for README.md and CHANGES.md

## 0.1.0
* Initial version



            

Raw data

            {
    "_id": null,
    "home_page": "http://github.com/jenner/LstGen",
    "name": "LstGen",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "lohnsteuer code generator cli",
    "author": "Igor Stroh",
    "author_email": "igor.stroh@rulim.de",
    "download_url": "https://files.pythonhosted.org/packages/61/f3/1d9c6e7623f892336d9e3eed7a788d17d024cb872bff123c7fb79367c82e/LstGen-0.6.4.tar.gz",
    "platform": null,
    "description": "# LstGen\n\nMittels LstGen kann man aus den sgn. PAP (Programmablaufplan) Dateien, die\nunter https://www.bmf-steuerrechner.de zur Verf\u00fcgung stehen, validen Code\ngenerieren, mit dem man ohne weitere Abh\u00e4ngigkeiten (wie z.B. einem externen\nService) die Lohnsteuer berechnen kann.\n\nFolgende Programmiersprachen werden zur Zeit unterst\u00fctzt:\n* PHP\n* Python\n* Java\n* Javascript\n* Go\n\n## Installation\n* Mit `pip` oder `easy_install` aus PyPI:\n```bash\npip install lstgen\n```\noder\n```bash\neasy_install lstgen\n```\nDanach ist das Program `lstgen` (f\u00fcr gew\u00f6hnlich)  unter `/usr/local/bin/lstgen`\nverf\u00fcgbar.\n\n## Beispiel 1: Erzeugen einer PHP-Datei zur Berechnung der Lohnsteuer f\u00fcr das Jahr 2016\n```bash\nlstgen -p 2016_1 -l php --class-name Lohnsteuer2016 --outfile Lohnsteuer2016.php\n```\nDer generierte Code ben\u00f6tigt f\u00fcr die Berechnung die [Brick\\Math Bibliothek](https://github.com/brick/math)\nund geht davon aus, dass sie mittels [Composer](https://getcomposer.org/) installiert wurde.\n\nDanach kann die generierte Klasse einfach importiert und folgendermassen in eigenem Code verwendet werden:\n```php\n<?php\n\nrequire \"Lohnsteuer2016.php\";\n\n$brutto = 500000; // Brutto in \u00a2ent\n$lst = new Lohnsteuer2015Big();\n$lst->setRe4($brutto);\n$lst->setPkv(1);\n$lst->setAlter1(0);\n$lst->setAf(0);\n$lst->setF(1);\n$lst->setPvs(0);\n$lst->setR(0);\n$lst->setLzzhinzu(0);\n$lst->setPvz(0);\n$lst->setStkl(1);\n$lst->setLzz(2);\n$lst->setKrv(2);\n$lst->main();\n$steuer = floor($lst->getLstlzz()->toFloat() + $lst->getStv()->toFloat() + $lst->getSts()->toFloat());\n$soli = floor($lst->getSolzlzz()->toFloat() + $lst->getSolzs()->toFloat() + $lst->getSolzv()->toFloat()) / 100;\n$stges = $steuer + $soli;\necho \"steuer: $steuer\\nsoli: $soli\\nstges: $stges\\n\";\n```\nOberes Beispiel zeigt die Berechnung der Lohnsteuer und Solidarit\u00e4tszuschlags f\u00fcr einen Arbeitnehmer\nmit Steuerklasse 1, monatlichem Brutto von 5000\u20ac, privat versichert und ohne Arbeitgeberzuschuss f\u00fcr PKV.\n\nEine detaillierte Erkl\u00e4rung zu den jeweiligen Eingabeparametern findet man entweder im generierten Code in\nForm von Kommentaren oder in der PDF Version des PAP unter https://www.bmf-steuerrechner.de/interface/programmablauf.xhtml\n\n## Beispiel 2: Erzeugen einer Python-Datei zur Berechnung der Lohnsteuer f\u00fcr das Jahr 2014 (gleiche Voraussetzungen wie im PHP Beispiel)\n```bash\nlstgen -p 2014_1 -l python --class-name Lohnsteuer2014 --outfile lst2014.py\n```\n\nDer generierte Code kann dann so verwendet werden:\n```python\nimport math\nfrom lst2014 import Lohnsteuer2014\n\ndef print_lst(lst):\n    steuer = math.floor(float(lst.getLstlzz()) + float(lst.getStv()) + float(lst.getSts())) / 100.0\n    soli = math.floor(float(lst.getSolzlzz()) + float(lst.getSolzs()) + float(lst.getSolzv())) / 100\n    stges = steuer + soli\n    print(\"steuer: {steuer}\\nsoli: {soli}\\nstges: {stges}\".format(\n        steuer=steuer,\n        soli=soli,\n        stges=stges\n    ))\n\nbrutto = 500000 # Brutto in \u00a2ent\n# Setzen der Parameter mit Settern\nlst2014 = Lohnsteuer2014()\nlst2014.setRe4(brutto) # cent\nlst2014.setPkv(1)\nlst2014.setAlter1(0)\nlst2014.setAf(0)\nlst2014.setF(1)\nlst2014.setPvs(0)\nlst2014.setR(0)\nlst2014.setLzzhinzu(0)\nlst2014.setPvz(0)\nlst2014.setStkl(1)\nlst2014.setLzz(2)\nlst2014.setKrv(2)\nlst2014.MAIN()\nprint_lst(lst2014)\n\n# Setzen der Parameter mittels Konstruktor-Argumente\nlst2014 = Lohnsteuer2014(\n    RE4=brutto,\n    PKV=1,\n    ALTER1=0,\n    af=0,\n    f=1,\n    PVS=0,\n    R=0,\n    LZZHINZU=0,\n    PVZ=0,\n    STKL=1,\n    LZZ=2,\n    KRV=2\n)\nlst2014.MAIN()\nprint_lst(lst2014)\n\n```\n\n## Beispiel 3: Erzeugen eines Go-Moduls zur Berechnung der Lohnsteuer f\u00fcr das Jahr 2014\n\nFolgende Dateistruktur wird ben\u00f6tigt:\n\n```\n.\n\u251c\u2500\u2500 cmd/\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 main.go\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 start\n\u251c\u2500\u2500 go.mod\n\u251c\u2500\u2500 go.sum\n\u2514\u2500\u2500 tax/\n    \u2514\u2500\u2500 2014.go\n```\n\ntax-Modul erzeugen:\n\n```bash\nmkdir tax\nlstgen -p 2014_1 -l go --go-package-name Lohnsteuer2014 --outfile tax/2014.go\nmkdir cmd\n\nalternativ f\u00fcr 2022 via python das gen Verzeichnis:\npython cli.py -p 2022_1 -l golang --go-package-name income_tax --outfile ../gen/2022.go\n```\n\nErstellen von main.go:\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/shopspring/decimal\"\n\t\"yourpackage.com/tax\"\n)\n\nfunc main() {\n\tlst := tax.NewLohnsteuer2014()\n\tlst.SetRe4(decimal.NewFromInt(50_000_00))  // in cents\n\tlst.SetPkv(1)\n\tlst.SetAlter1(0)\n\tlst.SetAf(0)\n\tlst.SetF(1)\n\tlst.SetPvs(0)\n\tlst.SetR(0)\n\tlst.SetLzzhinzu(decimal.NewFromInt(0))\n\tlst.SetPvz(0)\n\tlst.SetStkl(1)\n\tlst.SetLzz(2)\n\tlst.SetKrv(2)\n\tlst.MAIN()\n\tsteuer := lst.GetLstlzz().Add(lst.GetStv().Add(lst.GetSts()))\n\tsoli := lst.GetSolzlzz().Add(lst.GetSolzs().Add(lst.GetSolzv()))\n\tres := steuer.Add(soli).Div(decimal.NewFromInt(100))\n\tfmt.Printf(\"%v\\n\", res.StringFixed(2))\n}\n\n```\n\nAusf\u00fchrung:\n\n```bash\ngo mod init yourpackage.com\ngo mod download\ngo build -o cmd/start cmd/main.go\ncmd/start\n```\n\n## Beispiel 4: Erzeugen einer Javascript Funktion zur Berechnung der Lohnsteuer f\u00fcr das Jahr 2022\n\n```lstgen -p 2022_1 -l javascript --class-name Lohnsteuer2022 --outfile Lohnsteuer2022.js```\n\nDas generierte Node Module erfordert eine BigDecimal Implementierung.\n\nDaf\u00fcr kann man zum Beispiel folgendes npm installieren: `npm install bigdecimal`\n\nUm eine ordungsgem\u00e4\u00dfe Nutzung der Klasse zu garantieren, muss man das BigDecimal des NPM wie folgt neu definieren\n\n```\nconst big = require('../node_modules/bigdecimal')\nconst BigDecimal = big.BigDecimal;\n```\n\nAnschliessend kann man das Modul wie folgt nutzen:\n\n```\nconst Lohnsteuer2022 = require('Lohnsteuer2022');\n```\n\n\n# Changes\n\n## 0.6.4\n* Added 2024 PAP (thanks antonio-masotti)\n\n## 0.6.3\n* Added fix for rounding in BigDecimal.SetScale for golang. (thanks Markus)\n\n## 0.6.2\n* Added 2023 PAP from July\n\n## 0.6.1\n* Added 2023 PAP\n\n## 0.6.0\n* Added golang generator which supersedes go generator (thanks polderudo)\n* Fixed empty if-body in python\n* Added javascript example (thanks 0xCCD)\n* Added 2022 PAP (thanks 0xCCD)\n\n## 0.5.4\n* Added php BigDecimal fixes (thanks tburschka)\n\n## 0.5.3\n* Added python3.9 ast module compatiblity\n\n## 0.5.2\n* Added resources for year 2021 (thanks 0xCCD)\n\n## 0.5.1\n* Added fix for double types in Go (thanks knipknap)\n\n## 0.5.0\n* Added Go support (thanks knipknap for the code and Dexus for the review!)\n\n## 0.4.3\n* Fixed default value for \"double\" numbers\n* Removee size literals (L/D) in python code\n* Improved PAP naming (thanks knipknap)\n\n## 0.4.2\n* Added resources for year 2020 (thanks csarn)\n* Fixed README python example (thanks csarn)\n\n## 0.4.1\n* Fixed CLI examples in README\n\n## 0.4.0\n* Added PAP for 2018 and 2019\n* Fixed BMF URIs\n* Added \"version\" cli option \n\n## 0.3.2\n* Make pypi happy\n\n## 0.3.1\n* Added support for 2017 PAP\n* Fixed unary operator conversion\n* Replaced Decimal.\\_rescale with Decimal.quantize to\n  remain python3 compliant\n\n## 0.3.0\n* Added JS support\n* Refactored generators for java-like languages\n* Cleaned up a bit to satisfy pylint\n\n## 0.2.0\n* Refactored writers to generators\n* Added basic tests\n* Added BigDecimal PHP proxy class\n\n## 0.1.1\n* Fixed packaging issues for README.md and CHANGES.md\n\n## 0.1.0\n* Initial version\n\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "LstGen",
    "version": "0.6.4",
    "project_urls": {
        "Homepage": "http://github.com/jenner/LstGen"
    },
    "split_keywords": [
        "lohnsteuer",
        "code",
        "generator",
        "cli"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "61f31d9c6e7623f892336d9e3eed7a788d17d024cb872bff123c7fb79367c82e",
                "md5": "60037aac06302750f75a0317e92dc62a",
                "sha256": "abe33573605bca17f37f0a0b691387680d118f669b7aa6d9518743c757653564"
            },
            "downloads": -1,
            "filename": "LstGen-0.6.4.tar.gz",
            "has_sig": false,
            "md5_digest": "60037aac06302750f75a0317e92dc62a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 20962,
            "upload_time": "2024-04-02T11:31:11",
            "upload_time_iso_8601": "2024-04-02T11:31:11.363961Z",
            "url": "https://files.pythonhosted.org/packages/61/f3/1d9c6e7623f892336d9e3eed7a788d17d024cb872bff123c7fb79367c82e/LstGen-0.6.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-02 11:31:11",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jenner",
    "github_project": "LstGen",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "tox": true,
    "lcname": "lstgen"
}
        
Elapsed time: 0.21879s