Выставление счетов-фактур или калькуляция или оценка

Если счета-фактуры могут быть аннулированы, следует ли их использовать в качестве котировок?

У меня есть таблицы Invoices, которые создаются из инвентаря, связанного с Job или Order. Я мог бы иметь таблицу Quotes в качестве промежуточного дома между инвентаризацией и счетами-фактурами, но мне кажется, что у меня будут дублированные структуры данных и логика, чтобы обрабатывать "Это цитата?". бит.

С точки зрения бизнеса, цитаты отличаются от счетов-фактур: котировка отправляется до начала операции, а счет-фактура отправляется после его завершения и оплаты, но как представить это в моем репозитории и модели.

  • Что такое элегантный способ хранения и управления кавычками и счетами в базе данных?

Изменить: указано Job === Order для данного конкретного экземпляра.

+22
источник поделиться
5 ответов

Существует 3 подхода:

  • Хранить счета-фактуры и котировки в отдельных таблицах.

    Это хороший дизайн, если счета и кавычки имеют несколько полей в двух экземплярах (в противном случае используйте параметр № 3 с 3 таблицами), и если между ними существует 1-много или много-много отношений (для 1-1 используйте вариант № 2).

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

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

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

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

    Первые (отдельные строки для счетов-фактур и кавычек) не отличаются хорошим дизайном в целом и лучше выполняются с вариантами # 3 или # 1.

  • У вас есть 3 таблицы, одна для общих полей между ними и две только для счетов-фактур и только кавычек.

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

    Небольшое изменение этой опции может быть выполнено, когда несколько кавычек превращаются в один счет-фактуру. Это добавляет 4-ю таблицу, которая представляет собой сопоставление между набором кавычек и расписанием (или набором счетов-фактур, если это становится сложным) для них. Опять же, предположение здесь состоит в том, что существует значительная часть общей информации между всеми котировками и счетами, связанными/объединенными вместе, иначе просто перейдите к # 1.

+16
источник

Котировки более похожи на заказы. Я видел несколько систем распределения/розничной торговли с таблицей заказов, которая имеет логический флаг с именем IsQuote. Это может показаться простым, поскольку это делает тривиальным превращение цитаты в заказ. Мне это никогда не нравилось, потому что заказы, которые выходят из кавычек, не всегда точно цитируются. В результате такие системы теряют информацию, которая может быть использована (т.е. Отчет, который сравнивает кавычки с заказами). Поэтому я предпочитаю системы, где таблицы котировок и заказов примерно одинаковы, но разделены. В системах распределения это часто приводит к таблицам типа OrderHeader, OrderLine (относится к таблице товаров/инвентаря), QuoteHeader и QuoteLine. У вас также может быть таблица для моделирования отношений, где одна цитата может отображаться в нескольких порядках.

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

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

+8
источник

[Одиночный продукт и службы игнорируются для простоты.]

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

Котировка должна истечь в какой-то момент и может быть или не быть принята до истечения срока действия.

A Заказ на продажу - это обязательство, чтобы продать товар по цене на дату другой стороне. Он может быть создан из принятой цитаты.

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

Приказ может быть для товара, который еще не существует (вы продаете товар, а не актив). Возможно, вы его строите. Может быть, вы купите его у кого-то другого.

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

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

Заказ клиента может быть отменен (например, в некоторых отраслях есть периоды охлаждения).

A торговый счет - это запрос на оплату для заказанных продуктов. Это может произойти до доставки, при доставке или после доставки, или вообще не происходит вообще (например, если вы находитесь в очереди в McDonald's). В заказе может быть один или несколько счетов-фактур, а счет-фактура может быть для нескольких заказов.

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

+2
источник

Я бы рекомендовал быть максимально гибким. Используйте следующие таблицы

Таблица рабочих мест, таблица счетов, таблица цитат

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

+1
источник

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

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос