Текущее время: Чт, июл 24 2025, 12:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Амбулаторные и стационарные детские больничные
СообщениеДобавлено: Чт, ноя 27 2014, 16:25 
Ассистент
Ассистент

Зарегистрирован:
Вт, июн 11 2013, 10:11
Сообщения: 31
Уважаемые коллеги. Хотелось бы узнать, какие подходы вы использовали для реализации следующего требования: есть стационарный больничный по уходу за ребенком до 7 лет (12 дней) и амбулаторное продолжение 15 дней. ФСС разъясняет, что в этом случае из 50% следует оплачивать только последние 5 дней амбулаторного больничного, то есть по факту на стыке стационарного и амбулаторного больничного нужно делать сброс подсчета дней. Стандарт предлагает сквозную нумерацию дней по ссылке KENN1 в RUSI0. В таком случае все 15 дней оплатятся из 50%. Остается делить амбулаторный больничный на два отсутствия сугубо вручную. И ввести разные ссылки KENN1 мы также не можем, так как HRUL4FSS учитывает именно KENN1 при подсчете страховых случаев,а это именно один случай. У кого есть опыт решения этой проблемы, хотелось бы обойтись наименьшим сломо стандартной логики.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Амбулаторные и стационарные детские больничные
СообщениеДобавлено: Пт, ноя 28 2014, 08:41 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Пт, сен 07 2007, 07:53
Сообщения: 1398
Делал подломом стандартной функции RUSI0. За определение даты начала больничного отвечает процедура get_absence_date
Code:
*       get start date of illness
        PERFORM get_absence_date USING <l_wa_ab>
                              CHANGING l_sibegda
                                       lt_2001.

в l_sibegda должна вернутся дата, от которой будет производится подсчет дней и определение %.

Ну и ниже приведу свой код подлома (в одно сообщение почему-то не встало). Подлом выполнен в виде ENHANCEMENT на выходе из get_absence_date, поэтому стандартный код страдает не так сильно :)
Код повторяет последние строчки процедуры get_absence_date с более глубокой обработкой. Вид отсутствия 0209 "Уход за реб./стационар", остальные перечисленные виды - коды больничных по уходу за ребенком.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Амбулаторные и стационарные детские больничные
СообщениеДобавлено: Пт, ноя 28 2014, 08:43 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Пт, сен 07 2007, 07:53
Сообщения: 1398
Code:
ENHANCEMENT 2  ZHR_PY_RUSI0_GET_ABSENCE_DATE.    "active version
* Определение начала больничного с реакций на тип отсутствия

* Больничный по уходу за ребенком стационар (0209) и амбулаторно (0202) не должны перемешиваться
* отчет дней должен вестись отдельно для каждого вида отсутствия, хотя
* это и связанное событие
* Настройка сделана удалением несмешиваемых отсутствий из таблицы pt_2001, где подготовлены
* связанные отсутствия
  data lt_sick_child like range of ps_ab-AWART.
  data ls_sick_child like line of lt_sick_child.

  ls_sick_child-sign   = 'I'.
  ls_sick_child-option = 'EQ'.
  ls_sick_child-low    = '0202'.
  APPEND ls_sick_child TO lt_sick_child.
  ls_sick_child-low    = '0203'.
  APPEND ls_sick_child TO lt_sick_child.
  ls_sick_child-low    = '0214'.
  APPEND ls_sick_child TO lt_sick_child.

  check ps_ab-AWART in lt_sick_child or ps_ab-AWART ='0209'.
  p_begda = ps_ab-obegd.
  LOOP AT pt_2001 ASSIGNING <l_wa_p2001>.
    if ( ps_ab-AWART in lt_sick_child and <l_wa_p2001>-subty = '0209' ) or
       ( ps_ab-AWART = '0209' and <l_wa_p2001>-subty in lt_sick_child ).
      delete pt_2001.
    else.
      IF <l_wa_p2001>-begda LT p_begda.
        p_begda = <l_wa_p2001>-begda.
      ENDIF.
    endif.
  ENDLOOP.
ENDENHANCEMENT.

В таком виде работает 2,5 года. Проблем не было.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Амбулаторные и стационарные детские больничные
СообщениеДобавлено: Пт, ноя 28 2014, 10:11 
Ассистент
Ассистент

Зарегистрирован:
Вт, июн 11 2013, 10:11
Сообщения: 31
RoustR написал(а):
Делал подломом стандартной функции RUSI0. За определение даты начала больничного отвечает процедура get_absence_date.

В принципе я думаю, по-другому это и не реализовать, но есть один интересный момент: l_sibegda влияет еще и на выбор самой социальной группы как дата, от которой считается страховой стаж и теоретически возможна ситуация, когда социальная группа для продолжения будет уже другой:
Code:
*       Get social group for illness
        PERFORM get_socgr USING    l_sibegda
                                   lv_sckn
                                   <l_wa_ab>-obegd
                          CHANGING l_socgr
                                   l_modsg
                                   l_duration
                                   l_socgr_default.

Возможно, есть смысл аналогичный enhancement добавить в FORM init_current_cal_day, тогда это повлияет только на подсчет дней. Я поробую, потестирую и отпишусь.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Амбулаторные и стационарные детские больничные
СообщениеДобавлено: Пт, дек 05 2014, 11:00 
Ассистент
Ассистент

Зарегистрирован:
Вт, июн 11 2013, 10:11
Сообщения: 31
В итоге бизнес сформулировал правило подсчета дней для детских больничных так: 10 дней считается только в рамках амбулаторных больничных. А ограничение на 15 дней для больничного > 7 лет - по всем (как амбулаторным, так и стационарным). В итоге стандартная логика с этим даже с учетом подлома, фильтрующего содержимое pt_2001, несовместима. Пришлось ломать еще фундаментальнее: в 2 местах.

1) Подсчет разницы - с учетом стационара и без учета. В конце FORM init_current_cal_day:

Code:
ENHANCEMENT 2  Z_RUSI0_INIT_CAL_DAY.    "active version
* подсчитать дни, приходящиеся только на этот больничный
  perform zzcalc_altern_current_day   using    ps_ab
                                    pt_2001
                                    p_method
                                    p_datum
                                    p_current_cal_day.
ENDENHANCEMENT.


Сама реализация (zhrpyhosp01 - настроечная таблица для детских больничных):

Code:
data: zzgv_current_cal_day type i. " разница между днем с учетом другого типа отсутствий и без него

form zzcalc_altern_current_day   using    ps_ab structure pc20i
                                    pt_2001 type p2001_tab
                                    p_method
                                    p_datum
                                    p_current_cal_day.

  statics: st_zhrpyhosp01 type sorted table of zhrpyhosp01 with unique key awart endda.

  data: l_num_cdays  type i,
        lv_hospt.

  field-symbols: <l_wa_p2001> type p2001,
                 <fs_zhrpyhosp01> type zhrpyhosp01.

  clear: zzgv_current_cal_day. " по умолчанию разницы просто нет

  " убрать все отсутствия, не относящиеся к этому типу
  if st_zhrpyhosp01 is initial.
    select * from zhrpyhosp01 into table st_zhrpyhosp01.
  endif.

  check st_zhrpyhosp01 is not initial.
  loop at st_zhrpyhosp01 assigning <fs_zhrpyhosp01> where awart = ps_ab-awart and
                                                    endda >= p_datum and
                                                    begda <= p_datum.
    lv_hospt = <fs_zhrpyhosp01>-hospt.
  endloop.
  check sy-subrc = 0. " отсутствие входит в список детских амбулаторных/стационарных

*Evaluate Calendar Days

  if lines( pt_2001 ) ne 0.
    loop at pt_2001 assigning <l_wa_p2001>.
      if lv_hospt = 'X'. " для стационара - только стационар
        loop at st_zhrpyhosp01 assigning <fs_zhrpyhosp01> where awart = <l_wa_p2001>-awart and
                                                      endda >= p_datum and
                                                      begda <= p_datum and
                                                      hospt = 'X'. " только стационар
          l_num_cdays = <l_wa_p2001>-endda - <l_wa_p2001>-begda + 1.
          add l_num_cdays to zzgv_current_cal_day.
          exit.
        endloop.
      else.
        " в остальных случаях все кроме стационара
        loop at st_zhrpyhosp01 assigning <fs_zhrpyhosp01> where awart = <l_wa_p2001>-awart and
                                                      endda >= p_datum and
                                                      begda <= p_datum and
                                                      hospt = 'X'.
          exit.
        endloop.
        if sy-subrc <> 0. " не стационар
          l_num_cdays = <l_wa_p2001>-endda - <l_wa_p2001>-begda + 1.
          add l_num_cdays to zzgv_current_cal_day.
        endif.
      endif.
    endloop.
  endif.

  " разница между полным подсчетом и только амбулаторные отсутствия/стационар
  zzgv_current_cal_day = p_current_cal_day - zzgv_current_cal_day.

endform.


2) Применение самой разницы при определении процента. В конце FORM re7rut5:

Code:
ENHANCEMENT 3  Z_RUSI0_RE7RUT5_DIFF_DAYS.    "active version
* Если есть разница за счет амбулаторных/стационарных больничных
  data: lv_current_cal_day type i.
  if zzgv_current_cal_day is not initial and ps_abw-prl > 0. " есть разница и оплата не прекращена
    lv_current_cal_day = p_current_cal_day - zzgv_current_cal_day.
    refresh lt_i7rut5.
    select * from t7rut5 into table lt_i7rut5
                             where land eq calc_land
                               and varky eq p_socgr
                               and moabw eq t001p-moabw
                               and modsg eq p_modsg
                               and dna   le lv_current_cal_day
                               and abt   eq ps_ab-awart
                               and begda le ps_ab-obegd
                               and endda ge ps_ab-obegd.
    sort lt_i7rut5 by dna descending.
    read table lt_i7rut5 assigning <l_wa_7rut5> index 1.
    if sy-subrc = 0.
      move-corresponding <l_wa_7rut5> to ps_abw. " изменить процент оплаты для амбулаторных/стационарных больничных
    endif.
  endif.
ENDENHANCEMENT.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB