Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /home/ift/52_procpy/finance/misc/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : //home/ift/52_procpy/finance/misc/IfTRules.pm

package DivBasicF::IfTRules;

use strict;
use File::Copy;
use Data::Dumper;

sub DELIVER { 2 }


#***********************************************************************************

sub new { 

   my $class = shift;
   my $self  = {};
   bless($self,$class);
   my $file  = shift;

   my $files = [];   
   if (!($file)) {
      opendir(DDIR,".");
      while (0 == 0) {
         $file = readdir(DDIR);
         last if (!$file);
         next if ($file !~ /\.(csv|kto|sql)$/ or $file =~ /^sync/);
         push(@$files,$file);
      }
      closedir(DDIR);
   } else {
      $files = [$file];
   }
   if ($#$files > 0) {
      print "Ambiguous, found files: " . Dumper($files); exit;
   }
   if (!@$files) {
      print "No file found.\n"; exit;
   }
   if (!(-f($files->[0]))) {
      print "File $file does not exist.\n"; exit;
   }
   
   open(FFILE,"<".$files->[0]);
   $self->{'TEXT'} = join("",<FFILE>);
   close(FFILE);
   $self->{'TEXT'} =~ s/\n (\d\d.\d\d.\d\d) /\n$1 /gs;
   if ($self->{'TEXT'} =~ s/\n(\d\d)\.(\d\d)\.(9\d) /\n19$3$2$1 /gs)  { $self->{'GER'} = 1 }
   if ($self->{'TEXT'} =~ s/\n(\d\d)\.(\d\d)\.(\d\d) /\n20$3$2$1 /gs) { $self->{'GER'} = 1 }
   $self->{'FILE'} = $files->[0];
   
   return($self);
   
}

#***********************************************************************************

sub store {

   my $self = shift;
   my $text = shift;
   $text =~ s/\n(\d\d)(\d\d)(\d\d)(\d\d) /\n$4\.$3\.$2 /gs if ($self->{'GER'});
   my $o = "xxxxxx";
   $text =~ s/^([^\n]+\()(......)(......\))/$1$o$2/s;
   open(FFILE,">".$self->{'FILE'});
   print FFILE $text;
   close(FFILE);
   return($text);
   
}

#***********************************************************************************
#***********************************************************************************

sub umsatzsteuer {

   my $self     = shift;
   my $text     = shift || $self->{'TEXT'};
   my $plansoll = shift;

   my $zeile; my $datum; my $kto1; my $space1; my $space2; my $steuer; my $remark;
   my $betrag; my $stkto;
   $text      =~ /^(\S+)/;
   my $konto  = $1;
   return(0) if ($konto !~ /^(.*?\-?)(12|13|10-0201)\-?(.*?)$/);

# print "ZZ: $ktotyp\n"; sleep 3;

   my $kto0   = $1;
   my $ktotyp = $2;
   while ($text =~ s/\n\d\d\d\d\d\d\d\d[ ;]+([^\n]+) +(7|19) +v\.H\. ([^\n]+)\n/\n/gs) { 1; }
#   while ($text =~ s/\n([^\n]*?v\.H\. +[U|V][^\n]*?)\n/\n/gs) { 1; }
   my $text1 = "";
   foreach $zeile (split(/\n/,$text)) {
      $text1 = $text1 . $zeile . "\n";
      if ($zeile =~ /^(\d\d\d\d\d\d\d\d[ ;]+)(\-?\d+\.\d\d)([ ;]+[^ ;]+[ ;]+)[^ ;]+([ ;]+)\-?\d+\.\d\d([ ;]+)(qq|qw)(.*?)\s*$/) {
         $datum    = $1;
         $betrag   = $2;
         $kto1     = $3;
         $space1   = $4;
         $space2   = $5;
         $steuer   = $6;
         $remark   = $7;
         $stkto    = "11-1502-I";
         if ($ktotyp eq "12") { $stkto = "11-1502-U"; }
         if ($steuer eq "qq") { $stkto = $stkto . "6" } else {  $stkto = $stkto . "7" }
#         $stkto = "11-157";
#         if ($ktotyp eq "12") { $stkto = "11-177"; }
#         if ($steuer eq "qq") { $stkto = $stkto . "5-" } else {  $stkto = $stkto . "1-" }
#         $stkto = $stkto . substr($datum,2,2);
#         if    (substr($datum,4,2) =~ /^(01|02|03)$/) { $stkto = $stkto . "1"; }      
#         elsif (substr($datum,4,2) =~ /^(04|05|06)$/) { $stkto = $stkto . "2"; }      
#         elsif (substr($datum,4,2) =~ /^(07|08|09)$/) { $stkto = $stkto . "3"; }      
#         elsif (substr($datum,4,2) =~ /^(10|11|12)$/) { $stkto = $stkto . "4"; }      
#         else                                         { $stkto = $stkto . "5"; }
         if ($steuer eq "qq") { $steuer = 19 } else { $steuer = 7 }
         $space2 = $space2 . "   " if ($space1 =~  /\;/);
         $remark = " von $betrag (" . $remark . ")";
         if ($ktotyp eq "12") { $remark = " v.H. USt." . $remark } else { $remark = " v.H. Vorst. " . $remark }
         $text1 = $text1 . $datum . sprintf("%3.2f",$betrag*$steuer*(-0.01)/(1+0.01*$steuer)) .
                  $kto1 . $stkto . $space1 . "0.00" . $space2 . $steuer . $remark . "\n";
      }
   }
   
#  Anfuegen von Planzahlen

#    print "______________________\n";
#    sleep 5;

#   while ($text1 =~ s/\n\d\d\d\d\d\d\d\d [^\n]*\D\-\d\d\d\d\D[^\n]*Plan +(Soll|Ist)[^\n]*\n/\n/s) { 1; } #  alle Planungen loeschen
   foreach $zeile (split(/\n/,$plansoll)) {
      next if ($zeile !~ /^(1[23]\-)(\d\d\d\d) +(.*) +(\-?\d+\.\d\d)/);
      $ktotyp = $1;
      $kto1   = $2;
      $remark = $3;
      $betrag = $4;
      $remark =~ s/^(\S+)(.*)$/$1/;
      while ($text1 =~ s/\n\d\d\d\d\d\d\d\d [^\n]*\D\-$kto1\D[^\n]*Plan +(Soll|Ist)[^\n]*\n/\n/s) { 1; }
      $text1 = $text1 . substr($datum,0,4) . "0102  " . $betrag . "  -" . $kto1 . "-soll  11-4999  0.00  Plan Soll $remark\n"
                      . substr($datum,0,4) . "0102  " . "0.00"  . "  -" . $kto1 . "-ist   10-4998  0.00  Plan Ist"
                                    .  " {-$kto1+$kto1-soll+$kto1-ist}\n";
   }
   
#  print substr($text1,0,5000); exit;                  
   return($self->store($text1));
            
}


#*******************************************************************************************

sub sozialbeitraege {

   my $self    = shift;
   my $text1   = shift || $self->{'TEXT'};
   my $sozdata = shift;

$main::PERSON = {};

   my $zeile; my $jahr;
   my $jahr1; my $monat1; my $tag1; my $datum1; my $betrag; my $person; my $kasse;
   my $anteile; my $art; my $o; my $o1; my $o2; my $o3; my $betrag9; my $jahr2;
   my $sozkeys1; my $sozdata1; my $z; my $kname; my $lst; my $sonder; my $text7; my $lzz;
   my $kin; my $kvsatz; my $kstsatz; my $sozver;my $text9; my $lohnberechnung; my $summen;
   my $religion; my $php_lohn; my $rvbefreit; my $dez11;
   my $betrag_grenze_rv; my $betrag_grenze_kv; my $b_art;
   
   my $rueckbuchungen = 1;

   my $faktor = { 2007 => 0.7673, 2008 => 0.7732,
                  2009 => 0.7472, 2010 => 0.7585,
                  2011 => 0.7435, 2012 => 0.7491,
                  2013 => 0.7605, 2014 => 0.7605,
                  2015 => 0.7585, 2016 => 0.7547 };  #  Gleitzonenfaktor


   my $beitragsobergrenze = { 2013 => [5800,3937.50], 2014 => [5950,4050] ,
                              2015 => [6050,4125] , 2016 => [6200,4237.50] };

                  
   my $gleitzonenuntergrenze; my $gleitzonenobergrenze;

   return() if ($sozdata !~ /PERSON +(.*?)\n/s);
   my $sozkeys = ["",split(/ +/,$1)];

   my $text = [];
   foreach $zeile (split(/\n/,$text1)) {
      next if ($zeile =~ /^\d\d\d\d\d\d\d\d/ and
           $zeile !~ /(Saldovortrag|Korrektur|Rundung|Txxxabelle|Zuschuss|ausweis|usatzzahl|\{.*\}|gezahlt.*\{)/ and
           $zeile !~ /\-(LOHN|LOHNG|LOHNH|SOND|KURZ|ZAHL|LxxxST|LxxxSTU|XAR|XPL|RULE)/ and
           $zeile !~ /-gezahlt/);
#      next if ($zeile =~ /-berechn /);
#      next if ($zeile =~ /(gezahlt|berechn).*\{.*\}/);
      $zeile = sprintf("%8u",substr($zeile,0,8)-1).substr($zeile,8) if ($zeile =~ /-SOND +\S/); # damit SOND-Zeilen stets
      push(@$text,$zeile);                                                                      # vor LOHN-Zeilen stehen
   }
   $text1 = "";
   
   foreach $zeile (shift(@$text),shift(@$text),sort @$text) {
      $zeile = sprintf("%8u",substr($zeile,0,8)+1).substr($zeile,8) if ($zeile =~ /^\d\d\d\d\d\d\d\d.*-SOND/);
      $text1 = $text1 . $zeile . "\n";
      next if ($zeile !~ /^(\d\d)(\d\d)(\d\d)(\d\d)[ ;]+(\S+)[ ;]+(\-AN\-)([a-z]+)\-(LOHN|LOHNG|LOHNH|LxxxST|SOND)[ ;]/);

      $jahr1   = $1 . $2;
      $jahr2   = $2;
      $monat1  = $3;
      $tag1    = $4;
      $datum1  = $1 . $2 . $3 . $4;
      $betrag  = $5;
      $person  = $7;
      $art     = $8;
      $dez11   = $1 . $2 . $3;
      if (!$php_lohn) {
         open(FFILE,"<rule.pl");
         $o1 = join("",<FFILE>);
         close(FFILE);
         $rueckbuchungen = 0 if ($o1 =~ /\"11-1503-P\"/);  #  wenn Jahresmeldung, kann alles rueckgebucht werden
         open(FFILE,"<lohn$jahr2.php");
         $php_lohn = join("",<FFILE>);
         close(FFILE);
         $php_lohn =~ s/\n( +\$wert1 += +number_format[^\n]*?)\n([^\n]*?)\n([^\n]*?)\n( +return +\$wert)/\n\/\/$1\n\/\/$2\n\/\/$3\n$4/s;
      }
      if ($art eq "SOND") { $sonder->{$person} = $sonder->{$person} + $betrag; next; }
      if ($art =~ /^LOHN/) { $betrag = $betrag + $sonder->{$person}; $sonder->{$person} = 0; }
      $betrag  = (-0.01) * $betrag;
      next if ($sozdata !~ /\n($person.*?)\n\D/s);
      $rvbefreit    = 0;
      if ($dez11 == 201112) { $dez11 = 1 } else { $dez11 = 0 }
$main::PERSON->{$person} = $person;
      $sozdata1 = [split(/\n/,$1)];
      while ($#$sozdata1 > 0) {
         last if (substr($sozdata1->[1],0,8) > $datum1);
         shift(@$sozdata1);
      }
      $sozdata1 = [split(/ +/,$sozdata1->[0])];
# print Dumper($sozdata1); 

#   RV    AV   KV   PV  , SZ  KS    ZU  KI
#   19.9  4.2  1.7  14.5, 8   5.5   0.9 0.25,
#   19.9  4.2  1.7  14.5, 25  1.2   0.3 0.1
#   RV    AV   KV   PV  , PL  U1    U2  U3
      
      $sozkeys1 = [@$sozkeys];

      $kvsatz = 0;
      $betrag_grenze_rv = 99999999;
      $betrag_grenze_kv = 99999999;
      if ($beitragsobergrenze->{$jahr1}) {
         $betrag_grenze_rv = 0.01 * $beitragsobergrenze->{$jahr1}->[0];
         $betrag_grenze_kv = 0.01 * $beitragsobergrenze->{$jahr1}->[1];
      }
      $betrag_grenze_kv = $betrag if (substr($tag1,0,1) == "0" or $betrag_grenze_kv > $betrag);
      $betrag_grenze_rv = $betrag if ($betrag_grenze_rv > $betrag);  #  keine Beitragsobergrenze, wenn Lohndatum mit 0 beginnt
      
      while (@$sozkeys1) {
         $b_art = "";
         $z  = shift(@$sozkeys1);
         $o  = shift(@$sozdata1);
         $o2 = "";
         if    ($z eq "LST")                      { $lst   = $o; }   #  Ermitteln der Lohnsteuergruppe
         elsif ($z eq "KK")                       { $kname = $o; }   #  Ermitteln der Kasse
         elsif ($z eq "KNR")                      { $kasse = $o; }   #  Ermitteln der Kasse
         elsif ($z eq "RVN" and $art =~ /^LOHN/)  { $o2 = "-AN-$person-RV 11-$kasse-RV-AN-$person";   $b_art = "RV"; 
                                                      $rvbefreit = $rvbefreit + 1 if ($o == 0) }
         elsif ($z eq "KVN" and $art =~ /^LOHN/)  { $o2 = "-AN-$person-KV-S 11-$kasse-KV-AN-$person"; $b_art = "KV"; 
                                                      $kvsatz = $kvsatz + $o; }
         elsif ($z eq "AVN" and $art =~ /^LOHN/)  { $o2 = "-AN-$person-AV 11-$kasse-AV-AN-$person";   $b_art = "RV"; }
         elsif ($z eq "PVN" and $art =~ /^LOHN/)  { $o2 = "-AN-$person-PV-S 11-$kasse-PV-AN-$person"; $b_art = "KV"; }
         elsif ($z eq "SZ"  )                     { $sozver  = $o }
         elsif ($z eq "KS"  )                     { $kstsatz = substr($o,0,1); $religion = "K".uc(substr($o,1,1)); }
#         elsif ($z eq "SZ"  and $art eq "LST")    { $o2 = "-AN-$person-SZ 11-1503-SZ-$person"; }
#         elsif ($z eq "KS"  and $art eq "LST")    { $o2 = "-AN-$person-KS 11-1503-KS-$person"; }
         elsif ($z eq "ZUN" and $art =~ /^LOHN/)  { $o2 = "-AN-$person-KV-Z 11-$kasse-KV-ZU-$person";  $b_art = "KV";
                                                      $kvsatz = $kvsatz + $o; }
         elsif ($z eq "KIN" and $art =~ /^LOHN/)  { $o2 = "-AN-$person-PV-Y 11-$kasse-PV-KI-$person"; $b_art = "KV";
                                                      $kin = 0; $kin = 1 if ($o > 0);  }
         elsif ($z eq "RVR" and $art =~ /^LOHN/)  { $o2 = "-AR-$person-RV 11-$kasse-RV-AR-$person"; $b_art = "RV";
                                                      $rvbefreit = $rvbefreit + 1 if ($o == 0) }
         elsif ($z eq "KVR" and $art =~ /^LOHN/)  { $o2 = "-AR-$person-KV 11-$kasse-KV-AR-$person"; $b_art = "KV";
                                                      $kvsatz = $kvsatz + $o; }
         elsif ($z eq "AVR" and $art =~ /^LOHN/)  { $o2 = "-AR-$person-AV 11-$kasse-AV-AR-$person"; $b_art = "RV"; }
         elsif ($z eq "PVR" and $art =~ /^LOHN/)  { $o2 = "-AR-$person-PV 11-$kasse-PV-AR-$person"; $b_art = "KV"; }
         elsif ($z eq "PL"  and $art =~ /^LOHN/)  { $o2 = "-PL-$person-PL 11-1503-PL-$person" if ($o > 0); }
         elsif ($z eq "ST"  and $art =~ /^LOHN/)  { $o2 = "-AR-$person-ST 11-$kasse-ST-AR-$person"; }
         elsif ($z eq "U1"  and $art =~ /^LOHN/)  { $o2 = "-AR-$person-U1 11-$kasse-U1-AR-$person"; }
         elsif ($z eq "U2"  and $art =~ /^LOHN/)  { $o2 = "-AR-$person-U2 11-$kasse-U2-AR-$person"; }
         elsif ($z eq "U3"  and $art =~ /^LOHN/)  { $o2 = "-AR-$person-U3 11-$kasse-U3-AR-$person"; }
         next if (!$o2);
         next if ($o <= 0);
         $o3 = $o * $betrag + 0.00001;
         $o3 = $o * $betrag_grenze_rv + 0.00001 if ($b_art eq "RV");
         $o3 = $o * $betrag_grenze_kv + 0.00001 if ($b_art eq "KV");
         $o3 = (-1) * $o3 if ($art eq "LST");
# print "WW:  $o2  $o3 $o $betrag $b_art $betrag_grenze_rv   $betrag_grenze_kv\n";
         if ($art =~ /^LOHN(G|H)$/) {  #  Gleitzonenkorrektur
   $gleitzonenuntergrenze = 400 / 100;
   $gleitzonenobergrenze  = 800 / 100;
   $gleitzonenuntergrenze = 450 / 100  if ($art eq "LOHNH");
   $gleitzonenobergrenze  = 850 / 100  if ($art eq "LOHNH");
#print "hier0 $person $o3  $betrag $o2\n";
             if ($betrag > 0 and $betrag < $gleitzonenobergrenze and (
                       $o2 =~ /^\-AN\-$person\-(RV|PV|AV|KV)/ or $o2 =~ /^\-AR\-$person\-U\d/) ) {
               if ($art eq "LOHNG") {  #  Formel bis 2012 und im Bestandsfall bis 2014:
                  $betrag9 = ($faktor->{$jahr1} * 400) + (2 - $faktor->{$jahr1}) * (100*$betrag - 400);
               } else {
                  $betrag9 = ($faktor->{$jahr1} * 450) +
                           ( (850/(850-450)) - (450/(850-450)) * $faktor->{$jahr1} ) * (100*$betrag - 450);
               }
               if ($betrag < $gleitzonenuntergrenze) {
                  $betrag9 = ($faktor->{$jahr1}) * 100 * $betrag;
               }
#            print "II: $betrag9 $betrag\n"; sleep 1;
               if ($o2 =~ /^\-AN\-$person\-(PV-Y|KV-Z)/ or $o2 =~ /^\-AR\-$person\-U\d/) {
                  $o3 = $o3 - $o3 * 1 * (1 - $betrag9/(100*$betrag));
               } else {
                  $o3 = $o3 - $o3 * 2 * (1 - $betrag9/(100*$betrag));
               }
#print "hier1 $person $o3  $betrag\n";
            }
         }
         $o3 = sprintf("%8.2f",$o3);
         $o2 =~ s/^(\-)(AN|AR|PL)(\-$person\-)(..)(.*)$/$datum1  $o3  $1$2$3$4$5  0.00  $2\-Anteil $4/;
         $o2 =~ s/\-PL / /g;
         $o2 =~ s/AN-Anteil SZ /Soli /;
         $o2 =~ s/(A[RN]-Anteil )(KV|RV|PV|AV)(.*)$/$1$2$3, $kname/;
         $o2 =~ s/AN-Anteil SZ/SoliZuschl/;
         $o2 =~ s/AN-Anteil KS/Kirchensteuer/;
         $o2 =~ s/AR-Anteil U1/Umlage 1/;
         $o2 =~ s/AR-Anteil U2/Umlage 2/;
         $o2 =~ s/AR-Anteil U3/Insolvenzumlage/;
         $o2 =~ s/AR-Anteil ST/Pauschalsteuer/;
         $o2 =~ s/PL-Anteil PL/Pauschale Lohnsteuer/;
         $o2 =~ s/(KV-Z.*)AN-Anteil KV/$1AN-Zuschl KV/;
         $o2 =~ s/(PV-Y.*)AN-Anteil PV/$1KI-Zuschl PV/;
         $text1 = $text1 . $o2 . "\n";
#  Umbuchung auf PKV-Anteil:
         if ($o2 =~ s/^(.*[ ;])([^ ;]+)([ ;]+0.00[ ;]+.*PKV-Zuschuss.*)/$1 11-$kasse-AR-$person $3/) {
            $text1 = $text1 . $o2 . "\n";
         }         
         
      }
      
#  --- Steuerberechnung per php-Skript
      
      if ($lst !~ /\./) { $lst = $lst . ".00"; }
      $rvbefreit = 0 if ($rvbefreit != 2);
      foreach $lzz (2,1) {
         next if ($lzz == 1 and substr($tag1,1,1) != 7);  #  Jahreskorrektur anbringen, wenn Lohndatum am [012]7. des jeweiligen Monats endet
         $o3 = sprintf("%3.2f",$betrag * 100);
         if ($lzz == 2) {
            $summen->{'Brutto-'.$person} = $summen->{'Brutto-'.$person} + $o3;
         } else {
            $o3 = sprintf("%3.2f",$summen->{'Brutto-'.$person});
         }
         if ($lst =~ /^(\d)\.(\d)(\d)$/) {
            $o2 = <<"TEXT_ENDE"
\$_POST['stkl']      =  $1;
\$_POST['zkf']       =  $2.$3;
\$_POST['r']         =  $kstsatz;
\$_POST['kinderlos'] =  $kin;
\$_POST['lzz']       =  $lzz;
\$_POST['re4']       =  $o3;
\$_POST['kvsatz']    =  $kvsatz;
\$_POST['anpdez']    =  $dez11;
\$_POST['e_krv']     =  $rvbefreit;
TEXT_ENDE
         }
         $text9 =  $php_lohn;
         $text9 =~ s/\n/\n$o2/s;
         if (!(exists($lohnberechnung->{$person.$text9})) and $lst > 0) {  # Caching der Steuerberechnung
#            print("_lohn_$person$lzz.php created...\n");
            mkdir("_php_EXCLUDE_");
            open(FFILE,">_php_EXCLUDE_/_lohn_EXCLUDE_$person$lzz.php");
            print FFILE $text9;
            close(FFILE);
            $lohnberechnung->{$person.$text9} = `php _php_EXCLUDE_/_lohn_EXCLUDE_$person$lzz.php 2> /dev/null`;
         }
         if (-f "_php_EXCLUDE_/_lohn_EXCLUDE_$person"."2.php") {
            system("cp _php_EXCLUDE_/_lohn_EXCLUDE_$person"."2.php _php_EXCLUDE_/_lohn_EXCLUDE_$person\_$monat1.php");
         }
         $text9 = $lohnberechnung->{$person.$text9};
         $text9 =~ s/Solidarit.*?ts/Solidaritaets/gs;
         $text9 =~ s/ 0\.\</ 0.00\</gs;
      
         while ($text9 =~ s/(Lohnsteuer|Kirchensteuer|Solidaritaetszuschlag)\:.*?(\d?\.?\d+)\.(\d\d)//s) {
            $z  = "$2,$3";
            $o2 = $1;
            $o3 = "";
            $z  =~  s/\.//gs;
            $z  =~  s/\,/./gs;
            next if ($o2 eq "Kirchensteuer" and $kstsatz == 0 and $religion eq "K");
            last if ($lzz == 2 and $z == 0 and $o2 eq "Lohnsteuer");
            if ($lzz == 1) {
               $z  = sprintf("%8.2f",$z - $summen->{$o2."-".$person});
               $o3 = "Jahreskorrektur ";
               next if ($z < 1 and $z > -1);
            }
            $text1 = $text1 . "$datum1  $z  -AN-$person-$o2  11-1503-$o2-$person  0.00  $o3$o2\n";
            if ($rueckbuchungen and $lzz == 1 and $z + $summen->{'LAST-'.$o2."-".$person} < 0) {
               $z     = sprintf("%3.2f",-$summen->{'LAST-'.$o2."-".$person} - $z);
               print "Rueckbuchung $o2 $person: $z\n";
               $text1 = $text1 . "$datum1  $z  -AN-$person-$o2  11-1503-$o2-$person  0.00  Rueckbuchung $o2\n";
            }
            $summen->{$o2."-".$person} = $summen->{$o2."-".$person} + $z;
            $summen->{'LAST-'.$o2."-".$person} = $z;
         }
      }
      $text1 =~ s/-Kirchensteuer-/-$religion-/g;
   }

   $text1 =~ s/-Lohnsteuer-/-LS-/g;
   $text1 =~ s/-Solidaritaetszuschlag-/-SZ-/g;
   $text1 =~ s/-Lohnsteuer /-LSTU /g;
   $text1 =~ s/-Kirchensteuer +11-1503-K([A-Z])-/-K$1   11-1503-K$1-/g;
   $text1 =~ s/-Solidaritaetszuschlag /-SZ /g;
   $text1 =~ s/ Solidaritaetszuschlag/ SolidZuschl/g;
# print $text1; exit;


#  Ergaenzung  der berechneten und gezahlten Steueranteile <- war vormals in den Lohnkonten drin, ist jetzt in 10-7001

   $text9 = $text1;
# print $text9; exit;
   while ($text9 =~ /  -AN-([a-z]+)-(LOHN |LOHNG|LOHNH|SOND|LSTU|K[A-Z]|SZ|RV|AV|PV-[SXY]|KV-[SXY]) +([\d\-]+)/) {
#   while ($text9 =~ /  -AN-([a-z]+)-(LOHN|SOND|LSTU|K[A-Z]|SZ|RV|AV|PV|KV) +([\d\-]+)/) {
# print "hier\n"; #sleep 1;
# print "$1 $2 $3\n"; sleep 1;
      $person = $1;
      $o1     = $2;
      $o1     =~ s/(-[SXY]| )//;
      $o3     = $3;
      $o2     = $o1;
      $o2     = "LS" if ($o2 eq "LSTU");
      $text9  = $text9 . "\n    -AN-$person-LSTU   0.00\n    -AN-$person-SZ   0.00\n" if ($o1 =~ /^LOHN/);
      $text9  =~ s/  -AN-$person-$o1[\-SXY]* +$o3//g;
#next;
      $text1  = $text1 . $jahr1 . "1230  1.00 -AN-$person-$o1-berechn  10-7001-$person-$jahr2-$o1  0.00  " .
                   "Berechnung \{-AN-$person-$o1+AN-$person-$o1-gezahlt+AN-$person-$o1-berechn\}\n"
                                             if ($text1 !~ / -AN-$person-$o1-berechn /);
          $text1  = $text1 . $jahr1 . "1230  1.00 -AN-$person-$o1-gezahlt  10-7001-$person-$jahr2-$o1  0.00  " .
                   "Steuerausweis \{-AN-$person-$o1-berechn\}\n" if ($text1 !~ / -AN-$person-$o1-gezahlt /);
   }

#   $text1 =~  s/(LOHNG|LOHNH|SOND|LOHN|BRUTTO)-gezahlt(.*?)(LOHNG|LOHNH|SOND|LOHN|BRUTTO)( .*Steuerausweis)/LOHN-gezahlt$2LOHN $4/g;
#   $text1 =~  s/(KE|KR|KA|KB|KS)-gezahlt(.*?)(KE|KR|KA|KB|KS)( .*Steuerausweis)/KE-gezahlt$2KE $4/g;


#   $text =~ s/\n---INSERT---\n/$text1/s;
#   $text =~ s/---INSERT---\n//gs;
   return($self->store($text1));   

}

#*******************************************************************************************

sub abschreibung {

   my $self = shift;
   my $text = shift || $self->{'TEXT'};

   my $gueter            = {};
   my $anschaffungsmonat = {};
   my $zeile; my $zeile1; my $o; my $jahr; my $jh; my $gut; my $monat;

   foreach $zeile (split(/\n/,$text)) {
      if ($zeile =~ /^(\d\d)(\d\d)(\d\d)(\d\d)[ ;]+(\-?\d+\.\d\d)[ ;]+\-(\d\d)([0123456789ABC])(\_\d+\_[a-z0-9]+)\-([A-Z][A-Z])/) {
         $jh                       = $1;
         $jahr                     = $2;
         $o                        = $6;
         $monat                    = $7;
         $gut                      = $o.$monat.$8;
         $gueter->{$gut}->{$9}     = $gueter->{$gut}->{$9} + $5;
         if    ($o !~ $jahr)  { $monat = "01"; } #  wenn nicht im Anschaffungsjahr, dann mit der Abschreibung schon im Januar beginnen
         elsif ($monat eq"A") { $monat = "10"; }
         elsif ($monat eq"B") { $monat = "11"; }
         elsif ($monat eq"C") { $monat = "12"; }
         $anschaffungsmonat->{$gut} = $monat;
      }
   }
   

   while ($text =~ s/\n(\d\d\d\d\d\d\d\d)[^\n]+(Abschreibung|Korrektur Restabschreibung)[^\n]+\n/\n/gs) { 1; }

   foreach $o (keys %$gueter) {
      if (!(exists($gueter->{$o}->{'AN'}))) {  #  Entfernen der Abschreibungen OHNE Anschaffungswert
         while ($text =~ s/^\n$jahr.[^\n]+$o-AS[^\n]+\n/\n/gs) { 1; }
      }
      if ($o =~ /^(.*?)\_(.*?)\_(.*)$/) {
         $text = $text . $jh . $jahr . "1231  0.00  -$o-AS  13-6540  0.00  Abschreibung {-($o-AN*(1\/$2)";
         if ($2 > 1 and $anschaffungsmonat->{$o} ne "01") { #  falls Abschreibung ueber einem Jahr, die
                                                            #  Abschreibung in dem jeweiligen Monat beginnen lassen
            $text = $text . "*(" . sprintf("%1u",13-$anschaffungsmonat->{$o}) . "\/12)";
         }
         $text = $text . ")\}\n";
      }
      $zeile1 = $gueter->{$o}->{'AN'} + $gueter->{$o}->{'AS'};  #  wenn die gesamte Abschreibung
      if ($zeile1 < -0.001) {  #  groesser ist als der Anschaffungswert, dann entsprechend korrigieren
#print "QQQ: $o  $zeile1\n";
         $text = $text . $jh . $jahr . "1231  0.00  -$o-AX  13-6540  0.00  Korrektur Restabschreibung {-($o-AS)-($o-AN)}\n";
      }
   }            

# print Dumper($gueter); exit;
   return($self->store($text));
   
}

#*******************************************************************************************

sub saldovortrag {

   my $self  = shift;
   my $text  = shift || $self->{'TEXT'};
   my $buchh = shift;
   
   my $o1; my $o2;
   $text =~ s/(\d\d\d\d)(0101[ ;]+-?\d+\.\d\d[ ;]+\-[^ ;]*[ ;]+)([^ ;]+)([ ;]+)(\-?\d+\.\d\d[ ;]+)(.*)/$1$2$3$4$5Saldovortrag \{-(::___$1___-$3)\}/g;
   while ($text =~ /___(\d\d\d\d)___/) {
      $o1 = $1;
      $o2 = sprintf("%04u",$o1-1);
      $text =~ s/___$o1\___/$o2/g;
   }
   $text =~ s/(\{\-\(\:\:2001\-.*?\))\}/$1\/1.95583\}/g;
#   $text =~ s/\{\-\(\:\:2005/\{\-\(\:\:\:\:ARCHIVE-$buchh-2005/g;

#   $text =~ s/Sxaxldo/Saldo/gs;
#   $text =~ s/(Saldovortrag \{)-/$1/g;
#   $text =~ s/(Saldovortrag \{-\()-/$1/g;
# print $text; exit;
   return($self->store($text));


}   

#*******************************************************************************************

#  Allgemeine Hilfsfunktion zum Lesen von Formularen

sub formular {

   my $self = shift;
   my $text = shift || $self->{'TEXT'};

   my $file; my $file1; my $o; my $o1; my $o2; my $o3; my $o4; my $text2;
   my @ee              = ();
   my $formular_parser = [];

#   while ($text =~ s/\n\d\d\d\d\d\d\d\d (.*?)\n/\n/gs) { 1; }  #  alle Buchungen loeschen
   my $text1    = {};
   my $nr1      = {};
   my $allfiles = "\n";
   my $change_date = {};


   opendir(DDIR,".");
   while (0 == 0) {
      $file = readdir(DDIR);
      print $file . "\n" if ($file =~/UST/);
      last if (!(defined($file)));
      if    ($file =~ /\~$/) {
         unlink($file);
      }
      elsif ($file =~ /\.txt$/) {        #  alte txt-Files loeschen
#         unlink($file);
         $allfiles = $allfiles . $file . "\n";
      }
      elsif ($file =~ /^render\./) {     #  alle Parser zusammenfassen
         push(@$formular_parser,$file);
      }
      elsif ($file =~ /\.(pdf|manuell|lexware|elfo)$/) {     #  alle Formulare zusammenfassen
         $o1 = $file;
         $o1 =~ s/ /\_/g;
         $o1 =~ s/\_\-/\_/g;
         $o1 =~ s/\-\_/\_/g;   #  Normierung der Dateinamen
         $o1 =~ s/Ä/Ae/g;      #  fuer Linux
         $o1 =~ s/Ö/Oe/g;
         $o1 =~ s/Ü/Ue/g;
         $o1 =~ s/ä/ae/g;
         $o1 =~ s/ö/oe/g;
         $o1 =~ s/ü/ue/g;
         $o1 =~ s/ß/ss/g;
         $o1 =~ s/,/\_/g;
         move($file,$o1);
         push(@ee,$o1);
      }
          
   }
   closedir(DDIR);
   
   foreach $o (sort @ee) {
      next if ($o !~ /^(.*)\.(pdf|manuell|lexware)$/);
      next if ($o =~ /obsolete\./);
      print "Found pdf-File $o ...\n";
      $file = $1;
      $o1   = $2;
      copy("$file.manuell","$file.EXCLUDE.txt") if ($o1 eq "manuell");  #  Text-File erstellen
      copy("$file.lexware","$file.EXCLUDE.txt") if ($o1 eq "lexware");  #  Text-File erstellen
      if ($o1 eq "pdf") {
         if ((stat("$file.pdf"))[7] < 250) {  #  Text-File erstellen
            copy("$file.pdf","$file.EXCLUDE.txt");
         } else {
            if (!(-f "$file.EXCLUDE.txt")) {
#            if ($allfiles =~ s/\n([^\n]*?$file\.[^\n]*?)\n/\n/s) {   #  Text-File erstellen
#               move($1,"$file.txt");  #  in $allfiles werden die schon bestehenden Textfiles festgehalten
#            } else {
               print "$file\n";
               open(FFILE,"<$file.pdf");
               $o1 = <FFILE>;
               close(FFILE);
               if ($o1 =~ /1\.4/) {
                  system("pdftotext -layout $file.pdf; mv $file.txt $file.EXCLUDE.txt");
               } else {
                  system("pdftops $file.pdf; ps2ascii $file.ps > $file.EXCLUDE.txt; rm $file.ps");
               }
            }
         }
      }

   print "$file\n";
      open(FFILE,"<$file.EXCLUDE.txt");
      $o1 = join("",<FFILE>);
      close(FFILE);
      $o1 =~ s/Ä/Ae/g;    #  Sonderzeichen eliminieren
      $o1 =~ s/Ö/Oe/g;
      $o1 =~ s/Ü/Ue/g;
      $o1 =~ s/ä/ae/g;
      $o1 =~ s/ö/oe/g;
      $o1 =~ s/ü/ue/g;
      $o1 =~ s/ß/ss/g;
      $o1 =~ s/\"A/Ae/g;
      $o1 =~ s/\"O/Oe/g;
      $o1 =~ s/\"U/Ue/g;
      $o1 =~ s/\"a/ae/g;
      $o1 =~ s/\"o/oe/g;
      $o1 =~ s/\"u/ue/g;
      $o1 =~ s/\"s/ss/g;
      $o1 =~ s/A\"/Ae/g;
      $o1 =~ s/O\"/Oe/g;
      $o1 =~ s/U\"/Ue/g;
      $o1 =~ s/a\"/ae/g;
      $o1 =~ s/o\"/oe/g;
      $o1 =~ s/u\"/ue/g;
      $o1 =~ s/s\"/ss/g;
      open(FFILE,">$file.EXCLUDE.txt");
      print FFILE $o1;
      close(FFILE);
      
      $o3 = $file;
      my $o31;
      foreach $o1 (@$formular_parser) {  #  Suchen des passenden Parsers
         $o2 = `perl $o1 $file.EXCLUDE.txt`;
         print "perl $o1 $file.EXCLUDE.txt\n";
         
         if ($o2 =~ s/^([0-9\_]*)(.*?)\n//s) {
            $o3 = $1.$2;
            $o31 = $2;
            $o4 = "";
            if ($o2 =~ s/(\d\d)___ADD___/---XXX---/gs) {
               $o4 = sprintf("%02u",$1 + $change_date->{$o31});
               $change_date->{$o31} = $change_date->{$o31} + 1;
               $o2    =~ s/---XXX---/$o4/g;
            }
            $text1->{$o3.$o4} = $o2;
            if (!$o3 or $o3 =~ /[^A-Za-z0-9\-\_\.]/) { next; }
            print "   ... $o3$o4 parsed with $o1 --------------------------> \n";
            print "     move to: $o3\n";
            move("$file.EXCLUDE.txt","$o3.EXCLUDE.txt") if (-f "$file.EXCLUDE.txt");
            move("$file.manuell","$o3.manuell")         if (-f "$file.manuell");
            move("$file.lexware","$o3.lexware")         if (-f "$file.lexware");
            move("$file.pdf","$o3.pdf")                 if (-f "$file.pdf");
            move("$file.elfo","$o3.elfo")               if (-f "$file.elfo");
            $o2 = "OK";
            last;
         }
      }
      
   }      
   return($self->store(join("",$text."\n",values %$text1)));
   
}   

#*******************************************************************************************
#*******************************************************************************************

sub xxrender_abschreibungen {

   my $self = shift;
   my $text = shift;


   my $o; my $o1; my $position; my $restwert;
   my $jh; my $year; my $year1; my $anschaffung; my $halbjahr;
   my $afazeitraum; my $schon_abgeschrieben; my $kaufwert;
   my $abschreibung; my $anteil; my $restanteil; my $year0;
   my $text1 = "";

   if ($text =~ /^(.*?)(\d\d)(\d\d)/) {
      $jh   = $2;  #   Jahrhundert
      $year = $3;  #   Jahr
      $year1 = $year + 1;
      $year0 = sprintf("%4u",$jh * 100 + $year - 1);
   } else {
      return($text);
   }
   while ($text =~ s/\n$year0([^\n]*?)\n/\n/s) { 1; }
#   while ($text =~ s/\n$jh$year([^\n]*?)Abschreibung \(([^\n]*?)\n/\n/s) { 1; }
# print "TT: $year0 $text\n"; sleep 30;

   while ($text =~ s/\n10\-0201\-(\S+) +(\-?\d+\.\d+)//s) {
      $position = $1;
      $restwert = $2;
      $o1 = "";
      $o1 = $jh . $year . "0101 0.00 -"."$position 11-1805 0.00 Saldovortrag\n"
             if ($position =~ /^(\d\d)(\d)\_1\_(.*)$/ and $text =~ /$position/);
      while ($text =~ s/\n10\-0201\-$position +(\-?\d+\.\d+)//s) {
         $o  = $1;
         $o1 = $jh . $year . "0101 0.00 -"."$position 11-1805 0.00 Saldovortrag\n" if ($o > 0);
         if ($o < $restwert) {
            $restwert = $o;
         }
      }
      if ($restwert <= 0) {
         while ($text =~ s/\n$jh$year([^\n]*?) \-$position ([^\n]*?)Saldovortrag([^\n]*?)\n/\n/s) { 1; }
      }
      if ($text !~ /$jh$year([^\n]*?) \-$position ([^\n]*) Saldovortrag/) {
         $text1 = $text1 . $o1;
      }
# if ($position =~ /8.*sammel/) { print "RRR: $restwert \n"; sleep 30 }
      if ($text =~ s/\n(\d\d)(\d\d)12\d\d +(\-?\d+\.\d+) +\-$position +\S+ +\d+\.\d+ +Abschreibung(.*?)\n/\n/s) {
         $restwert = $3 - $restwert;
         $restwert = (-1) * $restwert;
         $year1  = $year + 1;
      }
      if ($position =~ /^(\d\d)(.)\_(\d+)\_(.*)$/) {
         $anschaffung = $1;
         $halbjahr    = $2;
         $afazeitraum = $3;
#         if ($halbjahr < 3) { $halbjahr = 0 } else { $halbjahr = 0.5 }
         if ($halbjahr eq "A") { $halbjahr = 10; }
         if ($halbjahr eq "B") { $halbjahr = 11; }
         if ($halbjahr eq "C") { $halbjahr = 12; }
         $halbjahr = ($halbjahr - 1) / 12; 
         $anschaffung = $anschaffung + $halbjahr;   #  Monat der Anschaffung
         if ($anschaffung > $year1) { $year1 = $year1 + 100 }
         $schon_abgeschrieben = ($year1 - $anschaffung - 1);
         if ($schon_abgeschrieben < 0) { $schon_abgeschrieben = 0 }
         $restanteil = sprintf("%3.2f",$afazeitraum - $schon_abgeschrieben);
         $restanteil =~ s/^(.*?)(0*)$/$1/;
         $restanteil =~ s/^(.*?)\.$/$1/;
         if ($restanteil > 0 and $restwert > 0) {
            $kaufwert = $restwert * $afazeitraum /  $restanteil;
            $kaufwert = sprintf("%3.2f",$kaufwert);
            $anteil   = "1";  #  abzuschreibender Anteil
            if ($year1 - $anschaffung < 1 and $afazeitraum > 1) { $anteil = (1 - $halbjahr) } 
            $abschreibung = sprintf("%3.2f", -$anteil * $kaufwert / $afazeitraum);
            if ($restwert + $abschreibung < 1) { $abschreibung = - $restwert }
            $anteil = sprintf("%3.2f",$anteil);
            $anteil =~ s/^(.*?)(0*)$/$1/;
            $anteil =~ s/^(.*?)\.$/$1/;
            $text1 = $text1 . $jh . $year . "1231 "."$abschreibung -"."$position 13-6540 0.00 Abschreibung ($anteil".
                             "/" . "$afazeitraum von $restanteil"."/"."$afazeitraum, $kaufwert EUR)\n";
         }
         
# print "$position  $anschaffung $halbjahr $restwert $year1  $schon_abgeschrieben  $kaufwert $abschreibung\n"; sleep 3;
      }
   }
   
# print $text . $text1; sleep 30;

   $text = $text . $text1;
   
   return($text);

}

   
#***********************************************************************************
#***********************************************************************************

sub xxkonto {

   my $self  = shift;
   my $dd1   = shift;
   my $mm1   = shift;
   my $text  = shift;

   my $text1 = $text;
   my $renderer; my $kto; my $o; my $o1; my $o2; my $pattern; my $chkto; my $ust;
   my $p4; my $p5; 
   my $p6; my $p7; 
   my $p8; my $p9; 
   my $erg   = $self->{'FIBU'}->parserule($text,"RENDERER",\$renderer,\$kto);
   my @pars  = split(/,/,$renderer);
   $renderer = shift(@pars);

   my $dir   =   Cwd::cwd();
   $dir      =~  s/^\\/\//g;
   $dir      =~  s/^[A-Z]\://;
   $dir      =~  s/\/+$//g;
   $dir      =   "/" . $dir;
   $dir      =~  s/\/\//\//gs;
   my $basis =   $pars[0];
   my $text2 =   "";
   while (0 == 0)  {   #  Einlesen von Dateien
      foreach $o ("","a","b","c","d","e","f","g","h","i","j","k",
                "_01","_02","_03","_04","_05","_06","_07","_08","_09","_10","_11","_12") {
         next if (!(-f("$dir/$basis$o.csv")));
         print "Read in File: $dir/$basis$o.csv\n";
         system("xcv1 utf $dir/$basis$o.csv");
         open(FFILE,"<$dir/$basis$o.csv");
         $text2 = $text2 . "\n" . join("",<FFILE>);
         close(FFILE);
      }
      last if ($text2);
      $dir =~ s/^(.*)\/(.*)$/$1/;
      last if (!$dir);
   }
   if ($text2) { $text1 =~ s/^(.*?)\n($dd1 .*)$/$1\n$text2/s; }
   $basis = $self;
   if ($renderer =~ s/^(.*?)\_\_(.*)$/$2/) {
      $basis = "Application::IfTRules_$1";
      eval("use $basis");
      $basis = $basis->new($self->{'FIBU'});
   }
   eval("\$text1 = \$basis->$renderer(\$text1,\$dd1,\@pars)") if ($erg and $#$erg == 0);
   $text1 =~ s/ +\n/\n/gs;
   if ($renderer =~ /reload/) { $mm1 = "RELOAD"; }
   if ($@) { print $@; sleep 5; }

   $erg = $self->{'FIBU'}->parserule($text,"\\S+");  #  Parsen der Rules
   if (ref($erg)) {
#open(FFILE,">rules.txt");
      foreach $o (@$erg) {
         $pattern = $o->[0];
         $chkto   = $o->[2];
         $chkto   =~ s/\-VAR(\d+)/-WWWVAR$1/g;
         $pattern =~ s/^,(.*),$/$1/;
         $ust     = "";
         if ($pattern =~ s/^([q\+][qw\+\-])// ) {
            $ust = $1;
         }
         $pattern = [split(/[\(\)]+/,$pattern)];
         $pattern = "(" . join(")(",@$pattern) . ")";
         $pattern =~ s/\(\)//g;
#         if ($pattern !~ /[\(\)]/) {    obsoleter Code, ersetzt durch die drei Zeilen dadrueber
#            $pattern = "(" . $pattern . ")";
#         }
#         $pattern =~ s/^(.*?)\(/\($1\)\(/;
#         $pattern =~ s/^(.*)\)(.*)$/$1\)\($2\)/;
#        print FFILE $pattern . "\n";
#print "124: $pattern\n"; sleep 1;
         while ($text1   =~ s/( \S*\-9999 )(.*?)$pattern/ $chkto $2$ust$3$4$5$6$7$8$9/) {
            $p4 = $4;
            $p5 = $5;
            $p6 = $6;
            $p7 = $7;
            $p8 = $8;
            $p9 = $9;
            $text1   =~ s/WWWVAR1/$p4/g;
            $text1   =~ s/WWWVAR2/$p5/g;
            $text1   =~ s/WWWVAR3/$p6/g;
            $text1   =~ s/WWWVAR4/$p7/g;
            $text1   =~ s/WWWVAR5/$p8/g;
            $text1   =~ s/WWWVAR6/$p9/g;
# print "$pattern  $p4  $p5\n"; sleep 1;
         }
      }
#      close(FFILE);
   }

#   TODO:  hier werden die qq/qw - Angaben an den Anfang der Zeile gestellt
#   $text1 =~ s/(\d\d\d\d\d\d\d\d[; ]+-?\d+\.\d\d[; ]+[^ ;]+[; ]+[^ ;]+[; ]+-?\d+\.\d\d[ ;]+)([^ ;].*?)([q\+][qw\+\-])(.*)/$1$3$2$4/g;
#   $text1 =~ s/(\d\d\d\d\d\d\d\d[; ]+-?\d+\.\d\d[; ]+[^ ;]+[; ]+[^ ;]+[; ]+-?\d+\.\d\d[ ;]+)([\+q][qw\+\-]),/$1,$2/g;
   
   $text1  =~ /(.*?) /;
   my $kto = $1;
   my $b1   = {};
   my $b2  = {};
   $text   = $self->_konto_key($text, $b1, $kto);
   $text1  = $self->_konto_key($text1,$b2,$kto);

   my $buchungen1 = [];
   my $buchungen2 = [];
   foreach $o (sort (keys %$b1, keys %$b2)) {
      if ($mm1 eq "RELOAD") {
         if (substr($o,0,8) < $dd1) {
            delete($b2->{$o});
         } else {
            delete($b1->{$o});
         }
      }
      if    ((!(exists($b2->{$o})) or substr($o,0,8) < $dd1) and exists($b1->{$o})) {
         push(@$buchungen1,$b1->{$o}) if (substr($o,9,1) eq "1");
         push(@$buchungen2,$b1->{$o}) if (substr($o,9,1) eq "2");
      }
      elsif ((!(exists($b1->{$o})) or substr($o,0,8) >= $dd1) and exists($b2->{$o})) {
         push(@$buchungen1,$b2->{$o}) if (substr($o,9,1) eq "1");
         push(@$buchungen2,$b2->{$o}) if (substr($o,9,1) eq "2");
      }
      delete($b1->{$o});
      delete($b2->{$o});
   }
$main::XX = 1;
   $buchungen1 = join("\n",sort { $self->{'FIBU'}->sortbuchung($a) cmp $self->{'FIBU'}->sortbuchung($b) } @$buchungen1);
$main::XX = 0;
   $buchungen2 = join("\n",sort { $self->{'FIBU'}->sortbuchung($a) cmp $self->{'FIBU'}->sortbuchung($b) } @$buchungen2);



   $text =~ s/---INSERT1---\n/$buchungen1\n/s;
   $text =~ s/---INSERT2---\n/$buchungen2\n/s;
   while ($text =~ s/---INSERT\d---\n//gs) { 1; }
#print Dumper($buchungen1); exit;

   return($text);
   
}   


#***********************************************************************************

sub xx_konto_key {

   my $self = shift;
   my $text = shift;
   my $b    = shift;
   my $kto  = shift;

   my $o; my $bdatum; my $betrag; my $kto1; my $kto2; my $rem; my $o1;
   
   my $text1 = "";
   foreach $o (split(/\n/,$text)) {
      $rem = "";
      if ($o =~ /^(\d\d\d\d\d\d\d\d)[ ;]+(\-?\d+\.\d\d)[ ;]+(.*?)[ ;]+(.*?)[ ;]+(\-?\d+\.\d\d)[ ;]+(.*?)\s*$/) {
         $bdatum      = $1;
         $betrag      = $2;
         $kto1        = $3;
         $kto2        = $4;
         $rem         = $6;
         $rem         =~ s/^\s*(.*?)\s*$/$1/;
         $rem         =~ s/^(qq|qw|\+\+|\+\-) *//;
         $o1 = "1";
         if ($kto1 =~ s/^\-/$kto\-/ and ($kto1 =~ /\-XRXUXLXEX/ or $kto2 =~ /^\-/)) {
            $o1 = "2";
         }
         $b->{"$bdatum $o1 $kto1 $betrag $rem"} = $o;   #  Schluessel zum Identifizieren der Buchungen
         $text1 = $text1 . "---INSERT$o1---\n";
      } else {
         $text1 = $text1 . $o . "\n";
      }
   }
#print $text1; exit;
   return($text1);
   
}


#********************************************************************************************

1;

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net