<?
class esmo_rules
{
 // назначаем критерии МО для сотрудника
   function get_mo_rules_to_personal(&$rec,$options=array())
   { // проверяем все правила, ставим отдельные балл за каждое НЕ соответствие и каждое соотвествие
     // суммируем баллыы
     //$options['debug']=1 ;
     //print_2x_arr(_IL('IL_dg')->recs) ;
     $result=0 ;   $rules_ball=array() ; $rec_dg=array() ;   $rec['_rules']=array() ;
     ob_start() ;  $options['debug']=1 ;

     // если не передана опция ни что МО на терминале ни что МО на РМВ - считаем что МО проводиться на терминале
     if (!$options['terminal_id'] and !$options['rmv_mo']) $options['terminal_id']=1 ;

     //if ($rec['working'])  $rec['_workins_personal']['working']=$rec['working'] ; //_IL('IL_works')->recs[$rec['working']]['obj_name'] ;
     //if ($rec['working2']) $rec['_workins_personal']['working2']=$rec['working2'] ; // _IL('IL_works')->recs[$rec['working2']]['obj_name'] ;
     //if ($options['debug']) echo 'Группы сотрудника: '.print_r($rec['_groups_personal'],true).'<br>' ;
     //if ($options['debug']) echo 'Должности сотрудника: '.print_r($rec['_workins_personal'],true).'<br>' ;
     //$groups_personal=$rec['_groups_personal'] ;
     //if (!_sizeof($groups_personal)) $groups_personal=array(0=>'Без группы') ;
     //$workings_personal=$rec['_workins_personal'] ;
     //if (!_sizeof($workings_personal)) $workings_personal=array(0=>'Без должности') ;

     // зачем тут сделала проверка по каждой должности отдельно? мы проверяем ФЛ а не СО
     //foreach($workings_personal as $fname=>$work_id)
     { //$work_name=_IL('IL_works')->recs[$rec[$fname]]['obj_name'] ;
       /*?><h3>Проверяем сотрудника по должности <?echo $work_name.' ['.$work_id.']'?></h3><?*/
       if (_sizeof(_IL('IL_dg')->recs)) foreach(_IL('IL_dg')->recs as $rec_rule) if ($rec_rule['enabled'])
     { $ball_m=0 ; $ball_p=0 ; $comment=array()  ; $ignore_rule=0 ;
         if ($options['debug']) echo 'Проверяем правило <strong>'._IL('IL_dg')->recs[$rec_rule['id']]['obj_name'].'</strong> ['.$rec_rule['id'].']<br>'  ;
       if (!$rec_rule['enabled']) { $ignore_rule=1 ; $comment[]='- Правило заблокировано';}

       // для правил с указаниме метода даем сразу 10 баллов за совпадение, так как это ключевое условие
       if ($rec_rule['method'])
           { if ($rec_rule['method']==1/* and !$options['terminal_id']*/)
         {   if ($options['terminal_id']) { $ball_p+=10 ;    $comment[]='+ Правило для терминала'; }
                 else                         { $ignore_rule=1 ; $comment[]='- Правило для терминала, терминал ID не передан';  }
         }
         if ($rec_rule['method']==2)
         {   if ($options['rmv_mo'])      { $ball_p+=10 ;    $comment[]='+ Правило для РМВ'; }
             else                         { $ignore_rule=1 ; $comment[]='- Правило для РМВ, флаг РМВ не передан';  }
         }

       }
       // передан ID групп, для которых сделано это правило
       if ($rec_rule['esmo_groups'])
       { $arr_group_ids=explode(',',$rec_rule['esmo_groups']) ;
         // получаем все дочерние группы указанных групп
         $chids_group_ids=array() ;
         if (_sizeof($arr_group_ids)) foreach($arr_group_ids as $esmo_group_id) $chids_group_ids[]=ACCOUNTS()->tree[$esmo_group_id]->get_list_child() ;
         $str_group_ids=implode(',',$chids_group_ids) ;
         $arr_chids_group_ids=array_flip(explode(',',$str_group_ids)) ;
         echo 'Группы правила: <strong>'.$str_group_ids.'</strong><br>' ;
         echo 'Группа МО: <strong>'.$options['esmo_group'].'</strong><br>' ;
         // если переданная группа не входит в список групп правила - делаем запрет правила
         if (!isset($arr_chids_group_ids[$options['esmo_group']])) { $ignore_rule=1 ; $comment[]='- Правило только для групп '.$str_group_ids;}
         else                                                        { $ball_p+=10 ;    $comment[]='+ Правило для группы терминала МО'; }
       }

         if ($rec_rule['group_id'])
         {
           $rec_group=_IL('IL_groups')->recs[$rec_rule['group_id']] ;
               //echo 'Для правила задана группа: <strong>'.$rec_group['obj_name'].', id: '.$rec_rule['group_id'].'</strong><br>' ;

               // проверяем, входит ли сотрудник в группу
               // 1. Самый быстрый способ - проверить через публичную информацию в записи сотрудника
               $res=(isset($rec['_groups_personal'][$rec_rule['group_id']]))? 1:0 ;
               // 2. Простой и медленный спсок - через запрос в базу на вьювер по этой группе
               //$res=execSQL_value('select pkey from view_personals_group_'.$rec_rule['group_id'].' where pkey='.$rec['pkey'],2) ;

               if ($res)      { $ball_p=$ball_p+2 ;  $comment[]='+ Сотрудник в группе "'.$rec_group['obj_name'].'"'; }
               else           { $ball_m=$ball_m+2 ;  $comment[]='- Сотрудник не в группе "'.$rec_group['obj_name'].'"' ; }
         }

         //if (!$rec_rule['age_min']) $rec_rule['age_min']=0 ;
         //if (!$rec_rule['age_max']) $rec_rule['age_max']=1000 ;
         //if (!$rec['age'] and $rec['dr']) $rec['age']=ENGINE()->get_age_by_dr($rec['dr']) ;

         if ($rec_rule['age_min'] and !$rec_rule['age_max'] and $rec['age']<$rec_rule['age_min'])  { $ball_m++ ;  $comment[]='- Возраст от '.$rec_rule['age_min'] ; }
         if ($rec_rule['age_min'] and !$rec_rule['age_max'] and $rec['age']>=$rec_rule['age_min'])  { $ball_p++ ;  $comment[]='+ Возраст от '.$rec_rule['age_min'] ; }
         if (!$rec_rule['age_min'] and $rec_rule['age_max'] and $rec['age']>$rec_rule['age_max'])  { $ball_m++ ;  $comment[]='- Возраст до '.$rec_rule['age_max'] ; }
         if (!$rec_rule['age_min'] and $rec_rule['age_max'] and $rec['age']<=$rec_rule['age_max'])  { $ball_p++ ;  $comment[]='+Возраст до '.$rec_rule['age_max'] ; }
         if ($rec_rule['age_min'] and $rec_rule['age_max'] and ($rec['age']<$rec_rule['age_min'] or $rec['age']>$rec_rule['age_max']))  { $ball_m++ ;  $comment[]='- Возраст от '.$rec_rule['age_min'].' до '.$rec_rule['age_max'] ; }
         if ($rec_rule['age_min'] and $rec_rule['age_max'] and ($rec['age']>=$rec_rule['age_min'] and $rec['age']<=$rec_rule['age_max']))  { $ball_p++ ;  $comment[]='+ Возраст от '.$rec_rule['age_min'].' до '.$rec_rule['age_max'] ; }
         //if (!$rec_rule['age_min'] and !$rec_rule['age_max'])  { $ball_m++ ;  $comment[]='Любой возраст' ;  }
         //if (!$rec_rule['working'])  { $ball_m++ ;  $comment[]='Любая должность' ;  }
         //if ($rec_rule['working'] and $rec['working']!=$rec_rule['working']) { $ball_m++ ;  $comment[]='- Должность ' ; }
         //if ($rec['working']==$rec_rule['working']) { $ball_p++ ;  $comment[]='+ Должность ' ; }
         //if ($rec_rule['time_from'] and !$rec_rule['time_to'] and $rec_rule['time_from']>time())     { $ball_m++ ;  $comment[]='- Время от ' ; }
         //if ($rec_rule['time_from'] and !$rec_rule['time_to'] and $rec_rule['time_from']<=time())     { $ball_p++ ;  $comment[]='+ Время от ' ; }
         //if (!$rec_rule['time_from'] and $rec_rule['time_to']>0 and time()>$rec_rule['time_to'])       { $ball_m++ ;  $comment[]='- Время до '.date('d.m.Y H:i:s',$rec_rule['time_to']) ; damp_array($rec_rule,1,-1) ; }
         //if (!$rec_rule['time_from'] and $rec_rule['time_to']>0 and time()<=$rec_rule['time_to'])       { $ball_p++ ;  $comment[]='+ Время до '.date('d.m.Y H:i:s',$rec_rule['time_to']) ; damp_array($rec_rule,1,-1) ; }
         //if ($rec_rule['time_from'] and $rec_rule['time_to'] and ($rec_rule['time_from']>time() or time()>$rec_rule['time_to'])) { $ball_m++ ; $comment[]= '- Интервал времени' ; }
         //if ($rec_rule['time_from'] and $rec_rule['time_to'] and ($rec_rule['time_from']<=time() and time()<=$rec_rule['time_to'])) { $ball_p++ ; $comment[]= '+ Интервал времени' ; }
         if (!$ball_p and !$ball_m)  $ball_p=1 ;
         if (!$ignore_rule)
             { $rules_ball[$rec_rule['id']]=$ball_p-$ball_m ;
               $rules_ball_info[$rec_rule['obj_name'].'['.$rec_rule['id'].']']=$ball_p-$ball_m ;

             }
         if ($options['debug']) damp_array($comment,1,-1) ;
       }
       // теперь из выбранных записей необходимо оставить ту, что наиболле полно описывает сотрудника
       // будем ставить балл за каждое соотвествие
       if ($options['debug']) { echo '<strong>Начисленные баллы</strong>'  ; damp_array($rules_ball,1,-1) ; damp_array($rules_ball_info,1,-1) ;  }

       $max_ball=-100 ; $rule_id=0 ;
       if (_sizeof($rules_ball)) foreach($rules_ball as $id=>$ball_p) if ($ball_p>$max_ball) { $rule_id=$id ; $max_ball=$ball_p ; }

       // вписываем в запись по первсона критерии на основании которых были назначены проверки
       // используется только при ручной провеке, можно убирать отсюда
       $rec['_rules_main']['LS_check_sd']=$GLOBALS['LS_check_sd'] ;
       $rec['_rules_main']['LS_check_p']=$GLOBALS['LS_check_p'] ;
       $rec['_rules_main']['LS_check_t']=$GLOBALS['LS_check_t'] ;
       $rec['_rules_main']['LS_check_a']=$GLOBALS['LS_check_a'] ;
       $rec['_rules_main']['LS_check_n']=$GLOBALS['LS_check_n'] ;
     $rec['_rules_main']['LS_check_v']=$GLOBALS['LS_check_v'] ;

     $rec['_rules_krit']=$rec_dg ;
       //ob_start() ;
       //echo 'IL_dg:' ; damp_array(_IL('IL_dg')->recs[$rule_id],1,-1) ;

       // коррекуция выбранного правила локальным модулем
       ENGINE()->on_event_by_pointer('get_mo_rules_to_personal',$rec,$options,$rule_id) ;


       if ($options['debug']) { echo '<strong>Выбранное правило:</strong> '._IL('IL_dg')->recs[$rule_id]['obj_name'].' ['.$rule_id.']<br>' ; /* $demo[]=_IL('IL_dg')->recs[$rule_id] ; print_2x_arr($demo) ; ; */}
       if ($rule_id)
       {  $rec['__check']['rule']=$rule_id ;
          $rec_dg=_IL('IL_dg')->recs[$rule_id]  ; // запись из базы по правилам для дисп.группы
             $dg_sessing=array() ;
        if ($rec_dg['settings'])  $dg_sessing=unserialize($rec_dg['settings']) ;
          //ob_start() ;
       //echo '$rec_dg:'  ; damp_array($dg_sessing,1,-1) ;


          //damp_array($rec_dg,1,-1) ;
          //damp_array($rec_dg2,1,-1) ;
          //$text=ob_get_clean() ;
          //LOGS()->reg_log('compare_rules',$text) ;
          unset($rec_dg['clss'],$rec_dg['enabled'],$rec_dg['indx'],$rec_dg['parent'],$rec_dg['c_data'],$rec_dg['r_data'],$rec_dg['temp'],$rec_dg['arr_name'],$rec_dg['_enabled'],$rec_dg['url_name'],$rec_dg['hidden'],$rec_dg['code'],$rec_dg['template_name'],$rec_dg['_reffer'],$rec_dg['_parent_reffer']) ;
          unset($rec_dg['tonometer'],$rec_dg['thermometer'],$rec_dg['alcotester'],$rec_dg['pupilometer'],$rec_dg['video']) ;
          $rec['_rules_krit']=$rec_dg ;

          $rec['_rules']['id']=$rule_id ; // этот параметр больше не нужен, пока тут для совместимости
              $rec['_rules']['name']=($rec['_rules']['name'])? $rec['_rules']['name'].' (осн.) + '.$rec_dg['obj_name'].' (совм.)':$rec_dg['obj_name'] ;
          if ($rec_dg['s']) { if (!$rec['_rules']['s_min'] or ($rec['_rules']['s_min'] and $rec['_rules']['s_min']<(int)$rec_dg['s_min'])) $rec['_rules']['s_min']=(int)$rec_dg['s_min'] ;
                              if (!$rec['_rules']['s_max'] or ($rec['_rules']['s_max'] and $rec['_rules']['s_max']>(int)$rec_dg['s_max'])) $rec['_rules']['s_max']=(int)$rec_dg['s_max'] ;
                              $rec['_rules']['s']=1 ;
                            }
          if ($rec_dg['d']) { if (!$rec['_rules']['d_min'] or ($rec['_rules']['d_min'] and $rec['_rules']['d_min']<(int)$rec_dg['d_min'])) $rec['_rules']['d_min']=(int)$rec_dg['d_min'] ;
                              if (!$rec['_rules']['d_max'] or ($rec['_rules']['d_max'] and $rec['_rules']['d_max']>(int)$rec_dg['d_max'])) $rec['_rules']['d_max']=(int)$rec_dg['d_max'] ;
                              $rec['_rules']['d']=1 ;
                            }
          if ($rec_dg['p']) { if (!$rec['_rules']['p_min'] or ($rec['_rules']['p_min'] and $rec['_rules']['p_min']<(int)$rec_dg['p_min'])) $rec['_rules']['p_min']=(int)$rec_dg['p_min'] ;
                              if (!$rec['_rules']['p_max'] or ($rec['_rules']['p_max'] and $rec['_rules']['p_max']>(int)$rec_dg['p_max'])) $rec['_rules']['p_max']=(int)$rec_dg['p_max'] ;
                              $rec['_rules']['p']=1 ;
                            }
          if ($rec_dg['t']) { if (!$rec['_rules']['t_min'] or ($rec['_rules']['t_min'] and $rec['_rules']['t_min']<(float)$rec_dg['t_min'])) $rec['_rules']['t_min']=(float)$rec_dg['t_min'] ;
                              if (!$rec['_rules']['t_max'] or ($rec['_rules']['t_max'] and $rec['_rules']['t_max']>(float)$rec_dg['t_max'])) $rec['_rules']['t_max']=(float)$rec_dg['t_max'] ;
                              $rec['_rules']['t']=1 ;
                            }
          if ($rec_dg['a'])   $rec['_rules']['a']=1 ;
          if ($rec_dg['n'])   $rec['_rules']['n']=1 ;
        if ($rec_dg['v'])   {$rec['_rules']['v']=1 ;$rec['_rules']['v_settings']=$dg_sessing['v'] ; }

         // коррекция выбранного правила в соответствии с группой по болезни
         if ($options['debug']) { echo '<strong>Коррекция показателей правила в соответствии с группой по болезни:</strong><br>' ; }
         if (_sizeof($rec['_groups_medic']))
         { foreach($rec['_groups_medic'] as $group_medic_id=>$group_medic_name)
           { if ($options['debug']) { echo $group_medic_name.'<br>' ; }
             $rec_rule_medic=_IL('IL_group_medic')->recs[$group_medic_id] ;
             if ($rec_rule_medic['s'] and $rec_rule_medic['s_min'] and $rec['_rules']['s']) { $rec['_rules']['s_min']=$rec_rule_medic['s_min'] ;  if ($options['debug']) echo 's_min => '.$rec_rule_medic['s_min'].'<br>' ;}
             if ($rec_rule_medic['s'] and $rec_rule_medic['s_max'] and $rec['_rules']['s']) { $rec['_rules']['s_max']=$rec_rule_medic['s_max'] ;  if ($options['debug']) echo 's_max => '.$rec_rule_medic['s_max'].'<br>' ;}
             if ($rec_rule_medic['d'] and $rec_rule_medic['d_min'] and $rec['_rules']['d']) { $rec['_rules']['d_min']=$rec_rule_medic['d_min'] ;  if ($options['debug']) echo 'd_min => '.$rec_rule_medic['d_min'].'<br>' ;}
             if ($rec_rule_medic['d'] and $rec_rule_medic['d_max'] and $rec['_rules']['d']) { $rec['_rules']['d_max']=$rec_rule_medic['d_max'] ;  if ($options['debug']) echo 'd_max => '.$rec_rule_medic['d_max'].'<br>' ;}
             if ($rec_rule_medic['p'] and $rec_rule_medic['p_min'] and $rec['_rules']['p']) { $rec['_rules']['p_min']=$rec_rule_medic['p_min'] ;  if ($options['debug']) echo 'p_min => '.$rec_rule_medic['p_min'].'<br>' ;}
             if ($rec_rule_medic['p'] and $rec_rule_medic['p_max'] and $rec['_rules']['p']) { $rec['_rules']['p_max']=$rec_rule_medic['p_max'] ;  if ($options['debug']) echo 'p_max => '.$rec_rule_medic['p_max'].'<br>' ;}
           }
         } else if ($options['debug']) echo 'не заданы<br>' ;

       }
       else
       {  $rec['__check']['rule']=0 ;
          $rec['__check_comment'][]='Не удалось определить критерии для оценки сотрудника' ;
          $rec['__reason']='nonRule' ;
          $rec['__go_doctor']=1 ;
          $rec['_rules']=array() ;
       }
       //echo 'rules:'  ; damp_array($rec['_rules'],1,-1) ;

       //$text=ob_get_clean() ;
       //LOGS()->reg_log('damp_IL_dg',$text) ;

       // очищаем от нулей нулевые значеня
       if (!$rec['s_min']) $rec['s_min']='' ;
       if (!$rec['s_max']) $rec['s_max']='' ;
       if (!$rec['d_min']) $rec['d_min']='' ;
       if (!$rec['d_max']) $rec['d_max']='' ;
       if (!$rec['p_min']) $rec['p_min']='' ;
       if (!$rec['p_max']) $rec['p_max']='' ;
       if (!$rec['t_min'])  $rec['t_min']='' ;
       if (!$rec['t_max'])  $rec['t_max']='' ;

       // вписываем в правила назначение сотруднику критерии
     if (!isset($options['only_value_for_group'])) {
         if ($rec['s_min'])         { $rec['_rules']['s_min']=$rec['s_min'] ; $rec['_rules']['s']=1 ; echo '<strong class="red">Измерение s_min согласно собственным критериям</strong>'; }
         if ($rec['s_max'])         { $rec['_rules']['s_max']=$rec['s_max'] ; $rec['_rules']['s']=1 ; echo '<strong class="red">Измерение s_max согласно собственным критериям</strong>'; }
         if ($rec['d_min'])         { $rec['_rules']['d_min']=$rec['d_min'] ; $rec['_rules']['d']=1 ; echo '<strong class="red">Измерение d_min согласно собственным критериям</strong>'; }
         if ($rec['d_max'])         { $rec['_rules']['d_max']=$rec['d_max'] ; $rec['_rules']['d']=1 ; echo '<strong class="red">Измерение d_max согласно собственным критериям</strong>'; }
         if ($rec['p_min'])         { $rec['_rules']['p_min']=$rec['p_min'] ; $rec['_rules']['p']=1 ; echo '<strong class="red">Измерение p_min согласно собственным критериям</strong>'; }
         if ($rec['p_max'])         { $rec['_rules']['p_max']=$rec['p_max'] ; $rec['_rules']['p']=1 ; echo '<strong class="red">Измерение p_max согласно собственным критериям</strong>'; }
         if ($rec['t_min']>0)         { $rec['_rules']['t_min']=$rec['t_min'] ; $rec['_rules']['t']=1 ; echo '<strong class="red">Измерение t_min согласно собственным критериям</strong>'; }
         if ($rec['t_max']>0)         { $rec['_rules']['t_max']=$rec['t_max'] ; $rec['_rules']['t']=1 ; echo '<strong class="red">Измерение t_max согласно собственным критериям</strong>'; }
         if ($rec['a']==1)          { $rec['_rules']['a']=0 ; echo '<strong class="red">Не измерять алкоголь согласно собственным критериям</strong>'; }
         if ($rec['a']==2)          { $rec['_rules']['a']=1 ; echo '<strong class="red">Измерять алкоголь согласно собственным критериям</strong>'; }
         if ($rec['n']==1)          { $rec['_rules']['n']=0 ; echo '<strong class="red">Не измерять ЦНС согласно собственным критериям</strong>'; }
         if ($rec['n']==2)          { $rec['_rules']['n']=1 ; echo '<strong class="red">Измерять ЦНС согласно собственным критериям</strong>'; }
     }

       // удялем измерения, которые не проводяться в системе
       if (!$GLOBALS['LS_check_sd']) unset($rec['_rules']['s'],$rec['_rules']['s_min'],$rec['_rules']['s_max'],$rec['_rules']['d'],$rec['_rules']['d_min'],$rec['_rules']['d_max']) ;
       if (!$GLOBALS['LS_check_p'])  unset($rec['_rules']['p'],$rec['_rules']['p_min'],$rec['_rules']['p_max']) ;
       if (!$GLOBALS['LS_check_t'])  unset($rec['_rules']['t'],$rec['_rules']['t_min'],$rec['_rules']['t_max']) ;
       if (!$GLOBALS['LS_check_a'])  unset($rec['_rules']['a']) ;
       if (!$GLOBALS['LS_check_n'])  unset($rec['_rules']['n']) ;
     if (!$GLOBALS['LS_check_v'])  unset($rec['_rules']['v']) ;

       }
     $text=ob_get_clean()  ;  //  echo $text ;
//       $rec['_rules']['debug']=$text ;
     LOG_JSON('mo_session')->reg('get_mo_rules_to_personal',$text) ;
     if ($options['echo_debug']) echo $text ;

     $rec['_dopusk_time_H']=$GLOBALS['LS_setting_auto_mo_allow_interval'] ; // срок действия меддопуска в часах
     $rec['_dopusk_time_S']=(float)$GLOBALS['LS_setting_auto_mo_allow_interval']*60*60 ; // срок действия меддопуска в секундах
     //$rec['_nedopusk_time_H']=$GLOBALS['LS_setting_auto_mo_denited_interval'] ; // срок действия меддопуска в часах
     $rec['_nedopusk_time_S']=(float)$GLOBALS['LS_setting_auto_mo_denited_interval']*60*60 ; // срок действия меддопуска в секундах
     $rec['_nedopusk_time_S_alco']=(float)$GLOBALS['LS_setting_auto_mo_denited_alco_interval']*60*60 ; // срок действия меддопуска по алкоголю в секундах

     // необходимо чтобы функция не вписывала результат в сотрудника а возвращала отдельный массив
     $info=array('_rules'=>$rec['_rules'],
                 //'_workins_personal'=>$rec['_workins_personal'],
                 '_rules_main'=>$rec['_rules_main'],
                 '_rules_krit'=>$rec['_rules_krit'],
                 '_dopusk_time_H'=>$rec['_dopusk_time_H'],
                 '_dopusk_time_S'=>$rec['_dopusk_time_S'],
                 '_nedopusk_time_S'=>$rec['_nedopusk_time_S'],
                 '_nedopusk_time_S_alco'=>$rec['_nedopusk_time_S_alco'],
             ) ;
     return($info) ;
   }

//==========================================================================================================================================================================
   // ПРАВИЛО ПРИНЯТИЯ РЕШЕНИЯ НА ДОПУСК В СМЕНУ
   //==========================================================================================================================================================================

   // условия МО зависят от:
   // - возраста
   // - должности
   // доработано - принимает не $rec_personal, а только $rules
   // связано с тем, что ['_rules'] будет удалено из  $rec_personal и будет жить как отдельный массив
   function get_mo_result_to_personal($rules,$data,$options=array())
   { $_comment=array() ; $res_log=array() ;  $mo_result=array() ;
     ob_start() ;
       if ($options['tk']==1 and !$GLOBALS['LS_mo_apply_esmo_rules_aftershift_ME']) {?><div class="alert">Внимание! Послесменный МО, часть параметров не оценивается!</div><?}

     if ($rules['s'] and isset($data['s']) and ($options['tk']!=1 or $GLOBALS['LS_mo_apply_esmo_rules_aftershift_ME']))  // не оцениваем давление и пульс для послесменного МО
     { $res='ok' ;  $mo_result['res_s']=1 ;
       if ($data['s']<=0) { $res='Не указано значение cистолического давления' ; $mo_result['res_s']=4 ; }
       elseif ($data['s']>$rules['s_max']) { $res='Повышенное cистолическое давление' ; $mo_result['res_s']=2 ; }
       elseif ($data['s']<$rules['s_min']) { $res='Пониженное cистолическое давление' ; $mo_result['res_s']=3 ; }
       if ($res!='ok') $_comment[]=$res ;
       $res_log[]='cистолическое давление: '.$data['s'].' ['.$rules['s_min'].'...'.$rules['s_max'].'] =>'.$res ;
     }
     if (!$rules['s'] and isset($data['s']) and $data['s']>0 ) $res_log[]='cистолическое давление: '.$data['s'].' => не заданы критерии оценки' ;

     if ($rules['d'] and isset($data['d']) and ($options['tk']!=1 or $GLOBALS['LS_mo_apply_esmo_rules_aftershift_ME']))  // не оцениваем давление и пульс для послесменного МО
     { $res='ok' ;  $mo_result['res_d']=1 ;
	   if ($data['d']<=0) { $res='Не указано значение диастолического давления' ; $mo_result['res_d']=4 ; }
       elseif ($data['d']>$rules['d_max']) { $res='Повышенное диастолическое давление' ; $mo_result['res_d']=2 ; }
       elseif ($data['d']<$rules['d_min']) { $res='Пониженное диастолическое давление' ; $mo_result['res_d']=3 ; }
       if ($res!='ok') $_comment[]=$res ;
       $res_log[]='диастолическое давление: '.$data['d'].' ['.$rules['d_min'].'...'.$rules['d_max'].'] =>'.$res ;
     }
     if (!$rules['d'] and isset($data['d']) and $data['d']>0 ) $res_log[]='диастолическое давление: '.$data['d'].' => не заданы критерии оценки' ;

     if ($rules['p'] and isset($data['p']) and ($options['tk']!=1 or $GLOBALS['LS_mo_apply_esmo_rules_aftershift_ME']))  // не оцениваем давление и пульс для послесменного МО
     { $res='ok' ;  $mo_result['res_p']=1 ;
	   if ($data['p']<=0) { $res='Не указано значение пульса' ; $mo_result['res_p']=4 ; }
       elseif ($data['p']>$rules['p_max']) { $res='Учащенный пульс' ; $mo_result['res_p']=2 ; }
       elseif ($data['p']<$rules['p_min']) { $res='Медленный пульс' ; $mo_result['res_p']=3;  }
       if ($res!='ok') $_comment[]=$res ;
       $res_log[]='пульс: '.$data['p'].' ['.$rules['p_min'].'...'.$rules['p_max'].'] =>'.$res ;
     }
     if (!$rules['p'] and isset($data['p']) and $data['p']>0 ) $res_log[]='пульс: '.$data['p'].' => не заданы критерии оценки' ;

     if ($rules['t'] and isset($data['t']))
     { $res='ok' ;  $mo_result['res_t']=1 ;
	   if ($data['t']<=0) { $res='Не указано значение температуры' ; $mo_result['res_t']=4 ; }
       elseif ($data['t']>$rules['t_max']) { $res='Повышенная температура' ; $mo_result['res_t']=2 ; }
       elseif ($data['t']<$rules['t_min']) { $res='Пониженная температура' ; $mo_result['res_t']=3 ; }
       if ($res!='ok') $_comment[]=$res ;
       $res_log[]='температура: '.$data['t'].' ['.$rules['t_min'].'...'.$rules['t_max'].'] =>'.$res ;
     }
     if (!$rules['t'] and isset($data['t']) and $data['t']>0 ) $res_log[]='температура: '.$data['t'].' => не заданы критерии оценки' ;

     if ($rules['a'] and isset($data['a']))
     { if ($data['a']>0)
       { $res='Превышен уровень алкоголя' ;
         $_comment[]=$res ;
         $res_log[]='алкоголь: '.$data['a'].'=>'.$res ;
         $mo_result['res_a']=2 ;
       } else $mo_result['res_a']=1 ;
     }
     //if (!$rules['a'] and isset($data['a']) and $data['a']>0) $res_log[]='алкоголь: '.$data['a'].' => не заданы критерии оценки' ;

     if (isset($data['q']))
     { if ($data['q']>0)
       { $_comment[]='отрицательный ответ на вопрос о состоянии здоровья' ;
         $res_log[]='Жалобы на здоровье: => Есть' ;
       }
     }

     if (isset($data['simptoms']))
     { if ($data['simptoms']>0)
       { $_comment[]='Признаки заболевания и пониженной работоспособности' ;
         $res_log[]='Признаки заболевания и пониженной работоспособности: => Есть' ;
       }
     }

     // для ПП уже сформирован результат оценки
     // 1 - норм
     // 2 - не удалось измерить
     // 3 - ПП не пройден
     // в $data['n'] передается результат ПП после обработки данных ПП - 1,2,3
     // $data['n_text'] передается расшифровка результа (недостаточный процент распознования и т.д.)
     if ($GLOBALS['LS_pp_use_pp_rules'] and $rules['n'] and isset($data['n']))
      { if ($data['n']>1)
        { $_comment[]=$data['n_text'] ;
          $res_log[]='Пупилометр: '.$data['n_text'] ;

        } //else $mo_result['res_n']=1 ;
        $mo_result['res_n']=$data['n'] ;
     }

     if ($rules['v'] and isset($data['v']['time']))
     {  list($ball,$res_v)=ESMO()->get_check_schulte_result($rules['v_settings'],$data['v']['time'],$data['v']['errors']) ;
        if ($res_v>1)
        { $res='Не пройден тест на внимание' ;
          $_comment[]=$res ;
          $res_log[]='тест на внимание: время '.$data['v']['time'].', ошибок '.$data['v']['errors'] ;
          $mo_result['res_v']=2 ;
        } else $mo_result['res_v']=1 ;
       $mo_result['v_ball']=$ball ;
     }

     //damp_array($rules,1,-1) ;
     //damp_array($data,1,-1) ;
     //if ($data_mo['v_time'])
     //        {   list($ball,$res_v)=ESMO()->get_check_schulte_result($rec_member['_rules']['v'],$data_mo['v_time'],$data_mo['v_errors']) ;
     //            $data_mo['v_ball']=$ball ;
     //            $data_mo['res_v']=$res_v ;
     //
      //       }




     $result=(!_sizeof($_comment))? 1:0;
     $text_comment=implode('<br>',$_comment) ;
     $res_log[]='<strong>ИТОГ:</strong>'.$text_comment ;
     // фиксируем все в журнале
     echo implode('<br>',$res_log)  ;
     ?><h3>Результаты осмотра</h3><?
     damp_array($data,1,-1) ;
     ?><h3>Правила</h3><?
     damp_array($rules,1,-1) ;
     $text=ob_get_clean() ;
     LOG_JSON('mo_session')->reg('Оценка результатов по критериям',$text) ;

     $mo_result['status']=($result)? 2:3 ;
     $mo_result['comment']=$text_comment ;
     return($mo_result) ;
   }


}

?>
