Типовая схема биллинга исправленная и дополненная

В предыдущей публикации обсуждение прошло весьма и весьма плодотворно. Это потребовало изменений в схеме, а так же переработки терминологии. Так же дополнительно я добавил реализацию НДС/VAT. И выложил схему в формате Power Architect, а также DDL для PostgreSQL на github. Кому интересна в первую очередь эта часть ее можно посмотреть тут.

Но а теперь вернемся к изменениям в схеме. Я добавил следующие новые таблицы:

  • bill.ledgertype - используемая сторона учета (дебит, кредит, оба)
  • bill.vat - первичный документ НДС
  • bill.vatrate - Ставка налога на добавленную стоимость
  • bill.saldo - Сальдо (обороты) за отчетный период

Первая таблица была добавлена для упрощения обработки первичных документов и упрощения логики. Следующие две касаются поддержки в схеме выставления НДС, а таблица bill.saldo позволяет проще проводить аналитику по клиентам.

Так же добавил следующие связи с bill.ledgertype:

  • Связь таблицы bill.ledgertype с bill.trxtype - указывает на используемую по умолчанию сторону учета для типа первичного документа
  • Связь таблицы bill.ledgertype с bill.trx - указывает на использованную в проводке сторону учета
  • Связь таблицы bill.ledgertype с bill.remain - указывает на использованную в первичном документе остатка сторону учета. Это позволяет использовать одну таблицу для переносимых остатков. Какая из сторон будет использована выбирается при проведении документа

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

В первую очередь это касается таблиц bill.trx и таблиц уточняющих операции bill.payment, bill.charge и т.п. Таблица bill.trx все так же отображает проводимые операции, но в бухгалтерии есть более корректный термин проводки. Таким образом bill.trx - это журнал проводок. Добавление в bill.trx типа стороны учета в том числе добавлялось и для этого. Все таблицы уточняющих операций становятся таблицами первичных документов. Остальную терминологию я изменять не стал так-как с ней проблем как раз таки не возникло. И так раз по терминологии прошлись, то теперь перейдем к НДС.

НДС никак не вписывался в первичный документ начислений во всех случаях. Как итог, я добавил его как дополнительный первичный документ и в проводках по начислениям НДС в принципе нет. Для решения проблем в случаях когда НДС все входит в начисление за услугу, а это требуется в случае если у нас Россия и клиент физическое лицо был добавлен флаг vatincluded. В этом случае сумма начисления в первичном документе начисления включает НДС. Это решает проблему с начислением НДС, но есть еще пара не решенных вопросов. Это:

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

Ну и по завершению слайды :)