ust - J2EE-Studie E/Ü- und USt-Berechnung

Letzte Aktualisierung: 5. Februar 2012

Im Jahr 2000 bin ich mit meiner Einnahme/Überschuss- und Umsatzsteuer-Berechnung vom Mac auf Linux umgestiegen. Dazu habe ich mir eine J2EE-Anwendung geschrieben, die ich als Projekt fertigstellen und dann unter der GNU Lizenz publizieren wollte. Inzwischen arbeite ich mit der Anwendung nun schon das fünfte Jahr und ein guter Freund nutzt sie auch schon. Daher stelle ich diese unfertige Anwendung zur Verfügung. Kommentare, bug reports und Erweiterungen sind willkommen. Bei Interesse mache ich gerne weiter und baue die kleinen Unschönheiten aus, an die ich mich schon so gewöhnt habe :)

Ach so, was noch zu sagen ist. Dieses Programm ist von keiner Finanzbehörde zertifiziert. Es ist als J2EE-Studie zu verstehen und hat keinerlei Relevanz zum deutschen Steuerrecht.

Quellen

Hier ist ein fertig gepacktes WAR-Archive, welches auch die Quellen und JavaDoc enthält:

  • ust_0.2.6.war - Version 0.2.6 vom 6.03.2008 (UTF-8)
  • ust.war - Version 0.2.5 vom 5.01.2007 (ISO-8859-1)

Umstellung auf UTF-8

Nachdem auf meinem neuem openSuse 10.3 nun ?alles? UTF-8 ist, habe ich auch ust auf UTF-8 umgestellt. Die Version 0.2.6 hat genau den gleichen Funktionsumfang wie 0.2.5, sie ist ebend nur auf UTF-8 umgestellt.

Wenn die Umstellung mitten im Jahr erfolgt dann sind die Daten zu konvertieren, z.B.:

$ iconv -f iso8859-15 -t utf8 ust/bookings > new/bookings

features & ugliest

  • liefert die Ausgangsbasis für die monatliche USt-Voranmeldung, die USt-Erklärung eines Jahres und die E/Ü-Rechung zur Gewinnermittlung
  • es kann ein Kontorahmen benutzt werden, mit einem USt-Satz für jedes Konto und den Unterscheidungen der Kontoart: Eingang, Ausgang, Neutral, Vorsteuer, Einlage Kasse und Entnahme Kasse
  • Liste der Konten, Liste der Buchungen, Liste der Kontoauszüge, USt-Berechnung (monatlich, vierteljährlich und jährlich) und E/Ü-Berechnung (mit oder ohne USt)
  • Buchungen können nach verschiedenen Kriterien selektiert werden (Von-Bis Monat, Buchungskonto, Bank oder Kasse, Vorsteuer oder Umsatzsteuer)
  • zu jeder Buchung wird Datum, Uhrzeit und Bearbeiter vermerkt
  • eine Buchung kann nachträglich korrigiert werden
  • von allen Listen ist eine Druckversion darstellbar
  • die E/Ü-Berechung kann zusätzlich auch mit USt erfolgen, wenn der ausstehende Ust-Betrag noch gebucht wird ergibt dann die Berechnung mit und ohne USt das gleiche Ergebnis
  • die Berechnung der USt-Vorauszahlung und der Umsatzsteuererklärung erfolgt einmal Cent-genau und einmal ohne Cents für die Bemessungsgrundlage (für die Abgabe der USt-Voranmeldung)
  • Aufnahme eines Bankbelegs (Kontoauszug-Nummer, -Blatt und -Position) zu einer Buchung (Vermeidung von Doppelbuchungen, schnelleres Wiederauffinden); es können mehrere Bankkonten angelegt werden
  • Datenhaltung in flat files, die Datendatei wird jedesmal komplett geschrieben (ich habe weniger als 400 Buchungen im ganzen Jahr)
  • eine Buchung kann als Vorlage für die nächste Buchung benutzt werden
  • beim ersten Aufruf werden die Dateien accounts, bankAccounts, bankStatements, bookings und version neu angelegt, wenn sie alle noch nicht existieren

Installation

Als application server habe ich Apache Tomcat benutzt. Bei mir lief die Anwendung in einem Tomcat 3.2, 4.0, 4.1 und 5.5). Die Installation erfolgt z.B. mit:

  1. tomcat installieren, z.B. auf meinem openSuse 10.3 das Paket tomcat55 installieren
  2. das WAR-Archive deployen, bei mir
    $ cp ust.war /srv/www/tomcat55/base/webapps
  3. tomcat starten
    $ /etc/rc.d/tomcat55 start
  4. die Anwendung steht dann unter http://localhost:8080/ust zur Verfügung

Anpassung

Einige Konfigurationsparameter können angepasst werden. Dabei wird der Standardwert von einem vorhandenen Java-Property überschrieben und dieser wieder von einem eventuell vorhandenen Kontext-Parameter.

Parameter Standard Beschreibung
user.name James Brown Der Bearbeiter, der den Eintrag neu angelegt oder zuletzt geändert hat.
UST_DATA /tmp Verzeichnis-Pfad zu den Dateien mit den Daten.
UST_CURRENCY € Währungskennzeichen.
UST_TAX_NUMBER 123 / 45678 Die Steuernummer.
UST_TAG ust Kennzeichen dieser Instanz.

Ein Java-Property wird z.B. im tomcat-Startskript in JAVA_OPTS gesetzt, z.B.

-DUST_DATA=/etc/2002

Die Konfiguration über Kontext-Parameter sollte jedoch der bevorzugte Weg sein. Er ermöglicht es auch mehrere Web-Anwendungen parallel mit unterschiedlichen Konfigurationen in einem Applikationsserver zu betreiben. Dazu muss das WAR-Archiv ausgepackt und die Parameter in WEB-INF/web.xml konfiguriert werden. In der Datei sind Beispiele zu finden.

Ein Beispiel für einen Kontorahmen (die Einträge in den Spalten der Anlage EÜR gleich den Kontonummern, allerdings nur die ich brauche) ist accounts. Nach einer Neuinstallation kann die leere Datei accounts mit der Vorlage überschrieben und der application server neu gestartet werden.

Probleme

java.security.AccessControlException: access denied

Zum Beispiel mit ubuntu 8.1 und tomcat6. Fix: Security Manager konfigurieren oder ausschalten. Ausschalten z.B. in /etc/init.d/tomcat6:

TOMCAT6_SECURITY=no
oder konfigurieren, z.B. in /var/lib/tomcat6/conf/policy.d/50local.policy mit folgenden zusätzlichen Zeilen, wenn die Daten in /var/local/ust liegen:
// for ust
grant codeBase "file:${catalina.base}/webapps/ust/-" {
  permission java.util.PropertyPermission "UST_CURRENCY", "read";
  permission java.util.PropertyPermission "UST_DATA", "read";
  permission java.util.PropertyPermission "UST_TAX_NUMBER", "read";
  permission java.util.PropertyPermission "user.name", "read";
  permission java.io.FilePermission "/var/local/ust/*", "read";
  permission java.io.FilePermission "/var/local/ust/*", "write";
}; 

org.apache.jasper.JasperException: Attribute value … is quoted with … which must be escaped when used within the value

Zum Beispiel mit ubuntu 8.1 und tomcat6. Fix: Strict Quote Escaping ausschalten. Zum Beispiel in catalina.sh oder /etc/init.d/tomcat6 oder für OpenSUSE 12.1 in /etc/tomcat6/tomcat6.conf

JAVA_OPTS="$JAVA_OPTS -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false"