This commit is contained in:
Harald G. Mueller 2022-02-12 02:14:50 +01:00
parent 14d330b3e0
commit e46021e848
6 changed files with 18 additions and 291 deletions

View File

@ -1,291 +0,0 @@
**INHALTSVERZEICHNIS**
[1. Generelles](#_Toc42613952)
[2. Partner](#_Toc42613953)
[3. Auftrag](#auftrag)
[4. Artefakte](#_Toc42613955)
[5. Bewertung](#bewertung)
[6. Anhang](#anhang)
# Generelles
## Was ist e-Bill
E-Bill ist ein System, was von SIX Payment AG und PostFinance AG gemeinsam
betrieben wird. Alle wichtigen Banken (über 80 Banken, Stand 2015) und alle
Postkonti (rote Einzahlungsscheine) sind hier angeschlossen. Genauere
Informationen bei <https://ebill.ch> oder auch
<https://www.postfinance.ch/de/privat/produkte/digital-banking/ebill.html>
Aus Sicht des Verbrauchers (Endkunde/Käufer/Zahler/Payer) treffen die
e-Rechnungen genau im Zahlungs-Bereich des e-Banking-Systems ein. Eintreffende
e-Rechnungen werden von e-Banking-System dem Verbraucher angezeigt. Mit einem
Klick zu der Übersicht der e-Rechnungen und einem zweiten Klick für die
Zahlungs-Terminbestätigung wird die Rechnung zur Zahlung freigegeben. Dem
Verbraucher werden alle Zahlungs- und Empfängeridentifizierende Informationen,
die beim Abschreiben des Einzahlungsscheins abverlangt werden würden,
abgenommen.
# Partner
## Übersicht
![Ein Bild, das Outdoorobjekt enthält. Automatisch generierte
Beschreibung](media/222e439a384ca8acd42e0d2087235ce8.png)
Die Pfeile blauen zeigen die Dokumenten-Fluss-Richtung der Rechnung, die grünen
Pfeile die Quittungen und die gestrichelten grünen Pfeile zeigen den
(Be-)Zahlungsfluss.
# Auftrag
## Ausgangslage
Sie sind Informatiker bei einem Detaillisten in der Schweiz, der sowohl
Präsenzgeschäft/-läden mit Kassen wie auch einen Onlinehandel betreibt. Als
Neuerung will Ihr Arbeit-/Auftraggeber für die Endkunden (Verbraucher/Consumer)
die Rechnungsstellung und Bezahlung über e-Bill anbieten. Die Endkunden können
Ihre Waren gleich mitnehmen und bekommen im Nachhinein eine Rechnung und in
ihrem E-Banking-System eine Zahlungsaufforderung, um per Mausklick die Zahlung
auszulösen.
## Ihre Aufgabe
Sie bekommen auf dem System des Rechnungsstellers in einem eigenen Format direkt
von den Kassensystemen Rechnungsdateien mit allen Informationen, die es für die
Rechnungsstellung über e-Bill braucht. Sie holen diese per FTP ab und erstellen
daraus
1. eine Rechnung im Klartext (Zur Vereinfachung nur als Text-Format, produktiv
wäre das ein PDF)
2. eine Rechnung im XML-Format für das SIX-PaymentServices-Format (Schweizer
Marktleader)
Diese beiden Dateien geben Sie per FTP in das «Zahlungssystem» ab. Dann erfolgt,
für Sie im Hintergrund die Weiterleitung ins Bankensystem. Ob das geklappt hat,
wissen Sie in dem das Zahlungssystem eine Quittungsdatei produziert und Ihnen
zur Verfügung stellt.
Ihrem Kunden (dem Rechnungssteller) stellen Sie diese Quittungsdatei sowohl per
E-Mail wie auch im Rechnungsstellungs-System in einem Archiv zur Verfügung damit
er überprüfen kann, ob die Rechnung verschickt wurde.
<https://haraldmueller.ch/schoolerinvoices/out> (Passwort auf html-Seite: tbz)
<https://haraldmueller.ch/schoolerinvoices/in>
![Ein Bild, das Outdoorobjekt enthält. Automatisch generierte
Beschreibung](media/222e439a384ca8acd42e0d2087235ce8.png)
<https://coinditorei.com/zahlungssystem> (Passwort: tbz)
<https://coinditorei.com/zahlungssystem/in>
<https://coinditorei.com/zahlungssystem/out>
## Arbeitsschritte
1. Automatisches (regelmässiges) Abholen der Rechnungsaufträge des
Kunden/Rechnungssteller (Abholserver) inkl. dem Löschen der Datei auf dem
Abholserver per FTP (Kundensystem**/out/**[KlasseUndIhrNachname])
FTP-Server: ftp.haraldmueller.ch
Benutzer: schoolerinvoices
Passwort: Berufsschule8005!
2. Verarbeitung der Rechnungsaufträge zu einer korrekten und druckbaren
Papierrechnung (…invoice.txt) und einer maschinell verarbeitbaren
XML-Rechnung (…invoice.xml)
3. Abgabe der Rechnung als TXT und XML auf dem Abgabeserver
(Zahlungssystem**/in/**[KlasseUndIhrNachname]) per FTP
FTP-Server: ftp.coinitorei.com
Benutzer: zahlungssystem
Passwort: Berufsschule8005!
4. Abholen der Quittung beim Abgabeserver
(Zahlungssystem**/out/**[KlasseUndIhrNachname]) per FTP
5. Erstellung der Bestätigungsmeldungen (Quittung und geschickte Rechnung) per
Mail und als Archiv-Datei (ZIP) auf dem Kundenserver
(Kundensystem**/in/**[KlasseUndIhrNachname]).
Alle Arbeitsschritte laufen über ein **Skript**, das über eine Zeitsteuerung
(crontab im Linux / Aufgabenplaner im Windows).
Machen Sie für die Schritte 1.) 2.) 3.) ein Skript und ein zweites Skript für
die Schritte 4.) und 5.).
# Artefakte
## Artefakt der Anlieferung
Zur Anlieferung sind primär Text-Dateien vorgesehen, die ein Inhalt im
csv-Format ({semi}colon separated values ;) haben. Es wird pro Rechnung eine
Datei angeliefert.
Sie können einen Dateinamen mit dem Namen rechnung[RGNummer].data erwarten.
(Konkret **rechnung21003.data**).
## Artefakte der Abgabe
An den Zahlungs-Provider des Schweizer Zahlungsverkehrs (PostFinance / SIX
Payment Services) muss pro Rechnung eine menschenleserliche TXT und eine
schnittstellenkonforme XML-Datei abgegeben werden.
Die Dateien müssen einen bestimmten Namen haben.
- [**Kunden**nummer]_[**Rechnung**snummer]_invoice.xml (Konkret
**K821_21003_invoice.xml**)
- [**Kunden**nummer]_[**Rechnung**snummer]_invoice.txt (Konkret
**K821_21003_invoice.txt**)
Testfiles können Sie finden unter:
<https://coinditorei.com/zahlungssystem/testfiles>
## Kontrollen
Bauen Sie Kontrollen ein, um festzustellen, ob «die» Rechnung richtig
verarbeitet wurde, bzw. ob und wann und wie ein allfälliger Abbruch
stattgefunden hat. Am einfachsten sind Log-Files.
## Konfiguration
Gut ist, wenn das System von aussen konfiguriert / eingestellt werden kann
(separates Config-File).
# Bewertung
## Funktionalität
Die Bewertung geschieht über einen Live-Test mit von der Lehrperson erstellten
Test-Dateien. Es gibt eine normale richtiges Testdatei und eine Testdatei, die
unmöglich zu verarbeiten ist. Dabei wird geschaut, ob das System korrekt läuft.
Die korrekt Testdatei soll richtig verarbeitet werden. Die inkorrekte Testdatei
darf nicht verarbeitet werden. Dies müssen Sie nachvollziehen können.
## Dokumentation
Kurze textliche Dokumentation, eine Skizze über Ihr Skript-System und den Ablauf
als UML-Ablaufdiagramm / Funktionendiagramm.
## Benotung
**Note 4:**
Viele Teile der Vorgabe wurden erreicht, aber es fehlt noch etwas damit alles
automatisch funktioniert.
**Note 5:**
Das System funktioniert aus Sicht des Kunden, wenn alles richtig definiert war
(keine Fehler in der Rechnungsdatei oder wenn die Quittung nicht vom
Zahlungssystem bereitgestellt wurde).
**Note 6:**
Komplette Verarbeitung der Vorgaben inklusive Log-Dateien zur Rekonstruktion des
Ablaufes.
Alle Abläufe sind automatisiert und können per Konfigurationsdatei beeinflusst
werden (FTP-Server Einstellungen).
Es sind diverse Sicherheitsmechanismen eingebaut (Fehlermeldungen mit
aussagekräftigem und nützlichem Inhalt).
# Anhang
## Inhalt und Beschreibung eines Rechnungsauftrags (Input)
| Dateiname | rechnung21003.data |
|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Inhalt | Rechnung_21003;Auftrag_A003;Zürich;21.07.2021;10:22:54;ZahlungszielInTagen_30 Herkunft;41010000001234567;K821;Adam Adler;Bahnhofstrasse 1;8000 Zuerich;CHE-111.222.333 MWST;harald.mueller@tbz.ch Endkunde;41301000000012497;Autoleasing AG;Gewerbestrasse 100;5000 Aarau RechnPos;1;Einrichten E-Mailclients;5;25.00;125.00;MWST_0.00% RechnPos;2;Konfig & Schulung Scanningcnter;1;1000.00;1000.00;MWST_0.00% |
**Zeile 1: (Rechnungs-Grundinformationen)**
Rechnung_21003;Auftrag_A003;Zürich;21.03.2021;10:22:54;ZahlungszielInTagen_30
\- Zeilenkennung ("Rechnung" inkl. Rechnungsnummer);
\- Auftragsnummer ("Auftrag" inkl. Nummer);
\- Absendeort (Erzeugung);
\- Rechnungsdatum(Erzeugung);
\- Rechnungszeit(Erzeugung);
\- Zahlungsziel (hier 30 Tage) -\> also ist zu berechnen 21.3.2021 plus 30 Tage =
20.4.2021
**Zeile 2: (Herkunft/Absender der Rechnung)**
Herkunft;41010000001234567;K821;Adam;Adam Adler;Bahnhofstrasse 1;8000
Zuerich;CHE-111.222.333 MWST;harald.mueller@tbz.ch
\- Zeilenkennung ("Herkunft" =Absender, =Rechnungssteller, =Geldempfänger)
\- Party-ID Rechnungssteller (=Kundennummer beim Zahlungssystem)
\- Kundennummer beim Rechnungssteller (Herkunft)
\- Name (Herkunft)
\- Adresse (Herkunft)
\- Postleitzahl und Ort (Herkunft)
\- Firmen-/Unternehmens-ID inkl. Mehrwertsteuerkennung (Herkunft)
\- Email-Adresse (Herkunft)
**Zeile 3: (Endkunde/Adressat der Rechnung)**
Endkunde;41301000000012497;Autoleasing AG;Gewerbestrasse 100;5000 Aarau
\- Zeilenkennung ("Endkunde" =Empfänger der Rechnung, =Bezahler =hat Produkte
bezogen)
\- Kunden-ID beim Zahlungssystem-Provider
\- Name (Empfänger)
\- Adresse (Empfänger)
\- Postleitzahl und Ort (Empfänger)
**Zeile 4 und weitere Zeilen (Rechnungspositionen, mehrere: 1 bis n):**
RechnPos;2;Konfig & Schulung Scanningcnter;1;1200.00;1200.00;MWST_0.00%
\- Zeilenkennung ("RechnPos" =Eine Rechnungsposition)
\- Rechnungspositionsnummer
\- Rechnungspositionsbezeichnung
\- Menge/Anzahl in der Einheit (Stück, Std, Liter, Meter, m2, usw.)
\- Preis pro Einheit
\- Menge mal Preis pro Einheit (fertig gerechnet)
\- Mehrwertsteuer-Satz (zur Vereinfachung nur 0-%-tige Mehrwertsteuer)
## Inhalt einer Rechnung (TXT-Output)
| Dateiname | **K821**\_**21003**\_invoice.txt |
|-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Inhalt | Adam Adler Bahnhofstrasse 1 8000 Zuerich CHE-111.222.333 MWST Uster, den 21.07.2021 Autoleasing AG Gewerbestrasse 100 5000 Aarau Kundennummer: **K821** Auftragsnummer: A003 Rechnung Nr **21003** ----------------------- 1 Einrichten E-Mailclients 5 25.00 CHF 125.00 0.00% 2 Konfig & Schulung Scanningcenter 1 1200.00 CHF 1200.00 0.00% ----------- Total CHF 1325.00 MWST CHF 0.00 Zahlungsziel ohne Abzug 30 Tage (20.08.2021) Einzahlungsschein 1325 . 00 1325 . 00 Autoleasing AG Gewerbestrasse 100 0 00000 00000 00000 5000 Aarau Autoleasing AG Gewerbestrasse 100 5000 Aarau |
(leere Linien und leere Zeichen sind wichtig und dienen der Positionierung)
## Inhalt einer Rechnung (XML-Output)
| Dateiname | K821_21003_invoice.xml |
|-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Inhalt | \<XML-FSCM-INVOICE-2003A\> \<INTERCHANGE\> \<IC-SENDER\> \<Pid\>**41010000001234567**\</Pid\> \</IC-SENDER\> \<IC-RECEIVER\> \<Pid\>**41301000000012497**\</Pid\> \</IC-RECEIVER\> \<IR-Ref /\> \</INTERCHANGE\> \<INVOICE\> \<HEADER\> \<FUNCTION-FLAGS\> \<Confirmation-Flag /\> \<Canellation-Flag /\> \</FUNCTION-FLAGS\> \<MESSAGE-REFERENCE\> \<REFERENCE-DATE\> \<Reference-No\>**202107164522001**\</Reference-No\> \<Date\>**20210731**\</Date\> \</REFERENCE-DATE\> \</MESSAGE-REFERENCE\> \<PRINT-DATE\> \<Date\>**20210731**\</Date\> \</PRINT-DATE\> \<REFERENCE\> \<INVOICE-REFERENCE\> \<REFERENCE-DATE\> \<Reference-No\>**21003**\</Reference-No\> \<Date\>**20210731**\</Date\> \</REFERENCE-DATE\> \</INVOICE-REFERENCE\> \<ORDER\> \<REFERENCE-DATE\> \<Reference-No\>**A003**\</Reference-No\> \<Date\>**20210731**\</Date\> \</REFERENCE-DATE\> \</ORDER\> \<REMINDER Which="MAH"\> \<REFERENCE-DATE\> \<Reference-No\>\</Reference-No\> \<Date\>\</Date\> \</REFERENCE-DATE\> \</REMINDER\> \<OTHER-REFERENCE Type="ADE"\> \<REFERENCE-DATE\> \<Reference-No\>**202107164522001**\</Reference-No\> \<Date\>**20210731**\</Date\> \</REFERENCE-DATE\> \</OTHER-REFERENCE\> \</REFERENCE\> \<BILLER\> \<Tax-No\>**CHE-111.222.333 MWST**\</Tax-No\> \<Doc-Reference Type="ESR-ALT "\>\</Doc-Reference\> \<PARTY-ID\> \<Pid\>**41010000001234567**\</Pid\> \</PARTY-ID\> \<NAME-ADDRESS Format="COM"\> \<NAME\> \<Line-35\>**Adam Adler**\</Line-35\> \<Line-35\>**Bahnhofstrasse 1**\</Line-35\> \<Line-35\>**8000 Zürich**\</Line-35\> \<Line-35\>\</Line-35\> \<Line-35\>\</Line-35\> \</NAME\> \<STREET\> \<Line-35\>\</Line-35\> \<Line-35\>\</Line-35\> \<Line-35\>\</Line-35\> \</STREET\> \<City\>\</City\> \<State\>\</State\> \<Zip\>\</Zip\> \<Country\>\</Country\> \</NAME-ADDRESS\> \<BANK-INFO\> \<Acct-No\>\</Acct-No\> \<Acct-Name\>\</Acct-Name\> \<BankId Type="BCNr-nat" Country="CH"\>001996\</BankId\> \</BANK-INFO\> \</BILLER\> \<PAYER\> \<PARTY-ID\> \<Pid\>**41301000000012497**\</Pid\> \</PARTY-ID\> \<NAME-ADDRESS Format="COM"\> \<NAME\> \<Line-35\>**Autoleasing AG**\</Line-35\> \<Line-35\>**Gewerbestrasse 100**\</Line-35\> \<Line-35\>**5000 Aarau**\</Line-35\> \<Line-35\>\</Line-35\> \<Line-35\>\</Line-35\> \</NAME\> \<STREET\> \<Line-35\>\</Line-35\> \<Line-35\>\</Line-35\> \<Line-35\>\</Line-35\> \</STREET\> \<City\>\</City\> \<State\>\</State\> \<Zip\>\</Zip\> \<Country\>\</Country\> \</NAME-ADDRESS\> \</PAYER\> \</HEADER\> \<LINE-ITEM /\> \<SUMMARY\> \<INVOICE-AMOUNT\> \<Amount\>**0000135000**\</Amount\> \</INVOICE-AMOUNT\> \<VAT-AMOUNT\> \<Amount\>\</Amount\> \</VAT-AMOUNT\> \<DEPOSIT-AMOUNT\> \<Amount\>\</Amount\> \<REFERENCE-DATE\> \<Reference-No\>\</Reference-No\> \<Date\>\</Date\> \</REFERENCE-DATE\> \</DEPOSIT-AMOUNT\> \<EXTENDED-AMOUNT Type="79"\> \<Amount\>\</Amount\> \</EXTENDED-AMOUNT\> \<TAX\> \<TAX-BASIS\> \<Amount\>\</Amount\> \</TAX-BASIS\> \<Rate Categorie="S"\>0\</Rate\> \<Amount\>\</Amount\> \</TAX\> \<PAYMENT-TERMS\> \<BASIC Payment-Type="ESR" Terms-Type="1"\> \<TERMS\> \<Payment-Period Type="M" On-Or-After="1" Reference-Day="**31**"\>**30**\</Payment-Period\> \<Date\>**20210830**\</Date\> \</TERMS\> \</BASIC\> \<DISCOUNT Terms-Type="22"\> \<Discount-Percentage\>0.0\</Discount-Percentage\> \<TERMS\> \<Payment-Period Type="M" On-Or-After="1" Reference-Day="**31**"\>\</Payment-Period\> \<Date\>\</Date\> \</TERMS\> \<Back-Pack-Container Encode="Base64"\> \</Back-Pack-Container\> \</DISCOUNT\> \</PAYMENT-TERMS\> \</SUMMARY\> \</INVOICE\> \</XML-FSCM-INVOICE-2003A\> |
## Inhalt & Form der Mail
![](media/410696c49377f26941058e6c1e54384a.png)
![](media/872c95ea436e1d275c57a7c912634701.png)
- Anstelle von **Vorname** **Nachname** machen Sie natürlich Ihr richtiger
Name rein!
- [**Kunden**nummer]_[**Rechnung**snummer].zip (Konkret **K821_21003.zip**
\> gleich wie invoice.txt)

View File

@ -0,0 +1,18 @@
# Aufgabe "Lieferung ins Zahlungssystem"
<https://haraldmueller.ch/schoolerinvoices/out> (Passwort auf html-Seite: tbz)
<https://haraldmueller.ch/schoolerinvoices/in>
FTP-Server: ftp.haraldmueller.ch
Benutzer: schoolerinvoices
Passwort: Berufsschule8005!
<https://coinditorei.com/zahlungssystem> (Passwort: tbz)
<https://coinditorei.com/zahlungssystem/in>
<https://coinditorei.com/zahlungssystem/out>
FTP-Server: ftp.coinitorei.com
Benutzer: zahlungssystem
Passwort: Berufsschule8005!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB