ALTER PROCEDURE "DBA"."pa_arvuta2015"(in a_lepnr integer,in li_t_aasta integer, li_t_akuu integer)
begin
  -- varasemad kuud
  declare ldc_maksuvaba1 numeric(15,2);
  -- varasem maksustatav summa
  declare ldc_tulu_summa2 numeric(15,2);
  declare ldc_tvtk_summa2 numeric(15,2);
  declare ldc_pens_summa2 numeric(15,2);
  declare ldc_tatk_summa2 numeric(15,2);
  -- kuu maksustatav summa
  declare ldc_tulu_summa3 numeric(15,2);
  declare ldc_tvtk_summa3 numeric(15,2);
  declare ldc_pens_summa3 numeric(15,2);
  declare ldc_tatk_summa3 numeric(15,2);
  -- kuu varasem maks
  declare ldc_maksuvaba2 numeric(15,2);
  declare ldc_vm_maksuvaba2 numeric(15,2);
  declare ldc_maksuvaba2_630 numeric(15,2);
  declare ldc_vm_maksuvaba2_630 numeric(15,2);
  declare ldc_tulu_maks2 numeric(15,2);
  declare ldc_tvtk_maks2 numeric(15,2);
  declare ldc_pens_maks2 numeric(15,2);
  declare ldc_tatk_maks2 numeric(15,2);
  -- kuu maksuvaba
  declare ldc_kuu_maksuvaba3 numeric(15,2);
  declare ldc_kuu_maksuvaba3_630 numeric(15,2);
  -- valjamakseliigi maksuvaba
  declare ldc_maksuvaba3 numeric(15,2);
  declare ldc_maksuvaba3_630 numeric(15,2);
  -- kuu maks
  declare ldc_tulu_maks3 numeric(15,2);
  declare ldc_tvtk_maks3 numeric(15,2);
  declare ldc_pens_maks3 numeric(15,2);
  declare ldc_tatk_maks3 numeric(15,2);
  -- jooksva rea maks
  declare ldc_tulu_maks4 numeric(15,2);
  declare ldc_tvtk_maks4 numeric(15,2);
  declare ldc_pens_maks4 numeric(15,2);
  declare ldc_tatk_maks4 numeric(15,2);
  -- maksu proportsioon
  declare ldc_tulu_prop numeric(15,6);
  declare ldc_tvtk_prop numeric(15,6);
  declare ldc_pens_prop numeric(15,6);
  declare ldc_tatk_prop numeric(15,6);
  -- viimane arvutatav rida
  declare li_last_tulu_tasunr integer;
  declare li_last_tulu_a_aasta integer;
  declare li_last_tulu_sisse smallint;
  declare li_last_tvtk_tasunr integer;
  declare li_last_tvtk_a_aasta integer;
  declare li_last_tvtk_sisse smallint;
  declare li_last_pens_tasunr integer;
  declare li_last_pens_a_aasta integer;
  declare li_last_pens_sisse smallint;
  declare li_last_tatk_tasunr integer;
  declare li_last_tatk_a_aasta integer;
  declare li_last_tatk_sisse smallint;
-- maarad
  declare ldc_tulu_vaba numeric(10,3);
  declare ldc_tulu_vaba_630 numeric(10,3);
  declare ldc_tulu_protsent numeric(10,3);
  declare ldc_tvtk_protsent numeric(10,3);
  declare ldc_pens_protsent numeric(10,3);
  declare ldc_tatk_protsent numeric(10,3);
  -- arvutatava kuu fetch
--  declare li_t_aasta integer;
--  declare li_t_akuu integer;
  declare li_m_aasta integer;
  declare li_m_akuu integer;
  -- perioodist soltuvad
  declare li_alg_akuu integer;
  declare ld_kuup1 date;
  declare ld_kuup2 date;
  declare ld_kuup1t date;
  declare ld_kuup2t date;
  declare li_mvaba_arv integer;
  declare li_mvabakuud smallint;
  declare ldc_mvaba numeric(10,3);
  declare li_tmm smallint;
  declare ls_tmt char(1);
  declare ls_tmt_kaader char(1);
  declare li_pens_kaader smallint;
  declare li_tk_kaader smallint;
  declare li_tk_kaader_orig smallint;
  -- arvutatava rea fetch
  declare li_tasunr integer;
  declare li_a_aasta integer;
  declare ldc_summa3 numeric(15,2);
  declare li_sisse smallint;
  declare li_tulu smallint;
  declare li_tvtk smallint;
  declare li_pens smallint;
  declare li_tatk smallint;
  declare li_asutnr integer;
  declare li_mres smallint;
  declare ls_vmkood char(3);
  declare err_notfound exception for sqlstate value '02000';
--  declare c_per insensitive cursor for
--    select distinct pa_tasu.t_aasta,pa_tasu.t_akuu
--      from pa_tasu
--      where pa_tasu.lepnr = a_lepnr and pa_tasu.palgaleht is null
--      order by pa_tasu.t_aasta asc,pa_tasu.t_akuu asc;
  -- Dekl 01 Maks NULL muuta saab ridu, mis sama leping, ei ole palgalehes, ei ole tagasiarvestus
  declare c_tasu insensitive cursor for
    select pa_tasu.tasunr,pa_tasu.a_aasta,pa_tasu.summa,pa_taslist.sisse,pa_taslist.tulu,if pa_taslist.tk=1 and li_tk_kaader=1 then 1 else 0 endif,if pa_taslist.pens=1 and li_pens_kaader>0 then 1 else 0 endif,pa_taslist.tatk
      from pa_tasu left outer join pa_taslist on pa_tasu.tas_s = pa_taslist.tas_s left outer join pa_taslist as pa_taslist_b on pa_tasu.vtas_s = pa_taslist_b.tas_s
      where pa_tasu.lepnr=a_lepnr and pa_tasu.palgaleht is null and pa_tasu.vtasunr is null and pa_tasu.t_aasta=li_t_aasta and pa_tasu.t_akuu=li_t_akuu and if pa_taslist.vmkood is null then pa_taslist_b.vmkood else pa_taslist.vmkood endif=ls_vmkood;
  declare c_vmkood insensitive cursor for
    select distinct pa_taslist.vmkood
      from pa_tasu left outer join pa_taslist on pa_tasu.tas_s=pa_taslist.tas_s
      where pa_tasu.lepnr=a_lepnr and pa_tasu.t_aasta=li_t_aasta and pa_tasu.t_akuu=li_t_akuu and pa_tasu.palgaleht is null and pa_taslist.vmkood is not null
      order by pa_taslist.vmkood asc;
  declare c_maksper insensitive cursor for
    select distinct pa_tasu_b.t_aasta,pa_tasu_b.t_akuu
      from pa_tasu left outer join pa_tasu as pa_tasu_b on pa_tasu.vtasunr=pa_tasu_b.tasunr and pa_tasu.va_aasta=pa_tasu_b.a_aasta
      where pa_tasu.lepnr=a_lepnr and pa_tasu.palgaleht is null and pa_tasu.vtasunr is not null and pa_tasu.t_aasta=li_t_aasta and pa_tasu.t_akuu=li_t_akuu;
  -- Dekl 01 Maks 12 muuta saab tagasiarvestuse ridu
  declare c_makstasu insensitive cursor for
    select pa_tasu.tasunr,pa_tasu.a_aasta,pa_tasu.summa,pa_taslist.sisse,pa_taslist.tulu,if pa_taslist.tk=1 and li_tk_kaader=1 then 1 else 0 endif,if pa_taslist.pens=1 and li_pens_kaader>0 then 1 else 0 endif,pa_taslist.tatk
      from pa_tasu left outer join pa_taslist on pa_tasu.tas_s=pa_taslist.tas_s left outer join pa_taslist as pa_taslist_b on pa_tasu.vtas_s = pa_taslist_b.tas_s left outer join pa_tasu as pa_tasu_b on pa_tasu.vtasunr=pa_tasu_b.tasunr and pa_tasu.va_aasta=pa_tasu_b.a_aasta
      where pa_tasu.lepnr=a_lepnr and pa_tasu.palgaleht is null and pa_tasu.vtasunr is not null and pa_tasu.t_aasta=li_t_aasta and pa_tasu.t_akuu=li_t_akuu and pa_tasu_b.t_aasta=li_m_aasta and pa_tasu_b.t_akuu=li_m_akuu and if pa_taslist.vmkood is null then pa_taslist_b.vmkood else pa_taslist.vmkood endif=ls_vmkood;
  declare c_maksvmkood insensitive cursor for
    select distinct pa_taslist.vmkood
      from pa_tasu left outer join pa_taslist on pa_tasu.tas_s=pa_taslist.tas_s left outer join pa_tasu as pa_tasu_b on pa_tasu.vtasunr=pa_tasu_b.tasunr and pa_tasu.va_aasta=pa_tasu_b.a_aasta
      where pa_tasu.lepnr=a_lepnr and pa_tasu.t_aasta=li_t_aasta and pa_tasu.t_akuu=li_t_akuu and pa_tasu.palgaleht is null and pa_taslist.vmkood is not null and pa_tasu_b.t_aasta=li_m_aasta and pa_tasu_b.t_akuu=li_m_akuu
     order by pa_taslist.vmkood asc;
  -- algandmed
  select pa_leping.kuup1,
         pa_leping.kuup2,
         if tmt is null or tmt = '3' then '2' else tmt endif,
         asutnr
    into ld_kuup1,ld_kuup2,ls_tmt,li_asutnr
    from pa_leping
    where pa_leping.lepnr = a_lepnr;
  select if pa_kaader.tmt is null then 'S' else pa_kaader.tmt endif,
         pa_kaader.tmm,
         if pa_kaader.mvaba is null then 0 else pa_kaader.mvaba endif,
         if pa_kaader.mvabakuud is null then 0 else pa_kaader.mvabakuud endif,
         if(pa_kaader.tk is null or pa_kaader.tk = 2) then 3 else pa_kaader.tk endif,
         if pa_kaader.mres is null then 0 else pa_kaader.mres endif
    into ls_tmt_kaader,li_tmm,ldc_mvaba,li_mvabakuud,li_tk_kaader_orig,li_mres
    from pa_kaader
    where pa_kaader.asutnr = li_asutnr;
--  open c_per;
--  per_loop: loop
--    fetch next c_per into li_t_aasta,li_t_akuu;
--    if sqlstate = err_notfound then
--      leave per_loop
--    end if;
    -- kui tulumaks soltub lepingust
    if ls_tmt_kaader = 'S' then
      set ld_kuup1t=ld_kuup1;
      set ld_kuup2t=ld_kuup2
    else
      set ls_tmt=ls_tmt_kaader;
      select Min(pa_leping.kuup1) into ld_kuup1t from pa_leping where pa_leping.asutnr = li_asutnr and(pa_leping.kuup2 is null or years(pa_leping.kuup2) >= li_t_aasta);
      if exists(select 1 from pa_leping where pa_leping.asutnr = li_asutnr and kuup2 is null) then
        set ld_kuup2t=null
      else
        select Max(pa_leping.kuup2) into ld_kuup2t from pa_leping where pa_leping.asutnr = li_asutnr
      end if
    end if;
    -- leia maarad
    set ldc_tulu_vaba=ldc_mvaba+get_maar(1,ymd(li_t_aasta,li_t_akuu,1));
    set ldc_tulu_vaba_630=get_maar(12,ymd(li_t_aasta,li_t_akuu,1));
    set ldc_tulu_protsent=get_maar(li_tmm,ymd(li_t_aasta,li_t_akuu,1));
    set ldc_tvtk_protsent=get_maar(3,ymd(li_t_aasta,li_t_akuu,1));
    set ldc_pens_protsent=get_maar(4,ymd(li_t_aasta,li_t_akuu,1));
    set ldc_tatk_protsent=get_maar(5,ymd(li_t_aasta,li_t_akuu,1));
    -- tootuskindlustus
    if li_tk_kaader_orig = 3 then
      set li_tk_kaader = get_tk_tunnus(li_asutnr,li_t_aasta,li_t_akuu)
    else
      set li_tk_kaader = li_tk_kaader_orig
    end if;
    -- pensionikindlustus
    set li_pens_kaader = get_pens_tunnus(li_asutnr,li_t_aasta,li_t_akuu);
    -- kustuta toolepingu varasemad arvutatavad summad, mis ei ole palgalehega kinnipeetud
    delete from pa_tasu from pa_tasu left outer join pa_taslist on pa_tasu.tas_s = pa_taslist.tas_s where pa_tasu.lepnr = a_lepnr and pa_tasu.t_akuu = li_t_akuu and pa_tasu.t_aasta = li_t_aasta and pa_tasu.palgaleht is null and (pa_taslist.algol = '8o' or pa_taslist.algol = '5a' or pa_taslist.algol = '5c' or pa_taslist.algol = '6a' or pa_taslist.algol = '8c' );
    -- Dekl 01 nullitakse pea ja alam arvutuste read
    update pa_tasu set maksuvaba = 0,tulumaks = 0,tvtkmaks = 0,pensmaks = 0,tatkmaks = 0,sotsmaks = 0 where pa_tasu.lepnr = a_lepnr and pa_tasu.t_akuu = li_t_akuu and pa_tasu.t_aasta = li_t_aasta and pa_tasu.palgaleht is null;
    update pa_tasu left outer join pa_leping on pa_tasu.lepnr = pa_leping.lepnr set sotsmaks = 0 where pa_leping.asutnr = li_asutnr and(pa_tasu.t_akuu = li_t_akuu and pa_tasu.t_aasta = li_t_aasta and pa_tasu.palgaleht is null);
    -- kinnipidamised enne tulumaksu
    call pa_kinnip('5a',a_lepnr,li_t_akuu,li_t_aasta);
    call pa_kinnip('5c',a_lepnr,li_t_akuu,li_t_aasta);
    call pa_kinnip('6a',a_lepnr,li_t_akuu,li_t_aasta);
    -- sotsiaalmaksu arvutamine
    call pa_arvuta2015_sots(a_lepnr,li_asutnr,li_t_akuu,li_t_aasta);
    -- alguse kuu ja maksu
    -- tooleping alguse kuu, muidu jaanuar
    if years(ld_kuup1t) = li_t_aasta then
      set li_alg_akuu=Month(ld_kuup1t);
    else
      set li_alg_akuu=1;
    end if;
    -- aasta varasem maksuvaba, kuu varasem maksuvaba (Dekl 01 voi Maks 01)
    select sum(if (pa_tasu.vtasunr is null and pa_tasu.t_akuu<li_t_akuu) or (pa_tasu.vtasunr is not null and pa_tasu_b.t_akuu<li_t_akuu) then ((-2)*pa_taslist.sisse+1)*pa_tasu.maksuvaba else 0 endif),
           sum(if (pa_tasu.vtasunr is null and pa_tasu.t_akuu=li_t_akuu) or (pa_tasu.vtasunr is not null and pa_tasu_b.t_akuu=li_t_akuu) then ((-2)*pa_taslist.sisse+1)*pa_tasu.maksuvaba else 0 endif),
           sum(if (pa_tasu.vtasunr is null and pa_tasu.t_akuu=li_t_akuu) or (pa_tasu.vtasunr is not null and pa_tasu_b.t_akuu=li_t_akuu) then ((-2)*pa_taslist.sisse+1)*pa_tasu.maksuvaba_630 else 0 endif)
      into ldc_maksuvaba1,ldc_maksuvaba2,ldc_maksuvaba2_630
      from pa_tasu left outer join pa_leping on pa_tasu.lepnr = pa_leping.lepnr left outer join pa_taslist on pa_tasu.tas_s = pa_taslist.tas_s left outer join pa_tasu as pa_tasu_b on pa_tasu.vtasunr=pa_tasu_b.tasunr and pa_tasu.va_aasta=pa_tasu_b.a_aasta
      where (pa_tasu.lepnr = a_lepnr or(not(ls_tmt_kaader = 'S') and pa_leping.asutnr = li_asutnr)) and ((pa_tasu.vtasunr is null and (pa_tasu.t_aasta = li_t_aasta and (pa_tasu.t_akuu between li_alg_akuu and li_t_akuu))) or (pa_tasu.vtasunr is not null and (pa_tasu_b.t_aasta=li_t_aasta and (pa_tasu_b.t_akuu between li_alg_akuu and li_t_akuu))));
    if ldc_maksuvaba1 is null or ls_tmt='0' or ls_tmt='2' or ls_tmt='4' or ls_tmt='5' then
      set ldc_maksuvaba1=0
    end if;
    if ldc_maksuvaba2 is null then
      set ldc_maksuvaba2=0
    end if;
    if ldc_maksuvaba2_630 is null then
      set ldc_maksuvaba2_630=0
    end if;
    -- kuu kasutamata maksuvaba
    if ls_tmt='1' then
      set li_mvaba_arv=li_t_akuu-li_alg_akuu+1+li_mvabakuud;
      if li_mvaba_arv<0 then
        set li_mvaba_arv=0
      end if;
    elseif ls_tmt='4' then
      set li_mvaba_arv=1
    else
      set li_mvaba_arv=0
    end if;
    set ldc_kuu_maksuvaba3=Round(li_mvaba_arv*ldc_tulu_vaba,2)-ldc_maksuvaba1-ldc_maksuvaba2;
    if ls_tmt='1' or ls_tmt='4' then
      set ldc_kuu_maksuvaba3_630=ldc_tulu_vaba_630-ldc_maksuvaba2_630
    else
      set ldc_kuu_maksuvaba3_630=0-ldc_maksuvaba2_630
    end if;
    -- valjamakseliikide loikes
    open c_vmkood;
    vmkood_loop: loop
      fetch next c_vmkood into ls_vmkood;
      if sqlstate = err_notfound then
        leave vmkood_loop
      end if;
      -- kuu varasem maks, varasem maksustatav summa ja kinnipidamata maksustatav summa
      -- Dekl 01 voi Maks 01
      select sum(((-2)*pa_taslist.sisse+1)*pa_tasu.tulumaks),
             sum(((-2)*pa_taslist.sisse+1)*pa_tasu.tvtkmaks),
             sum(((-2)*pa_taslist.sisse+1)*pa_tasu.pensmaks),
             sum(((-2)*pa_taslist.sisse+1)*pa_tasu.tatkmaks),
             sum(((-2)*pa_taslist.sisse+1)*pa_tasu.maksuvaba),
             sum(((-2)*pa_taslist.sisse+1)*pa_tasu.maksuvaba_630),
             -- kui on palgalehes voi teine leping voi tagasiarvestus
             sum(if pa_taslist.tulu=1 and (pa_tasu.palgaleht is not null or pa_tasu.lepnr<>a_lepnr or pa_tasu.vtasunr is not null) then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
             sum(if pa_taslist.tk=1 and li_tk_kaader=1 and (pa_tasu.palgaleht is not null or pa_tasu.lepnr<>a_lepnr or pa_tasu.vtasunr is not null) then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
             sum(if pa_taslist.pens=1 and li_pens_kaader>0 and (pa_tasu.palgaleht is not null or pa_tasu.lepnr<>a_lepnr or pa_tasu.vtasunr is not null) then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
             sum(if pa_taslist.tatk=1 and (pa_tasu.palgaleht is not null or pa_tasu.lepnr<>a_lepnr or pa_tasu.vtasunr is not null) then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
             -- kui ei ole palgalehes ja sama leping ja ei ole tagasiarvestus
             sum(if pa_taslist.tulu=1 and pa_tasu.palgaleht is null and pa_tasu.lepnr=a_lepnr and pa_tasu.vtasunr is null then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
             sum(if pa_taslist.tk=1 and li_tk_kaader=1 and pa_tasu.palgaleht is null and pa_tasu.lepnr=a_lepnr and pa_tasu.vtasunr is null then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
             sum(if pa_taslist.pens=1 and li_pens_kaader>0 and pa_tasu.palgaleht is null and pa_tasu.lepnr=a_lepnr and pa_tasu.vtasunr is null then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
             sum(if pa_taslist.tatk=1 and pa_tasu.palgaleht is null and pa_tasu.lepnr=a_lepnr and pa_tasu.vtasunr is null then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif)
        into ldc_tulu_maks2,ldc_tvtk_maks2,ldc_pens_maks2,ldc_tatk_maks2,ldc_vm_maksuvaba2,ldc_vm_maksuvaba2_630,ldc_tulu_summa2,ldc_tvtk_summa2,ldc_pens_summa2,ldc_tatk_summa2,ldc_tulu_summa3,ldc_tvtk_summa3,ldc_pens_summa3,ldc_tatk_summa3
        from pa_tasu left outer join pa_leping on pa_tasu.lepnr = pa_leping.lepnr left outer join pa_taslist as pa_taslist on pa_tasu.tas_s = pa_taslist.tas_s left outer join pa_taslist as pa_taslist_b on pa_tasu.vtas_s = pa_taslist_b.tas_s left outer join pa_tasu as pa_tasu_b on pa_tasu.vtasunr=pa_tasu_b.tasunr and pa_tasu.va_aasta=pa_tasu_b.a_aasta
        where (pa_tasu.lepnr = a_lepnr or(not(ls_tmt_kaader = 'S') and pa_leping.asutnr = li_asutnr)) and if pa_taslist.vmkood is null then pa_taslist_b.vmkood else pa_taslist.vmkood endif=ls_vmkood and ((pa_tasu.vtasunr is null and (pa_tasu.t_aasta=li_t_aasta and pa_tasu.t_akuu=li_t_akuu)) or (pa_tasu.vtasunr is not null and (pa_tasu_b.t_aasta=li_t_aasta and pa_tasu_b.t_akuu=li_t_akuu)));
      if ldc_tulu_maks2 is null then
        set ldc_tulu_maks2=0
      end if;
      if ldc_tvtk_maks2 is null then
        set ldc_tvtk_maks2=0
      end if;
      if ldc_pens_maks2 is null then
        set ldc_pens_maks2=0
      end if;
      if ldc_tatk_maks2 is null then
        set ldc_tatk_maks2=0
      end if;
      if ldc_vm_maksuvaba2 is null then
        set ldc_vm_maksuvaba2=0
      end if;
      if ldc_vm_maksuvaba2_630 is null then
        set ldc_vm_maksuvaba2_630=0
      end if;
      if ldc_tulu_summa2 is null then
        set ldc_tulu_summa2=0
      end if;
      if ldc_tvtk_summa2 is null then
        set ldc_tvtk_summa2=0
      end if;
      if ldc_pens_summa2 is null then
        set ldc_pens_summa2=0
       end if;
      if ldc_tatk_summa2 is null then
        set ldc_tatk_summa2=0
      end if;
      if ldc_tulu_summa3 is null then
        set ldc_tulu_summa3=0
      end if;
      if ldc_tvtk_summa3 is null then
        set ldc_tvtk_summa3=0
      end if;
      if ldc_pens_summa3 is null then
        set ldc_pens_summa3=0
      end if;
      if ldc_tatk_summa3 is null then
        set ldc_tatk_summa3=0
      end if;
--message 'siit algab '+ls_vmkood;
--message 'maksuvaba1';
--message ldc_maksuvaba1;
--message 'maksuvaba2';
--message ldc_maksuvaba2;
--message 'vm_maksuvaba2';
--message ldc_vm_maksuvaba2;
--message 'kuu_maksuvaba3';
--message ldc_kuu_maksuvaba3;
--message 'tulu_maks2';
--message ldc_tulu_maks2;
--message 'pens_maks2';
--message ldc_pens_maks2;
--message 'tulu_summa2';
--message ldc_tulu_summa2;
--message 'pens_summa2';
--message ldc_pens_summa2;
--message 'tulu_summa3';
--message ldc_tulu_summa3;
      -- tooandja tootuskindlustus
      set ldc_tatk_maks3=Round((ldc_tatk_summa2+ldc_tatk_summa3)*ldc_tatk_protsent/100,2)-ldc_tatk_maks2;
      -- prop
      if ldc_tatk_summa3 = 0 then
        set ldc_tatk_prop=0
      else
        set ldc_tatk_prop=ldc_tatk_maks3/ldc_tatk_summa3
      end if;
      -- toovotja tootuskindlustus
      set ldc_tvtk_maks3=Round((ldc_tvtk_summa2+ldc_tvtk_summa3)*ldc_tvtk_protsent/100,2)-ldc_tvtk_maks2;
      -- prop
      if ldc_tvtk_summa3 = 0 then
        set ldc_tvtk_prop=0
      else
        set ldc_tvtk_prop=ldc_tvtk_maks3/ldc_tvtk_summa3
      end if;
      -- kogumispension
      if li_t_aasta>2013 and li_t_aasta<2018 and li_pens_kaader=1 then
        set ldc_pens_protsent=3
      end if;
      set ldc_pens_maks3=Round((ldc_pens_summa2+ldc_pens_summa3)*ldc_pens_protsent/100,2)-ldc_pens_maks2;
      -- prop
      if ldc_pens_summa3 = 0 then
        set ldc_pens_prop=0
      else
        set ldc_pens_prop=ldc_pens_maks3/ldc_pens_summa3
      end if;
      -- tulumaks
      if ls_tmt='0' then
        set ldc_tulu_maks3=0-ldc_tulu_maks2;
      else
        -- kuu kasutamata maksuvaba
        set ldc_maksuvaba3=ldc_kuu_maksuvaba3;
        if ls_vmkood='32' then
          set ldc_maksuvaba3_630=ldc_kuu_maksuvaba3_630;
        else
          set ldc_maksuvaba3_630=0;
        end if;
        -- kuu kokku maksuvaba ei saa olla negatiivne (ehk jabur tingimus)
        if ldc_maksuvaba2+ldc_maksuvaba3<0 then
          set ldc_maksuvaba3=-1*ldc_maksuvaba2
        end if;
        if ldc_maksuvaba2_630+ldc_maksuvaba3_630<0 then
          set ldc_maksuvaba3_630=-1*ldc_maksuvaba2_630
        end if;
        -- kuu maksustatav summa ldc_tulu_summa2
        if li_mres = 1 then
          set ldc_tulu_summa2=ldc_tulu_summa2+ldc_tulu_summa3-ldc_tvtk_maks2-ldc_tvtk_maks3
        else
          set ldc_tulu_summa2=ldc_tulu_summa2+ldc_tulu_summa3-ldc_tvtk_maks2-ldc_tvtk_maks3-ldc_pens_maks2-ldc_pens_maks3
        end if;
-- maksustatav summa kuus kokku ei saa olla negatiivne. muudatus 13.09.2016
        if ldc_tulu_summa2<0 then
          set ldc_tulu_summa2=0
        end if;
        -- kuu maksuvaba ei saa olla suurem, kui kuu maksustatav summa
        if ldc_vm_maksuvaba2+ldc_vm_maksuvaba2_630+ldc_maksuvaba3+ldc_maksuvaba3_630>ldc_tulu_summa2 then
          if ldc_tulu_summa2<0 then
            set ldc_maksuvaba3=-1*ldc_vm_maksuvaba2;
            set ldc_maksuvaba3_630=-1*ldc_vm_maksuvaba2_630
          else
            if ldc_vm_maksuvaba2_630+ldc_maksuvaba3_630>ldc_tulu_summa2 then
              set ldc_maksuvaba3_630=ldc_tulu_summa2-ldc_vm_maksuvaba2_630;
              set ldc_maksuvaba3=0
            else
              set ldc_maksuvaba3=ldc_tulu_summa2-ldc_vm_maksuvaba2-ldc_vm_maksuvaba2_630-ldc_maksuvaba3_630
            end if;
          end if
        end if;
        set ldc_tulu_maks3=Round((ldc_tulu_summa2-(ldc_vm_maksuvaba2+ldc_vm_maksuvaba2_630+ldc_maksuvaba3+ldc_maksuvaba3_630))*ldc_tulu_protsent/100,2)-(ldc_tulu_maks2);
      end if;
      -- kasutamata maksuvaba
      set ldc_kuu_maksuvaba3=ldc_kuu_maksuvaba3-ldc_maksuvaba3;
      set ldc_kuu_maksuvaba3_630=ldc_kuu_maksuvaba3_630-ldc_maksuvaba3_630;
      -- prop
      if ldc_tulu_summa3 = 0 then
        set ldc_tulu_prop=0
      else
        set ldc_tulu_prop=ldc_tulu_maks3/ldc_tulu_summa3
      end if;
--message 'maksuvaba3';
--message ldc_maksuvaba3;
--message 'tulu_summa2';
--message ldc_tulu_summa2;
--message 'tulu_maks3';
--message ldc_tulu_maks3;
      -- maksu jagamine tasude ridadele
      set li_tasunr=0;
      open c_tasu;
      tasu_loop: loop
        fetch next c_tasu into li_tasunr,li_a_aasta,ldc_summa3,li_sisse,li_tulu,li_tvtk,li_pens,li_tatk;
        if sqlstate = err_notfound then
          leave tasu_loop
        end if;
        if li_tatk = 1 then
          set ldc_tatk_maks4=Round(ldc_summa3*ldc_tatk_prop,2);
          if li_sisse = 0 then
            set ldc_tatk_maks3=ldc_tatk_maks3-ldc_tatk_maks4
          else
            set ldc_tatk_maks3=ldc_tatk_maks3+ldc_tatk_maks4
          end if;
          update pa_tasu set pa_tasu.tatkmaks = ldc_tatk_maks4 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta;
          set li_last_tatk_tasunr=li_tasunr;
          set li_last_tatk_a_aasta=li_a_aasta;
          set li_last_tatk_sisse=li_sisse
        else
          update pa_tasu set pa_tasu.tatkmaks = 0 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta
        end if;
        if li_tvtk = 1 then
          set ldc_tvtk_maks4=Round(ldc_summa3*ldc_tvtk_prop,2);
          if li_sisse = 0 then
            set ldc_tvtk_maks3=ldc_tvtk_maks3-ldc_tvtk_maks4
          else
            set ldc_tvtk_maks3=ldc_tvtk_maks3+ldc_tvtk_maks4
          end if;
          update pa_tasu set pa_tasu.tvtkmaks = ldc_tvtk_maks4 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta;
          set li_last_tvtk_tasunr=li_tasunr;
          set li_last_tvtk_a_aasta=li_a_aasta;
          set li_last_tvtk_sisse=li_sisse
        else
          update pa_tasu set pa_tasu.tvtkmaks = 0 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta
        end if;
        if li_pens = 1 then
          set ldc_pens_maks4=Round(ldc_summa3*ldc_pens_prop,2);
          if li_sisse = 0 then
            set ldc_pens_maks3=ldc_pens_maks3-ldc_pens_maks4
          else
            set ldc_pens_maks3=ldc_pens_maks3+ldc_pens_maks4
          end if;
          update pa_tasu set pa_tasu.pensmaks = ldc_pens_maks4 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta;
          set li_last_pens_tasunr=li_tasunr;
          set li_last_pens_a_aasta=li_a_aasta;
          set li_last_pens_sisse=li_sisse
        else
          update pa_tasu set pa_tasu.pensmaks = 0 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta
        end if;
        if li_tulu = 1 then
          set ldc_tulu_maks4=Round(ldc_summa3*ldc_tulu_prop,2);
          if li_sisse = 0 then
            set ldc_tulu_maks3=ldc_tulu_maks3-ldc_tulu_maks4
          else
            set ldc_tulu_maks3=ldc_tulu_maks3+ldc_tulu_maks4
          end if;
          update pa_tasu set pa_tasu.tulumaks = ldc_tulu_maks4 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta;
          set li_last_tulu_tasunr=li_tasunr;
          set li_last_tulu_a_aasta=li_a_aasta;
          set li_last_tulu_sisse=li_sisse
        else
          update pa_tasu set pa_tasu.tulumaks = 0 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta
        end if
      end loop tasu_loop;
      close c_tasu;
      if ldc_tatk_maks3 <> 0 and li_last_tatk_tasunr > 0 then
        update pa_tasu set pa_tasu.tatkmaks = pa_tasu.tatkmaks+if li_last_tatk_sisse = 0 then ldc_tatk_maks3 else-1*ldc_tatk_maks3 endif where pa_tasu.tasunr = li_last_tatk_tasunr and pa_tasu.a_aasta = li_last_tatk_a_aasta;
        set ldc_tatk_maks3=0
      end if;
      if ldc_tvtk_maks3 <> 0 and li_last_tvtk_tasunr > 0 then
        update pa_tasu set pa_tasu.tvtkmaks = pa_tasu.tvtkmaks+if li_last_tvtk_sisse = 0 then ldc_tvtk_maks3 else-1*ldc_tvtk_maks3 endif where pa_tasu.tasunr = li_last_tvtk_tasunr and pa_tasu.a_aasta = li_last_tvtk_a_aasta;
        set ldc_tvtk_maks3=0
      end if;
      if ldc_pens_maks3 <> 0 and li_last_pens_tasunr > 0 then
        update pa_tasu set pa_tasu.pensmaks = pa_tasu.pensmaks+if li_last_pens_sisse = 0 then ldc_pens_maks3 else-1*ldc_pens_maks3 endif where pa_tasu.tasunr = li_last_pens_tasunr and pa_tasu.a_aasta = li_last_pens_a_aasta;
        set ldc_pens_maks3=0
      end if;
      if (ldc_tulu_maks3<>0 or ldc_tatk_maks3<>0 or ldc_tvtk_maks3<>0 or ldc_pens_maks3<>0) and li_last_tulu_tasunr > 0 then
        if ldc_tulu_maks3 <> 0 then
          update pa_tasu set pa_tasu.tulumaks = pa_tasu.tulumaks+if li_last_tulu_sisse = 0 then ldc_tulu_maks3 else-1*ldc_tulu_maks3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta
        end if;
        if ldc_tatk_maks3 <> 0 then
          update pa_tasu set pa_tasu.tatkmaks = pa_tasu.tatkmaks+if li_last_tulu_sisse = 0 then ldc_tatk_maks3 else-1*ldc_tatk_maks3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta
        end if;
        if ldc_tvtk_maks3 <> 0 then
          update pa_tasu set pa_tasu.tvtkmaks = pa_tasu.tvtkmaks+if li_last_tulu_sisse = 0 then ldc_tvtk_maks3 else-1*ldc_tvtk_maks3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta
        end if;
        if ldc_pens_maks3 <> 0 then
          update pa_tasu set pa_tasu.pensmaks = pa_tasu.pensmaks+if li_last_tulu_sisse = 0 then ldc_pens_maks3 else-1*ldc_pens_maks3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta
        end if
      end if;
      if ldc_maksuvaba3 <> 0 and li_last_tulu_tasunr > 0 then
        update pa_tasu set pa_tasu.maksuvaba = pa_tasu.maksuvaba+if li_last_tulu_sisse = 0 then ldc_maksuvaba3 else-1*ldc_maksuvaba3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta;
      end if;
      if ldc_maksuvaba3_630 <> 0 and li_last_tulu_tasunr > 0 then
        update pa_tasu set pa_tasu.maksuvaba_630 = pa_tasu.maksuvaba_630+if li_last_tulu_sisse = 0 then ldc_maksuvaba3_630 else-1*ldc_maksuvaba3_630 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta;
      end if;
    end loop vmkood_loop;
    close c_vmkood;
    open c_maksper;
    maksper_loop: loop
      fetch next c_maksper into li_m_aasta,li_m_akuu;
      if sqlstate = err_notfound then
        leave maksper_loop
      end if;
--message 'siit algab varasema kuu umberarvestus';
--message li_m_akuu;
      -- leia maarad
      set ldc_tulu_vaba=get_maar(1,ymd(li_m_aasta,li_m_akuu,1));
      set ldc_tulu_protsent=get_maar(li_tmm,ymd(li_m_aasta,li_m_akuu,1));
      set ldc_tvtk_protsent=get_maar(3,ymd(li_m_aasta,li_m_akuu,1));
      set ldc_pens_protsent=get_maar(4,ymd(li_m_aasta,li_m_akuu,1));
      set ldc_tatk_protsent=get_maar(5,ymd(li_m_aasta,li_m_akuu,1));
      -- tootuskindlustus
      if li_tk_kaader_orig = 3 then
        set li_tk_kaader = get_tk_tunnus(li_asutnr,li_m_aasta,li_m_akuu)
      else
        set li_tk_kaader = li_tk_kaader_orig
      end if;
      -- pensionikindlustus
      set li_pens_kaader = get_pens_tunnus(li_asutnr,li_m_aasta,li_m_akuu);
      -- valjamakseliikide loikes
      open c_maksvmkood;
      maksvmkood_loop: loop
        fetch next c_maksvmkood into ls_vmkood;
        if sqlstate = err_notfound then
          leave maksvmkood_loop
        end if;
        -- kuu maksuvaba, varasem maks, varasem maksustatav summa ja kinnipidamata maksustatav summa
        -- Dekl 12 voi Maks 12
        select sum(((-2)*pa_taslist.sisse+1)*pa_tasu.maksuvaba),
               sum(((-2)*pa_taslist.sisse+1)*pa_tasu.tulumaks),
               sum(((-2)*pa_taslist.sisse+1)*pa_tasu.tvtkmaks),
               sum(((-2)*pa_taslist.sisse+1)*pa_tasu.pensmaks),
               sum(((-2)*pa_taslist.sisse+1)*pa_tasu.tatkmaks),
               -- kui on palgalehes voi tagasiarvestus
               sum(if pa_taslist.tulu=1 and (pa_tasu.palgaleht is not null or pa_tasu.lepnr<>a_lepnr or pa_tasu.vtasunr is null) then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
               sum(if pa_taslist.tk=1 and li_tk_kaader=1 and (pa_tasu.palgaleht is not null or pa_tasu.lepnr<>a_lepnr or pa_tasu.vtasunr is null) then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
               sum(if pa_taslist.pens=1 and li_pens_kaader>0 and (pa_tasu.palgaleht is not null or pa_tasu.lepnr<>a_lepnr or pa_tasu.vtasunr is null) then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
               sum(if pa_taslist.tatk=1 and (pa_tasu.palgaleht is not null or pa_tasu.lepnr<>a_lepnr or pa_tasu.vtasunr is null) then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
               -- kui ei ole palgalehes ja ei ole tagasiarvestus
               sum(if pa_taslist.tulu=1 and pa_tasu.palgaleht is null and pa_tasu.lepnr=a_lepnr and pa_tasu.vtasunr is not null then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
               sum(if pa_taslist.tk=1 and li_tk_kaader=1 and pa_tasu.palgaleht is null and pa_tasu.lepnr=a_lepnr and pa_tasu.vtasunr is not null then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
               sum(if pa_taslist.pens=1 and li_pens_kaader>0 and pa_tasu.palgaleht is null and pa_tasu.lepnr=a_lepnr and pa_tasu.vtasunr is not null then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif),
               sum(if pa_taslist.tatk=1 and pa_tasu.palgaleht is null and pa_tasu.lepnr=a_lepnr and pa_tasu.vtasunr is not null then ((-2)*pa_taslist.sisse+1)*pa_tasu.summa else 0 endif)
          into ldc_maksuvaba2,ldc_tulu_maks2,ldc_tvtk_maks2,ldc_pens_maks2,ldc_tatk_maks2,ldc_tulu_summa2,ldc_tvtk_summa2,ldc_pens_summa2,ldc_tatk_summa2,ldc_tulu_summa3,ldc_tvtk_summa3,ldc_pens_summa3,ldc_tatk_summa3
          from pa_tasu left outer join pa_leping on pa_tasu.lepnr = pa_leping.lepnr left outer join pa_taslist as pa_taslist on pa_tasu.tas_s = pa_taslist.tas_s left outer join pa_taslist as pa_taslist_b on pa_tasu.vtas_s = pa_taslist_b.tas_s left outer join pa_tasu as pa_tasu_b on pa_tasu.vtasunr=pa_tasu_b.tasunr and pa_tasu.va_aasta=pa_tasu_b.a_aasta
          where (pa_tasu.lepnr = a_lepnr or(not(ls_tmt_kaader = 'S') and pa_leping.asutnr = li_asutnr)) and if pa_taslist.vmkood is null then pa_taslist_b.vmkood else pa_taslist.vmkood endif=ls_vmkood and ((pa_tasu.vtasunr is null and (pa_tasu.t_aasta=li_m_aasta and pa_tasu.t_akuu=li_m_akuu)) or (pa_tasu.vtasunr is not null and (pa_tasu.t_aasta=li_t_aasta and pa_tasu.t_akuu=li_t_akuu) and (pa_tasu_b.t_aasta=li_m_aasta and pa_tasu_b.t_akuu=li_m_akuu)));
        if ldc_maksuvaba2 is null then
          set ldc_maksuvaba2=0
        end if;
        if ldc_tulu_maks2 is null then
          set ldc_tulu_maks2=0
        end if;
        if ldc_tvtk_maks2 is null then
          set ldc_tvtk_maks2=0
        end if;
        if ldc_pens_maks2 is null then
          set ldc_pens_maks2=0
        end if;
        if ldc_tatk_maks2 is null then
          set ldc_tatk_maks2=0
        end if;
        if ldc_tulu_summa2 is null then
          set ldc_tulu_summa2=0
        end if;
        if ldc_tvtk_summa2 is null then
          set ldc_tvtk_summa2=0
        end if;
        if ldc_pens_summa2 is null then
          set ldc_pens_summa2=0
        end if;
        if ldc_tatk_summa2 is null then
          set ldc_tatk_summa2=0
        end if;
        if ldc_tulu_summa3 is null then
          set ldc_tulu_summa3=0
        end if;
        if ldc_tvtk_summa3 is null then
          set ldc_tvtk_summa3=0
        end if;
        if ldc_pens_summa3 is null then
          set ldc_pens_summa3=0
        end if;
        if ldc_tatk_summa3 is null then
          set ldc_tatk_summa3=0
        end if;
--message 'siit varasem kuu algab '+ls_vmkood;
--message 'maksuvaba2';
--message ldc_maksuvaba2;
--message 'tulu_maks2';
--message ldc_tulu_maks2;
--message 'tulu_summa2';
--message ldc_tulu_summa2;
--message 'tulu_summa3';
--message ldc_tulu_summa3;
--message 'tvtk_maks2';
--message ldc_tvtk_maks2;
--message 'tvtk_summa2';
--message ldc_tvtk_summa2;
--message 'tvtk_summa3';
--message ldc_tvtk_summa3;
        -- tooandja tootuskindlustus
        set ldc_tatk_maks3=Round((ldc_tatk_summa2+ldc_tatk_summa3)*ldc_tatk_protsent/100,2)-ldc_tatk_maks2;
        -- prop
        if ldc_tatk_summa3 = 0 then
          set ldc_tatk_prop=0
        else
          set ldc_tatk_prop=ldc_tatk_maks3/ldc_tatk_summa3
        end if;
        -- toovotja tootuskindlustus
        set ldc_tvtk_maks3=Round((ldc_tvtk_summa2+ldc_tvtk_summa3)*ldc_tvtk_protsent/100,2)-ldc_tvtk_maks2;
        -- prop
        if ldc_tvtk_summa3 = 0 then
          set ldc_tvtk_prop=0
        else
          set ldc_tvtk_prop=ldc_tvtk_maks3/ldc_tvtk_summa3
        end if;
        -- kogumispension
        if li_m_aasta>2013 and li_m_aasta<2018 and li_pens_kaader=1 then
          set ldc_pens_protsent=3
        end if;
        set ldc_pens_maks3=Round((ldc_pens_summa2+ldc_pens_summa3)*ldc_pens_protsent/100,2)-ldc_pens_maks2;
        -- prop
        if ldc_pens_summa3 = 0 then
          set ldc_pens_prop=0
        else
          set ldc_pens_prop=ldc_pens_maks3/ldc_pens_summa3
        end if;
        -- tulumaks
        if ls_tmt = '0' then
          set ldc_tulu_maks3=0;
          set ldc_maksuvaba3=0
        else
          -- kasutamata maksuvaba
          set ldc_maksuvaba3=0;
          -- kokku maksuvaba ei saa olla negatiivne
          if ldc_maksuvaba2+ldc_maksuvaba3<0 then
            set ldc_maksuvaba3=-1*ldc_maksuvaba2
          end if;
          -- maksustatav summa ldc_tulu_summa2
          if li_mres = 1 then
            set ldc_tulu_summa2=ldc_tulu_summa2+ldc_tulu_summa3-ldc_tvtk_maks2-ldc_tvtk_maks3
          else
            set ldc_tulu_summa2=ldc_tulu_summa2+ldc_tulu_summa3-ldc_tvtk_maks2-ldc_tvtk_maks3-ldc_pens_maks2-ldc_pens_maks3
          end if;
-- maksustatav summa kuus kokku ei saa olla negatiivne. muudatus 13.09.2016
          if ldc_tulu_summa2<0 then
            set ldc_tulu_summa2=0
          end if;
          -- kokku maksuvaba ei saa olla suurem, kui kuu maksustatav summa
          if ldc_maksuvaba2+ldc_maksuvaba3>ldc_tulu_summa2 then
            if ldc_tulu_summa2<0 then
              set ldc_maksuvaba3=-1*ldc_maksuvaba2
            else
              set ldc_maksuvaba3=ldc_tulu_summa2-ldc_maksuvaba2
            end if
          end if;
          set ldc_tulu_maks3=Round((ldc_tulu_summa2-(ldc_maksuvaba2+ldc_maksuvaba3))*ldc_tulu_protsent/100,2)-(ldc_tulu_maks2);
        end if;
        -- prop
        if ldc_tulu_summa3 = 0 then
          set ldc_tulu_prop=0
        else
          set ldc_tulu_prop=ldc_tulu_maks3/ldc_tulu_summa3
        end if;
--message 'maksuvaba3';
--message ldc_maksuvaba3;
--message 'tulu_summa2';
--message ldc_tulu_summa2;
--message 'tulu_maks3';
--message ldc_tulu_maks3;
        -- maksu jagamine tasude ridadele
        set li_tasunr=0;
        open c_makstasu;
        makstasu_loop: loop
          fetch next c_makstasu into li_tasunr,li_a_aasta,ldc_summa3,li_sisse,li_tulu,li_tvtk,li_pens,li_tatk;
          if sqlstate = err_notfound then
            leave makstasu_loop
          end if;
          if li_tatk = 1 then
            set ldc_tatk_maks4=Round(ldc_summa3*ldc_tatk_prop,2);
            if li_sisse = 0 then
              set ldc_tatk_maks3=ldc_tatk_maks3-ldc_tatk_maks4
            else
              set ldc_tatk_maks3=ldc_tatk_maks3+ldc_tatk_maks4
            end if;
            update pa_tasu set pa_tasu.tatkmaks = ldc_tatk_maks4 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta;
            set li_last_tatk_tasunr=li_tasunr;
            set li_last_tatk_a_aasta=li_a_aasta;
            set li_last_tatk_sisse=li_sisse
          else
            update pa_tasu set pa_tasu.tatkmaks = 0 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta
          end if;
          if li_tvtk = 1 then
            set ldc_tvtk_maks4=Round(ldc_summa3*ldc_tvtk_prop,2);
            if li_sisse = 0 then
              set ldc_tvtk_maks3=ldc_tvtk_maks3-ldc_tvtk_maks4
            else
              set ldc_tvtk_maks3=ldc_tvtk_maks3+ldc_tvtk_maks4
            end if;
            update pa_tasu set pa_tasu.tvtkmaks = ldc_tvtk_maks4 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta;
            set li_last_tvtk_tasunr=li_tasunr;
            set li_last_tvtk_a_aasta=li_a_aasta;
            set li_last_tvtk_sisse=li_sisse
          else
            update pa_tasu set pa_tasu.tvtkmaks = 0 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta
          end if;
          if li_pens = 1 then
            set ldc_pens_maks4=Round(ldc_summa3*ldc_pens_prop,2);
            if li_sisse = 0 then
              set ldc_pens_maks3=ldc_pens_maks3-ldc_pens_maks4
            else
              set ldc_pens_maks3=ldc_pens_maks3+ldc_pens_maks4
            end if;
            update pa_tasu set pa_tasu.pensmaks = ldc_pens_maks4 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta;
            set li_last_pens_tasunr=li_tasunr;
            set li_last_pens_a_aasta=li_a_aasta;
            set li_last_pens_sisse=li_sisse
          else
            update pa_tasu set pa_tasu.pensmaks = 0 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta
          end if;
          if li_tulu = 1 then
            set ldc_tulu_maks4=Round(ldc_summa3*ldc_tulu_prop,2);
            if li_sisse = 0 then
              set ldc_tulu_maks3=ldc_tulu_maks3-ldc_tulu_maks4
            else
              set ldc_tulu_maks3=ldc_tulu_maks3+ldc_tulu_maks4
            end if;
            update pa_tasu set pa_tasu.tulumaks = ldc_tulu_maks4 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta;
            set li_last_tulu_tasunr=li_tasunr;
            set li_last_tulu_a_aasta=li_a_aasta;
            set li_last_tulu_sisse=li_sisse
          else
            update pa_tasu set pa_tasu.tulumaks = 0 where pa_tasu.tasunr = li_tasunr and pa_tasu.a_aasta = li_a_aasta
          end if
        end loop makstasu_loop;
        close c_makstasu;
        if ldc_tatk_maks3 <> 0 and li_last_tatk_tasunr > 0 then
          update pa_tasu set pa_tasu.tatkmaks = pa_tasu.tatkmaks+if li_last_tatk_sisse = 0 then ldc_tatk_maks3 else-1*ldc_tatk_maks3 endif where pa_tasu.tasunr = li_last_tatk_tasunr and pa_tasu.a_aasta = li_last_tatk_a_aasta;
          set ldc_tatk_maks3=0
        end if;
        if ldc_tvtk_maks3 <> 0 and li_last_tvtk_tasunr > 0 then
          update pa_tasu set pa_tasu.tvtkmaks = pa_tasu.tvtkmaks+if li_last_tvtk_sisse = 0 then ldc_tvtk_maks3 else-1*ldc_tvtk_maks3 endif where pa_tasu.tasunr = li_last_tvtk_tasunr and pa_tasu.a_aasta = li_last_tvtk_a_aasta;
          set ldc_tvtk_maks3=0
        end if;
        if ldc_pens_maks3 <> 0 and li_last_pens_tasunr > 0 then
          update pa_tasu set pa_tasu.pensmaks = pa_tasu.pensmaks+if li_last_pens_sisse = 0 then ldc_pens_maks3 else-1*ldc_pens_maks3 endif where pa_tasu.tasunr = li_last_pens_tasunr and pa_tasu.a_aasta = li_last_pens_a_aasta;
          set ldc_pens_maks3=0
        end if;
        if (ldc_tulu_maks3<>0 or ldc_tatk_maks3<>0 or ldc_tvtk_maks3<>0 or ldc_pens_maks3<>0) and li_last_tulu_tasunr > 0 then
          if ldc_tulu_maks3 <> 0 then
            update pa_tasu set pa_tasu.tulumaks = pa_tasu.tulumaks+if li_last_tulu_sisse = 0 then ldc_tulu_maks3 else-1*ldc_tulu_maks3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta
          end if;
          if ldc_tatk_maks3 <> 0 then
            update pa_tasu set pa_tasu.tatkmaks = pa_tasu.tatkmaks+if li_last_tulu_sisse = 0 then ldc_tatk_maks3 else-1*ldc_tatk_maks3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta
          end if;
          if ldc_tvtk_maks3 <> 0 then
            update pa_tasu set pa_tasu.tvtkmaks = pa_tasu.tvtkmaks+if li_last_tulu_sisse = 0 then ldc_tvtk_maks3 else-1*ldc_tvtk_maks3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta
          end if;
          if ldc_pens_maks3 <> 0 then
            update pa_tasu set pa_tasu.pensmaks = pa_tasu.pensmaks+if li_last_tulu_sisse = 0 then ldc_pens_maks3 else-1*ldc_pens_maks3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta
          end if
        end if;
        if ldc_maksuvaba3 <> 0 and li_last_tulu_tasunr > 0 then
          update pa_tasu set pa_tasu.maksuvaba = pa_tasu.maksuvaba+if li_last_tulu_sisse = 0 then ldc_maksuvaba3 else-1*ldc_maksuvaba3 endif where pa_tasu.tasunr = li_last_tulu_tasunr and pa_tasu.a_aasta = li_last_tulu_a_aasta;
        end if;
      end loop maksvmkood_loop;
      close c_maksvmkood;
    end loop maksper_loop;
    close c_maksper;
    -- kinnipidamised peale tulumaksu
    call pa_kinnip('8c',a_lepnr,li_t_akuu,li_t_aasta);
    call pa_kinnip('8o',a_lepnr,li_t_akuu,li_t_aasta);
--  end loop per_loop;
--  close c_per
end