2010-03-08 5 views
5

Мой сайт будет иметь кредитную систему, которая в основном работает как кредитная карта. Каждый пользователь имеет неограниченный кредитный лимит, но в конце каждой недели они должны его погасить. Например, пользователь может совершить несколько покупок между 1 и 7 марта, а затем в конце 7 марта им будет отправлен счет-фактура, в котором перечислены все их покупки в течение недели, и общая сумма, которая должна быть предоставлена ​​14-м. Если они не оплачивают его, их учетная запись просто деактивируется, пока они этого не сделают. Я просто пытаюсь обвести голову, как это реализовать.Внедрение системы кредитных карт?

У меня есть список всех их покупок, это не проблема, но я просто пытаюсь выяснить, что с ним делать. В конце 7-го дня я мог создать cronjob для создания счета-фактуры, который в основном имел бы идентификатор и дату платежа, а затем мне понадобилась бы другая таблица «многие-ко-многим», чтобы связать все покупки с факсом , Затем, когда пользователь добавляет деньги на свой счет, я предполагаю, что он применяется к их текущему счету? И что, если они не погасят свой счет до того момента, когда будет выставлен новый счет, так что теперь у них есть 2 выдающихся, как я узнаю, к чему его применить? Или я делаю проверку cronjob для любых предыдущих выставленных счетов, отменяет их и добавляет новый элемент в новый счет как «баланс вперед (+ интерес)»? Как бы вы применили деньги против счета? Будет ли каждый платеж привязан к счету или я могу просто внести его в свой кредитный счет, а затем каким-то образом выяснить, что было заплачено, а что нет? Что делать, если они платят заранее, прежде чем их счет будет сгенерирован? Вычитаю ли я его из своего кредита из счета-фактуры по генерации или в конце недели, когда это необходимо? Есть так много способов сделать это ...

Может кто-нибудь описать, какой подход они предпримут?


Если кому-то интересно, моя модель счета теперь выглядит следующим образом (в Django). InvoiceItems связаны с фактическими «продуктами» с помощью обратного идентификатора (FK находится на продукте, а не на элементе счета, чтобы разрешать разные типы элементов (разные таблицы)), но я думаю, что я собираюсь переключить это.

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() 

У меня есть кронтаб настроить для запуска в полночь каждую ночь, чтобы добавить проценты по всем просроченным пунктов, а также счета-фактуры по почте каждую пятницу утром.

ответ

10

Опишите, что вы здесь описываете, в основном, решение об открытии позиции и бухгалтерском балансе.

При учете открытых позиций каждый счет-фактура хранится «открытым», в то время как он имеет баланс, и платежи относятся к отдельным счетам-фактурами, которые они платят. Это упрощает работу с интересами, например, если вы взимаете проценты только на остаток, превышающий 30 дней, то вам нужно знать, какие счета-фактуры имеют непогашенные остатки более 30 дней.

Бухгалтерский учет в балансе аналогичен платежам по кредитным картам, когда есть один единовременный остаток, который переносится вперед, и платежи производятся против этого общего баланса, а не отдельных счетов-фактур.

Обновление для осветления

Открытого учет детали хорошо для сложных биллинговых процессов, например, когда только некоторые из продуктов, которые привязаны к определенным счетам. Например, строитель покупает несколько десятков продуктов, но их нужно выставлять отдельно для трех разных строительных проектов.

Учет открытых позиций также используется, когда вам нужно отслеживать каждый индивидуальный счет-фактуру для целей оплаты и разрешения споров. Например, у здания есть строитель для клиента.Иногда поставляемые товары ошибочны или ошибочны, поэтому строитель оплачивает все другие счета-фактуры (включая более поздние счета-фактуры), за исключением тех, которые отслеживаются и обрабатываются отдельно - возможно, выплачиваются, когда поставляются запасные товары или, возможно, получают кредитную ноту против выставленный счет.

В балансовом бухгалтерском учете вы можете справиться с этой ситуацией, просто применяя кредит к учетной записи в целом, а затем повторно добавляя транзакцию при поставке запасных товаров. Любые проценты, начисляемые на остаток, также могут быть отменены по счету.

Упрощенно, вот так, как вы могли бы установить их в базе данных:

Open Пункт Учет

Вам необходимы следующие таблицы:

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] 

Клиент получает счет-фактуру, созданный при покупка продуктов. Для каждого купленного продукта создается элемент счета для этого продукта с указанием количества купленной суммы и суммы. Когда счет-фактура обновляется, непогашенный остаток счета-фактуры - это сумма баланса счета-фактуры, а остаток на счете клиента обновляется (может рассчитываться «на лету», но проще и быстрее, если поддерживается автоматически). Когда клиент оплачивает один или несколько счетов-фактур, создается квитанция, и квитанции квитанции присваиваются каждому счету. Непогашенный остаток счета-фактуры обновляется как с балансом счета клиента. Обратите внимание, что переплаты должны рассматриваться отдельно. Процентные ставки взимаются в следующем счете-фактуре (или отдельном счете-фактуре) в качестве объекта счета-фактуры (это может быть пользовательский продукт).

Баланс вперед Учет

Вам необходимы следующие таблицы:

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

Когда продукт куплен, сделка производится на счет клиента, с указанием количества продукта и количество и остаток на счете клиента обновляется. Когда квитанция делается, снова выполняется транзакция на счете клиента, а остаток на счете клиента обновляется. Переплаты и процентные платежи - это всего лишь транзакция. Во время выставления счетов вы просто захватываете все транзакции (покупки, квитанции, процентные платежи и т. Д.), Которые не выделяются для счета-фактуры, и добавляете их в свой новый счет-фактуру. Счет-фактура не отображается в списке транзакций, это просто для удобства отслеживания транзакций, которые были выставлены на счет, и для предоставления клиентам ссылочного номера при оплате. Вы также можете отслеживать поступления в этой модели.

Другие соображения

  • Это не принимать во внимание общую бухгалтерскую книгу проводки, которая будет совершенно другой набор таблиц. Это просто для управленческого учета, а не для финансового учета.
  • На практике может быть таблица проектов между клиентом и счет-фактурой для отслеживания каждого из ваших индивидуальных проектов с вами.
  • Это действительно упрощенно, чтобы дать вам представление. Для полной реализации, несомненно, потребуется больше таблиц и полей.

Что касается того, что происходит, если они не оплачивают свой счет, когда приходит время для выставления счетов, в любой системе это не имеет значения - вы не возвращаетесь вовремя и не меняете предыдущие учетные записи. Все, что происходит сейчас, идет по новому счету.Разумеется, вполне уместно иметь строку на новом счете-фактуре, в котором говорилось: «Ранее непогашенный остаток», который показывает сумму, которую они уже должны (или кредитуют за переплату).

Вы также хотите, чтобы иметь возможность составлять отчет о счете, который не является счет-фактурой, так же, как письмо, напоминающее им, что у них непогашенные остатки. Это используется, когда новый счет не создается, но клиенту требуется напоминание об их балансе.

Я предпочитаю открыть элемент учета для своих систем, но из вашего описания баланс в прямом порядке звучит как хорошая подгонка.

+0

С балансом вперед вы не можете отслеживать, что просрочено и на что начислять проценты? – mpen

+0

Похоже, мне нужно идти с открытыми учетными записями, чтобы знать, когда это просрочено, тогда ... это будет интересно реализовать! Огромное вам спасибо за вашу помощь, хотелось бы, чтобы я мог выложить вас несколько раз. – mpen

+0

Просто добавлено разъяснение о новых счетах. С балансом вперед любые проценты обычно взимаются с баланса в конце периода, например, с вашей кредитной карты. Я использую открытый учет позиций, поскольку он дает более тонкий контроль над историей платежей (вы точно знаете, за что платит ваш клиент, а не просто вкладываете все в одно большое ведро). Тем не менее, баланс вперед бухгалтерский учет подходит для таких вещей, как телефонные счета, кредитные карты и т. Д. Это зависит от вашего варианта использования. –

Смежные вопросы