From ef5b4b39f9ddcf2da56dc0e781f1c0c57c7e9744 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20B=C3=BCren?= Date: Thu, 21 Sep 2017 13:49:48 +0200 Subject: [PATCH] DATEV Format 2018 Backend, Musterdateien und Tests Technischer Einstieg: perldoc SL::DATEV::CSV --- SL/DATEV.pm | 150 ++++++- SL/DATEV/CSV.pm | 371 ++++++++++++++++++ doc/DATEV-2015/EXTF_Anlag-Buchungen.csv | 3 + doc/DATEV-2015/EXTF_Anlag-Filialen.csv | 3 + doc/DATEV-2015/EXTF_Buchungsstapel.csv | 40 ++ .../EXTF_Buchungstextkonstanten.csv | 9 + doc/DATEV-2015/EXTF_Div-Adressen.csv | 5 + .../EXTF_Sachkontobeschriftungen.csv | 178 +++++++++ doc/DATEV-2015/EXTF_Stammdaten-Deb-Kred.csv | 6 + doc/DATEV-2015/EXTF_Textschluessel.csv | 10 + .../EXTF_Wiederkehrende-Buchungen.csv | 4 + doc/DATEV-2015/EXTF_Zahlungsbedingungen.csv | 10 + t/datev/datev_format_2018.t | 181 +++++++++ t/datev/invoices.t | 70 +++- 14 files changed, 1025 insertions(+), 15 deletions(-) create mode 100644 SL/DATEV/CSV.pm create mode 100644 doc/DATEV-2015/EXTF_Anlag-Buchungen.csv create mode 100644 doc/DATEV-2015/EXTF_Anlag-Filialen.csv create mode 100644 doc/DATEV-2015/EXTF_Buchungsstapel.csv create mode 100644 doc/DATEV-2015/EXTF_Buchungstextkonstanten.csv create mode 100644 doc/DATEV-2015/EXTF_Div-Adressen.csv create mode 100644 doc/DATEV-2015/EXTF_Sachkontobeschriftungen.csv create mode 100644 doc/DATEV-2015/EXTF_Stammdaten-Deb-Kred.csv create mode 100644 doc/DATEV-2015/EXTF_Textschluessel.csv create mode 100644 doc/DATEV-2015/EXTF_Wiederkehrende-Buchungen.csv create mode 100644 doc/DATEV-2015/EXTF_Zahlungsbedingungen.csv create mode 100644 t/datev/datev_format_2018.t diff --git a/SL/DATEV.pm b/SL/DATEV.pm index d33692eaf..6f222b566 100644 --- a/SL/DATEV.pm +++ b/SL/DATEV.pm @@ -32,9 +32,11 @@ use strict; use SL::DBUtils; use SL::DATEV::KNEFile; +use SL::DATEV::CSV; use SL::DB; use SL::HTML::Util (); use SL::Locale::String qw(t8); +use SL::Iconv qw(convert); use Data::Dumper; use DateTime; @@ -345,7 +347,26 @@ sub kne_export { } sub csv_export { - die 'not yet implemented'; + my ($self) = @_; + my $result; + + die 'no exporttype set!' unless $self->has_exporttype; + + if ($self->exporttype == DATEV_ET_BUCHUNGEN) { + _csv_buchungsexport_to_file($self, data => $self->csv_buchungsexport); + + } elsif ($self->exporttype == DATEV_ET_STAMM) { + die 'will never be implemented'; + # 'Background: Export should only contain non + # DATEV-Charts and DATEV import will only + # import new Charts.' + } elsif ($self->exporttype == DATEV_ET_CSV) { + $result = $self->csv_export_for_tax_accountant; + } else { + die 'unrecognized exporttype'; + } + +return $result; } sub obe_export { @@ -800,9 +821,6 @@ sub datetofour { my ($day, $month, $year) = split(/\./, $date); - if ($day =~ /^0/) { - $day = substr($day, 1, 1); - } if (length($month) < 2) { $month = "0" . $month; } @@ -949,7 +967,7 @@ sub generate_datev_lines { $datev_data{belegfeld2} = $transaction->[$haben]->{'duedate'}; } } - + $datev_data{soll_haben_kennzeichen} = (0 < $umsatz) ? 'H' : 'S'; $datev_data{umsatz} = abs($umsatz); # sales invoices without tax have a different sign??? # Dies ist die einzige Stelle die datevautomatik auswertet. Was soll gesagt werden? @@ -1325,6 +1343,98 @@ sub csv_export_for_tax_accountant { return { download_token => $self->download_token, filenames => \@filenames }; } +sub csv_buchungsexport { + my $self = shift; + my %params = @_; + + $self->generate_datev_data(from_to => $self->fromto); + return if $self->errors; + + my @datev_lines = @{ $self->generate_datev_lines }; + + my @csv_columns = SL::DATEV::CSV->kivitendo_to_datev(); + my @csv_headers = SL::DATEV::CSV->generate_csv_header( + from => $self->from->ymd(''), + to => $self->to->ymd(''), + first_day_of_fiscal_year => $self->to->year . '0101', + locked => 0 + ); + + my @array_of_datev; + + # 2 Headers + push @array_of_datev, \@csv_headers; + push @array_of_datev, [ map { $_->{csv_header_name} } @csv_columns ]; + + foreach my $row ( @datev_lines ) { + my @current_datev_row; + + # format transformation + foreach (qw(belegfeld1 kost1 kost2)) { + $row->{$_} = SL::Iconv::convert("UTF-8", "CP1252", $row->{$_}) if $row->{$_}; + } + # shorten strings + if ($row->{belegfeld1}) { + $row->{buchungsbes} = $row->{belegfeld1} if $row->{belegfeld1}; + $row->{belegfeld1} = substr($row->{belegfeld1}, 0, 12); + $row->{buchungsbes} = substr($row->{buchungsbes}, 0, 60); + } + + $row->{datum} = datetofour($row->{datum}, 0); + $row->{kost1} = substr($row->{kost1}, 0, 8) if $row->{kost1}; + $row->{kost2} = substr($row->{kost2}, 0, 8) if $row->{kost2}; + + # , as decimal point and trim for UstID + $row->{umsatz} =~ s/\./,/; + $row->{ustid} =~ s/\s//g if $row->{ustid}; # trim whitespace + + foreach my $column (@csv_columns) { + if (exists $column->{max_length} && $column->{kivi_datev_name} ne 'not yet implemented') { + # check max length + die "Incorrect lenght of field" if length($row->{ $column->{kivi_datev_name} }) > $column->{max_length}; + } + if (exists $column->{valid_check} && $column->{kivi_datev_name} ne 'not yet implemented') { + # more checks + die "Not a valid value: '$row->{ $column->{kivi_datev_name} }'" . + " for '$column->{kivi_datev_name}' with amount '$row->{umsatz}'" + unless ($column->{valid_check}->($row->{ $column->{kivi_datev_name} })); + } + push @current_datev_row, $row->{ $column->{kivi_datev_name} }; + } + push @array_of_datev, \@current_datev_row; + } + return \@array_of_datev; +} + +sub _csv_buchungsexport_to_file { + my $self = shift; + my %params = @_; + + # we can definitely deny shorter data structures + croak ("Need at least 2 rows for header info") unless scalar @{ $params{data} } > 1; + + my $filename = "EXTF_DATEV_kivitendo" . $self->from->ymd() . '-' . $self->to->ymd() . ".csv"; + my @data = \$params{data}; + + # EXTF_Buchungsstapel.csv: ISO-8859 text, with very long lines, with CRLF line terminators + my $csv = Text::CSV_XS->new({ + binary => 1, + sep_char => ";", + always_quote => 1, + eol => "\r\n", + }) or die "Cannot use CSV: ".Text::CSV_XS->error_diag(); + + if ($csv->version >= 1.18) { + # get rid of stupid datev warnings in "Validity program" + $csv->quote_empty(1); + } + + my $csv_file = IO::File->new($self->export_path . '/' . $filename, '>:encoding(iso-8859-1)') or die "Can't open: $!"; + $csv->print($csv_file, $_) for @{ $params{data} }; + $csv_file->close; + + return { download_token => $self->download_token, filenames => $params{filename} }; +} sub DESTROY { clean_temporary_directories(); } @@ -1522,6 +1632,35 @@ Example: # ] # }; + +=item csv_buchungsexport + +Generates the CSV-Format data for the CSV DATEV export and returns +an 2-dimensional array as an array_ref. + +Requires $self->fromto for a valid DATEV header. + +Furthermore we assume that the first day of the fiscal year is +the first of January and we cannot guarantee that our data in kivitendo +is locked, that means a booking cannot be modified after a defined (vat tax) +period. +Some validity checks (max_length and regex) will be done if the +data structure contains them and the field is defined. + +To add or alter the structure of the data take a look at SL::DATEV::CSV.pm + +=item _csv_buchungsexport_to_file + +Generates one downloadable csv file wrapped in a zip archive. +Basically this method is just a thin wrapper for TEXT::CSV_XS.pm + +Generates a CSV-file with the same encodings as defined in DATEV Format CSV 2015: + $ file + $ EXTF_Buchungsstapel.csv: ISO-8859 text, with very long lines, with CRLF line terminators + +Usage: _csv_buchungsexport_to_file($self, data => $self->csv_buchungsexport); + + =back =head1 ATTRIBUTES @@ -1650,6 +1789,7 @@ OBE export is currently not implemented. =head1 SEE ALSO L +L =head1 AUTHORS diff --git a/SL/DATEV/CSV.pm b/SL/DATEV/CSV.pm new file mode 100644 index 000000000..9792d830d --- /dev/null +++ b/SL/DATEV/CSV.pm @@ -0,0 +1,371 @@ +package SL::DATEV::CSV; + +use strict; + +use SL::Locale::String qw(t8); +use SL::DB::Datev; + +use Carp; +use DateTime; + + +my @kivitendo_to_datev = ( + { + kivi_datev_name => 'umsatz', + csv_header_name => t8('Transaction Value'), + max_length => 13, + type => 'Value', + valid_check => sub { return (shift =~ m/^\d{1,10}(\,\d{1,2})?$/) }, + }, + { + kivi_datev_name => 'soll_haben_kennzeichen', + csv_header_name => t8('Debit/Credit Label'), + max_length => 1, + type => 'Text', + valid_check => sub { return (shift =~ m/^(S|H)$/) }, + }, + { + kivi_datev_name => 'waehrung', + csv_header_name => t8('Transaction Value Currency Code'), + max_length => 3, + type => 'Text', + valid_check => sub { return (shift =~ m/^[A-Z]{3}$/) }, + }, + { + kivi_datev_name => 'wechselkurs', + csv_header_name => t8('Exchange Rate'), + max_length => 11, + type => 'Number', + valid_check => sub { return (shift =~ m/^[0-9]*\.?[0-9]*$/) }, + }, + { + kivi_datev_name => 'not yet implemented', + csv_header_name => t8('Base Transaction Value'), + }, + { + kivi_datev_name => 'not yet implemented', + csv_header_name => t8('Base Transaction Value Currency Code'), + }, + { + kivi_datev_name => 'konto', + csv_header_name => t8('Account'), + max_length => 9, # May contain a maximum of 8 or 9 digits -> perldoc + type => 'Account', + valid_check => sub { return (shift =~ m/^[0-9]{4,9}$/) }, + }, + { + kivi_datev_name => 'gegenkonto', + csv_header_name => t8('Contra Account'), + max_length => 9, # May contain a maximum of 8 or 9 digits -> perldoc + type => 'Account', + valid_check => sub { return (shift =~ m/^[0-9]{4,9}$/) }, + }, + { + kivi_datev_name => 'buchungsschluessel', + csv_header_name => t8('Posting Key'), + max_length => 2, + type => 'Text', + valid_check => sub { return (shift =~ m/^[0-9]{0,2}$/) }, + }, + { + kivi_datev_name => 'datum', + csv_header_name => t8('Invoice Date'), + max_length => 4, + type => 'Date', + valid_check => sub { return (shift =~ m/^[0-9]{4}$/) }, + }, + { + kivi_datev_name => 'belegfeld1', + csv_header_name => t8('Invoice Field 1'), + max_length => 12, + type => 'Text', + valid_check => sub { my $text = shift; check_encoding($text); }, + }, + { + kivi_datev_name => 'not yet implemented', + csv_header_name => t8('Invoice Field 2'), + max_length => 12, + type => 'Text', + valid_check => sub { return (shift =~ m/[ -~]{1,12}/) }, + }, + { + kivi_datev_name => 'not yet implemented', + csv_header_name => t8('Discount'), + type => 'Value', + }, + { + kivi_datev_name => 'buchungsbes', + csv_header_name => t8('Posting Text'), + max_length => 60, + type => 'Text', + valid_check => sub { my $text = shift; return 1 unless $text; check_encoding($text); }, + }, # pos 14 + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + csv_header_name => t8('Link to invoice'), + max_length => 210, # DMS Application shortcut and GUID + # Example: "BEDI" + # "8DB85C02-4CC3-FF3E-06D7-7F87EEECCF3A". + }, # pos 20 + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'not yet implemented', + }, + { + kivi_datev_name => 'kost1', + csv_header_name => t8('Cost Center'), + max_length => 8, + type => 'Text', + valid_check => sub { my $text = shift; return 1 unless $text; check_encoding($text); }, + }, # pos 37 + { + kivi_datev_name => 'kost2', + csv_header_name => t8('Cost Center'), + max_length => 8, + type => 'Text', + valid_check => sub { my $text = shift; return 1 unless $text; check_encoding($text); }, + }, # pos 38 + { + kivi_datev_name => 'not yet implemented', + csv_header_name => t8('KOST Quantity'), + max_length => 9, + type => 'Number', + valid_check => sub { return (shift =~ m/^[0-9]{0,9}$/) }, + }, # pos 39 + { + kivi_datev_name => 'ustid', + csv_header_name => t8('EU Member State and VAT ID Number'), + max_length => 15, + type => 'Text', + valid_check => sub { + my $ustid = shift; + return 1 unless defined($ustid); + return ($ustid =~ m/^CH|^[A-Z]{2}\w{5,13}$/); + }, + }, # pos 40 + ); + +sub check_encoding { + use Encode qw( decode ); + # counter test: arabic doesnt work: ݐ + my $test = shift; + return undef unless $test; + if (eval { + decode('Windows-1252', $test, Encode::FB_CROAK|Encode::LEAVE_SRC); + 1 + }) { + return 1; + } +} + +sub kivitendo_to_datev { + my $self = shift; + + my $entries = scalar (@kivitendo_to_datev); + push @kivitendo_to_datev, { kivi_datev_name => 'not yet implemented' } for 1 .. (116 - $entries); + return @kivitendo_to_datev; +} + +sub generate_csv_header { + my ($self, %params) = @_; + + # we need from and to in YYYYDDMM + croak "Wrong format for from" unless $params{from} =~ m/^[0-9]{8}$/; + croak "Wrong format for to" unless $params{to} =~ m/^[0-9]{8}$/; + + # who knows if we want locking and when our fiscal year starts + croak "Wrong state of locking" unless $params{locked} =~ m/(0|1)/; + croak "No startdate of fiscal year" unless $params{first_day_of_fiscal_year} =~ m/^[0-9]{8}$/; + + + # we can safely set these defaults + my $today = DateTime->now(time_zone => "local"); + my $created_on = $today->ymd('') . $today->hms('') . '000'; + my $length_of_accounts = length(SL::DB::Manager::Chart->get_first(where => [charttype => 'A'])->accno) // 4; + my $default_curr = SL::DB::Default->get_default_currency; + + # datev metadata and the string lenght limits + my %meta_datev; + my %meta_datev_to_valid_length = ( + beraternr => 7, + beratername => 25, + mandantennr => 5, + ); + + my $datev = SL::DB::Manager::Datev->get_first(); + + while (my ($k, $v) = each %meta_datev_to_valid_length) { + $meta_datev{$k} = substr $datev->{$k}, 0, $v; + } + + my @header = ( + "EXTF", "300", 21, "Buchungsstapel", 7, $created_on, "", "ki", + "kivitendo-datev", "", $meta_datev{beraternr}, $meta_datev{mandantennr}, + $params{first_day_of_fiscal_year}, $length_of_accounts, + $params{from}, $params{to}, "", "", 1, "", $params{locked}, + $default_curr, "", "", "","" + ); + + return @header; +} +1; + +__END__ + +=encoding utf-8 + +=head1 NAME + +SL::DATEV::CSV - kivitendo DATEV CSV Specification + +=head1 SYNOPSIS + +The parsing of the DATEV CSV is index based, therefore the correct +column must be present at the corresponding index, i.e.: + Index 2 + Field Name : Debit/Credit Label + Valid Values : 'S' or 'H' + Length: : 1 + +The columns in C<@kivi_datev> are in the correct order and the +specific attributes are defined as a key value hash list for each entry. + +The key names are the english translation according to the DATEV specs +(Leitfaden DATEV englisch). + +The two attributes C and C are also set as specified +by the DATEV specs. + +To link the structure to kivitendo data, each entry has the attribute C +which is by convention the key name as generated by DATEV->generate_datev_data. +A value of C<'not yet implemented'> indicates that this field has no +corresponding kivitendo data and will be given an empty value by DATEV->csv_buchungsexport. + + +=head1 SPECIFICATION + +This is an excerpt of the DATEV Format 2015 Specification for CSV-Header +and CSV-Data lines. + +=head2 FILENAME + +The filename is subject to the following restrictions: +1. The filename must begin with the prefix DTVF_ or EXTF_. +2. The filename must end with .csv. + +When exporting from or importing into DATEV applications, the filename is +marked with the prefix "DTVF_" (DATEV Format). +The prefix "DTVF_" is reserved for DATEV applications. +If you are using a third-party application to create a file in the DATEV format +that you want to import using batch processing, use the prefix "EXTF_" +(External Format). + +=head2 File Structure + +The file structure of the text file exported/imported is defined as follows + +Line 1: Header (serves to assist in the interpretation of the following data) + +Line 2: Headline (headline of the user data) + +Line 3 – n: Records (user data) + +For an valid example file take a look at doc/DATEV-2015/EXTF_Buchungsstapel.csv + + +=head2 Detailed Description + +Line 1 must contain 11 fields. + +Line 2 must contain 26 fields. + +Line 3 - n: must contain 116 fields, a smaller subset is mandatory. + +=head1 FUNCTIONS + +=over 4 + +=item check_encoding + +Helper function, returns true if a string is not empty and cp1252 encoded + +=item generate_csv_header(from => 'YYYYDDMM', to => 'YYYYDDMM', locked => 0, + first_day_of_fiscal_year => 'YYYYDDMM') + +Mostly all other header information are constants or metadata loaded +from SL::DB::Datev.pm. + +Returns the first two entries for the header (see above: File Structure) +as an array. + +All params are mandatory: +C, C +and C have to be in YYYYDDMM date string +format. +Furthermore C needs to be a boolean in number format (0|1). + + +=item kivitendo_to_datev + +Returns the data structure C<@datev_data> as an array + +=back diff --git a/doc/DATEV-2015/EXTF_Anlag-Buchungen.csv b/doc/DATEV-2015/EXTF_Anlag-Buchungen.csv new file mode 100644 index 000000000..12d51fd73 --- /dev/null +++ b/doc/DATEV-2015/EXTF_Anlag-Buchungen.csv @@ -0,0 +1,3 @@ +"EXTF";510;63;"Anlagenbuchführung - Buchungssatzvorlagen";1;20150729103107277;;"RE";"Admin";"";29098;55003;20150101;4;;;"";"";;;;"";;"";;;"";;;"";"" +Bereich;Kontonummer;Buchungssatztyp;KontonummerSoll;KontonummerHaben;Buchungstext +30;400;"N";4830;400;"Normalabschreibung" diff --git a/doc/DATEV-2015/EXTF_Anlag-Filialen.csv b/doc/DATEV-2015/EXTF_Anlag-Filialen.csv new file mode 100644 index 000000000..3f75ae9b4 --- /dev/null +++ b/doc/DATEV-2015/EXTF_Anlag-Filialen.csv @@ -0,0 +1,3 @@ +"EXTF";510;62;"Anlagenbuchführung - Filialen";1;20150729103107277;;"RE";"Admin";"";29098;55003;20150101;4;;;"";"";;;;"";;"";;;"";;;"";"" +Filialnummer;Filialbezeichnung +1;"Hauptbetrieb" diff --git a/doc/DATEV-2015/EXTF_Buchungsstapel.csv b/doc/DATEV-2015/EXTF_Buchungsstapel.csv new file mode 100644 index 000000000..debb0607c --- /dev/null +++ b/doc/DATEV-2015/EXTF_Buchungsstapel.csv @@ -0,0 +1,40 @@ +"EXTF";510;21;"Buchungsstapel";7;20150729093158705;;"SV";"Admin";"";55003;63021;20160101;4;20160101;20160331;"Kasse";"";1;0;0;"EUR";;"KP";;"";;;"";""; +Umsatz (ohne Soll/Haben-Kz);Soll/Haben-Kennzeichen;WKZ Umsatz;Kurs;Basis-Umsatz;WKZ Basis-Umsatz;Konto;Gegenkonto (ohne BU-Schlüssel);BU-Schlüssel;Belegdatum;Belegfeld 1;Belegfeld 2;Skonto;Buchungstext;Postensperre;Diverse Adressnummer;Geschäftspartnerbank;Sachverhalt;Zinssperre;Beleglink;Beleginfo - Art 1;Beleginfo - Inhalt 1;Beleginfo - Art 2;Beleginfo - Inhalt 2;Beleginfo - Art 3;Beleginfo - Inhalt 3;Beleginfo - Art 4;Beleginfo - Inhalt 4;Beleginfo - Art 5;Beleginfo - Inhalt 5;Beleginfo - Art 6;Beleginfo - Inhalt 6;Beleginfo - Art 7;Beleginfo - Inhalt 7;Beleginfo - Art 8;Beleginfo - Inhalt 8;KOST1 - Kostenstelle;KOST2 - Kostenstelle;Kost-Menge;EU-Land u. UStID;EU-Steuersatz;Abw. Versteuerungsart;Sachverhalt L+L;Funktionsergänzung L+L;BU 49 Hauptfunktionstyp;BU 49 Hauptfunktionsnummer;BU 49 Funktionsergänzung;Zusatzinformation - Art 1;Zusatzinformation- Inhalt 1;Zusatzinformation - Art 2;Zusatzinformation- Inhalt 2;Zusatzinformation - Art 3;Zusatzinformation- Inhalt 3;Zusatzinformation - Art 4;Zusatzinformation- Inhalt 4;Zusatzinformation - Art 5;Zusatzinformation- Inhalt 5;Zusatzinformation - Art 6;Zusatzinformation- Inhalt 6;Zusatzinformation - Art 7;Zusatzinformation- Inhalt 7;Zusatzinformation - Art 8;Zusatzinformation- Inhalt 8;Zusatzinformation - Art 9;Zusatzinformation- Inhalt 9;Zusatzinformation - Art 10;Zusatzinformation- Inhalt 10;Zusatzinformation - Art 11;Zusatzinformation- Inhalt 11;Zusatzinformation - Art 12;Zusatzinformation- Inhalt 12;Zusatzinformation - Art 13;Zusatzinformation- Inhalt 13;Zusatzinformation - Art 14;Zusatzinformation- Inhalt 14;Zusatzinformation - Art 15;Zusatzinformation- Inhalt 15;Zusatzinformation - Art 16;Zusatzinformation- Inhalt 16;Zusatzinformation - Art 17;Zusatzinformation- Inhalt 17;Zusatzinformation - Art 18;Zusatzinformation- Inhalt 18;Zusatzinformation - Art 19;Zusatzinformation- Inhalt 19;Zusatzinformation - Art 20;Zusatzinformation- Inhalt 20;Stück;Gewicht;Zahlweise;Forderungsart;Veranlagungsjahr;Zugeordnete Fälligkeit;Skontotyp;Auftragsnummer;Buchungstyp;Ust-Schlüssel (Anzahlungen);EU-Land (Anzahlungen);Sachverhalt L+L (Anzahlungen);EU-Steuersatz (Anzahlungen);Erlöskonto (Anzahlungen);Herkunft-Kz;Leerfeld;KOST-Datum;Mandatsreferenz;Skontosperre;Gesellschaftername;Beteiligtennummer;Identifikationsnummer;Zeichnernummer;Postensperre bis;Bezeichnung SoBil-Sachverhalt;Kennzeichen SoBil-Buchung;Festschreibung;Leistungsdatum;Datum Zuord.Steuerperiode +100,18;"S";"";;;"";48400;8401;"";3101;"";"";;"Test Anzahlung";;"";1;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"50";"";;"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";2012;;1;"Projekt 4711";"AG";3;"";;;8070;"WK";"";;"";;"";;"";"";;"";;1;; +10,00;"S";"";;;"";48220;8400;"";3103;"";"";;"Normalabschr. immater. VermG";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"90";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;10022016; +64083;"S";"";;;"";4400;85;"";3101;"";"";;"Normalabschreibung Gebäude";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"50";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;0;; +3584,56;"S";"";;;"";4831;100;"";3101;"";"";;"Normalabschreibung Gebäude";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"50";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;0;; +3745,56;"S";"";;;"";4830;210;"";3101;"";"";;"Normalabschreibung Sachanlagen";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"50";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +531,16;"S";"";;;"";4832;320;"";3101;"";"";;"Normalabschreibung Kfz";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"20";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";0;"";;;0;"WK";"";;"";;"";;"";"";;"";;1;; +4979,65;"H";"";;;"";8400;30200;"";0902;"201202010";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"202";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +11687,62;"H";"";;;"";8120;40000;"";0902;"201202011";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"299";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +13968,83;"H";"";;;"";8125;40100;"";1602;"201202023";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"299";"889";5;"DE133546770";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +11807,63;"H";"";;;"";8125;40100;"";1702;"201202024";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"299";"";;"DE133546770";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +4120,51;"H";"";;;"";8405;30100;"";1702;"201202025";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"201";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +16585,28;"H";"";;;"";8405;10200;"";1702;"201202026";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"202";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +15301,67;"H";"";;;"";8400;10300;"";2002;"201202027";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"201";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +7404,94;"H";"";;;"";8400;60391;"";2102;"201202028";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"199";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +66976,12;"H";"";;;"";8407;10400;"";2202;"201202029";"";;"";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"201";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +118,55;"H";"";;;"";1000;1369;"";0202;"4";"";;"Test-Shop";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"Beleg fehlt";"Post";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +26,87;"H";"";;;"";1000;4930;"9";0102;"";"";;"Schreibwaren";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"90";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +460,00;"S";"";;;"";1000;1360;"";0702;"";"";;"Kasseneinlage";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +124,00;"H";"CHF";1,240402;100,00;"EUR";21100;8050;"";2702;"";"";;"Umsatz Schweiz";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +70,96;"H";"";;;"";1100;4530;"9";2702;"";"";;"Diesel";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"20";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +17107,00;"S";"";;;"";31100;8125;"";2702;"201202007";"";;"Ausland EU";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"520";"45";30;"ATU36251489";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";0;"";;;0;"WK";"";;"";;"";;"";"";;"";;0;; +5856,00;"H";"";;;"";1100;980;"";2802;"";"";;"Gebäudeversicherung 03/12-02/13";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +70,27;"H";"";;;"";1100;4530;"9";2802;"";"";;"Benzin";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"20";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +1763,58;"H";"";;;"";1100;4580;"9";2802;"";"";;"Leasing Van";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"20";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +1190,00;"H";"";;;"";8050;10100;"3";1403;"AR1234";"";;"Aufteilung AR ohne Automatikkonto";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +700,00;"S";"";;;"";8050;8060;"";1403;"AR1234";"";;"Aufteilung auf Erlöskonto";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +300,00;"S";"";;;"";8050;8070;"";1403;"AR1234";"";;"Aufteilung auf Erlöskonto";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +1190,00;"H";"";;;"";8400;10100;"";1403;"AR2345";"";;"Aufteilung AR mit Automatikkonto";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +600,00;"S";"";;;"";8400;8401;"40";1403;"AR2345";"";;"Auftreilung auf Erlöskonto";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +400,00;"S";"";;;"";8400;8405;"40";1403;"AR2345";"";;"Auftreilung auf Erlöskonto";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +2500,00;"S";"";;;"";10100;8400;"";0103;"AR-78/13";"160316";;"Holzlieferung";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +2500,00;"S";"";;;"";1200;10100;"";0103;"AR-78/13";"";;"Bezahlung";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +119,00;"S";"";;;"";10100;8400;"";0103;"AR-456/13";"";;"Rechnung mit Skontogewährung";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +116,62;"S";"";;;"";1200;10100;"";0103;"AR-456/13";"";2,38;"Zahlung mit 2% Skonto";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +35,00;"S";"";;;"";10001;8400;"";0103;"AR-2013";"";;"falscher Debitor";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +35,00;"H";"";;;"";10001;8400;"20";0103;"AR-2013";"";;"Berichtigung";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +35,00;"S";"";;;"";10100;8400;"";0103;"AR-2013";"";;"richtiger Debitor";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; +488,00;"H";"";;;"";980;4360;"";0101;"";"";;"Gebäudeversicherung";;"";;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"10";"";;"";;"";;;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;;"";;;;"";"";;"";;;;"WK";"";;"";;"";;"";"";;"";;1;; diff --git a/doc/DATEV-2015/EXTF_Buchungstextkonstanten.csv b/doc/DATEV-2015/EXTF_Buchungstextkonstanten.csv new file mode 100644 index 000000000..2700c8ae0 --- /dev/null +++ b/doc/DATEV-2015/EXTF_Buchungstextkonstanten.csv @@ -0,0 +1,9 @@ +"EXTF";510;67;"Buchungstextkonstanten";1;20150729093349782;;"RE";"Admin";"";29098;55003;20150101;4;;;"";"";;;;"";;"";;;"";;;"";"" +Nummer;Buchungstext +10;"Postwertzeichen" +11;"Bürobedarf" +20;"Benzin" +21;"Diesel" +22;"Kundendienst" +90;"Kasseneinlage" +91;"für Kasse" diff --git a/doc/DATEV-2015/EXTF_Div-Adressen.csv b/doc/DATEV-2015/EXTF_Div-Adressen.csv new file mode 100644 index 000000000..53d328549 --- /dev/null +++ b/doc/DATEV-2015/EXTF_Div-Adressen.csv @@ -0,0 +1,5 @@ +"EXTF";510;48;"Diverse Adressen";2;20150729103107277;;"RE";"Admin";"";55003;63021;20150101;4;;;"";"";;;;"";;"";;"";;;"";""; +Adressnummer;Konto;Anrede;Name (Adressattyp Unternehmen);Unternehmensgegenstand;Kurzbezeichnung;Name (Adressattyp natürl. Person);Vorname (Adressattyp natürl. Person);Name (Adressattyp keine Angabe);Adressattyp;Titel/Akad. Grad;Adelstitel;Namensvorsatz;Abweichende Anrede;Adressart;Straße;Postfach;Postleitzahl;Ort;Land;Versandzusatz;Adresszusatz;Abw. Zustellbezeichnung 1;Abw. Zustellbezeichnung 2;Kennz. Korrespondenzadresse;Adresse Gültig von;Adresse Gültig bis;Abweichende Anrede (Rechnungsadresse);Adressart (Rechnungsadresse);Straße (Rechnungsadresse);Postfach (Rechnungsadresse);Postleitzahl (Rechnungsadresse);Ort (Rechnungsadresse);Land (Rechnungsadresse);Versandzusatz (Rechnungsadresse);Adresszusatz (Rechnungsadresse);Abw. Zustellbezeichnung 1 (Rechnungsadresse);Abw. Zustellbezeichnung 2 (Rechnungsadresse);Adresse Gültig von (Rechnungsadresse);Adresse Gültig bis (Rechnungsadresse);Telefon;Bemerkung (Telefon);Telefon GL;Bemerkung (Telefon GL);E-Mail;Bemerkung (E-Mail);Internet;Bemerkung (Internet);Fax;Bemerkung (Fax);Sonstige;Bemerkung (Sonstige);Bankleitzahl 1;Bankbezeichnung 1;Bank-Kontonummer 1;Länderkennzeichen 1;IBAN-Nr. 1;Leerfeld;SWIFT-Code 1;Abw. Kontoinhaber 1;Kennz. Hauptbankverb. 1;Bankverb 1 Gültig von;Bankverb 1 Gültig bis;Bankleitzahl 2;Bankbezeichnung 2;Bank-Kontonummer 2;Länderkennzeichen 2;IBAN-Nr. 2;Leerfeld;SWIFT-Code 2;Abw. Kontoinhaber 2;Kennz. Hauptbankverb. 2;Bankverb 2 Gültig von;Bankverb 2 Gültig bis;Bankleitzahl 3;Bankbezeichnung 3;Bank-Kontonummer 3;Länderkennzeichen 3;IBAN-Nr. 3;Leerfeld;SWIFT-Code 3;Abw. Kontoinhaber 3;Kennz. Hauptbankverb. 3;Bankverb 3 Gültig von;Bankverb 3 Gültig bis;Bankleitzahl 4;Bankbezeichnung 4;Bank-Kontonummer 4;Länderkennzeichen 4;IBAN-Nr. 4;Leerfeld;SWIFT-Code 4;Abw. Kontoinhaber 4;Kennz. Hauptbankverb. 4;Bankverb 4 Gültig von;Bankverb 4 Gültig bis;Bankleitzahl 5;Bankbezeichnung 5;Bank-Kontonummer 5;Länderkennzeichen 5;IBAN-Nr. 5;Leerfeld;SWIFT-Code 5;Abw. Kontoinhaber 5;Kennz. Hauptbankverb. 5;Bankverb 5 Gültig von;Bankverb 5 Gültig bis;Bankleitzahl 6;Bankbezeichnung 6;Bank-Kontonummer 6;Länderkennzeichen 6;IBAN-Nr. 6;Leerfeld;SWIFT-Code 6;Abw. Kontoinhaber 6;Kennz. Hauptbankverb. 6;Bankverb 6 Gültig von;Bankverb 6 Gültig bis;Bankleitzahl 7;Bankbezeichnung 7;Bank-Kontonummer 7;Länderkennzeichen 7;IBAN-Nr. 7;Leerfeld;SWIFT-Code 7;Abw. Kontoinhaber 7;Kennz. Hauptbankverb. 7;Bankverb 7 Gültig von;Bankverb 7 Gültig bis;Bankleitzahl 8;Bankbezeichnung 8;Bank-Kontonummer 8;Länderkennzeichen 8;IBAN-Nr. 8;Leerfeld;SWIFT-Code 8;Abw. Kontoinhaber 8;Kennz. Hauptbankverb. 8;Bankverb 8 Gültig von;Bankverb 8 Gültig bis;Bankleitzahl 9;Bankbezeichnung 9;Bank-Kontonummer 9;Länderkennzeichen 9;IBAN-Nr. 9;Leerfeld;SWIFT-Code 9;Abw. Kontoinhaber 9;Kennz. Hauptbankverb. 9;Bankverb 9 Gültig von;Bankverb 9 Gültig bis;Bankleitzahl 10;Bankbezeichnung 10;Bank-Kontonummer 10;Länderkennzeichen 10;IBAN-Nr. 10;Leerfeld;SWIFT-Code 10;Abw. Kontoinhaber 10;Kennz. Hauptbankverb. 10;Bankverb 10 Gültig von;Bankverb 10 Gültig bis;Kundennummer;Ansprechpartner;Vertreter;Sachbearbeiter;Briefanrede;Grußformel;Sprache;Ausgabeziel;Indiv. Feld 1;Indiv. Feld 2;Indiv. Feld 3;Indiv. Feld 4;Indiv. Feld 5;Indiv. Feld 6;Indiv. Feld 7;Indiv. Feld 8;Indiv. Feld 9;Indiv. Feld 10;Mandatsreferenz 1;Mandatsreferenz 2;Mandatsreferenz 3;Mandatsreferenz 4;Mandatsreferenz 5;Mandatsreferenz 6;Mandatsreferenz 7;Mandatsreferenz 8;Mandatsreferenz 9;Mandatsreferenz 10;Nummer Fremdsystem +"DIV500";30000;"Firma";"Testmöbel GmbH";"";"Testmöbel GmbH";"";"";"";"2";"";"";"";"";"STR";"Feldweg 28";"";"90409";"Nürnberg";"DE";"";"";"";"";1;;;"";"";"";"";"";"";"";"";"";"";"";;;"+49 911 12345678";"";"+49 911 12345678";"";"test@testmöbel.de";"";"www.testmöbel.de";"";"+49 911 987654321";"";"";"";"76069512";"Raiffbk Knoblauchsland";"1122334455";"DE";"";"0";"GENODEF1N08";"Herr Muster";"1";01012013;31122013;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"KDN 75";"Herr Müllermuster";"Frau Mustermann";"Herr Testmann";"";"Mit freundlichen Grüßen";1;3;"kein Muster";"Beispiel";"Testeingabe";"";"";"";"";"";"";"Muster vorhanden";"";"";"";"";"";"";"";"";"";"";"" +"DIV600";30000;"Herrn";"";"";"Mustermann";"Mustermann";"";"";"1";"Dr.";"Baron";"zu";"";"STR";"Musterweg 5";"";"90000";"Nürnberg";"DE";"Nicht nachsenden";"";"";"";1;;;"";"";"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"" +"DIV700";30000;"Frau";"";"";"Testmann, Elke";"Testmann";"Elke";"";"1";"";"Landgräfin";"vom und zu";"";"STR";"Wiesenweg 125";"";"90600";"Fürth";"DE";"Bei Umzug bitte mit neuer Anschrift zurück";"";"";"";1;;;"";"";"";"";"";"";"";"";"";"";"";;;"+49 911 505050";"immer erreichbar";"+49 911 505050";"immer erreichbar";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"76000000";"BBk Nürnberg";"998877";"DE";"DE83760000000000998877";"1";"MARKDEF1760";"Frau Beispiel";"1";01012013;12122013;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"Mit den besten Empfehlungen";4;1;"nur zum Test";"nur als Beispiel";"";"nur als Beispiel";"";"nur als Beispiel";"nur zum Test";"nur zum Test";"";"nur als Beispiel";"";"";"";"";"";"";"";"";"";"";"" diff --git a/doc/DATEV-2015/EXTF_Sachkontobeschriftungen.csv b/doc/DATEV-2015/EXTF_Sachkontobeschriftungen.csv new file mode 100644 index 000000000..0984bdf25 --- /dev/null +++ b/doc/DATEV-2015/EXTF_Sachkontobeschriftungen.csv @@ -0,0 +1,178 @@ +"EXTF";510;20;"Kontenbeschriftungen";2;;;"RE";"Admin";"";55003;63021;20150101;4;;;"";"";;;;"";;"";;"";;;"";""; +Konto;Kontobeschriftung;SprachId +27;"EDV-Software";"de-DE" +35;"Geschäfts- oder Firmenwert";"de-DE" +40;"Verschmorungsmehrwertt";"de-DE" +44;"EDV-Software";"de-DE" +65;"Grundstück Schleifmustermühle 25";"de-DE" +85;"Grundstückswert bebauter Grundstücke";"de-DE" +100;"Fabrikbauten";"de-DE" +210;"Maschinen";"de-DE" +320;"PKW";"de-DE" +350;"LKW";"de-DE" +400;"Betriebsausstattung";"de-DE" +420;"Büroeinrichtung";"de-DE" +440;"Werkzeuge";"de-DE" +480;"Geringwertige Wirtschaftsgüter";"de-DE" +485;"Wirtschaftsgüter Sammelposten";"de-DE" +525;"Wertpapiere des Anlagevermögens";"de-DE" +690;"Darlehen 1 Deutsche Bank";"de-DE" +691;"Darlehen 2 Deutsche Bank";"de-DE" +692;"Darlehen Postbank";"de-DE" +693;"Darlehen Deutsche Bank";"de-DE" +694;"Darlehen Deutsche Bank";"de-DE" +695;"Ratenkredit Pritschenwagen";"de-DE" +696;"Darlehen Schleifmustermühle 25";"de-DE" +860;"Gewinnvortrag vor Verwendung";"de-DE" +980;"Aktive Rechnungsabgrenzung";"de-DE" +986;"Damnum/Disagio";"de-DE" +992;"Abgrenzung unterjährige AfA für BWA";"de-DE" +1000;"Kasse";"de-DE" +1010;"Kasse Werkstatt";"de-DE" +1100;"Postbank Nürnberg";"de-DE" +1111;"Fremdwährung1";"de-DE" +1200;"Deutsche Bank";"de-DE" +1201;"HypoVereinsbank Nürnberg";"de-DE" +1202;"Deutsche Bank";"de-DE" +1203;"USD-Bank";"de-DE" +1210;"Dresdner Bank";"de-DE" +1220;"SchmidtBank";"de-DE" +1230;"Sparkasse";"de-DE" +1250;"Deutsche Bank";"de-DE" +1260;"Stadtspk. Nürnberg";"de-DE" +1270;"Commerzbank Nbg.";"de-DE" +1290;"Finanzmittelanlagen kurzfr. Disposition";"de-DE" +1361;"Geldtransit";"de-DE" +1369;"Unklare Posten";"de-DE" +1400;"Forderungen aus Lieferungen u.Leistung";"de-DE" +1447;"Forderg. aus stfr., n. steuerbaren L+L";"de-DE" +1500;"Sonstige Vermögensgegenstände";"de-DE" +1540;"Steuerüberzahlungen";"de-DE" +1549;"Körperschaftsteuerrückforderung";"de-DE" +1571;"Abziehbare Vorsteuer 7%";"de-DE" +1574;"Abziehbare Vorsteuer aus EU-Erwerb 19%";"de-DE" +1576;"Abziehbare Vorsteuer 19%";"de-DE" +1577;"Abziehbare Vorsteuer § 13b UStG 19%";"de-DE" +1593;"Verrechnung erhaltene Anzahlungen";"de-DE" +1600;"Verbindl. aus Lieferungen u. Leistungen";"de-DE" +1700;"Sonstige Verbindlichkeiten";"de-DE" +1710;"Erhaltene Anzahlungen";"de-DE" +1718;"Erhaltene Anzahlungen 19% USt";"de-DE" +1736;"Verbindl. Steuern und Abgaben";"de-DE" +1741;"Verbindlichk. Lohn- und Kirchensteuer";"de-DE" +1774;"Umsatzsteuer aus EU-Erwerb 19%";"de-DE" +1776;"Umsatzsteuer 19%";"de-DE" +1780;"Umsatzsteuervorauszahlungen";"de-DE" +1781;"Umsatzsteuervorauszahlungen 1/11";"de-DE" +1787;"Umsatzsteuer nach § 13b UStG 19%";"de-DE" +2110;"Zinsaufwendungen f.kfr.Verbindlichkeit.";"de-DE" +2120;"Zinsaufwendungen f.lfr.Verbindlichkeit.";"de-DE" +2126;"Zinsen zur Finanzierung Anlagevermögen";"de-DE" +2200;"Körperschaftsteuer";"de-DE" +2208;"Solidaritätszuschlag";"de-DE" +2315;"Abgänge Sachanlagen Restbuchwert";"de-DE" +2375;"Grundsteuer";"de-DE" +2381;"Spenden kulturelle Zwecke";"de-DE" +2382;"Spenden mildtätige Zwecke";"de-DE" +2650;"Sonstige Zinsen und ähnliche Erträge";"de-DE" +2670;"Diskonterträge";"de-DE" +2701;"Sonstige Erträge Mahngebühren";"de-DE" +2702;"Sonstige Erträge Zinsen";"de-DE" +2860;"Gewinnvortrag nach Verwendung";"de-DE" +3100;"Fremdleistungen";"de-DE" +3123;"Sonst. Leistung EU 19% Vorst., 19% USt";"de-DE" +3300;"Wareneingang 7% Vorsteuer";"de-DE" +3400;"Wareneingang Furnier";"de-DE" +3401;"Wareneingang Spanplatten";"de-DE" +3402;"Wareneingang Farben und Lacke";"de-DE" +3405;"Wareneingang beschichtete Platten";"de-DE" +3406;"Wareneingang Modellbau";"de-DE" +3407;"Wareneingang Messebau";"de-DE" +3409;"Sonstiger Wareneingang";"de-DE" +3425;"EU-Erwerb 19% Vorsteuer und 19% USt";"de-DE" +3736;"Erhaltene Skonti 19% Vorsteuer";"de-DE" +3748;"Erhalt. Skonti EU-Erwerb 19% Vorst/USt";"de-DE" +3961;"Bestandsveränd. Furniere";"de-DE" +3962;"Bestandsveränd. Spanplatten";"de-DE" +3963;"Bestandsveränd. Farben und Lacke";"de-DE" +3964;"Bestandsveränd. beschichtete Platten";"de-DE" +3965;"Bestandsveränd. Sonstige RHB-Stoffe";"de-DE" +3971;"Bestand Furniere";"de-DE" +3972;"Bestand Spanplatten";"de-DE" +3973;"Bestand Farben und Lacke";"de-DE" +3974;"Bestand beschichtete Platten";"de-DE" +3975;"Sonstiger Bestand";"de-DE" +4110;"Löhne";"de-DE" +4120;"Gehälter";"de-DE" +4127;"Geschäftsführergehälter";"de-DE" +4130;"Gesetzliche Sozialaufwendungen";"de-DE" +4138;"Beiträge zur Berufsgenossenschaft";"de-DE" +4145;"Freiwillige soziale Aufwendung. LSt-pfl.";"de-DE" +4149;"Pauschale Steuer für Zuschüsse";"de-DE" +4175;"Fahrtkostenerstatt. Whg./Arbeitsstätte";"de-DE" +4190;"Aushilfslöhne";"de-DE" +4199;"Pauschale Steuer für Aushilfen";"de-DE" +4200;"Raumkosten";"de-DE" +4210;"Miete, unbewegliche Wirtschaftsgüter";"de-DE" +4240;"Gas, Strom, Wasser";"de-DE" +4250;"Reinigung";"de-DE" +4260;"Instandhaltung betrieblicher Räume";"de-DE" +4270;"Abgaben betrieblich genutzt. Grundbesitz";"de-DE" +4280;"Sonstige Raumkosten";"de-DE" +4320;"Gewerbesteuer";"de-DE" +4360;"Versicherungen";"de-DE" +4366;"Versicherung für Gebäude";"de-DE" +4510;"Kfz-Steuern";"de-DE" +4520;"Kfz-Versicherungen";"de-DE" +4530;"Laufende Kfz-Betriebskosten";"de-DE" +4540;"Kfz-Reparaturen";"de-DE" +4580;"Sonstige Kfz-Kosten";"de-DE" +4600;"Werbekosten";"de-DE" +4630;"Geschenke abzugsfähig";"de-DE" +4640;"Repräsentationskosten";"de-DE" +4651;"abzugsfähige Bewirtungskosten";"de-DE" +4654;"Nicht abzugsfähige Bewirtungskosten";"de-DE" +4663;"Reisekosten Arbeitnehmer, Fahrtkosten";"de-DE" +4664;"Reisekosten AN Verpfleg.mehraufwand";"de-DE" +4666;"Reisekosten AN Übernachtungsaufwand";"de-DE" +4710;"Verpackungsmaterial";"de-DE" +4730;"Ausgangsfrachten";"de-DE" +4750;"Transportversicherungen";"de-DE" +4800;"Reparatur/Instandh. Anlagen u. Maschinen";"de-DE" +4810;"Mietleasing bewegliche Wirtschaftsgüter";"de-DE" +4822;"Abschreibung immaterielle VermG";"de-DE" +4830;"Abschreibungen auf Sachanlagen";"de-DE" +4831;"Abschreibungen auf Gebäude";"de-DE" +4832;"Abschreibungen auf Kfz";"de-DE" +4862;"Abschreibungen auf WG Sammelposten";"de-DE" +4901;"Getränke für Getränkeautomat";"de-DE" +4910;"Porto";"de-DE" +4920;"Telefon";"de-DE" +4921;"Mobilfunk";"de-DE" +4930;"Bürobedarf";"de-DE" +4940;"Zeitschriften, Bücher";"de-DE" +4945;"Fortbildungskosten";"de-DE" +4950;"Rechts- und Beratungskosten";"de-DE" +4955;"Buchführungskosten";"de-DE" +4969;"Aufwand Abraum-/Abfallbeseitigung";"de-DE" +4970;"Nebenkosten des Geldverkehrs";"de-DE" +4980;"Betriebsbedarf";"de-DE" +4993;"Kalkulatorische Abschreibungen";"de-DE" +8000;"indiv., Erlöse";"de-DE" +8120;"Steuerfr. Erlöse Furniere Drittland";"de-DE" +8125;"Steuerfr. EG-Erlöse Furniere";"de-DE" +8336;"Nicht steuerbare s. Leistung § 18b UStG";"de-DE" +8400;"Erlöse Furniere";"de-DE" +8401;"Erlöse Kleinmöbel";"de-DE" +8405;"Erlöse beschichtete Platten";"de-DE" +8406;"Erlöse Modellbau";"de-DE" +8407;"Erlöse Messebau";"de-DE" +8611;"Verrechn. sonstige Sachbezüge 19% USt";"de-DE" +8730;"Gewährte Skonti";"de-DE" +8736;"Gewährte Skonti 19% USt";"de-DE" +8741;"Gewährte Skonti Leistungen §13b UStG";"de-DE" +8743;"Gewährte Skonti stfr. EU-Lieferung";"de-DE" +8820;"Erlöse Sachanlageverkäufe 19% USt";"de-DE" +9000;"Saldenvorträge Sachkonten";"de-DE" +9008;"Saldenvorträge Debitoren";"de-DE" +9009;"Saldenvorträge Kreditoren";"de-DE" diff --git a/doc/DATEV-2015/EXTF_Stammdaten-Deb-Kred.csv b/doc/DATEV-2015/EXTF_Stammdaten-Deb-Kred.csv new file mode 100644 index 000000000..46785660d --- /dev/null +++ b/doc/DATEV-2015/EXTF_Stammdaten-Deb-Kred.csv @@ -0,0 +1,6 @@ +"EXTF";510;16;"Debitoren/Kreditoren";4;20150729093352970;;"RE";"Admin";"";55003;63021;20150101;4;;;"";"";;;;"";;"";;"";;;"";""; +Konto;Name (Adressattyp Unternehmen);Unternehmensgegenstand;Name (Adressattyp natürl. Person);Vorname (Adressattyp natürl. Person);Name (Adressattyp keine Angabe);Adressattyp;Kurzbezeichnung;EU-Land;EU-UStID;Anrede;Titel/Akad. Grad;Adelstitel;Namensvorsatz;Adressart;Straße;Postfach;Postleitzahl;Ort;Land;Versandzusatz;Adresszusatz;Abweichende Anrede;Abw. Zustellbezeichnung 1;Abw. Zustellbezeichnung 2;Kennz. Korrespondenzadresse;Adresse Gültig von;Adresse Gültig bis;Telefon;Bemerkung (Telefon);Telefon GL;Bemerkung (Telefon GL);E-Mail;Bemerkung (E-Mail);Internet;Bemerkung (Internet);Fax;Bemerkung (Fax);Sonstige;Bemerkung (Sonstige);Bankleitzahl 1;Bankbezeichnung 1;Bank-Kontonummer 1;Länderkennzeichen 1;IBAN-Nr. 1;IBAN1 korrekt;SWIFT-Code 1;Abw. Kontoinhaber 1;Kennz. Hauptbankverb. 1;Bankverb 1 Gültig von;Bankverb 1 Gültig bis;Bankleitzahl 2;Bankbezeichnung 2;Bank-Kontonummer 2;Länderkennzeichen 2;IBAN-Nr. 2;IBAN2 korrekt;SWIFT-Code 2;Abw. Kontoinhaber 2;Kennz. Hauptbankverb. 2;Bankverb 2 Gültig von;Bankverb 2 Gültig bis;Bankleitzahl 3;Bankbezeichnung 3;Bank-Kontonummer 3;Länderkennzeichen 3;IBAN-Nr. 3;IBAN3 korrekt;SWIFT-Code 3;Abw. Kontoinhaber 3;Kennz. Hauptbankverb. 3;Bankverb 3 Gültig von;Bankverb 3 Gültig bis;Bankleitzahl 4;Bankbezeichnung 4;Bank-Kontonummer 4;Länderkennzeichen 4;IBAN-Nr. 4;IBAN4 korrekt;SWIFT-Code 4;Abw. Kontoinhaber 4;Kennz. Hauptbankverb. 4;Bankverb 4 Gültig von;Bankverb 4 Gültig bis;Bankleitzahl 5;Bankbezeichnung 5;Bank-Kontonummer 5;Länderkennzeichen 5;IBAN-Nr. 5;IBAN5 korrekt;SWIFT-Code 5;Abw. Kontoinhaber 5;Kennz. Hauptbankverb. 5;Bankverb 5 Gültig von;Bankverb 5 Gültig bis;Leerfeld;Briefanrede;Grußformel;Kundennummer;Steuernummer;Sprache;Ansprechpartner;Vertreter;Sachbearbeiter;Diverse-Konto;Ausgabeziel;Währungssteuerung;Kreditlimit (Debitor);Zahlungsbedingung;Fälligkeit in Tagen (Debitor);Skonto in Prozent (Debitor);Kreditoren-Ziel 1 Tg.;Kreditoren-Skonto 1 %;Kreditoren-Ziel 2 Tg.;Kreditoren-Skonto 2 %;Kreditoren-Ziel 3 Brutto Tg.;Kreditoren-Ziel 4 Tg.;Kreditoren-Skonto 4 %;Kreditoren-Ziel 5 Tg.;Kreditoren-Skonto 5 %;Mahnung;Kontoauszug;Mahntext 1;Mahntext 2;Mahntext 3;Kontoauszugstext;Mahnlimit Betrag;Mahnlimit %;Zinsberechnung;Mahnzinssatz 1;Mahnzinssatz 2;Mahnzinssatz 3;Lastschrift;Verfahren;Mandantenbank;Zahlungsträger;Indiv. Feld 1;Indiv. Feld 2;Indiv. Feld 3;Indiv. Feld 4;Indiv. Feld 5;Indiv. Feld 6;Indiv. Feld 7;Indiv. Feld 8;Indiv. Feld 9;Indiv. Feld 10;Indiv. Feld 11;Indiv. Feld 12;Indiv. Feld 13;Indiv. Feld 14;Indiv. Feld 15;Abweichende Anrede (Rechnungsadresse);Adressart (Rechnungsadresse);Straße (Rechnungsadresse);Postfach (Rechnungsadresse);Postleitzahl (Rechnungsadresse);Ort (Rechnungsadresse);Land (Rechnungsadresse);Versandzusatz (Rechnungsadresse);Adresszusatz (Rechnungsadresse);Abw. Zustellbezeichnung 1 (Rechnungsadresse);Abw. Zustellbezeichnung 2 (Rechnungsadresse);Adresse Gültig von (Rechnungsadresse);Adresse Gültig bis (Rechnungsadresse);Bankleitzahl 6;Bankbezeichnung 6;Bank-Kontonummer 6;Länderkennzeichen 6;IBAN-Nr. 6;IBAN6 korrekt;SWIFT-Code 6;Abw. Kontoinhaber 6;Kennz. Hauptbankverb. 6;Bankverb 6 Gültig von;Bankverb 6 Gültig bis;Bankleitzahl 7;Bankbezeichnung 7;Bank-Kontonummer 7;Länderkennzeichen 7;IBAN-Nr. 7;IBAN7 korrekt;SWIFT-Code 7;Abw. Kontoinhaber 7;Kennz. Hauptbankverb. 7;Bankverb 7 Gültig von;Bankverb 7 Gültig bis;Bankleitzahl 8;Bankbezeichnung 8;Bank-Kontonummer 8;Länderkennzeichen 8;IBAN-Nr. 8;IBAN8 korrekt;SWIFT-Code 8;Abw. Kontoinhaber 8;Kennz. Hauptbankverb. 8;Bankverb 8 Gültig von;Bankverb 8 Gültig bis;Bankleitzahl 9;Bankbezeichnung 9;Bank-Kontonummer 9;Länderkennzeichen 9;IBAN-Nr. 9;IBAN9 korrekt;SWIFT-Code 9;Abw. Kontoinhaber 9;Kennz. Hauptbankverb. 9;Bankverb 9 Gültig von;Bankverb 9 Gültig bis;Bankleitzahl 10;Bankbezeichnung 10;Bank-Kontonummer 10;Länderkennzeichen 10;IBAN-Nr. 10;IBAN10 korrekt;SWIFT-Code 10;Abw. Kontoinhaber 10;Kennz. Hauptbankverb. 10;Bankverb 10 Gültig von;Bankverb 10 Gültig bis;Nummer Fremdsystem;Insolvent;Mandatsreferenz 1;Mandatsreferenz 2;Mandatsreferenz 3;Mandatsreferenz 4;Mandatsreferenz 5;Mandatsreferenz 6;Mandatsreferenz 7;Mandatsreferenz 8;Mandatsreferenz 9;Mandatsreferenz 10;Verknüpftes OPOS-Konto;Mahnsperre bis;Lastschriftsperre bis;Zahlungssperre bis;Gebührenberechnung;Mahngebühr 1;Mahngebühr 2;Mahngebühr 3;Pauschalenberechnung;Verzugspauschale 1;Verzugspauschale 2;Verzugspauschale 3 +10000;"Möbel Testgruber";"Schreinerei";"";"";"";"2";"Möbel Testgrube";"DE";"133546770";"Firma";"";"";"";"STR";"Nelkenteststraße 125";"";"90482";"Nürnberg";"";"";"";"Firma";"";"";1;01012012;;"";"";"";"";"";"";"";"";"";"";"";"";"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"1";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"";"Sehr geehrte Frau";"Hallo";"KDN 12345";"DE776655";"2";"Frau Huber";"Herr Schmid";"Frau Tester";;;"";0;0;0;0,00;0;0,00;0;0,00;0;0;0,00;0;0,00;7;;;;;;23,30;20,25;1;10,50;11,11;12,12;"7";"1";1;"9";"ind. Feld";"";"";"";"";"";"";"";"";"";"";"individuelle Beschriftung";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"50050000";"Testbank";"454545";"GB";"GB4545454545";"";"GENODEF1S12";"Herr Muster";"0";01012012;01012013;"76060618";"VR-Bank";"121212";"DE";"DE706060660125";"";"GE0987";"Herr Testmeier";"0";01012012;01012014;"";0;"1234-AB-56787";"";"";"";"";"";"";"";"";"778259637";75000;03122015;02122015;01122015;1;5,1;5,2;5,3;;0,9;0,2;0,5 +20000;"Einrichtungshaus Muster";"Möbelhaus";"";"";"";"2";"Muster";"";"";"Firma";"";"";"";"STR";"Feldgasse 15";"";"90409";"Nürnberg";"";"";"";"Firma";"";"";1;01012012;;"";"";"";"";"";"";"";"";"";"";"";"";"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"1";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"";"Sehr geehrte Frau";"Hallo";"KDN 12345";"DE776655";"2";"Frau Huber";"Herr Schmid";"Frau Tester";;;"";0;0;0;0,00;0;0,00;0;0,00;0;0;0,00;0;0,00;7;;;;;;23,30;;;;;;"";"";0;"";"";"";"";"";"";"";"";"";"";"";"";"individuelle Beschriftung";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"50050000";"Testbank";"454545";"GB";"GB4545454545";"";"GENODEF1S12";"Herr Muster";"0";01012012;01012013;"76060618";"VR-Bank";"121212";"DE";"DE706060660125";"";"GE0987";"Herr Testmeier";"0";01012012;01012014;"";0;"";"";"";"";"";"";"";"";"";"";75000;03122015;02122015;01122015;1;5,1;5,2;5,3;;0,9;0,2;0,5 +30000;"";"";"Mustermeier";"Hans";"";"1";"";"";"";"Herr";"";"";"";"STR";"Musterweg 14b";"";"90489";"Nürnberg";"";"";"";"Firma";"";"";1;01012012;;"";"";"";"";"";"";"";"";"";"";"";"";"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"1";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"";"Sehr geehrte Frau";"Hallo";"KDN 12345";"DE776655";"2";"Frau Huber";"Herr Schmid";"Frau Tester";;;"";0;0;0;0,00;0;0,00;0;0,00;0;0;0,00;0;0,00;7;;;;;;23,30;;;;;;"";"";0;"";"";"";"";"";"";"";"";"";"";"";"";"individuelle Beschriftung";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"50050000";"Testbank";"454545";"GB";"GB4545454545";"";"GENODEF1S12";"Herr Muster";"0";01012012;01012013;"76060618";"VR-Bank";"121212";"DE";"DE706060660125";"";"GE0987";"Herr Testmeier";"0";01012012;01012014;"";0;"";"";"";"";"";"";"";"";"";"";75000;03122015;02122015;01122015;1;5,1;5,2;5,3;;0,9;0,2;0,5 +40000;"";"";"Testhuber";"Susanne";"";"1";"";"";"";"Frau";"";"";"";"STR";"Beispielstr. 56";"";"90512";"Nürnberg";"";"";"";"Firma";"";"";1;01012012;;"";"";"";"";"";"";"";"";"";"";"";"";"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"1";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"50090500";"Sparda-Bank Hessen";"2345678";"DE";"DE49100102220002222222";"";"GENODEF1S12";"Herr Testmüller";"0";01012012;01012013;"";"Sehr geehrte Frau";"Hallo";"KDN 12345";"DE776655";"2";"Frau Huber";"Herr Schmid";"Frau Tester";;;"";0;0;0;0,00;0;0,00;0;0,00;0;0;0,00;0;0,00;7;;;;;;23,30;;;;;;"";"";0;"";"";"";"";"";"";"";"";"";"";"";"";"individuelle Beschriftung";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"";"";"";"";"";"";"";"";"";;;"50050000";"Testbank";"454545";"GB";"GB4545454545";"";"GENODEF1S12";"Herr Muster";"0";01012012;01012013;"76060618";"VR-Bank";"121212";"DE";"DE706060660125";"";"GE0987";"Herr Testmeier";"0";01012012;01012014;"";0;"";"";"";"";"";"";"";"";"";"";75000;03122015;02122015;01122015;1;5,1;5,2;5,3;;0,9;0,2;0,5 diff --git a/doc/DATEV-2015/EXTF_Textschluessel.csv b/doc/DATEV-2015/EXTF_Textschluessel.csv new file mode 100644 index 000000000..d3955d324 --- /dev/null +++ b/doc/DATEV-2015/EXTF_Textschluessel.csv @@ -0,0 +1,10 @@ +"EXTF";510;44;"Textschlüssel";2;20150729103107277;;"RE";"Admin";"";29098;55003;20150101;7;;;"";"";;;;"";;"";;;"";;;"";"" +TS-Nr.;Beschriftung;Ref.-TS;Konto Soll;Konto Haben;Sprach-ID +30;"Weizen";30;5005000;4000000;"de-DE" +31;"Winterweizen";30;5005000;4000000;"de-DE" +32;"Dinkel";30;5005000;4000000;"de-DE" +33;"Sommerweizen";33;5005000;4000000;"de-DE" +34;"corn";30;5005000;4000000;"en-GB" +35;"oat";35;5005000;4000000;"en-GB" +38;"Energiegetreide";38;5005000;4100000;"de-DE" +39;"durum wheat";39;5005000;4000000;"en-GB" \ No newline at end of file diff --git a/doc/DATEV-2015/EXTF_Wiederkehrende-Buchungen.csv b/doc/DATEV-2015/EXTF_Wiederkehrende-Buchungen.csv new file mode 100644 index 000000000..2138caf75 --- /dev/null +++ b/doc/DATEV-2015/EXTF_Wiederkehrende-Buchungen.csv @@ -0,0 +1,4 @@ +"EXTF";510;65;"Wiederkehrende Buchungen";2;20150729093200673;;"RE";"Admin";"";55003;63021;20150101;4;;;"";"";;;;"";;"";;"";;;"";""; +B1;WKZ (Umsatz);Umsatz (ohne Soll/Haben-Kz);Soll/Haben-Kennzeichen;Kurs;Basis-Umsatz;WKZ Basis-Umsatz;BU-Schlüssel;Gegenkonto (ohne BU-Schlüssel);Belegfeld1;Belegfeld2;Beginndatum;Kontonummer;Stück;Gewicht;KOST1-Kostenstelle;KOST2-Kostenstelle;KOST-Menge;Skonto;Buchungstext;Postensperre;Diverse Adressnummer;Geschäftspartnerbank;Sachverhalt;Zinssperre;Beleglink;EU-Land u. UStId;EU-Steuersatz;Abw. Versteuerungsart;Sachverhalt L+L;BU 49 Hauptfunktionstyp;BU 49 Hauptfunktionsnummer;BU 49 Funktionsergänzung;Zusatzinformation - Art 1;Zusatzinformation- Inhalt 1;Zusatzinformation - Art 2;Zusatzinformation- Inhalt 2;Zusatzinformation - Art 3;Zusatzinformation- Inhalt 3;Zusatzinformation - Art 4;Zusatzinformation- Inhalt 4;Zusatzinformation - Art 5;Zusatzinformation- Inhalt 5;Zusatzinformation - Art 6;Zusatzinformation- Inhalt 6;Zusatzinformation - Art 7;Zusatzinformation- Inhalt 7;Zusatzinformation - Art 8;Zusatzinformation- Inhalt 8;Zusatzinformation - Art 9;Zusatzinformation- Inhalt 9;Zusatzinformation - Art 10;Zusatzinformation- Inhalt 10;Zusatzinformation - Art 11;Zusatzinformation- Inhalt 11;Zusatzinformation - Art 12;Zusatzinformation- Inhalt 12;Zusatzinformation - Art 13;Zusatzinformation- Inhalt 13;Zusatzinformation - Art 14;Zusatzinformation- Inhalt 14;Zusatzinformation - Art 15;Zusatzinformation- Inhalt 15;Zusatzinformation - Art 16;Zusatzinformation- Inhalt 16;Zusatzinformation - Art 17;Zusatzinformation- Inhalt 17;Zusatzinformation - Art 18;Zusatzinformation- Inhalt 18;Zusatzinformation - Art 19;Zusatzinformation- Inhalt 19;Zusatzinformation - Art 20;Zusatzinformation- Inhalt 20;Zahlweise;Forderungsart;Veranlagungsjahr;Zugeordnete Fälligkeit;Zuletzt per;Nächste Fälligkeit;Enddatum;Zeitintervallart;Zeitabstand;Wochentag;Monat;Ordnungszahl Tag im Monat;Ordnungszahl Wochentag;EndeTyp;Gesellschaftername;Beteiligtennummer;Identifikationsnummer;Zeichnernummer;SEPA-Mandatsreferenz;Postensperre bis;KOST-Datum;Bezeichnung SoBil-Sachverhalt;Kennzeichen SoBil-Buchung +2;"";488,00;"H";;;"";"";4360;"";"";01032013;980;;;"10";"";;;"Gebäudeversicherung";;"";;;;"";"";;"";;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;;01032013;01042013;01022014;"MON";1;;;1;;2;"";;"";"";"1259887";;;""; +2;"";333,52;"H";;;"";"";4360;"";"";31082012;980;;;"10";"";;;"Brandversicherung";;"";;;;"";"";;"";;;;;"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";;"";;;01032013;01042013;01082013;"MON";1;;;1;;2;"Mustermann";4711;"130263d";"";"77789-AB-789";25032016;23122015;"Sonderbilanz";2 diff --git a/doc/DATEV-2015/EXTF_Zahlungsbedingungen.csv b/doc/DATEV-2015/EXTF_Zahlungsbedingungen.csv new file mode 100644 index 000000000..c84c647ca --- /dev/null +++ b/doc/DATEV-2015/EXTF_Zahlungsbedingungen.csv @@ -0,0 +1,10 @@ +"EXTF";510;46;"Zahlungsbedingungen";2;20150729093357008;;"RE";"Admin";"";55003;63021;20150101;4;;;"";"";;;;"";;"";;"";;;"";""; +Nummer;Bezeichnung;Fälligkeitstyp;Skonto 1%;Skonto 1 Tage;Skonto 2 %;Skonto 2 Tage;Fällig Tage;Rechnung bis / Zeitraum 1;Skonto1 Datum / Zeitraum 1;Skonto 1 Monat / Zeitraum 1;Skonto 2 Datum / Zeitraum 1;Skonto 2 Monat / Zeitraum 1;Fällig Datum / Zeitraum 1;Fällig Monat / Zeitraum 1;Rechnung bis / Zeitraum 2;Skonto1 Datum / Zeitraum 2;Skonto 1 Monat / Zeitraum 2;Skonto 2 Datum / Zeitraum 2;Skonto 2 Monat / Zeitraum 2;Fällig Datum / Zeitraum 2;Fällig Monat / Zeitraum 2;Rechnung bis / Zeitraum 3;Skonto1 Datum / Zeitraum 3;Skonto1 Monat / Zeitraum 3;Skonto 2 Datum / Zeitraum 3;Skonto 2 Monat / Zeitraum 3;Fällig Datum / Zeitraum 3;Fällig Monat / Zeitraum 3;Leerfeld;Verwendung +10;"14 Tage 2% oder 30 Tage Netto";1;200;14;;;30;;;0;;0;;0;;;0;;0;;0;;;0;;0;;0;""; +11;"14 Tage 3% oder 30 Tage Netto";1;300;14;200;10;30;;;0;;0;;0;;;0;;0;;0;;;0;;0;;0;""; +12;"30 Tage Netto";1;300;10;;;30;;;0;;0;;0;;;0;;0;;0;;;0;;0;;0;""; +13;"14 Tage 3% oder 60 Tage Netto";1;300;14;;;60;;;0;;0;;0;;;0;;0;;0;;;0;;0;;0;""; +14;"10 Tage 2% oder 30 Tage Netto";1;200;10;;;30;10;20;0;;0;31;0;20;31;0;;0;10;0;31;10;0;;0;20;0;""; +15;"10 Tage 3% oder 30 Tage Netto";1;300;10;;;30;;;0;;0;;0;;;0;;0;;0;;;0;;0;;0;""; +16;"sofort ohne Abzug";1;;;;;;;;0;;0;;0;;;0;;0;;0;;;0;;0;;0;""; +17;"Vorkasse";1;;;;;;;;0;;0;;0;;;0;;0;;0;;;0;;0;;0;""; diff --git a/t/datev/datev_format_2018.t b/t/datev/datev_format_2018.t new file mode 100644 index 000000000..aeb9979ed --- /dev/null +++ b/t/datev/datev_format_2018.t @@ -0,0 +1,181 @@ +use strict; +use Test::More; +use Test::Deep qw(cmp_bag); + +use lib 't'; + +use_ok 'Support::TestSetup'; +use SL::DATEV qw(:CONSTANTS); +use SL::Dev::ALL qw(:ALL); +use List::Util qw(sum); +use SL::DB::Buchungsgruppe; +use SL::DB::Chart; +use DateTime; +use Data::Dumper; +use utf8; + +Support::TestSetup::login(); + +my $dbh = SL::DB->client->dbh; + +clear_up(); +my $buchungsgruppe7 = SL::DB::Manager::Buchungsgruppe->find_by(description => 'Standard 7%') || die "No accounting group for 7\%"; +my $date = DateTime->new(year => 2017, month => 7, day => 19); +my $department = create_department(description => 'Kästchenweiße heiße Preise'); +my $project = create_project(projectnumber => 2017, description => '299'); + +my $part1 = new_part(partnumber => '19', description => 'Part 19%')->save; +my $part2 = new_part( + partnumber => '7', + description => 'Part 7%', + buchungsgruppen_id => $buchungsgruppe7->id, +)->save; + +my $invoice = create_sales_invoice( + invnumber => "ݗݘݰݶ", + itime => $date, + gldate => $date, + taxincluded => 0, + transdate => $date, + invoiceitems => [ create_invoice_item(part => $part1, qty => 3, sellprice => 550), + create_invoice_item(part => $part2, qty => 10, sellprice => 50), + ], + department_id => $department->id, + globalproject_id => $project->id, +); + +# lets make a boom +# generate_datev_* doesnt care about encoding but +# csv_buchungsexport does! all arabic will be deleted +# and no string will be left as invnumber + +my $datev1 = SL::DATEV->new( + dbh => $dbh, + trans_id => $invoice->id, +); + +my $startdate = DateTime->new(year => 2017, month => 1, day => 1); +my $enddate = DateTime->new(year => 2017, month => 12, day => 31); +my $today = DateTime->new(year => 2017, month => 3, day => 17); + + +$datev1->from($startdate); +$datev1->to($enddate); + +$datev1->generate_datev_data; +$datev1->generate_datev_lines; + +# check conversion to csv +$datev1->from($startdate); +$datev1->to($enddate); +eval { + $datev1->csv_buchungsexport(); + 1; }; +like($@, qr/^Not a valid value: '' for 'belegfeld1' with .*/, "wrong encoding"); + +# redefine invnumber, but still broken +$invoice->invnumber('ݗݘݰݶmuh'); +$invoice->save(); +$datev1->generate_datev_data; +$datev1->generate_datev_lines; +eval { + $datev1->csv_buchungsexport(); + 1; }; +like($@, qr/^Not a valid value: '' for 'belegfeld1' with amount/, "mixed encoding"); + + +# create one haben buchung with GLTransaction today + +my $expense_chart = SL::DB::Manager::Chart->find_by(accno => '4660'); # Reisekosten +my $cash_chart = SL::DB::Manager::Chart->find_by(accno => '1000'); # Kasse +my $tax_chart = SL::DB::Manager::Chart->find_by(accno => '1576'); # Vorsteuer +my $tax_9 = SL::DB::Manager::Tax->find_by(taxkey => 9, rate => 0.19) || die "No tax"; + +my @acc_trans; +push(@acc_trans, SL::DB::AccTransaction->new( + chart_id => $expense_chart->id, + chart_link => $expense_chart->link, + amount => -84.03, + transdate => $today, + source => '', + taxkey => 9, + tax_id => $tax_9->id, + project_id => $project->id, +)); +push(@acc_trans, SL::DB::AccTransaction->new( + chart_id => $tax_chart->id, + chart_link => $tax_chart->link, + amount => -15.97, + transdate => $today, + source => '', + taxkey => 9, + tax_id => $tax_9->id, + project_id => $project->id, +)); +push(@acc_trans, SL::DB::AccTransaction->new( + chart_id => $cash_chart->id, + chart_link => $cash_chart->link, + amount => 100, + transdate => $today, + source => '', + taxkey => 0, + tax_id => 0, +)); + +my $gl_transaction = SL::DB::GLTransaction->new( + reference => "Reisekosten März 2018", + description => "Reisekonsten März 2018 / Ma Schmidt", + transdate => $today, + gldate => $today, + employee_id => SL::DB::Manager::Employee->current->id, + taxincluded => 1, + type => undef, + ob_transaction => 0, + cb_transaction => 0, + storno => 0, + storno_id => undef, + transactions => \@acc_trans, +)->save; +my $datev2 = SL::DATEV->new( + dbh => $dbh, + trans_id => $gl_transaction->id, +); + +$datev2->from($startdate); +$datev2->to($enddate); +$datev2->generate_datev_data; +$datev2->generate_datev_lines; + +my @data_csv = splice @{ $datev2->csv_buchungsexport() }, 2, 5; +@data_csv = sort { $a->[0] <=> $b->[0] } @data_csv; + + +my $cp1252_posting_text = SL::Iconv::convert("UTF-8", "CP1252", 'Reisekosten März 2018'); +cmp_bag($data_csv[0], [ 100, 'H', 'EUR', undef, undef, undef, '4660', '1000', 9, '1703', 'Reisekosten ', + undef, undef, $cp1252_posting_text, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, '', undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef ] + ); + +done_testing(); +clear_up(); + + +sub clear_up { + SL::DB::Manager::AccTransaction->delete_all( all => 1); + SL::DB::Manager::InvoiceItem->delete_all( all => 1); + SL::DB::Manager::Invoice->delete_all( all => 1); + SL::DB::Manager::Customer->delete_all( all => 1); + SL::DB::Manager::Part->delete_all( all => 1); + SL::DB::Manager::Project->delete_all( all => 1); + SL::DB::Manager::Department->delete_all( all => 1); + SL::DATEV->clean_temporary_directories; +}; + +1; diff --git a/t/datev/invoices.t b/t/datev/invoices.t index 50398fc14..52c665e0e 100644 --- a/t/datev/invoices.t +++ b/t/datev/invoices.t @@ -34,7 +34,7 @@ my $part2 = new_part( )->save; my $invoice = create_sales_invoice( - invnumber => "1 sales invoice", + invnumber => "Þ sales Â¥& invöice", itime => $gldate, gldate => $gldate, intnotes => 'booked in February', @@ -59,7 +59,7 @@ my $datev1 = SL::DATEV->new( $datev1->generate_datev_data; cmp_bag $datev1->generate_datev_lines, [ { - 'belegfeld1' => '1 sales invoice', + 'belegfeld1' => "\x{de} sales \x{a5}& inv\x{f6}ice", 'buchungstext' => 'Testcustomer', 'datum' => '01.01.2017', 'gegenkonto' => '8400', @@ -67,10 +67,11 @@ cmp_bag $datev1->generate_datev_lines, [ 'kost1' => 'Kostenstelle DATEV-Schnittstelle 2018', 'kost2' => 'Crowd-Funding September 2017', 'umsatz' => '249.9', - 'waehrung' => 'EUR' + 'waehrung' => 'EUR', + 'soll_haben_kennzeichen' => 'S', }, { - 'belegfeld1' => '1 sales invoice', + 'belegfeld1' => "\x{de} sales \x{a5}& inv\x{f6}ice", 'buchungstext' => 'Testcustomer', 'datum' => '01.01.2017', 'gegenkonto' => '8300', @@ -78,10 +79,11 @@ cmp_bag $datev1->generate_datev_lines, [ 'kost1' => 'Kostenstelle DATEV-Schnittstelle 2018', 'kost2' => 'Crowd-Funding September 2017', 'umsatz' => 535, - 'waehrung' => 'EUR' + 'waehrung' => 'EUR', + 'soll_haben_kennzeichen' => 'S', }, { - 'belegfeld1' => '1 sales invoice', + 'belegfeld1' => "\x{de} sales \x{a5}& inv\x{f6}ice", 'buchungstext' => 'Testcustomer', 'datum' => '05.01.2017', 'gegenkonto' => '1400', @@ -89,10 +91,60 @@ cmp_bag $datev1->generate_datev_lines, [ 'kost1' => 'Kostenstelle DATEV-Schnittstelle 2018', 'kost2' => 'Crowd-Funding September 2017', 'umsatz' => '784.9', - 'waehrung' => 'EUR' + 'waehrung' => 'EUR', + 'soll_haben_kennzeichen' => 'S', }, ], "trans_id datev check ok"; +my $startdate = DateTime->new(year => 2017, month => 1, day => 1); +my $enddate = DateTime->new(year => 2017, month => 12, day => 31); + +# check conversion to csv +$datev1->from($startdate); +$datev1->to($enddate); + +# splice away the header, because sort won't do +# we need sort, because pay_invoice is not acc_trans_id order safe +my @data_csv = splice @{ $datev1->csv_buchungsexport() }, 2, 5; +@data_csv = sort { $a->[0] <=> $b->[0] } @data_csv; + +my $cp1252_belegfeld1 = SL::Iconv::convert("UTF-8", "CP1252", 'Þ sales Â¥& i'); +my $cp1252_buchungstext = SL::Iconv::convert("UTF-8", "CP1252", 'Þ sales Â¥& invöice'); + +cmp_bag($data_csv[1], [ 535, 'S', 'EUR', undef, undef, undef, '1400', '8300', undef, '0101', $cp1252_belegfeld1, + undef, undef, $cp1252_buchungstext, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, 'Crowd-Fu', 'Kostenst', undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef ] + ); + +cmp_bag($data_csv[0], [ '249,9', 'S', 'EUR', undef, undef, undef, '1400', '8400', undef, '0101', $cp1252_belegfeld1, + undef, undef, $cp1252_buchungstext, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, 'Crowd-Fu', 'Kostenst', undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef ] + ); +cmp_bag($data_csv[2], [ '784,9', 'S', 'EUR', undef, undef, undef, '1200', '1400', undef, '0501', $cp1252_belegfeld1, + undef, undef, $cp1252_buchungstext, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, 'Crowd-Fu', 'Kostenst', undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, + undef, undef, undef, undef, undef ] + ); my $march_9 = DateTime->new(year => 2017, month => 3, day => 9); my $invoice2 = create_sales_invoice( invnumber => "2 sales invoice", @@ -118,9 +170,6 @@ my $credit_note = create_credit_note( ] ); -my $startdate = DateTime->new(year => 2017, month => 1, day => 1); -my $enddate = DateTime->new(year => 2017, month => 12, day => 31); - my $datev = SL::DATEV->new( dbh => $dbh, from => $startdate, @@ -161,6 +210,7 @@ sub clear_up { SL::DB::Manager::Part->delete_all( all => 1); SL::DB::Manager::Project->delete_all( all => 1); SL::DB::Manager::Department->delete_all( all => 1); + SL::DATEV->clean_temporary_directories; }; 1; -- 2.20.1