Verkaufs- Kassensoftware in python

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Hallo ete,

du kannst dir mal die Demo von http://www.bonit.eu/asp/download.asp laden und ausgiebig testen......

Gruss
pyStyler
BlackJack

Man sollte bei Kassensystemen auf jeden Fall diesen Testfall berücksichtigen: Lidl und der Kassen-Bug. :-D
Leon
User
Beiträge: 9
Registriert: Dienstag 10. Juni 2008, 22:06

Hey ihr Kassierer :)
zwar schon etwas älter, der Eintrag hier... Aber: ich habe meine Kassensoftware in python geschrieben und bin damit ganz zufrieden.
Allerdings gibt es ja bald die Verpflichtung eine TSE (Technische Sicherheitseinrichtung) mit einzubauen.
Hat sich jmd von euch da mal mit beschäftigt?
lg, Leon
bwurst
User
Beiträge: 6
Registriert: Sonntag 22. Dezember 2019, 06:44

Hallo.

Zunächst mal Hallo, ich bin hier neu im Forum. Ich hatte kurz Kontakt mit Leon per PN und wir haben beschlossen, dass es öffentlich weiter gehen soll. Lasst uns also diesen Thread wieder aufwecken. :)

Ich habe vor einiger Zeit auch ein Kassenprogramm in Python geschrieben. Allerdings einfach nur für meinen kleinen Betrieb zum Sebstnutzen. Den Aufwand der TSE-Unterstützung und DSFinV-K-Export kann ich noch nicht ganz überblicken aber ich wäre auf jeden Fall bereit, da Schweiß und im überschaubaren Rahmen auch Geld hinein zu stecken um mein geliebtes Kassenprogramm weiter nutzen zu können.

Leon, du hattest mir per PN angeboten, dass man sich gemeinsam ein TSE-Developer-Sample kaufen könnte. Ich würde sogar noch einen Schritt weiter gehen und versuchen gemeinsam eine Art Backend/Middleware zu machen um die damit verbundenen Klassen und Funktionen gemeinsam zu entwickeln. Da man die Hardware nicht gleichzeitig hat und der erste daher mehr Grundlagenforschung machen muss, könnte es auch so laufen dass ich das TSE zahle und du erstmal den grundlegenden Code machst, den ich dann übernehmen kann. Ich würde stark dafür plädieren, den daraus entstehenden Code des Backends unter einer FOSS-Lizenz (LGPL? BSD?) freizugeben.

Mein Kassenprogramm ist bisher ein Wildwuchs weil es eben nur von mir für mich entwickelt wurde. Da es bisher nicht im eigentlichen Sinne der GDPdU entspricht, habe ich diesen Code noch nicht als freie Software veröffentlicht, das kann ich aber bei Interesse gerne nachholen und für neuen Code strebe ich das auf jeden Fall an. Um das weiterhin gewerblich einsetzen zu können und damit auch mal eine Kassenprüfung zu überleben möchte ich die TSE-Einführung gleich dazu nutzen, die Datenverarbeitung und -Speicherung der Kassendaten neu zu machen und von meinen restlichen Geschäftsdaten getrennt zu verarbeiten. Diese Gelegenheit kann ich gerne dazu nutzen, Code auf einer anderen, gemeinsam Grundlage zu entwickeln, den ich nachher bei mir auch nutzen kann. Meine Programmierkenntnisse sind durchwachsen, ich bin eigentlich mehr Systemadmin und kein Programmierer. Da ich in den letzten Monaten einigen Code auf Python 3 migriert habe bin ich bei Python grade wieder ein bisschen mehr 'drin'.

Als ersten Schritt habe ich mal eine Anfrage an den DFKA geschickt um die Taxonomie-Unterlagen zu erhalten damit man die Datenfelder genau spezifiziert hat, die nachher für den Export gebraucht werden. Ich denke das ist auch als Grundlage für die lokale Datenverarbeitung ein guter Start.

Ich bin momentan unentschlossen ob man bei der sauberen Implementierung einer lokalen TSE auch gleich alle Daten für eine Ausgabe nach DSFinV-K bekommt oder ob es vor diesem Hintergrund ein Weg wäre, auf einen Cloud-Dienstleister zu setzen, der Fiskalisierung im Sinne von TSE, Datenarchivierung und -Export extern vornimmt. Dazu liegt mir aber bisher kein Angebot vor in welchen Preisbereichen wir uns da bewegen. Weiß da jemand eine Größenordnung?

Grüße
Bernd
Leon
User
Beiträge: 9
Registriert: Dienstag 10. Juni 2008, 22:06

Hey Bernd,
jo, von mir aus können wir das so machen: ich fange an mit der Programmierung und wir machen ein Open-Source-Projekt daraus.
Allerdings bin ich auch nicht so der Mega-Programmierer. Mein Kassensystem ist ja nur deshalb entstanden, weil ich das für meinen Laden gebraucht habe. Aber ich denke, zusammen werden wir das schon hinbekommen :)
Und dann brauchen wir ja noch einen Namen. Vielleicht sowas wie: python-tse ?
bwurst
User
Beiträge: 6
Registriert: Sonntag 22. Dezember 2019, 06:44

Der Name und auch der Erfolg des Projekts kommt ein bisschen drauf an, was der gemeinsame Code alles abdecken soll. Das liegt an zwei Faktoren: 1. wie die TSE-Ansteuerung funktioniert und wie sich das in den jeweiligen Code einbauen lässt und 2. Wie wir jeweils mit dem Code des anderen zufrieden sind bzw. wie sehr sich unsere Anforderungen da unterscheiden. Vermutlich lässt sich 1. nur klären wenn man mal angefangen hat.

Da ich ja auch nur so dahin programmiert habe und das anfangs nur ein kleines "rechne mir den Preis des Kunden aus" war, hatte ich das nie so als wiederverwendbaren Code konzipiert. Ich habe jetzt einfach mal meinen Code ohne Versionshistoy auf github gestellt: https://github.com/bwurst/bibkasse (Lizenzangabe ist ungenau weil ich noch ein paar Fremd-Libraries mit abweichender Lizenz im Repo habe)

Ich hab jetzt nicht erfasst welche dependencies das hat und ob das noch Zusatzkram braucht, der nicht enthalten ist (mind. die users.xml fehlt glaube ich komplett) aber zur Beurteilung wie weit voneinander unsere Coding-Skills sind, könnte es ja taugen.

Das Speicher-Backend ist bei mir wie gesagt nicht auf Kassendaten beschränkt und ich würde das daher gerne neu machen um dann gleich alle Daten in der Form zu haben wie es die neuen Verordnungen vorsehen.

Ich hab der Familie versprochen, die nächsten Tage das Thema nicht intensiv zu verfolgen, daher hab ich jetzt mal ein paar Tage Funkstille. :)

Wünsche daher schöne Restfeiertage und nen schwungvollen Start ins neue Jahr, dann können wir das Thema nochmal durchackern.

Gruß
Bernd
Leon
User
Beiträge: 9
Registriert: Dienstag 10. Juni 2008, 22:06

Moin,
das sieht ja schon ganz schön gut aus, die bibkasse.
Ich habe manche Sachen ähnlich gemacht, manche ein bisschen anders. Z.B. habe ich die GUI mit wxPython gemacht. Aber ich glaube, vom Coding-Style können wir uns schnell einig werden.
Ich glaube auch, dass unser Projekt nicht wirklich kompliziert wird. Wir brauchen doch eigentlich nur sowas hier:

Code: Alles auswählen

class PythonTSE:
    def bon_start():
        # TSE-Code aufrufen...
        # ...
    def bon_abort():
        # ...
Also, dann bis nächstes Jahr! :)
bwurst
User
Beiträge: 6
Registriert: Sonntag 22. Dezember 2019, 06:44

Okay, konnte es nun doch nicht lassen. :)

Was du vorschlägst ist also "nur" die Ansteuerung der Swissbit-TSE aus Python, also die Abbildung der in der TR-03151 definierten Vorgänge. Ja, das ist das Minimalprogramm und wär schonmal was. :)
Ich selbst muss auf jeden Fall noch einiges mehr an meinem bestehenden Code ändern, da ich bisher z.B. keine fortlaufenden Bonnummern, Transaktionsummern und so verwalte.

Nach Lektüre von TR-03151 und DSFinV-K sehe ich keinen Grund zur Annahme, dass die TSE mit Einzelposten gefüttert wird. Das Feld processData enthält ja nur Brutto-Beträge. Das bedeutet, dass auch der geforderte Export nach DSFinV-K nicht über die TSE geht sondern dass man das getrennt abwickeln / implementieren muss. Das ist vermutlich viel mehr Arbeit als die bloße Anbindung der TSE.

Ich habe jetzt die DSFinV-K durchgelesen und da werden für die Exportdateien extrem viele Datenfelder spezifiziert und ein Großteil davon sind für mich irrelevant. In den Beispielen sind auch viele Felder leer, in der Spezifikation ist aber leider nicht definiert welche Felder optional sind. Ich denke das wird die Herausforderung. :)

Natürlich weiß ich nicht, wie dein Betrieb arbeitet und welche Vorgänge da in der Kasse abgebildet sind aber falls wir eine gemeinsame Datenstruktur finden könnten, dann könnte man den Export nach DSFinV-K auch gemeinsam entwickeln. Wenn du dein Kassen-Programm nur bei dir einsetzt, würdest du den (vorhandenen) Code auch öffentlich zugänglich machen?

Gruß
Bernd
Leon
User
Beiträge: 9
Registriert: Dienstag 10. Juni 2008, 22:06

Hey Bernd,
ich wäre dafür, dass wir erstmal mit der Minimallösung (die in TR-03151 definierten Vorgänge) anfangen. Wenn es gut klappt, dann können wir gerne mit dem Export etc. weitermachen.
Meinen restlichen Code möchte ich eigentlich nicht veröffentlichen, weil ich da evtl. nochmal ein kommerzielles Projekt draus machen will. Aber wenn es soweit ist, kann ich ja nochmal überlegen, oder wir vergleichen einfach die Datenstruktur und alles, was sonst noch für den Export benötigt wird.
lg, Leon
bwurst
User
Beiträge: 6
Registriert: Sonntag 22. Dezember 2019, 06:44

Okay. Ich hab mir das auch nochmal durch den Kopf gehen lassen und ich kann mich auch erstmal mit einer Minimallösung anfreunden. Und wenn ich dann zunächst keinen Export habe, dann ist das halt so. Müsste ich im Notfall dann hacken wenn ihn einer haben will. Ich hab vermutlich alle dafür nötigen Daten schon jetzt greifbar irgendwo in der Datenbank.

So wie ich mir die Infos bisher zusammen gereimt habe, sollte es dann wirklich nicht viel Code sein, der für die TSE nötig ist, ein richtiges "Projekt" ist es dann erstmal nicht. :)

Also, wie können wir das jetzt organisatorisch machen? Magst du das DEV-Kit kaufen und ich kaufe es dir danach ab? Möglicherweise ist es auch angemessen, das zu behalten weil man das für weitere Tests und Weiterentwicklungen noch nutzen möchte. Vermutlich merkt man das erst wenn man's hat.

Ich bin nach wie vor dafür, Ressourcen zu teilen. Vorschlag: Entweder ich kaufe das DEV-Kit und leite es dir umgehend vollständig weiter (möchte mir natürlich irgendwie Zugang zu den Developer-Unterlagen verschaffen), im Gegenzug bekomme ich Zugriff auf den von dir erstellten Sourcecode um das Teil anzusteuern. Alternativ kaufst du das Kit und ich verspreche, dir das auf deinen Wunsch hin (z.B. bis spätestens Ende Februar damit ich auch noch Zeit habe was zu programmieren) wieder zum halben Preis abzukaufen, sofern das vom Hersteller nicht irgendwie verhindert wird. Willst du es behalten, kauf ich mir halt ein eigenes.
Leon
User
Beiträge: 9
Registriert: Dienstag 10. Juni 2008, 22:06

Hi,
nach einem Telefonat nun hier das Ergebnis für die Nachwelt: ich kaufe mir gleich das Developer-Kit. Falls es sich lohnt, dann werden wir zusammen die Software, die wir zum Ansteuern verwenden bei github veröffentlichen.
Leon
User
Beiträge: 9
Registriert: Dienstag 10. Juni 2008, 22:06

