p> 1.5.4. Многосторонний взаимозачет путем новации и замещения.
Хотя в принципе взаимозачет путем новации представляет собой
двусторонний процесс, его можно использовать и для многосторонних расчетов
между членами более крупной группы банков. В этом случае должна быть
использована третья сторона (например, своего рода клиринговая палата) для
принятия на себя нового чистого обязательства в качестве партнера каждого
банка-участника. Такой процесс называется новацией и замещением.
В качестве примера многостороннего взаимозачета путем новации и
замещения можно привести гипотетическую клиринговую палату или компанию,
занимающуюся расчетами по валютным операциям. В роли такого учреждения,
предоставляющего услуги по взаимозачету, могла бы выступать национальная
клиринговая палата, осуществляющая для своих членов имеющий юридическую
силу многосторонний зачет обязательств по всем их валютным контрактам с
другими участниками. При представлении такого контракта парой участников в
клиринговую палату эта палата будет выступать в качестве партнера по
отношению к каждому из этих своих членов и будет погашать их взаимные
обязательства. Более того, у клиринговой палаты будет существовать текущая
чистая позиция по соответствующим валютам и по датам зачисления средств по
отношению к каждому участнику. В результате, для данной группы контрактов,
переданных для взаимных расчетов, будет определен ряд чистых сумм (равных
многостороннему сальдо каждого участника по отношению к группе участников
взаимозачета в целом), причитающихся клиринговой палате от каждого
участника им наоборот. В качестве основного партнера клиринговая палата
возьмет на себя как кредитный риск, так и риск неликвидности. В то же самое
время ее члены будут нести кредитный риск и риск неликвидности по отношению
к клиринговой палате, а не к своим партнерам по операциям. Таким образом,
клиринговой палате придется управлять своей кредитовой позицией по
отношению к каждому члену, а также риском неликвидности, связанным с
расчетами.
Важнейшим элементом, способствующим тому, чтобы кредитный риск,
существующий при использовании клиринговой палаты, был меньше кредитного
риска, возникающего при двустороннем взаимозачете путем новации, является
ряд соглашений, касающихся многостороннего взаимозачета путем новации и
замещения. При юридической исполнимости договоренностей о многостороннем
взаимозачете такое снижение риска для отдельного участника будет иметь
место потому, что данная система взаимозачета даст возможность использовать
двусторонние дебетовые сальдо каждого участника по отношению к другим для
компенсации двусторонних кредитовых сальдо по той же валюте, в результате
чего уменьшится чистая кредитовая позиция. Однако многосторонний
взаимозачет не изменит кредитовую позицию участников, не имеющих
двусторонних дебетовых сальдо.
Многосторонний взаимозачет путем новации и замещения обладает
потенциальной возможностью большего снижения риска неликвидности по
сравнению с любой другой формой взаимозачета. При такой системе
взаимозачета на данную дату зачисления средств чистые суммы задолженности
по сравнению с двусторонним взаимозачетом снижаются или остаются
неизменными для некоторых участников. Это снижает риск неликвидности для
отдельных участников, для участников клиринга в целом и, возможно, для
других финансовых рынков.
С другой стороны, при использовании клиринговых палат требуется
централизация платежей по расчетам: все такие платежи производятся между
клиринговой палатой и отдельными участниками. В подобном случае
неспособность одного члена урегулировать свою позицию может привести к
нехватке наличности в одной или нескольких валютах, необходимых для
производства расчетов. Риск неликвидности для остальных участников зависит
в этом случае от способности клиринговой палаты мобилизовать наличность,
необходимую для завершения расчетов.
Таким образом, многосторонний характер деятельности клиринговой палаты не
дает гарантии снижения риска неликвидности по сравнению с двусторонним
взаимозачетом путем новации. На практике риск неликвидности, в том числе и
системный, в данном случае может оказаться более высоким.
1.6. Управление рисками в системах взаимозачета
Риск, возникающий в связи с осуществлением взаимозачета, может быть
урегулирован несколькими путями. Центральный банк, выступая в роли
учреждения, осуществляющего контроль за бесперебойным функционированием
системы платежей, представляет собой одного из основных кредиторов и
является расчетным агентом при проведении большей части клиринговых
операций, что обуславливает и его решающую роль в определении принципов
управления факторами риска и обеспечении того, чтобы каждый из участников
клиринговой системы следовал этим принципам. Кроме того, немаловажную роль
в управлении рисками играют и сами клиринговые палаты, определяющие порядок
обслуживания кредитных учреждений, деятельность которых сопряжена с высокой
степенью риска, а также осуществляющие урегулирование других проблем,
связанных с различными видами финансового риска. Для управления рисками
клиринговых платежей обычно используются следующие методы:
- сокращение расчетного периода
- двусторонние и многосторонние лимиты
- механизмы распределения убытков
- неокончательный характер расчетов в рамках клиринговых систем и аннулирование результатов клирингового сеанса.
Сокращение расчетного периода
Чем короче расчетный период, тем меньше риск неуплаты по расчетам и
связанный с ним системный риск. В качестве дополнительного механизма
применяются средства контроля в масштабе реального времени, которые
помогают выявлять на ранней стадии потенциальные проблемы и облегчают
управление ликвидными средствами, особенно в тех случаях, когда возможен
централизованный контроль сальдо всех участников.
Двусторонние и многосторонние лимиты
Одним из методов управления рисками в клиринговых системах является
использование двусторонних или многосторонних верхних лимитов сальдо
участников, которые автоматически ограничивают потенциальный риск
межбанковских расчетов в рамках системы. Такие верхние лимиты часто
определяются как сумма, кратная величине первичного капитала банков, а
также основываются на оценке каждым учреждением своей кредитоспособности.
Помимо лимитов на дебетовое сальдо каждого участника по отношению к другим
участникам, некоторые клиринговые палаты дополнительно требуют от каждого
члена установить лимит на свое кредитовое сальдо по отношению к другим
членам системы. Главным недостатком таких лимитов является то, что их можно
обходить с помощью посылаемых через другие системы платежных поручений и
что они могут приводить к замедлению выполнения поручений клиентов или
отказу от их выполнения.
Механизмы распределения убытков
Наиболее твердой гарантией от связанных с осуществлением взаимозачета
рисков являются механизмы, призванные обеспечить возможность проведения
расчетов в рамках клиринговой системы даже в том случае, когда ее отдельные
участники не в состоянии урегулировать свои обязательства. Обычно такие
механизмы предусматривают объединение риска неликввдности и распределение
неурегулированных сальдо в соответствии с заранее установленным порядком.
При этом, как правило, выдвигается требование о предварительном внесении
обеспечения и/или о гарантированном выделении ликвидных средств Центральным
банком. В некоторых системах Центральный банк выражает готовность
осуществить расчет лишь при условии, что превышающие обеспечение убытки
будут впоследствии покрыты не обанкротившимися участниками.
Неокончательный характер расчетов в рамках клиринговых систем и
аннулирование результатов клирингового сеанса
Своевременность расчетов в рамках клиринговых систем зависит от
способности каждого из участников выполнить свои многосторонние
обязательства, принятые в результате операций, проведенных в определенный
период (в течение операционного дня). Типичной процедурой, применяемой при
возникновении просрочек и неплатежей в процессе проведения расчетов,
является использование положения о неокончательном характере расчетов и
возможности отзыва платежей участнику, испытывающему подобные затруднения,
и платежей, причитающихся с этого участника. В этом случае некоторые или
все платежные операции, произведенные в рамках системы за данный период
времени, аннулируются, а многостороннее сальдо для остальных участников
пересчитывается. Эта процедура перемещает давление, связанное с недостатком
ликвидности и потенциальными убытками, с одного на всех участников системы
взаимозачета.
2. Оптимизация лага клиринга
1. Постановка задачи
Республика Беларусь сейчас модернизирует автоматизированную систему
межбанковских расчетов. Это ставит вопрос четкого выделения возможных их
форм и оптимальных параметров. Ясность в формах расчетов достигнута, а в
параметрах – нет. Проблема выбора оптимальных параметров расчетов не решена
в системе, и данная часть дипломной работы посвящена выбору одного из них –
лага клиринга.
В зависимости от скорости обработки платежного документа есть два
полюса форм оплаты, поступающих в банк платежных документов: валовая
оплата и клиринг.
При валовой оплате платежные документы оплачиваются индивидуально по
мере их поступления. Идеал валовой оплаты – оплата в темпе поступления
документов или, выражаясь по другому, в реальном времени (имеется в виду
время поступления). Такая форма называется RTSG (Real Time Gross Settlement
– Система крупных платежей в реальном времени). В режиме RTGS должны
оплачиваться крупные или срочные платежи. Решение о срочности - это решение
плательщика. Ясно, что за срочность нужно платить. Параметр «крупности»
определяется Центробанком.
Цель валовой оплаты – скорость оплаты. Модуль автоматизированной
системы межбанковских расчетов, отвечающий за валовую оплату в реальном
времени - это модуль BIS (Belarus Interbank Settlement).
При клиринге оплата поступившего документа специально откладывается и
формируется множество неоплаченных платежных документов (платежный пакет).
Затем оплата сформированного пакета платежных документов делается не по
каждому документу последовательно, а итоговыми расчетными документами с
учетом погашения встречных платежей. После реализации итоговых платежей,
платежи исходного пакета считаются оплаченными без реального
индивидуального оформления бухгалтерских проводок по каждому документу.
Цель клиринга – уменьшение ликвидных средств, требуемых для поддержания
расчетов. За клиринг будет отвечать самостоятельный модуль системы
межбанковских расчетов.
Лаг клиринга – отрезок времени, в течение которого формируется пакет
платежных документов, и после истечения которого выносится решение о
клиринговой оплате. Фактор лага проявляется двояко и в противоположных
тенденциях:
1. Чем больше лаг клиринга, тем больше стоят в неподвижности деньги
клирингового пакета. Значит, имеем отвлеченные средства и, следовательно,
имеем потенциальные потери банка-получателя этих средств. Ясно, что
отвлечение прямо пропорционально лагу клиринга.
2. Чем меньше лаг клиринга, тем больше требуется ликвидных средств для
проведения совокупных расчетов. Значит, имеем отвлечение средств и,
следовательно, имеем потенциальные потери банка-плательщика. Ясно, что при
стремлении лага к нулю отвлечение достигает какого-то максимума V, а при
стремлении лага к бесконечности отвлечение достигает какого-то минимума I.
Итак, происходит конкуренция двух факторов:
1) потенциальная потеря от замораживания средств в клиринге, которая
пропорциональна времени замораживания и
2) потенциальный доход от уменьшения средств обеспечения расчетов,
которое растет с ростом лага клиринга.
Интегральный эффект клиринга есть разность этих двух величин. Значит,
и слишком малый лаг клиринга плох, и слишком большой лаг клиринга плох.
Следовательно, есть оптимальный лаг и его нужно определить.
Задача состоит в том, чтобы определить лаг клирингового цикла, при
котором интегральный эффект клиринга будет максимальным.
2.2. Формализация задачи
Формула расчета убытка от применения клиринга вследствие простаивания
денег клирингового пакета имеет следующий вид:
[pic],
где [pic] – интенсивность оборота, сколько средств проходит в валовых
расчетах за единицу времени – за день. Эта формула показывает отвлечение
вследствие клиринговой неподвижности средств платежного пакета, как
следствие клиринга Средства [pic] были бы пущены в оборот и принесли бы
выгоду банкам-получателям средств. Итак, имеем здесь дело с потенциальным
убытком. Предполагая равномерное поступление платежей, имеем простой
средств в размере [pic] в течение времени [pic], т.е. [pic] .
Теперь подсчитаем доход: на оплату требуется меньше средств, чем при
валовой оплате, а сэкономленные средства пускаются в оборот и приносят
доход.
Таким образом имеется возможность построить математическую модель:
Пусть, [pic] - средства, необходимые для поддержания клиринга, [pic] –
лаг клиринга. Накладываются следующие естественные условия:
1) При [pic] (2.1), где [pic] – средства, обслуживающие валовые расчеты.
2) При [pic] (2.2), где [pic] – средства, обслуживающие «экспорт-импорт» клиринговой системы;
3) [pic] есть функция от [pic].
Найдем вид функции [pic], основываясь, как говорят в физике, на
феноменологическом подходе. Т.е. мы не привлекаем никаких «микродеталей»
типа статистики потоков между участниками и т.д., а основываемся только на
самых общих «внешних» соображениях. Внутренний причинный механизм денежных
потоков остается черным ящиком. Воспользуемся однородностью времени. Все
возможные лаги клиринга образуют ось [pic] – ось лага клиринга. Очевидно,
что ни один момент времени [pic] не должен быть выделен: если у нас был лаг
клиринга [pic] и мы переходим к [pic], то все равно, как мы считаем [pic] –
или отталкиваясь от 0, беря за основу [pic], или отталкиваясь от [pic],
беря за основу [pic]. Графическая интерпретация изложенного дана на Рис.
3.1.
Итак, [pic] однородно и, значит, имеем своего рода принцип
относительности: закон не должен зависеть от системы координат. В
применении к нашему случаю это означает, что формула О должна давать
ковариантную (не изменяющую вида) зависимость от [pic]: сдвиг по оси [pic]
не должен менять вида формулы, если пересчитать все к новому началу
координат – переход от [pic] к [pic] = [pic] - а и от [pic]к [pic] должен
удовлетворять условию [pic]. Или, по другому, [pic]. Такое функциональное
уравнение характерно только для экспоненты.
Рис.2.1. Графическая интерпретация «однородности» времени.
В дифференциальном виде экспонента характеризуется соотношением:
[pic] (2.3),
где v – какой-то коэффициент пропорциональности. Условия (1) - (3) дают
единственное решение:
[pic] (2.4)
Проверяем выполнение свойства [pic]:
[pic], что и нужно.
Данная математическая модель подсчета средств, необходимых для
поддержания клиринга, была разработана и протестирована на адекватность и
устойчивость в американской клиринговой системе CHIPS, кроме того,
адекватность данной модели подтверждена проверкой на отечественных
статистических данных по межбанковским расчетам в информационно-
аналитическом управлении Белорусского Межбанковского Расчетного Центра
Национального Банка Республики Беларусь.
Используя этот результат, подсчитаем экономию вследствие
клиринговости.
Итак, [pic] – реальное отвлечение вследствие «валовости» (об этом
говорит индекс параметра О), т. е. расчетов через конечный отрезок времени
[pic], а не бесконечный, что было бы идеальным для клиринга. Параметр [pic]
– это максимум средств, для поддержки расчетов, достигаемый при чистом
вале, когда клиринга нет: [pic]. Параметр [pic] – это минимум средств для
поддержки расчетов, достигаемый при чистом клиринге, когда валовой оплаты
нет: [pic]. Параметр [pic] – это мера спада потребности в средствах для
расчетов. Его можно определить эмпирически по результатам клиринга с циклом
в один день. Пусть, в этом случае, требуются для обеспечения расчетов
средства в размере [pic]. Тогда
[pic] (2.5)
Параметр [pic] характеризует импортную незамкнутость системы: если бы
пользователи клиринга были тесно связаны только между собой, то [pic]. Для
страны в целом – это средства оплаты экспорта-импорта и, значит, [pic]
можно определить из данных статистики, если клиринг охватывает всю
республику. Для группы банков – это обслуживание входа-выхода средств вне
этой группы. Экономия вследствие клиринговости равна:
[pic]
Доход от такой экономии пропорционален рыночной процентной ставке
[pic] и времени [pic].
Подсчитаем интегральный эффект от клиринга. Эффект - разность дохода
и убытка:
[pic] (2.6)
Оптимизация этой функции равносильна оптимизации следующей функции:
[pic] (2.7)
2.3. Решение задачи и его анализ
При каком-то значении [pic] экономия достигает максимума. Для
определения этого значения возьмем производную функции [pic] по [pic] и
приравняем ее к нулю. Вычисляем производную:
[pic]
[pic]
Теперь решаем уравнение:
[pic]
[pic]
[pic]
Для того, чтобы убедиться, что найденная точка является точкой
глобального максимума функции интегрального эффекта от применения клиринга
[pic], покажем, что эта функция является вогнутой (выпуклой вверх), для
чего исследуем знак второй производной функции [pic]:
[pic]
Окончательно получим:
[pic] (2.8)
или с учетом (5):
[pic] (2.9)
Модифицируем вид решения:
Пусть: k = K/V, т. е. k – дневная оборачиваемость средств в расчетах,
определяющая, сколько рублей дневного оборота обслуживает один рубль
сальдо. е = O(l)/V, т.е. е – доля клиринговых отвлечений от валовых отвлечений
при однодневном цикле. n = 1/е – уменьшение средств, обусловленное клирингом – эффективность
клиринга. i = l/V, т.е. i – доля средств, обслуживающих в расчетах экспорт-
импорт системы. Тогда
[pic] (2.10)
Итак, [pic] выражена через:
1) k – дневную оборачиваемость средств в расчетах,
2) е – долю клиринговых отвлечений от валовых отвлечений при однодневном цикле,
3) i – долю обслуживания импорта в расчетах.
Область возможного положительного эффекта от клиринга задается
отрезком времени от 0 до Т. Т есть корень уравнения [pic] или
[pic]
Далее ясно, что при заданной модели [pic] существует нижняя граница
для [pic], выше которой клиринг не дает никакого эффекта. Эту границу
определяет касательная к [pic] в начале координат. Прямые [pic], лежащие
выше касательной, не пересекаются с [pic] нигде, кроме начала координат.
Значит, для них кривая [pic] не имеет максимума не в начале координат.
Указанная граница для [pic] определится из условия
[pic],
отсюда
[pic] (2.11)
Рассмотрим также графическую интерпретацию решения (см. Рис 2.2.)
Рис.2.2. Графическая интерпретация решения.
И, наконец, подсчитаем потери от применения неоптимального лага:
Пусть dt - отклонение от [pic]. Возникающие потери, измеряемые в сальдовых
единицах, есть разность:
[pic].
Все рассуждения, приведенные выше касались одного отдельно взятого
банка, однако лаг клиринга устанавливается клиринговой палатой,
составленной из представителей всех банков-участников. Поэтому, лаг,
являющий оптимальным для одного банка, может быть далеким от такового для
остальных банков. Поэтому для учета интересов всех участников системы
предлагается следующая модель.
Пусть в клиринговой системе участвует n банков. Обозначим, как и
ранее [pic] – эффект от применения клиринга с лагом [pic] для i-го банка,
вычисляемый по формуле (2.6), [pic] – средства i-го банка, необходимые ему
для валовых взаиморасчетов (т.е. без клиринга). Тогда наиболее приемлемый
для всех участников лаг клиринга рекомендуется искать, решив следующую
задачу оптимизации:
[pic] (2.12)
т.е. максимизируется наименьший из удельных эффектов от применения клиринга
для всех банков-участников.
2.4. Статистическая оценка оптимального лага.
На основе статистической выборки, включающей в себя ежедневные данные
за четыре месяца, были получены следующие оценки вышеописанных параметров:
i*=0.05, k*=v*=0.42. Подставив оценочные значения в формулу (2.9), получим
следующую оценку оптимального лага клиринга t* =1,538372. Таким образом, на
основе вышеизложенной модели оптимизации лага клиринга можно утверждать,
что оптимальным в текущих условиях является лаг в полтора дня, т.е. 36
часов.
3. ППП «Система межбанковского клиринга»
3.1. Назначение и структура пакета
ППП «Система межбанковского клиринга» является практической
реализацией идеи автоматизации клирингового процесса. Пакет охватывает
автоматизацию как работы самой клиринговой палаты, так и работы банков-
участников клирингового сеанса. ППП содержит два функционально различных
программных модуля: «АРМ оператора клиринговой палаты» и «АРМ оператора
банка» и представляет собой программный продукт, построенный по схеме
«клиент-сервер». Сервером является модуль «АРМ оператора клиринговой
палаты», а клиентом – модуль «АРМ оператора банка». В системе всегда
действует один сервер и неограниченное количество клиентов. Модуль «АРМ
оператора клиринговой палаты» устанавливается на сервере клиринговой
палаты, а экземпляры модуля «АРМ оператора банка» – на серверах или рабочих
станциях банков-участников клирингового процесса, по одному на каждый банк.
ППП обеспечивает всю необходимую функциональность для работы клиринговой
палаты, однако для реального внедрения необходима существенная доработка в
области сохранения целостности данных и контроля доступа к ним. Однако эта
доработка может производиться независимо от существующего кода стандартными
средствами СУБД. Система взаимосвязанных таблиц данных сервера реализована
на базе СУБД Oracle 7.3.3 Server. Рекомендуемыми операционными системами
для этой СУБД являются SCO Unix версии 5.2 и выше либо Windows NT Server
версии 4.0 и выше. Клиентская часть реализована на базе СУБД Personal
Oracle 7.3.3. Удаленный доступ к серверу БД реализован с помощью
стандартного средства СУБД Oracle 7.3.3 – Oracle SQL* Net. Графический
пользовательский интерфейс обоих модулей реализован в RAD-среде разработки
приложений Borland Delphi 3.0 Client/Server для операционной системы
Windows 95 или Windows NT Workstation. Полный текст исходного кода ППП
«Система межбанковского клиринга» приведен в Приложении 1.
3.2. Модуль « АРМ оператора клиринговой палаты»
Модуль «АРМ оператора клиринговой палаты» устанавливается на сервере
клиринговой палаты и обеспечивает добавление и удаление банков-участников
клиринговой системы, прием, обработку платежных документов, проверку их на
наличие ошибок и проведение окончательных взаиморасчетов между банками-
членами клиринговой палаты. Кроме того, данный модуль инициирует начало
клирингового сеанса, ведет статистику платежей и закрывает сеанс по
истечению заданного срока. Работой модуля управляет один человек – оператор
клиринговой палаты, наделенный особыми полномочиями.
Главное окно модуля «АРМ оператора клиринговой палаты» выглядит
следующим образом:
Пункт меню «Банки» содержит подпункты «Просмотреть» для просмотра
списка текущих участников системы и удаления любого из них и
«Зарегистрировать нового участника» для добавления новых банков. Список
банков выглядит, как на Рис.3.2.
Рис.3.2. Окно со списком банков-членов клиринговой палаты.
При выборе подпункта «Регистрация нового участника» на экран
выводится диалоговое окно для ввода необходимой информации об участнике.
Его вид приведен на Рис.3.3.
Рис.3.3. Окно регистрации нового банка.
После выполнения регистрации на сервере новый банк-участник может
запускать на своей рабочей станции модуль «АРМ оператора банка» и входить в
систему указав необходимые имя пользователя и пароль.
Пункт меню «Сообщения» содержит один элемент – подпункт
«Просмотреть». При выборе этого подпункта на экран выводится диалоговое
окно следующего вида:
Рис. 3.4. Окно со списком полученных сообщений.
Основными функциями данного окна являются просмотр списка полученных
сообщений и подтверждение тех из них, которые удовлетворяют требованиям
клиринговой палаты.
Меню главного окна «Сеанс» содержит три подпункта «Начать сеанс»,
«Завершить сеанс» и «Показать текущие позиции» для инициализации
клирингового сеанса, его завершения и для просмотра текущих чистых позиций
соответственно.
3.2. Модуль « АРМ оператора банка»
Модуль «АРМ оператора клиринговой палаты» устанавливается на рабочих
станциях банков-участников системы взаимозачета и обеспечивает следующие
функции: подключение банка к текущему клиринговому сеансу, выход от сеанса,
отсылку платежных сообщений, а также подсчет и просмотр окончательной
чистой позиции банка. Работой модуля также управляет один человек –
оператор банка.
Главное окно модуля «АРМ оператора клиринговой палаты» выглядит
следующим образом:
Данное окно содержит два основных пункта меню «Клиринговый сеанс» и
«Сообщения». Первый из них имеет два подпункта для входа в клиринговый
сеанс и выхода из него соответственно. Наиболее важным является пункт меню
«Сообщения». Он имеет подпункты «Отправить сообщение» и «Показать
сообщения». При выборе подпункта «Отправить сообщение» на экран выводится
диалоговое окно для ввода параметров сообщения. Его вид показан на Рис.
3.6.
Выбор подпункта «Показать сообщения» приводит к выводу на экран
диалогового окна со списком сообщений, которые относятся к банку-владельцу
запущенной копии модуля. Можно выбрать для показа входящие платежи,
исходящие платежи или оба типа одновременно. Показываются лишь те
сообщения, которые были подтверждены клиринговой палатой в модуле «АРМ
оператора клиринговой палаты». Вид этого окна приведен на Рис. 3.7.
Рис 3.7. Окно со списком подтвержденных сообщений.
ЗАКЛЮЧЕНИЕ
В данном дипломном проекте освещены проблемы межбанковского клиринга
и методы их решения, приведены реальные модели клиринговых систем. Кроме
того, поставлена, математически сформулирована и решена проблема
оптимизации важнейшего параметра клирингового цикла – лага клиринга. На
основе реальных статистических данных получена статистическая оценка
искомого параметра. Также приводится математическая модель обобщения
полученных результатов для максимизации прибыли каждого из участников
клиринговой системы.
Существенной частью работы в дипломном проекте является разработка
пакета программных продуктов «Система межбанковского клиринга». Этот
программный продукт является попыткой комплексной автоматизации
клирингового процесса. Пакет полностью готов для тестового использования и
сбора статистической информации, планируется его доработка в областях
сохранности целостности данных, управления доступом и оптимизации
производительности до уровня реальной системы.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Березина М.П., Крупнов Ю.С. Межбанковские расчеты. – М.: АО
“Финстатинформ”, 1993.-142с.
2. Тосунян Г.А. Клиринг и межбанковские финансовые операции: основные понятия и финансовые инструменты. – М.: “Дело”, 1994.-56с.
3. Тосунян Г.А. Операционные технологии межбанковского финансового рынка. –
М.: “Дело”, 1994.-122с.
4. Усоскин В.М. Современный коммерческий банк: управление и операции. – М.:
-- Возвращает флаг состояния текущей сессии
FUNCTION GetSessionStatus RETURN INT;
-- Процедура начала клирингового сеанса для банка-участника
FUNCTION StartBankSession(aBankID IN INT) RETURN INT;
-- Процедура завершения клирингового сеанса для банка-участника
PROCEDURE StopBankSession(aBankID IN INT);
-- Возвращает уникальный номер вызвавшего банка
FUNCTION GetOurID RETURN INT;
-- Возвращает окончательног сальдо банка
FUNCTION GetFinalSaldo(aBankID IN INT) RETURN INT;
-- Процедура отсылки в клиринговую палату платежа в "электронном" виде
PROCEDURE SendMessage(aSourceBankID IN INT, aDebitBankID IN INT, aCreditBankID IN INT, aAmount IN INT);
END ClientUtils;
/
SHOW ERROR;
-----------------------------------------------
-- Пакет процедур для работы банков-клиентов клиринговой палаты
-----------------------------------------------
PROMPT Creating package body ClientUtils...
CREATE OR REPLACE PACKAGE BODY ClientUtils
AS
-- Функция возвращает флаг состояния текущей сессии
FUNCTION GetSessionStatus RETURN INT
IS
BEGIN
RETURN ServerUtils.SessionState;
END GetSessionStatus;
-- Процедура подключения банка к очередной сессии клиринговой палаты
-- Выполняется каждый рабочий день в определенное время после выполнения
-- на сервере КП процедуры инициализации клирингового сеанса
FUNCTION StartBankSession(aBankID IN INT) RETURN INT
IS
BEGIN
IF ServerUtils.SessionState = GlobalConst.cSessionActive THEN
UPDATE BankState
SET BankStatus = GlobalConst.cBankWork
WHERE BankID = aBankID;
END IF;
RETURN ServerUtils.SessionState;
END StartBankSession;
-- Процедура выхода банка из текущего клирингового сеанса
-- Выполняется кажый день в определенное время до закрытия сеанса
-- на сервере КП
PROCEDURE StopBankSession(aBankID IN INT)
IS
BEGIN
UPDATE BankState
SET BankStatus = GlobalConst.cBankStopWork
WHERE BankId = aBankID;
END StopBankSession;
-- Функция возвращает уникальный номер вызывающего банка
FUNCTION GetOurID RETURN INT
IS
Res INT;
BEGIN
SELECT BankID INTO Res FROM Banks
WHERE UserName = USER;
END GetOurID;
-- Функция возвращает чистую позицию банка по окончанию сеанса
FUNCTION GetFinalSaldo(aBankID IN INT) RETURN INT
IS
aSaldo INT;
BEGIN
BEGIN
SELECT DebitPos-CreditPos INTO aSaldo FROM Results
WHERE BankID = aBankID;
EXCEPTION
WHEN No_Data_Found THEN aSaldo := NULL;
END;
RETURN aSaldo;
END GetFinalSaldo;
-- Процедура отсылки на сервер КП "электронного" платежа
PROCEDURE SendMessage(aSourceBankID IN INT, aDebitBankID IN INT, aCreditBankID IN INT, aAmount IN INT)
IS
FUNCTION GetCurrentCreditSaldo(aBankID IN INT) RETURN INT
IS
Res INT;
BEGIN
BEGIN
SELECT CreditPos INTO Res FROM TmpRes
WHERE BankID = aBankID;
EXCEPTION
WHEN No_Data_Found THEN
Res := 0;
END;
RETURN Res;
END GetCurrentCreditSaldo;
END CommonUtils;
/
SHOW ERROR;
--------------------------------------------------------
-- Модуль содержит глобальные константы
--------------------------------------------------------
PROMPT Creating package GlobalConst
CREATE OR REPLACE PACKAGE GlobalConst
AS
cStatusClass CONSTANT INT := -1;
cBankWork CONSTANT INT := 1; cBankStopWork CONSTANT INT := 2; cBankNotWork CONSTANT INT := 3;
cMsgNotProcessed CONSTANT INT := 1; cMsgAccepted CONSTANT INT := 2; cMsgSourceError CONSTANT INT := 3; cMsgDebitError CONSTANT INT := 4; cMsgCreditError CONSTANT INT := 5; cMsgProcessed CONSTANT INT := 6;
cSessionUnActive CONSTANT INT := 1; cSessionActive CONSTANT INT := 2;
END GlobalConst;
/
SHOW ERROR;
------------------------------------------------------
-- Модуль инициализации системы в СУБД Oracle 7.3.3
------------------------------------------------------
CREATE USER "ALEX" IDENTIFIED BY "ALEX" DEFAULT TABLESPACE "CLEARING";
GRANT "DBA" TO "ALEX" WITH ADMIN OPTION;
GRANT UNLIMITED TABLESPACE to "ALEX" WITH ADMIN OPTION;
GRANT SELECT ANY TABLE to "ALEX" WITH ADMIN OPTION;
GRANT GRANT ANY ROLE to "ALEX" WITH ADMIN OPTION;
GRANT CREATE ANY SYNONYM to "ALEX" WITH ADMIN OPTION;
GRANT DROP ANY SYNONYM to "ALEX" WITH ADMIN OPTION;
GRANT EXECUTE ANY PROCEDURE to "ALEX";
GRANT CREATE USER to "ALEX";
GRANT ALTER USER to "ALEX";
GRANT DROP USER to "ALEX";
GRANT GRANT ANY PRIVILEGE to "ALEX";
SPOOL OFF
EXIT
--------------------------------------------------
-- Начальное создание объектов системы
--------------------------------------------------
-------------------------------------------------------------
-- Таблица и последовательность для обработки сообщений
-------------------------------------------------------------
PROMPT Creating sequence Msg_Seq...
CREATE SEQUENCE Msg_Seq INCREMENT BY 1 START WITH 1 MAXVALUE 99999999 MINVALUE 1 NOCACHE CYCLE;
PROMPT Creating table Messages...
CREATE TABLE Messages
( MessageID NUMBER(8) -- Номер сообщения
CONSTRAINT message_pk PRIMARY KEY, SourceBankID NUMBER(8) -- Банк-источник сообщения
SessionState INT DEFAULT GlobalConst.cSessionUnActive;
PROCEDURE StartClearingSession;
PROCEDURE StopClearingSession;
FUNCTION GetActiveBanksCountInSession RETURN INT;
-- Процедура регистрации банка-участника клиринговой системы
FUNCTION RegisterBank(aBankName IN VARCHAR2, aUserName IN VARCHAR2, aPassword IN VARCHAR2) RETURN INT;
PROCEDURE UnRegisterBank(aBankName IN VARCHAR2);
-- Процедура выхода банка из клиринговой системы
PROCEDURE UnRegisterBank(aBankID IN INT);
FUNCTION CheckMessage(aMessageID IN INT) RETURN INT;
PROCEDURE ConfirmMessage(aMessageID IN INT);
END ServerUtils;
/
SHOW ERROR;
-----------------------------------------------
-- Процедуры и функции сервера КП
-----------------------------------------------
PROMPT Creating package body ServerUtils...
CREATE OR REPLACE PACKAGE BODY ServerUtils
AS
-- Процедура инициализации клирингового сенса в клиринговой палате
-- Выполняется каждый день в определенное время
PROCEDURE StartClearingSession
IS
BEGIN
DELETE FROM Messages; DELETE FROM BankState; DELETE FROM Results; DELETE FROM TmpRes;
FOR x IN
(
SELECT BankID
FROM Banks
) LOOP
INSERT INTO BankState (BankID, BankStatus)
VALUES (x.BankID, GlobalConst.cBankNotWork);
END LOOP;
SessionState := GlobalConst.cSessionActive;
END StartClearingSession;
-- Процедура завершения клирингового сеанса
-- Выполняется каждый день
PROCEDURE StopClearingSession
IS
aDebitSum INT; aCreditSum INT;
BEGIN
SessionState := GlobalConst.cSessionUnActive;
UPDATE BankState
SET BankStatus = GlobalConst.cBankStopWork
WHERE BankStatus = GlobalConst.cBankWork;
FOR x IN
(
SELECT BankID
FROM BankState
WHERE BankStatus = GlobalConst.cBankStopWork
) LOOP
BEGIN
SELECT Sum(Amount) INTO aDebitSum
FROM Messages
WHERE MsgStatus = GlobalConst.cMsgAccepted AND DebitBankID =
x.BankID;
EXCEPTION
WHEN No_Data_Found THEN aDebitSum := 0;
END;
BEGIN
SELECT Sum(Amount) INTO aCreditSum
FROM Messages
WHERE MsgStatus = GlobalConst.cMsgAccepted AND CreditBankID =
x.BankID;
EXCEPTION
WHEN No_Data_Found THEN aCreditSum := 0;
END;
INSERT INTO Results(BankID, DebitPos, CreditPos)
VALUES(x.BankID, aDebitSum, aCreditSum);
END LOOP;
INSERT INTO Statistics(ItemNo, WorkDay, BankID, DebitPos, CreditPos)
---------------------------------------------------------
-- Таблица и последовательность для ведения статистики
---------------------------------------------------------
PROMPT Create table Statistics...
PROMPT Creating sequence Stat_Seq...
CREATE SEQUENCE Stat_Seq INCREMENT BY 1 START WITH 1 MAXVALUE 99999999 MINVALUE 1 NOCACHE CYCLE;
CREATE TABLE Statistics
( ItemNo NUMBER(8) -- Номер элемента выборки
CONSTRAINT itemno_pk PRIMARY KEY, WorkDay DATE, -- Дата и время платежа BankID NUMBER(8) -- Номер банка DebitPos INT, -- Дебетовая позиция CreditPos INT -- Кредитовая позиция
);
DELETE FROM Status WHERE StatusClass = 1;
INSERT INTO Status VALUES (1, GlobalConst.cStatusClass,
'Статус банка в текущем сеансе');
INSERT INTO Status VALUES (1, GlobalConst.cBankWork,
'Банк участвует в текущем сеансе');
INSERT INTO Status VALUES (1, GlobalConst.cBankStopWork,
'Банк закончил текущий сенс');
INSERT INTO Status VALUES (1, GlobalConst.cBankNotWork,
'Банк не участвует в текущем сенсе');
COMMIT;
DELETE FROM Status WHERE StatusClass = 2;
INSERT INTO Status VALUES (2, GlobalConst.cStatusClass,
'Статус сообщения о платеже');
INSERT INTO Status VALUES (2, GlobalConst.cMsgNotProcessed,
'Сообщение не обработано');
INSERT INTO Status VALUES (2, GlobalConst.cMsgSourceError,
'Банк-источник не работает');
INSERT INTO Status VALUES (2, GlobalConst.cMsgDebitError,
'Банк по дебету счета не работает');
INSERT INTO Status VALUES (2, GlobalConst.cMsgCreditError,
'Банк по кредиту счета не работает');
INSERT INTO Status VALUES (2, GlobalConst.cMsgProcessed,
'Сообщение обработано и требует документального подтверждения');
INSERT INTO Status VALUES (2, GlobalConst.cMsgAccepted,
'Сообщение обработано и принято в систему взаимозачета');
-------------------------------------------------------
-- Таблица текущих результатов клирингового сеанса
-------------------------------------------------------
PROMPT Creating table TmpRes...
CREATE TABLE TmpRes
( BankID NUMBER(8)
CONSTRAINT tmpresbankid_fk REFERENCES Banks ON DELETE CASCADE, DebitPos INT, CreditPos INT
);
---------------------------------------------------
-- Удаление объектов системы
---------------------------------------------------
PROMPT Deleting databases...
SET ECHO ON;
DROP SEQUENCE Stat_Seq;
DROP TABLE Statistics;
DROP TABLE BankState;
DROP TABLE Status;
DROP SEQUENCE Msg_Seq;
DROP TABLE Messages;
DROP TABLE Results;
DROP TABLE TmpRes;
DROP SEQUENCE BankID_Seq;
DROP TABLE Banks;
PROMPT Deleting packages...
DROP PACKAGE BODY ServerUtils;
DROP PACKAGE ServerUtils;
DROP PACKAGE BODY ClientUtils;
DROP PACKAGE ClientUtils;
DROP PACKAGE BODY CommonUtils;
DROP PACKAGE CommonUtils;