вторник, 23 августа 2016 г.

Активно-пассивный

История о том, как, казалось бы, небольшое и рутинное изменение требований к программному обеспечению привело к серьезным последствиям. Изначально при проектировании системы был сделан вроде бы небольшой хак. До поры, до времени он отлично работал. А потом вдруг количество перешло в качество - вдруг стало слишком неудобно пользоваться. Пришлось всё переделывать. К сожалению, у меня не получилось кратко изложить, но аналитикам и программистам стоит прочесть, мне кажется.

Банковские счета бывают активные, пассивные и активно-пассивные. Не совсем очевидно, но с точки зрения банка кредит, выданный клиенту - это актив. Потому что деньги работают. А вот деньги на текущем счете клиента - пассив; они как бы лежат без дела, и когда-то мы должны их вернуть. Наличка в кассе, золото в хранилище - актив. Иными словами, актив - это нечто положительное (с точки зрения банка), а пассив - отрицательное. В далеком 1998 (?) году, когда Нацбанк менял план счетов (якобы "под европейский стандарт"), большинство популярных балансовых счетов они сделали или активными, или пассивными. Т.е. на таком счете всегда должна быть сумма с каким-то одним знаком (по-крайней мере, по состоянию на конец операционного дня). Активно-пассивные счета тогда редко использовались.
Изначально балансовый счет 2600 (текущий счёт клиента) был пассивным. Пассив - это, как мы помним, "минус" с точки зрения банка. Но разработчики нашей банковской системы подумали: как-то глупо показывать "минус", когда у клиента есть деньги, а "плюс" - если он загнал счет в овердрафт (превысил свой остаток, ушёл в минус). Наверняка ведь пользователи постоянно будут путаться. И было принято простое решение: на пассивных счетах положительная сумма будет считаться пассивом, а не активом. Так мы её и храним в базе данных. Такой небольшой хак. Для активных и активно-пассивных счетов по-прежнему "плюс" - это актив, "минус" - пассив.

Если клиент попытался перерасходать свои средства, и у него был договор на овердрафт, то на счете появляется активный остаток (клиент нам должен). Но счёт-то пассивный, и иметь актив на нём запрещено. Поэтому, по требованиям НБУ, в конце операционного дня всё эти активы автоматически перегонялись на активные счета 2000 (овердрафт), а утром - обратно на 2600. И вот в какой-то момент Нацбанк подумал: а на хрена эти сложности? У больших банков много клиентов могут пользоваться овердрафтом, и в результате каждый день приходится делать сотни или тысячи автоматических проводок, которые просто засоряют бухгалтерскую книгу. Гораздо проще сказать, что клиентский текущий счет 2600 может быть активно-пассивным, т.е. отображать как реальные деньги, так и долг клиента. Поскольку в статотчетности активный и пассивный остаток на балансовом счете отображается отдельно, Нацбанк по-прежнему будет видеть полную картину. А счета 2000 можно закрыть за ненадобностью.

Технически сделать пассивный балансовый счет активно-пассивным было легко. Это случалось уже неоднократно. Но раньше такие изменения обычно касались каких-то экзотических счетов, которыми мало кто пользовался. А здесь - самый популярный балансовый счет 2600, нужный всем, и вдруг "деньги на счете" начинают отображаться как "минус". И вроде бы система работает, всё считает правильно, но неразбериха была бы страшная. Особенно учитывая, что операционистки были в основом были малоквалифицированные, текучка большая, получали мало. Или вообще работали бесплатно как стажеры: часто большие начальники пристраивали дочек в банк набраться опыта, прежде чем передать им свой бизнес.

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

Комментариев нет:

Ratings by outbrain