Wie wir einem Self-Checkout-Schalter beigebracht haben, Geld anzunehmen

    Unsere Firma beschäftigt sich seit ungefähr zwei Jahren mit Self-Checkout-Schaltern, und wir sind diesen Weg iterativ gegangen. In einem meiner vorherigen Beiträge habe ich über die Schwierigkeiten gesprochen, die bei unserer ersten Einführung von zwei Geschäften in Kaliningrad aufgetreten sind. Gleichzeitig haben wir dort und in mehreren nachfolgenden Geschäften Kassen eingerichtet, an denen nur Zahlungen mit Kreditkarte akzeptiert werden. Diese Lösung hatte sowohl Vorteile für uns (eine solche Lösung ist schneller auf den Markt zu bringen) als auch für die Filialen (sie konnten die Kundenströme nach Zahlungsarten aufteilen). Wir haben aber verstanden, dass wir früher oder später den Anschluss des Kassenmoduls an den Self-Checkout-Schalter in Angriff nehmen müssen. Jeder, der wissen möchte, wie es war, ist bei cat willkommen.



    Der Hauptkomplex für die Annahme von Bargeld für Kassen der schwedischen Firma ITAB, an dessen Entwicklung wir uns beteiligen, ist der Komplex der japanischen Firma Glory mit dem erbärmlichen Namen Cash Infinity 10.


    Er besteht aus zwei getrennten Geräten - Banknoten- und Münzprüfern, die an den Controller angeschlossen sind.

    Münzprüfer- Dies ist ein Gerät mit Ein- und Ausgabepunkten für Münzen, einem Förderband, einem Validator und 8 identischen Münzboxen. Nachdem die Münze angenommen wurde, wird sie über ein Förderband an den Prüfer geliefert, der ihren Nennwert ermittelt und an die ihm entsprechende Münzkassette sendet. Wenn der Nennwert nicht definiert ist, wird die Münze durch den Abhebepunkt der Münzen zurückgegeben. Ebenso wird jeglicher Müll zurückgegeben - Büroklammern, Schlüssel. Münzen selbst können sicher in eine Handvoll gebracht werden - der Münzprüfer verarbeitet ziemlich viele Münzen mit verschiedenen Stückelungen ziemlich ruhig. Münzen arbeiten sowohl am Eingang als auch am Ausgang, Wechselgeld wird an den Käufer mit denselben Münzen ausgegeben, die die vorherigen Kunden an der Kasse eingezahlt haben.

    Rechnungsprüferanders angeordnet. Eine Banknote ist ein dünnes Stück Papier, und wenn sie irgendwo gefaltet ist, funktioniert das Aufheben nicht, was bedeutet, dass es schwieriger ist, das Ein- / Ausgabesystem für Banknoten zu implementieren. Schwieriger, aber möglich. Hierzu werden spezielle Trommeln in den Geldscheinprüfer eingelegt: Die erkannte Geldschein wird auf eine solche Trommel aufgewickelt und kann auf die gleiche Weise zur Auslieferung entnommen werden. Das einzige Problem ist, dass der Platz im Gerät begrenzt ist, sodass nur drei Trommeln darauf platziert sind, auf denen die gängigsten Rechnungen installiert werden müssen. Alle anderen Rechnungen (sowie die Reiserechnungen bei Überfüllung der entsprechenden Trommel) fallen in die Kassette, die der Mitarbeiter jederzeit in geschlossener Form entnehmen und den gesamten Inhalt an die Hauptkasse bringen kann.

    Wir mussten uns mit dem Controller verbinden: Es kombiniert die Arbeit zweier unabhängiger Geräte, empfängt über seine API Befehle von externen Systemen (in unserem Fall vom Self-Checkout-Counter) und gibt Statusinformationen für angeforderte Vorgänge sowie den aktuellen Status zurück. Es klingt ziemlich verständlich, und irgendwann dachte ich persönlich sogar, dass es nicht viel komplizierter sein sollte, eine für die gesamte Arbeit mit Bargeld zuständige Einheit anzuschließen, als ein Bankterminal anzuschließen. Das war natürlich nur eine Illusion, und schon zu Beginn der Arbeit standen wir vor einer Reihe großer Aufgaben:

    1. Käufer-Schnittstelle für die Zahlung


    Die Spitze des Eisbergs (und wie sich später herausstellte, eine der verständlichsten Aufgaben) bestand darin, eine Kundenschnittstelle für den Erhalt von Bargeld zu erstellen. Wenn Sie Bargeld als Zahlungsmethode auswählen, wechselt das Gerät vom Ruhemodus (IDLE) in den Bargeldakzeptanzmodus (WAIT INTSERTATION). Informationen zu allen eingegebenen Stückelungen werden in unser Bargeldprogramm übertragen.



    Wir stießen auf Schwierigkeiten - in dem Moment, als der eingezahlte Betrag größer als der Scheckbetrag wurde, konnten wir keinen Änderungslieferbefehl für den erforderlichen Betrag senden: Es gibt einfach keinen solchen Befehl in der API. Dies geschieht, weil die Bearbeitung der eingebrachten Rechnung und deren Übermittlung an das externe System langwierig ist, dh zu dem Zeitpunkt, zu dem das externe System von der ausreichenden Menge Kenntnis erlangt hat, kann noch ein Teil der Banknoten oder Münzen bearbeitet werden. Dementsprechend senden wir den CASH REQUEST-Befehl an den Controller, der dem Controller mitteilt, dass es möglich sein wird, mit der Änderung fortzufahren, wenn alle Rechnungen eingezahlt und verarbeitet wurden. Und der Controller selbst gibt das WAIT FOR CHANGE-Ereignis an uns zurück, wonach wir den Änderungsübermittlungsbildschirm anzeigen.



    2. Tankeinstellungen für alle Bewertungen


    Mit Münzen scheint alles einfach: 8 Behälter und nur Münzen mit 8 Stückelungen im Einsatz. Richtig, der Glory Penny akzeptiert keine großen 10-Rubel-Münzen. Die verbleibende Kapazität kann entweder unter einer der laufenden Stückelungen oder unter überschüssigen Münzen angegeben werden. Wir haben die zweite Option gewählt. Überschuss oder Mischer sammelt Münzen unterschiedlicher Stückelung bei Überfüllung ihrer Behälter. Für Notizen war alles etwas einfacher: Es war notwendig zu wählen, welche 3 Nennwerte auf Trommeln platziert werden sollten. Nach Rücksprache mit dem Kunden wählten wir Banknoten von 50, 100 und 500 Rubel. Dementsprechend gibt der Kassierer kein Wechselgeld in Tausendstel-Scheinen aus.

    Eine der wichtigsten Fragen zur Optimierung: Zu welchen Werten werden Barzahlungen an der Selbstbedienungskasse blockiert? Ich möchte keine Situationen zulassen, in denen der CASH REQUEST-Befehl erneut an den Controller gesendet wird und dieser aufgrund fehlender erforderlicher Werte keine Änderungen vornehmen kann. Ich wollte die Zahlung nicht viel im Voraus blockieren, aber ich wollte der Problemsituation nicht noch näher kommen. Infolgedessen haben wir uns aus Angst und wegen einer einfacheren Implementierungsoption für eine Vorauslösung entschieden: Die Barzahlung wird gesperrt, wenn es für mindestens einen Nennwert nicht mehr möglich ist, beim nächsten Wert eine Änderung vorzunehmen. Das heißt, wenn 500-Rubel-Noten auf der Rolle weniger als 9 bleiben (das ist, wie viele Noten erforderlich sind, um bei einem kleinen Kauf eine Änderung vorzunehmen, wenn eine fünftausendste Note getätigt wird) oder 100-Rubel-Noten weniger als 4 sind,





    Darüber hinaus wird die Barzahlung automatisch gesperrt, wenn sich ein Kassettenüberlauf mit Bargeld oder überschüssigen Münzen nähert.

    3. Hinweis auf einen Mangel oder einen Überschuss an Banknoten und Münzen


    Das Anzeigesystem dient dazu, den Filialmitarbeiter über eine bevorstehende Problemsituation zu informieren. Wir haben zwei Benachrichtigungsmechanismen: eine Taschenlampenanzeige über der Registrierkasse und eine Statusanzeige an der Registrierkasse in der Benutzerschnittstelle des Geschäfts. Die Logik ist folgende: Sobald der Assistent feststellt, dass zwischen den Einkäufen an der Kasse die Taschenlampe grün zu blinken beginnt, müssen Sie den Bargeldstatus überprüfen. Er kann detailliertere Informationen im Bargeldmodus sehen.



    Im Anzeigesystem werden Zustände, die keine Aufmerksamkeit erfordern, grau, in der Nähe von problematischen rosa und kritisch (wodurch die Barzahlung gesperrt wird) rot angezeigt. Es scheint, dass eine Ampel mit grünen, gelben und roten Zuständen in den Sinn gekommen ist, aber in dieser bunten Kombination ist es schwieriger, etwas Wichtiges zu isolieren.

    Die Farbe hängt auch vom Behältertyp ab. Beispielsweise ist ein Überlaufen der Münzkassetten schlecht, da jetzt alle Münzen überfüllt sind und die Kapazität sehr gering ist. Daher ist die 10-Rubel-Münzkassette pink hervorgehoben. Das Überlaufen der Trommel ist im Gegenteil eine sehr gute Situation, denn es gibt etwas zu ändern. Ja, zusätzliche Rechnungen werden an die Kassette gesendet, aber die Kapazität der Kassette reicht aus, um sie aufzunehmen.

    Es gab viele private Fragen beim Festlegen der Grenze: Bei welcher Fülle der Kassette sollte sie beispielsweise in Pink hervorgehoben werden? Nach mehreren Brainstorming-Sitzungen haben wir diesen Wert auf 75 Prozent festgelegt. Dementsprechend beginnt im selben Moment die Laterne über der Kasse zu blinken. Ähnliche Entscheidungen mussten für alle Kapazitäten für Banknoten und Münzen getroffen werden.

    4. Ein riesiger Arbeitsblock mit Gelddisziplin


    Das Einführen und Zurückziehen dieser Ausstattungsmerkmale erwies sich als gar nicht so einfache Aufgabe. Obwohl die Ein- und Auszahlung in allen Bargeldentscheidungen unseres Unternehmens enthalten ist, mussten viele der Grundsätze hier völlig neu überdacht werden.

    Mit der Einzahlung ist im Großen und Ganzen alles klar: Nach dem Wechsel in den Einzahlungsmodus sind Bargeld- und Münzprüfer bereit, Bargeld zu erhalten. Der Nennwert aller eingegebenen Scheine und Münzen wird neben den entsprechenden Behältern angezeigt. Und nachdem alles hinterlegt wurde, muss der Mitarbeiter auf "Hinterlegung abschließen" klicken und diese Transaktion über den Finanzregistrar weiterleiten, der das Dokument bei Hinterlegung druckt.



    Es gibt nur wenige Merkmale, aber sie sind: Tausendstel und Fünftausendstel von Banknoten zu machen macht keinen Sinn - diese Rechnungen landen in einer Kassette, die nicht an den Käufer ausgegeben werden kann. Dies bedeutet, dass für diese Situation eine separate Angabe erforderlich ist.



    Es ist klar, dass der Mitarbeiter höchstwahrscheinlich keine solchen Stückelungen vornehmen wird, aber es kann eine andere Situation geben: Eine der Rollen ist voll und alle Rechnungen von ihr beginnen, in die Kassette zu fallen. Und in diesem Fall ist das nur sehr nützlich - der Mitarbeiter sieht sofort, dass es keinen Sinn macht, diesen Nennwert zu addieren. Ähnlich verhält es sich mit einem Münzenüberschuss.

    Ich musste an der Befreiung basteln. Es kann 4 Arten von Anfällen geben (die im Prinzip nicht an einer normalen Kasse auftreten können):
    • Entnahme von Münzen einer bestimmten Stückelung
    • Rücknahme überschüssiger Münzen
    • Notizen vom Schlagzeug machen
    • Entfernen einer Patrone mit Notizen




    Für jeden von ihnen waren verschiedene Verhaltensweisen erforderlich.
    • Beim Abheben von Münzen aus einer der Münzboxen ist der Abhebungsbetrag ein Vielfaches des Nennwerts.
    • Überschüssige Münzen werden nur in ihrer Gesamtheit abgezogen, es gibt einfach keine Möglichkeit, einen Teil der Münzen einer bestimmten Menge abzuziehen, da alle darin enthaltenen Münzen gemischt sind

    Geld von Münzkassetten wird nicht sofort zurückgegeben, sondern nach Anklicken des Buttons "Auszahlung abschließen". Gleichzeitig wird ein Befreiungsdokument gedruckt.

    • Sowohl für Banknoten als auch für Münzen ist der Auszahlungsbetrag ein Vielfaches des Nennwerts auf der Trommel. Nach Rücksprache haben wir uns jedoch entschieden, diesen Betrag nicht über den Banknotenakzeptor auszugeben, sondern an die Kassette zu senden. Dementsprechend wird in diesem Fall der Widerrufsbeleg nicht ausgedruckt, da das Geld an der Abendkasse verbleibt.
    • Wenn eine Patrone entfernt wird, wird fast die gesamte Abfolge der Aktionen vom Hersteller festgelegt. Wir senden einen Befehl zum Entfernen der Kassette, in der Geldscheinannahme ist die Tür entriegelt, wodurch sie verriegelt wird. Der Mitarbeiter öffnet die Tür und entnimmt die Kassette. Er ist verpflichtet, eine leere Kassette wieder einzulegen. Andernfalls gibt der Controller das Kassetteninventarereignis nicht zurück, obwohl er in den Ausgangszustand LEERLAUF zurückkehrt. Dementsprechend kann unser Registrierkassenmodul kein Auszahlungsdokument drucken, es kann den Zustand der Kassette nicht herausfinden. In diesem Fall haben wir beschlossen, die Zahlung in bar zu sperren und das Einsetzen einer leeren Kassette zu verlangen. Dies ist zumutbar, da er absolut keine Gelegenheit hat, herauszufinden, wie viel noch in der Kassette ist, nachdem er sie entnommen hat.

    Die Wahl beim Entfernen der Patrone war nur zu welchem ​​Zeitpunkt das zu entfernende Dokument gedruckt werden sollte. Zuerst haben wir uns entschlossen, es beim Einsetzen der leeren Kassette auszudrucken, aber nachdem wir die Vorgänge im Geschäft analysiert hatten, haben wir sofort nach dem Entfernen der Kassette begonnen, das Dokument auszudrucken. Der Grund dafür ist, dass das Dokument nach dem Geldverdienen in der Hauptkasse verbleibt. Die Hauptkasse ist weit entfernt von den Selbstbedienungskassen, und die Angestellten mussten zweimal laufen: zuerst mit Geld, dann mit einem Dokument. Wir haben gerade ihre Arbeit optimiert.

    5. Fehlerbehandlung


    Es stellte sich heraus, dass es so viele Fehler und Grenzsituationen gab, dass es ein wenig falsch ist, all diese titanischen Arbeiten in nur einem Punkt zusammenzufassen. Ich werde nur ein paar Fragen stellen, die sowohl von Entwicklern als auch von Testern und mir als Interface-Designer beantwortet werden mussten.
    • Wie wird ein Münzstau / Geldscheinstau behandelt? Wie verhält sich die Kassiererin im Einkäufermodus und im Assistentenmodus?
    • Was passiert, wenn der Assistent, nachdem er auf "Einzahlung beenden" geklickt hat, danach noch ein paar Münzen in den Empfänger wirft?
    • Das Fehlen von Kopeken hinterlässt Spuren: Was ist in einer Situation zu tun, wenn der Gesamtbetrag mit Kopeken erzielt wird (z. B. wenn der Rabatt auf das Runden des Schecks nicht funktioniert hat)?
    • Die Steuerung selbst kann sich bei weitem nicht in den Zuständen LEERLAUF, EINFÜGEN WARTEN und AUF ÄNDERUNG WARTEN befinden. Die Zustände ändern sich bei jeder Aktion: Es gibt ZÄHLUNG, die zum Zeitpunkt des Zählens des eingezahlten Geldes enthalten ist, es gibt BERECHNUNG DES ÄNDERUNGSBETRAGES - es wird zum Zeitpunkt des Zählens der Änderung für einen Bruchteil einer Sekunde eingeschaltet, es gibt AUSGABE, die zu jedem Zeitpunkt des Abhebens von Geld eingeschaltet ist. Natürlich gibt es den ERROR-Status, der Details zum aufgetretenen Fehler enthält. Und es gibt genau 30 solcher Zustände, und in jedem von ihnen werden ihre Funktionen verfügbar oder unzugänglich. All dies muss nicht nur programmiert, sondern auch getestet werden.


    Nun ist es an der Zeit, über die Hauptsache zu sprechen: Das beste Merkmal der geleisteten Arbeit ist nicht ihre Beschreibung, sondern die Tatsache, dass das Ergebnis verwendet wird und seine Funktion erfüllt.

    Vor genau einem Monat haben wir in einem der Geschäfte des Gallery-Einkaufskomplexes in St. Petersburg eine Selbstbedienungsinsel aus 4 Kassen mit einem Einzahlungsmodul auf den Markt gebracht.







    Ohne übermäßige Bescheidenheit werde ich sagen, dass der Start mit einem Knall ging. Käufer interessierten sich für das neue Produkt. Bereits in der ersten Betriebswoche haben Selbstbedienungskassen einen anständigen Kundenanteil. Aber wir hören nicht auf - die Pläne zur Verbesserung und Optimierung der Arbeit der Kassen enthalten viele Ideen.

    Es ist besser, es einmal zu sehen oder es noch besser zu versuchen. Komm nach Petersburg und bewerte unsere Entscheidung.

    Ich wünsche allen Entwicklern, dass sie sorgfältig und aufmerksam auf wichtige Details achten. Denken Sie daran, dass zuallererst sowohl die Hardware als auch die Benutzeroberfläche den Benutzern helfen sollten.

    Jetzt auch beliebt: