Frage

Wir schaffen Point of Sale Software für den Mac, und suchen unsere Steuer Motor neu zu gestalten. Es ist ziemlich einfach jetzt, mit Steuern, bestehend aus einem Namen, Code und Rate, die individuell auf jedes Produkt angewandt werden kann. Während dies für einige Leute gut genug ist, haben wir viele Anfragen haben fortgeschrittene Situationen zu bewältigen. Einige Beispiele sind die US-Stadt / Landkreis Umsatzsteuer, kanadische Verbindung (gestapelt) Steuern, Französisch und Öko-Steuer NYC Luxussteuer.

Wir haben die meisten der Eigenschaften festgestellt, dass diese Steuern haben und lehnen sich in Richtung einer Art regel Motor basierte Implementierung. Wir müssen nicht jeden Fall draußen unterstützen, aber wir wollen in der Lage sein, sie zu verlängern, wenn nötig (eine andere Rewrite zu vermeiden).

Wir suchen Beratung von Menschen, die vor so etwas wie diese gebaut, oder Beispielen für Projekte, die das gleiche in einer eleganten Art und Weise zu lösen versuchen.

War es hilfreich?

Lösung

Ich würde eine Reihe von Datenbanktabellen empfehlen und schließt sich.

Beispiel:

  • Zuständigkeit :. Liste der Staaten, Landkreise, Länder, Städte, etc
  • Produkt : offensichtlich
  • Speichern : Liste der Orte, die Sie verkaufen aus
  • StoreJurisdiction (StoreID, JurisdictionID): Die Liste der Gerichtsbarkeiten ist der Laden verantwortlich Steuern eintreiben für
  • ProductTaxCode (ProductID int, TaxCodeID int): die Art des Erzeugnisses für die Zwecke der Steuern. Grund, Luxus, usw.
  • JurisdictionTaxCodeRate (JurisdictionID, TaxCodeID, Zinsrate, RateType): für jede anwendbare Kombination Stand und Abgabenordnung, bietet der Steuersatz angewandt werden, und die Art der Rate (Verbindung, einfach, etc .).

Um die Liste der Steuern zu finden anzuwenden, alles, was Sie brauchen, ist ein INNER JOIN des Ladens, deren Gerichtsbarkeiten, das jurisdictiontaxcoderates für diese Rechtssprechungen und die Steuercodes des Produkts.

Sie könnten ProductTaxCode als Ansicht definieren, so dass alle Produkte eine Standard TaxCode erhalten, wenn ein besonderer vorgesehen ist. Durch Abstrahieren TaxCode, können Sie die gleichen Metadaten über ein Produkt ( „Food“ zum Beispiel) gelten für unterschiedliche Regionen auf unterschiedliche Weise. Wenn eine bestimmte Zuständigkeit seine eigene Definition von „Lebensmittel“ hat, fügen Sie nur eine Zuständigkeit spezifischen Code und es auf Produkte je nach Bedarf.

Dies kann einige Optimierungen für Einkäufe im Internet, Großhandel Einkäufe benötigt, und andere Situationen, in denen der Verkauf irgendwie von der Steuer befreit ist oder der Kunde ist verantwortlich für sie remittierender. Es wäre auch für Situationen braucht Zwicken, wo der Standort des Kunden, anstatt das Geschäft, den Steuersatz entscheidet.

Weitere Verbesserungen: hier in Texas, zum Beispiel, haben wir einen „steuerfrei“ Wochenende, wo staatliche und lokale Steuern sind nicht gesammelt einige Klassen von Produkten, bei denen der Verkaufspreis der einzelnen Artikel ist weniger als 100 $. Die Idee ist billiges Schulmaterial zur Verfügung zu stellen, Kleidung, etc. für Kinder zur Schule für ein neues Jahr Position aus. Diese Art von zwicken könnte für jede JurisdictionTaxCodeRate, indem Sie einen Datumsbereich Tabelle implementiert werden abgehend in Zukunft so weit wie sie geplant werden können.

Andere Tipps

wäre mein Vorschlag für die Datenbanktabellen zu verwenden, was sie sind gut für die (Speicher von Werten) und Regeln für das, was sie sind gut für (Business-Logik). Ich würde stelle sicherlich nicht Dinge wie Steuersätze oder Listen von Ländern in Regeln - die in Tabellen sein sollen. Was würde ich für eine Regel-Engine verwenden, ist die Logik definiert, die bestimmt, welche Rate, auf die Transaktionen anzuwenden. So zum Beispiel, wenn ich eine Reihe von Produkten online von einem Unternehmen mit Sitz in Staat X kaufen, dass Schiffe aus Staat Y zu drei verschiedenen Orten, was die Steuersätze gelten für welche Teile der Transaktion? Diese Kombination von Regeln und Datenbanktabellen ist sehr häufig - die Regeln sicherstellen, dass Sie die richtigen Dinge zu sehen, während die Hilfe Tabellen in der Berichterstattung usw. Zum Beispiel der California DMV tat dies mit Anmeldegebühren Fahrzeug - all die verschiedenen Gebühren in einem gespeicherten Datenbank, während die Regeln, die die Gebühr zu bestimmen gilt, auf die Auto in einer Regeldatenbank verwaltet. Wenn Sie versuchen, und legt alles in Regeln werden Sie nicht in der Lage sein, gut zu berichten, und wenn Sie versuchen, und setzten alles in Datenbanktabellen werden Sie mit Dutzenden von Tabellen am Ende, um alle Ausnahmen und Sonderfälle zu verwalten. JT

Hier ist ein Beispiel für eine "home rule" Stadt in Denver, CO Großraum:

http://www.c3gov.com/pages/about/division_salestax.html

Sie, als Einzelhändler, müssen möglicherweise auch an verschiedenen Stellen die Steuerzahlungen senden. Für Städte, die nicht „home rule“ Städte sind (was ein besonderer Begriff ist, dass wahrscheinlich nur nach Colorado gilt, dann aber wahrscheinlich hat jeden Staat einen ebenso besonderen Begriff wie es), werden Sie alle die Steuerzahlungen an den Staat zu senden, wird beschäftigen sie dann an die zuständigen Stellen aus. Colorado hat eine Funktion, wo es „besondere Steuerbezirke“ sind, die collect Umsatzsteuern für bestimmte Leistungen zugelassen sind (am Beispiel Link ist RTD die öffentlichen Verkehrsmittel Bezirk, und „Invesco Field“ ist das Stadion, in dem die Denver Broncos spielen).

Zur Erweiterung auf Herrn Tallent Antwort auf diesen Thread, müssen Sie auch in der Zuständigkeit Tabelle enthalten einen Weg darstellt, dass die Steuern zu verschiedenen Orten gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top