ИНФОРМАЦИЯ ПО ВКЛАДАМ ФИЗ.ЛИЦ


СРОКИ ПО ВКЛАДАМ


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

Как следствие, определитель является ли вклад срочным или до востребования можно по наличию даты окончания (loan.end-date), или его сроку. Для вкладов до востребования, дата окончание имеет неопределенное значение (loan.end-date = ?), а срок вклада равен нулю, для срочных же вкладов, дата окончания и срок имеют определенное значение.

Срок вклада в АБС указывается либо индивидуально в доп. реквизите договора вклада dep_period, либо на транзакциях открытия и пролонгации вклада, которая прописывается в доп. реквизите prol-kind шаблона договора транзакции открытия вклада, в формате Г=0,М=0,Д=367.

Для получения данного значения можно использовать функцию:

Get-Dep-Period(loan.contract + "," + loan.cont-code)

описанную в get_date.i.

Функция get-end-date, описанная в jloan_dps.i (включен в get_date.i), позволяет определить дату, на которую выпадает окончание периода, указанного в формате Г=0,М=0,Д=367 и отсчитанного от указываемой даты:

get-end-date(in-date, periodStr)

Если срок вклада определяется "на сегодня", то проблем не возникает. Как только мы хотим определить срок вклада например "на завтра", то тут возникает ряд трудностей. Завтра вклад может быть пролонгирован и это надо учесть. Во-первых, с пролонгацией изменится значение даты окончания вклада (loan.end-date). Во-вторых, срок пролонгированного вклада может быть другим.

Функция Get-Dep-Period определяет срок вклада "на сегодня", учитывая текущее состояние вклада.

Для определение даты начала и даты окончания условия по договору на указанную дату имеется процедура get-beg-date-prol, описанная в get_date.i. Данная процедура в первую очередь пытается вызвать процедуру метода getvdate класса договора вклада, если такая указанная, если такой метод не указан, то определяет дату начала и окончания условия по продолжительности вклада указанной в шаблоне транзакции открытия и пролонгации вклада, а так же на основе совершенного количества пролонгаций вклада.

RUN get-beg-date-prol IN h_dpspc (iRid, 
                                  iDate,
                                  OUTPUT d1,
                                  OUTPUT d2)
  • iRid - RECID договора вклада, тип RICID;
  • iDate - расчетная дата, тип DATE;
  • d1 - дата начала условия, тип DATE;
  • d2 - дата окончания условия, тип DATE.

Все описанные выше функции и процедуры входят в состав библиотеки интерфейсов pp-dpspc.p.


СЧЕТА ВКЛАДА


К каждому договору вклада привязывается набор счетов и счет самого вклада является одним из них. Счета привязываются на определенную дату и могут быть изменены с течением времени. Для определения счета вклада на интересующую дату используется процедура GetBaseAcct входящая в состав библиотеки pp-dps.

RUN GetBaseAcct IN h_dps (loan.contract, 
                          loan.cont-code,
                          end-date,
                          OUTPUT vAcct).  

Возвращаемое значение vAcct = <счет>,<валюта>


РОЛИ СЧЕТОВ


Счета привязываются к договору вклада с определенной ролью: Счет срочного вклада, Начисленные и неоплаченные проценты, Счет для перечисления %% и т.д.

В зависимости от того, является вклад срочным или до востребования, роль счета вклада может быть loan-dps-t (для срочного вклада), или loan-dps-p (для до востребования).

Определить роль счета вклада можно с помощью процедуры GetBaseAcctRole:

DEF VAR vAcctRole  AS CHAR  NO-UNDO.   /* Роль счета вклада */
RUN GetBaseAcctRole IN h_dps (RECID(loan),
                             iDate,
                              OUTPUT vAcctRole).

Все счета вклада на заданную дату:

FOR EACH loan-acct OF loan 
   WHERE loan-acct.since LE iDate
     AND NOT CAN-FIND(FIRST b-loan-acct OF loan
                      WHERE b-loan-acct.acct-type EQ loan-acct.acct-type
                        AND b-loan-acct.since     LE iDate
                        AND b-loan-acct.since     GT loan-acct.since
NO-LOCK
):
  
...
END.


АНАЛИТИКА


Помимо балансового остатка, на счетах вклада ведутся так же аналитические остатки. Так например, аналитические остатки ведутся по таким счетам как: Счет срочного вклада и Начисленные и неоплаченные проценты. По счету может вестись несколько остатков, каждый остаток при этом обозначен своим кодом.

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

На счете вклада:

Код остатка вклада (сумма принадлежащая клиенту):

  • ОстВклС - срочный вклад;
  • ОстВклВ - до востребования.          

Код выплаченных процентов:

  • НачПрС1 - капитализация, срочный вклад;
  • НачПрВ - до востребования.

На счете Начисленные и неоплаченные проценты:

Код начисленных процентов:

  • НачПр

Для определения аналитического кода остатка вклада используется процедура GetBaseKodOst входящая в состав библиотеки pp-dps

RUN GetBaseKodOst IN h_dps (iAcctRole, 
                           OUTPUT oKodOst).
  • iAcctRole - Роль счета вклада, тип CHAR;
  • oKodOst - Код аналитического остатка вклада.


ПРОЦЕНТЫ ПО ВКЛАДУ



ПЕРИОДИЧНОСТЬ ВЫПЛАТЫ ПРОЦЕНТОВ


Периодичность выплаты процентов указывается на условии вклада в основном реквизите int-period (loan-cond.int-period). В данном реквизите хранится код из классификатора int-period.


СПОСОБ ВЫПЛАТЫ ПРОЦЕНТОВ


По способу выплаты процентов вклады делятся на вклады с капитализацией процентов и с выплатой. В первом случае, проценты по вкладу причисляются к счету вклада, тем самым увеличивая сумму вклада. Во втором случае, проценты выплачиваются на отдельный счет текущий, СКС, или например, на отдельный вклад до востребования.


ПРОЦЕНТНЫЕ СТАВКИ


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

Для вкладов до востребования основная процентная ставка определяется действующим на текущий момент времени значением данной ставки и не зависит от даты открытия вклада.

Основная ставка для вкладов отдельных клиентов помимо ее базового значения может включать в себя еще дополнительные бонусы.

В силу того, что расчет процентной ставки зашит в схеме начисления, единственным корректным способом определения процентных ставок по договору вклада является процедура Calc_CommRate_1DayEx, описанная в dpspr_perc.i и входящая в библиотеку интерфейсов pp-dpspr.p, осуществляющая определение процентных ставок по вкладу методом начисление их за 1 день c (iDate - 1) по iDate.

{intrface.get dps}
{intrface.get dpspr}

{getdate.i}

DEF VAR vAcct      AS CHAR     NO-UNDO.   /* Счет вклада                 */
DEF VAR vAcctRole  AS CHAR     NO-UNDO.   /* Роль счета вклада           */
DEF VAR vKodOst    AS CHAR     NO-UNDO.   /* Код аналитического остатка */
DEF VAR vKau       AS CHAR     NO-UNDO.   /* КАУ                         */
DEF VAR mTmpRowID  AS ROWID    NO-UNDO.   /* ROWID комиссий */
DEF VAR vDate AS DATE NO-UNDO.

DEF VAR oBaseRate  AS DECIMAL  NO-UNDO.   /* Основная процентная ставка  */
DEF VAR oPaniRate  AS DECIMAL  NO-UNDO.   /* Штрафная процентная ставка  */
   
FIND FIRST loan WHERE ...
                NO-LOCK NO-ERROR.

IF AVAIL loan THEN

DO:
   RUN GetBaseAcct IN h_dps (loan.contract,
                             loan.cont-code,
                             end-date,
                             OUTPUT vAcct).  

   RUN GetBaseAcctRole IN h_dps (RECID(loan), end-date, OUTPUT vAcctRole).       

   RUN GetBaseKodOst   IN h_dps (vAcctRole, OUTPUT vKodOst).
                          
   vKau = loan.contract + "," + loan.cont-code + "," + vKodOst.  

vDate = IF end-date EQ b-loan.open-date THEN end-date + 1
ELSE end-date,


   RUN Calc_CommRate_1DayEx IN h_dpspr (ROWID(loan),
                                        ENTRY(1,vAcct),
                                        ENTRY(2,vAcct),
                                        vKau,
vDate,
                                        YES,
                                        OUTPUT mTmpRowID,
                                        OUTPUT oBaseRate).


   RUN Calc_CommRate_1DayEx IN h_dpspr (ROWID(loan),
                                        ENTRY(1,vAcct),
                                        ENTRY(2,vAcct),
                                        vKau,
                                      vDate,
                                        NO,

                                        OUTPUT mTmpRowID,
                                        OUTPUT oPaniRate).
END.
{intrface.del}

Метод определения штрафной процентной ставки по вкладу аналогичен методу определения основной процентной ставки, посредством процедуры Calc_CommRate_1DayEx. При этом, в качестве 6-го входного параметра ей необходимо передать логическое значение NO.

Бонусная ставка определяется:

DEF INPUT  PARAM dpsRid     AS RECID   NO-UNDO.
DEF INPUT  PARAM iDate      AS DATE    NO-UNDO.
DEF OUTPUT PARAM oBonusRate AS DECIMAL NO-UNDO.