und hier der Link zu github:
https://github.com/bwurst/python-tse
ddlab
User
Beiträge: 3
Registriert: Donnerstag 26. Oktober 2017, 18:43

Hallo in die Runde.

Ich bin komplett neu hier. Nach längerer Krankheit bin ich einige Jahre raus aus'm coden, nun fange ich grad wieder an, mich da reinzuarbeiten. Habe also mit Sicherheit einige Fragen, die Augenrollen oder andere Unverständnisreaktionen hervorrufen könnten. Ich bitte das zu entschuldigen.
Warum bin ich hier ? Was ist mein background ?

In den 2000ern begann ich mich mit Webseiten zu befassen, nachdem ich einige Zeit ein kleines Internetcafé betrieben hab.
Ich war da nicht sonderlich aktiv, die Aufträge und der output waren eher sehr überschaubar.
Durch einen Job in einer Internetagentur kam ich dann erst richtig zum Programmieren, GUI, DB, MySQL, JS, JQuery etc... für die kollaborative Zusammenarbeit mehrerer Büros in der Aquise mit CRM etc.

2013 sollte ich für einen Bekleidungsladen einen Online-Shop aufsetzen. Es stellte sich schnell heraus, daß die vorher erst mal von Ihrer Excel-Kassen-Lösung weg müssen. Und so startete ich die Entwicklung eines PHP-basierten Tabletkassensystems (iPad + lokaler Apple-Server, mit angeschlossenen Druckern)
Zwei Jahre später 2015/16 sollte der Laden eine zweite Filiale in einer anderen Stadt eröffnen. Also PHP und MySQL ins Internet gepackt, etwas umgearbeitet, und somit filialfähig geworden. Die lokalen Rechner sind parallel zu der Bedienung übers iPad weiterhin notwendig, für die Drucker (von sowas wie HTML5-printing oder WLAN hatte ich noch keinen Plan). Die Apple-Server habe ich dann noch durch Raspberrys ersetzt, die sich von nun an mit python um die periphere Hardware und um Druckaufträge kümmern (per Cross Domain AJAX). Damit wurde das Kassensystem extrem schnell, weil zeitaufwändige Prozesse ausgelagert wurden (Bon-Druck auf EPSON, Strichcode-Klebe-Labels auf DYMO)
Soweit der Stand seit Jahren...

Jetzt kommt TSE ins Spiel.
Ich hatte dem Kunden quasi meine Zusammenarbeit gekündigt, aufgrund meiner Krankheit konnte ich mir nicht vorstellen, mein Kassensystem auf dieses next level zu heben.
Nachdem dieser sich aber verschiedene andere Kassensystem angesehen hat, und auch verschiedene Vertreter da hatte, hat er mir signalisiert, keines der marktüblichen iPad-Systeme biete ihm die Möglichkeiten und die Flexibilität, die mein Kassensystem ihm geboten hat. Ob ich nicht doch weitermachen könnte.
Hmm, na gut. Nach dem eingängigen Studium der Gesetze stellt sich also heraus, daß es für Computer-Kassen, die in einem bestimmten Zeitraum angeschafft worden sind, aber nicht direkt mit TSE nachrüstbar sind, eine Nachfrist bis Ende 2022 gibt.
So. Jetzt bin ich hier. Und es gibt diese Bibliothek https://github.com/bwurst/python-tse die mich in diesem Zusammenhang sehr interessiert.

Bevor ich mich ans Ausprobieren mache folgende Fragen:
- Muß auf einem LINUX / python System nicht noch irgendein Treiber installiert werden, oder doch ?
- Ist die Funktion auf SWISSBIT beschränkt, oder geht auch z.b. Diebold Nixdorf ?
- Wie lässt sich ein Nutzung für mehrere Client-IDs realisieren (mehrere POS in einer Filiale) ?

Freue mich auf Eure Antworten, Grüße von ddlab
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Vorweg: ich kenne mich mit TSE an sich nicht aus.

Was die Bibliothek & deine Frage angeht:

1) ja, sagt er ja: "Voraussetzung für die Nutzung dieses Moduls ist eine binäre Bibliothek, die mit der TSE kommuniziert. Die Weitergabe-Auflagen dieser Bibliothek sind restriktiv, daher ist diese Bibliothek nicht hier im Repository enthalten. Käufer der Entwickler-Version erhalten diese Daten vom Händler."

Diese Bibliothek scheint libWormAPI.so zu sein. Die muss also bezogen werden. Ob es die auch fuer den PI gibt (ARM!) statt "nur" fuer x86 musst du auch beim Hersteller erfragen.

2) Ich behaupte mal nein. Ich kann mir nicht vorstellen, dass Spezifikation auf der Ebene eines ABI stattgefunden hat, sondern das System hat Anforderungen, fuer die es zertifiziert ist. Wie die dann umgesetzt werden, entscheidet der Hersteller.

3) Da steht 'Das TSE-Modul kann mehrere Client-IDs verwalten und parallel betreiben, das ist in dieser Bibliothek aber nicht implementiert'. Also wohl nicht.
bwurst
User
Beiträge: 6
Registriert: Sonntag 22. Dezember 2019, 06:44

Ich habe mit Leon zusammen diese Bibliothek erstellt. Ich betreibe eine selbst erstellte Kassen-Software, die nur bei mir im Betrieb läuft (also kein Auftrags- oder Lizenzprodukt), bei Leon ist es soweit ich es verstanden hat ebenso. Wir haben zu Beginn des letzten Jahres in Kontakt gestanden, mittlerweile eigentlich nicht mehr. Die TSE habe ich jetzt einige Monate mit genau diesem Code in Benutzung, eine Kassen- oder Betriebsprüfung damit gab es bisher nicht. Die Export-Funktionen nutze ich selbst bisher gar nicht, die sind daher nicht praxiserprobt.

@__deets__ hat deine Fragen bereits korrekt beantwortet, Danke dafür!

Die binäre Bibliothek ist Teil der Zertifizierung. Es gab im Swissbit-Forum auch Anwender, die direkt auf die SD-Card schreiben. Technisch spricht da scheinbar nichts dagegen, aber damit entspricht das Gesamtprodukt nicht der Zertifizierung. Ich habe diesen Ansatz daher nur als Notlösung gesehen und war froh, dass ich es mit der Bibliothek hinbekommen habe. Ich gehe davon aus, dass diese Bibliothek Swissbit-spezifisch ist, auch wenn ich keine andere TSE kenne.

Da die Entwicklung meinem Eigenbedarf dient und mir niemand dafür irgendwelches Gehalt zahlt (und ich auch kein professioneller Entwickler bin), bildet mein Code nur das ab, was ich benötige. Ich bin natürlich gerne bereit, weitere Entwicklung in Form von Pull-Requests zu akzeptieren, auch einen fork auf github zu machen ist natürlich jederzeit möglich.
ddlab
User
Beiträge: 3
Registriert: Donnerstag 26. Oktober 2017, 18:43

@bwurst und @__deets__

Danke für Eure Erläuterungen, die ich soweit verstehe.
Bwurst, ich werde das mal mit dem AG besprechen, inwieweit er mit open source Entwicklungen als Auftrag klarkäme. Ich meine damit vor allem die Frage der Zertifizierung...
Ich selbst würde damit klarkommen, diesen part der TSE-Einbindung mittels eines völlig autarken RaspPi komplett auszulagern, und eben ggf. in Auftrag zu geben. Dann kann ich mich besser auf das eigentliche Kassensystem konzentrieren, was ich auch völlig überarbeiten möchte, immerhin ist es auf dem Stand von 2014, von ein paar Nachbesserungen abgesehen. Vor allem neue periphere Hardware einbinden.
Ggf. sende ich Dir später eine PM
Liebe Grüße
bwurst
User
Beiträge: 6
Registriert: Sonntag 22. Dezember 2019, 06:44

Damit wir uns hier nicht falsch verstehen: Ich stehe als Auftragsentwickler nicht zur Verfügung. :)
ddlab
User
Beiträge: 3
Registriert: Donnerstag 26. Oktober 2017, 18:43

bwurst hat geschrieben: Samstag 15. Mai 2021, 20:58 Damit wir uns hier nicht falsch verstehen...
Ooops, hab ich offenbar, sorry
Antworten