2010-03-08 23 views
5

Sitemde temel olarak kredi kartı gibi çok çalışan bir kredi sistemi olacak. Her kullanıcının sınırsız bir kredi limiti vardır, ancak her haftanın sonunda ödeme yapmak zorundadır. Örneğin, bir kullanıcı 1 Mart ile 7 Mart arasında çeşitli satın alımlar yapabilir ve ardından 7 Mart'ın sonunda, tüm satın alma işlemlerini hafta boyunca listeleyen bir fatura ve toplamda 14'lük bir faturaya gönderilir. Ödemeyi yapmazlarsa, hesabıncaya kadar sadece deaktive edilir. Sadece bunu nasıl uygulayacağım konusunda kafamı sarmaya çalışıyorum.Kredi kartı sistemi uygulaması?

Tüm satın alımlarının bir listesini aldım, bu bir sorun değil, ancak bununla ne yapacağımı anlamaya çalışıyorum. 7nci günün sonunda, temelde bir kimlik ve teslim tarihi olan bir fatura üretmek için bir cronjob kurabilirdim ve sonra tüm satın alımları faturaya bağlamak için bir çoktan fazlasına ihtiyacım vardı. . Daha sonra bir kullanıcı hesabına para eklediğinde, mevcut ödenmemiş faturasına göre uygulanıyor mu? Ve ne zaman yeni bir fatura etrafında dolanırsa faturalarını ödemiyorlarsa, şimdi 2 tane üstün olanı var, buna karşı nasıl uygulanacağını nasıl bilebilirim? Veya daha önceki ödenmemiş faturalar için cronjob kontrolünü yapar, iptal eder ve yeni faturaya "bilanço (+ faiz)" olarak yeni bir kalem ekleyebilir miyim? Parayı bir faturaya nasıl uygularsınız? Her bir ödemenin bir faturaya bağlanması gerekiyor mu, yoksa sadece hesabın kredisine yatırılabilir mi? Sonra bir şekilde neyin ödenip neyin ödenmediğine karar verilebilir mi? Faturaları oluşturulmadan önce peşin ödeme yaparlarsa ne olur? Faturaları, faturadaki üretime veya haftanın sonunda vadesine kadar indirir mi? Bunu yapmanın pek çok yolu var ...

Hangi yaklaşımları benimseyeceklerini tarif edebilir mi?


Fatura modelim ilgilenen biri varsa, şu şekilde görünüyor (Django'da). InvoiceItems gerçek bir "ürün" ile bir ters kimlik (ürün üzerinde farklı ürün türleri (farklı tabloları) izin vermek için değil, fatura) değil, ama ben bunu değiştireceğim düşünüyorum.

class Invoice(models.Model): 
    user = models.ForeignKey(User, related_name='invoices') 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    closed_date = models.DateTimeField(null=True, blank=True) 
    due_date = models.DateTimeField(default=_next_weekday()) 
    payment_date = models.DateTimeField(null=True, blank=True) # date the invoice was fully paid 
    total_payments = CurrencyField(default=0) 
    interest_charges = CurrencyField(default=0) 

    @property 
    def days_overdue(self): 
     dt = self.due_date - datetime.date.today() 
     return dt.days if dt.days > 0 else 0 

    @property 
    def item_total(self): 
     return self.items.filter(amount__gt=0).aggregate(t=Sum('amount'))['t'] or Decimal('0.00') 

    @property 
    def daily_interest(self): 
     return _round((self.item_total - self.total_payments) * settings.INTEREST_RATE/Decimal('365.242199')) 

    @property 
    def subtotal(self): 
     return self.item_total + self.interest_charges 

    @property 
    def tax(self): 
     return _round(self.subtotal * settings.GST) 

    @property 
    def total(self): 
     return self.subtotal + self.tax 

    @property 
    def balance_owing(self): 
     return self.total - self.total_payments 

    @property 
    def is_paid(self): 
     return self.payment_date != None 

    @property 
    def is_open(self): 
     return self.closed_date == None 

    @property 
    def is_overdue(self): 
     return not self.is_paid and self.due_date < datetime.date.today() 

class InvoiceItem(models.Model): 
    invoice = models.ForeignKey(Invoice, related_name='items') 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    description = models.CharField(max_length=200) 
    trans_date = models.DateTimeField(verbose_name='transaction date') 
    amount = CurrencyField() 

Bütün gecikmiş öğelere faiz ücretleri eklemek için her gece gece yarısı çalıştırmak üzere ayarlanmış bir crontab var ve faturalar her cuma sabah gönderilir.

cevap

10

Burada açıkladığınız şey, temel olarak açık kalem muhasebesi ile bilanço muhasebesi arasındaki bir karardır.

Açık kalem muhasebesinde, her bir fatura bir bakiyeye sahipken ve ödemeler, ödedikleri münferit faturalara atfedilirken "açık" olarak tutulur. Bu, örneğin, 30 günden daha uzun bir süre boyunca bakiyelerle ilgili faizleri tahsil ederseniz, faturaların 30 günden eski bakiyeleri olduğunu bilmek zorunda kalır.

İleriye dönük muhasebeleştirme, kredi kartı ödemeleri ile benzerdir, ileriye taşınan bir toplu ödeme bakiyesi olduğunda ve bireysel faturalar yerine toplam bakiyeye karşı ödemeler yapıldığında. Sadece bazı ürünlerin belirli faturalara eklendiğinde açıklama

Güncelleme

Açık madde muhasebe örneğin karmaşık faturalandırma işlemleri için iyidir. Örneğin, bir inşaatçı birkaç düzine ürünü satın alır, ancak üç ayrı bina projesine ayrı ayrı faturalandırılır.

Her bir faturayı ödeme ve uyuşmazlık çözümü amacıyla izlemeniz gerektiğinde açık kalem muhasebesi de kullanılır. Örneğin, bir bina arzının bir müşteri için bir üreticisi vardır.Bazen tedarik edilen mallar yanlış veya arızalı olduğundan, oluşturucu diğer tüm faturaları (daha yeni faturalar dahil) öder, ancak izlenen ve ayrı ayrı ele alınanlar haricinde öder - belki de değiştirme malları verildiğinde ya da belki de fatura.

Geleceğe yönelik muhasebede, bu durumla bir bütün olarak hesaba karşı bir kredi uygulayarak ve ardından değiştirilen mallar tedarik edildiğinde işlemi yeniden ekleyerek ilgilenirsiniz. Bakiye üzerinden alınan herhangi bir faiz de hesaba karşı tersine çevrilebilir.

Client  [ClientId, Name, AccountBalance] 
Product  [ProductId, Description, Cost] 
Invoice  [InvoiceId, ClientId, Date, TotalAmount, Outstanding] 
InvoiceItem [InvoiceId, ProductId, Quantity, Amount] 
Receipt  [ReceiptId, Date, TotalAmount] 
ReceiptItem [ReceiptId, InvoiceId, Amount] 

Müşteri oluşturulan faturanın alır:

Aşağıdaki tablolar gerek Muhasebe

Açık Item:

Simplistically, burada veritabanınızda bu kurabilirler bir yoludur ürünleri satın almak. Satın alınan her ürün için, satın alınan miktarı ve miktarı gösteren bu ürün için bir fatura kalemi oluşturulur. Fatura güncellendiğinde, faturadaki ödenmemiş bakiye, fatura ve müşteri hesabı bakiyesinin toplamıdır (anında hesaplanabilir, ancak otomatik olarak tutulursa daha kolay ve daha hızlıdır). Müşteri bir veya daha fazla fatura ödediğinde, makbuz oluşturulur ve her faturaya ödenen faturalar tahsis edilir. Faturadaki ödenmemiş bakiye, müşterinin hesap bakiyesiyle güncellenir. Fazla ödemeler ayrı ayrı ele alınması gerektiğini unutmayın. Bir fatura kalemi olarak bir sonraki faturada (veya ayrı bir faturada) faiz ödemeleri yapılır (bu özel bir ürün olabilir).

Denge İleri Muhasebe Aşağıdaki tablolar gerek

: Bir ürün satın alındığında

Client  [ClientId, Name, AccountBalance] 
Product  [ProductId, Description, Cost] 
Invoice  [InvoiceId, ClientId, Date, Amount] 
Transaction [TransactionId, ClientId, InvoiceId, ProductId, Date, Quantity, Amount] 

, bir işlem ürünün miktarını ve tutarını ve gösteren müşterinin hesabına yapılır Müşterinin hesap bakiyesi güncellenir. Bir makbuz yapıldığında, yine müşterinin hesabında bir işlem yapılır ve müşterinin hesap bakiyesi güncellenir. Fazla ödemeler ve faiz ödemeleri de bir işlemdir. Faturalama zamanında, bir faturaya tahsis edilmeyen tüm işlemleri (alımlar, makbuzlar, faiz ödemeleri, vb.) Almanız ve bunları yeni faturanıza eklemeniz yeterlidir. Fatura işlem listesinde görünmez, sadece faturalanmış işlemleri takip etme ve müşterilerinize ödeme yaparken referans numarası verme konusunda kolaylık sağlar. Bu modeldeki makbuzları da izlemek isteyebilirsiniz.

Diğer hususlar

  • Bu hesaba tabloları bambaşka bir set olacak genel muhasebe ilanı almaz. Bu sadece muhasebe muhasebesi için değil, finansal muhasebe için.
  • Pratikte, müşterinin her bir projesini sizinle birlikte takip etmek için müşteri ile fatura arasında bir proje tablosu olabilir.
  • Bu size bir fikir vermek için gerçekten basittir. Tam bir uygulama için daha fazla tablo ve alan gerekmeyecektir.

Faturalandırma zamanı geldiğinde faturalarını ödemiyorsa ne olacağıyla ilgili olarak, her iki sistemde de önemli değil - zaman içinde geri gitmiyor ve önceki muhasebe girişlerini değiştirmiyorsunuz. Şu anda olan herhangi bir şey yeni bir faturaya gidiyor.Tabii ki, yeni faturada, zaten borcu olan miktarları gösteren (veya daha fazla ödeme için olan) "Daha önce ödenmemiş bakiye" yazan bir satıra sahip olmak tamamen uygun.

Ayrıca, bir fatura olmayan bir Hesap Beyanı üretebilmeniz de gerekir, tıpkı muallak bakiyeleri olduğunu hatırlatan bir mektup gibi. Bu, oluşturulacak yeni bir fatura olmadığı zaman kullanılır, ancak müşterinin hesap bakiyesi hakkında bir hatırlatmaya ihtiyacı vardır.

Sistemlerim için açık kalem muhasebesini tercih ediyorum, ancak açıklamanızdan ileriye dönük muhasebe, iyi bir uyum gibi görünüyor.

+0

Kalan süre zarfında, neyin geciktiğini ve nelerin ücretlendirileceğini takip edemez misiniz? – mpen

+0

Öyleyse ne zaman geçtiğini bilmek için açık kalem muhasebesine gitmem gerekiyormuş gibi geliyor. Bu, uygulanması eğlenceli olacak! Yardımınız için çok teşekkür ederim, size defalarca katılabilseydim. – mpen

+0

Sadece yeni faturalarla ilgili açıklama ekledim. Bilançoda, kredi kartınızla olduğu gibi, dönem sonunda, genellikle faiz tutarı bakiyeden tahsil edilir. Açık kalem muhasebesini, ödemelerin tarihi üzerinde daha iyi bir kontrole sahip olduğu için kullanıyorum (müşterinizin tam olarak ne için ödeme yaptıklarını biliyorsunuz, sadece her şeyi bir kepçeye koymak değil). Ancak, vadeli hesap muhasebesi telefon faturaları, kredi kartları vb. Gibi şeyler için uygundur. Kullanım durumunuza bağlıdır. –

İlgili konular