DEF VAR vBonus       AS  INT64  NO-UNDO.
DEF VAR vCommiBonus  AS  CHAR   NO-UNDO.
DEF VAR vAcct        AS  CHAR   NO-UNDO.
    
FOR FIRST loan WHERE RECID(loan) = dpsRid
NO-LOCK:

   RUN GetBaseAcct IN h_dps (loan.contract,
                             loan.cont-code,
                             iDate,
                             OUTPUT vAcct).  

   FIND FIRST acct WHERE acct.acct     EQ ENTRY(1,vAcct)
                     AND acct.currency EQ ENTRY(2,vAcct)
                   NO-LOCK NO-ERROR.  

   FIND LAST loan-cond WHERE loan-cond.contract  EQ loan.contract
                         AND loan-cond.cont-code EQ loan.cont-code
                         AND loan-cond.since     LE iDate
                       NO-LOCK NO-ERROR.

   IF AVAIL loan-cond THEN
   DO:          
     vBonus = INT64(GetXattrValueEx('loan-cond',
                                    loan-cond.contract  + "," +
                                    loan-cond.cont-code + "," +
                                    STRING(YEAR (loan-cond.since),"9999") +
                                    STRING(MONTH(loan-cond.since),"99"  ) +
                                   STRING(DAY  (loan-cond.since),"99"  ),
                                    "Бонус", "0")) NO-ERROR.      

      IF ERROR-STATUS:ERROR OR vBonus = ? THEN
        vBonus = 0.
   END.

   IF vBonus GT 0 THEN
   DO:
      vCommiBonus = fGetSetting("ВкладнойБонус", ?, "").
      IF vCommiBonus NE "" THEN
      DO:
         { findcom1.i
            &dir=last
            &rsum=0
            &comm-rate=b-comm-rate
            &rcom=vCommiBonus
            &since1=" le iDate "
         }
        
         IF AVAILABLE b-comm-rate THEN

            oBonusRate = vBonus * b-comm-rate.rate-comm.
         END.
      END.
   END.
END.


МИНИМАЛЬНАЯ СУММА ПЕРВОНАЧАЛЬНОГО ВЗНОСА 


Минимальная сумма первоначального взноса определяется начальным значением реквизита МинСПВ на классе вклада в метасхеме.


ПОПОЛНЕНИЕ ВКЛАДА


Для включения механизма контроля за довложениями необходимо в реквизите ВыпДоИт транзакции довложения указать процедуру Lim_dln().

Возможность пополнения вклада определяется наличием ссылки на запись в классификатора lim_dln в начальном значении реквизита ДовлКонтр класса вклада в метасхеме и датой, до которой возможно пополнение вклада. Если начальное значение реквизита не определено или если последним днем возможного пополнения является дата открытия вклада, то вклад - не пополняем.


ДАТА ДО КОТОРОЙ ВОЗМОЖНО ПОПОЛНЕНИЯ ВКЛАДА


Ограничение срока, в течении которого возможно пополнение вклада, описывается в классификаторе (в первую очередь по lim_dln, затем по классификатору lim_doloan), в котором для связки с классом вклада указывается значение КЛАСС ВКЛАДА не являющееся на самом деле классом вклада, а равное указанному значению реквизита ДовлКонтр, значение которого, определяется процедурой указанной в методе GetParam класса вклада, а в случае отсутствия таковой или возвращаемого неизвестного значения, поиск продолжается в реквизите транзакций открытия или пролонгации вклада.

Для определения даты до которой возможно пополнение вклада по классификатору lim_dln, используется процедура end_doloan_dps описанная в get_date.i и входящая в состав библиотеки интерфейсов pp-dpspc.

RUN end_doloan_dps(iRec,         
                   iDate,        
                   OUTPUT oDate,
                   OUTPUT oMess)
  • iRec  - RECID договора вклада, тип RECID;
  • iDate - да на которую определяется значение, тип DATE;
  • oDate - дата последнего дня довнесений, тип DATE;
  • oMess - Сообщение об ошибке, тип CHAR.           

Если процедура не найдет ссылку на классификатор lim_dln в реквизите ДовлКонтр то возвращается неизвестное значение - ?.


МИНИМАЛЬНАЯ СУММА ДОВЛОЖЕНИЙ


По вкладу может быть определена минимальная сумма для пополнения. Первоначально, данная сумма определяется по стандартному справочнику (indicate) МинСумма поиск в котором осуществляется по значению кода указанного в реквизите КлассМинСумма и остатку на  вкладе. Поиск значения реквизита КлассМинСумма осуществляется процедурой указанной в методе GetParam класса вклада. Если такой метод не указан или вернул неизвестное значение, то поиск значения КлассМинСумма продолжается в транзакций открытия или пролонгации вклада.

Если определить значение минимальной суммы пополнения по классификатору не удается (КлассМинСумма = ?), то оно определяется значение реквизита МинСумма определяемого процедурой указанной в методе GetParam класса вклада. В случае если определить значение МинСумма процедурой метода GetParam не удалось, поиск значение осуществляется в транзакциях открытия или пролонгации вклада.

Для определения минимальной суммы довложений используется процедура Get_Min_Summ описанная в описанная в get_date.i и входящая в состав библиотеки интерфейсов pp-dpspc.

RUN Get_Min_Summ IN h_dpspc(iRID,
                            iBegDate,
                            iEndDate,
                            OUTPUT oSumm).
  • iRID - RECID договора вклада, тип RECID;
  • iBegDate - Дата начала периода, тип DATE;
  • iEndDate - Дата конца периода, тип DATE;
  • oSumm - Минимальная сумма довложений ТИП DECIMAL.

Если процедуре не удалось определить минимальную сумму довложений, то возвращается неизвестное значение - ?.


МИНИМАЛЬНЫЙ НЕСНИЖАЕМЫЙ ОСТАТОК


Минимальный неснижаемый остаток определяется значением  доп. реквизита МинОст договора вклада. Если данный реквизит на договоре вклада не указан, то он определяется процедурой указанной в методе GetParam класса вклада. В случае если определить значение МинОст процедурой метода GetParam не удалось, поиск продолжается в транзакциях открытия или пролонгации вклада.

Для определения минимального неснижаемого остатка используется процедура get_last_min_ost описанная в get_date.i и входящая в библиотеку pp-dpspc.p

RUN get_last_min_ost IN h_dpspc (iRid,
                                 iBeg-date,
                                 iEnd-date,
                                 OUTPUT  oIn-inter).

где:

  • iRid - RECID записи договора вклада, тип RECID;    
  • iBeg-date - Дата начала периода, тип DATE;
  • iEnd-date - Дата окончания периода, тип DATE;
  • oIn-inter - Минимальный неснижаемый остаток, тип CHAR.

Если процедуре не удалось определить минимальный неснижаемый остаток, то возвращается неизвестное значение - ?.


МАКСИМАЛЬНАЯ СУММА ВКЛАДА                            


 

 
ЧАСТИЧНОЕ ИЗЪЯТИЕ СО ВКЛАДА


Возможность частичного изъятия со вклада определяется начальным значением реквизита "ЗапретИзъят" на классе договора вклада в метасхеме.

RUN get_last_param IN h_dpspc (dpsRid,
                              b-loan.open-date,
                              iDate,
                               "ЗапретИзъят",
                               OUTPUT vCanOut).                         


ПРОЛОНГАЦИЯ ВКЛАДА 


Определение возможности пролонгации вклада осуществляется с помощью процедуры Chk_Limit_Per, описанной в get_date.i, которая основывается на кол-ве максимально возможных пролонгации и количестве уже совершенных пролонгации вклада, а так же на наличие открытого наследства по вкладу.

RUN Chk_Limit_Per IN h_dpspc (iCurrDate,
                              iRID,
                              iProlCnt,
                              OUTPUT fl-ok).
  • iCurrDate - текущая дата, тип DATE;
  • iRID - запись договора, тип RECID;
  • iProlCnt - кол-во пролонгаций, тип INT64;
  • fl-ok - логическое значение, возможности пролонгации, тип LOGICAL.


МАКСИМАЛЬНОЕ ЧИСЛО ПРОЛОНГАЦИЙ


Максимально возможное число пролонгаций вклада определяется на основе классификатора lim_prol. Для определения максимального числа пролонгаций используется процедура get_limitprol_from_code входящая в состав библиотеки pp-dpspc.

RUN get_limitprol_from_code IN h_dpspc (iRec,
                                        iDate,
                                        OUTPUT oNumProl).
  • iRec - запись договора вклада, тип RECID;
  • iDate - расчетная дата, тип DATE;
  • oNumProl - максимальное число пролонгаций, тип INT64.


3-Е ЛИЦО НА КОТОРОЕ ОТКРЫТ ВКЛАД


Для определения физ. лица, являющегося 3-им лицом, в пользу которого открыт вклада, используется процедура Get3Person, входящая в состав библиотеки pp-dps.p

{intrface.get dps}

DEF VAR oPersonID   AS INT64 NO-UNDO. /* ID 3-го лица  */
DEF VAR oPersonName AS CHAR  NO-UNDO. /* ФИО 3-го лица */

RUN Get3Person IN h_dps (RECID(loan),
                         OUTPUT oPersonID,
                         OUTPUT oPersonName).
{intrface.del dps}
Вы здесь: Главная ИБС Бисквит ЧАСТНЫЕ ВКЛАДЫ ИНФОРМАЦИЯ ПО ВКЛАДАМ ФИЗ.ЛИЦ