Как управлять транзакциями, долгами, процентами и штрафами? - PullRequest
1 голос
/ 22 декабря 2010

Я делаю BI систему для банковского учреждения. Эта система должна управлять кредитными договорами, счетами, платежами, штрафами и процентами.

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

Я думал, что есть 2 способа сделать это:

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

Преимущества первого варианта:

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

Недостатки первого варианта:

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

Преимущества второго варианта:

  • Работает быстро, а сводные данные всегда доступны для поиска и отчетов.
  • Проще вычислить

Недостатки второго варианта:

  • Уязвим к сбойным работам.
  • Ошибки в прошлом распространяются до конца, до окончательных результатов.
  • Промежуточный результат не может быть изменен, если поступают новые данные из прошлых транзакций (это возможно, но это сложно, и со многими последствиями, поэтому я бы предпочел пометить его как Tabu)
  • Задания не могут быть выполнены успешно и без проблем, если существует незавершенная транзакция (выставленный счет, который еще не был оплачен)

Есть ли другой способ? Могу ли я объединить преимущества этих двух? Какой из них используется в других подобных системах, с которыми вы сталкивались? Пожалуйста, поделитесь любым опытом.

1 Ответ

3 голосов
/ 22 декабря 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...