Come faccio a progettare correttamente un sistema di contabilità molti-a-molti (spese / pagamenti)?

2

Questa è una domanda di db / programmazione come una domanda di contabilità / matematica, quindi in realtà sto postando su tutte le schede pertinenti. Apprezzo la tua pazienza in anticipo.

Fondamentalmente sto avendo problemi a sistemare la mia testa su un libro mastro dei pagamenti. Il mio sistema ha tre tabelle: SPESE, PAGAMENTI e PAYMENTS_TO_CHARGES. Il problema è che parte dei requisiti di sistema richiede sia la possibilità di associare direttamente un pagamento a un addebito, sia consentire ai membri di postare pagamenti in eccesso (o crediti) sul proprio account. Quindi c'è la necessità di tracciare i crediti, quindi applicarli secondo necessità alle spese future.

Forse sto pensando a cose dal punto di vista sbagliato, ma sto immaginando CHARGES come DEBIT e PAGAMENTI come un CREDITO. Tuttavia, sembrerebbe che entrambi possano avere DEBITO / CREDITO a seconda del tuo approccio contabile.

Quindi, la mia domanda - ufficialmente - è qual è il modo migliore per tracciare / riconciliare pagamenti e addebiti, pur consentendo pagamenti in eccesso, ecc. Sto cercando di elaborare le tabelle DB e la logica aziendale ma ogni volta che risolvo un problema, si presenta un oggetto inverso (o inverso). Consentire la relazione many-to-many per tracciare numeri positivi e negativi per transazione? Creo una tassa universale falsa a cui si applicano tutti i crediti? Creo una tabella CREDITS completamente separata? Come puoi vedere, probabilmente sto pensando troppo a questo, ma sono certamente confuso.

Se tutte le transazioni fossero garantite da 1 a 1, sarebbe ovviamente molto più semplice. Sfortunatamente non sono

Best.

    
posta humble_coder 28.04.2011 - 19:01
fonte

3 risposte

5

Il libro Modelli di analisi di Martin Fowler ha una sezione completa sui modelli di contabilità che ho trovato molto utile. Rende la flessibilità del design molto lunga, più di quanto molti ne avrebbero bisogno, ma puoi fermarti a qualunque livello ti si addice.

Ha anche pubblicato un articolo con contenuti simili. Questo può essere trovato nella pagina articoli del suo sito. Cerca i modelli di contabilità sotto l'intestazione Modelli di analisi. È un pdf per il quale il link diretto è link

Roba molto buona.

    
risposta data 28.04.2011 - 19:54
fonte
3

Chiedi al ragioniere. Fidati di me su quello. Ti dirà esattamente come farlo.

Voglio aggiungere che la professione contabile ha a che fare con questo genere di cose da secoli e l'hanno davvero capito.

    
risposta data 28.04.2011 - 19:37
fonte
-1

Basandomi sul mio commento qui sopra, ecco come dovrebbe essere definito ...

Account table:
    AccountID    
    AccountName
    AccountBalance

Transaction Table
    TransactionID
    Amount (Can be Pos or Neg)
    Type (Credit,Invoice, Payment ect)
    Reference no (Credit no,Invoice no ect )

Ogni volta che un record viene inserito in Transaction Table , devi aggiornare i campi AccountBalance . Sì, so che questa De-normalizzazione .. Ma dovrebbe essere fatto comunque per motivi di prestazioni. (supponendo che tu non abbia un numero davvero esiguo di transazioni)

Al posto delle informazioni aggiuntive di seguito

Charges Table:
        ChargeID
        Amount (Can be Pos or Neg)
        Reference no (InvoiceNo ect )

Payment table:
    PaymentId
    Amount 
    ChargeId (FK to the Charges table)**
    Reference no (CheckNo exct )***

Se 1 pagamento è contro 2 addebiti, ottieni 2 righe nella tabella pagamenti ma con lo stesso Reference No .

** Penso che questo dovrebbe essere facoltativo (non richiesto o avere un valore predefinito come onAccount ) come dovresti avere il permesso di accettare un pagamento e assegnarlo a un addebito più tardi ... ma questo è il tuo uomini d'affari.

*** Se proprio vuoi .. puoi anche creare una tabella di riferimento

    
risposta data 28.04.2011 - 19:18
fonte

Leggi altre domande sui tag