Ich hoffe, diese Frage ist nicht zu weit gefasst. In Zukunft muss ich möglicherweise einige Anwendungen um Buchhaltungs- und Finanzverfolgungssysteme erweitern (hauptsächlich webbasierte Anwendungen, aber meine Fragen beziehen sich auch auf Desktop-Apps).
Nun ist es theoretisch einfach, eine einfache Aufzeichnung von Finanztransaktionen zu erstellen. Eine Datenbanktabelle mit wenigen Spalten könnte den Job erledigen. Sogar MS Access, Excel oder auch nur eine reine ASCII-Textdatei können zum Speichern von Transaktionsdaten, Konto-IDs und Dollarbeträgen verwendet werden. Ich bin jedoch der Meinung, dass selbst eine häufig gesicherte SQL-Tabelle mit Transaktionsintegrität möglicherweise nicht robust genug ist, um ernsthafte finanzielle Nachverfolgungen durchzuführen.
Ich höre Begriffe wie "Double-Entry-Accounting" und habe das Gefühl, dass die meisten Finanz-Tracking-Apps (z. B. Mint.com oder GnuCash) eine viel kompliziertere Datenstruktur oder -verarbeitung haben, um sicherzustellen, dass alles doppelt vorhanden ist fügt sich perfekt zusammen, genau so, wie es sein sollte, und dass keine Daten jemals verloren gehen oder beschädigt werden.
Meine Frage lautet: Welche besonderen Designüberlegungen sollten beim Entwerfen einer App zur Verfolgung von Finanztransaktionen getroffen werden? Es scheint, als ob es so viele potenzielle Probleme geben könnte ... Probleme mit Rundungsgenauigkeit, Paritätsprüfungen, einer Art Prüfprozess, speziellen Sicherungen, Sicherheit / Verschlüsselung, zusätzlichen Möglichkeiten zum Schutz von Daten im Falle eines Datenabsturzes während der Dateneingabe. ... Ich weiß nicht genau, was ich konkret fragen soll, aber ich habe das Gefühl, dass die Programmindustrie eine Reihe von Best Practices hat, über die ich nichts weiß. Was sind Sie?
Bearbeiten:
Es sieht so aus, als hätte ich eine größere Dose Würmer geöffnet, als ich erwartet hatte. Zur Verdeutlichung denke ich speziell an zwei Arten von Apps:
- Apps vom Typ "Check Registry" wie GnuCash oder Quicken, die Aufzeichnungen über einzelne Transaktionen für den eigenen Gebrauch führen.
- Apps, die die Rechnungsstellung / Gutschrift / oder "Punkte" für Lieferanten und Kunden verfolgen, die mit einem Unternehmen zu tun haben.
Ich werde wahrscheinlich keine Direktbankgeschäfte oder (AFAIK) Geschäfte tätigen, mit denen eine Menge finanzbezogener staatlicher Vorschriften verbunden sind.
quelle
Antworten:
Sie werden sicher viele Antworten darauf bekommen, viele idealistische Antworten auch, ich kann nur aus meiner Erfahrung mit Finanzwerten und dem, was tatsächlich vor sich geht, antworten.
Sie haben die meisten Themen bereits behandelt.
Nach meiner Erfahrung ist die Rundungsgenauigkeit in der Regel kein großes Problem. Die Mehrheit der großen Finanzunternehmen, die nicht über Nacht gewachsen sind (dh alles außer Hedge-Fonds), verfügt über eine Vielzahl von Legacy-Anwendungen, die aufgrund verschiedener Brennstoffe aufgeteilt werden. Sie neigen dazu, die Rundungsgenauigkeit nicht konsistent zu machen. In der Regel wird ein gewisser Fehlergewinn und -verlust lediglich zur Rundung herangezogen. Tatsächlich werden viele Mannstunden an Orten verbracht, an denen ich gearbeitet habe, an denen Menschen das ultimative "Ja, das nah genug ist" auswählen, wenn es darum geht, genaue / erwartete Summen abzugleichen. Denken Sie daran, dies ist eine Antwort, die auf der Realität basiert und nicht darauf, was passieren soll.
Verschlüsselung - verlassen Sie sich nicht offen darauf. Speichern Sie identifizierende Daten in einem physisch und logisch getrennten System als nicht identifizierte Daten (dh Kontocode überall, persönliche Daten getrennt).
Während Sicherungen erforderlich sind, werden Offline-Sicherungen im Allgemeinen selten aufgerufen. Zu diesem Zeitpunkt ist ein schwerwiegender Fehler aufgetreten. Warme Produktionskopien sind in der Regel erforderlich - dies hängt jedoch von Ihren spezifischen Anforderungen ab. In der Regel verfügen wir über eine Vor-Ort-Produktionskopie aller Systeme UND eine Notfallwiederherstellungssite mit eigener Produktion und Vor-Ort-Kopien. Warme Kopien sind in der Regel einige Minuten nach der Replikation usw.
Wirtschaftsprüfung ist der Schlüssel zu jedem Finanzsystem, an dem ich jemals gearbeitet habe. Sie haben 2 grundlegende Anforderungen A) Können Sie jede einzelne Änderung an den Daten nachverfolgen, von wem, wann und warum? B) Können Sie den historischen Zustand Ihrer Daten nachweisen? Dass es nicht manipuliert wurde?
A) wird für Betriebsteams benötigt - Ihr System wird auf 100 Arten verwendet, die Sie nie erwartet hätten. Diese Informationen sind für die Erweiterung, Ad-hoc-Berichterstattung, rechtliche Gründe und das Debuggen von entscheidender Bedeutung.
B) Siehe den Fall AMEX vs. Vee Vinhnee, in dem AMEX keine 40.000 eintreiben konnte, da sie nicht nachweisen konnten, dass ihre Aufzeichnungen nicht erfunden wurden. Die allgemein verwendete Lösung hierfür ist die vertrauenswürdige Zeitstempelung. Große Finanzunternehmen verfügen über Garantiegeberbanken, die Transaktionen garantieren und somit von Natur aus eine zuverlässige Zeitstempelung bieten. Hierfür gibt es kommerzielle Anbieter für andere Lebensbereiche / Szenarien.
quelle
Die Überlegungen sind meist legal . Wenn Sie es nur unter dem Gesichtspunkt der Sicherheit und Zuverlässigkeit betrachten, ist ein Excel-Blatt möglicherweise von Natur aus nicht weniger sicher als ein Blatt Papier in einer Schublade. Die Transaktionsintegrität von Access ist möglicherweise besser als die eines Angestellten, der durch einen Anruf unterbrochen wird.
Damit Ihre Kunden es jedoch nutzen können, müssen Sie die Einhaltung der örtlichen Gesetze sicherstellen. Einige Dinge, denen ich begegnet bin (in Deutschland)
Sie sollten sich definitiv an einen Anwalt wenden, um Einzelheiten zu erfahren, oder zumindest eng mit einem Kunden zusammenarbeiten.
quelle
Zuverlässigkeitsfaktoren werden erstaunlich wichtig, wenn Sie mit dem Geld der Leute umgehen. Wenn Twitter einen Tweet verliert, ist das keine große Sache. Wenn Sie die Kreditkarte einer anderen Person belasten, aber die Bestellung verlieren, wird jemand in Ihrer Organisation von einem verärgerten Kunden etwas hören. Also zwei Dinge: 1. Sie wollen nicht, dass das überhaupt passiert, aber 2. es wird irgendwann passieren, egal wie vorsichtig Sie sind, also wollen Sie eine Menge Energie in die Art von Protokollierungs- und Verfolgungsmechanismen stecken das wird dir helfen, zurück zu gehen und die "verlorene" Ordnung zu finden und die Situation zu korrigieren.
Das absolut Schlimmste ist, zum Beispiel eine Kreditkartenbelastung zu haben, aber KEINE Aufzeichnung darüber, wofür es gedacht ist oder wem es gehört usw.
Für Finanzangelegenheiten müssen Sie wirklich selbst die anscheinend sehr unwahrscheinlichen Szenarien durchdenken und planen, wie Sie damit umgehen sollen: "Wir haben die Kreditkarte belastet, aber der Datenbankserver ist ausgefallen, bevor wir den entsprechenden Datensatz aktualisieren können." OK, was jetzt? Die Gebühr stornieren? Die Transaktion in einer Datei protokollieren, damit ein Mensch sie später reparieren kann? Ok, was ist, wenn die Festplatte voll ist und Sie nicht in die Datei schreiben können? Usw.
quelle
[1] Verwenden Sie Sicherheitstabellen (nicht mit den internen DB-Benutzern verwechseln) für Benutzer und für Ihre App. Module, Formulare, Webseiten:
[2] Löschen Sie keine Datensätze in Ihrer App. Verwenden Sie ein Statusfeld, möglicherweise eine Ganzzahl, möglicherweise einen Booleschen Wert oder ein Bit, das angibt, dass der Datensatz als "gelöscht" eingestuft wird. Machen Sie App. zeigen Datensätze, die nicht gelöscht werden (markiert als gelöscht, von diesem Feld), und machen einige Sonderfallformulare, in denen die App. zeigt die als gelöscht markierten Datensätze an.
Diese Funktion wird als "virtuelles Löschen" bezeichnet. Die tatsächliche Löschung wird häufig als "physische Löschung" bezeichnet.
[3] Verwenden Sie Felder in allen Tabellen, die sich auf den Zugriff beziehen, speichern Sie den (einzelnen) Benutzer, der den Datensatz erstellt hat, und den (letzten) Benutzer, der den Datensatz geändert hat, sowie die Datums- und Uhrzeitangabe, wenn möglich, und fügen Sie das Modul oder die Option hinzu, in der sich die einzelnen Datensätze befanden geändert:
[4] In einigen Fällen können sich Währungs- oder Geldwerte auf die Ergebnisse auswirken, wenn mehrere Datensätze in einem Detail verwendet und zu einem einzelnen Wert in einem Kopfdatensatz hinzugefügt werden.
Die meisten Datenbankmarken unterstützen heutzutage ein Währungs- oder Gelddatenfeld. Benutze es.
Unter bestimmten Umständen speichern einige Benutzer sie in einem festen Gleitkommawert, der mehrere Dezimalstellen ("decimal") oder sogar als Zeichenfolgenwerte unterstützt.
Diese Technik ist ein zweischneidiges Schwert. Wenn Ihre Anwendung diese Art von Vorgaben erfordert, durchsuchen Sie das Web nach einem Tutorial zur ordnungsgemäßen Implementierung.
Prost. [Vergiss nicht, dem Kätzchen eine offene Thunfischdose zu geben, oder nicht zuletzt eine Gegenstimme]
quelle
Sie haben Ihre Frage mit markiert,
security
aber Sie sprechen hauptsächlich über Beständigkeit und Zuverlässigkeit. Deshalb werde ich versuchen, diesen Teil der Gleichung zu beantworten:DECIMAL
Typ anstelle von Floats. Berechnungen sind viel langsamer, aber Sie sollten es nicht fühlen, da die meisten finanziellen Berechnungen sehr einfach sindquelle
Einige der Überlegungen, die ich sehe, sind, dass Sie interne Kontrollen berücksichtigen müssen. Dies bedeutet, dass alle Zugriffe auf Aktionen für Tabellen (Einfügen / Löschen / Aktualisieren) über gespeicherte Prozeduren (und kein dynamisches SQL) erfolgen müssen, damit keine Tabellen Schreib- oder Löschrechte direkt für die Tabelle zulassen, außer für einen Systemadministrator. Sie müssen auch interne Kontrollen berücksichtigen, die es niemandem erlauben, eine neue Firma zu erstellen und dieser Firma dann Artikel in Rechnung zu stellen (ein Weg für Betrug). Für solche Aktionen müssen immer Personen in zwei verschiedenen Rollen genehmigt werden. Schecks sollten auch nicht gekürzt werden, es sei denn, eine Person gibt Daten ein und eine andere genehmigt die Kosten.
Alle Tabellen sollten Trigger enthalten, mit denen Überwachungsdatensätze erstellt werden. Sie möchten Betrug verhindern und feststellen, wer wann genau die Maßnahmen ergriffen hat.
In Finanzanwendungen sind Sie viel mehr mit Back-End-Prozessen befasst, die von der Benutzeroberfläche nie gesehen werden. Ihr erstes Anliegen ist es, Betrug zu verhindern, und daher werden im Backend viele Überprüfungen durchgeführt, von denen niemand Kenntnis hat.
Ich würde mich nicht mit Finanzanträgen jeglicher Art befassen, ohne die Rechnungslegungsgrundsätze (in den USA haben andere Länder ihre eigenen Rechnungslegungsstandards) gründlich gelesen zu haben und einen CPA als Berater zu haben, da inkorrekte Rechnungslegungspraktiken zu Haftstrafen führen können. Dies ist ein hochtechnisches Gebiet, und jemand ohne die erforderlichen Kenntnisse hat kein Geschäft damit, Software in diesem Bereich zu erstellen.
quelle
Bei der Buchhaltung geht es oft um Überprüfung. Solange Sie sich daran erinnern und die Beziehung zwischen den einzelnen Entitäten verstehen, ist es ziemlich schwierig, etwas falsch zu machen.
Ich werde versuchen, so viele Schecks wie möglich aufzulisten, aber ich werde immer einige verpassen, hoffentlich reicht es aus, wenn Sie selbst anfangen, zu graben.
Total Debits == Total Credits, dies gilt unabhängig davon, ob Sie von GESAMTEN Konten oder nur von einer einzelnen Transaktion sprechen. Wenn dies nicht der Fall ist, haben Sie mindestens einen Beitrag verpasst. So gleicht sich das Hauptbuch aus.
Debitorenbuchhaltung (Nettobelastung des Kontrollkontos) == Rechnungssumme (Gesamtsumme aller fakturierbaren Beträge) - Gesamtsumme (Gesamtsumme aller erhaltenen Zahlungen). Dies ist ein Beispiel dafür, wie die Transaktionssummen in physischen und materiellen Belegbegriffen mit dem Hauptbuch abgeglichen werden sollten (doppelte Eingabe).
Bankguthaben (gemäß Ihrem Kontoauszug) == Ihre Hauptbuchsumme für dieses Konto + alle erhaltenen Schecks, die nicht eingezahlt wurden - alle Schecks, die nicht eingezahlt wurden. Dies ist ein Beispiel dafür, wie Bank- / Geldkonten mit dem Hauptkonto übereinstimmen Hauptbuch.
Wie Sie sehen, ist jede Transaktion, jedes Nebenbuch und jeder Bestand direkt mit dem Hauptbuch verknüpft.
Wenn Sie Unit-Tests durchführen, ist es ziemlich einfach, Tests durchzuführen, die sicherstellen, dass diese Salden bei jedem Einfügen / Aktualisieren von Transaktionen vorhanden sind, sofern Sie wissen, worauf Sie achten müssen.
Natürlich gibt es mehr Guthaben zu prüfen, aber Sie sollten den Kern der erforderlichen Arbeit erhalten. Im Grunde steht alles im Gleichgewicht mit allem anderen, ob es sich um physische Dokumente, Hauptbuchpositionen oder Kontoauszüge handelt. Es soll eine perfekte Balance sein, oder in Fällen, in denen Sie faul sind, mit Rundungen umzugehen, nahezu perfekt.
Je mehr Prüfungen Sie während der Entwicklung durchführen können, desto geringer ist die Wahrscheinlichkeit, dass Sie etwas falsch machen.
Übrigens, wenn Sie sich mit dem Runden beschäftigen, versuchen Sie, mit Dezimalstellen statt mit Gleitkommazahlen umzugehen, da dies Ihnen später viel Kopfschmerzen erspart. : P
quelle