Advertisement
Guest User

finder_get_service_type_id_dispensary_test

a guest
Oct 26th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION "typing"."finder_get_service_type_id_dispensary_test"("patient_id" int4, "org_id" int4, "goal_id" int4)
  2.   RETURNS SETOF "pg_catalog"."int4" AS $BODY$
  3. declare
  4. _age int;
  5. begin
  6.  
  7.  
  8.  
  9. _age =  (SELECT case when date_part('year',age(birth_dt)) <4 or  date_part('year',age(birth_dt))=17 then public.get_age (birth_dt, current_date )
  10. else date_part('year',current_date) - date_part('year',birth_dt) end
  11. from pim_individual where id =$1);
  12.     /*(SELECT case when date_part('year',age(birth_dt)) <4 then date_part('year',age(birth_dt)) else date_part('year',current_date) - date_part('year',birth_dt) end
  13.  from pim_individual where id =$1)*/
  14.  
  15. if not exists(select 1  FROM md_standard s
  16.         LEFT JOIN md_standard_patient_age sa ON sa.standard_id = s.id
  17. WHERE s.clinic_id = $2
  18. and case when  $3 in( 18, 19, 20) then  lower(s.name) like 'предварительный осмотр несовершеннолетних%'
  19. when  $3 in(21, 22, 23) then lower(s.name) like 'периодические осмотры несовершеннолетних%' or  lower(s.name) like 'периодический осмотр несовершеннолетних%'
  20. when $3 in (17) then lower(s.name) like 'профилактический медицинский осмотр%' or  lower(s.name) like 'профилактический осмотр несовершеннолетних%'
  21. when $3 = 13  then lower(s.name) like 'диспансеризация%2%этап%' or lower(s.name) like 'диспансеризация%II%этап%'
  22. when $3 in (4) then lower(s.name) like 'диспансеризация%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%')
  23. when $3 in (15) then lower(s.name) like 'диспансеризация%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%') and lower(s.name) not like '%приемные%' and lower(s.name) not like '%под надзором%'
  24. when $3 in (16) then lower(s.name) like 'диспансеризация%приемные%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%') and lower(s.name) not like '%под надзором%'
  25. when $3 in (26) then lower(s.name) like 'диспансеризация%под надзором%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%')
  26. When $3 = 14 then  lower(s.name) like 'профилактический медицинский осмотр (взрослые)%'
  27.     end
  28.  
  29. AND (CASE WHEN s.gender_restriction_id IS NULL
  30.                 THEN 0
  31.                 ELSE COALESCE((SELECT gender_id from pim_individual where id =$1),0)
  32.                 END = COALESCE (s.gender_restriction_id,0))
  33.  
  34.  
  35. and _age BETWEEN  COALESCE(sa.from_age,0) AND COALESCE(sa.to_age, 999)
  36. ) and exists
  37. (SELECT 1 FROM pci_benefit b JOIN pci_benefit_type bt ON b.benefit_type_id = bt.id JOIN PCI_BENEFIT_DEFINITION bd
  38.  
  39. on bd.id = b.benefit_def_id WHERE bt.id in ( 1,5) AND bd.id IN (1,2,3,14,51,8) AND
  40.                                                                                        b.patient_id = $1)
  41. then _age=
  42. (select sa.from_age
  43. from
  44.   md_standard s
  45.         LEFT JOIN md_standard_patient_age sa ON sa.standard_id = s.id
  46.  
  47. where
  48.  case when  $3 in( 18, 19, 20) then  lower(s.name) like 'предварительный осмотр несовершеннолетних%'
  49. when  $3 in(21, 22, 23) then lower(s.name) like 'периодические осмотры несовершеннолетних%' or  lower(s.name) like 'периодический осмотр несовершеннолетних%'
  50. when $3 in (17) then lower(s.name) like 'профилактический медицинский осмотр%' or  lower(s.name) like 'профилактический осмотр несовершеннолетних%'
  51. when $3 = 13  then lower(s.name) like 'диспансеризация%2%этап%' or lower(s.name) like 'диспансеризация%II%этап%'
  52. when $3 in (4) then lower(s.name) like 'диспансеризация%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%')
  53. when $3 in (15) then lower(s.name) like 'диспансеризация%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%') and lower(s.name) not like '%приемные%' and lower(s.name) not like '%под надзором%'
  54. when $3 in (16) then lower(s.name) like 'диспансеризация%приемные%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%') and lower(s.name) not like '%под надзором%'
  55. when $3 in (26) then lower(s.name) like 'диспансеризация%под надзором%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%')
  56. When $3 = 14 then  lower(s.name) like 'профилактический медицинский осмотр (взрослые)%'
  57.     end
  58.  
  59. group by sa.from_age
  60. order by min(@(sa.from_age - _age ))
  61. limit 1);
  62.  
  63.  
  64.  
  65.  
  66.  
  67. end if;
  68.  
  69. return query(
  70.  
  71. SELECT p.service_type_id
  72.         FROM md_standard s
  73.         LEFT JOIN md_standard_patient_age sa ON sa.standard_id = s.id
  74.         LEFT JOIN md_standard_prescription sp ON sp.standard_id = s.id
  75.         LEFT JOIN md_prescription p ON p.id = sp.id
  76.         WHERE s.clinic_id = $2
  77.         AND (CASE WHEN s.gender_restriction_id IS NULL
  78.                 THEN 0
  79.                 ELSE COALESCE((SELECT gender_id from pim_individual where id =$1),0)
  80.                 END = COALESCE (s.gender_restriction_id,0)
  81.         AND
  82.     _age
  83.  
  84.  BETWEEN  COALESCE(sa.from_age,0) AND COALESCE(sa.to_age, 999)
  85.  
  86.  
  87. and case when  $3 in( 18, 19, 20) then  lower(s.name) like 'предварительный осмотр несовершеннолетних%'
  88. when  $3 in(21, 22, 23) then lower(s.name) like 'периодические осмотры несовершеннолетних%' or  lower(s.name) like 'периодический осмотр несовершеннолетних%'
  89. when $3 in (17) then lower(s.name) like 'профилактический медицинский осмотр%' or  lower(s.name) like 'профилактический осмотр несовершеннолетних%'
  90. when $3 = 13  then lower(s.name) like 'диспансеризация%2%этап%' or lower(s.name) like 'диспансеризация%II%этап%'
  91. when $3 in (4) then lower(s.name) like 'диспансеризация%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%')
  92. when $3 in (15) then lower(s.name) like 'диспансеризация%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%') and lower(s.name) not like '%приемные%' and lower(s.name) not like '%под надзором%'
  93. when $3 in (16) then lower(s.name) like 'диспансеризация%приемные%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%') and lower(s.name) not like '%под надзором%'
  94. when $3 in (26) then lower(s.name) like 'диспансеризация%под надзором%' and lower(s.name) not like '%2 этап%' and lower(s.name) not like lower('%II%')
  95. When $3 = 14 then  lower(s.name) like 'профилактический медицинский осмотр (взрослые)%'
  96.     end
  97.  
  98.  
  99.      ));
  100. --and case when (SELECT date_part('year',age(birth_dt)) from pim_individual where id =$1)>17 and ($3 = 14)   then s.name = 'Профилактический медицинский осмотр (взрослые)' end
  101.  
  102. END;
  103.  $BODY$
  104.   LANGUAGE 'plpgsql' IMMUTABLE STRICT  COST 100
  105.  ROWS 1000
  106. ;
  107.  
  108. ALTER FUNCTION "typing"."finder_get_service_type_id_dispensary_test"("patient_id" int4, "org_id" int4, "goal_id" int4) OWNER TO "app_group_master";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement