package BookPub::Sale::File;

use strict;

use Data::Dumper;
use Sys::Hostname;

use Spreadsheet::ParseExcel;
use Text::CSV_XS;
use XML::LibXML;
use XML::LibXML::XPathContext;
use Date::Calc qw(Add_Delta_YMD Add_Delta_Days);
use Time::HiRes qw(gettimeofday);
use Archive::Zip;

# built in perl func
use File::Copy;

use lib '/app/tools/bookpub/lib';
use BookPub::Import::Factory;
use BookPub::Tracker::Service;
use BookPub::DB::Item::File;

use lib '/app/tools/common/lib';
use Common::Util;
use Common::Log;
use Common::Client;
use Common::Assert;
use Common::RSApp;
use Common::File::UTF8;
use Common::File::UTF16;
use Common::DB::Item::DTMVImporterToggle;

use lib '/app/tools/cpan/lib';
use RS::Spreadsheet::XLSX;

use lib '/app/tools/sale_import/lib';
use base 'Sale::File';

# ------------------------
# Public Methods
# ------------------------
sub BaseDirectory {

    # !!! Update this to use the config system?
    return "/app/shared/sale_import";
}

sub SimpleUploadFromShell {
    my %args = @_;

    die "missing client_id\n" unless ( $args{client_id} );
    my $client = Common::Client->new( clientID => $args{client_id} );
    my $client_name = $client->ClientNameClean();

    die "missing file path\n" unless ( $args{filepath} );
    my ($orig_file_name) = $args{filename} || $args{filepath} =~ m/.*\/(.+?)$/;
    $orig_file_name ||= $args{filepath};

    my $uploadDir = BaseDirectory() . "/$client_name";
    if ( !-e $uploadDir ) {
        `mkdir $uploadDir`;
    }

    my ( $year, $month, undef ) = split( '-', Common::Util::today() );
    $uploadDir .= "/$year$month";
    if ( !-e $uploadDir ) {
        `mkdir $uploadDir`;
    }

    my $timestamp = _getTimeStamp();
    my $ext       = $orig_file_name;
    $ext = ( $ext =~ /\.(\w+)$/ ) ? ".$1" : "";
    my $final_file_name = $timestamp . $ext;
    my $final_file_path = $uploadDir . "/" . $final_file_name;
    Log->info("SimpleUploadFromShell: saving src file to $final_file_path");
    Common::Log::Print("SimpleUploadFromShell: saving src file to $final_file_path");
    copy( $args{filepath}, $final_file_path ) or die "copy failed: $!\n";

    # save file info to database
    # !!! CHANGE THIS
    my $file = BookPub::DB::Item::File->Create(
        period_id      => 0,
        file_dir       => $uploadDir,
        file_name      => $final_file_name,
        orig_file_name => $orig_file_name,
        file_md5sum    => $args{md5_sum},
    );
    $file->save();

    if ( $file->file_id ) {
        Common::Log::Print( "SimpleUploadFromShell: file info has been saved, file_id = " . $file->file_id );
        return $file->file_id;
    } else {
        return undef;
    }
}

sub SimpleUploadFromWeb {
    my $self = shift;
    my %args = @_;

    # get input params
    my $orig_file_name = $args{filename} || return $self->bail("missing file name");
    my $fh             = $args{fh}       || return $self->bail("missing file handle");

    # client info (is there a better way to get client_id?)
    my $client      = Common::Client::Current();
    my $client_id   = $client->ClientID();
    my $client_name = $client->ClientNameClean();

    my $uploadDir = BaseDirectory() . "/$client_name";
    if ( !-e $uploadDir ) {
        `mkdir $uploadDir`;
    }

    my ( $year, $month, undef ) = split( '-', Common::Util::today() );
    $uploadDir .= "/$year$month";
    if ( !-e $uploadDir ) {
        `mkdir $uploadDir`;
    }

    my $timestamp = _getTimeStamp();
    my $ext       = $orig_file_name;
    $ext = ( $ext =~ /\.(\w\w\w)$/ ) ? ".$1" : "";
    my $final_file_name = $timestamp . $ext;
    my $final_file_path = $uploadDir . "/" . $final_file_name;
    Common::Log::Print("SimpleUploadFromWeb: saving  upload to tmp location: $final_file_path");

    open( TMP, ">$final_file_path" ) or return $self->bail("couldn't write to disk");
    binmode(TMP);
    print TMP while (<$fh>);
    close(TMP);

    # RSD-8948: We want to check if the file was created in proper XSLX format.
    # If during unarchiving we get an error, we will try to resave the file in proper format.
    if ($orig_file_name =~ /\.xlsx/) {
        my $zip = Archive::Zip->new($final_file_path);
        my $xlsx_rels = length($zip->memberNamed('xl/_rels/workbook.xml.rels')->contents);
        $args{unsupported_excel}++ unless ($xlsx_rels > 1);
    }

    # resave unsupported excel file (FB21991)
    $self->_resaveUnsupportedXLS($final_file_path) if $args{unsupported_excel};

    # save file info to database
    my $file = BookPub::DB::Item::File->Create(
        period_id      => 0,
        file_dir       => $uploadDir,
        file_name      => $final_file_name,
        orig_file_name => $orig_file_name,
        file_md5sum    => $args{md5_sum},
        user_id        => $args{user_id},
    );
    $file->save();

    if ( $file->file_id ) {
        Common::Log::Print( "SimpleUploadFromWeb: file info has been saved, file_id = " . $file->file_id );
        return $file->file_id;
    } else {
        return undef;
    }
}

sub ParseFull {
    my $self = shift;
    my %args = @_;

    $self->_init();

    my $file_obj = $args{file};
    assert($file_obj);

    my $path_to_import_file = $args{file_path} || $file_obj->FileDir . "/" . $file_obj->FileName;
    $self->{path} = $path_to_import_file;

    if ( !-e $path_to_import_file ) {
        $self->errstr("File $path_to_import_file does not exist");
        return undef;
    }

    Common::Log::Print("ParseFull: reading file: $path_to_import_file");
    my $aref_lines_array;
    my $sheets_aref     = [];
    my $sheetnames_aref = [];

    my $fileName = lc( $file_obj->FileName );
    my $fileExtension;
    if ( $fileName =~ m/(\.[a-z]+)$/ ) {
        $fileExtension = $1;
    }

    my $fileType;
    my $utf16File = new Common::File::UTF16($path_to_import_file);
    my $utf8File  = new Common::File::UTF8($path_to_import_file);

    # The only type of binary file that we can really handle is an excel spreadsheet,
    # so we're excluding .csv files here.
    # One day we hope to have a more robust solution to all this file handling stuff.
    if ( _looks_like_excel($path_to_import_file) ) {
        $fileType = "excel";
    } elsif ( _looks_like_excel_xml_workbook($path_to_import_file) ) {
        $fileType = "excel_xml_workbook";
    } elsif ( $utf8File->isValid() ) {
        $fileType = "utf8";
    } elsif ( $utf16File->isValid() ) {
        $fileType = "utf16";
    }
    # .cvs files should be treated like text files and ignore all PDF files
    elsif ( ( -T $path_to_import_file && $fileExtension ne '.pdf' ) || $fileExtension eq '.csv' ) {
        $fileType = "text";
    } else {
        $self->errstr('File type not identified');
        return undef;
    }

    if ( $fileType eq 'excel' ) {
        Common::Log::Print("ParseFull: reading excel file");
        my $sheet_data = $self->_read_excel_file() || return undef;

        $sheets_aref     = $sheet_data->[0];
        $sheetnames_aref = $sheet_data->[1];

        unless ( ref( $sheets_aref->[0] ) eq 'ARRAY' ) {
            $self->errstr('Failed to read excel file');
            return undef;
        }

        # for backwards compatibility
        $aref_lines_array = $sheets_aref->[0];
    } elsif ( $fileType eq "excel_xml_workbook" ) {
        Common::Log::Print("ParseFull: reading excel xml workbook file");
        my $sheet_data = $self->_read_excel_xml_workbook_file() || return;

        $sheets_aref     = $sheet_data->[0];
        $sheetnames_aref = $sheet_data->[1];

        unless ( ref( $sheets_aref->[0] ) eq 'ARRAY' ) {
            $self->errstr('Failed to read excel xml workbook file');
            return undef;
        }

        # for backwards compatibility
        $aref_lines_array = $sheets_aref->[0];
    } elsif ( $fileType eq 'text' ) {
        Common::Log::Print("ParseFull: reading text file");
        $aref_lines_array = $self->_read_ascii_file( clean_quotes => 1 );
        unless ( ref( $aref_lines_array->[0] ) eq 'ARRAY' ) {
            $self->errstr('Failed to read text file');
            return undef;
        }

        # back-populate the single sheet
        $sheets_aref->[0] = $aref_lines_array;
    } elsif ( $fileType eq 'utf16' ) {
        print STDERR "ParseFull: reading utf16 text file\n";
        $aref_lines_array = $self->_read_utf16_file( file => $utf16File );
        unless ( ref( $aref_lines_array->[0] ) eq 'ARRAY' ) {
            $self->errstr('Failed to read utf16 text file') unless ( $self->errstr() && '' ne $self->errstr() );
            return undef;
        }

        # back-populate the single sheet
        $sheets_aref->[0] = $aref_lines_array;
    } elsif ( $fileType eq 'utf8' ) {
        print STDERR "ParseFull: reading utf8 text file\n";
        $aref_lines_array = $self->_read_utf8_file( file => $utf8File );
        unless ( ref( $aref_lines_array->[0] ) eq 'ARRAY' ) {
            $self->errstr('Failed to read utf8 text file') unless ( $self->errstr() && '' ne $self->errstr() );
            return undef;
        }

        # back-populate the single sheet
        $sheets_aref->[0] = $aref_lines_array;
    }

    Common::Log::Print("ParseFull: determining service/version");
    if ( $args{service_id} && $args{version} ) {
        Common::Log::Print("ParseFull: forcing to service $args{service_id} : $args{version}");
        $self->{service_id}  = $args{service_id};
        $self->{version_num} = $args{version};
    } elsif ( $self->PreParse( $sheets_aref, $file_obj->OrigFileName ) ) {
        Common::Log::Print("ParseFull: PreParse determined file service is $self->{service_id}, version $self->{version_num}");
    } elsif ( $self->DynamicParse( $sheets_aref, $file_obj->OrigFileName ) ) {
        Common::Log::Print("ParseFull: DynamicParse determined file service is $self->{service_id}, version $self->{version_num}");
    } else {
        $self->errstr('File not identified');
        return undef;
    }

    BookPub::Tracker::Service::AddService( service_id => $self->{service_id} );

    # RSD-6805 - substitute service_id by alt_service_id for RS v4
    if ( my $altServiceID = $self->_determineAlternativeServiceID($aref_lines_array) ) {
        BookPub::Tracker::Service::AddService( service_id => $altServiceID );
        $file_obj->ServiceID( $altServiceID );
        $file_obj->OriginalServiceID( $self->{service_id} );
    } else {
        $file_obj->ServiceID( $self->{service_id} );
        $file_obj->OriginalServiceID( 0 );
    }

    $file_obj->VersionNum( $self->{version_num} );
    $file_obj->TypeID( $self->{type_id} );

    $file_obj->save();

    # We only want to do the following check in production and on the staging box.
    my $hostname = ( split( /\./, Sys::Hostname::hostname() ) )[0];

    if ( Common::RSApp::IsProductionServer || $hostname eq 'awstaging' ) {

        # Let's see if we have an entry for this service/version combo.
        my $importerToggle = Common::DB::Item::DTMVImporterToggle->Lookup(
            service_id  => $self->{service_id},
            version_num => $self->{version_num}
        );

        # If there is no entry OR there is an entry with a status of 0, stop the import.
        if ( !$importerToggle || $importerToggle->status == 0) {
            $self->errstr('File cannot be imported at this time');
            return undef;
        }

    }

    Common::Log::Print("calling importer...");

    my $serviceID = $self->GetAlternativeServiceID ? $file_obj->OriginalServiceID : $file_obj->ServiceID;
    my $importer = BookPub::Import::Factory::GetImporter( service_id => $serviceID, version_num => $file_obj->VersionNum );

    # if we parsed an excel file then
    # we will have an arrayref or arrayrefs (ie. sheets)
    # so pass those as a 'sheets' param in leui of a 'lines' param

    my $result = $importer->Import(
        client_id   => Common::RSApp::GetClientID(),
        file        => $file_obj,
        lines       => $aref_lines_array,
        sheets      => $sheets_aref,
        sheet_names => $sheetnames_aref,
    );

    $self->errstr( $importer->errstr() );
    return $result;
}

sub DynamicParse {
    my $self      = shift;
    my $sheets    = shift;
    my $file_name = shift;

    Common::Log::Print("ParseFull: DynamicParse start");

    $self->_init();

    ( $self->{service_id}, $self->{version_num} ) =
      BookPub::Import::Factory::GetDynamicInfo( sheets => $sheets, filename => $file_name );

    if ( $self->{service_id} ) {
        Common::Log::Print(" ++ Found match, Service ID: $self->{service_id} Version: $self->{version_num}");
    }

    return $self->{service_id};
}

sub PreParse {
    my $self      = shift;
    my $sheets    = shift;
    my $file_name = shift;

    $self->_init();

    my $rules = $self->_file_match_rules();

    my $service_id_found  = 0;
    my $version_num_found = 0;
  RULE:
    foreach my $rule (@$rules) {
        my $service_id  = $rule->{service};
        my $version_num = $rule->{version};
        Common::Log::Debug("======== SERVICE: $service_id, VERSION: $version_num ===========================");

        if ( $rule->{file_name} ) {
            my $fname_match = $rule->{file_name};
            if ( $file_name !~ m/$fname_match/i ) {
                next RULE;
            }
        }

        # default to the first sheet
        my $data_sheet_index = $rule->{sheet} || 0;
        my $i = 0;
      SHEET:
        foreach my $sheet (@$sheets) {
            if ( ref($sheet) ne 'ARRAY' or ( $data_sheet_index ne 'any' and $data_sheet_index != $i ) ) {
                $i++;
                next SHEET;
            }

            my $data = $rule->{lines};

            if ( $rule->{match_on_any_row} ) {

                # look for header match on any of the first 80 rows
                my $limit = scalar @$sheet;
                $limit = 80 if ( $limit > 80 );

              OFFSET:
                for ( my $offset = 0 ; $offset < $limit ; $offset++ ) {
                    for ( my $row = 0 ; $row < scalar @$data ; $row++ ) {
                        for ( my $col = 0 ; $col < scalar @{ $data->[$row] } ; $col++ ) {
                            Common::Log::Debug(
                                "HEADER: row(" . ( $row + $offset ) . ") col($col) = '" . $sheet->[ $row + $offset ][$col] . "'" );
                            if ( defined $data->[$row][$col] ) {
                                Common::Log::Debug("HEADER: ($sheet->[$row+$offset][$col]), DATA: ($data->[$row][$col])");
                                if ( $sheet->[ $row + $offset ][$col] =~ m/$data->[$row][$col]/i ) {
                                    $service_id_found  = $service_id;
                                    $version_num_found = $version_num;
                                } else {
                                    $service_id_found  = 0;
                                    $version_num_found = 0;
                                    next OFFSET;
                                }
                            }
                        }
                    }
                    last OFFSET if ($service_id_found);
                }
            } else {
                for ( my $row = 0 ; $row < scalar @$data ; $row++ ) {
                    for ( my $col = 0 ; $col < scalar @{ $data->[$row] } ; $col++ ) {
                        Common::Log::Debug( "HEADER: row($row) col($col) = '" . $sheet->[$row][$col] . "'" );
                        if ( defined $data->[$row][$col] ) {
                            Common::Log::Debug("HEADER: ($sheet->[$row][$col]), DATA: ($data->[$row][$col])");
                            if ( $sheet->[$row][$col] =~ m/$data->[$row][$col]/i ) {
                                $service_id_found  = $service_id;
                                $version_num_found = $version_num;
                            } else {
                                $service_id_found  = 0;
                                $version_num_found = 0;
                                $i++;
                                next SHEET;
                            }
                        }
                    }
                }
            }

            if ($service_id_found) {
                $self->{service_id}  = $service_id_found;
                $self->{version_num} = $version_num_found;
                return $service_id_found;
            }
            $i++;
        }
    }

    $self->errstr("Unrecognized file format");
    return undef;
}

# accessor methods

sub GetServiceID {
    my $self = shift;

    return $self->{service_id};
}

sub GetAlternativeServiceID {
    my $self = shift;

    return $self->{alt_service_id};
}

sub GetVersionNum {
    my $self = shift;

    return $self->{version_num};
}

sub GetFileType {
    my $self = shift;

    if ( $self->{file_type} eq 'e' ) {
        return File::File::FILETYPE_EXCEL;
    } elsif ( $self->{file_type} eq 't' ) {
        if ( $self->{delimiter} eq "\t" ) {
            return File::File::FILETYPE_TABSEP;
        } elsif ( $self->{delimiter} eq '\|' ) {
            return File::File::FILETYPE_PIPESEP;
        } elsif ( $self->{delimiter} eq ',' ) {
            return File::File::FILETYPE_COMMASEP;
        }
    }

    return undef;
}

sub errstr {
    my $self  = shift;
    my $error = shift;

    if ( defined($error) ) {
        $self->{errstr} = $error;
        print STDERR $self->{errstr} . "\n";
    }
    return $self->{errstr};
}

sub bail {
    my $self = shift;
    my $err  = shift;

    $self->errstr($err) if ( defined $err );

    return undef;
}

# private methods

sub _init {
    my $self = shift;

    $self->{path}           = undef;
    $self->{header}         = undef;
    $self->{service_id}     = undef;
    $self->{version_num}    = undef;
    $self->{file_type}      = undef;
    $self->{delimiter}      = undef;
    $self->{errstr}         = undef;
    $self->{alt_service_id} = undef;
}

sub _getTimeStamp {

    # I get YYYY-MM-DD HH:MM:SS
    my $today = Common::Util::today_and_now();

    # return YYYYMMDDHHMMSS
    $today =~ s/\D//g;

    # Now that we can upload multiple files at one time,
    # we need to be more precise.
    my ( $seconds, $microseconds ) = gettimeofday;
    $microseconds = substr( $microseconds, 0, 3 );
    $today .= $microseconds;

    return $today;
}

sub _read_utf8_file {
    my $self     = shift;
    my %args     = @_;
    my $utf8File = $args{file};
    my $lines    = $utf8File->read();

    $self->{delimiter} = Common::Util::GetDelimiter( join( "\n", @$lines ) );

    if ( $self->{delimiter} ) {
        return $self->_read_text_file( %args, lines => $lines );
    } else {
        $self->errstr('Can not determine delimeter');
        return ();
    }
}

sub _read_utf16_file {
    my $self      = shift;
    my %args      = @_;
    my $utf16File = $args{file};
    my $lines     = $utf16File->read();

    $self->{delimiter} = Common::Util::GetDelimiter( join( "\n", @$lines ) );

    if ( $self->{delimiter} ) {
        return $self->_read_text_file( %args, lines => $lines );
    } else {
        $self->errstr('Can not determine delimeter');
        return ();
    }
}

sub _read_ascii_file {
    my $self = shift;
    my %args = @_;
    my $file = $self->{path};

    unless ( open FILE, $file ) {
        $self->errstr("Can't open file $file: $!");
        return undef;
    }

    $self->{delimiter} = Common::Util::GetDelimiter(*FILE);
    my $lines = Common::Util::ReadBookPubTextFiles(*FILE);
    close FILE;

    if ( $self->{delimiter} ) {
        return $self->_read_text_file( %args, lines => $lines );
    } else {
        $self->errstr('Can not determine delimeter');
        return ();
    }

}

sub _read_text_file {
    my $self = shift;
    my %args = @_;

    $self->{file_type} = 't';

    my $csv = Text::CSV_XS->new( { binary => 1 } );    # actually means to allow characters outside of non-ASCII range
    $csv = Text::CSV_XS->new( { binary => 1, escape_char => "\\" } ) if ( $args{clean_quotes} == 1 && $self->{possible_quote} == 1 );
    my $alternateCSV = Text::CSV_XS->new( { allow_loose_quotes => 1, escape_char => '' } );

    my $semicolonCSV = Text::CSV_XS->new( { binary => 1, sep_char => ';' } );
    $semicolonCSV = Text::CSV_XS->new( { binary => 1, sep_char => ';', escape_char => "\\" } )
      if ( $args{clean_quotes} == 1 && $self->{possible_quote} == 1 );
    my $alternateSemicolonCSV = Text::CSV_XS->new( { allow_loose_quotes => 1, escape_char => '', sep_char => ';' } );

    my @header;

    if ( $self->{delimiter} ) {
        my $lines = $args{lines};
        my $limit = $args{limit} || scalar @$lines;

        my $lineNum = 1;

        for ( my $i = 0 ; $i < $limit ; $i++ ) {
            my $line = $lines->[$i];

            # Make sure the incoming text is properly encoded as UTF8.
            # JPK - In theory, our UTF8::Encode method will work on just about
            # any string we give it.  At least it should work on strings that
            # are UTF8 already (but are not properly flagged), or latin1.
            #
            $lines->[$i] = Common::UTF8::Encode($line);

            # There shouldn't be a trailing CR on a line, but for some
            # UTF8 files this is not the case. Remove the trailing CR
            # (if present) to prevent $cvs->parse from failing.
            # See Case 13763 for more information.

            # The 'if' here is somewhat pointless
            #
            #            $lines->[$i] =~ s/\x0d$// if ( $line =~ m/\x0d$/ );
            $lines->[$i] =~ s/\x0d$//;

            # Replace any non-tab (0x09) control characters with '?'
            #
            $lines->[$i] =~
s/(\x00|\x01|\x02|\x03|\x04|\x05|\x06|\x07|\x08|\x0a|\x0b|\x0c|\x0d|\x0e|\x0f|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1a|\x1b|\x1c|\x1d|\x1e|\x1f)/\?/g;

            my @row;
            if ( $self->{delimiter} eq ',' ) {

                # The "Faithworks" dualtone sales files have some wierd format where
                # some fields have ="data" format even though their csv files that
                # are not '"' qualified. The crude hack below cleans this up.
                $lines->[$i] =~ s/="/"/g;

                # some files have a single " which confuses the parse method
                my @commaCount = $lines->[$i] =~ m/[^\\]"/g;

                #$lines->[$i] =~ s/"// if (scalar @commaCount == 1);

                # a rather gross thing we have to do for CSV files with spaces around the commas.
                # the big drawback is that it get's rid of spaces within quoted strings.
                # we could deal with the quoted fields, but then i forget the point of using
                # the Text::CSV_XS library...
                $lines->[$i] =~ s/\s*,\s*/,/g;

                my $test_quote = $lines->[$i];
                $test_quote =~ s/\",\"//;
                $test_quote =~ s/^\"//;
                $test_quote =~ s/\"$//;
                $self->{possible_quote} = 1 if ( $test_quote =~ /\"/ && !$args{clean_quotes} );

                if ( $args{clean_quotes} == 1 && $self->{possible_quote} == 1 ) {
                    if ( $lines->[$i] !~ /\"/ ) {
                        $lines->[$i] =~ s/,/\t/g;
                    } else {
                        if ( $lines->[$i] =~ /^\"/ && $lines->[$i] =~ /\"$/ && $lines->[$i] =~ /\",\"/ ) {
                            $lines->[$i] =~ s/^\"//;
                            $lines->[$i] =~ s/\"$//;
                            $lines->[$i] =~ s/\",\"/\t/g;
                            $lines->[$i] =~ s/\"/\\\"/g;
                        } else {
                            $lines->[$i] =~ s/\'/\\\'/g;
                            my $subSwitch   = 0;
                            my $workingLine = $lines->[$i];
                            my @comaSubs;
                            my $comaSubsCount = 0;
                            while ( $subSwitch < 1 ) {
                                $workingLine =~ m/(\"[^\"]*\")/;
                                $comaSubs[$comaSubsCount] = $1;
                                my $subField = "ddd" . $comaSubsCount . "bbb";
                                $workingLine =~ s/(\"[^\"]*\")/$subField/;
                                $comaSubs[$comaSubsCount] =~ s/^\"//;
                                $comaSubs[$comaSubsCount] =~ s/\"$//;
                                if ( $workingLine !~ /\"[^\"]*\"/ ) {
                                    $workingLine =~ s/,/\t/g;
                                    $subSwitch = 1;
                                }
                                $comaSubsCount++;
                            }
                            for ( my $x = 0 ; $x < @comaSubs ; $x++ ) {
                                my $subField  = "ddd" . $x . "bbb";
                                my $realField = $comaSubs[$x];
                                $workingLine =~ s/$subField/$realField/;
                            }
                            $lines->[$i] = $workingLine;
                        }
                    }
                    if ( $csv->parse( $lines->[$i] ) ) {
                        @row = split( "\t", $lines->[$i] );
                    } elsif ( $alternateCSV->parse( $lines->[$i] ) ) {
                        @row = split( "\t", $lines->[$i] );
                    } else {
                        $self->errstr("Double quotes must be escaped at line $lineNum");
                        return undef;
                    }
                } else {
                    if ( $csv->parse( $lines->[$i] ) ) {
                        @row = Common::Util::trimquotes( $self->_cleanup( $csv->fields() ) );
                    } elsif ( $alternateCSV->parse( $lines->[$i] ) ) {
                        @row = Common::Util::trimquotes( $self->_cleanup( $alternateCSV->fields() ) );
                    } else {
                        $self->errstr("error parsing file at line $lineNum");
                        return undef;
                    }
                }
            } elsif ( $self->{delimiter} eq ';' ) {
                my $test_quote = $lines->[$i];
                $test_quote =~ s/\";\"//;
                $test_quote =~ s/^\"//;
                $test_quote =~ s/\"$//;
                $self->{possible_quote} = 1 if ( $test_quote =~ /\"/ && !$args{clean_quotes} );

                if ( $args{clean_quotes} == 1 && $self->{possible_quote} == 1 ) {
                    if ( $lines->[$i] !~ /\"/ ) {
                        $lines->[$i] =~ s/;/\t/g;
                    } else {
                        if ( $lines->[$i] =~ /^\"/ && $lines->[$i] =~ /\"$/ && $lines->[$i] =~ /\";\"/ ) {
                            $lines->[$i] =~ s/^\"//;
                            $lines->[$i] =~ s/\"$//;
                            $lines->[$i] =~ s/\";\"/\t/g;
                            $lines->[$i] =~ s/\"/\\\"/g;
                        } else {
                            $lines->[$i] =~ s/\'/\\\'/g;
                            my $subSwitch   = 0;
                            my $workingLine = $lines->[$i];
                            my @comaSubs;
                            my $comaSubsCount = 0;
                            while ( $subSwitch < 1 ) {
                                $workingLine =~ m/(\"[^\"]*\")/;
                                $comaSubs[$comaSubsCount] = $1;
                                my $subField = "ddd" . $comaSubsCount . "bbb";
                                $workingLine =~ s/(\"[^\"]*\")/$subField/;
                                $comaSubs[$comaSubsCount] =~ s/^\"//;
                                $comaSubs[$comaSubsCount] =~ s/\"$//;
                                if ( $workingLine !~ /\"[^\"]*\"/ ) {
                                    $workingLine =~ s/;/\t/g;
                                    $subSwitch = 1;
                                }
                                $comaSubsCount++;
                            }
                            for ( my $x = 0 ; $x < @comaSubs ; $x++ ) {
                                my $subField  = "ddd" . $x . "bbb";
                                my $realField = $comaSubs[$x];
                                $workingLine =~ s/$subField/$realField/;
                            }
                            $lines->[$i] = $workingLine;
                        }
                    }
                    if ( $semicolonCSV->parse( $lines->[$i] ) ) {
                        @row = split( "\t", $lines->[$i] );
                    } elsif ( $alternateSemicolonCSV->parse( $lines->[$i] ) ) {
                        @row = split( "\t", $lines->[$i] );
                    } else {
                        $self->errstr("Double quotes must be escaped at line $lineNum");
                        return undef;
                    }
                } else {

                    # extra rules for weird csv formatting, see RSD-4824
                    if ( $lines->[$i] =~ /"{2,};"{2,}/ ) {
                        my $sep = ';';
                        $lines->[$i] =~ s/,+$//;
                        $lines->[$i] =~ s/"+/"/g;
                        $lines->[$i] =~ s/","/,/g;
                        $lines->[$i] =~ s/"?;"?/$sep/g;
                        $lines->[$i] =~ s/^["']|["']$//g;
                    }

                    if ( $semicolonCSV->parse( $lines->[$i] ) ) {
                        @row = Common::Util::trimquotes( $self->_cleanup( $semicolonCSV->fields() ) );
                    } elsif ( $alternateSemicolonCSV->parse( $lines->[$i] ) ) {
                        @row = Common::Util::trimquotes( $self->_cleanup( $alternateSemicolonCSV->fields() ) );
                    } else {
                        $self->errstr("error parsing file at line $lineNum");
                        return undef;
                    }
                }
            } else {
                @row = Common::Util::trimquotes( $self->_cleanup( split( $self->{delimiter}, $lines->[$i] ) ) );
            }

            $lineNum++;

            push @header, \@row;
        }

        if ( $args{clean_quotes} == 1 && $self->{possible_quote} == 1 ) {
            $self->{possible_quote} = 0;
            $args{clean_quotes} = 0;
        }
    }

    return \@header;
}

sub _read_excel_file {
    my $self  = shift;
    my %args  = @_;
    my $print = $args{print};
    my $isXLSX;

    my $file = $self->{path} || $args{path};
    my $book;

    my $file_type = lc(`file $self->{path}`);
    if ( $file =~ /\.xlsx$/ || $file_type =~ /\bzip\b/ || $file_type =~ /excel 2007/ || $file_type =~ /\bmicrosoft ooxml\b/ ) {
        $book   = RS::Spreadsheet::XLSX->new($file);
        $isXLSX = 1;
    } else {
        open( IN, "$file" ) || die "Can not read: $file";
        binmode(IN);
        read( IN, my $buf, 2 );

        if ( sprintf( "%02x", ord($buf) ) eq "d0" ) {
            $book = Spreadsheet::ParseExcel::Workbook->Parse($file);
        } else {
            die "Unrecognized Excel Format\n";
        }
    }

    unless ( defined $book && defined $book->{Worksheet} ) {
        $self->errstr("The file could not be parsed as an Excel file");
        return undef;
    }

    $self->{file_type} = 'e';

    my @sheets      = ();
    my @sheet_names = ();
    push @sheets, @{ $book->{Worksheet} };
    for ( my $i = 0 ; $i < $book->{SheetCount} ; $i++ ) {
        push @sheet_names, $book->{Worksheet}->[$i]->{Name};
    }

    my @sheet_lines = ();
    foreach my $sheet (@sheets) {
        my @lines = ();
        for ( my $row_num = 0 ; defined $sheet->{MaxRow} && $row_num <= $sheet->{MaxRow} ; $row_num++ ) {
            my @row;
            for ( my $col_num = 0 ; defined $sheet->{MaxCol} && $col_num <= $sheet->{MaxCol} ; $col_num++ ) {
                my $cell = $sheet->{Cells}[$row_num][$col_num];
                if ($cell) {
                    my $value = $cell->{Val};

                    # clean up ucs2/utf16 (two byte) strings.
                    # right now, the 'Code' attribute of the Cell
                    # is our only indicator for this. There might
                    # be other values besides ucs2 that we haven't seen yet.

                    if ( $cell->{Code} && $cell->{Code} eq 'ucs2' ) {
                        $value = Common::UTF8::Encode( $value, Common::UTF8::kEncodingUCS2 );
                    }

                    if ( lc( $cell->{Type} ) eq 'date' ) {

                        # Excel for Mac OS uses 1904 epoch, so $book->{Flg1904} will be set to 1, otherwise 0
                        $value = Spreadsheet::ParseExcel::Utility::ExcelFmt( "yyyy-mm-dd", $value, $book->{Flg1904} );
                    } else {
                        $value = Common::Util::trimquotes( $self->_cleanup($value) );    # raw value without formatting
                    }

                    if ($isXLSX) {
                        $value =~ s/&amp;/&/;
                        $value =~ s/&lt;/</;
                        $value =~ s/&gt;/>/;
                        $value =~ s/&apos;/'/g;
                        $value =~ s/&quot;/"/g;
                    }

                    push @row, $value;
                } else {
                    push @row, '';    # put an empty string in this cell
                }
            }
            if ($print) {
                print join( "\t", @row ), "\n";
            } else {
                push @lines, \@row;
            }
        }
        push @sheet_lines, \@lines;
    }

    if ($print) {
        return 1;
    } else {
        return [ \@sheet_lines, \@sheet_names ];
    }
}

sub _resaveUnsupportedXLS {
    my ( $self, $file ) = @_;
    return unless $file && -f $file;

    eval { copy $file, $file . '.bak' };
    print STDERR "Try to resave XLS file: $file\n";
    my $wrapper = "/app/tools/common/lib/Common/Utils/resaveXLS.py";
    my $result  = `python $wrapper $file`;

    chomp $result;
    if ( $result =~ /success/mi ) {
        print STDERR "File successfuly resaved.\n";
        return 1;
    }

    print STDERR "Can't resave file: $result\n";
    return;
}

sub _looks_like_excel {
    my $filePath = shift;
    my ($ext)    = $filePath =~ /\.(\w+)$/;
    my $fileDesc = lc(`file $filePath`);

    return -B $filePath
      && ( $ext =~ /xls/i
        || $fileDesc =~ /\bmicrosoft ooxml\b/
        || $fileDesc =~ /\boffice\b/
        || $fileDesc =~ /\bexcel\b/
        || $fileDesc =~ /\bzip\b/ ) ? 1 : 0;
}

sub _looks_like_excel_xml_workbook {
    my $filePath = shift;

    return if !-f $filePath && !-T $filePath;

    my ($rowLimit, $match) = (10, 0);

    open my $fh, '<', $filePath or return;
    while ( my $line = <$fh> ) {
        chomp $line;

        return unless $rowLimit--;
        $match++ if $line =~ /^<\?xml version/i;
        if ( $line =~ /<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"/i ) {
            $match++;
            last;
        }
    }
    close $fh;

    return $match;
}

sub _read_excel_xml_workbook_file {
    my ( $self, %args ) = @_;

    my $filePath = $self->{path} || $args{path};

    # replace special xml symbols in the original xml file
    my $duplicatePath = $filePath . '.bak';
    copy($filePath, $duplicatePath) or die "Copy failed: $!";
    open my $oldFH, '<', $duplicatePath or die "Can't open file $duplicatePath $!";
    open my $newFH, '>', $filePath or die "Can't open file $filePath $!";
    while ( my $line = <$oldFH> ) {
        $line =~ s/\n//;
        $line =~ s/\&/&amp;/g;
        print $newFH "$line\n";
    }
    close $newFH;
    close $oldFH;

    # readd an xml file
    my $oDom   = XML::LibXML->load_xml( location => $filePath, recover => 2, suppress_errors => 1 );
    my $oXPath = XML::LibXML::XPathContext->new( $oDom );
    $oXPath->registerNs('ss', 'urn:schemas-microsoft-com:office:spreadsheet');

    my ( @sheet_names, @sheet_lines );
    foreach my $oSheetName ( $oXPath->findnodes('/ss:Workbook/ss:Worksheet/@ss:Name') ) {
        push @sheet_names, $oSheetName->to_literal;

        my @sheet_rows;
        foreach my $oRow ( $oSheetName->findnodes('//ss:Table/ss:Row') ) {
            my @row;
            foreach my $oCellData ( $oRow->findnodes('ss:Cell/ss:Data') ) {
                push @row, $oCellData->to_literal || '';
            }
            push @sheet_rows, \@row;
        }
        push @sheet_lines, \@sheet_rows;
    }

    return [ \@sheet_lines, \@sheet_names ];
}

sub _cleanup {
    my $self = shift;
    my @data = @_;

    for (@data) {
        s/[\n\r\t]+/ /g;    # strip tabs and linebreaks
        s/^\s+//;
        s/\s+$//;
    }

    return wantarray ? @data : $data[0];
}

sub _determineAlternativeServiceID {
    my ($self, $aLines) = @_;

    # for now works oonnly for RoyaltyShare v4 (RSD-6805)
    return unless $self->GetServiceID  && $self->GetServiceID  == 28;
    return unless $self->GetVersionNum && $self->GetVersionNum == 4;

    my $aFirstLine = $aLines->[0];
    my ($serviceField, $serviceName) = @$aFirstLine[0, 1];
    if ( $serviceField =~ /^Service Name$/i && $serviceName ) {
        return $self->{alt_service_id} = BookPub::Tracker::Service::GetServiceIDByName($serviceName);
    }

    return;
}

sub _file_match_rules {
    my $self = shift;

    # array(ref) of hashrefs containing service, version and rule lines
    # ex: $rule = $rules->[i]; service_id->{$version_num}

    # rule order is important!
    # general rules of thumb:
    # 1) rule order is important!
    # 2) more specific rules should be placed before less specific rules
    # 3) each rule within the same service should typically have a unique version number
    # 4) version numbers must stay the same forever (unless you *know* a version has NEVER been used)
    # 5) it's okay for rule versions to be out of sequence in order to satisfy rules 1 and 2
    #    (i.e. a new rule n+1 for a service might be placed before older (and lower numbered) versions
    #    because it is more specific)
    # 6) so far, there hasn't been any overlap between services, but certainly possible, when adding
    #    a new service look for similarity and place accordingly (again, service_id/version_num order
    #    isn't important as long as they're unique)
    # 7) use sheet -> 'any' when the sheet order varies
    # 8) try to place any rules with match_on_any_row => 1 at/near the end to minimize unecessary searching
    # 9) file_name matching has been reworked to be used _in conjunction_ with line matching.

    my $rules = [

        # Amazon (Hachette jumbo file)
        # This file is huuuuge, so it's really best for everyone (and our servers)
        # if we can check for it first and move on as quickly as possible.
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 23,
            lines   => [ [
                    'INVOICE_DATE|invoice_date',       'ORDER_ID|order_id',
                    'ORDER_DATETIME|order_datetime',   'PHYSICAL_ISBN10|physical_isbn10',
                    'PHYSICAL_ISBN13|physical_isbn13', 'EISBN|eISBN',
                    'TITLE_NAME|Title_Name',           'ASIN',
                    'AUTHOR|Author',                   'IMPRINT|imprint',
                    'FORMAT|format',                   'units purchased',
                    'units refunded',                  'Net Units',
                    'Our Price',                       'Our Price Currency',
                    'Publisher Price',                 'Publisher Price Currency',
                    'Discount Percentage',             'Payment Amount',
                    'Payment Amount Currency',         '^$'
                ],
            ],
        },
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 29,
            lines   => [ [
                    'report_date',                    'transaction_id',
                    'order_id',                       'transaction_date',
                    'date_used_for_tax_calc',         'isbn',
                    'asin',                           'title',
                    'primary_author',                 'product_tax_code',
                    'quantity_purchased',             'transaction_status',
                    'publisher_price',                'publisher_price_currency',
                    'our_price',                      'our_price_currency',
                    'tax_type_code',                  'transaction_type_code',
                    'tax_usage_type_code',            'rule_reason_code',
                    'buyer_exemption_code',           'bill_to_city',
                    'bill_to_state',                  'bill_to_postal_code',
                    'bill_to_country',                'city_taxed_jurisdiction',
                    'county_taxed_jurisdiction',      'state_taxed_jurisdiction',
                    'district_taxed_jurisdiction',    'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',      'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',    'state_exempt_sale_amount',
                    'county_taxable_sale_amount',     'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',   'county_exempt_sale_amount',
                    'city_taxable_sale_amount',       'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',     'city_exempt_sale_amount',
                    'district_taxable_sale_amount',   'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount', 'district_exempt_sale_amount',
                    'district_tax_amount',            'city_tax_amount',
                    'county_tax_amount',              'state_tax_amount',
                    'state_taxed_juris_tax_rate',     'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',      'district_taxed_juris_tax_rate',
                    'payment_amount',                 'payment_amount_currency',
                    'tax_payment_amount',             'tax_payment_currency',
                    '|program_type',                  '^$'
                ],
            ],
        },

        # Amazon (Macmillan and Other Publishers Tax File), extends version 29 w/ incentive payment fields
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 50,
            lines   => [ [
                    'report_date',                    'transaction_id',
                    'order_id',                       'transaction_date',
                    'date_used_for_tax_calc',         'isbn',
                    'asin',                           'title',
                    'primary_author',                 'product_tax_code',
                    'quantity_purchased',             'transaction_status',
                    'publisher_price',                'publisher_price_currency',
                    'our_price',                      'our_price_currency',
                    'tax_type_code',                  'transaction_type_code',
                    'tax_usage_type_code',            'rule_reason_code',
                    'buyer_exemption_code',           'bill_to_city',
                    'bill_to_state',                  'bill_to_postal_code',
                    'bill_to_country',                'city_taxed_jurisdiction',
                    'county_taxed_jurisdiction',      'state_taxed_jurisdiction',
                    'district_taxed_jurisdiction',    'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',      'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',    'state_exempt_sale_amount',
                    'county_taxable_sale_amount',     'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',   'county_exempt_sale_amount',
                    'city_taxable_sale_amount',       'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',     'city_exempt_sale_amount',
                    'district_taxable_sale_amount',   'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount', 'district_exempt_sale_amount',
                    'district_tax_amount',            'city_tax_amount',
                    'county_tax_amount',              'state_tax_amount',
                    'state_taxed_juris_tax_rate',     'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',      'district_taxed_juris_tax_rate',
                    'payment_amount',                 'payment_amount_currency',
                    'tax_payment_amount',             'tax_payment_currency',
                    'program_type',                   'incentive_payment_rate',
                    'incentive_payment_amount',       'incentive_payment_currency',
                    'base_payment_amount',            'base_payment_amount_currency',
                    '^$'
                ],
            ],
        },

        # CourseSmart format
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 1,
            lines   => [
                [undef], [undef],
                [ 'eTextISBN10_Value', 'eTextISBN13_Value', 'Title of Textbook', 'Total # of Books', 'Unit Price', 'Total Value' ]
            ],
        },

        # CourseSmart format, v2
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 2,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Account ID',
                    'User Account Country Institution',
                    'Transaction ID',
                    'Transaction Date',
                    'Gross', 'Net Amount', 'Daily amount', 'Number of days',
                    'Tax Amount', 'ISBN', 'eText ISBN-13',
                    'Duration', 'Publisher Name'
                ],
            ],
        },

        # CourseSmart format, v3
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 3,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Account ID',
                    'Country Institution',
                    'Institution name',
                    'Number of units',
                    'Transaction ID',
                    'Date',
                    'Gross',
                    'Net Amount',
                    'Daily amount',
                    'Number of days',
                    'Tax Amount',
                    'ISBN',
                    'eText ISBN\-13',
                    'Duration',
                    'Publisher Name'
                ],
            ],
        },

        # CourseSmart format, v4
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 4,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Transaction ID',
                    'Publisher Code',
                    'Redemption Program Type',
                    'Partner Program Name',
                    'Transaction Date',
                    'Imprint Name',
                    'Product Type',
                    'College PID',
                    'College Province Code',
                    'College Postal Code',
                    'College Name',
                    'FPID',
                    'eText ISBN\-10',
                    'eText ISBN\-13',
                    'Print ISBN\-10',
                    'Print ISBN\-13',
                    'Author',
                    'Book Title',
                    'Tax State',
                    'Subscription Duration',
                    'Unit',
                    'Net Amount',
                    '^$'
                ],
            ],
        },

        # CourseSmart format, v5
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 5,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Publisher',
                    'TransactionID',
                    'Transaction Date',
                    'Net Amount Reporting',
                    'Recognition Year Month',
                    'Revenue',
                    'Subscription Duration',
                    'FPID',
                    'eText ISBN\-10',
                    'eText ISBN\-13',
                    'Print ISBN\-10',
                    'Print ISBN\-13',
                    'Saleable ISBN\-10',
                    'Saleable ISBN\-13',
                    'Book Title',
                    'Author',
                    'College PID',
                    'College Name',
                    'College City',
                    'College Street',
                    'College Postal Code',
                    'Publisher Code',
                    'Partner Name',
                    'Partner Program Name',
                    'Redemption Program Type',
                    'Imprint Name'
                ],
            ],
        },

        # CourseSmart format, v6
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 6,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Transaction ID',
                    'Publisher Code',
                    'Redemption Program Type',
                    'Partner Program Name',
                    'Transaction Date',
                    'Imprint Name',
                    'Product Type',
                    'College PID',
                    'College Province Code',
                    'College Postal Code',
                    'College Name',
                    'FPID',
                    'eText ISBN\-10',
                    'eText ISBN\-13',
                    'Print ISBN\-10',
                    'Print ISBN\-13',
                    'Author',
                    'Book Title',
                    'Tax State',
                    'Subscription Duration',
                    'Unit',
                    'Net Amount',
                    'Net Amount Reporting',
                    '^$'
                ],
            ],
        },

        # CourseSmart format, v7
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 7,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Publisher',
                    'ImprintName',
                    'TransactionID',
                    'Transaction Date',
                    'Transaction YearMonth',
                    'Partner Name',
                    'Partner Program Name',
                    'Redemption Program Type',
                    'FPID',
                    'eText ISBN-10',
                    'eText ISBN-13',
                    'Print ISBN-10',
                    'Print ISBN-13',
                    'Book Title',
                    'Author',
                    'LineItemType',
                    'College PID',
                    'College Name',
                    'College City',
                    'College Street',
                    'College Postal Code',
                    'SubscriptionDuration',
                    'Unit',
                    'Net Amount Reporting',
                    '^$'
                ],
            ],
        },

        # CourseSmart format, v8
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 8,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'ReportingYearQuarter', 'ReportingYearMonth', 'Uploaded_Date', 'Institution',
                    'InvoiceDate',          'CSInvoice',          'ISBN',          'SourcePublisher',
                    'Publisher',            'Title',              'Edition',       'Author',
                    'NumberOfUnits',        'PricePerUnit',       'TotalNetSale',  'TotalGrossSale',
                    'Term',                 'TermStart',          'TermEnd',       'ZipCode',
                    'CollegePID',           'Course',             'PublisherCode', 'FPID',
                    '^$'
                ],
            ],
        },

        # CourseSmart format, v9
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 9,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Publisher',
                    'ImprintName',
                    'TransactionID',
                    'Transaction Date',
                    'Transaction YearMonth',
                    'Partner Name',
                    'Partner Program Name',
                    'Redemption Program Type',
                    'FPID',
                    'eText ISBN-10',
                    'eText ISBN-13',
                    'Print ISBN-10',
                    'Print ISBN-13',
                    'Book Title',
                    'Author',
                    'LineItemType',
                    'College PID',
                    'College Name',
                    'College City',
                    'College Street',
                    'College Postal Code',
                    'College State',
                    'SubscriptionDuration',
                    'Unit',
                    'Net Amount Reporting',
                    '^$'
                ],
            ],
        },

        # CourseSmart format, v10
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 10,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Transaction_ID',              'Publisher_Code',      'Redemption_Program_Type', 'Partner_Program_Name',
                    'Transaction_Date',            'Imprint_Name',        'Product_Type',            'CollegePID',
                    'College_Province_Code',       'College_Postal_Code', 'College_Name',            'FPID',
                    'eText ISBN-10',               'eText ISBN-13',       'Print ISBN-10',           'Print ISBN-13',
                    'Author',                      'Book Title',          'Tax State',               'Subscription Duration',
                    'Unit',                        'Net Amount',          'Net Amount Reporting',    'Publisher_Abbr',
                    'LineItemType|Line Item Type', 'Pub Comp pct',        'Revenue Share',           '^$'
                ],
            ],
        },

        # CourseSmart format, v11
        {
            service => BookPub::Tracker::Service::COURSE_SMART,
            version => 11,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'TransactionID',       'Publisher',          'RedemptionProgramType', 'PartnerProgramName',
                    'TransactionDate',     'ImprintName',        'ProductType',           'CollegePID',
                    'CollegeProvinceCode', 'CollegePostalCode',  'CollegeName',           'FPID',
                    'ISBN10',              'ISBN13',             'PrintISBN10',           'PrintISBN13',
                    'Author',              'BookTitle',          'TaxState',              'SubscriptionDuration',
                    'Unit',                'NetAmountReporting', 'DistributorFeeRate',    'DistributorFeeAmount',
                    'PublisherCode',       'LineItemType',       'PubCompPercent',        'RevenueShare',
                    '^$'
                ],
            ],
        },

        # CreateSpace format
        {
            service          => BookPub::Tracker::Service::CREATE_SPACE,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'Sales Channel',
                    'M0D ID',
                    'PO#',
                    'ISBN',
                    'EAN',
                    'Imprint Name',
                    'Author',
                    'Title',
                    'Units Sold',
                    'List Price',
                    'Total List Price',
                    'Extended Price %',
                    'Extended Price per Unit',
                    'Total Extended Price',
                    'Unit Fees per Unit',
                    'Total Unit Fees',
                    'Publisher Compensation per Unit',
                    'Total Publisher Compensation'
                ],

            ],
        },

        # Follett
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 1,
            lines   => [ [
                    'Year/Month',        'PO #',     'Digital ISBN-13', 'Publisher',   'Title', 'Author',
                    'Publisher Part ID', 'QTY',      'Cost',            'follett_upc', undef,   'type',
                    'School',            'Store ID', 'date'
                ],
            ],
        },

        # Follett - ebooks
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 2,
            lines => [ [undef], [ 'Publisher', 'eBook  ISBN', 'Title', 'List  Price', 'Royalty', 'Net  Value', 'Units  Sold', 'Totals' ], ],
        },

        # Follett - ebooks
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 3,
            lines   => [
                [undef],
                [
                    'eBook ISBN', 'Title', 'List.*Price', 'Royalty', 'Net Value', 'Units Sold', 'Totals'
                ],

            ],
        },

        # Follett - ebooks
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 4,
            lines   => [
                [undef], [undef], [ undef, 'FLR#', 'eISBN', 'Title', '1:unlimited', 'ListPrice', 'Dscnt', 'Cost', 'Units', 'Total Cost' ],
                [undef], [undef], ['Vendor*'],
            ],
        },

        # Follett - ebooks - version 4, new header version...
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 4,
            lines   => [
                [undef], [undef],
                [ undef, 'FLR#', 'eISBN', 'Title', '1:unlimited', 'SRP', 'Dscnt', 'Fee|Fee.*Units', 'Units|', 'Payable Amount' ],
                [undef], [undef], ['Vendor*'],
            ],
        },

        # Follett - ebooks
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 5,
            lines   => [ [undef], [undef], [ 'Library', 'Author', 'Title', 'ISBN', 'Library Price', 'Quantity', 'Amount Payable', '^$' ], ],
        },

        # Follett - ebooks
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 6,
            lines   => [
                [undef],
                [ undef, undef, undef, undef, undef, undef, undef, 'Date: .*' ],
                [ 'ISBN', 'Title', 'Library Author', 'Library', 'Zip', 'Cntry', 'Lib Price', 'Qty', 'Amt Payable', '^$' ],
            ],
        },

        # Follett - ebooks
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 7,
            lines   => [
                [ undef, undef, undef, undef, undef, undef, undef, 'Date:' ],
                [ 'ISBN', 'Title', 'Author', 'Library', 'Zip', 'Cntry', 'Lib Price', 'Quantity', 'Disc Amt', 'Payable', '^$' ],
            ],
        },

        # Follett - ebooks
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 8,
            lines   => [
                [ undef, undef, undef, undef, undef, undef, 'Date: .*' ],
                [ 'Library', 'Author', 'Title', 'ISBN', 'Library Price', 'Quantity', 'Disc Amount', 'Payable' ],
            ],
        },

        # Follett - ebooks
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 9,
            lines   => [
                [ undef, undef, undef, undef, undef, undef, undef, 'Date:' ],
                [ 'ISBN', 'Title', 'Author', 'Library', 'Zip', 'Cntry', 'Lib Price', 'Quantity', 'Disc Amt', 'Payable', 'Currency', '^$' ],
            ],
        },

        # Follett - ebooks (RSD-7178)
        {
            service => BookPub::Tracker::Service::FOLLETT,
            version => 10,
            lines   => [
                [ undef, undef, undef, undef, undef, undef, undef, 'Date:' ],
                [ 'ISBN', 'Title', 'Author', 'Library', 'Zip', 'Cntry', 'Lib Price', 'Quantity', 'Disc Amt', 'Payable', 'Currency', 'Payment Amount', 'Payment Currency', '^$' ],
            ],
        },

        # Sony
        {
            service => BookPub::Tracker::Service::SONY,
            version => 1,
            lines   => [
                [undef],
                [
                    'Publisher Name',
                    'Imprint Name',
                    'ISBN',
                    'ISBN13',
                    'Title Name',
                    'Author Name',
                    'List Price',
                    'Rev Share',
                    'Units',
                    'Amount Owed'
                ],
            ],
        },

        # Sony v3
        {
            service          => BookPub::Tracker::Service::SONY,
            version          => 3,
            match_on_any_row => 1,
            lines            => [ [
                    undef,
                    'Iso Country Code',
                    'ISBN13',
                    'Title Name',
                    '(Qty Sold|Units)',
                    'Qty Refunded',
                    'Net Qty',
                    'Customer Price',
                    'Unit Approved Promo Discount',
                    'Actual Customer Price',
                    'Publisher Work Proceeds',
                    'Total Approved Promo Discount',
                    'Actual Publisher Work Proceeds',
                    'Contractual Commission Rate',
                    'Agent Commission Before Discount',
                    'Sales Tax',
                    'Effective Agent Commission After Discount',
                    'Revenue',
                    'Sale Date Day'
                ],
            ],
        },

        # Sony v12
        {
            service => BookPub::Tracker::Service::SONY,
            version => 12,
            lines   => [
                ( [undef] ) x 3,
                [
                    undef,
                    'Iso Country Code',
                    'Isbn13',
                    'Title Name',
                    'Units',
                    'Qty Refunded',
                    'Net Qty',
                    'Unit Approved Promo Discount',
                    'List Price',
                    'Actual Customer Price',
                    'Publisher Work Proceeds',
                    'Total Approved Promo Discount',
                    'Actual Publisher Work Proceeds',
                    'Contractual Commission Rate',
                    'Agent Commission Before Discount',
                    'Sales Tax',
                    'Effective Agent Commission After discount',
                    'Revenue',
                    'Sale Date Day',
                    '^$'
                ],
            ],
        },

        # Sony v13
        {
            service => BookPub::Tracker::Service::SONY,
            version => 13,
            lines   => [
                ( [undef] ) x 3,
                [
                    undef,
                    'Iso Country Code',
                    'Isbn13',
                    'Title Name',
                    'Units',
                    'Qty Refunded',
                    'Net Qty',
                    'List Price',
                    'Unit Approved Promo Discount',
                    'Actual Customer Price',
                    'Publisher Work Proceeds',
                    'Total Approved Promo Discount',
                    'Actual Publisher Work Proceeds',
                    'Contractual Commission Rate',
                    'Agent Commission Before Discount',
                    'Sales Tax',
                    'Effective Agent Commisss?ion After Discount',
                    'Revenue',
                    'Sale Date Day',
                    '^$'
                ],
            ],
        },

        # Sony v4
        {
            service => BookPub::Tracker::Service::SONY,
            version => 4,
            lines   => [
                ( [undef] ) x 3,
                [
                    undef,
                    'Iso Country Code',
                    'Ship-To State',
                    'Ship-To Zip',
                    'Agent Transaction ID#',
                    'Transaction Day',
                    'ISBN13',
                    'Title Name',
                    'Qty Sold',
                    'Customer Price',
                    'Unit Approved Promo Discount',
                    'Actual Customer Price',
                    'Publisher Work Proceeds',
                    'Total Approved Promo Discount',
                    'Actual Publisher Work Proceeds',
                    'Sales Tax \$ Charged',
                    'Geocode'
                ],
            ],
        },

        # Sony v5
        {
            service => BookPub::Tracker::Service::SONY,
            version => 5,
            lines   => [
                [undef],
                [
                    'Publisher Name',
                    'Imprint Name',
                    'ISBN',
                    'ISBN13',
                    'Title Name',
                    'Author Name',
                    'Territory',
                    'Currency',
                    'List Price',
                    'Rev Share',
                    'Units',
                    'Amount Owed'
                ],
            ],
        },

        # Sony v7, HayHouse
        {
            service => BookPub::Tracker::Service::SONY,
            version => 7,
            lines   => [ [
                    'Publisher Name',
                    'Imprint Name',
                    'ISBN',
                    'ISBN13',
                    'Title Name',
                    'Author Name',
                    'Territory',
                    'Currency',
                    'List Price',
                    'Rev Share',
                    'Units',
                    'Amount Owed'
                ],
            ],
        },

        # Sony v8
        {
            service => BookPub::Tracker::Service::SONY,
            version => 8,
            lines   => [
                [undef],
                [
                    'Publisher Name',
                    'Imprint Name',
                    'ISBN',
                    'ISBN13',
                    'Title Name',
                    'Author Name',
                    'Territory',
                    'Currency',
                    'List Price',
                    'Alt List Price',
                    'Rev Share',
                    'Units',
                    'Amount Owed'
                ],
            ],
        },

        # Sony v9
        {
            service => BookPub::Tracker::Service::SONY,
            version => 9,
            lines   => [
                [undef],
                [
                    'Publisher Name',
                    'Imprint Name',
                    'ISBN',
                    'ISBN13',
                    'Title Name',
                    'Author Name',
                    'Territory',
                    'Currency',
                    'List Price',
                    'Alt List Price',
                    'Rev Share',
                    'Units',
                    'Amount Owed'
                ],
            ],
        },

        # Sony v10
        {
            service => BookPub::Tracker::Service::SONY,
            version => 10,
            lines   => [
                [undef],
                [
                    '',      '',            '',           '',            '',          '',
                    'ISBN',  'ISBN13',      'Title Name', 'Author Name', 'Territory', 'Currency',
                    'Total', 'Content Fee', 'Total Taxes'
                ],
            ],
        },

        # Sony v11
        {
            service          => BookPub::Tracker::Service::SONY,
            version          => 11,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Main Product ID# type',
                    'Main Product ID#',
                    'Imprint',
                    'Product title',
                    'Product author',
                    'Gross sold quantity',
                    'Returned/ refunded quantity',
                    'Net sold quantity',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Gross sold value',
                    'Returned / refunded value',
                    'Gross value before fees',
                    'VAT',
                    'Net value after VAT',
                    'Commission or discount percentage',
                    'Proceeds of sale due to publisher'
                ],
            ],
        },

        # MBSTEX
        {
            service => BookPub::Tracker::Service::MBS_TEX,
            version => 1,
            lines   => [ [
                    'eBook Distributor',
                    'Customer ID',
                    'Customer Name',
                    'Customer Address 1',
                    'Customer Address 2',
                    'Customer Address 3',
                    'Customer Address 4',
                    'Customer City',
                    'Customer State',
                    'Customer Zip',
                    'Print ISBN',
                    'Author',
                    'Title',
                    'eBook List Price',
                    'Net Qty Sold',
                    'Reporting Date',
                    'Customer SAN',
                    'MBS Batch#',
                    'MBS due to Publisher',
                    'MBS Book#',
                    'eBook ISBN',
                    '(Print ISBN|MBS Notes)'
                ],
            ],
        },

        # MBS, version 2, FB 14908
        {
            service => BookPub::Tracker::Service::MBS_TEX,
            version => 2,
            lines   => [ [
                    'eBook Distributor',
                    'Customer ID',
                    'Customer Name',
                    'Customer Address 1',
                    'Customer Address 2',
                    'Customer Address 3',
                    'Customer Address 4',
                    'Customer City',
                    'Customer State',
                    'Customer Zip',
                    'VBID',
                    'Author',
                    'Title',
                    'eBook List Price',
                    'Net Qty Sold',
                    'Reporting Date',
                    'Customer SAN',
                    'MBS Batch#',
                    'MBS due to Publisher',
                    'MBS Book#',
                    'eBook ISBN',
                    '(Print ISBN|MBS Notes)',
                    'VS Custom Net Price',
                    '^$'
                ],
            ],
        },

        # MBS, version 3, FB15033
        {
            service => BookPub::Tracker::Service::MBS_TEX,
            version => 3,
            lines   => [ [
                    'eBook Distributor',
                    'Customer ID',
                    'Customer Name',
                    'Customer Address 1',
                    'Customer Address 2',
                    'Customer Address 3',
                    'Customer Address 4',
                    'Customer City',
                    'Customer State',
                    'Customer Zip',
                    'VBID',
                    'Author',
                    'Title',
                    'Net Qty Sold',
                    'Unit Cost',
                    'Reporting Date',
                    'Customer SAN',
                    'MBS Batch#',
                    'MBS due to Publisher',
                    'MBS Book#',
                    'eBook ISBN',
                    'Print ISBN',
                    '^$'
                ],
            ],
        },

        # MBS, version 4, FB15387
        {
            service => BookPub::Tracker::Service::MBS_TEX,
            version => 4,
            lines   => [ [
                    'eBook Distributor',
                    'Customer ID',
                    'Customer Name',
                    'Customer Address 1',
                    'Customer Address 2',
                    'Customer Address 3',
                    'Customer Address 4',
                    'Customer City',
                    'Customer State',
                    'Customer Zip',
                    'VBID',
                    'Author',
                    'Title',
                    'eBook List Price',
                    'Net Qty Sold',
                    'Unit Cost',
                    'Reporting Date',
                    'Customer SAN',
                    'MBS Batch#',
                    'MBS due to Publisher',
                    'MBS Book#',
                    'eBook ISBN',
                    'Print ISBN',
                    'Sub',
                    '^$'
                ],
            ],
        },

        # MBS, version 5, RSD-832
        {
            service => BookPub::Tracker::Service::MBS_TEX,
            version => 5,
            lines   => [ [
                    'eBook Distributor',
                    'Customer ID',
                    'Customer Name',
                    'Customer Address 1',
                    'Customer Address 2',
                    'Customer Address 3',
                    'Customer Address 4',
                    'Customer City',
                    'Customer State',
                    'Customer Zip',
                    'VBID',
                    'Author',
                    'Title',
                    'eBook List Price',
                    'Net Qty Sold',
                    'Unit Cost',
                    'Reporting Date',
                    'Customer SAN',
                    'MBS Batch#',
                    'MBS due to Publisher',
                    'MBS Book#',
                    'eBook ISBN',
                    'ISBN 10',
                    'ISBN 13',
                    '^$'
                ],
            ],
        },

        # WebCT
        {
            service => BookPub::Tracker::Service::WEB_CT,
            version => 1,
            sheet   => 1,
            lines   => [ [
                    'POST_DATE',               'CHILD_PUBLISHER',  'ISBN_NUMBER',           'INST_NAME',
                    'ISBN_NUMBER_DET',         'PRODUCTNUMBER',    'INST_NAME_DET',         'TITLE',
                    'ORDER_NUMBER',            'UNIT_SALES_PRICE', 'DISCOUNT_COUPON_PRICE', 'COUPON_DISCOUNT',
                    'PER_UNIT_ROYALTY',        'DISCOUNT_ROYALTY', 'UNITS_SOLD',            'TOT_DISC_SALES_PRICE',
                    'TOT_DISC_ROYALTY_AMOUNT', 'TOT_ROYALTY_AMOUNT'
                ],
            ],
        },

        # BookSurge
        {
            service => BookPub::Tracker::Service::BOOK_SURGE,
            version => 1,
            lines   => [
                ( [undef] ) x 4,
                [
                    'Sales Channel',
                    'Account ID',
                    'ISBN-10',
                    'ISBN-13',
                    'MODID',
                    'Title',
                    'Units',
                    'List Price',
                    'Base Price Total',
                    'Extended Price %',
                    'Extended Price Per Unit',
                    'Extended Price Total',
                    'Unit Fees',
                    'Unit Fees Total',
                    'Publisher Compensation per Unit',
                    'Publisher Compensation Total'
                ],
            ],
        },

        # Amazon
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 10,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 1,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'PO#',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units YTD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    '^$'
                ],
            ],
        },

        # Amazon v2
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 2,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units .TD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Amazon v76 (same as Version5 but with additional column)
        # !!! v76 should be highr than v32 because of the header !!!
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 76,
            lines   => [ [
                    'Data da fatura \(Invoice Date\)',
                    'ASIN \(N.mero de Identifica..o Padr.o da Amazon\) \(ASIN\)',
                    'ISBN\-10 f.sico \(Physical ISBN\-10\)',
                    'ISBN\-13 f.sico \(Physical ISBN\-13\)',
                    'ISBN digital \(Digital ISBN\)',
                    'T.tulo \(Title\)',
                    'Autor \(Author\)',
                    'Selo \(Imprint\)',
                    'Formato \(Format\)',
                    'Unidades compradas \(Units Purchased\)',
                    'Unidades reembolsadas \(Units Refunded\)',
                    'Unidades l.quidas \(Net Units\)',
                    'Unidades l.quidas \- MTD \(Net Units MTD\)',
                    'Ajustes realizados \(Adjustments Made\)',
                    'Pre.o de lista \(List Price\)',
                    'Moeda da Lista de Pre.os \(List Price Currency\)',
                    'Pre.o da editora \(Publisher Price\)',
                    'Moeda do pre.o da editora \(Publisher Price Currency\)',
                    'Porcentagem de desconto \(Discount Percentage\)',
                    'Valor do pagamento \(Payment Amount\)',
                    'Moeda do valor de pagamento \(Payment Amount Currency\)',
                    'C.digo do pa.s \(Country Code\)',
                    '(?:Tipo de programa|Program Type)',
                    '^$'
                ],
            ],
        },

        # Amazon v76 (same as Version5 but with additional column)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 76,
            lines   => [ [
                    'Data da fatura \(Invoice Date\)',
                    'ASIN \(Número de Identificação Padrão da Amazon\) \(ASIN\)',
                    'ISBN-10 físico \(Physical ISBN-10\)',
                    'ISBN-13 físico \(Physical ISBN-13\)',
                    'ISBN digital \(Digital ISBN\)',
                    'Título \(Title\)',
                    'Autor \(Author\)',
                    'Selo \(Imprint\)',
                    'Formato \(Format\)',
                    'Unidades compradas \(Units Purchased\)',
                    'Unidades reembolsadas \(Units Refunded\)',
                    'Unidades líquidas \(Net Units\)',
                    'Unidades líquidas - MTD \(Net Units MTD\)',
                    'Ajustes realizados \(Adjustments Made\)',
                    'Preço de lista \(List Price\)',
                    'Moeda da Lista de Preços \(List Price Currency\)',
                    'Preço da editora \(Publisher Price\)',
                    'Moeda do preço da editora \(Publisher Price Currency\)',
                    'Porcentagem de desconto \(Discount Percentage\)',
                    'Valor do pagamento \(Payment Amount\)',
                    'Moeda do valor de pagamento \(Payment Amount Currency\)',
                    'Código do país \(Country Code\)',
                    '(?:Tipo de programa|Program Type)',
                    '^$'
                ],
            ],
        },

        # Amazon - Updated for Rowman, sames a version 2 above, but with Publisher Price, Publisher Price Currency,
        # and Program Type fields
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 32,
            match_on_any_row => 1,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units .TD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'Program Type',
                    '^$'
                ],
            ],
        },

        # Amazon - Basically version 32 + a Coop Percentage field
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 49,
            lines   => [ [
                    'Invoice Date|Factuurdatum',
                    'ASIN',
                    'Physical ISBN-10|Fysieke ISBN-10 ',
                    'Physical ISBN-13|Fysieke ISBN-13',
                    'Digital ISBN|Digitale ISBN',
                    'Title|Titel',
                    'Author|Auteur',
                    'Imprint|Impressum',
                    'Format|Indeling',
                    'Units Purchased|Aangeschafte eenheden',
                    'Units Refunded|Gerestitueerde eenheden',
                    'Net Units|Netto-eenheden',
                    'Net Units .TD|Netto-eenheden',
                    'Adjustments Made|Uitgevoerde aanpassingen',
                    'List Price|Catalogusprijs',
                    'List Price Currency|Valuta lijstprijs',
                    'Publisher Price|Uitgeversprijs',
                    'Publisher Price Currency|Valuta van uitgeversprijs',
                    'Discount Percentage|Kortingsperrcentage',
                    'Coop Percentage|Coop-percentage',
                    'Payment Amount|Te betalen bedrag',
                    'Payment Amount Currency|Valuta betalingsbedrag',
                    'Country Code|Landencode',
                    'Program Type|^$',
                    '^$'
                ],
            ],
        },

        # Amazon v3 (agent) - although it's essentially the same as above we'll make it a separate
        # version to help identify it as the agency model report
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 3,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units YTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Amazon - same as v2 minus the last col (country code) since it's always US
        # we default to US in the absence of a country code so let v2 handle it
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 2,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units YTD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon - same as v3 (agent) minus the last col (country code) since it's always US
        # also renamed one col that we don't care about

        # 5/16/2012 - scott - this appears to be a rogue version 6 (it's different than the other one and couldn't
        #                     find anything in the v6 importer that would accomdate the difference in columns)
        #                     so, i'm going to make it version 106 for now and see if we catch anything going forward
        #                     (as in, this will now break)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 106,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 4,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'PHysical ISBN-13',
                    'Digital ISBN',
                    'title_18628',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP',
                    'List Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'dvs_country_code_70202',
                    '^$'
                ],
            ],
        },

        # Amazon version 5
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 5,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author|author_16889',
                    'Imprint|imprint_17613',
                    'Format|dvs_format_18093',
                    'Units Purchased',
                    'Units Refunded|dvs_units_refunded_60395',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'List Price|dvs_list_price_65347',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount|dvs_payment_amount_60042',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ],

            ],
        },

        # Amazon v77 (same as Version 20 but with additional column)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 77,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN\-10',
                    'Physical ISBN\-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'incentive_payment_rate',
                    'incentive_payment_amount',
                    'incentive_payment_currency',
                    'base_payment_amount',
                    'base_payment_amount_currency',
                    'Program Type',
                    '^$'
                ],

            ],
        },

        # Amazon v78
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 78,
            lines   => [ [
                    'report_date',
                    'transaction_id',
                    'order_id',
                    'transaction_date',
                    'date_used_for_tax_calc',
                    'isbn',
                    'asin',
                    'title',
                    'primary_author',
                    'product_tax_code',
                    'quantity_purchased',
                    'transaction_status',
                    'publisher_price',
                    'publisher_price_currency',
                    'our_price',
                    'our_price_currency',
                    'tax_type_code',
                    'transaction_type_code',
                    'tax_usage_type_code',
                    'rule_reason_code',
                    'buyer_exemption_code',
                    'bill_to_city',
                    'bill_to_state',
                    'bill_to_postal_code',
                    'bill_to_country',
                    'city_tax_collection_model',
                    'city_tax_collection_responsible_party',
                    'city_taxed_jurisdiction',
                    'county_tax_collection_model',
                    'county_tax_collection_responsible_party',
                    'county_taxed_jurisdiction',
                    'state_tax_collection_model',
                    'state_tax_collection_responsible_party',
                    'state_taxed_jurisdiction',
                    'district_tax_collection_model',
                    'district_tax_collection_responsible_party',
                    'district_taxed_jurisdiction',
                    'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',
                    'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',
                    'state_exempt_sale_amount',
                    'county_taxable_sale_amount',
                    'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',
                    'county_exempt_sale_amount',
                    'city_taxable_sale_amount',
                    'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',
                    'city_exempt_sale_amount',
                    'district_taxable_sale_amount',
                    'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount',
                    'district_exempt_sale_amount',
                    'district_tax_amount',
                    'city_tax_amount',
                    'county_tax_amount',
                    'state_tax_amount',
                    'state_taxed_juris_tax_rate',
                    'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',
                    'district_taxed_juris_tax_rate',
                    'payment_amount',
                    'payment_amount_currency',
                    'tax_payment_amount',
                    'tax_payment_currency',
                    'rental_type',
                    'rental_duration',
                    '^$'
                ],

            ],
        },

        # Amazon CA
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 24,
            lines   => [ [
                    'Date de facturation \(Invoice Date\)',
                    'ASIN \(ASIN\)',
                    'ISBN-10 physique \(Physical ISBN-10\)',
                    'ISBN-13 physique \(Physical ISBN-13\)',
                    '\(Digital ISBN\)',
                    'Titre \(Title\)',
                    'Auteur \(Author\)',
                    'Editeur \(Imprint\)',
                    'Format \(Format\)',
                    '\(Units Purchased\)',
                    '\(Units Refunded\)',
                    '\(Net Units\)',
                    'Cumul net mensuel \(Net Units MTD\)',
                    'Ajustements \(Adjustments Made\)',
                    'Notre prix \(Our Price\)|List Price',
                    'Our Price Currency|List Price Currency',
                    'Prix Editeur \(Publisher Price\)',
                    '\(Publisher Price Currency\)',
                    'Pourcentage de remise \(Discount Percentage\)',
                    'Montant du paiement \(Payment Amount\)',
                    'Devise du paiement \(Payment Amount Currency\)',
                    '^$'
                ],
            ],
        },

        # Amazon CA v68, very similar to v 24
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 68,
            lines   => [ [
                    'Date de facturation \(Invoice Date\)',
                    'ASIN \(ASIN\)',
                    'ISBN\-10 physique \(Physical ISBN\-10\)',
                    'ISBN\-13 physique \(Physical ISBN\-13\)',
                    'ISBN num.*rique \(Digital ISBN\)',
                    'Titre \(Title\)',
                    'Auteur \(Author\)',
                    'Editeur \(Imprint\)',
                    'Format \(Format\)',
                    'Unit.*s achet.*es \(Units Purchased\)',
                    'Unit.*s rembours.*es \(Units Refunded\)',
                    'Unit.*s nettes \(Net Units\)',
                    'Cumul net mensuel \(Net Units MTD\)',
                    'Ajustements \(Adjustments Made\)',
                    'Prix de vente \(List Price\)',
                    'Devise du prix de vente \(List Price Currency\)',
                    'Prix Editeur \(Publisher Price\)',
                    'Devise du prix .*diteur \(Publisher Price Currency\)',
                    'Pourcentage de remise \(Discount Percentage\)',
                    'Montant du paiement \(Payment Amount\)',
                    'Devise du paiement \(Payment Amount Currency\)',
                    'Type de programme',
                    '^$'
                ],
            ],
        },

        # Amazon
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 6,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units[_ ]Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our[_ ]Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment[_ ]Amount',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 20,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units[_ ]Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our[_ ]Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment[_ ]Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^(?:Program Type|Tipo de programa)?$',
                    '^$'
                ],
            ],
        },

        # Amazon - extended from version 20 to include incentive amounts (FBoD10902)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 52,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units[_ ]Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our[_ ]Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment[_ ]Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'Incentive Rate',
                    'Incentive Amount',
                    'Final Payment Amount',
                    '^$'
                ],
            ],
        },

        # Amazon - like v52 but with an additional 'Program Type' column
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 55,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units[_ ]Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our[_ ]Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment[_ ]Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'Program Type',
                    'Incentive Rate',
                    'Incentive Amount',
                    'Final Payment Amount',
                    '^$'
                ],
            ],
        },

        # Amazon - like v29. Additional columns. (RSD-600)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 56,
            lines   => [ [
                    'report_date',                      'transaction_id',
                    'order_id',                         'transaction_date',
                    'date_used_for_tax_calc',           'isbn',
                    'asin',                             'title',
                    'primary_author',                   'product_tax_code',
                    'quantity_purchased',               'transaction_status',
                    'publisher_price',                  'publisher_price_currency',
                    'our_price',                        'our_price_currency',
                    'tax_type_code',                    'transaction_type_code',
                    'tax_usage_type_code',              'rule_reason_code',
                    'buyer_exemption_code',             'bill_to_city',
                    'bill_to_state',                    'bill_to_postal_code',
                    'bill_to_country',                  'tax_collection_model',
                    'tax_collection_responsible_party', 'city_taxed_jurisdiction',
                    'county_taxed_jurisdiction',        'state_taxed_jurisdiction',
                    'district_taxed_jurisdiction',      'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',        'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',      'state_exempt_sale_amount',
                    'county_taxable_sale_amount',       'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',     'county_exempt_sale_amount',
                    'city_taxable_sale_amount',         'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',       'city_exempt_sale_amount',
                    'district_taxable_sale_amount',     'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount',   'district_exempt_sale_amount',
                    'district_tax_amount',              'city_tax_amount',
                    'county_tax_amount',                'state_tax_amount',
                    'state_taxed_juris_tax_rate',       'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',        'district_taxed_juris_tax_rate',
                    'payment_amount',                   'payment_amount_currency',
                    'tax_payment_amount',               'tax_payment_currency',
                    'program_type',                     '^$'
                ]
            ]
        },

        # Amazon - like v29. Additional columns. (RSD-601)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 57,
            lines   => [ [
                    'report_date',                      'transaction_id',
                    'order_id',                         'transaction_date',
                    'date_used_for_tax_calc',           'isbn',
                    'asin',                             'title',
                    'primary_author',                   'product_tax_code',
                    'quantity_purchased',               'transaction_status',
                    'publisher_price',                  'publisher_price_currency',
                    'our_price',                        'our_price_currency',
                    'tax_type_code',                    'transaction_type_code',
                    'tax_usage_type_code',              'rule_reason_code',
                    'buyer_exemption_code',             'bill_to_city',
                    'bill_to_state',                    'bill_to_postal_code',
                    'bill_to_country',                  'tax_collection_model',
                    'tax_collection_responsible_party', 'city_taxed_jurisdiction',
                    'county_taxed_jurisdiction',        'state_taxed_jurisdiction',
                    'district_taxed_jurisdiction',      'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',        'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',      'state_exempt_sale_amount',
                    'county_taxable_sale_amount',       'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',     'county_exempt_sale_amount',
                    'city_taxable_sale_amount',         'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',       'city_exempt_sale_amount',
                    'district_taxable_sale_amount',     'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount',   'district_exempt_sale_amount',
                    'district_tax_amount',              'city_tax_amount',
                    'county_tax_amount',                'state_tax_amount',
                    'state_taxed_juris_tax_rate',       'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',        'district_taxed_juris_tax_rate',
                    'payment_amount',                   'payment_amount_currency',
                    'tax_payment_amount',               'tax_payment_currency',
                    'program_type',                     'incentive_payment_rate',
                    'incentive_payment_amount',         'incentive_payment_currency',
                    'base_payment_amount',              'base_payment_amount_currency',
                    '^$',
                ]
            ]
        },
        # Amazon - same v57. Additional columns. (RSD-6491)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 57,
            lines   => [ [
                    'report_date',                      'transaction_id',
                    'order_id',                         'transaction_date',
                    'date_used_for_tax_calc',           'isbn',
                    'asin',                             'title',
                    'primary_author',                   'product_tax_code',
                    'quantity_purchased',               'transaction_status',
                    'publisher_price',                  'publisher_price_currency',
                    'our_price',                        'our_price_currency',
                    'tax_type_code',                    'transaction_type_code',
                    'tax_usage_type_code',              'rule_reason_code',
                    'buyer_exemption_code',             'bill_to_city',
                    'bill_to_state',                    'bill_to_postal_code',
                    'bill_to_country',                  'tax_collection_model',
                    'tax_collection_responsible_party', 'city_taxed_jurisdiction',
                    'county_taxed_jurisdiction',        'state_taxed_jurisdiction',
                    'district_taxed_jurisdiction',      'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',        'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',      'state_exempt_sale_amount',
                    'county_taxable_sale_amount',       'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',     'county_exempt_sale_amount',
                    'city_taxable_sale_amount',         'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',       'city_exempt_sale_amount',
                    'district_taxable_sale_amount',     'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount',   'district_exempt_sale_amount',
                    'district_tax_amount',              'city_tax_amount',
                    'county_tax_amount',                'state_tax_amount',
                    'state_taxed_juris_tax_rate',       'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',        'district_taxed_juris_tax_rate',
                    'payment_amount',                   'payment_amount_currency',
                    'tax_payment_amount',               'tax_payment_currency',
                    'program_type',                     'incentive_payment_rate',
                    'incentive_payment_amount',         'incentive_payment_currency',
                    'base_payment_amount',              'base_payment_amount_currency',
                    'pub_rewards_credits',              'pub_rewards_credits_currency',
                    'net_cogs',                         '^$'
                ]
            ]
        },

        # Amazon - similar to v57, but with additional columns. (RSD-7147)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 74,
            lines   => [ [
                    'report_date',                              'transaction_id',
                    'order_id',                                 'transaction_date',
                    'date_used_for_tax_calc',                   'isbn',
                    'asin',                                     'title',
                    'primary_author',                           'product_tax_code',
                    'quantity_purchased',                       'transaction_status',
                    'publisher_price',                          'publisher_price_currency',
                    'our_price',                                'our_price_currency',
                    'tax_type_code',                            'transaction_type_code',
                    'tax_usage_type_code',                      'rule_reason_code',
                    'buyer_exemption_code',                     'bill_to_city',
                    'bill_to_state',                            'bill_to_postal_code',
                    'bill_to_country',                          'city_tax_collection_model',
                    'city_tax_collection_responsible_party',    'city_taxed_jurisdiction',
                    'county_tax_collection_model',              'county_tax_collection_responsible_party',
                    'county_taxed_jurisdiction',                'state_tax_collection_model',
                    'state_tax_collection_responsible_party',   'state_taxed_jurisdiction',
                    'district_tax_collection_model',            'district_tax_collection_responsible_party',
                    'district_taxed_jurisdiction',              'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',                'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',              'state_exempt_sale_amount',
                    'county_taxable_sale_amount',               'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',             'county_exempt_sale_amount',
                    'city_taxable_sale_amount',                 'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',               'city_exempt_sale_amount',
                    'district_taxable_sale_amount',             'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount',           'district_exempt_sale_amount',
                    'district_tax_amount',                      'city_tax_amount',
                    'county_tax_amount',                        'state_tax_amount',
                    'state_taxed_juris_tax_rate',               'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',                'district_taxed_juris_tax_rate',
                    'payment_amount',                           'payment_amount_currency',
                    'tax_payment_amount',                       'tax_payment_currency',
                    'program_type',                             'incentive_payment_rate',
                    'incentive_payment_amount',                 'incentive_payment_currency',
                    'base_payment_amount',                      'base_payment_amount_currency',
                    'pub_rewards_credits',                      'pub_rewards_credits_currency',
                    'net_cogs',                                 '^$'
                ]
            ]
        },

        # Amazon
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 7,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'PHysical ISBN-13',
                    'Digital ISBN',
                    'title_18628',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP',
                    'List Price Currency',
                    'dvs_publisher_price_60403',
                    'dvs_publisher_price_currency_60404',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'dvs_country_code_70202',
                    '^$'
                ],
            ],
        },

        # Amazon - same as v7 minus the last col (country code) since it's always UK
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 11,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'PHysical ISBN-13',
                    'Digital ISBN',
                    'title_18628',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP',
                    'List Price Currency',
                    'dvs_publisher_price_60403',
                    'dvs_publisher_price_currency_60404',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon v12 - Bloomsbury
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 12,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'PHysical ISBN-13',
                    'Digital ISBN',
                    'title_18628',
                    'Author|author_16889',
                    'Imprint|imprint_17613',
                    'Format|dvs_format_18093',
                    'Units Purchased',
                    'Units Refunded|dvs_units_refunded_60395',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP|dvs_list_price_65347',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount|dvs_payment_amount_60042',
                    'Payment Amount Currency',
                    'dvs_country_code_70202|Country Code',
                    '^$'
                ],
            ],
        },

        # Amazon - Basically Version 15, but with translated headers
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 25,
            lines   => [ [
                    'Data da fatura \(Invoice Date\)',
                    '\(ASIN\)',
                    '\(Physical ISBN-10\)',
                    '\(Physical ISBN-13\)',
                    'ISBN digital \(Digital ISBN\)',
                    '\(Title\)',
                    'Autor \(Author\)',
                    'Selo \(Imprint\)',
                    'Formato \(Format\)',
                    'Unidades compradas \(Units Purchased\)',
                    'Unidades reembolsadas \(Units Refunded\)',
                    '\(Net Units\)',
                    '\(Net Units MTD\)',
                    'Ajustes realizados \(Adjustments Made\)',
                    '\(List Price\)',
                    '\(List Price Currency\)',
                    '\(Publisher Price\)',
                    '\(Publisher Price Currency\)',
                    'Porcentagem de desconto \(Discount Percentage\)',
                    'Valor do pagamento \(Payment Amount\)',
                    'Moeda do valor de pagamento \(Payment Amount Currency\)',
                    '^$'
                ],
            ],
        },

        # Amazon - v69, pretty similar to v25
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 69,
            lines   => [ [
                    'Data da fatura \(Invoice Date\)',
                    'ASIN \(N.mero de Identifica..o Padr.o da Amazon\) \(ASIN\)',
                    'ISBN-10 f.sico \(Physical ISBN-10\)',
                    'ISBN-13 f.sico \(Physical ISBN-13\)',
                    'ISBN digital \(Digital ISBN\)',
                    'T.tulo \(Title\)',
                    'Autor \(Author\)',
                    'Selo \(Imprint\)',
                    'Formato \(Format\)',
                    'Unidades compradas \(Units Purchased\)',
                    'Unidades reembolsadas \(Units Refunded\)',
                    'Unidades l.quidas \(Net Units\)',
                    'Unidades l.quidas - MTD \(Net Units MTD\)',
                    'Ajustes realizados \(Adjustments Made\)',
                    'Pre.o de lista \(List Price\)',
                    'Moeda da Lista de Pre.os \(List Price Currency\)',
                    'Pre.o da editora \(Publisher Price\)',
                    'Moeda do pre.o da editora \(Publisher Price Currency\)',
                    'Porcentagem de desconto \(Discount Percentage\)',
                    'Valor do pagamento \(Payment Amount\)',
                    'Moeda do valor de pagamento \(Payment Amount Currency\)',
                    'Tipo de programa',
                    '^$'
                ],
            ],
        },

        # Amazon - v69, pretty similar to v25
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 69,
            lines   => [ [
                    'Data da fatura \(Invoice Date\)',
                    'ASIN \(Número de Identificação Padrão da Amazon\) \(ASIN\)',
                    'ISBN-10 físico \(Physical ISBN-10\)',
                    'ISBN-13 físico \(Physical ISBN-13\)',
                    'ISBN digital \(Digital ISBN\)',
                    'Título \(Title\)',
                    'Autor \(Author\)',
                    'Selo \(Imprint\)',
                    'Formato \(Format\)',
                    'Unidades compradas \(Units Purchased\)',
                    'Unidades reembolsadas \(Units Refunded\)',
                    'Unidades líquidas \(Net Units\)',
                    'Unidades líquidas - MTD \(Net Units MTD\)',
                    'Ajustes realizados \(Adjustments Made\)',
                    'Preço de lista \(List Price\)',
                    'Moeda da Lista de Preços \(List Price Currency\)',
                    'Preço da editora \(Publisher Price\)',
                    'Moeda do preço da editora \(Publisher Price Currency\)',
                    'Porcentagem de desconto \(Discount Percentage\)',
                    'Valor do pagamento \(Payment Amount\)',
                    'Moeda do valor de pagamento \(Payment Amount Currency\)',
                    'Tipo de programa',
                    '^$'
                ],
            ],
        },

        # Amazon - Another variation on Version 15, but with translated headers
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 26,
            lines   => [ [
                    'Date de facturation \(Invoice Date\)',
                    'ASIN \(ASIN\)',
                    'ISBN-10 physique \(Physical ISBN-10\)',
                    'ISBN-13 physique \(Physical ISBN-13\)',
                    'ISBN num\?rique \(Digital ISBN\)',
                    'Titre \(Title\)',
                    'Auteur \(Author\)',
                    'Editeur \(Imprint\)',
                    'Format \(Format\)',
                    'Unit\?s achet\?es \(Units Purchased\)',
                    'Unit\?s rembours\?es \(Units Refunded\)',
                    'Unit\?s nettes \(Net Units\)',
                    'Cumul net mensuel \(Net Units MTD\)',
                    'Ajustements \(Adjustments Made\)',
                    'Prix de vente \(List Price\)',
                    'Devise du prix de vente \(List Price Currency\)',
                    'Prix Editeur \(Publisher Price\)',
                    'Devise du prix \?diteur \(Publisher Price Currency\)',
                    'Pourcentage de remise \(Discount Percentage\)',
                    'Montant du paiement \(Payment Amount\)',
                    'Devise du paiement \(Payment Amount Currency\)',
                    '^$'
                ],
            ],
        },

        # Amazon, version 27
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 27,
            lines   => [ [
                    '.*\(Invoice Date\)',
                    'ASIN',
                    '.* \(Physical ISBN-10\)',
                    '.* \(Physical ISBN-13\)',
                    '.* \(Digital ISBN\)',
                    '.* \(JDPC_ID\)',
                    '.* \(Title\)',
                    '.* \(Author\)',
                    '.* \(Imprint\)',
                    '.* \(Format\)',
                    '.* \(Units Purchased\)',
                    '.* \(Units Refunded\)',
                    '.* \(Net Units\)',
                    '.*\(Net Units MTD\)',
                    '.* \(Adjustments Made\)',
                    '.*.* \(List Price\)',
                    '.* \(List Price Currency\)',
                    '.* \(Publisher Price\)',
                    '.* \(Publisher Price Currency\)',
                    'PD \(Amazon.*\) \(Discount Percentage\)',
                    '.* \(Payment Amount\)',
                    '.* \(Payment Amount Currency\)',
                    '^$'
                ]
            ],
        },

        # Amazon, version 28 (POD)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 28,
            lines   => [ [
                    'Sales Channel',
                    'Sales Date',
                    'ISBN',
                    'UPC/EAN',
                    'Imprint Name',
                    'TitleID',
                    'MODID',
                    'Author',
                    'Title',
                    'Units',
                    'List/Sales Price',
                    'List/Sales Price Total',
                    'Extended Price %',
                    'Extended Price per Unit',
                    'Extended Price Total',
                    'Cost per Unit',
                    'Cost Total',
                    'Publisher Compensation per Unit',
                    'Publisher Compensation Total',
                    'Cournty of Origin',
                    'Group Date',
                    'Member ID',
                    'Legacy Account ID',
                    'Business Name',
                    'Address1',
                    'Address2',
                    'Address3',
                    'Date for Report',
                    'Date Range',
                    'Territory',
                    'Currency',
                    'Seq',
                    'Ex. Rate',
                    'Extended Price Total',
                    'Cost Total',
                    'Publisher Compensation Total',
                    '^$'
                ],
            ],
        },

        # Amazon, version 43 (POD)
        {
            service          => BookPub::Tracker::Service::AMAZON,
            version          => 43,
            match_on_any_row => 1,
            lines            => [ [
                    'Sales Channel',
                    'M0D ID',
                    'ISBN',
                    'EAN',
                    'Imprint Name',
                    'Author',
                    'Title',
                    'Units Sold',
                    'List Price',
                    'Total List Price',
                    'Extended Price %',
                    'Extended Price per Unit',
                    'Total Extended Price',
                    'Unit Fees per Unit',
                    'Total Unit Fees',
                    'Publisher Compensation per Unit',
                    'Total Publisher Compensation',
                    '^$'
                ],
            ],
        },

        # Amazon, version 44 (POD)
        {
            service          => BookPub::Tracker::Service::AMAZON,
            version          => 44,
            match_on_any_row => 1,
            lines            => [ [
                    'Sales Channel',
                    'Sales Date',
                    'ISBN',
                    'UPC\/EAN',
                    'TitleID',
                    'MODID',
                    'Title',
                    'Units',
                    'List\/Sales Price',
                    'List\/Sales Price Total',
                    'Extended Price %',
                    'Extended Price per Unit',
                    'Extended Price Total',
                    'Cost per Unit',
                    'Cost Total',
                    'Publisher Compensation per Unit',
                    'Publisher Compensation Total',
                    '^$'
                ],
            ],
        },

        # Amazon, version 64 (POD) RSD-3731
        {
            service          => BookPub::Tracker::Service::AMAZON,
            version          => 64,
            match_on_any_row => 1,
            lines            => [ [
                    'Sale Date',
                    'Title Name',
                    'Author',
                    'Imprint Name',
                    'ISBN',
                    'EAN',
                    'Reference ID',
                    'ASIN',
                    'Product Type',
                    'Sales Channel',
                    'Extended Price %',
                    'Program',
                    'List Price',
                    'Total List Price',
                    'List Price Currency',
                    'Extended Price Per Unit',
                    'Total Extended Price',
                    'Unit Fees',
                    'Total Unit Fees',
                    'Unit Fees Currency',
                    'Units Sold',
                    'Units Refunded',
                    'Net Units Sold',
                    'Payment Amount',
                    'Publisher Compensation Per Unit',
                    'Royalty Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon, version 66 (POD) RSD-6390
        {
            service          => BookPub::Tracker::Service::AMAZON,
            version          => 66,
            match_on_any_row => 1,
            lines            => [ [
                    '(?:Sale|Earning) Date',
                    'Title(?: Name)?',
                    'Author',
                    'Imprint Name',
                    'ISBN',
                    'EAN',
                    'Reference ID',
                    'ASIN',
                    'Product Type',
                    'Sales Channel',
                    'Extended Price %',
                    'Program',
                    'List Price',
                    'Total List Price',
                    'List Price Currency',
                    'Extended Price Per Unit',
                    'Total Extended Price',
                    'Unit Fees',
                    'Total Unit Fees',
                    'Unit Fees Currency',
                    'Unit Fee Discount',
                    'Units Sold',
                    'Units Refunded',
                    'Net Units Sold',
                    'Payment Amount',
                    'Publisher Compensation Per Unit',
                    'Royalty Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon - Similar to version 14, but these are US sales.
        {
            service   => BookPub::Tracker::Service::AMAZON,
            version   => 15,
            file_name => '^BK\w{1}QQ_',
            lines     => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon - an alternate match
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 15,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'author_16889',
                    'imprint_17613',
                    'dvs_format_18093',
                    'Units Purchased',
                    'dvs_units_refunded_60395',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'dvs_list_price_65347',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'dvs_payment_amount_60042',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon - version 16
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 16,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Amazon - version 39
        # Same as version 16 above, but with the additional 'Program Type' column at the end
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 39,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'Program Type',
                    '^$'
                ],
            ],
        },

        # Amazon - version 39 (Dutch version)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 39,
            lines   => [ [
                    'Factuurdatum \(Invoice Date\)',
                    'ASIN',
                    'Fysieke ISBN-10 \(Physical ISBN-10\)',
                    'Fysieke ISBN-13 \(Physical ISBN-13\)',
                    'Digitale ISBN \(Digital ISBN\)',
                    'Titel \(Title\)',
                    'Auteur',
                    'Impressum \(Imprint\)',
                    'Indeling \(Format\)',
                    'Aangeschafte eenheden \(Units Purchased\)',
                    'Gerestitueerde eenheden \(Units Refunded\)',
                    'Netto-eenheden \(Net Units\)',
                    'Netto-eenheden MTD \(Net Units MTD\)',
                    'Uitgevoerde aanpassingen \(Adjustments Made\)',
                    'Onze prijs \(Our Price\)',
                    'Valuta onze prijs \(Our Price Currency\)',
                    'Uitgeversprijs \(Publisher Price\)',
                    'Valuta van uitgeversprijs \(Publisher Price Currency\)',
                    'Kortingsperrcentage \(Discount Percentage\)',
                    'Te betalen bedrag \(Payment Amount\)',
                    'Valuta betalingsbedrag \(Payment Amount Currency\)',
                    'Landencode \(Country Code\)',
                    '^$'
                ],
            ],
        },

        # Amazon - version 17
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 17,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^(Program Type)?$'
                ],
            ],
        },

        # Amazon - version 42
        # Same as version 17, but in Dutch
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 42,
            lines   => [ [
                    'Factuurdatum',           'ASIN',                      'Fysieke ISBN-10',         'Fysieke ISBN-13',
                    'Digitale ISBN',          'Titel',                     'Auteur',                  'Impressum',
                    'Indeling',               'Aangeschafte eenheden',     'Gerestitueerde eenheden', 'Netto-eenheden',
                    'Netto-eenheden MTD',     'Uitgevoerde aanpassingen',  'Catalogusprijs',          'Valuta lijstprijs',
                    'Uitgeversprijs',         'Valuta van uitgeversprijs', 'Kortingsperrcentage',     'Te betalen bedrag',
                    'Valuta betalingsbedrag', '^$'
                ],
            ],
        },

        # Amazon - version 45
        # Same as version 42, but with one additional (unused) column
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 45,
            lines   => [ [
                    'Factuurdatum',           'ASIN',                      'Fysieke ISBN-10',         'Fysieke ISBN-13',
                    'Digitale ISBN',          'Titel',                     'Auteur',                  'Impressum',
                    'Indeling',               'Aangeschafte eenheden',     'Gerestitueerde eenheden', 'Netto-eenheden',
                    'Netto-eenheden MTD',     'Uitgevoerde aanpassingen',  'Catalogusprijs',          'Valuta lijstprijs',
                    'Uitgeversprijs',         'Valuta van uitgeversprijs', 'Kortingsperrcentage',     'Te betalen bedrag',
                    'Valuta betalingsbedrag', 'Landencode',                '^$'
                ],
            ],
        },

        # Amazon - version 47
        # Similar to version 17, but with a (populated) country code column
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 47,
            lines   => [ [
                    'Factuurdatum',           'ASIN',                      'Fysieke ISBN-10',         'Fysieke ISBN-13',
                    'Digitale ISBN',          'Titel',                     'Auteur',                  'Impressum',
                    'Indeling',               'Aangeschafte eenheden',     'Gerestitueerde eenheden', 'Netto-eenheden',
                    'Netto-eenheden MTD',     'Uitgevoerde aanpassingen',  'Onze prijs',              'Valuta onze prijs',
                    'Uitgeversprijs',         'Valuta van uitgeversprijs', 'Kortingsperrcentage',     'Te betalen bedrag',
                    'Valuta betalingsbedrag', 'Landencode',                'Programmatype',           '^$'
                ],
            ],
        },

        # Amazon - version 48
        # Another Dutch version
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 48,
            lines   => [ [
                    'Factuurdatum \(Invoice Date\)',
                    'ASIN',
                    'Fysieke ISBN-10 \(Physical ISBN-10\)',
                    'Fysieke ISBN-13 \(Physical ISBN-13\)',
                    'Digitale ISBN \(Digital ISBN\)',
                    'Titel \(Title\)',
                    'Auteur',
                    'Impressum \(Imprint\)',
                    'Indeling \(Format\)',
                    'Aangeschafte eenheden \(Units Purchased\)',
                    'Gerestitueerde eenheden \(Units Refunded\)',
                    'Netto-eenheden \(Net Units\)',
                    'Netto-eenheden MTD \(Net Units MTD\)',
                    'Uitgevoerde aanpassingen \(Adjustments Made\)',
                    'Catalogusprijs \(List Price\)',
                    'Valuta lijstprijs \(List Price Currency\)',
                    'Uitgeversprijs \(Publisher Price\)',
                    'Valuta van uitgeversprijs \(Publisher Price Currency\)',
                    'Kortingsperrcentage \(Discount Percentage\)',
                    'Gerestitueerde netto-eenheden \(Net Units Refunded\)',
                    'Commissie restitueren \(Refund Commission\)',
                    'Valuta van restitutiecommissie \(Refund Commission Currency\)',
                    'Te betalen bedrag \(Payment Amount\)',
                    'Valuta betalingsbedrag \(Payment Amount Currency\)',
                    'Programmatype \(Program Type\)',
                    '^$'
                ],
            ],
        },

        # Amazon - version 51, same as 48 with an additional column, second to last
        # Another Dutch version
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 51,
            lines   => [ [
                    'Factuurdatum \(Invoice Date\)',
                    'ASIN',
                    'Fysieke ISBN-10 \(Physical ISBN-10\)',
                    'Fysieke ISBN-13 \(Physical ISBN-13\)',
                    'Digitale ISBN \(Digital ISBN\)',
                    'Titel \(Title\)',
                    'Auteur',
                    'Impressum \(Imprint\)',
                    'Indeling \(Format\)',
                    'Aangeschafte eenheden \(Units Purchased\)',
                    'Gerestitueerde eenheden \(Units Refunded\)',
                    'Netto-eenheden \(Net Units\)',
                    'Netto-eenheden MTD \(Net Units MTD\)',
                    'Uitgevoerde aanpassingen \(Adjustments Made\)',
                    '(?:Catalogusprijs \(List Price\)|Onze prijs.+)',
                    '(?:Valuta lijstprijs \(List Price Currency\)|Valuta onze prijs.+)',
                    'Uitgeversprijs \(Publisher Price\)',
                    'Valuta van uitgeversprijs \(Publisher Price Currency\)',
                    'Kortingsperrcentage \(Discount Percentage\)',
                    'Gerestitueerde netto-eenheden \(Net Units Refunded\)',
                    'Commissie restitueren \(Refund Commission\)',
                    'Valuta van restitutiecommissie \(Refund Commission Currency\)',
                    'Te betalen bedrag \(Payment Amount\)',
                    'Valuta betalingsbedrag \(Payment Amount Currency\)',
                    'Landencode \(Country Code\)',
                    'Programmatype \(Program Type\)',
                    '^$'
                ],
            ],
        },

        # Amazon - version 18
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 18,
            lines   => [ [
                    'vendor_code',         'invoice_date',     'ASIN',                    'physical_isbn_10',
                    'physical_isbn_13',    'digital_isbn',     'title',                   'author',
                    'imprint',             'format',           'units_rented',            'units_refunded',
                    'net_units',           'adjustments_made', 'list_price',              'rental_type',
                    'old_rental_duration', 'rental_duration',  'old_discount_percentage', 'new_discount_percentage',
                    'payment_amount',      'amount_currency',  '^$'
                ],
            ],
        },

        # Amazon - version 18 - just another header related to v18 of the Amazon importer
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 18,
            lines   => [ [
                    'vendor_code',
                    'invoice_date',
                    'asin',
                    'physical_isbn_10',
                    'physical_isbn_13',
                    'digital_isbn',
                    'title',
                    'author',
                    'imprint',
                    'FORMAT_00001',
                    'units_rented',
                    'units_refunded',
                    'net_units',
                    'adjustments_made',
                    'list_price',
                    'rental_type',
                    'old_rental_duration',
                    'rental_duration',
                    'old_discount_percentage',
                    'new_discount_percentage',
                    'payment_amount',
                    'amount_currency',
                    'gross_balance',
                    'caspian_id',
                    '^$'
                ],
            ],
        },

        # Amazon - version 18 - just another RSD-10962
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 18,
            lines   => [ [
                    'vendor_code',
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN\-10',
                    'Physical ISBN\-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'FORMAT_00001',
                    'units_rented',
                    'Units Refunded',
                    'Net Units',
                    'Adjustments Made',
                    'List Price',
                    'rental_type',
                    'old_rental_duration',
                    'rental_duration',
                    'old_discount_percentage',
                    'new_discount_percentage',
                    'Payment Amount',
                    'amount_currency',
                    'gross_balance',
                    'caspian_id',
                    '^$'
                ],
            ],
        },

        # Amazon - version 36 (update to version 18)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 36,
            lines   => [ [
                    'vendor_code',                          'invoice_date',
                    'ASIN',                                 'physical_isbn_10',
                    'physical_isbn_13',                     'digital_isbn',
                    'title',                                'author',
                    'imprint',                              'format',
                    'units_rented',                         'units_refunded',
                    'net_units',                            'adjustments_made',
                    'list_price',                           'rental_type',
                    'old_rental_duration',                  'rental_duration',
                    'old_discount_percentage',              'new_discount_percentage',
                    'payment_amount',                       'amount_currency',
                    'PLP',                                  '% of PLP',
                    'PLP \* PLP PD \* units',               'Final payment amount',
                    'Original extension/purchase % of PLP', '^$'
                ],
            ],
        },

        # Amazon v8
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 8,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '(?:Program Type|Tipo de programa|^$)',
                    '(?:Max Payment Per Borrow|^$)',
                    '(?:Units Hitting Max Payment|^$)',
                    '^$'
                ],
            ],
        },

        # Amazon v79 (Same as v8 but different channel. RSD-7704)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 79,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Fund Debit Amount',
                    'Fund Debit Currency',
                    'Program Type|^$',
                    '^$'
                ],
            ],
        },
        # Amazon v82 (Same as v79 but different channel. RSD-9806)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 82,
            match_on_any_row => 1,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Fund Debit Amount',
                    'Fund Debit Currency',
                    'Program Type|^$',
                    '^$'
                ],
            ],
        },

        # Amazon v81 (RSD-9721)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 81,
            match_on_any_row => 1,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Fund Debit Amount',
                    'Fund Debit Currency',
                    '^$'
                ],
            ],
        },

        # Amazon - very similar to v8 with an additional column
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 65,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Coop Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^(Program Type|)$',
                    '^$'
                ],
            ],
        },

        # Amazon - very similar to v8, but different japanese header. (RSD-6436)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 70,
            lines   => [ [
                    '.*?\(Invoice Date\)',
                    'ASIN',
                    '.*?\(Physical ISBN-10\)',
                    '.*?\(Physical ISBN-13\)',
                    '.*?\(Digital ISBN\)',
                    '.*?\(Title\)',
                    '.*?\(Author\)',
                    '.*?\(Imprint\)',
                    '.*?\(Format\)',
                    '.*?\(Units Purchased\)',
                    '.*?\(Units Refunded\)',
                    '.*?\(Net Units\)',
                    '.*?\(Net Units MTD\)',
                    '.*?\(Adjustments Made\)',
                    '.*?\(List Price\)',
                    '.*?\(List Price Currency\)',
                    '.*?\(Publisher Price\)',
                    '.*?\(Publisher Price Currency\)',
                    '.*?\(Discount Percentage\)',
                    '.*?\(Payment Amount\)',
                    '.*?\(Payment Amount Currency\)',
                    ".+",
                    '^$'
                ],
            ],
        },

        # Amazon
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 9,
            lines   => [ [
                    'Invoice Date', 'ASIN', 'Title',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units', 'List Price',
                    'List Price Currency',
                    'Discount Percentage',
                    'Royalty', 'Cumulative Royalties Due', '^$'
                ],
            ],
        },

        # Amazon - Same as version 13, except the client (Berrett-Koehler) wants us to pull physical ISBNs
        # instead of digital. Amazon always tacks a Vendor ID onto the beginning of the filename, so we'll
        # use that to distinguish it.
        {
            service   => BookPub::Tracker::Service::AMAZON,
            version   => 14,
            file_name => '^BK\w{1}QQ_',
            lines     => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'PHysical ISBN-13',
                    'Digital ISBN',
                    'title_18628',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

   # Amazon - This version specifically omits country code. If something should pop into that field, doesn't mean we just want to handle it.
   #          If it's country code that's just got a new name, that should be handled in version 12.
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 13,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'PHysical ISBN-13',
                    'Digital ISBN',
                    'title_18628',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'RRP',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ],
            ],
        },

        # Amazon (Macmillan manually edited file)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 22,
            lines   => [
                [undef],
                [
                    'activity month',
                    'order id',
                    'order day',
                    'third party merchant id',
                    'eisbn',
                    'title',
                    'ASIN',
                    'units',
                    'refund date',
                    'transaction type code',
                    'publisher price with tax',
                    'pp w\/tax currency',
                    'publisher price without tax',
                    'pp currency',
                    'customer price with tax',
                    'cp w/tax currency',
                    'customer price',
                    'cp currency code',
                    'tax on transaction',
                    'tax currency',
                    'ship to state',
                    'ship to country',
                    'ship to postal code',
                    'Tax Rate',
                    'Divisor',
                    'Sale Amount US',
                    'Tax Amount US',
                    'Sale Amount Canadian',
                    'Tax Amount Canadian',
                    'Amazon Payment US',
                    'Sales Amount',
                    '^$'
                ],
            ],
        },

        # Amazon (CA Tax File)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 30,
            lines   => [ [
                    'report_date',                    'transaction_id',
                    'order_id',                       'transaction_date',
                    'date_used_for_tax_calc',         'isbn',
                    'asin',                           'title',
                    'primary_author',                 'product_tax_code',
                    'quantity_purchased',             'transaction_status',
                    'publisher_price',                'publisher_price_currency',
                    'our_price',                      'our_price_currency',
                    'tax_type_code',                  'transaction_type_code',
                    'tax_usage_type_code',            'rule_reason_code',
                    'buyer_exemption_code',           'bill_to_city',
                    'bill_to_province',               'bill_to_postal_code',
                    'bill_to_country',                'federal_taxed_jurisdiction',
                    'province_taxed_jurisdiction',    'tax_location_code_taxed_juris',
                    'federal_taxable_sale_amount',    'federal_nontaxable_sale_amount',
                    'federal_zero_rate_sale_amount',  'federal_exempt_sale_amount',
                    'province_taxable_sale_amount',   'province_nontaxable_sale_amount',
                    'province_zero_rate_sale_amount', 'province_exempt_sale_amount',
                    'province_tax_amount',            'federal_tax_amount',
                    'federal_taxed_juris_tax_rate',   'province_taxed_juris_tax_rate',
                    'payment_amount',                 'payment_amount_currency',
                    'tax_payment_amount',             'tax_payment_currency',
                    '|program_type',                  '^$'
                ],
            ],
        },

        # Amazon. Slightly different header than v30 (RSD-7615)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 30,
            lines   => [ [
                    'report_date',                    'transaction_id',
                    'order_id',                       'transaction_date',
                    'date_used_for_tax_calc',         'isbn',
                    'asin',                           'title',
                    'primary_author',                 'product_tax_code',
                    'quantity_purchased',             'transaction_status',
                    'publisher_price',                'publisher_price_currency',
                    'our_price',                      'our_price_currency',
                    'tax_type_code',                  'transaction_type_code',
                    'tax_usage_type_code',            'rule_reason_code',
                    'buyer_exemption_code',           'bill_to_city',
                    'bill_to_province',               'bill_to_postal_code',
                    'bill_to_country',                'federal_taxed_jurisdiction',
                    'province_taxed_jurisdiction',    'tax_location_code_taxed_juris',
                    'federal_taxable_sale_amount',    'federal_nontaxable_sale_amount',
                    'federal_zero_rate_sale_amount',  'federal_exempt_sale_amount',
                    'province_taxable_sale_amount',   'province_nontaxable_sale_amount',
                    'province_zero_rate_sale_amount', 'province_exempt_sale_amount',
                    'federal_tax_amount',             'province_tax_amount',
                    'federal_taxed_juris_tax_rate',   'province_taxed_juris_tax_rate',
                    'payment_amount',                 'payment_amount_currency',
                    'tax_payment_amount',             'tax_payment_currency',
                    'federal_tax_liability',          'province_tax_liability',
                    '^$'
                ],
            ],
        },

        # Amazon. Slightly different header than v30 (RSD-10091)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 30,
            lines   => [ [
                    'report_date',                    'transaction_id',
                    'order_id',                       'transaction_date',
                    'date_used_for_tax_calc',         'isbn',
                    'asin',                           'title',
                    'primary_author',                 'product_tax_code',
                    'quantity_purchased',             'transaction_status',
                    'publisher_price',                'publisher_price_currency',
                    'our_price',                      'our_price_currency',
                    'tax_type_code',                  'transaction_type_code',
                    'tax_usage_type_code',            'rule_reason_code',
                    'buyer_exemption_code',           'bill_to_city',
                    'bill_to_province',               'bill_to_postal_code',
                    'bill_to_country',                'federal_taxed_jurisdiction',
                    'province_taxed_jurisdiction',    'tax_location_code_taxed_juris',
                    'federal_taxable_sale_amount',    'federal_nontaxable_sale_amount',
                    'federal_zero_rate_sale_amount',  'federal_exempt_sale_amount',
                    'province_taxable_sale_amount',   'province_nontaxable_sale_amount',
                    'province_zero_rate_sale_amount', 'province_exempt_sale_amount',
                    'federal_tax_amount',             'province_tax_amount',
                    'federal_taxed_juris_tax_rate',   'province_taxed_juris_tax_rate',
                    'payment_amount',                 'payment_amount_currency',
                    'tax_payment_amount',             'tax_payment_currency', '^$'
                ],
            ],
        },

        # Amazon (Tax File)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 33,
            lines   => [ [
                    'report_date',                          'transaction_id',
                    'order_id',                             'transaction_date',
                    'eisbn',                                'asin',
                    'title',                                'primary_author',
                    'quantity_purchased',                   'transaction_status',
                    'transaction_type_code',                'publisher_price_with_tax',
                    'publisher_price_with_tax_currency',    'publisher_price_without_tax',
                    'publisher_price_without_tax_currency', 'our_price_with_tax',
                    'our_price_with_tax_currency',          'our_price_without_tax',
                    'our_price_without_tax_currency',       'tax_amount',
                    'tax_amount_currency',                  'bill_to_city',
                    'bill_to_state',                        'bill_to_country',
                    'bill_to_postal_code',                  'payment_amount',
                    'payment_amount_currency',              'tax_payment_amount',
                    'tax_payment_currency',                 '^$'
                ],
            ],
        },

        # Amazon (Macmillan Tax File)
        {
            service          => BookPub::Tracker::Service::AMAZON,
            version          => 34,
            match_on_any_row => 1,
            lines            => [ [
                    'report_date',                          'transaction_id',
                    'order_id',                             'transaction_date',
                    'eisbn',                                'asin',
                    'title',                                'primary_author',
                    'quantity_purchased',                   'transaction_status',
                    'transaction_type_code',                'publisher_price_with_tax',
                    'publisher_price_with_tax_currency',    'publisher_price_without_tax',
                    'publisher_price_without_tax_currency', 'our_price_with_tax',
                    'our_price_with_tax_currency',          'our_price_without_tax',
                    'our_price_without_tax_currency',       'tax_amount',
                    'tax_amount_currency',                  'bill_to_city',
                    'bill_to_state',                        'bill_to_country',
                    'bill_to_postal_code',                  'payment_amount',
                    'payment_amount_currency',              'tax_payment_amount',
                    'tax_payment_currency',                 'Tax Rate',
                    'Divisor',                              'Sale Amount US \$',
                    'Tax Amount US \$',                     'Sale Amount Canadian \$ \(',
                    'Tax Amount Canadian',                  'Amazon Payment US \$',
                    'Sales Amount',                         '^$'
                ],
            ],
        },

        # Amazon (Macmillan Tax File)
        {
            service          => BookPub::Tracker::Service::AMAZON,
            version          => 37,
            match_on_any_row => 1,
            lines            => [ [
                    'report_date',                    'transaction_id',
                    'order_id',                       'transaction_date',
                    'date_used_for_tax_calc',         'isbn',
                    'asin',                           'title',
                    'primary_author',                 'product_tax_code',
                    'quantity_purchased',             'transaction_status',
                    'publisher_price',                'publisher_price_currency',
                    'our_price',                      'our_price_currency',
                    'tax_type_code',                  'transaction_type_code',
                    'tax_usage_type_code',            'rule_reason_code',
                    'buyer_exemption_code',           'bill_to_city',
                    'bill_to_state',                  'bill_to_postal_code',
                    'bill_to_country',                'city_taxed_jurisdiction',
                    'county_taxed_jurisdiction',      'state_taxed_jurisdiction',
                    'district_taxed_jurisdiction',    'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',      'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',    'state_exempt_sale_amount',
                    'county_taxable_sale_amount',     'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',   'county_exempt_sale_amount',
                    'city_taxable_sale_amount',       'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',     'city_exempt_sale_amount',
                    'district_taxable_sale_amount',   'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount', 'district_exempt_sale_amount',
                    'district_tax_amount',            'city_tax_amount',
                    'county_tax_amount',              'state_tax_amount',
                    'state_taxed_juris_tax_rate',     'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',      'district_taxed_juris_tax_rate',
                    'payment_amount',                 'payment_amount_currency',
                    'tax_payment_amount',             'tax_payment_currency',
                    'rental_type',                    'rental_duration',
                    '^$'
                ],
            ],
        },

        # Amazon version 58 (RSD-1096)
        {
            service          => BookPub::Tracker::Service::AMAZON,
            version          => 58,
            match_on_any_row => 1,
            lines            => [ [
                    'report_date',                      'transaction_id',
                    'order_id',                         'transaction_date',
                    'date_used_for_tax_calc',           'isbn',
                    'asin',                             'title',
                    'primary_author',                   'product_tax_code',
                    'quantity_purchased',               'transaction_status',
                    'publisher_price',                  'publisher_price_currency',
                    'our_price',                        'our_price_currency',
                    'tax_type_code',                    'transaction_type_code',
                    'tax_usage_type_code',              'rule_reason_code',
                    'buyer_exemption_code',             'bill_to_city',
                    'bill_to_state',                    'bill_to_postal_code',
                    'bill_to_country',                  'tax_collection_model',
                    'tax_collection_responsible_party', 'city_taxed_jurisdiction',
                    'county_taxed_jurisdiction',        'state_taxed_jurisdiction',
                    'district_taxed_jurisdiction',      'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',        'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',      'state_exempt_sale_amount',
                    'county_taxable_sale_amount',       'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',     'county_exempt_sale_amount',
                    'city_taxable_sale_amount',         'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',       'city_exempt_sale_amount',
                    'district_taxable_sale_amount',     'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount',   'district_exempt_sale_amount',
                    'district_tax_amount',              'city_tax_amount',
                    'county_tax_amount',                'state_tax_amount',
                    'state_taxed_juris_tax_rate',       'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',        'district_taxed_juris_tax_rate',
                    'payment_amount',                   'payment_amount_currency',
                    'tax_payment_amount',               'tax_payment_currency',
                    'rental_type',                      'rental_duration',
                    '^$'
                ],
            ],
        },

        # Amazon, version 38
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 38,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Publisher Price Without Tax',
                    'Publisher Price Without Tax Currency',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Net Units Refunded',
                    'Refund Commission',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Amazon, version 40
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 40,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Publisher Price Without Tax',
                    'Publisher Price Without Tax Currency',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Net Units Refunded',
                    'Refund Commission',
                    'dvs_refund_cost_difference_currency|Refund Commission Currency',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Amazon, version 41
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 41,
            lines   => [ [
                    'vendor_code',             'invoice_date',
                    'ASIN',                    'physical_isbn_10',
                    'physical_isbn_13',        'digital_isbn',
                    'title',                   'author',
                    'imprint',                 'format',
                    'units_rented',            'units_refunded',
                    'net_units',               'adjustments_made',
                    'list_price',              'rental_type',
                    'old_rental_duration',     'rental_duration',
                    'old_discount_percentage', 'new_discount_percentage',
                    'payment_amount',          'amount_currency',
                    'Updated payment %',       'DLP \* updated PD \* units',
                    'Final payment amount',    'Original extension\/purchase % of DLP',
                    '^$'
                ],
            ],
        },

        # Amazon, version 59
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 59,
            lines   => [ [
                    'Invoice Date\)',
                    'ASIN',
                    'ISBN-10 \(Physical ISBN-10\)',
                    'ISBN-13 \(Physical ISBN-13\)',
                    'ISBN \(Digital ISBN\)',
                    '\(Title\)',
                    '\(Author\)',
                    '\(Imprint\)',
                    '\(Format\)',
                    '\(Units Purchased\)',
                    '\(Units Refunded\)',
                    '\(Net Units\)',
                    '\(Net Units MTD\)',
                    '\(Adjustments Made\)',
                    '\(List Price With Tax\)',
                    '\(List Price With Tax Currency\)',
                    '\(Publisher Price\)',
                    '\(Publisher Price Currency\)',
                    '\(Discount Percentage\)',
                    undef,
                    undef,
                    '\(Payment Amount\)',
                    '\(Payment Amount Currency\)',
                    '\/',
                    'Revenue \(after tax\)',
                    '^$'
                ],
            ],
        },

        # Amazon, version 60 (RSD-2759)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 60,
            lines   => [ [
                    'Order/Return Date',
                    'Digital Item',
                    'Base Price',
                    'Payment Amount',
                    'Payment Type',
                    '^$'
                ],
            ],
        },

        # Amazon, version 61 (RSD-3059) like v6 with additional column at the very end
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 61,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Program Type',
                    '^$'
                ],
            ],
        },

        # Amazon, version 46
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 46,
            lines   => [ [
                    '\(Invoice Date\)',
                    'ASIN',
                    'ISBN-10 \(Physical ISBN-10\)',
                    'ISBN-13 \(Physical ISBN-13\)',
                    'ISBN \(Digital ISBN\)',
                    '\(Title\)',
                    '\(Author\)',
                    '\(Imprint\)',
                    '\(Format\)',
                    '\(Units Purchased\)',
                    '\(Units Refunded\)',
                    '\(Net Units\)',
                    '\(Net Units MTD\)',
                    '\(Adjustments Made\)',
                    '\(List Price With Tax\)',
                    '\(List Price With Tax Currency\)',
                    '\(Publisher Price\)',
                    '\(Publisher Price Currency\)',
                    '\(Discount Percentage\)',
                    undef,
                    undef,
                    '\(Payment Amount\)',
                    '\(Payment Amount Currency\)',
                    '\/',
                    undef,    #!!! don't use undef here due to v59
                              # It looks like we have to use undef here.  I moved v59 above this one, so it should work out.
                    '^$'
                ],
            ],
        },

        # Amazon, version 80
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 80,
            lines   => [ [
                    '.*\(Invoice Date\)',
                    'ASIN',
                    'ISBN\-10 \(Physical ISBN\-10\)',
                    'ISBN\-13 \(Physical ISBN\-13\)',
                    'ISBN \(Digital ISBN\)',
                    '\(Title\)',
                    '\(Author\)',
                    '\(Imprint\)',
                    '\(Format\)',
                    '\(Units Purchased\)',
                    '\(Units Refunded\)',
                    '\(Net Units\)',
                    '\(Net Units MTD\)',
                    '\(Adjustments Made\)',
                    '\(List Price\)',
                    '\(List Price Currency\)',
                    '\(Publisher Price\)',
                    '\(Publisher Price Currency\)',
                    '\(Discount Percentage\)',
                    '.*',
                    '.*',
                    '\(Payment Amount\)',
                    '\(Payment Amount Currency\)',
                    '.*',
                    '.*',
                    '^$'
                ],
            ],
        },

        # Apple
        {
            service => BookPub::Tracker::Service::APPLE,
            version => 3,
            lines   => [ [
                    'Start Date',
                    'End Date',
                    'UPC',
                    'ISRC',
                    'Vendor Identifier',
                    'Quantity',
                    'Partner Share',
                    'Extended Partner Share',
                    'Partner Share Currency',
                    'Sales or Return',
                    'Apple Identifier',
                    'Artist\/Show\/Developer',
                    'Title',
                    'Label\/Studio\/Network\/Developer',
                    'Grid',
                    'Product Type Identifier',
                    'ISAN\/Other Identifier',
                    'Country Of Sale',
                    'Pre-order Flag',
                    'Promo Code',
                    'Customer Price',
                    'Customer Currency',
                    'Region',
                    '^$'
                ],
            ],
        },

        # Apple
        {
            service => BookPub::Tracker::Service::APPLE,
            version => 2,
            lines   => [ [
                    'Start Date',
                    'End Date',
                    'UPC',
                    'ISRC',
                    'Vendor Identifier',
                    'Quantity',
                    'Partner Share',
                    'Extended Partner Share',
                    'Partner Share Currency',
                    'Sales or Return',
                    'Apple Identifier',
                    'Artist\/Show\/Developer',
                    'Title',
                    'Label\/Studio\/Network\/Developer',
                    'Grid',
                    'Product Type Identifier',
                    'ISAN\/Other Identifier',
                    'Country Of Sale',
                    'Pre-order Flag',
                    'Promo Code',
                    'Customer Price',
                    'Customer Currency',
                    '^$'
                ],
            ],
        },

        # Apple v4 (RSD-2835)
        {
            service => BookPub::Tracker::Service::APPLE,
            version => 4,
            lines   => [ [
                    'Fiscal Year Period',
                    'UPC',
                    'ISRC\/ISBN',
                    'Vendor Identifier',
                    'Quantity',
                    'Partner Share',
                    'Extended Partner Share',
                    'Partner Share Currency',
                    'Sales or Return',
                    'Apple Identifier',
                    'Artist\/Show\/Developer\/Author',
                    'Title',
                    'Label\/Studio\/Network\/Developer\/Publisher',
                    'Grid',
                    'Product Type Identifier',
                    'ISAN\/Other Identifier',
                    'Country Of Sale',
                    'Customer Price',
                    'Customer Currency',
                    'WHT Rate in %',
                    'WHT Currency',
                    '^$'
                ],
            ],
        },

# eBook
#{
#    service => BookPub::Tracker::Service::EBOOK,
#    version => 1,
#    lines => [
#        ['Creditor', 'Publisher', 'Imprint', 'Title', 'Print ISBN', 'Print ISBN 13', 'eISBN', 'eISBN 13', 'Format #ISBN', 'Format ISBN 13', 'Retailer', 'Date Purchased', 'Reference Number', 'Format', 'Price USD', 'Discount \%', #'Total \(\$\)', 'Refund'],
#    ],
#},
# eBook v2
#{
#    service => BookPub::Tracker::Service::EBOOK,
#    version => 2,
#    lines => [
#        ([undef]) x 11,
#        ['eBook Title', 'Format', 'eISBN', 'No. Sold', 'Price', 'Subtotal', 'Discount %', 'Total'],
#    ],
#},
# eBook v3 - starting 4/10
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 3,
            lines   => [ [
                    'Creditor',         'Publisher',      'Imprint',          'Title',        'Authors',          'Print ISBN 13',
                    'eISBN 13',         'Format ISBN 13', 'Format',           'Retailer',     'Retailer Country', 'Date Purchased',
                    'Reference Number', 'Country',        'ISO Country Code', 'Currency',     'State of Sale',    'Price',
                    'Sales Tax',        'County Tax',     'Discount',         'PublisherDue', 'Refund'
                ],
            ],
        },

        # eBook v4 - starting 7/10 - similar to v3 but with zip thrown into the middle
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 4,
            lines   => [ [
                    'Creditor',         'Publisher',      'Imprint',          'Title',    'Authors',          'Print ISBN 13',
                    'eISBN 13',         'Format ISBN 13', 'Format',           'Retailer', 'Retailer Country', 'Date Purchased',
                    'Reference Number', 'Country',        'ISO Country Code', 'Currency', 'Zip Code',         'State of Sale',
                    'Price',            'Sales Tax',      'County Tax',       'Discount', 'PublisherDue',     'Refund'
                ],
            ],
        },

        # eBook v5
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 5,
            lines   => [ [
                    'Creditor',         'Publisher',      'Imprint',          'Title',    'Authors',          'Print ISBN 13',
                    'eISBN 13',         'Format ISBN 13', 'Format',           'Retailer', 'Retailer Country', 'Date Purchased',
                    'Reference Number', 'Country',        'ISO Country Code', 'Currency', 'Zip Code',         'State of Sale',
                    'Price',            'Sales Tax',      'County Tax',       'City Tax', 'Discount',         'PublisherDue',
                    'Refund'
                ],
            ],
        },

        # eBook v6
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 6,
            lines   => [ [
                    'Creditor',         'Publisher',      'Imprint',          'Title',      'Authors',          'Print ISBN 13',
                    'eISBN 13',         'Format ISBN 13', 'Format',           'Retailer',   'Retailer Country', 'Date Purchased',
                    'Reference Number', 'Country',        'ISO Country Code', 'Currency',   'Zip Code',         'State of Sale',
                    'City of Sale',     'Price',          'Sales Tax',        'County Tax', 'City Tax',         'Discount',
                    'PublisherDue',     'Refund'
                ],
            ],
        },

        # eBook v7
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 7,
            lines   => [ [
                    'Creditor',          'Publisher',       'Imprint',         'Title',
                    'Authors',           'PrintIsbn13',     'EbookIsbn13',     'FormatIsbn13',
                    'Format',            'Retailer',        'RetailerCountry', 'DatePurchased',
                    'ReferenceNumber',   'CustomerCountry', 'IsoCountryCode',  'State',
                    'StateAbbreviation', 'County',          'City',            'ZipCode',
                    'CorePrice',         'CoreCurrency',    'ConversionRate',  'SalePrice',
                    'SaleCurrency',      'CountryTax',      'StateTax',        'CountyTax',
                    'CityTax',           'Discount',        'PubDue',          'Refunded'
                ],
            ],
        },

        # eBook v8
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 8,
            lines   => [ [
                    'Creditor',          'Publisher',            'Imprint',         'Title',
                    'Authors',           'PrintIsbn13',          'EbookIsbn13',     'FormatIsbn13',
                    'Format',            'Retailer',             'RetailerCountry', 'DatePurchased',
                    'ReferenceNumber',   'CustomerCountry',      'IsoCountryCode',  'State',
                    'StateAbbreviation', 'County',               'City',            'ZipCode',
                    'CorePrice',         'CoreCurrency',         'ConversionRate',  'SaleCurrency',
                    'StateTax',          'CountyTax',            'CityTax',         'Discount',
                    'PubDue',            'CoreCurrencyExchange', 'CoreCurrencyDue', 'Refunded'
                ],
            ],
        },

        # eBook v9
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 9,
            lines   => [ [
                    'Creditor',          'Publisher',            'Imprint',         'Title',
                    'Authors',           'PrintIsbn13',          'EbookIsbn13',     'FormatIsbn13',
                    'Format',            'Retailer',             'RetailerCountry', 'DatePurchased',
                    'ReferenceNumber',   'CustomerCountry',      'IsoCountryCode',  'State',
                    'StateAbbreviation', 'County',               'City',            'ZipCode',
                    'CorePrice',         'CoreCurrency',         'ConversionRate',  'PriceDiscount',
                    'SalePrice',         'SaleCurrency',         'CountryTax',      'StateTax',
                    'CountyTax',         'CityTax',              'DistrictTax',     'Discount',
                    'PubDue',            'CoreCurrencyExchange', 'CoreCurrencyDue', 'Refunded'
                ],
            ],
        },

        # eBook v10
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 10,
            lines   => [ [
                    'Creditor',          'Publisher',       'Imprint',         'Title',
                    'Authors',           'PrintIsbn13',     'EbookIsbn13',     'FormatIsbn13',
                    'Format',            'Retailer',        'RetailerCountry', 'DatePurchased',
                    'ReferenceNumber',   'CustomerCountry', 'IsoCountryCode',  'State',
                    'StateAbbreviation', 'County',          'City',            'ZipCode',
                    'CorePrice',         'CoreCurrency',    'ConversionRate',  'SalePrice',
                    'SaleCurrency',      'CountryTax',      'StateTax',        'CountyTax',
                    'CityTax',           'DistrictTax',     'Discount',        'PubDue',
                    'Refunded'
                ],
            ],
        },

        # eBook v11
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 11,
            lines   => [ [
                    'Creditor',        'Publisher',       'Imprint',        'Title',     'Authors',         'PrintIsbn13',
                    'EbookIsbn13',     'FormatIsbn13',    'Format',         'Retailer',  'RetailerCountry', 'DatePurchased',
                    'ReferenceNumber', 'CustomerCountry', 'IsoCountryCode', 'CorePrice', 'CoreCurrency',    'ConversionRate',
                    'SalePrice',       'SaleCurrency',    'Discount',       'PubDue',    'Refunded'
                ],
            ],
        },

        # eBook v12
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 12,
            lines   => [ [
                    'Creditor',        'Publisher',      'Imprint',         'Title',
                    'Authors',         'PrintIsbn13',    'EbookIsbn13',     'FormatIsbn13',
                    'Format',          'Retailer',       'RetailerCountry', 'DatePurchased',
                    'ReferenceNumber', 'IsoCountryCode', 'State',           'StateAbbreviation',
                    'County',          'City',           'ZipCode',         'CorePrice',
                    'CoreCurrency',    'CountryTax',     'StateTax',        'CountyTax',
                    'CityTax',         'DistrictTax',    'Discount',        'PubDue',
                    'Refunded'
                ],
            ],
        },

        # eBook v13
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 13,
            lines   => [ [
                    'Creditor',        'Publisher',       'Imprint',        'Title',     'Authors',         'PrintIsbn13',
                    'EbookIsbn13',     'FormatIsbn13',    'Format',         'Retailer',  'RetailerCountry', 'DatePurchased',
                    'ReferenceNumber', 'CustomerCountry', 'IsoCountryCode', 'CorePrice', 'CoreCurrency',    'Discount',
                    'PubDue',          'Refunded'
                ],
            ],
        },

        # Proquest acquired eBooks.com library division.  Versions 15 and 16 of the EBOOK importer
        # are used for these EBL format books.  I'm leaving the rules lines here and mapping
        # them in the Factory - SB
        #
        # eBook v15 (there IS a version 14, it's a dynamic importer)
        # eBook v15 (now Proquest)
        {
            service => BookPub::Tracker::Service::PROQUEST,
            version => 15,
            lines   => [ [
                    'Creditor',  'Publisher',    'Imprint',   'Title',           'ItemId',      'PrintIsbn',
                    'EbookIsbn', 'SaleType',     'Model',     'ChapterId',       'ChapterName', 'TotalSold',
                    'Currency',  'PricePerUnit', 'TotalPaid', 'PublisherMargin', 'PublisherDue'
                ],
            ],
        },

        # eBook v16 (now Proquest)
        {
            service => BookPub::Tracker::Service::PROQUEST,
            version => 16,
            lines   => [ [
                    'Creditor',            'Publisher',       'Imprint',      'Title',
                    'ItemId',              'PrintIsbn',       'EbookIsbn',    'SaleType',
                    'Model',               'ChapterId',       'ChapterName',  'TotalSold',
                    'Currency',            'PricePerUnit',    'DiscountName', 'DiscountPercent',
                    'TotalPaid|TotalCost', 'PublisherMargin', 'PublisherDue'
                ],
            ],
        },

        # Proquest v17 (formerly EBook)
        {
            service => BookPub::Tracker::Service::PROQUEST,
            version => 17,
            lines   => [ [
                    'Creditor',        'Publisher', 'Imprint',      'Title',
                    'ItemId',          'PrintIsbn', 'EbookIsbn',    'SaleType',
                    'DateOfSale',      'Model',     'ChapterId',    'ChapterName',
                    'Currency',        'Region',    'Country',      'CountryAbbreviation',
                    'PricePerUnit',    'Quantity',  'DiscountName', 'Discount\(%\)',
                    'PublisherMargin', 'PublisherDue'
                ],
            ],
        },

        # Proquest v18, FB 12835
        {
            service => BookPub::Tracker::Service::PROQUEST,
            version => 18,
            lines   => [ [
                    'Content Provider', 'Publisher',    'Imprint',      'Title',           'ItemId',          'PrintIsbn',
                    'EbookIsbn',        'Platform',     'SaleType',     'License Type',    'ChapterId',       'ChapterName',
                    'TotalSold',        'Currency',     'PricePerUnit', 'DiscountName',    'DiscountPercent', 'Region',
                    'Country',          'Country Code', 'TotalPaid',    'PublisherMargin', 'PublisherDue'
                ],
            ],
        },

        # Proquest v20 (FBoD 16303)
        {
            service => BookPub::Tracker::Service::PROQUEST,
            sheet   => 'any',
            version => 20,
            lines   => [ [
                    'Content Provider', 'Publisher', 'Imprint',  'Title',        'ItemId',         'PrintIsbn',
                    'EbookIsbn',        'Platform',  'SaleType', 'License Type', 'ATO Front List', 'ChapterId',
                    'ChapterName',      'TotalSold', 'Currency', 'PricePerUnit', 'STL ATO Credit', 'DiscountName',
                    'DiscountPercent',  'Region',    'Country',  'Country Code', 'TotalPaid',      'PublisherMargin',
                    'PublisherDue',     '^$'
                ],
            ],
        },

        # Proquest v20 (RSD-1057), for a new tab 'Earnings detail'
        {
            service => BookPub::Tracker::Service::PROQUEST,
            sheet   => 'any',
            version => 20,
            lines   => [ [
                    'TITLE',           'ISBN',                   'INVOICE_DATE',  'INVOICE_NUMBER',
                    'CURRENCY',        'List price',             'SUPPLIER_NAME', '\w{3} \d+ EUR to USD FX RATE',
                    'Publisher Share', 'Publisher\'s USD share', '^$'
                ],
            ],
        },


        # Proquest v21 (RSD-3416)
        {
            service => BookPub::Tracker::Service::PROQUEST,
            sheet   => 'any',
            version => 21,
            lines   => [ [
                    'Transaction Date',
                    'Content Provider',
                    'Publisher',
                    'Imprint',
                    'Title',
                    'ItemId',
                    'PrintIsbn',
                    'EbookIsbn',
                    'SaleType',
                    'License Type',
                    'ATO Frontlist\/Backlist',
                    'Currency',
                    'Base List Price at time of transaction',
                    'Model Multiplier',
                    'Sales Price',
                    'Promotional Discount Name',
                    'Promotional Discount Percent',
                    'Sale Price Per Unit',
                    'Units Sold',
                    'Gross Revenue',
                    'STL ATO Credit',
                    'Publisher Revenue Share',
                    'Due to Publisher',
                    'Third Party Sale',
                    'Region',
                    'Country',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Proquest v22 (RSD-10425)
        {
            service => BookPub::Tracker::Service::PROQUEST,
            sheet   => 'any',
            version => 22,
            lines   => [ [
                    'Transaction Date',
                    'Content Provider',
                    'Publisher',
                    'Imprint',
                    'Title',
                    'ItemId',
                    'PrintIsbn',
                    'EbookIsbn',
                    'SaleType',
                    'License Type',
                    'ATO Frontlist/Backlist',
                    'Currency',
                    'Base List Price at time of transaction',
                    'Model Multiplier',
                    'Sales Price',
                    'Promotional Discount Name',
                    'Promotional Discount Percent',
                    'Sale Price Per Unit',
                    'Units Sold',
                    'Gross Revenue',
                    'STL ATO Credit',
                    'Publisher Revenue Share',
                    'Due to Publisher',
                    'Third Party Sale',
                    'Region',
                    'Country',
                    'Country Code',
                    'EBA Collection Name',
                    '^$'
                ],
            ],
        },


        # eBook v19
        {
            service => BookPub::Tracker::Service::EBOOK,
            version => 19,
            lines   => [ [
                    'ReportId',                       'ReportDate',
                    'MessageFunction',                'SalesReportType',
                    'ReportPriceType',                'ReportingCurrency',
                    'ReportPeriodFrom',               'ReportPeriodTo',
                    'NotUsed',                        'ClassOfTradeHeader',
                    'SalesTerritoryHeader',           'LineItemId',
                    'SubAgentID',                     'SubAgentName',
                    'TransactionDate',                'AgentsTransactionID',
                    'LineItemReferenceType',          'LineItemReferenceId',
                    'LineItemReferenceDateTime',      'MainProductIdentifierType',
                    'MainProductIdentifier',          'AlternativeProductIdentifierType',
                    'AlternativeProductIdentifierId', 'ProductTitle',
                    'Authors',                        'ProductDescription',
                    'PublisherId',                    'PublisherName',
                    'ImprintName',                    'ProductFormat',
                    'DeviceType',                     'QuantitySold',
                    'RefundedQuantity',               'NetSold',
                    'NonSaleQuantity',                'NonSaleDisposeType',
                    'ClassOfTrade',                   'SalesTerritory',
                    'UnitPrice',                      'PriceType',
                    'PriceCurrency',                  'DiscountPercentage',
                    'GrossSoldValue',                 'RefundedValue',
                    'NetValueBeforeFees',             'FeeType1',
                    'FeeAmount1',                     'FeeSource1',
                    'FeeType2',                       'FeeAmount2',
                    'FeeSource2',                     'FeeType3',
                    'FeeAmount3',                     'FeeSource3',
                    'ProceedsOfSaleDueToPublisher',   'TotalNumberOfLineItems',
                    'TotalGrossQuantitySold',         'TotalRefundedQuantity',
                    'TotalNetSoldQuantity',           'TotalNonSaleQuantity',
                    'TotalGrossSoldValue',            'TotalRefundedValue',
                    'NetSoldValueBeforeFees',         'TotalFeesOfAllTypes',
                    'TotalProceedsDueToPublisher',    'ReportingAgentId',
                    'ReportingAgentName',             'CurrencyConversionRate',
                    'ListPrice',                      'PriceType',
                    '^$'
                ],
            ],
        },

        # Follett-CafeScribe
        {
            service => BookPub::Tracker::Service::FOLLETT_CAFESCRIBE,
            version => 1,
            lines   => [ [
                    'Reseller Name',
                    'Report Year/Month',
                    'Reseller PO#',
                    'Digital ISBN-13',
                    'Print ISBN-13',
                    'Digital Title',
                    'Author',
                    'Reseller Cost',
                    'Gross Units',
                    'Cancelled Units',
                    'Net Units',
                    'Net Cost',
                    'Date',
                    'School',
                    'ZipCode',
                ]
            ],
        },

        # Follett-Higher-Education
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 1,
            lines   => [ [
                    'Vendor',        'Source',        'Date',      'UPC',    'Digital ISBN 13', 'Digital ISBN 10',
                    'Print ISBN 13', 'Print ISBN 10', 'Publisher', 'Author', 'Title',           'Cost',
                    'List Price',    'Type',          'School',    'ZipCode',
                ]
            ],
        },

        # Follett-Higher-Education, version 2
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 2,
            lines   => [ [
                    'Vendor',                          'Source',
                    'Channel',                         'Date',
                    'UPC',                             'Digital ISBN 13|Digital ISBN-13',
                    'Digital ISBN 10|Digital ISBN-10', 'Print ISBN 13|Print ISBN-13',
                    'Print ISBN 10|Print ISBN-10',     'Publisher',
                    'Author',                          'Title',
                    'Type',                            'Retail',
                    'Cost',                            'School',
                    'ZipCode',
                ]
            ],
        },

        # Follett-Higher-Education, version 3
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 3,
            lines   => [ [
                    'Vendor',                          'Format',
                    'Source',                          'Channel',
                    'Date',                            'UPC',
                    'Digital ISBN 13|Digital ISBN-13', 'Digital ISBN 10|Digital ISBN-10',
                    'Print ISBN 13|Print ISBN-13',     'Print ISBN 10|Print ISBN-10',
                    'Publisher',                       'Author',
                    'Title',                           'Type',
                    'Retail',                          'Cost',
                    'School',                          'ZipCode',
                ]
            ],

        },

        # Follett-Higher-Education, version 4
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 4,
            lines   => [ [
                    'Date',            'Vendor',    'Source', 'Channel',         'OrderNumber',   'SKU',
                    'TransactionType', 'Format',    'UPC',    'Digital ISBN-13', 'Print ISBN-13', 'StoreNbr',
                    'StoreName',       'Publisher', 'Author', 'Title',           'Retail',        'Cost',
                    'School',          'City',      'State',  'ZipCode',
                ]
            ],

        },

        # Follett-Higher-Education, version 5
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 5,
            lines   => [ [
                    'Date',             'Vendor', 'Source',          'Channel',       'OrderNumber', 'SKU',
                    'Transaction Type', 'UPC',    'Digital ISBN-13', 'Print ISBN-13', 'StoreNbr',    'StoreName',
                    'Publisher',        'Author', 'Title',           'Retail',        'Cost',        'School',
                    'City',             'State',  'ZipCode',
                ],
            ],
        },

        # Follett-Higher-Education, version 6
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 6,
            lines   => [ [
                    'Vendor',                          'Source',
                    'Date',                            'UPC',
                    'Digital ISBN 13|Digital ISBN-13', 'Digital ISBN 10|Digital ISBN-10',
                    'Print ISBN 13|Print ISBN-13',     'Print ISBN 10|Print ISBN-10',
                    'Publisher',                       'Author',
                    'Title',                           'Type',
                    'Retail',                          'Cost',
                    'School',                          'ZipCode',
                    'Professor',                       'Prof Email',
                ],
            ],
        },

        # Follett-Higher-Education, version 7
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 7,
            lines   => [ [
                    'Vendor',          'Source',   'Channel',             'Date',
                    'OrderNumber',     'SKU',      'UPC',                 'Digital ISBN-13',
                    'Print ISBN-13',   'StoreNbr', 'StoreName',           'Publisher',
                    'Author',          'Title',    'TransactionCategory', 'SourceSystemName',
                    'TransactionType', 'Retail',   'Cost',                'School',
                    'City',            'State',    'ZipCode',             '^$',
                ],
            ],
        },

        # Follett-Higher-Education, version 8
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 8,
            lines   => [ [
                    'Vendor',          'Publisher',     'Source',        'Date',   'UPC',   'Digital ISBN',
                    'Digital ISBN-10', 'Print ISBN-13', 'Print ISBN-10', 'Author', 'Title', 'Type',
                    'Retail',          'Cost',          'School',        'City',   'State', 'Professor',
                    'Prof Email',      '^$',
                ],
            ],
        },

        # Follett-Higher-Education, version 9
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 9,
            lines   => [ [
                    'MTCCode',             'Vendor',           'Source',                  'Channel',
                    'Date',                'OrderNumber',      'SourceTransactionItemID', 'SKU',
                    'UPC',                 'Digital ISBN-13',  'Print ISBN-13',           'Publisher',
                    'Author',              'Title',            'StoreNbr',                'StoreName',
                    'School',              'City',             'State',                   'ZipCode',
                    'TransactionCategory', 'SourceSystemName', 'TransactionType',         'Retail',
                    'Cost',                '^$',
                ],
            ],
        },

        # Follett-Higher-Education, version 10
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 10,
            lines   => [ [
                    'Vendor',        'Source',    'Purchase Date', 'UPC',   'Digital ISBN', 'Digital ISBN-10',
                    'Print ISBN-13', 'Publisher', 'Author',        'Title', 'Type',         'Retail',
                    'Cost',          'School',    'City',          'State', 'Professor',    'Prof Email',
                    '^$',
                ],
            ],
        },

        # Follett-Higher-Education, version 11
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 11,
            lines   => [ [
                    'FMS CustomReport', 'MTCCode',             'Vendor',           'Source',
                    'Channel',          'Date',                'OrderNumber',      'SourceTransactionItemID',
                    'SKU',              'Digital UPC',         'Digital ISBN-13',  'Print ISBN-13',
                    'Publisher',        'Author',              'Title',            'StoreNbr',
                    'StoreName',        'School',              'City',             'State',
                    'ZipCode',          'TransactionCategory', 'SourceSystemName', 'TransactionType',
                    'Retail',           'Cost',                '^$'
                ],
            ],
        },

        # Follett-Higher-Education, version 12
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 12,
            lines   => [ [
                    'ID',                        'FMS CustomReport',
                    'Channel',                   'Source',
                    'Vendor',                    'APVendorNumber',
                    'Publisher',                 'MTCCode',
                    'OrderNumber',               'SourceTransactionItemID',
                    'Date',                      'TransactionType',
                    'SKU',                       'Digital UPC',
                    'Digital ISBN-13',           'Digital ISBN10',
                    'Print ISBN-13',             'Print ISBN10',
                    'Title',                     'Author',
                    'Store#',                    'StoreNbr',
                    'StoreName',                 'School',
                    'City',                      'State',
                    'ZipCode',                   'Retail',
                    'VendorCost',                'TransactionCategory',
                    'SourceSystemName',          'UnitTaxableAmount',
                    'UnitExemptZeroRatedAmount', 'ISOCountryCode',
                    'StateTaxRate',              'UnitStateTaxAmount',
                    'CountyTaxRate',             'UnitCountyTaxAmount',
                    'CityTaxRate',               'UnitCityTaxAmount',
                    'DistrictTaxRate',           'UnitDistrictTaxAmount',
                    'UnitPromoDiscountAmount',   'UnitPromoDiscountPercentage',
                    '^$'
                ],
            ],
        },

        # Follett-Higher-Education, version 13
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 13,
            lines   => [ [
                    'MTCCode',                   'Vendor',
                    'Source',                    'Channel',
                    'Date',                      'OrderNumber',
                    'SourceTransactionItemID',   'SKU',
                    'Digital UPC',               'Digital ISBN-13',
                    'Print ISBN-13',             'Publisher',
                    'Author',                    'Title',
                    'StoreNbr',                  'StoreName',
                    'School',                    'City',
                    'State',                     'ZipCode',
                    'TransactionCategory',       'SourceSystemName',
                    'TransactionType',           'Retail',
                    'Cost',                      'UnitTaxableAmount',
                    'UnitExemptZeroRatedAmount', 'ISOCountryCode',
                    'StateTaxRate',              'UnitStateTaxAmount',
                    'CountyTaxRate',             'UnitCountyTaxAmount',
                    'CityTaxRate',               'UnitCityTaxAmount',
                    'DistrictTaxRate',           'UnitDistrictTaxAmount',
                    'UnitPromoDiscountAmount',   'UnitPromoDiscountPercentage',
                    '^$'
                ],
            ],
        },

        # Follett-Higher-Education, version 14, FB11946
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 14,
            lines   => [ [
                    'Vendor',          'Channel',       'Source',    'Purchase Date', 'UPC',   'Digital ISBN',
                    'Digital ISBN-10', 'Print ISBN-13', 'Publisher', 'Author',        'Title', 'Void Date',
                    'Type',            'Retail',        'Cost',      'School',        'City',  'State',
                    'Professor',       'Prof Email',    '^$'
                ],
            ],
        },

        # Follett-Higher-Education, version 15, FB12477
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 15,
            lines   => [ [
                    'Vendor',          'Channel',       'Source',    'Purchase Date', 'UPC',        'Digital ISBN',
                    'Digital ISBN-10', 'Print ISBN-13', 'Publisher', 'Author',        'Title',      'Void Date',
                    'Type',            'Term',          'Units',     'Unit Cost',     'Retail',     'Cost',
                    'School',          'City',          'State',     'Professor',     'Prof Email', 'Notes',
                    '^$'
                ],
            ],
        },

        # Follett-Higher-Education, version 16, FB13423
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 16,
            lines   => [ [
                    'ID',              'IMS CustomReport', 'Vendor',                   'Source',
                    'Channel',         'TrxID',            'Purchase Date',            'Access Date',
                    'Voided',          'Void Date',        'Date of reversal Request', 'Term',
                    'UPC',             'UPC #',            'BookID',                   'Digital ISBN',
                    'Digital ISBN-10', 'Print ISBN-13',    'Publisher',                'Author',
                    'Title',           'Type',             'Units',                    'Unit Cost',
                    'Retail',          'VendorCost',       'StoreNbr',                 'Store#',
                    'School',          'City',             'State',                    'Professor',
                    'Prof Email',      'Notes',            '^$'
                ],
            ],
        },

        # Follett-Higher-Education, version 17, FB13516
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 17,
            lines   => [ [
                    'VendorName',            'StoreNumber',    'Author',           'Title',
                    'TransactionCategory',   'Retail',         'Cost',             'OrderNumber',
                    'TransactionType',       'SKU',            'CANumber',         'Description',
                    'APVendorNumber',        'MTCCode',        'DownloadProvider', 'Publisher',
                    'SubmittedToLawsonDate', 'Date',           'Digital UPC',      'Follett StoreNumber',
                    'Digital ISBN13',        'Digital ISBN10', 'School',           'City',
                    'State',                 'Zip',            'Channel',          'SourceSystemName',
                    '^$'
                ],
            ],
        },

        # Follett-Higher-Education (Returns), version 18, FB16425
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 18,
            lines   => [ [ 'Store #', 'School', 'Term', 'Reason', 'Publisher', 'ISBN', 'SKU', 'Unit Cost', 'Units', 'Cost', '^$' ], ],
        },

        # Follett-Higher-Education, version 19, RSD-912
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 19,
            lines   => [ [ 'Store #', 'School', 'Term', 'Reason', 'Publisher', 'ISBN', 'SKU', 'Units', 'Unit Cost', 'Cost', '^$' ], ],
        },

        # Follett-Higher-Education, version 20 (based on v17) (RSD-6547)
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 20,
            lines   => [ [
                    'APVendorNumber',
                    'VendorName',
                    'OrderNumber',
                    'TransactionNumber',
                    'Author',
                    'Title',
                    'Description',
                    'SKU',
                    'CANumber',
                    'Digital UPC',
                    'Digital ISBN13',
                    'Digital ISBN10',
                    'CoursewareIND',
                    'Passcode',
                    'Publisher',
                    'MTCCode',
                    'DownloadProvider',
                    'Retail',
                    'Cost',
                    'TransactionType',
                    'TransactionCategory',
                    'Date',
                    'Channel',
                    'SourceSystemName',
                    'StoreNumber',
                    'School',
                    'City',
                    'State',
                    'Zip',
                    'PriceIndicator',
                    'Duration',
                    'UVID',
                    'CurrencyType',
                    'Message',
                    'TenderFlag',
                    '^$'
                    ] ],
        },

        # Follett-Higher-Education, version 20 (Alternative header) (RSD-10080)
        {
            service => BookPub::Tracker::Service::FOLLETT_HIGHER_EDUCATION,
            version => 20,
            lines   => [ [
                    'APVendorNumber',
                    'VendorName',
                    'OrderNumber',
                    'TransactionNumber',
                    'Author',
                    'Title',
                    'Description',
                    'SKU',
                    'CANumber',
                    'Digital UPC',
                    'Digital ISBN13',
                    'Digital ISBN10',
                    'CoursewareIND',
                    'Passcode',
                    'Publisher',
                    'MTCCode',
                    'DownloadProvider',
                    'Retail',
                    'Cost',
                    'TransactionType',
                    'TransactionCategory',
                    'Date',
                    'Channel',
                    'SourceSystemName',
                    'StoreNumber',
                    'School',
                    'City',
                    'State',
                    'Zip',
                    'PriceIndicator',
                    'Duration',
                    'UVID',
                    'CurrencyType',
                    'Message',
                    'TenderFlag',
                    'IncludEDLastDropDate',
                    '^$'
                    ] ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 1,
            lines => [ [ 'Date', 'CR ID', 'eISBN', 'Title', 'Subtitle', 'Author', 'Retailer', 'Format', 'SRP', 'Discount', 'Amt Owed' ], ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 2,
            lines   => [ [
                    'Date',     'CR ID',  'eISBN',     'Title',  'Subtitle', 'Author',
                    'Retailer', 'Format', 'SRPNative', 'SRPUSD', 'Discount', 'Amt Owed Native',
                    'Amt Owed USD'
                ],
            ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 4,
            lines   => [ [
                    'Date',     'CR ID',               'eISBN',  'Title', 'Subtitle', 'Author',
                    'Retailer', 'CustomerCountryCode', 'Format', 'SRP',   'Discount', 'Amt Owed'
                ]
            ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 5,
            lines   => [ [
                    'Date', 'CR ID', 'eISBN', 'Title', 'Subtitle', 'Author', 'Retailer', 'CustomerCountryCode', 'Format', 'SRPNative',
                    'SRPUSD', 'Discount', 'Amt Owed Native',
                    'Amt Owed USD'
                ],
            ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 6,
            lines   => [ [
                    'Date', 'CR ID', 'TransactionID', 'eISBN', 'Title', 'Subtitle', 'Edition', 'Author', 'Publisher', 'Retailer', 'Format',
                    'Srp USD', 'Amt Due To Publisher USD'
                ],
            ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 7,
            lines   => [ [
                    'Date', 'CR ID', 'eISBN', 'Title', 'Subtitle', 'Author', 'Publisher', 'Retailer', 'CustomerCountryCode', 'Format',
                    'SRPNative', 'SRPUSD', 'Discount', 'Amt Owed Native',
                    'Amt Owed USD'
                ],
            ],
        },

        # OverDrive (BISG v4)
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 8,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Report period from',
                    'Report period to',
                    'Report date',
                    'Reporting currency',
                    'Line item ID#',
                    'Ship-to country',
                    'Ship-to state or province',
                    'Ship-to county',
                    'Ship-to city',
                    'Ship-to district',
                    'Ship-to ZIP or postal code',
                    'Ship-to location ID# type',
                    'Ship-to location ID#',
                    'Bill-to state or province',
                    'Bill-to county',
                    'Bill-to city',
                    'Bill-to district',
                    'Bill-to ZIP or postal code',
                    'Bill-to location ID# type',
                    'Bill-to location ID#',
                    'Bill-to tax registration number',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Additional reference type',
                    'Additional reference ID#',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Quantity sold',
                    'Unit selling price',
                    'Agent\'s commission percentage',
                    'Fee type\(s\)',
                    'Total fee amount',
                    'Currency',
                    'Sales value',
                    'Good \/ service classification',
                    'US State Sales Tax tax rate',
                    'US State Sales Tax taxable amount',
                    'US State Sales Tax tax amount',
                    'US County Sales Tax tax rate',
                    'US County Sales Tax taxable amount',
                    'US County Sales Tax tax amount',
                    'US City Sales Tax tax rate',
                    'US City Sales Tax taxable amount',
                    'US City Sales Tax tax amount',
                    'US District Sales Tax tax rate',
                    'US District Sales Tax taxable amount',
                    'US District Sales Tax tax amount',
                    'Non-US Sales Tax tax type 1',
                    'Non-US Sales Tax tax rate 1',
                    'Non-US Sales Tax taxable amount 1',
                    'Non-US Sales Tax tax amount 1',
                    'Non-US Sales Tax tax type 2',
                    'Non-US Sales Tax tax rate 2',
                    'Non-US Sales Tax taxable amount 2',
                    'Non-US Sales Tax tax amount 2',
                    'Non-US Sales Tax tax type 3',
                    'Non-US Sales Tax tax rate 3',
                    'Non-US Sales Tax taxable amount 3',
                    'Non-US Sales Tax tax amount 3',
                    'Total tax collected',
                    'Total number of Line items',
                    'Total sales value for all lines',
                    'Total US State Sales Tax tax amount',
                    'Total US County Sales Tax tax amount',
                    'Total US City Sales Tax tax amount',
                    'Total US District Sales Tax tax amount',
                    'Total Non-US Sales Tax tax amount 1',
                    'Total Non-US Sales Tax tax amount 2',
                    'Total Non-US Sales Tax tax amount 3',
                    'Total tax collected, all lines',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Sales tax report type',
                    '^$'
                ],
            ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 9,
            lines   => [ [
                    'CRID',               'Title',         'Retailer',       'FormatType', 'ISBN', 'SRPUSD',
                    'PublisherCreditUSD', 'TransactionID', 'AdjustmentDate', '^$'
                ],
            ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 10,
            lines   => [ [
                    'CRID', 'Title', 'Retailer', 'FormatType', 'ISBN', 'SRPUSD', 'SRPNative', 'PublisherCreditUSD',
                    'PublisherCreditNative', 'TransactionID', 'AdjustmentDate', '^$'
                ],
            ],
        },

        # OverDrive, version 11
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 11,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade / sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade / sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned / refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of line items',
                    'Total gross sold quantity',
                    'Total returned / refunded quantity',
                    'Total Net sold quantity',
                    'Total Non-sale quantity',
                    'Total gross sold value',
                    'Total returned / refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    '^$'
                ],
            ],
        },

        # OverDrive, special HBG recon edition
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 12,
            sheet   => 'any',
            lines   => [ [
                    'Date', 'DownloadID', 'CR ID', 'TransactionID', 'eISBN', 'Title', 'Subtitle', 'Edition', 'Author', 'Publisher',
                    'Retailer', 'Format', 'CustomerCountry', 'Srp USD',
                    'Amt Due To Publisher USD',
                    'Corrected Amt Due To Pub', '^$'
                ],
            ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 13,
            sheet   => 'any',
            lines   => [ [
                    'Publisher', 'Date',      'OverDrive ID', 'Sales channel', 'ISBN',           'Title',
                    'Subtitle',  'Author',    'Imprint',      'Retailer',      'State',          'Country of sale',
                    'Format',    'SRP \w{3}', 'Quantity',     'Discount',      'Amt owed \w{3}', '^$'
                ],
            ],
        },

        # OverDrive
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 14,
            sheet   => 'any',
            lines   => [ [
                    'Publisher', 'Date',                  'OverDrive ID',   'Sales channel',
                    'ISBN',      'Title',                 'Subtitle',       'Author',
                    'Imprint',   'Retailer',              'State',          'Country of sale',
                    'Format',    'SRP native \w{3}',      'SRP \w{3}',      'Quantity',
                    'Discount',  'Amt owed native \w{3}', 'Amt owed \w{3}', '^$'
                ],
            ],
        },

        # OverDrive, Version 15, FB12617
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 15,
            sheet   => 'any',
            lines   => [ [
                    'Publisher', 'Date',             'OverDrive ID',          'Sales channel',
                    'ISBN',      'Title',            'Subtitle',              'Author',
                    'Imprint',   'Retailer',         'State',                 'Country of sale',
                    'Format',    'SRP native \w{3}', 'SRP \w{3}',             'Quantity',
                    'Preorder',  'Discount',         'Amt owed native \w{3}', 'Amt owed \w{3}',
                    '^$'
                ],
            ],
        },

        # OverDrive, Version 16, FB12615
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 16,
            sheet   => 'any',
            lines   => [ [
                    'Publisher', 'Date',      'OverDrive ID', 'Sales channel', 'ISBN',     'Title',
                    'Subtitle',  'Author',    'Imprint',      'Retailer',      'State',    'Country of sale',
                    'Format',    'SRP \w{3}', 'Quantity',     'Preorder',      'Discount', 'Amt owed \w{3}',
                    '^$'
                ],
            ],
        },

        # OverDrive Version 17 (RSD-2818)
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 17,
            sheet   => 'any',
            lines   => [ [
                    'Publisher',
                    'Date',
                    'OverDrive ID',
                    'ISBN',
                    'Format',
                    'Other format ID',
                    'Title',
                    'Subtitle',
                    'Author',
                    'Series',
                    'Imprint',
                    'State',
                    'Country of sale',
                    'SRP \w{3}',
                    'Sale price',
                    'Sale price currency',
                    'Other format SRP',
                    'Quantity',
                    'Discount',
                    'Discounted',
                    'Preorder',
                    'On sale date',
                    'Sales model',
                    'Retailer',
                    'Sales channel',
                    'Amt owed \w{3}',
                    '^$'
                ] ],
        },

        # OverDrive Version 18
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 18,
            sheet   => 'any',
            lines   => [ [
                    'Date',
                    'OverDrive ID',
                    'Sales channel',
                    'ISBN',
                    'Title',
                    'Subtitle',
                    'Author',
                    'Imprint',
                    'Retailer',
                    'State',
                    'Country of sale',
                    'Format',
                    'SRP native \w{3}',
                    'SRP \w{3}',
                    'Quantity',
                    'Discount',
                    'Amt owed native \w{3}',
                    'Amt owed \w{3}',
                    '^$'
                ] ],
        },

        # OverDrive Version 19 (RSD-10341)
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 19,
            sheet   => 'any',
            lines   => [ [
                    'Date',
                    'OverDrive ID',
                    'ISBN',
                    'Title',
                    'Subtitle',
                    'Author',
                    'Retailer',
                    'Country of sale',
                    'Format',
                    'SRP native \w{3}',
                    'SRP \w{3}',
                    'Discount',
                    'Amt owed native \w{3}',
                    'Amt owed \w{3}',
                    '^$'
                ] ],
        },

        # MobiPocket
        {
            service => BookPub::Tracker::Service::MOBIPOCKET,
            version => 1,
            lines   => [ [ 'Book Title', 'EBBASEID', 'ISBN', 'NbDownloads', 'WholesalePrice', 'Sales', 'Currency' ], ],
        },

        # Audible v5
        {
            service => BookPub::Tracker::Service::AUDIBLE,
            version => 5,
            sheet   => 1,
            lines   => [
                ( [undef] ) x 2,
                [
                    'Royalty Earner',
                    'Marketplace Name',
                    'Parent Product Id',
                    'Name',
                    'Author',
                    'Digital Isbn',
                    '_DLP_',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid'
                ],
            ],
        },

        # Audible v3
        {
            service => BookPub::Tracker::Service::AUDIBLE,
            version => 3,
            sheet   => 1,
            lines   => [
                ( [undef] ) x 2,
                [
                    'Order Type',
                    'Royalty Earner',
                    'Marketplace Name',
                    'Parent Product Id',
                    'Name',
                    'Author',
                    'Digital Isbn',
                    'Dlp',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid'
                ],
            ],
        },

        # Audiobook v4
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 4,
            match_on_any_row => 1,
            lines            => [ [
                    'Royalty Earner',
                    'Royalty Contract Description',
                    'Marketplace Name',
                    'Parent Product Id',
                    'Name',
                    'Author',
                    'Digital_Isbn',
                    'Quantity',
                    'Net Sales',
                    'Royalty Earned',
                    'Quantity',
                    'Net Sales',
                    'Royalty Earned',
                    'Quantity',
                    'Net Sales',
                    'Royalty Earned',
                    'Quantity',
                    'Net Sales',
                    'Royalty Earned',
                    '^$'
                ]
            ],
        },

        # Audiobook v4 (header names changed, but everything is still in the same place)
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 4,
            match_on_any_row => 1,
            lines            => [ [
                    'Royalty Earner',
                    'Royalty Rate',
                    'Marketplace',
                    'Parent Product Id',
                    'Title',
                    'Author',
                    'Digital_Isbn',
                    'A la Carte: Quantity',
                    'A la Carte: Net Sales',
                    'A la Carte: Royalty Earned',
                    'Audible Listener: Cash Quantity',
                    'Audible Listener: Cash Net Sales',
                    'Audible Listener: Cash Royalty Earned',
                    'Audible Listener: Credit Quantity',
                    'Audible Listener: Credit Net Sales',
                    'Audible Listener: Credit Royalty Earned',
                    'Grand Total: Quantity',
                    'Grand Total: Net Sales',
                    'Grand Total: Royalty Earned',
                    '^$'
                ]
            ],
        },

        # Audiobook v6
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 6,
            match_on_any_row => 1,
            lines            => [ [
                    'Royalty Earner',
                    'Royalty Rate',
                    'Marketplace',
                    'Parent Product Id',
                    'Title',
                    'Author',
                    'Digital_Isbn',
                    'A la Carte: Quantity',
                    'A la Carte: Net Sales',
                    'A la Carte: Royalty Earned',
                    'Audible Listener: Cash Quantity',
                    'Audible Listener: Cash Net Sales',
                    'Audible Listener: Cash Royalty Earned',
                    'Audible Listener: Credit Quantity',
                    'Audible Listener: Credit Net Sales',
                    'Audible Listener: Credit Royalty Earned',
                    'Grand Total: Quantity',
                    'Grand Total: Net Sales',
                    'Grand Total: Royalty Earned',
                    'Period:',
                    '^$'
                ]
            ],
        },

        # Audible v8, tabs (WS4V Sales details, Non-WS4V Sales details)
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 8,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Royalty Earner',
                    'Marketplace Name',
                    'Parent Product ID',
                    'Title',
                    'Author',
                    'Digital Isbn',
                    'DLP',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    '^$'
                ]
            ],
        },

        # Audible v8, tab (Promotional Details)
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 8,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Royalty Earner',
                    'Marketplace Name',
                    'Parent Product ID',
                    'Title',
                    'Author',
                    'Digital Isbn',
                    'DLP',
                    'Order Placed Date',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    '^$'
                ]
            ],
        },

        # Audible v7 (formerly Audiobook)
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 7,
            match_on_any_row => 1,
            lines            => [ [
                    undef,          'Marketplace',     'Product ID',     'Title',     'Author',         undef,
                    'Digital ISBN', 'Royalty Share %', 'Quantity',       'Net Sales', 'Royalty Earned', 'Quantity',
                    'Net Sales',    'Royalty Earned',  'Quantity',       'Net Sales', 'Royalty Earned', undef,
                    'Quantity',     'Net Sales',       'Royalty Earned', '^$'
                ]
            ],
        },

        # Audible v9 (formerly Audiobook), similar to 7 with a slight field adjustment
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 9,
            match_on_any_row => 1,
            lines            => [ [
                    undef,          'Marketplace',     'Product ID',     'Title',          'Author',    undef,
                    'Digital ISBN', 'Royalty Share %', 'Offer',          'Quantity',       'Net Sales', 'Royalty Earned',
                    'Quantity',     'Net Sales',       'Royalty Earned', 'Quantity',       'Net Sales', 'Royalty Earned',
                    undef,          'Quantity',        'Net Sales',      'Royalty Earned', '^$'
                ]
            ],
        },

        # Audible v10 (Hay House) RSD-730
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 10,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    undef,
                    'Parent Product ID',
                    'Title',
                    'Author',
                    'ISBN',
                    'Provider Product Id',
                    'Marketplace',
                    'Offer',
                    'Royalty Rate',
                    'ALC Qty',
                    'ALC Net Sales',
                    'ALC Royalties',
                    'AL Qty',
                    'AL Net Sales',
                    'AL Royalties',
                    'ALOP Qty',
                    'ALOP Net Sales',
                    'ALOP Royalties',
                    'Total Units',
                    'Total Net Sales',
                    'Total Royalties',
                    '^$'
                ]
            ],
        },

        # Audible v11
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 11,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Royalty Earner',
                    'Marketplace Name',
                    'Parent Product ID',
                    'Title',
                    'Author',
                    'Digital Isbn',
                    'DLP',
                    'DLP Currency',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    'Quantity',
                    'Royalty Paid',
                    '^$'
                ]
            ],
        },

        # Audible v12
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 12,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Royalty Earner',
                    'Product ID',
                    'Author',
                    'Title',
                    'Digital ISBN',
                    'Provider Product ID',
                    'Transaction Type',
                    'Marketplace',
                    'Purchase Type',
                    'Offer',
                    'Royalty Rule',
                    'Additional Rule Details',
                    'Unit Price Basis',
                    'Basis Currency',
                    'Target Currency',
                    'FX Rate',
                    'Royalty Rate',
                    'Payee Split',
                    'Net Units',
                    'Net Royalties Earned',
                    '^$'
                ]
            ],
        },

        # Audible v13
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 13,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Royalty Earner',
                    'Parent Product ID',
                    'Title',
                    'Author',
                    'Digital ISBN',
                    '3rd Party ID',
                    'Royalty Rate',
                    'Marketplace',
                    'Offer',
                    'ALC Qty',
                    'ALC Net Sales',
                    'ALC Royalty',
                    'AL Qty',
                    'AL Net Sales',
                    'AL Royalty',
                    'ALOP Qty',
                    'ALOP Net Sales',
                    'ALOP Royalty',
                    'Unit Sales',
                    'Net Sales \(DLP\/ALC\)',
                    'Net Earnings',
                    '^$'
                ]
            ],
        },

        # Audible v14 (The file name must not contain the ACX part, otherwise see ACX importer v5)
        # Tab 'Sales Detail (Net Sales)'
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 14,
            match_on_any_row => 1,
            file_name        => '[ _.][^ACX][ _.]',
            sheet            => 'any',
            lines            => [ [
                    'Royalty Earner',
                    'Product ID',
                    'Author',
                    'Title',
                    'Digital ISBN',
                    'Provider Product ID',
                    'Transaction Type',
                    'Marketplace',
                    'Purchase Type',
                    'Offer',
                    'Royalty Rule',
                    'Additional Rule Details',
                    'Currency',
                    'Royalty Rate',
                    'Payee Split',
                    'Net Units',
                    'Net Sales',
                    'Net Royalties Earned',
                    '^$'
                ]
            ],
        },

        # Audible v14 (The file name must not contain the ACX part, otherwise see ACX importer v5)
        # Tab 'On-Demand Detail'
        {
            service          => BookPub::Tracker::Service::AUDIBLE,
            version          => 14,
            match_on_any_row => 1,
            file_name        => '[ _.][^ACX][ _.]',
            sheet            => 'any',
            lines            => [ [
                    'Royalty Earner',
                    'Product ID',
                    'Author',
                    'Title',
                    'Digital ISBN',
                    'Provider Product ID',
                    'Product Runtime \(minutes\)',
                    'Marketplace',
                    'Purchase Type',
                    'Pool',
                    'Royalty Rule',
                    'Value Per Minute \(VPM\)',
                    'Currency',
                    'Royalty Rate',
                    'Payee Split',
                    'Listening Minutes',
                    'Net Royalties Earned',
                    '^$'
                ]
            ],
        },

        # Audiobook v1 (since renamed Premier Audiobooks)
        {
            service => BookPub::Tracker::Service::PREMIERAUDIOBOOKS,
            version => 1,
            lines   => [ [undef], [ 'Date', 'Name', 'Order num', 'ISBN', 'Parent ISBN', 'Title', 'Pub', 'Royalty %', 'Price', 'Royalty' ] ],
        },

        # Barnes and Noble
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 1,
            lines   => [ [
                    'Invoice Number',
                    'PO Number',
                    'PO Item',
                    'PO Date',
                    'EAN',
                    'Quantity',
                    'Item Cost',
                    'PO Cost',
                    'Retail Price',
                    'San Number',
                    'Mv Vendor Number',
                    'Mv Vendor Name',
                    'Invoice Date',
                    'Merchant ID',
                    'Author',
                    'Title',
                    'Net Revenue Per EAN',
                    'Order Type',
                    undef
                ],
            ],
        },

        # Barnes and Noble
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 2,
            lines   => [ [
                    'Invoice Number',
                    'PO Number',
                    'Date Of eGift',
                    'PO Date',
                    'EAN',
                    'Quantity',
                    'Item Cost',
                    'PO Cost',
                    'Retail Price',
                    'San Number',
                    'Mv Vendor Number',
                    'Mv Vendor Name',
                    'Invoice Date',
                    'Merchant ID',
                    'Author',
                    'Title',
                    'Net Revenue Per EAN',
                    'Order Type',
                    undef
                ],
            ],
        },

        # Barnes and Noble
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 3,
            lines   => [ [
                    'Ean',
                    'Vendor Number',
                    'Publisher',
                    'Book Title',
                    'Author',
                    'Invoice Date',
                    'Po Date',
                    'Date of eGift',
                    'Invoice Qty',
                    'Return Qty',
                    'Item Cost',
                    'Total Cost',
                    'List Price',
                    'Customer Price',
                    'Document Type',
                    'Format Code',
                    '^$'
                ],
            ],
        },

        # Barnes and Noble
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 4,
            lines   => [ [
                    'Ean',
                    'Vendor Number',
                    'Publisher',
                    'Book Title',
                    'Author',
                    'Invoice Date',
                    'Po Date',
                    'Po Number',
                    'Date of eGift',
                    'Invoice Qty',
                    'Return Qty',
                    'Item Cost',
                    'List Price',
                    'Total Cost',
                    'Customer Price',
                    'Document Type',
                    'Format Code',
                    '^$'
                ],
            ],
        },

        # Barnes and Noble
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 5,
            lines   => [ [
                    'Invoice Number',
                    'PO Number',
                    'Date Of eGift',
                    'PO Date',
                    'EAN',
                    'Quantity',
                    'Item Cost',
                    'Total Cost',
                    'Retail Price',
                    'San Number',
                    'Mv Vendor Number',
                    'Mv Vendor Name',
                    'Invoice Date',
                    'Merchant ID',
                    'Author',
                    'Title',
                    'Net Revenue Per EAN',
                    'Order Type',
                    undef
                ],
            ],
        },

        # Barnes and Noble (iSupplier)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 6,
            lines   => [ [
                    'Invoice Number',
                    'Vendor Number',
                    'EAN',
                    'Title',
                    'Author',
                    'Publisher Name',
                    'Category',
                    'Format Code',
                    'Order Type',
                    'PO Date',
                    'Date Of eGift',
                    'PO Number',
                    'PO Country Code',
                    'A/P Invoice',
                    'A/P Invoice Date',
                    'Sale Currency',
                    'DLP Sale Curency VAT Exclusive',
                    'Net Revenue Per EAN',
                    'VAT Amount',
                    'Consumer Unit Price VAT Inclusive',
                    'Units Sold\/Refund',
                    'Royalty %',
                    'Unit Cost Sale Currency',
                    'Total Cost Sale Currency',
                    'Payment Currency',
                    'Unit Cost Payment Currency',
                    'Total Cost Payment Currency',
                    'Currency Of List Price',
                    'Invoice Date',
                    '^$'
                ],
            ],
        },

        # Barnes and Noble (Monthly)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 7,
            lines   => [ [
                    'Vendor Number',
                    'Ean',
                    'Title',
                    'Author',
                    'Publisher Name',
                    'Category',
                    'Format',
                    'Order Type',
                    'Po Date',
                    'Date Of eGift',
                    'Po Number',
                    'PO Country Code',
                    'AP Invoice',
                    'AP Invoice Date',
                    'Sale Currency',
                    'DLP Sale Currency VAT Exclusive',
                    'Consumer Unit Price VA Exclusive|Consumer Unit Price VAT Exclusive',
                    'VAT Amount',
                    'Consumer Unit Price,VAT Inclusive',
                    'Units Sold',
                    'Units Returned',
                    'Royalty %|Royaly %',
                    'Unit Cost Sale Currency',
                    'Total Cost Sale Currency',
                    'Payment Currency',
                    'Unit Cost Payment Currency',
                    'Total Cost Payment Currency|Total Cost Payment Curency',
                    'Currency Of List Price|Curency Of List Price',
                    'Invoice Date',
                    '^$'
                ],
            ],
        },

        # Barnes and Noble (Nook App Store)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 8,
            lines   => [ [ 'Date Of Sale', 'Date of eGift', 'Application', 'Net Vendor Revenue', 'Net Units Sold', '^$' ], ],
        },

        # Barnes and Noble (iSupplier)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 9,
            lines   => [ [
                    'Invoice Number',
                    'Vendor Number',
                    'EAN',
                    'Title',
                    'Author',
                    'Publisher Name',
                    'Category',
                    'Format Code',
                    'Order Type',
                    'PO Date',
                    'Date Of eGift',
                    'PO Number',
                    'PO Country Code',
                    'A\/P Invoice',
                    'A\/P Invoice Date',
                    'Sale Currency',
                    'DLP Sale Curency Tax Exclusive',
                    'Consume Unit Price,\s?Tax Exlusive',
                    'Tax Amount',
                    'Consumer Unit Price Tax Inclusive',
                    'Units Sold\/Refund',
                    'Royalty %',
                    'Unit Cost Sale Currency',
                    'Total Cost Sale Currency',
                    'Payment Currency',
                    'Unit Cost Payment Currency',
                    'Total Cost Payment Currency',
                    'Currency Of List Price',
                    'Invoice Date',
                    'City',
                    'State\/Region',
                    'Postal Code',
                    '^$'
                ],
            ],
        },

        # Barnes and Noble (Monthly)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 10,
            lines   => [ [
                    'Vendor Number',
                    'Ean',
                    'Title',
                    'Author',
                    'Publisher Name',
                    'Category',
                    'Format',
                    'Order Type',
                    'Po Date',
                    'Date Of eGift',
                    'Po Number',
                    'PO Country Code',
                    'AP Invoice',
                    'AP Invoice Date',
                    'Sale Currency',
                    'DLP Sale Currency Tax Exclusive',
                    'Consumer Unit Price Tax Exclusive',
                    'Tax Amount',
                    'Consumer Unit Price,Tax Inclusive',
                    'Units Sold',
                    'Units Returned',
                    'Royalty %|Royaly %',
                    'Unit Cost Sale Currency',
                    'Total Cost Sale Currency',
                    'Payment Currency',
                    'Unit Cost Payment Currency',
                    'Total Cost Payment Currency|Total Cost Payment Curency',
                    'Currency Of List Price|Curency Of List Price',
                    'Invoice Date',
                    'City',
                    'State\/Region',
                    'Postal Code',
                    '^$'
                ],
            ],
        },

        # Barnes and Noble (Monthly), same as version 10, different header mappings
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 11,
            lines   => [ [
                    'Vendor Number',
                    'EAN',
                    'Title',
                    'Author',
                    'Publisher Name',
                    'Category',
                    'Format',
                    'Order Type',
                    'PO Date',
                    'eGift Date',
                    'PO Number',
                    'PO Country Code',
                    'A\/P Invoice',
                    'A\/P Invoice Date',
                    'Sale Currency',
                    'DLP, Sale Currency, Tax Exclusive.*',
                    'Consumer Unit Price, Tax Exclusive.*',
                    'Tax Amount.*',
                    'Consumer Unit Price, Tax Inclusive.*',
                    'Units Sold.*',
                    'Units Returned.*',
                    'Royaly %.*|Royalty %.*',
                    'Unit Cost, Sale Currency',
                    'Total Cost, Sale Currency',
                    'Payment Currency',
                    'Unit Cost, Payment Currency.*',
                    'Total Cost, Payment Currency.*',
                    'Invoice Date',
                    'City',
                    'State',
                    'Post Code',
                    'Country',
                    '^$'
                ],
            ],
        },

        # Barnes and Noble (Monthly), v12
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 12,
            lines   => [ [
                    'Vendor Number',
                    'Ean',
                    'Title',
                    'Author',
                    'Publisher Name',
                    'Category',
                    'Format',
                    'Order Type',
                    'Po Date',
                    'Date Of eGift',
                    'Po Number',
                    'PO Country Code',
                    'AP Invoice',
                    'AP Invoice Date',
                    'Sale Currency',
                    'DLP Sale Currency Tax Exclusive',
                    'Consumer Unit Price Tax Exclusive',
                    'Tax Amount',
                    'Consumer Unit Price,.*Tax Inclusive',
                    'Units Sold',
                    'Units Returned',
                    'Royaly %|Royalty %',
                    'Unit Cost Sale Currency',
                    'Total Cost Sale Currency',
                    'Payment Currency',
                    'Unit Cost Payment Currency',
                    'Total Cost Payment Curency|Total Cost Payment Currency',
                    'Invoice Date',
                    'City',
                    'State\/Region',
                    'Postal Code',
                    'Season Name',
                    'Season Number',
                    'Episode Number',
                    'Studio ID',
                    '^$'
                ],
            ],
        },

        # Barnes and Noble (Monthly), version 13
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE,
            version => 13,
            lines   => [ [
                    'Invoice Number',
                    'Vendor Number',
                    'EAN',
                    'Title',
                    'Author',
                    'Publisher Name',
                    'Category',
                    'Format Code',
                    'Order Type',
                    'PO Date',
                    'Date Of eGift',
                    'PO Number',
                    'PO Country Code',
                    'A\/P Invoice',
                    'A\/P Invoice Date',
                    'Sale Currency',
                    'DLP Sale Curency Tax Exclusive',
                    'Consume Unit Price,.*Tax Exlusive',
                    'Tax Amount',
                    'Consumer Unit Price Tax Inclusive',
                    'Units Sold\/Refund',
                    'Royalty %',
                    'Unit Cost Sale Currency',
                    'Total Cost Sale Currency',
                    'Payment Currency',
                    'Unit Cost Payment Currency',
                    'Total Cost Payment Currency',
                    'Invoice Date',
                    'City',
                    'State\/Region',
                    'Postal Code',
                    'Season Name',
                    'Season Number',
                    'Episode Number',
                    'Studio ID',
                    '^$'
                ],
            ],
        },

        # PlayAway
        {
            service => BookPub::Tracker::Service::PLAY_AWAY,
            version => 1,
            lines   => [ ( [undef] ) x 5, [ 'Item', 'Item Desc.', 'MTR: Title', 'MTR: ISBN-13 Library', 'Qty. Sold', 'Total Revenue' ], ],
        },

        # PlayAway v2
        {
            service => BookPub::Tracker::Service::PLAY_AWAY,
            version => 2,
            lines   => [ [
                    'Publisher',
                    'Title',
                    'Category',
                    'ISBN-13',
                    'Playaway Gross Qnty',
                    'Playaway Gross Amt',
                    'Playaway Returns Qnty',
                    'Playaway Returns Amt',
                    'Net Qnty',
                    'Net Sales'
                ],
            ],
        },

        # BBC Audio - multi-tab with phys
        {
            service          => BookPub::Tracker::Service::BBC_AUDIO,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    'ISBN_NoDashes', 'ProdCode', 'Title',    'Product_Type', 'Activity Date', 'Beg Inv',
                    'End Inv',       'Promos',   'Received', 'Returns',      'Sales',         'Sales Value',
                    'Total Cost',    'Price_1'
                ],
            ],
        },

        # BBC Audio - multi-tab with dig
        {
            service => BookPub::Tracker::Service::BBC_AUDIO,
            version => 3,
            sheet   => 'any',
            lines   => [
                [undef],
                [undef],
                [
                    'Title',         'ProdCode', 'ISBN_NoDashes', 'Product_Type', 'Audiogo',         'Pub_Date',
                    'Num_cs_cd_mp3', 'Price_1',  'Sales Value',   'Return Value', 'Net Sales Value', 'Net Units',
                    undef,           undef,      undef,           undef,          'HCT Sales'
                ],
            ],
        },

        # BBC Audio - multi-tab with dig
        {
            service => BookPub::Tracker::Service::BBC_AUDIO,
            version => 4,
            sheet   => 'any',
            lines   => [
                [undef],
                [undef],
                [
                    'Title',   'ProdCode',        'ISBN_NoDashes', 'Product_Type', 'Pub_Date', 'Num_cs_cd_mp3',
                    'Price_1', 'Net Sales Value', 'Net Units',     undef,          'HCT Sales'
                ],
            ],
        },

        # BBC Audio - multi-tab with dig
        {
            service => BookPub::Tracker::Service::BBC_AUDIO,
            version => 5,
            sheet   => 'any',
            lines   => [
                [undef],
                [undef],
                [
                    'Title',                 'ProdCode',      'ISBN_NoDashes',       'Product_Type',
                    'Pub_Date',              'Num_cs_cd_mp3', 'Price_1',             'Net Sales Value',
                    'Net Units',             undef,           'Audiogo keeps',       'revised hct sales',
                    'Tslvus',                'notes',         'Playaway costs',      'Tslvus',
                    'Art\/asem',             'CDs',           'Box',                 'total inv costs',
                    'Art covers\/mastering', 'per unit cost', 'hct per unit profit', '^$'
                ],
            ],
        },

        # BBC Audio - multi-tab with dig
        {
            service => BookPub::Tracker::Service::BBC_AUDIO,
            version => 6,
            sheet   => 'any',
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Title',           'ProdCode',     'Imprint',            '# Discs',       '10-Digit ISBN', '13-Digit ISBN',
                    'Price_1',         'Product_Type', '',                   '',              '',              '',
                    'Net Sales Value', 'Net Units',    '% of Sales Due HCT', 'Cost per unit', 'Total Cost',    'Total due',
                    '^$'
                ],
            ],
        },

        # BBC Audio - multi-tab with dig
        {
            service => BookPub::Tracker::Service::BBC_AUDIO,
            version => 7,
            sheet   => 'any',
            lines   => [ [
                    'Title',
                    'ProdCode',
                    'ISBN_NoDashes',
                    'Price_1',
                    'Product_Type',
                    'Item Number',
                    'Valid Imprint',
                    'Sales Value',
                    'Sales Units',
                    'Return Value',
                    'Return Units',
                    'Net Sales Value',
                    'Net Units',
                    '% of Sales Due HCT',
                    '# of Discs',
                    'Cost Per Unit',
                    'Total Cost',
                    'Total Due',
                    '^$'
                ],
            ],
        },

        # BBC Audio - multi-tab with dig
        {
            service => BookPub::Tracker::Service::BBC_AUDIO,
            version => 8,
            sheet   => 'any',
            lines   => [ [
                    'Title',
                    'ProdCode',
                    'ISBN_NoDashes',
                    'Product_Type',
                    'Item Number',
                    'Imprint',
                    'Price_1',
                    'Sales Value',
                    'Sales Units',
                    'Return Value',
                    'Return Units',
                    'Net Sales Value',
                    'Net Units',
                    '% due HCT',
                    '^$'
                ]
            ]
        },

        # ScrollMotion
        {
            service => BookPub::Tracker::Service::SCROLL_MOTION,
            version => 1,
            lines   => [ [undef], [ undef, 'Title', 'Units|Quantity', 'List Price', 'Pub %', 'Pub Subtotal', 'Currency', 'Format' ], ],
        },

        # ScrollMotion - essentially same as above, but currency is now country
        {
            service => BookPub::Tracker::Service::SCROLL_MOTION,
            version => 2,
            lines   => [ [undef], [ 'ISBN', 'Title', 'Quantity', 'List Price', 'Pub %', 'Pub Subtotal', 'Country', 'Format', '^$' ], ],
        },

        # ScrollMotion - essentially version 2 with a currency column tacked onto the end.
        {
            service => BookPub::Tracker::Service::SCROLL_MOTION,
            version => 4,
            lines =>
              [ [undef], [ 'ISBN', 'Title', 'Quantity', 'List Price', 'Pub %', 'Pub Subtotal', 'Country', 'Format', 'Currency', '^$' ], ],
        },

        # LSI eBook
        {
            service => BookPub::Tracker::Service::LSI,
            version => 3,
            lines   => [ [
                    'sku',                     'title',                    'author',                  'binding_type',
                    'MTD_avg_list_price',      'MTD_avg_discount_%',       'MTD_avg_wholesale_price', 'channel',
                    'MTD_Quantity',            'MTD_extended_list',        'MTD_extended_wholesale',  'MTD_extended_discount',
                    'MTD_unit_pub_comp',       'MTD_pub_comp',             'isbn',                    'parent_isbn',
                    'MTD_gross_pub_comp',      'MTD_extended_adjustments', 'publisher_number',        'publisher_name',
                    'page_count',              'book_type_id',             'list_price',              'wholesale_discount_%',
                    'YTD_quantity',            'YTD_avg_list_price',       'YTD_extended_list_price', 'YTD_avg_discount_%',
                    'YTD_avg_wholesale_price', 'YTD_extended_wholesale',   'YTD_gross_pub_comp',      'YTD_extended_adjustments',
                    'YTD_pub_comp',            'reporting_currency_code',  'period_name',             'publisher_imprint'
                ],
            ],
        },

        # LSI eBook (BISG)
        {
            service => BookPub::Tracker::Service::LSI,
            version => 4,
            lines   => [ [
                    'ReportID',                    'ReportDateTime',
                    'MessageFunction',             'SalesReportType',
                    'ReportPeriodFrom',            'ReportPeriodTo',
                    'ReportDate',                  'ReportingPriceType',
                    'ReportingCurrency',           'ClassOfTrade\/Sale',
                    'SalesTerritory',              'LineItemID#',
                    'SubAgentID#',                 'SubAgentName',
                    'TransactionDateTime',         'AgentsTransactionID#',
                    'LineItemReferenceType',       'LineItemReferenceID#',
                    'LineItemReferenceDateTime',   'MainProductID#Type',
                    'MainProductID#',              'AlternativeProductID#Type',
                    'AlternativeProductID#',       'ProductTitle',
                    'ProductAuthor\(s\)',          'ProductDescription',
                    'PublisherID#',                'PublisherName',
                    'ImprintName',                 'ProductFormat',
                    'DeviceType',                  'GrossSoldQuantity',
                    'ReturnedRefundedQuantity',    'NetSoldQuantity',
                    'NonSaleQuantity',             'NonSaleDisposalType',
                    'ClassOfTradeSale',            'SalesTerritory',
                    'UnitPrice',                   'PriceType',
                    'PriceCurrency',               'CommissionDiscountPercentage',
                    'GrossSoldValue',              'ReturnedRefundedValue',
                    'NetValueBeforeFees',          'FeeType1',
                    'FeeAmount1',                  'FeeSource1',
                    'FeeType2',                    'FeeAmount2',
                    'FeeSource2',                  'FeeType3',
                    'FeeAmount3',                  'FeeSource3',
                    'ProceedsOfSaleDuePublisher',  'TotalNumberOfLineItems',
                    'TotalGrossSoldQuantity',      'TotalReturnedRefundedQuantity',
                    'TotalNetSoldQuantity',        'TotalNonSaleQuantity',
                    'TotalGrossSoldValue',         'TotalReturnedRefundedValue',
                    'TotalNetSoldValueBeforeFees', 'TotalFeesOfAllTypes',
                    'TotalProceedsDueToPublisher'
                ],
            ],
        },

        # LSI pod
        {
            service => BookPub::Tracker::Service::LSI,
            version => 2,
            lines   => [ [
                    'publisher_number',          'publisher_name',            'isbn',                     'sku',
                    'parent_isbn',               'title',                     'author',                   'page_count',
                    'binding_type',              'book_type_id',              'list_price',               'wholesale_discount_%',
                    'MTD_Quantity',              'MTD_avg_list_price',        'MTD_extended_list',        'MTD_avg_discount_%',
                    'MTD_extended_discount',     'MTD_avg_wholesale_price',   'MTD_extended_wholesale',   'MTD_avg_print_charge',
                    'MTD_extended_print_charge', 'MTD_gross_pub_comp',        'MTD_extended_adjustments', 'MTD_extended_recovery',
                    'MTD_pub_comp',              'YTD_quantity',              'YTD_avg_list_price',       'YTD_extended_list_price',
                    'YTD_avg_discount_%',        'YTD_extended_discount',     'YTD_avg_wholesale_price',  'YTD_extended_wholesale',
                    'YTD_avg_print_charge',      'YTD_extended_print_charge', 'YTD_gross_pub_comp',       'YTD_extended_adjustments',
                    'YTD_extended_recovery',     'YTD_pub_comp',              'deferral_balance',         'reporting_currency_code',
                    'period_name',               'original_deferral_amount',  'MTD_return_quantity',      'MTD_return_wholesale',
                    'MTD_return_charge',         'MTD_return_total',          'YTD_return_quantity',      'YTD_return_wholesale',
                    'YTD_return_charge',         'YTD_return_total',          'MTD_net_quantity',         'MTD_net_wholesale',
                    'MTD_net_pub_comp',          'YTD_net_quantity',          'YTD_net_wholesale',        'YTD_net_pub_comp',
                    'returns_flag_value',        'nonreturnable_date',        'title_status_flag_value',  'cancelled_date',
                    'publisher_imprint'
                ],
            ],
        },

        # Ingram Digital LSI - v5 - Sage
        {
            service => BookPub::Tracker::Service::LSI,
            version => 5,
            lines   => [ [
                    'publisher_number',         'publisher_name',        'isbn',                   'VBID',
                    'title',                    'author',                'page_count',             'binding_type',
                    'book_type_id',             'price_list',            'units_sold',             'due_to_publisher',
                    'currency_code',            'period_name',           'publisher_imprint',      'customer_flexfield1',
                    'customer_flexfield2',      'customer_flexfield3',   'customer_flexfield4',    'customer_flexfield5',
                    'institution_bill_name',    'institution_bill_city', 'institution_bill_state', 'institution_bill_zip',
                    'institution_bill_country', '^$'
                ],
            ],
        },

        # Vearsa v2 (FBoD17387)
        {
            service => BookPub::Tracker::Service::VEARSA,
            version => 2,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    '^$'
                ],
                [
                    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, 'Vearsa', undef, '^$'
                ],
            ],
        },

        # TBS Direct (BISG)
        {
            service => BookPub::Tracker::Service::TBS_DIRECT,
            version => 1,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    '^$'
                ],
            ],
        },

        # eMusic
        {
            service          => BookPub::Tracker::Service::EMUSIC,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'eMusic Track ID',
                    'ISBN',
                    'Author',
                    'Narrator',
                    'Title',
                    'Gross Units',
                    'Credit Units',
                    'Net Units',
                    'Unit Rate',
                    'Total Due'
                ],
            ],
        },

        # SimplyAudio
        {
            service => BookPub::Tracker::Service::SIMPLY_AUDIO,
            version => 1,
            sheet   => 1,
            lines   => [
                [undef],
                [
                    'ISBN',
                    'Title',
                    'Total Downloads',
                    'List Price',
                    'Total',
                    'A la Carte Downloads',
                    'Discount',
                    'A la Carte Total',
                    'Club Downloads',
                    'Discount',
                    'Club Total'
                ],
            ],
        },

        # SimplyAudio v2
        {
            service => BookPub::Tracker::Service::SIMPLY_AUDIO,
            version => 2,
            sheet   => 'any',
            lines   => [ [undef], [ 'ISBN', 'Title', 'Downloads', 'List Price', 'Total', 'Club Downloads', 'Discount', 'Club Total' ] ],
        },

        # SimplyAudio v3
        {
            service => BookPub::Tracker::Service::SIMPLY_AUDIO,
            version => 3,
            sheet   => 'any',
            lines   => [ [undef], [ 'ISBN', 'Title', 'Total Downloads', 'List Price', 'Total', 'Discount', 'Club Total' ] ],
        },

        # SimplyAudio
        {
            service => BookPub::Tracker::Service::SIMPLY_AUDIO,
            version => 4,
            sheet   => 1,
            lines   => [
                [undef],
                [
                    'ISBN',
                    'Title',
                    'Club Downloads',
                    'List Price',
                    'Discount',
                    'Club Total',
                    'A La Carte Downloads',
                    'List Price',
                    'Discount',
                    'A La Carte Total'
                ],
            ],
        },

        # Audiobooks.com (previously SimplyAudio)
        {
            service => BookPub::Tracker::Service::SIMPLY_AUDIO,
            version => 5,
            sheet   => 1,
            lines   => [
                ['Title Data'],
                [
                    undef,
                    'ISBN',
                    'Title',
                    'Club Downloads',
                    'List Price',
                    'Club Discount',
                    'Club Total Payable',
                    'A la Carte Downloads',
                    'List Price',
                    'A la Carte Discount',
                    'A la Carte Total Payable'
                ],
            ],
        },

        # Audiobooks.com (RSD-3366)
        {
            service          => BookPub::Tracker::Service::SIMPLY_AUDIO,
            version          => 6,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [
                [
                    undef,
                    'Country',
                    'ISBN',
                    'Title',
                    'Club Downloads',
                    'List Price',
                    'Club Discount',
                    'Club Total Payable',
                    'A la Carte Downloads',
                    'List Price',
                    'A la Carte Discount',
                    'A la Carte Total Payable',
                    '^$'
                ],
            ],
        },

        # SpokenNetwork
        {
            service => BookPub::Tracker::Service::SPOKEN_NETWORK,
            version => 1,
            lines   => [ ( [undef] ) x 2, [ 'Date', 'Author', 'Ref', 'Title', 'ISBN', 'Commission', 'Qty', 'Discount', 'Rev', 'Country' ] ],
        },

        # Kobo v28
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 28,
            lines   => [ [
                    'Date',                                  'Country',
                    'StateProvince',                         'ZipPostalCode',
                    'Quantity',                              'eISBN',
                    'Author',                                'Title',
                    'Partners Name',                         'Selling Price',
                    'ListPrice',                             'COGS_Percent',
                    'Net_Due',                               'List Price Currency',
                    'Exchange rate to contractual currency', 'Net Due in Contractual currency',
                    'Contractual Currency'
                ],
            ],
        },

        # Kobo v27
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 27,
            lines   => [ [
                    'Date',                        'Partner',
                    'Country',                     'State',
                    'Zip Code',                    'Quantity',
                    'eISBN',                       'Author',
                    'Title',                       'Total Coupon',
                    'Transaction Currency',        'Publisher coupon cost',
                    'Fx Rate to Payable Currency', 'Coupon in payment currency',
                    'Payable Currency'
                ],
            ],
        },

        # Kobo v26
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 26,
            lines   => [ [
                    'Date',
                    'Billing Country',
                    'Billing Region',
                    'Postal Code',
                    'City',
                    'County',
                    'Qty',
                    'ISBN',
                    'Author',
                    'Title',
                    'Partners Name',
                    'List Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Sales tax',
                    'Tax state %',
                    'Tax state amount',
                    'Tax city %',
                    'Tax city amount',
                    'Tax County %',
                    'Tax county amount'
                ],
            ],
        },

        # Kobo v25
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 25,
            lines   => [ [
                    'Date',                            'Country',
                    'StateProvince',                   'ZipPostalCode',
                    'Quantity',                        'eISBN',
                    'Author',                          'Title',
                    'Parnters Name|Partners Name',     'ListPrice',
                    'COGS_Percent',                    'Net_Due',
                    'List Price Currency',             'Exchange rate to contractual currency',
                    'Net Due in Contractual currency', 'Contractual Currency'
                ],
            ],
        },

        # Kobo v24 (Promo file)
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 24,
            lines   => [ [
                    'Date',                       'Partner',
                    'Country',                    'State',
                    'Zip Code',                   'Quantity',
                    'eISBN',                      'Author',
                    'Title',                      'Selling Price',
                    'Total Coupon',               'Transaction Currency',
                    'Publisher coupon cost',      'Fx Rate to Payable Currency',
                    'Coupon in payment currency', 'Payable Currency'
                ],
            ],
        },

        # Kobo v23
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 23,
            lines   => [ [
                    'Date',
                    'Partner Name',
                    'Sale Country',
                    'Sale State',
                    'Sale Zip Code',
                    'Quantity',
                    'Returns',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'Publisher Price',
                    'List Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS in Payable Currency',
                    'Payable Currency',
                    'Reason'
                ],
            ],
        },

        # Kobo v33, same as v23, but with 'Total Units' field added
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 33,
            lines   => [ [
                    'Date',
                    'Partner Name',
                    'Sale Country',
                    'Sale State',
                    'Sale Zip Code',
                    'Quantity',
                    'Returns',
                    'Total Units',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'Publisher Price',
                    'List Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS in Payable Currency',
                    'Payable Currency',
                    'Reason'
                ],
            ],
        },

        # Kobo v29 - adds 'Selling Price' from version 23
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 29,
            lines   => [ [
                    'Date',
                    'Partner Name',
                    'Sale Country',
                    'Sale State',
                    'Sale Zip Code',
                    'Quantity',
                    'Returns',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'Publisher Price',
                    'List Price',
                    'Selling Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS in Payable Currency',
                    'Payable Currency',
                    'Reason'
                ],
            ],
        },

        # Kobo v30 - moves 'Selling Price', adds 'Sales Currency' rom version 29
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 30,
            lines   => [ [
                    'Date',
                    'Partner Name',
                    'Sale Country',
                    'Sale State',
                    'Sale Zip Code',
                    'Quantity',
                    'Returns',
                    'Publisher Name',
                    'Imprint',
                    'ISBN',
                    'Author',
                    'Title',
                    'Selling Price',
                    'Sales Currency',
                    'Publisher Price',
                    'List Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS in Payable Currency',
                    'Payable Currency',
                    'Reason'
                ],
            ],
        },

        # Kobo v31 - 'Total Units' column added
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 31,
            lines   => [ [
                    'Date',
                    'Partner Name',
                    'Sale Country',
                    'Sale State',
                    'Sale Zip Code',
                    'Quantity',
                    'Returns',
                    'Total Units',
                    'Publisher Name',
                    'Imprint',
                    'ISBN',
                    'Author',
                    'Title',
                    'Selling Price',
                    'Sales Currency',
                    'Publisher Price',
                    'List Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS in Payable Currency',
                    'Payable Currency',
                    'Reason'
                ],
            ],
        },

        # Kobo v32
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 32,
            lines   => [ [
                    'Date',
                    'Partner Name',
                    'Sale Country',
                    'Sale State',
                    'Sale Zip Code',
                    'Quantity',
                    'Returns',
                    'Total Units',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'Publisher Price',
                    'List Price',
                    'Selling Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS in Payable Currency',
                    'Payable Currency',
                    'Refund Reason',
                    '^$'
                ],
            ],
        },

        # Kobo v34
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 34,
            lines   => [ [
                    'Date',                                'Partner',
                    'Country',                             'State',
                    'Zip Code',                            'Quantity',
                    'eISBN',                               'Author',
                    'Title',                               'List Price',
                    'COGS Adjustment',                     'List Price Currency',
                    'COGS Adjustment',                     'Fx Rate to Payable Currency',
                    'COGS Adjustment in Payable Currency', 'Payable Currency',
                    'PurchaseID',                          'DealID',
                    'DealIndex',                           '^$'
                ],
            ],
        },

        # Kobo v21
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 21,
            lines   => [ [
                    'Date',                         'Partner',
                    'Country',                      'State',
                    'Zip Code',                     'Quantity',
                    'eISBN',                        'Author',
                    'Title',                        'List Price',
                    'COGS %',                       'Net Due \(COGS\)',
                    'List Price Currency',          'Foreign Exchange Rate to Contractual Currency',
                    'COGS in Contractual Currency', 'Contractual Currency',
                    'Reason'
                ],
            ],
        },

        # Kobo v21 (no Reason column, and Payable instead of contractual.  For our purposed, it's the same though)
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 21,
            lines   => [ [
                    'Date',                     'Partner',
                    'Country',                  'State',
                    'Zip Code',                 'Quantity',
                    'eISBN',                    'Author',
                    'Title',                    'List Price',
                    'COGS %',                   'Net Due \(COGS\)',
                    'List Price Currency',      'Foreign Exchange Rate to Payable Currency',
                    'COGS in Payable Currency', 'Payable Currency'
                ],
            ],
        },

        # Kobo v20
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 20,
            lines   => [ [
                    'Date',                         'Partner',
                    'Country',                      'State',
                    'Zip Code',                     'Quantity',
                    'eISBN',                        'Author',
                    'Title',                        'List Price',
                    'COGS %',                       'Net Due \(COGS\)',
                    'List Price Currency',          'Foreign Exchange Rate to Contractual Currency',
                    'COGS in Contractual Currency', 'Contractual Currency'
                ],
            ],
        },

        # Kobo v19
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 19,
            lines   => [ [
                    'Date', 'Country', 'Quantity', 'eISBN', 'Author', 'Title', 'List Price', 'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange Rate to Contractual Currency',
                    'COGS in Contractual Currency',
                    'Contractual Currency'
                ],
            ],
        },

        # Kobo v16
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 16,
            lines   => [ [
                    'Date', 'Billing Country',
                    'QTY', 'ISBN', 'Author', 'Title', 'List Price', 'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency', 'Reason'
                ]
            ],
        },

        # Kobo v15
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 15,
            lines   => [ [
                    'Date', 'Country', 'State', 'Postal Code', 'QTY', 'ISBN', 'Author', 'Title', 'List Price', 'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'last Status'
                ],
            ],
        },

        # Kobo v4
        {
            service          => BookPub::Tracker::Service::KOBO,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Date',          'BillingCountry', 'BillingState', 'BillingZipPostalCode',
                    'Qty',           'ISBN',           'Authors',      'Title',
                    'OriginalPrice', 'COGS %',         'COGS',         'OriginalPriceCurrency'
                ],
            ],
        },

        # Kobo v5
        {
            service          => BookPub::Tracker::Service::KOBO,
            version          => 5,
            sheet            => 0,
            match_on_any_row => 1,
            lines            => [
                [ 'Date', 'BillingCountry', 'Qty', 'ISBN', 'Authors', 'Title', 'OriginalPrice', 'COGS %', 'COGS', 'OriginalPriceCurrency' ],
            ],
        },

        # Kobo v6
        {
            service          => BookPub::Tracker::Service::KOBO,
            version          => 6,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'PurchaseDate',  'BillingCountry', 'BillingState', 'BillingZipPostalCode',
                    'Qty',           'DocumentTypeID', 'Authors',      'Title',
                    'OriginalPrice', 'COGS %',         'COGS',         'OriginalPriceCurrency'
                ],
            ],
        },

        # Kobo v13
        {
            service          => BookPub::Tracker::Service::KOBO,
            version          => 13,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Publisher', 'BillingCountry', 'BillingState', 'PostalCode', 'ISBN', 'Title', 'Author', 'OriginalPriceCurrency',
                    'OriginalPrice', 'COGS %', 'COGS_In_Original_Price_Currency',
                    'SalesCurrency', 'refund date', 'reason'
                ],
            ],
        },

        # Kobo v7
        {
            service          => BookPub::Tracker::Service::KOBO,
            version          => 7,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Date',             'Billing Country', 'Qty',        'Title',
                    'Author',           'ISBN',            'List Price', 'COGS %',
                    'Net Due \(COGS\)', 'List Price Currency'
                ]
            ],
        },

        # Kobo v8
        {
            service          => BookPub::Tracker::Service::KOBO,
            version          => 8,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Date', 'Billing Country',
                    'Postal Code', 'State', 'Qty', 'ISBN', 'Author', 'Title', 'List Price', 'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Tax Amount', 'City', 'County'
                ],
            ],
        },

        # Kobo v9
        {
            service          => BookPub::Tracker::Service::KOBO,
            version          => 9,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Publisher', 'Date',      'Country',      'Quantity', 'Title', 'Author',
                    'eISBN',     'ListPrice', 'COGS_Percent', 'Net_Due',  'Currency'
                ],

            ],
        },

        # Kobo v10
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 10,
            lines   => [ [
                    'PurchaseDate', 'BillingCountry', 'Qty',                'Title',
                    'Authors',      'DocumentTypeID', 'CAD_Original_Price', 'COGS %',
                    'COGS',         'OriginalPriceCurrency'
                ],
            ]
        },

        # Kobo v11
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 12,
            lines   => [ [
                    'Date',       'Country',   'Quantity',     'Title',   'Author', 'eISBN',
                    'Publishers', 'ListPrice', 'COGS_Percent', 'Net_Due', 'Currency'
                ],
            ]
        },

        # Kobo Promotions v1
        # This format has the exact same headers as Kobo v22 below, but luckily the files for that version
        # always have an invoice sheet first. We should be able to count on that in order to tell the difference.
        {
            service => BookPub::Tracker::Service::KOBO_PROMOTIONS,
            sheet   => 0,
            version => 1,
            lines   => [ [
                    'Date',
                    'Billing Country',
                    'State',
                    'Postal Code',
                    'Qty',
                    'ISBN',
                    'Author',
                    'Title',
                    'List Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange rate to Contractual Currency',
                    'COGS in Contractual Currency',
                    'Contractual Currency'
                ],
            ],
        },

        # Kobo v22
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 22,
            lines   => [ [
                    'Date',
                    'Billing Country',
                    'State',
                    'Postal Code',
                    'Qty',
                    'ISBN',
                    'Author',
                    'Title',
                    'List Price',
                    'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Foreign Exchange rate to Contractual Currency',
                    'COGS in Contractual Currency',
                    'Contractual Currency'
                ],
            ],
        },

        # Kobo v18
        {
            service => BookPub::Tracker::Service::KOBO,
            sheet   => 'any',
            version => 18,
            lines   => [ [
                    'Date', 'Billing Country',
                    'State', 'Postal Code', 'Qty', 'ISBN', 'Author', 'Title', 'List Price', 'COGS %',
                    'Net Due \(COGS\)',
                    'List Price Currency',
                    'Tax Amount', 'City', 'County'
                ],
            ]
        },

        # Kobo v35 (FBoD17466)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 35,
            sheet   => 1,
            lines   => [ [
                    'Date',
                    'Country',
                    'State',
                    'Zip Code',
                    'Content Type',
                    'Total Qty',
                    'Refund Reason',
                    'DealID',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'List Price',
                    'Tax Excluded List Price',
                    'COGS %',
                    'COGS Amount \(LP Currency\)',
                    'LP Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS \(Payable Currency\)',
                    'COGS based LP',
                    'COGS based LP excluding tax',
                    'COGS based LP Currency',
                    'COGS Adjustment \(Payable Currency\)',
                    'Net Due \(Payable Currency\)',
                    'Payable Currency',
                    'Total Tax \(Payable Currency\)',
                    '^$'
                ],
            ],
        },

        # Kobo v36 (FBoD17520)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 36,
            sheet   => 1,
            lines   => [ [
                    'Date',
                    'Country',
                    'State',
                    'City',
                    'County',
                    'Zip Code',
                    'Content Type',
                    'Total Qty',
                    'Refund Reason',
                    'DealID',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'List Price',
                    'Tax Excluded List Price',
                    'COGS %',
                    'COGS Amount \(LP Currency\)',
                    'LP Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS \(Payable Currency\)',
                    'COGS based LP',
                    'COGS based LP excluding tax',
                    'COGS based LP Currency',
                    'COGS Adjustment \(Payable Currency\)',
                    'Net Due \(Payable Currency\)',
                    'Payable Currency',
                    'Total Tax \(Payable Currency\)',
                    'Tax state %',
                    'Tax state amount',
                    'Tax city( %)?',
                    'Tax city amount',
                    'Tax county %',
                    'Tax county amount',
                    '^$'
                ],
            ],
        },

        # Kobo v36 (RSD-2821)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 37,
            sheet   => 1,
            lines   => [ [
                    'Date',
                    'Country',
                    'State',
                    'City',
                    'County',
                    'Zip Code',
                    'Content Type',
                    'Total Qty',
                    'Refund Reason',
                    'DealID',
                    'Partner',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'List Price',
                    'Tax Excluded List Price',
                    'COGS %',
                    'COGS Amount \(LP Currency\)',
                    'LP Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS \(Payable Currency\)',
                    'COGS based LP',
                    'COGS based LP excluding tax',
                    'COGS based LP Currency',
                    'COGS Adjustment \(Payable Currency\)',
                    'Net Due \(Payable Currency\)',
                    'Payable Currency',
                    'Total Tax \(Payable Currency\)',
                    'Tax state %',
                    'Tax state amount',
                    'Tax city( %)?',
                    'Tax city amount',
                    'Tax county %',
                    'Tax county amount',
                    '^$'
                ],
            ],
        },

        # Kobo v38 (RSD-5465)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 38,
            sheet   => 1,
            lines   => [ [
                    'Date',
                    'Country',
                    'State',
                    'City',
                    'County',
                    'Zip Code',
                    'Content Type',
                    'Total Qty',
                    'Refund Reason',
                    'DealID',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'List Price',
                    'Tax Excluded List Price',
                    'COGS %',
                    'COGS Amount \(LP Currency\)',
                    'LP Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS  \(Payable Currency\)',
                    'COGS based LP',
                    'COGS based LP excluding tax',
                    'COGS based LP Currency',
                    'COGS Adjustment \(Payable Currency\)',
                    'Net Due \(Payable Currency\)',
                    'Payable Currency',
                    'Total Tax \(Payable Currency\)',
                    'Tax state %',
                    'Tax state amount',
                    'Tax city %',
                    'Tax city amount',
                    'Tax County %',
                    'Tax county amount',
                    '^$'
                ],
            ],
        },

        # Kobo v39 based on v35 (RSD-5815)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 39,
            sheet   => 1,
            lines   => [ [
                    'Date',
                    'Country',
                    'State',
                    'Zip Code',
                    'Content Type',
                    'Total Qty',
                    'Refund Reason',
                    'DealID',
                    'Partner',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'List Price',
                    'Tax Excluded List Price',
                    'COGS %',
                    'COGS Amount \(LP Currency\)',
                    'LP Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS \(Payable Currency\)',
                    'COGS based LP',
                    'COGS based LP excluding tax',
                    'COGS based LP Currency',
                    'COGS Adjustment \(Payable Currency\)',
                    'Net Due \(Payable Currency\)',
                    'Payable Currency',
                    'Total Tax \(Payable Currency\)',
                    '^$'
                ],
            ],
        },

        # Kobo v40 based on v38 (RSD-7770)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 40,
            sheet   => 1,
            lines   => [ [
                    'Date',
                    'Country',
                    'State',
                    'City',
                    'County',
                    'Zip Code',
                    'Content Type',
                    'Total Qty',
                    'Refund Reason',
                    'DealID',
                    'Partner',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Author',
                    'Title',
                    'List Price',
                    'Tax Excluded List Price',
                    'COGS %',
                    'COGS Amount \(LP Currency\)',
                    'LP Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS  \(Payable Currency\)',
                    'COGS based LP',
                    'COGS based LP excluding tax',
                    'COGS based LP Currency',
                    'COGS Adjustment \(Payable Currency\)',
                    'Net Due \(Payable Currency\)',
                    'Payable Currency',
                    'Total Tax \(Payable Currency\)',
                    'Tax state %',
                    'Tax state amount',
                    'Tax city %',
                    'Tax city amount',
                    'Tax County %',
                    'Tax county amount',
                    '^$'
                ],
            ],
        },

        # Kobo v41 (RSD-8090)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 41,
            sheet   => 1,
            lines   => [ [
                    'Read Period',
                    'Publisher name',
                    'eISBN',
                    'Author',
                    'Title',
                    'List price \(TaxIn\)',
                    'List price \(TaxOut\)',
                    'List price currency',
                    'Region',
                    'Read threshold \(.\)',
                    'Reads',
                    'Total payable',
                    'Foreign exchange to payable currency',
                    'Total in payable currency',
                    'Payable Currency',
                    'Value Per Minute',
                    'Total Minutes',
                    'Revenue earned per title',
                    'Publisher revenue share \(.\)',
                    'Total publisher revenue share in payable currency \(.\)',
                    '^$'
                ],
            ],
        },

        # Kobo v42 (RSD-9510)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 42,
            sheet   => 1,
            lines   => [ [
                    'Read Period',
                    'Publisher name',
                    'eISBN',
                    'Author',
                    'Title',
                    'List price \(TaxIn\)',
                    'List price \(TaxOut\)',
                    'List price currency',
                    'Region',
                    'Read threshold \(%\)',
                    'Reads',
                    'Total payable',
                    'Foreign exchange to payable currency',
                    'Total in payable currency',
                    'Payable Currency',
                    'Value Per Minute',
                    'Total Minutes',
                    'Revenue earned per title',
                    'Publisher revenue share \(.\)',
                    'Total publisher revenue share in payable currency \(.\)',
                    'Total Tax in Payable Currency',
                    'Content Type',
                    '^$'
                ],
            ],
        },

        # Kobo v43 based on v39 (RSD-9901)
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 43,
            sheet   => 1,
            lines   => [ [
                    'Date',
                    'Country',
                    'State',
                    'Zip Code',
                    'Content Type',
                    'Total Qty',
                    'Refund Reason',
                    'DealID',
                    'Partner',
                    'Publisher Name',
                    'Imprint',
                    'eISBN',
                    'Title',
                    'Author',
                    'List Price',
                    'Tax Excluded List Price',
                    'COGS %',
                    'COGS Amount \(LP Currency\)',
                    'LP Currency',
                    'Foreign Exchange Rate to Payable Currency',
                    'COGS \(Payable Currency\)',
                    'COGS based LP',
                    'COGS based LP excluding tax',
                    'COGS based LP Currency',
                    'COGS Adjustment \(Payable Currency\)',
                    'Net Due \(Payable Currency\)',
                    'Payable Currency',
                    'Total Tax \(Payable Currency\)',
                    '^$'
                ],
            ],
        },

        # Fictionwise
        {
            service => BookPub::Tracker::Service::FICTIONWISE,
            version => 1,
            lines   => [ ( [undef] ) x 4, [ '# SALEDATE', 'ISBN', 'FORMAT', 'LISTPRICE', 'CUR', 'DISC', 'AMOUNTDUE', 'AUTHOR', 'TITLE' ], ],
        },

        # IngramDigital - v3 - RETail
        {
            service => BookPub::Tracker::Service::INGRAM_DIGITAL,
            version => 3,
            lines   => [ [
                    'PUBLISHER',   'TITLE',            'AUTHOR',            'DISPLAY_ISBN',
                    'PARENT_ISBN', 'TRANSACTION_TYPE', 'IDG_REFERENCE',     'LIST_PRICE',
                    'DISCOUNT',    'CURRENCY',         'QUANTITY_INVOICED', 'ROYALTY'
                ],
            ],
        },

        # IngramDigital - v4 - MAUDio
        {
            service => BookPub::Tracker::Service::INGRAM_DIGITAL,
            version => 4,
            lines   => [ [
                    'TITLE',       'AUTHOR',     'PUBLISHER', 'DISPLAY_ISBN',
                    'PARENT_ISBN', 'LIST_PRICE', 'QTY',       'PUBLISHER_DISCOUNT',
                    'CURRENCY',    'ROYALTY',    'AP_INVOICE_NUMBER'
                ],
            ],
        },

        # IngramDigital - v5 - MAUDio
        {
            service => BookPub::Tracker::Service::INGRAM_DIGITAL,
            version => 5,
            lines   => [ [
                    'eISBN',
                    'Title',
                    'Author',
                    'List Price',
                    'Quantity',
                    'Cart Value',
                    'Tax',
                    'IDG FF Fee',
                    'CC Fee',
                    'DRM Fee',
                    'Net Sale Value',
                    'Currency',
                    'Content Type',
                    'Territory',
                    'Transaction Date',
                    'Publisher',
                    'Publisher Site'
                ],
            ],
        },

        # IngramDigital - v6 - BKP
        {
            service => BookPub::Tracker::Service::INGRAM_DIGITAL,
            version => 6,
            lines   => [ [
                    'TITLE',           'AUTHOR',          'PUBLISHER',         'PUBLISHER_ISBN',
                    'SOFT_COVER_ISBN', 'HARD_COVER_ISBN', 'LIST_PRICE',        'TRANSACTION_DATE',
                    'COST_FACTOR',     'COST_MULTIPLIER', 'DISCOUNT',          'QUANTITY',
                    'ROYALTY',         'CURRENCY',        'AP_INVOICE_NUMBER', 'AP_INVOICE_DATE',
                    'SOLD_TO_COUNTRY'
                ],
            ],
        },

        # Ingram MyiLibrary - v7 - BBUS
        {
            service => BookPub::Tracker::Service::INGRAM_DIGITAL,
            version => 7,
            lines   => [ [
                    'TITLE',           'AUTHOR',          'PUBLISHER',       'PUBLISHER_ISBN',
                    'SOFT_COVER_ISBN', 'HARD_COVER_ISBN', 'LIST_PRICE',      'TRANSACTION_DATE',
                    'TRX_TYPE',        'COST_FACTOR',     'COST_MULTIPLIER', 'DISCOUNT',
                    'QUANTITY',        'ROYALTY',         'CURRENCY',        'AP_INVOICE_NUMBER',
                    'AP_INVOICE_DATE', 'SOLD_TO_COUNTRY', '^$'
                ],
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 1,
            lines   => [ [
                    'Transaction Date', 'Title',      'Author',              'Type',     'Unit',            'PISBN13',
                    'EISBN13',          'List Price', 'Publisher Revenue.*', 'Currency', 'Country of Sale', 'Transaction',
                    'SaleID'
                ]
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 2,
            lines   => [ [
                    'Print ISBN',
                    'eISBN',
                    'Title',
                    'Sales Date',
                    'Sales ID',
                    'Zip Code',
                    'Sales Type',
                    'Transaction Type',
                    'List Price',
                    'Publisher Payout',
                    '%'
                ],
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 3,
            lines   => [ [
                    'Date',
                    'Type',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price',
                    'List Cur',
                    'Country',
                    'State',
                    'Postal Code',
                    'Tax Rate',
                    'Tax Amt',
                    'Tax Cur',
                    'Pub Revshare %',
                    'Pub Revshare'
                ],
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 4,
            lines   => [ [
                    undef,            'Type',  'Sold By', 'Qty',        'ISBN',     'EISBN',
                    'Imprint Name',   'Title', 'Author',  'List Price', 'List Cur', 'Country',
                    'Pub Revshare %', 'Pub Revshare'
                ],
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 5,
            lines   => [ [
                    undef,            'Type',  'Sold By', 'Qty',      'ISBN',       'EISBN',
                    'Imprint Name',   'Title', 'Author',  'List Cur', 'List Price', 'Country',
                    'Pub Revshare %', 'Pub Revshare'
                ],
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 6,
            lines   => [ [
                    'Payment Date',
                    'Transaction Date',
                    'Type',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'State/Province/Region',
                    'Postal Code',
                    'Tax Rate',
                    'Tax Amount',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Publisher Revenue plus Tax'
                ]
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 9,
            lines   => [ [
                    'Payment Date',
                    'Transaction Date',
                    'Type',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Payment Currency',
                    'Payment Amount',
                    'Currency Conversion Rate',
                ]
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 7,
            lines   => [ [
                    'Payment Date',
                    'Transaction Date',
                    'Type',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                ]
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 8,
            lines   => [ [
                    'Transaction Date',
                    'Type',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Payment Currency',
                    'Payment Amount',
                    'Currency Conversion Rate',
                    'Payment Date',
                ]
            ],
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 10,
            lines   => [
                ['Partner Payment Total'],
                [undef],
                [
                    'PayoutDate',
                    'Transaction Date',
                    'Transaction Type',
                    'Sold By',
                    'Quantity',
                    'PrintISBN13',
                    'EISBN13',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'State Province',
                    'Zip Code',
                    'Tax Rate',
                    'Tax Amount',
                    'Publisher Revenue Share %',
                    'Publisher Revenue Share Amount',
                    'PublisherPayoutCurrency',
                    'PublisherPayoutAmount',
                    'CurrencyConversionRate',
                    '^$'
                ]
            ]
        },

        # Google
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 11,
            lines   => [ [
                    'Payment Date',
                    'Transaction Date',
                    'Type',
                    'Sold By',
                    'Quantity',
                    'PrintISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'Publisher Revenue Share %',
                    'Publisher Revenue Share Amount',
                    'PUblisher Payment Currency',
                    'Publisher Payment Amount',
                    '^$',
                ]
            ],
        },

        # Google, version 12
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 12,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Type',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'State/Province/Region',
                    'Postal Code',
                    'Tax Rate',
                    'Tax Amount',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Publisher Revenue plus Tax',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate'
                ]
            ]
        },

        # Google, version 13
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 13,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Type',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate'
                ]
            ]
        },

        # Google, version 14
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 14,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Type',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Purchase Price Currency',
                    'Purchase Price',
                    'Country of Sale',
                    'State\/Province\/Region',
                    'Postal Code',
                    'Tax Rate',
                    'Tax Amount',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Publisher Revenue plus Tax',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate',
                    '^$',
                ]
            ]
        },

        # Google, version 15
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 15,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Id',
                    'Type',
                    'Preorder',
                    'Sold By',
                    'Qty',
                    'ISBN',
                    'EISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate',
                    '^$',
                ]
            ]
        },

        # Google, version 16
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 16,
            lines   => [ [
                    'Earnings Date', 'Transaction Date', 'Id', 'Type', 'Preorder', 'Sold By', 'Qty', 'ISBN', 'EISBN', 'Imprint Name',
                    'Title', 'Author', 'List Price Currency', 'List Price', 'Purchase Price Currency', 'Purchase Price', 'Country of Sale',
                    'State/Province/Region', 'Postal Code', 'Tax Rate', 'Tax Amount', 'Publisher Revenue %', 'Publisher Revenue',
                    'Publisher Revenue plus Tax', 'Earnings Currency', 'Earnings Amount', 'Currency Conversion Rate',

                ]
            ]
        },

        # Google, version 17 (version 15 with flipped ISBN columns)
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 17,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Id',
                    'Type',
                    'Preorder',
                    'Sold By',
                    'Qty',
                    'Primary ISBN',
                    'Secondary ISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate',
                    '^$'
                ]
            ]
        },

        # Google, version 18 (version 16 with flipped ISBN columns)
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 18,
            lines   => [ [
                    'Earnings Date', 'Transaction Date', 'Id', 'Type', 'Preorder', 'Sold By', 'Qty', 'Primary ISBN', 'Secondary ISBN',
                    'Imprint Name', 'Title', 'Author', 'List Price Currency', 'List Price', 'Purchase Price Currency', 'Purchase Price',
                    'Country of Sale', 'State/Province/Region', 'Postal Code', 'Tax Rate', 'Tax Amount', 'Publisher Revenue %',
                    'Publisher Revenue', 'Publisher Revenue plus Tax', 'Earnings Currency', 'Earnings Amount', 'Currency Conversion Rate',

                ]
            ]
        },

        # Google, version 19 - Just like 17 with with alternate header
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 19,
            lines   => [ [
                    qw(INVOICE_DATE  DATE  SALE_ID  TRANSACTION_TYPE  PREORDER  SOLD_BY  QUANTITY  ISBN  EISBN  IMPRINT  BOOK_TITLE  BOOK_AUTHOR  LIST_PRICE_CURRENCY  LIST_PRICE  COUNTRY_SOLD   PUBLISHER_REVSHARE_PERCENTAGE  PUBLISHER_REVSHARE  INVOICE_CURRENCY  INVOICE_AMOUNT  CURRENCY_CONVERSION_RATE),
                    '^$'
                ]
            ]
        },

        # Google, version 20 - Another variant of 16's format
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 20,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Id',
                    'Product',
                    'Type',
                    'Preorder',
                    'Sold By',
                    'Qty',
                    'Primary ISBN',
                    'Secondary ISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate',
                ]
            ]
        },

        # Google, version 21 - Another variant of 16's format
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 21,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Id',
                    'Product',
                    'Type',
                    'Preorder',
                    'Sold By',
                    'Qty',
                    'Primary ISBN',
                    'Secondary ISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'List Price Currency',
                    'List Price',
                    'Purchase Price Currency',
                    'Purchase Price',
                    'Country of Sale',
                    'State/Province/Region',
                    'Postal Code',
                    'Tax Rate',
                    'Tax Amount',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Publisher Revenue plus Tax',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate'
                ]
            ]
        },

        # Google, version 22
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 22,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Id',
                    'Product',
                    'Type',
                    'Preorder',
                    'Qty',
                    'Primary ISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'Original List Price Currency',
                    'Original List Price',
                    'List Price Currency',
                    'List Price \[tax inclusive\]',
                    'List Price \[tax exclusive\]',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate',
                    '^$'
                ]
            ]
        },

        # Google, version 23
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 23,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Id',
                    'Product',
                    'Type',
                    'Preorder',
                    'Qty',
                    'Primary ISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'Original List Price Currency',
                    'Original List Price',
                    'List Price Currency',
                    'List Price \[tax inclusive\]',
                    'List Price \[tax exclusive\]',
                    'Purchase Price Currency',
                    'Purchase Price',
                    'Country of Sale',
                    'State/Province/Region',
                    'Postal Code',
                    'Tax Rate',
                    'Tax Amount',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Publisher Revenue plus Tax',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate',
                    '^$'
                ]
            ]
        },

        # Google, version 24 same as v22 with the additional column (RSD-632)
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 24,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Id',
                    'Product',
                    'Type',
                    'Preorder',
                    'Qty',
                    'Primary ISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'Original List Price Currency',
                    'Original List Price',
                    'List Price Currency',
                    'List Price \[tax inclusive\]',
                    'List Price \[tax exclusive\]',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate',
                    'Line of Business',
                    '^$'
                ]
            ]
        },

        # Google, version 25
        {
            service => BookPub::Tracker::Service::GOOGLE,
            version => 25,
            lines   => [ [
                    'Earnings Date',
                    'Transaction Date',
                    'Id',
                    'Product',
                    'Type',
                    'Preorder',
                    'Qty',
                    'Primary ISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'Original List Price Currency',
                    'Original List Price',
                    'List Price Currency',
                    'List Price \[tax inclusive\]',
                    'List Price \[tax exclusive\]',
                    'Purchase Price Currency',
                    'Purchase Price',
                    'Country of Sale',
                    'State\/Province\/Region',
                    'Postal Code',
                    'Tax Rate',
                    'Tax Amount',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Publisher Revenue plus Tax',
                    'Earnings Currency',
                    'Earnings Amount',
                    'Currency Conversion Rate',
                    'Line of Business',
                    '^$'
                ]
            ]
        },

        # Google Play, version 1
        {
            service => BookPub::Tracker::Service::GOOGLE_PLAY,
            version => 1,
            lines   => [
                [undef],
                [undef],
                [undef],
                [
                    'Order Number',
                    'Order Charged Date',
                    'Order Charged Timestamp',
                    'Financial Status',
                    'Payout Date',
                    'Device Model',
                    'Product Title',
                    'Product ID',
                    'Product Type',
                    'SKU ID',
                    'Currency of Sale',
                    'Item Price',
                    'Taxes Collected',
                    'Charged Amount',
                    'Merchant Currency',
                    'Estimated FX Rate',
                    'Merchant Receives',
                    'City of Buyer',
                    'State of Buyer',
                    'Postal Code of Buyer',
                    'Country of Buyer',
                    '^$',
                ]
            ]
        },

        # Google Play, version 2
        {
            service => BookPub::Tracker::Service::GOOGLE_PLAY,
            version => 2,
            lines   => [ [
                    'Description',
                    'Transaction Date',
                    'Transaction Time',
                    'Tax Type',
                    'Transaction Type',
                    'Refund Type',
                    'Product Title',
                    '(?:Product|Package) id',
                    'Product Type',
                    'Sku Id',
                    'Hardware',
                    'Buyer Country',
                    'Buyer State',
                    'Buyer Postal Code',
                    'Buyer Currency',
                    'Amount \(Buyer Currency\)',
                    'Currency Conversion Rate',
                    'Merchant Currency',
                    'Amount \(Merchant Currency\)',
                    '(?:Base Plan ID)?',
                    '(?:Offer ID)?',
                    '(?:Group ID)?',
                    '(?:First USD 1M Eligible)?',
                    '(?:Service Fee %)?',
                    '(?:Fee Description)?',
                    '(?:Promotion ID)?',
                    '(?:Sales Channel)?',
                    '^$',
                ]
            ]
        },

        # Google Play, version 3, just version 2 with an additional column for ISBN13
        {
            service => BookPub::Tracker::Service::GOOGLE_PLAY,
            version => 3,
            lines   => [ [
                    'Description',
                    'Transaction Date',
                    'Transaction Time',
                    'Tax Type',
                    'Transaction Type',
                    'Refund Type',
                    'Product Title',
                    'Product id',
                    'Product Type',
                    'Sku Id',
                    'Hardware',
                    'Buyer Country',
                    'Buyer State',
                    'Buyer Postal Code',
                    'Buyer Currency',
                    'Amount \(Buyer Currency\)',
                    'Currency Conversion Rate',
                    'Merchant Currency',
                    'Amount \(Merchant Currency\)',
                    'ISBN 13',
                    '^$',
                ]
            ]
        },

        # Google Play, version 4
        {
            service => BookPub::Tracker::Service::GOOGLE_PLAY,
            version => 4,
            lines   => [ [
                    'Transaction Date',
                    'Id',
                    'Product',
                    'Type',
                    'Preorder',
                    'Qty',
                    'Primary ISBN',
                    'Imprint Name',
                    'Title',
                    'Author',
                    'Original List Price Currency',
                    'Original List Price',
                    'List Price Currency',
                    'List Price \[tax inclusive\]',
                    'List Price \[tax exclusive\]',
                    'Country of Sale',
                    'Publisher Revenue %',
                    'Publisher Revenue',
                    'Payment Currency',
                    'Payment Amount',
                    'Currency Conversion Rate',
                    '^$',
                ]
            ]
        },

        # DNAML
        {
            service => BookPub::Tracker::Service::DNAML,
            version => 3,
            sheet   => 1,
            lines   => [ [
                    '\d+', '\d+',   '\d+', '\d+', undef, undef, undef, undef,      undef, '\w{3}',
                    undef, '\w{2}', undef, undef, undef, undef, undef, 'ISBN \d+', '\d+', '\w{3}',
                ]
            ],
        },

        # DNAML
        {
            service => BookPub::Tracker::Service::DNAML,
            version => 4,
            sheet   => 1,
            lines   => [ [
                    '\d+', '\d+', undef, undef, undef, undef,      undef, '\w{3}', undef, '\w{2}',
                    undef, undef, undef, '\d+', undef, 'ISBN \d+', '\d+', '\w{3}',
                ]
            ],
        },

        # DNAML
        {
            service => BookPub::Tracker::Service::DNAML,
            version => 5,
            sheet   => 1,
            lines   => [ [
                    '\d+', '\d+', undef, undef, undef,      undef, undef, '\w{3}', undef, '\w{2}',
                    undef, undef, undef, '\d+', 'ISBN \d+', '\d+', '\w{3}',
                ]
            ],
        },

        # DNAML
        {
            service => BookPub::Tracker::Service::DNAML,
            version => 6,
            sheet   => 1,
            lines   => [ [ '\d+', undef, undef, undef, '\w{3}', undef, '\w{2}', undef, undef, undef, '\d+', 'ISBN \d+', '\d+', '\w{3}', ] ],
        },

        # DNAML
        {
            service => BookPub::Tracker::Service::DNAML,
            version => 7,
            sheet   => 1,
            lines   => [ [
                    undef, undef, undef,      undef, undef,   '\w{3}', undef, '\w{2}', undef, undef,
                    undef, '\d+', 'ISBN \d+', '\d+', '\w{3}', undef,   '\w+', '\d+',
                ]
            ],
        },

        # DNAML
        {
            service          => BookPub::Tracker::Service::DNAML,
            version          => 1,
            match_on_any_row => 1,
            lines => [ [ undef, 'eBook Title', 'ISBN', 'SRP \(\w+\)', 'Net Price \(\d+%\)', 'Country Code:', 'Owed to .* \(\w+\)' ], ]
        },

        # Mobcast, v3
        # Version 3 needs to precede Version 1 for Mobcast, the header fields are a match, but
        # Version 1 is "match_on_any_row" whereas Version 3 header starts on line 6
        {
            service => BookPub::Tracker::Service::MOBCAST,
            version => 3,
            lines   => [
                ( [undef] ) x 5,
                [ 'ISBN', 'Title', 'Part', 'DLP \+ VAT', 'DLP', 'Currency', 'Quantity', 'Gross', 'Discount', 'Net', 'Payment', 'Country' ]
            ]
        },

        # Mobcast
        {
            service          => BookPub::Tracker::Service::MOBCAST,
            version          => 1,
            match_on_any_row => 1,
            lines            => [
                [ 'ISBN', 'Title', 'Part', 'DLP \+ VAT', 'DLP', 'Currency', 'Quantity', 'Gross', 'Discount', 'Net', 'Payment', 'Country' ]
            ]
        },

        # Mobcast
        {
            service          => BookPub::Tracker::Service::MOBCAST,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    'ISBN',        'TITLE*',    'Author',         'Publisher*', 'Units*', 'DLP Inc VAT',
                    'DLP Ex VAT*', 'Discount*', 'Royalties Due*', 'Shop',       'Country'
                ]
            ]
        },

        # Gardners
        {
            service          => BookPub::Tracker::Service::GARDNERS,
            version          => 1,
            match_on_any_row => 1,
            lines            => [
                ['EBook Sales Report - .* \d+\/\d+\/\d+'], [undef],
                [ 'ISBN13', 'EB-FORMAT', 'TITLE', 'AUTHOR', 'QTY-SOLD', 'RRP', 'PURCH-DISC', 'NET-PRICE' ],
            ]
        },

        # Gardners
        {
            service          => BookPub::Tracker::Service::GARDNERS,
            version          => 1,
            match_on_any_row => 1,
            lines            => [
                ['EBook Sales Report - .* \d+\/\d+\/\d+'],
                [ 'ISBN13', 'EB-FORMAT', 'TITLE', 'AUTHOR', 'QTY-SOLD', 'RRP', 'PURCH-DISC', 'NET-PRICE' ],
            ]
        },

        # Gardners
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 2,
            lines   => [
                ['EBook Sales Report - Date Ending'],
                [undef],
                [
                    'ISBN13',          'EB-FORMAT',        'TITLE',            'INVorCN',
                    'QTY-SOLD',        'YTD-SALES',        'RETAILER-COUNTRY', 'CURRENCY',
                    'RRP',             'PRICE-LESS-TAX',   'PRICE-LESS-COMM',  'COMMISSION',
                    'ENDUSER-COUNTRY', 'SALE-DATE',        'ENDUSER-TAX-RATE', 'SUB-AGENT',
                    'ENDUSER-COUNTRY', 'ENDUSER-POSTCODE', 'ENDUSER-ID'
                ],
            ]
        },

        # Gardners
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 3,
            lines   => [
                ['EBook Sales Report - Date Ending'],
                [undef],
                [
                    'ISBN13',          'EB-FORMAT',        'TITLE',               'INVorCN',
                    'QTY-SOLD',        'YTD-SALES',        'RETAILER-COUNTRY',    'CURRENCY',
                    'RRP',             'PRICE-LESS-TAX',   'PRICE-LESS-DISCOUNT', 'COMMISSION',
                    'ENDUSER-COUNTRY', 'SALE-DATE',        'ENDUSER-TAX-RATE',    'SUB-AGENT',
                    'ENDUSER-COUNTRY', 'ENDUSER-POSTCODE', 'ENDUSER-ID'
                ],
            ]
        },

        # Gardners
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 4,
            lines   => [
                ['VLE Sales*'],
                [undef],
                [
                    'ISBN13',              'TITLE',
                    'AUTHOR',              'QTY-SOLD',
                    'CURRENCY',            'INSTITUTIONAL-RRP',
                    'SALE-PRICE',          'PRICE-LESS-TAX',
                    'PRICE-LESS-DISCOUNT', 'COMMISSION',
                    'LICENCE-MODEL',       'PAY-PER-VIEW-PERIOD|LICENCE_NUMERIC',
                    'UNIQUE-CUST-ID',      'COUNTRY-CODE',
                    'POSTCODE',            'INSTITUTION',
                    'SALE-DATE',           'CUSTOMER-NAME'
                ],
            ]
        },

        # Gardners, v5
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 5,
            lines   => [
                ['EBook Agency Sales Report \*(EURO|STERLING)\* - Date Ending'],
                [undef],
                [
                    'ISBN13',           'EB-FORMAT',     'TITLE',            'INVorCN',
                    'QTY-SOLD',         'YTD-SALES',     'RETAILER-COUNTRY', 'CURRENCY',
                    'RRP',              'ENDUSER PRICE', 'DISCOUNT AMOUNT',  'PRICE-LESS-TAX',
                    'PRICE-LESS-COMM',  'COMMISSION',    'ENDUSER-COUNTRY',  'SALE-DATE',
                    'ENDUSER-TAX-RATE', 'SUB-AGENT',     'ENDUSER-COUNTRY',  'ENDUSER-POSTCODE',
                    'ENDUSER-ID',       'EXCHANGE-RATE', 'DISCOUNT-VALUE',   '^$'
                ],
            ]
        },

        # Gardners, v6
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 6,
            lines   => [
                [undef],
                [undef],
                [
                    'ISBN13',            'TITLE',           'QTY-SOLD',        'CURRENCY',
                    'INSTITUTIONAL-RRP', 'RRP',             'PRICE-LESS-TAX',  'PRICE-LESS-DISCOUNT',
                    'COMMISSION',        'ENDUSER-COUNTRY', 'LICENCE_NUMERIC', undef,
                    'ENDUSER-COUNTRY',   'SUB-AGENT',       'ENDUSER-COUNTRY', 'SALE-DATE',
                    'ENDUSER-POSTCODE',  'ENDUSER-ID',      '^$'
                ],
            ]
        },

        # Gardners, v7
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 7,
            lines   => [
                [undef],
                [undef],
                [
                    'ISBN13',            'TITLE',         'QTY-SOLD',        'CURRENCY',
                    'INSTITUTIONAL-RRP', 'SALE-PRICE',    'PRICE-LESS-TAX',  'PRICE-LESS-DISCOUNT',
                    'COMMISSION',        'LICENCE-MODEL', 'LICENCE_NUMERIC', undef,
                    'ENDUSER-COUNTRY',   'SUB-AGENT',     'SALE-DATE',       'SALE-DATE',
                    'CUSTOMER-NAME',     '^$'
                ],
            ]
        },

        # Gardners, v8
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 8,
            lines   => [
                [undef],
                [undef],
                [
                    'ISBN13',            'TITLE',         'QTY-SOLD',        'CURRENCY',
                    'INSTITUTIONAL-RRP', 'SALE-PRICE',    'PRICE-LESS-TAX',  'PRICE-LESS-DISCOUNT',
                    'COMMISSION',        'LICENCE-MODEL', 'LICENCE_NUMERIC', undef,
                    'ENDUSER-COUNTRY',   'SUB-AGENT',     'SALE-DATE',       'CUSTOMER-NAME',
                    '^$'
                ],
            ]
        },

        # Gardners, v9 FB13461
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 9,
            lines   => [
                [undef],
                [undef],
                [
                    'ISBN13',            'TITLE',         'QTY-SOLD',        'CURRENCY',
                    'INSTITUTIONAL-RRP', 'SALE-PRICE',    'PRICE-LESS-TAX',  'PRICE-LESS-DISCOUNT',
                    'COMMISSION',        'LICENCE-MODEL', 'LICENCE_NUMERIC', undef,
                    'ENDUSER-COUNTRY',   'SUB-AGENT',     'SALE-DATE',       '^$'
                ],
            ]
        },

        # Gardners, v10 FB14485
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 10,
            lines   => [
                [undef],
                [undef],
                [
                    'ISBN13',            'TITLE',           'QTY-SOLD',                        'CURRENCY',
                    'INSTITUTIONAL-RRP', 'SALE-PRICE',      'PRICE-LESS-TAX',                  'PRICE-LESS-DISCOUNT',
                    'COMMISSION',        'LICENSE|LICENCE', 'LICENCE_NUMERIC|LICENSE_NUMERIC', undef,
                    'ENDUSER-COUNTRY',   'SUB-AGENT',       'SALE-DATE',                       'CUSTOMER',
                    '^$'
                ],
            ]
        },

        # Gardners, v11 FB14779
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 11,
            lines   => [
                [undef],
                [undef],
                [
                    'ISBN13',            'TITLE',         'QTY-SOLD',        'CURRENCY',
                    'INSTITUTIONAL-RRP', 'SALE-PRICE',    'PRICE-LESS-TAX',  'PRICE-LESS-DISCOUNT',
                    'COMMISSION',        'LICENCE-MODEL', 'LICENCE_NUMERIC', undef,
                    'COUNTRY-CODE',      'INSTITUTION',   'SALE-DATE',       'CUSTOMER-NAME',
                    '^$'
                ],
            ]
        },

        # Gardners, v12 FB14932, update of v4
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 12,
            lines   => [ [
                    'ISBN13',                    'EB-FORMAT',
                    'TITLE',                     'AUTHOR',
                    'INVorCN',                   'COMMERCIAL-MODEL',
                    'LICENCE-TYPE',              'LICENCE-QTY-DESCRIPTION',
                    'RRP',                       'PRICE-LESS-TAX',
                    'PRICE-LESS-DISCOUNT',       'PURCHASE-DISCOUNT-COMMISSION',
                    'DISCOUNT-COMMISSION-VALUE', 'CURRENCY',
                    'UNITS',                     'VENDOR-COUNTRY',
                    'LOCAL-SELLING-PRICE',       'LOCAL-TAX',
                    'LOCAL-SELLING-CURRENCY',    'LOCAL-SELLING-DISCOUNT',
                    'INSTITUTION-VENDOR-TYPE',   'SALE-DATE',
                    'VENDOR',                    'ENDUSER-COUNTRY',
                    'INSTITUTION-POST-CODE',     'UNIQUE-ID',
                    '^$'
                ],
            ]
        },

        # Gardners version 13 (FBoD16434)
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 13,
            lines   => [ [
                    'ISBN13',                    'EB-FORMAT',
                    'TITLE',                     'AUTHOR',
                    'INVorCN',                   'COMMERCIAL-MODEL',
                    'LICENCE-TYPE',              'LICENCE-QTY-DESCRIPTION',
                    'RRP',                       'PRICE-LESS-TAX',
                    'PRICE-LESS-DISCOUNT',       'PURCHASE-DISCOUNT-COMMISSION',
                    'DISCOUNT-COMMISSION-VALUE', 'CURRENCY',
                    'UNITS',                     'TOTAL-NET-LINE-VALUE',
                    'VENDOR-COUNTRY',            'LOCAL-SELLING-PRICE',
                    'LOCAL-TAX',                 'LOCAL-SELLING-CURRENCY',
                    'LOCAL-SELLING-DISCOUNT',    'INSTITUTION-VENDOR-TYPE',
                    'SALE-DATE',                 'VENDOR',
                    'ENDUSER-COUNTRY',           'INSTITUTION-POST-CODE',
                    'UNIQUE-ID',                 '^$'
                ],
            ]
        },

        # Gardners version 15, should be defined before v14
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 15,
            lines   => [
                ['Gardners Digital Sales: Distribution'],
                [],
                [],
                [
                    'Sale Date',
                    'EAN',
                    'TITLE',
                    'Consumer Country Code',
                    'Sales Currency',
                    'Exchange Rate',
                    'QTY',
                    'Net Unit Price \(Local Currency\)',
                    'Net Unit Price \(\w{3}\)',
                    'Net Unit Value Paid To Gardners \(Local Currency\)',
                    'Net Unit Value Paid To Gardners \w{3}\)',
                    'Amount Owed to Publisher',
                    '^$'
                ],
            ]
        },

        # Gardners version 14, this is some stuff they're distributing, so fairly one-off (FBoD16302)
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 14,
            lines   => [
                ['Gardners Digital Sales: Distribution'],
                [],
                [],
                [
                    'Sale Date',
                    'EAN',
                    'TITLE',
                    'Consumer Country Code',
                    'Sales Currency',
                    'Exchange Rate',
                    'QTY',
                    'Net Unit Price \(Local Currency\)',
                    'Net Unit Price \(GBP\)',
                    'Net Unit Value Paid To Gardners \(Local Currency\)',
                    'Net Unit Value Paid To Gardners GBP\)',
                    'Amount Owed to Publisher',
                    '^$'
                ],
            ]
        },

        # Gardners version 15
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 15,
            lines   => [
                ['Gardners Digital Sales: Distribution'],
                [],
                [],
                [
                    'Sale Date',
                    'EAN',
                    'TITLE',
                    'Consumer Country Code',
                    'Sales Currency',
                    'Exchange Rate',
                    'QTY',
                    'Net Unit Price \(Local Currency\)',
                    'Net Unit Price \(\w{3}\)',
                    'Net Unit Value Paid To Gardners \(Local Currency\)',
                    'Net Unit Value Paid To Gardners \w{3}\)',
                    'Amount Owed to Publisher',
                    '^$'
                ],
            ]
        },

        # Gardners version 16
        {
            service => BookPub::Tracker::Service::GARDNERS,
            version => 16,
            match_on_any_row => 1,
            lines   => [ [
                    'ISBN13',
                    'EB-FORMAT',
                    'TITLE',
                    'AUTHOR',
                    'INVorCN',
                    'COMMERCIAL-MODEL',
                    'LICENCE-TYPE',
                    'LICENCE-QTY-DESCRIPTION',
                    'RRP',
                    'PRICE-LESS-TAX',
                    'PRICE-LESS-DISCOUNT',
                    'PURCHASE-DISCOUNT-COMMISSION',
                    'DISCOUNT-COMMISSION-VALUE',
                    'CURRENCY',
                    'UNITS',
                    'TOTAL-NET-LINE-VALUE',
                    'VENDOR-COUNTRY',
                    'LOCAL-SELLING-PRICE',
                    'LOCAL-TAX',
                    'LOCAL-SELLING-CURRENCY',
                    'LOCAL-SELLING-DISCOUNT',
                    'INSTITUTION-VENDOR-TYPE',
                    'SALE-DATE',
                    'VENDOR',
                    'ENDUSER-COUNTRY',
                    'INSTITUTION-POST-CODE',
                    'UNIQUE-ID',
                    '^$'
                ],
            ]
        },

        # Christianbook.com
        {
            service => BookPub::Tracker::Service::CHRISTIANBOOK,
            version => 1,
            lines   => [ [
                    'merchant_id',        'invoice_num',
                    'ISBN13',             'transaction_date',
                    'gross_amount',       'tax_type',
                    'taxable_state_code', 'taxable_county',
                    'taxable_city',       'taxable_zipcode',
                    'exempt_amount',      'state_tax',
                    'county_tax',         'city_tax',
                    'district_tax',       'state_tax_rate',
                    'county_tax_rate',    'city_tax_rate',
                    'district_tax_rate',  'title',
                    'author',             'format',
                    'list_price',         'currency',
                    'units_sold',         'revenue_amount\/publisher_compensation',
                    'country_of_sale'
                ],
            ]
        },

        # Christianbook (based on BISG v4)
        {
            service => BookPub::Tracker::Service::CHRISTIANBOOK,
            version => 3,
            lines   => [ [
                    'Report_ID',                         'Report_Date_and_Time',
                    'Message_Funtion|Message_Function',  'Sales_Report_Type',
                    'Reporting_Period_From',             'Reporting_Period_To',
                    'Not_Used_1',                        'Reporting_Price_Type',
                    'Currency',                          'Class_of_Trade_Sale',
                    'Sales_Territory',                   'Line_Item_ID',
                    'Sub_Agent_ID',                      'Sub_Agent_Name',
                    'Transaction_Date',                  'Transaction_ID',
                    'Line_Item_Ref_Type',                'Line_Item_Ref_ID',
                    'Line_Item_Ref_Date',                'Main_Product_ID_Type',
                    'Main_Product_ID',                   'Alternate_Product_ID_Type',
                    'Alternate_Product_ID',              'Product_Title',
                    'Product_Author',                    'Product_Descripion',
                    'Publisher_ID',                      'Publisher_Name',
                    'Imprint_Name',                      'Product_Format',
                    'Device_Type',                       'Gross_Sold_Quantity',
                    'Returned_Refunded_Quantity',        'Net_Sold_Quantity',
                    'Non_Sale_Quantity',                 'Non_Sale_Disposal_Type',
                    'Class_of_Trade_Sale',               'Sales_Territory',
                    'Unit_Price',                        'Price_Type',
                    'Price_Currency',                    'Commission_Discount_Percentage',
                    'Gross_Sold_Value',                  'Returned_Refunded_Value',
                    'Net_Value_Before_Fees',             'Fee_Type_1',
                    'Fee_Amount_1',                      'Fee_Source_1',
                    'Fee_Type_2',                        'Fee_Amount_2',
                    'Fee_Source_2',                      'Fee_Type_3',
                    'Fee_Amount_3',                      'Fee_Source_3',
                    'Proceeds_of_Sale_Due_to_Publisher', 'Total_Number_of_Line_Items',
                    'Total_Gross_Sold_Quantity',         'Total_Returned_Refunded_Quantity',
                    'Total_Net_Sold_Quantity',           'Total_Non_Sale_Quantity',
                    'Total_Gross_Sold_Value',            'Total_Returned_Refunded_Value',
                    'Total_Net_Sold_Value_Before_Fees',  'Total_Fees_All_Types',
                    'Total_Proceeds_to_Publisher',       'Reporting_Agent_ID',
                    'Reporting_Agent_Name',              'Currency_Conversion_Rate',
                    'List_Price',                        'Price_Type'
                ],
            ]
        },

        # WeRead4You
        {
            service => BookPub::Tracker::Service::WEREAD4YOU,
            version => 1,
            lines   => [ [
                    'Quantity', 'ISBN', 'Title', 'Territory of Sale', 'Publisher SRP', 'Cost Price',
                    'WR4Y Sold Price \(approx. USD value\)'
                ],
            ]
        },

        # WeRead4You
        {
            service          => BookPub::Tracker::Service::WEREAD4YOU,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [ 'Date Sold', 'Title', 'ISBN', 'Territory', 'Publisher SRP', 'Quantity', 'Royalty' ], ]
        },

        # Waterstones
        {
            service          => BookPub::Tracker::Service::WATERSTONES,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 1,
            lines            => [ [
                    'Ref.',          'Type',      'Supplier', 'Year',     'Week', 'ISBN',
                    'Title',         'Publisher', 'Vat Code', 'Vat Rate', 'Cost', 'Quantity',
                    'Line Net Cost', 'Selling Price'
                ],

            ]
        },

        # OLF, Version 1
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 1,
            lines            => [ [
                    'COUNTRY',           undef,                'CUSTOMERS',                  undef,
                    undef,               undef,                'PUBLISHER',                  undef,
                    undef,               'EAN13',              'TITLE',                      undef,
                    'AUTHORS',           'QUANTITY',           undef,                        undef,
                    'ORIGINAL CURRENCY', 'GROSS UNIT PRICE.*', 'NET UNIT PRICE.*',           undef,
                    undef,               '% DISCOUNT',         'TOTAL GROSS PURCHASE PRICE', 'TOTAL.*'
                ],
            ]
        },

        # OLF, Version 2
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 2,
            lines            => [ [
                    'COUNTRY',                    undef,      'CUSTOMERS',         undef,
                    undef,                        undef,      'PUBLISHER',         undef,
                    undef,                        'EAN13',    'TITLE',             undef,
                    'AUTHORS',                    'QUANTITY', 'ORIGINAL CURRENCY', 'GROSS UNIT PRICE.*',
                    'NET UNIT PRICE.*',           undef,      undef,               '% DISCOUNT',
                    'TOTAL GROSS PURCHASE PRICE', 'TOTAL NET PURCHASE PRICE'
                ],
            ]
        },

        # OLF, Version 3
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 3,
            lines            => [ [
                    'COUNTRY',                      'CUSTOMERS',
                    'PUBLISHER',                    'EAN13',
                    'TITLE',                        'AUTHORS',
                    'QUANTITY',                     undef,
                    undef,                          'ORIGINAL CURRENCY',
                    'GROSS UNIT PRICE  ORIG. CUR.', 'NET UNIT PRICE ORIG. CUR.',
                    undef,                          undef,
                    '% DISCOUNT',                   'TOTAL GROSS PURCHASE PRICE',
                    'TOTAL NET PURCHASE PRICE'
                ],
            ]
        },

        # OLF, Version 4
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 4,
            lines            => [ [
                    'COUNTRY', 'CUSTOMERS', 'PUBLISHER', 'EAN13', 'TITLE', 'AUTHORS', 'QUANTITY',
                    'ORIGINAL CURRENCY',
                    'GROSS UNIT PRICE  ORIG. CUR.',
                    'NET UNIT PRICE ORIG. CUR.',
                    '% DISCOUNT',
                    'TOTAL GROSS PURCHASE PRICE',
                    'TOTAL NET PURCHASE PRICE'
                ],
            ]
        },

        # OLF, Version 5
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 5,
            lines            => [ [
                    'COUNTRY',                             'CUSTOMERS',
                    undef,                                 undef,
                    undef,                                 'PUBLISHER',
                    undef,                                 undef,
                    'EAN13',                               'TITLE',
                    undef,                                 'AUTHORS',
                    undef,                                 undef,
                    undef,                                 'QUANTITY',
                    undef,                                 'ORIGINAL CURRENCY',
                    'GROSS UNIT PRICE ORIG.CUR. INCL.VAT', undef,
                    undef,                                 'GROSS UNIT PRICE ORIG.CUR. EX. VAT',
                    '% DISCOUNT',                          'NET UNIT PRICE ORIG.CUR.',
                    'TOTAL NET PURCHASE PRICE'
                ],
            ]
        },

        # OLF, Version 6
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 6,
            lines            => [ [
                    'COUNTRY',                            'CUSTOMERS',
                    undef,                                undef,
                    undef,                                'PUBLISHER',
                    undef,                                undef,
                    'EAN13',                              'TITLE',
                    undef,                                'AUTHORS',
                    undef,                                undef,
                    undef,                                'QUANTITY',
                    'ORIGINAL CURRENCY',                  'GROSS UNIT PRICE ORIG.CUR. INCL.VAT',
                    undef,                                undef,
                    'GROSS UNIT PRICE ORIG.CUR. EX. VAT', '% DISCOUNT',
                    'NET UNIT PRICE ORIG.CUR.',           'TOTAL NET PURCHASE PRICE'
                ],
            ]
        },

        # OLF, Version 7
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 7,
            lines            => [ [
                    'COUNTRY',                            'CUSTOMERS',
                    undef,                                undef,
                    undef,                                'PUBLISHER',
                    undef,                                'EAN13',
                    'TITLE',                              undef,
                    'AUTHORS',                            undef,
                    undef,                                undef,
                    'QUANTITY',                           undef,
                    'ORIGINAL CURRENCY',                  'GROSS UNIT PRICE ORIG.CUR. INCL.VAT',
                    undef,                                undef,
                    'GROSS UNIT PRICE ORIG.CUR. EX. VAT', 'DISCOUNT',
                    'NET UNIT PRICE ORIG.CUR.',           'TOTAL NET PURCHASE PRICE'
                ],
            ]
        },

        # OLF, Version 7 - alternate version
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 7,
            lines            => [ [
                    'COUNTRY',                            'CUSTOMERS',
                    undef,                                undef,
                    'PUBLISHER',                          undef,
                    undef,                                'EAN13',
                    'TITLE',                              undef,
                    'AUTHORS',                            undef,
                    undef,                                undef,
                    'QUANTITY',                           undef,
                    'ORIGINAL CURRENCY',                  'GROSS UNIT PRICE ORIG.CUR. INCL.VAT',
                    undef,                                undef,
                    'GROSS UNIT PRICE ORIG.CUR. EX. VAT', 'DISCOUNT',
                    'NET UNIT PRICE ORIG.CUR.',           'TOTAL NET PURCHASE PRICE'
                ],
            ]
        },

        # OLF, Version 8 - random column merging as usual, but also adds initial INVOICING column
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 8,
            lines            => [ [
                    'INVOICING',                           undef,
                    undef,                                 'COUNTRY',
                    undef,                                 'CUSTOMERS',
                    undef,                                 undef,
                    undef,                                 'PUBLISHER',
                    undef,                                 'EAN13',
                    'TITLE',                               undef,
                    undef,                                 undef,
                    'AUTHORS',                             undef,
                    'QUANTITY',                            undef,
                    undef,                                 'ORIGINAL CURRENCY',
                    'GROSS UNIT PRICE ORIG.CUR. INCL.VAT', 'GROSS UNIT PRICE ORIG.CUR. EX. VAT',
                    'DISCOUNT',                            'NET UNIT PRICE ORIG.CUR.',
                    'TOTAL NET PURCHASE PRICE',            'TOTAL COMMISSION DUE OLF',
                    '^$'
                ],
            ]
        },

        # OLF, Version 9
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 9,
            lines            => [ [
                    'COUNTRY',           undef,       'CUSTOMERS',          undef,
                    undef,               'PUBLISHER', undef,                undef,
                    undef,               'EAN13',     'TITLE',              undef,
                    'AUTHORS',           undef,       'QUANTITY',           undef,
                    'ORIGINAL CURRENCY', undef,       'GROSS UNIT PRICE.*', 'NET UNIT PRICE.*',
                    undef,               undef,       '% DISCOUNT',         'TOTAL NET PURCHASE PRICE',
                    '^$'
                ],
            ]
        },

        # OLF, Version 10
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 10,
            lines            => [ [
                    'COUNTRY',                            'CUSTOMERS',
                    undef,                                undef,
                    undef,                                'PUBLISHER',
                    undef,                                undef,
                    'EAN13',                              'TITLE',
                    undef,                                'AUTHORS',
                    undef,                                'QUANTITY',
                    'ORIGINAL CURRENCY',                  'GROSS UNIT PRICE ORIG.CUR. INCL.VAT',
                    undef,                                undef,
                    'GROSS UNIT PRICE ORIG.CUR. EX. VAT', '% DISCOUNT',
                    'NET UNIT PRICE ORIG.CUR.',           'TOTAL NET PURCHASE PRICE',
                    '^$'
                ],
            ]
        },

        # OLF, Version 11
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 11,
            lines            => [ [
                    'INVOICING',                           undef,
                    undef,                                 undef,
                    'COUNTRY',                             undef,
                    undef,                                 'CUSTOMERS',
                    undef,                                 undef,
                    undef,                                 undef,
                    'PUBLISHER',                           undef,
                    'EAN13',                               'TITLE',
                    undef,                                 'AUTHORS',
                    'QUANTITY',                            undef,
                    undef,                                 'ORIGINAL CURRENCY',
                    'GROSS UNIT PRICE ORIG.CUR. INCL.VAT', 'GROSS UNIT PRICE ORIG.CUR. EX. VAT',
                    '% DISCOUNT',                          'NET UNIT PRICE ORIG.CUR.',
                    'TOTAL NET PURCHASE PRICE',            'TOTAL COMMISSION DUE OLF',
                    '^$',
                ],
            ]
        },

        # OLF, Version 12
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 12,
            lines            => [ [
                    'COUNTRY',                  undef,
                    undef,                      'CUSTOMERS',
                    undef,                      undef,
                    'PUBLISHER',                undef,
                    undef,                      undef,
                    undef,                      undef,
                    'EAN13',                    'TITLE',
                    undef,                      'AUTHORS',
                    undef,                      'QUANTITY',
                    'ORIGINAL CURRENCY',        'GROSS UNIT PRICE ORIG.CUR. INCL.VAT',
                    'NET UNIT PRICE ORIG.CUR.', undef,
                    undef,                      '% DISCOUNT',
                    'TOTAL NET PURCHASE PRICE', '^$'
                ],
            ]
        },

        # OLF version 13 (FBoD 16327)
        {
            service          => BookPub::Tracker::Service::OLF,
            match_on_any_row => 1,
            version          => 13,
            lines            => [ [
                    'INVOICING',                           'COUNTRY',
                    undef,                                 'CUSTOMERS',
                    'PUBLISHER',                           undef,
                    'EAN13',                               'TITLE',
                    'SUBTITLE',                            'AUTHORS',
                    'QUANTITY',                            'ORIGINAL CURRENCY',
                    'GROSS UNIT PRICE ORIG.CUR. INCL.VAT', 'GROSS UNIT PRICE ORIG.CUR. EX. VAT',
                    '% DISCOUNT',                          'NET UNIT PRICE ORIG.CUR.',
                    'TOTAL NET PURCHASE PRICE',            '^$'
                ]
            ]
        },

        # RoyaltyShare - Version 1 (for Ripple)
        {
            service          => BookPub::Tracker::Service::RIPPLE,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 1,
            lines            => [
                [ 'Report Provider', 'Ripple, Inc', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Country Code',
                    'Units',
                    'Price Type',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Ripple (BISG)
        {
            service          => BookPub::Tracker::Service::RIPPLE,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    'HEADER',
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Reporting currency',
                    'Report period from',
                    'Report period to',
                    'Reporting agent name'
                ],
                [ undef, undef, undef, undef, undef, undef, undef, undef, 'Ripple' ],
            ]
        },

        # CEC, Version 3, FB14762
        # This is an RSFORMAT file v3, but we need to maintain the service id association
        # for proper representation on the tracker page. I'm keying off of CEC in the report
        # provider field in the 1st header line.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rules below.
        {
            service => BookPub::Tracker::Service::CEC,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'CEC', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Shanghai Book Traders, Version 3, RSD-3334
        # This is an RSFORMAT file v3, but we need to maintain the service id association
        # for proper representation on the tracker page. I'm keying off of Shanghai Book Trader in the report
        # provider field in the 1st header line.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rules below.
        {
            service => BookPub::Tracker::Service::SHANGHAI_BOOK_TRADERS,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'Shanghai Book Traders', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # PEC, Version 3, RSD-6255
        # This is an RSFORMAT file v3, but we need to maintain the service id association
        # for proper representation on the tracker page.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rules below.
        {
            service => BookPub::Tracker::Service::PEC,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'PEC', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # eConcordia, Version 3, RSD-3017
        # This is an RSFORMAT file v3, but we need to maintain the service id association
        # for proper representation on the tracker page. I'm keying off of eCocordia in the report
        # provider field in the 1st header line.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rules below.
        {
            service => BookPub::Tracker::Service::ECONCORDIA,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'eConcordia', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # MORGAN LIBRARY, Version 3, RSD-718
        # This is an RSFORMAT file v3, but we need to maintain the service id association
        # for proper representation on the tracker page. I'm keying off of Morgal Library in the report
        # provider field in the 1st header line.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rules below.
        {
            service => BookPub::Tracker::Service::MORGAN_LIBRARY,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'Morgan Library', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ]
            ]
        },

        # Western International, Version 1, FB14615
        # This is an RSFORMAT file v3, but we need to maintain the service id association in the first rule line
        # for proper representation on the tracker page.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rule below.
        {
            service => BookPub::Tracker::Service::WESTERN_INTERNATIONAL,
            sheet   => 'any',
            version => 3,
            lines   => [ [
                    'Report Provider',
                    'Western International University',
                    'Total Units', undef, 'Total Payment',
                    undef, 'Payment Currency', undef
                ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Capella, Version 1, FB14501
        # This is an RSFORMAT file v3, but we need to maintain the service id association in the first rule line
        # for proper representation on the tracker page.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rule below.

        # Vital Source v22 (former capella v1) RSD-6811
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            sheet   => 'any',
            version => 22,
            lines   => [
                [ 'Report Provider', 'Capella', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # RSD-4069 - NEMCC v1
        {
            service => BookPub::Tracker::Service::NEMCC,
            sheet   => 'any',
            version => 1,
            lines   => [
                [
                    '^FISCAL$',
                    'TRANSACTION_DATE',
                    '^TRANSACTION$',
                    'CODE_TYPE',
                    'ORDER_NUMBER',
                    'CODE',
                    'DISTRIBUTOR',
                    'POSTAL_CODE',
                    'STATE or PROVINCE',
                    'COUNTRY',
                    'API',
                    'CONTENT_OWNER',
                    'REDISTRIBUTOR',
                    'CODE_TAG',
                    'PO_NUMBER',
                    'TERM_NAME',
                    'PRODUCT_TYPE',
                    'CONTENT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'PRINT_ISBN',
                    'EISBN',
                    'ISBN13',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'DISCOUNT_CODE',
                    'DURATION',
                    'QUANTITY',
                    'LIST_PRICE_TYPE',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'LIST_PRICE_CURRENCY',
                    'UNIT_PRICE',
                    'UNIT_PRICE_TOTAL',
                    'TAX',
                    'INVOICE_CURRENCY',
                    'EXCHANGE_RATE',
                    '^$'
                ],
                [ (undef) x 6, 'Northeast Mississippi Community College' ]
            ]
        },

        # RSD-3948 - Capella v1
        # Vital Source v21 (former Capella v1) RSD-6811
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            sheet   => 'any',
            version => 21,
            lines   => [
                [
                    'FISCAL_MONTH',
                    'TRANSACTION_DATE',
                    'TRANSACTION_TYPE',
                    'CODE_TYPE',
                    'ORDER_NUMBER',
                    'CODE',
                    'DISTRIBUTOR',
                    'POSTAL_CODE',
                    'STATE or PROVINCE',
                    'COUNTRY',
                    'API',
                    'CONTENT_OWNER',
                    'REDISTRIBUTOR',
                    'CODE_TAG',
                    'PO_NUMBER',
                    'TERM_NAME',
                    'PRODUCT_TYPE',
                    'CONTENT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'PRINT_ISBN',
                    'EISBN',
                    'ISBN13',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'DISCOUNT_CODE',
                    'DURATION',
                    'QUANTITY',
                    'LIST_PRICE_TYPE',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'LIST_PRICE_CURRENCY',
                    'UNIT_PRICE',
                    'UNIT_PRICE_TOTAL',
                    'TAX',
                    'INVOICE_CURRENCY',
                    'EXCHANGE_RATE',
                    '^$'
                ],
                [ (undef) x 6, 'Capella University' ]
            ]
        },

        # RSD-4546 - Capella v4 (very similar to v1 but with two additional columns)
        # Vital Source v23 (former Capella) RSD-6811
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            sheet   => 'any',
            match_on_any_row => 1,
            version => 23,
            lines   => [
                [
                    'FISCAL_MONTH',
                    'TRANSACTION_DATE',
                    'TRANSACTION_TYPE',
                    'CODE_TYPE',
                    'ORDER_NUMBER',
                    'CODE',
                    'DISTRIBUTOR',
                    'RINGGOLD ID',
                    'IPEDS ID',
                    'POSTAL_CODE',
                    'STATE or PROVINCE',
                    'COUNTRY',
                    'API',
                    'CONTENT_OWNER',
                    'REDISTRIBUTOR',
                    'CODE_TAG',
                    'PO_NUMBER',
                    'TERM_NAME',
                    'PRODUCT_TYPE',
                    'CONTENT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'PRINT_ISBN',
                    'EISBN',
                    'ISBN13',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'DISCOUNT_CODE',
                    'DURATION',
                    'QUANTITY',
                    'LIST_PRICE_TYPE',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'LIST_PRICE_CURRENCY',
                    'UNIT_PRICE',
                    'UNIT_PRICE_TOTAL',
                    'TAX',
                    'INVOICE_CURRENCY',
                    'EXCHANGE_RATE',
                    '^$'
                ],
            ]
        },

        # Vital Source v24 (RSD-7393), similar to v23 but wuth shifted columns
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            sheet   => 'any',
            version => 24,
            lines   => [
                [
                    'FISCAL_MONTH',
                    'TRANSACTION_DATE',
                    'TRANSACTION_TYPE',
                    'CODE_TYPE',
                    'ORDER_NUMBER',
                    'CODE',
                    'DISTRIBUTOR',
                    'RINGGOLD ID',
                    'IPEDS ID',
                    'POSTAL_CODE',
                    'STATE or PROVINCE',
                    'COUNTRY',
                    'API',
                    'CONTENT_OWNER',
                    'REDISTRIBUTOR',
                    'CODE_TAG',
                    'PO_NUMBER',
                    'TERM_NAME',
                    'PRODUCT_TYPE',
                    'CONTENT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'PRINT_ISBN',
                    'EISBN',
                    'ISBN13',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'DISCOUNT_CODE',
                    'DURATION',
                    'QUANTITY',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'LIST_PRICE_CURRENCY',
                    'UNIT_PRICE',
                    'UNIT_PRICE_TOTAL',
                    'TAX',
                    'INVOICE_CURRENCY',
                    'EXCHANGE_RATE',
                    '^$'
                ],
            ]
        },

        # Corban University, Version 1, FB17217
        # This is an RSFORMAT file v3, but we need to maintain the service id association in the first rule line
        # for proper representation on the tracker page.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rule below.
        {
            service => BookPub::Tracker::Service::CORBAN_UNIVERSITY,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'Corban University', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Proquest, Version 3, FB21926
        # This is an RSFORMAT file v3, but we need to maintain the service id association
        # for proper representation on the tracker page. I'm keying off of "Proquest" in the report
        # provider field in the 1st header line.
        # NOTE: this rule needs to be placed before the RSFORMAT version 3 rules below.
        {
            service => BookPub::Tracker::Service::PROQUEST,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'Proquest', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # William Perkins Library version 3 instead of previous RoyaltyShare - Version 3 (RSD-3973)
        {
            service => BookPub::Tracker::Service::WILLIAM_PERKINS_LIBRARY,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'William Perkins Library', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Penn Foster version 3 - RoyaltyShare - Version 3 (RSD-4833)
        {
            service => BookPub::Tracker::Service::PENN_FOSTER,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'Penn Foster', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Leo Dehon Library version 3. Based on RoyaltyShare v3 format. (RSD-4192)
        {
            service => BookPub::Tracker::Service::LEO_DEHON_LIBRARY,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'Leo Dehon Library', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Youngstown State v3 (RSD-4336). Based on RoyaltyShare v3 format.
        {
            service          => BookPub::Tracker::Service::YOUNGSTOWN_STATE,
            match_on_any_row => 1,
            sheet            => 'any',
            version          => 3,
            lines            => [
                [ 'Report Provider', 'Youngstown State', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment',
                    '^$'
                ],
            ]
        },

        # Wright State version 1 (RSD-4455). Based on RoyaltyShare v3 format.
        {
            service => BookPub::Tracker::Service::WRIGHT_STATE,
            version => 3,
            lines   => [ [
                'Report Provider', 'Wright State', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef, '^$'
                ],
                [
                'Sale Start Date',
                'Sale End Date',
                'Distributor Name',
                'Service Name',
                'ISBN',
                'Title',
                'Sub-Title',
                'Author Name',
                'Publisher Name',
                'Imprint Name',
                'Product Type',
                'Epub Type',
                'Purchase Type',
                'State',
                'Postal Code',
                'Country Code',
                'Institution',
                'Duration',
                'Price Type',
                'Units',
                'Purchase Price',
                'Purchase Price Currency',
                'List Price',
                'List Price Currency',
                'Publisher Discount',
                'Tax Amount',
                'Net Price \(List Currency\)',
                'Currency Conversion',
                'Net Price \(Payment Currency\)',
                'Net Payment',
                '^$'
            ] ],
        },

        # Catholic Distance University (RSD-4593). Based on RoyaltyShare v3 format.
        {
            service => BookPub::Tracker::Service::CATHOLIC_DISTANCE_UNIVERSITY,
            version => 3,
            lines   => [ [
                'Report Provider', 'Catholic Distance University', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef, '^$'
                ],
                [
                'Sale Start Date',
                'Sale End Date',
                'Distributor Name',
                'Service Name',
                'ISBN',
                'Title',
                'Sub-Title',
                'Author Name',
                'Publisher Name',
                'Imprint Name',
                'Product Type',
                'Epub Type',
                'Purchase Type',
                'State',
                'Postal Code',
                'Country Code',
                'Institution',
                'Duration',
                'Price Type',
                'Units',
                'Purchase Price',
                'Purchase Price Currency',
                'List Price',
                'List Price Currency',
                'Publisher Discount',
                'Tax Amount',
                'Net Price \(List Currency\)',
                'Currency Conversion',
                'Net Price \(Payment Currency\)',
                'Net Payment',
                '^$'
            ] ],
        },

        # WKU (RSD-5000). Based on RoyaltyShare v3 format.
        {
            service => BookPub::Tracker::Service::WKU,
            version => 3,
            lines   => [ [
                'Report Provider', 'WKU', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef, '^$'
                ],
                [
                'Sale Start Date',
                'Sale End Date',
                'Distributor Name',
                'Service Name',
                'ISBN',
                'Title',
                'Sub-Title',
                'Author Name',
                'Publisher Name',
                'Imprint Name',
                'Product Type',
                'Epub Type',
                'Purchase Type',
                'State',
                'Postal Code',
                'Country Code',
                'Institution',
                'Duration',
                'Price Type',
                'Units',
                'Purchase Price',
                'Purchase Price Currency',
                'List Price',
                'List Price Currency',
                'Publisher Discount',
                'Tax Amount',
                'Net Price \(List Currency\)',
                'Currency Conversion',
                'Net Price \(Payment Currency\)',
                'Net Payment',
                '^$'
            ] ],
        },

        # RSD-5530 - Acrobatiq (RS)
        {
            service => BookPub::Tracker::Service::ACROBATIQ,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', 'Acrobatiq', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # De Marque (RSD-4764). Based on RoyaltyShare v3 format.
        {
            service => BookPub::Tracker::Service::DE_MARQUE,
            version => 2,
            lines   => [ [
                'Report Provider', 'De Marque', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef, '^$'
                ],
                [
                'Sale Start Date',
                'Sale End Date',
                'Distributor Name',
                'Service Name',
                'ISBN',
                'Title',
                'Sub-Title',
                'Author Name',
                'Publisher Name',
                'Imprint Name',
                'Product Type',
                'Epub Type',
                'Purchase Type',
                'State',
                'Postal Code',
                'Country Code',
                'Institution',
                'Duration',
                'Price Type',
                'Units',
                'Purchase Price',
                'Purchase Price Currency',
                'List Price',
                'List Price Currency',
                'Publisher Discount',
                'Tax Amount',
                'Net Price \(List Currency\)',
                'Currency Conversion',
                'Net Price \(Payment Currency\)',
                'Net Payment',
                '^$'
            ] ],
        },

        # De Marque Version 3 (RSD-11132).
        {
            service => BookPub::Tracker::Service::DE_MARQUE,
            version => 3,
            lines   => [ [
                'Sale ID',
                'Transaction ID',
                'Invoice number',
                'Transaction date',
                'Integration date',
                'Transaction type',
                'Value',
                'Quantity',
                'List Price',
                'Currency',
                'Publisher Price',
                'Publisher Price Currency',
                'Original amount, excluding taxes',
                'Exchange rate',
                'Payment to publisher',
                'Payment currency',
                'Refund cost difference',
                'Refund cost difference currency',
                'Client ID',
                'Customer\'s country',
                'Province\/Department',
                'Customer County',
                'Postal code',
                'Sale fulfilled by',
                'Bookstore identifier',
                'Bookstore name',
                'Bookstore billing identifier',
                'Publisher identifier',
                'Publisher name',
                'Distributor identifier',
                'Distributor name',
                'Title',
                'Format',
                'Protection',
                'State',
                'Reason for the refund',
                'Alternate identifier',
                'Market',
                'Source of the original amount, excluding taxes',
                'List Price \((?:base|preferred) currency\)',
                'Original amount, excluding taxes \((?:base|preferred) currency\)',
                'Purchase model',
                'Invoice Number',
                '^$'
            ] ],
        },

        # Columbia Southern University (RSD-5551). Based on RoyaltyShare v3 format.
        {
            service => BookPub::Tracker::Service::COLUMBIA_SOUTHERN_UNIVERSITY,
            version => 3,
            lines   => [ [
                'Report Provider', 'Columbia Southern University', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef, '^$'
                ],
                [
                'Sale Start Date',
                'Sale End Date',
                'Distributor Name',
                'Service Name',
                'ISBN',
                'Title',
                'Sub-Title',
                'Author Name',
                'Publisher Name',
                'Imprint Name',
                'Product Type',
                'Epub Type',
                'Purchase Type',
                'State',
                'Postal Code',
                'Country Code',
                'Institution',
                'Duration',
                'Price Type',
                'Units',
                'Purchase Price',
                'Purchase Price Currency',
                'List Price',
                'List Price Currency',
                'Publisher Discount',
                'Tax Amount',
                'Net Price \(List Currency\)',
                'Currency Conversion',
                'Net Price \(Payment Currency\)',
                'Net Payment',
                '^$'
            ] ],
        },

        # Hekman Library (RSD-7218). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::HEKMAN_LIBRARY,
            sheet   => 'any',
            version => 4,
            lines   => [
                [ 'Service Name', 'Hekman Library', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Cambridge Business Publishers (RSD-9196). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::CAMBRIDGE_BUSINESS_PUBLISHERS,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Service Name', 'Cambridge Business Publishers', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # University of Mississippi (RSD-9508). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::UNIVERSITY_OF_MISSISSIPPI,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Service Name', 'University of Mississippi', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },


        # Buku (RSD-8739). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::BUKU,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Service Name', 'University of Buku', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Skillsoft (RSD-9525). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::SKILLSOFT,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Service Name', 'Skillsoft', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Bloomsbury – Direct Sales (RSD-10473). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::BLOOMSBURY_DIRECT_SALES,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Service Name', 'Bloomsbury - Direct Sales', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Baccah IT (RSD-11353). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::BACCAH_IT,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Service Name', 'Baccah IT', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Box of Books (RSD-11355). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::BOX_OF_BOOKS,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Service Name', 'Box of Books', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # Polyteknisk (RSD-11386). Based on RoyaltyShare v4 format.
        {
            service => BookPub::Tracker::Service::POLYTEKNISK,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Service Name', 'Polyteknisk', 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # RoyaltyShare - Version 1
        {
            service => BookPub::Tracker::Service::RSFORMAT,
            sheet   => 'any',
            version => 1,
            lines   => [
                [ 'Report Provider', undef, 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Country Code',
                    'Units',
                    'Price Type',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # RoyaltyShare - Version 2
        {
            service => BookPub::Tracker::Service::RSFORMAT,
            sheet   => 'any',
            version => 2,
            lines   => [
                [ 'Report Provider', undef, 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Country Code',
                    'Units',
                    'Price Type',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # RoyaltyShare - Version 3
        {
            service => BookPub::Tracker::Service::RSFORMAT,
            sheet   => 'any',
            version => 3,
            lines   => [
                [ 'Report Provider', undef, 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },
        ###
        # Random House Format
        ###
        {
            service => BookPub::Tracker::Service::CHRISTIANBOOK,
            version => 2,
            lines   => [
                [ 'H', 'Christian Book Distributors', '^\d+$', '\d{8}', '\d+', '^[yYnN]?$' ],
                [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ],
            ]
        },
        {
            service => BookPub::Tracker::Service::DNAML,
            version => 2,
            lines   => [ [ 'H', 'DNAML', '^\d+$', '\d{8}', '\d+', '^[yYnN]?$' ], [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ], ]
        },
        {
            service => BookPub::Tracker::Service::MOBIPOCKET,
            version => 2,
            lines   => [
                [ 'H', 'Mobipocket eBookBase', '^\d+$', '\d{8}', '\d+', '^[yYnN]?$' ],
                [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ],
            ]
        },
        {
            service => BookPub::Tracker::Service::BAKERANDTAYLOR,
            version => 1,
            lines =>
              [ [ 'H', 'BAKERANDTAYLOR', '^\d+$', '\d{8}', '\d+', '^[yYnN]?$' ], [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ], ]
        },
        {
            service => BookPub::Tracker::Service::OVERDRIVE,
            version => 3,
            lines =>
              [ [ 'H', 'OverDrive', '^\d+$', '\d{8}', '\d+', '^[yYnN]?$' ], [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ], ]
        },
        {
            service => BookPub::Tracker::Service::GOSPOKEN,
            version => 1,
            lines => [ [ 'H', 'GoSpoken', '^\d+$', '\d{8}', '\d+', '^[yYnN]?$' ], [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ], ]
        },
        {
            service => BookPub::Tracker::Service::SCROLL_MOTION,
            version => 3,
            lines   => [
                [ 'H', 'ScrollMotion Inc', '^\d+$', '\d{8}', '\d+', '^[yYnN]?$' ],
                [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ],
            ]
        },
        {
            service => BookPub::Tracker::Service::FICTIONWISE,
            version => 2,
            lines   => [ [ 'H', 'Fictionwise', '^\d+$', '\d{8}' ], [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ], ]
        },
        {
            service => BookPub::Tracker::Service::SONY,
            version => 6,
            lines   => [ [ 'H', 'Sony', undef, undef, '\d{8}' ], [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+' ], ]
        },
        {
            service => BookPub::Tracker::Service::KOBO,
            version => 11,
            lines   => [
                [ 'H', '^$', '^$', '^$', '^$' ], [ 'D', '\d{8}', '\d{13}', undef, undef, undef, '^\d+', 'USD', undef, '^\d+$', '^Kobo$' ],
            ]
        },

        # BISG - Baker and Taylor
        {
            service => BookPub::Tracker::Service::BAKERANDTAYLOR,
            version => 2,
            lines   => [
                [undef],
                [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Reporting price type',
                    'Reporting currency',
                    'Report period from',
                    'Report period to',
                    'Report date',
                    'Class of trade / sale',
                    'Sales territory'
                ],
                [undef],
                [undef],
                [undef],
                [
                    'Row type',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction.*',
                    undef,
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main.*',
                    'Main.*',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale.*',
                    'Class of trade / sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned value',
                    'Net.*',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher'
                ],
            ]
        },

        # BISG - Baker and Taylor, Version 8
        {
            service => BookPub::Tracker::Service::BAKERANDTAYLOR,
            version => 8,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    '^$'
                ],
                [undef],
                [undef],
                [undef],
                [undef],
                [
                    'Publisher',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date.*',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main.*',
                    'Main.*',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale.*',
                    'Class of trade / sale',
                    'Sales territory',
                    '.*Unit price.*',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned value',
                    'Net.*',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Currency conversion rate',
                    'List price'
                ],
            ]
        },

        # BISG - Baker and Taylor, Version 7
        {
            service => BookPub::Tracker::Service::BAKERANDTAYLOR,
            version => 7,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade / sale',
                    'Sales territory'
                ],
                [undef],
                [undef],
                [undef],
                [undef],
                [
                    'Publisher',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date.*',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main.*',
                    'Main.*',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale.*',
                    'Class of trade / sale',
                    'Sales territory',
                    '.*Unit price.*',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned value',
                    'Net.*',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Currency conversion rate',
                    'List price'
                ],
            ]
        },

        # BISG - Baker and Taylor
        {
            service => BookPub::Tracker::Service::BAKERANDTAYLOR,
            version => 5,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade / sale',
                    'Sales territory'
                ],
                [undef],
                [undef],
                [undef],
                [undef],
                [
                    'Publisher',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction',
                    'Agent',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main.*',
                    'Main.*',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale',
                    'Class of trade',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned value',
                    'Net.*',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher'
                ],
            ]
        },

        # BISG - Baker and Taylor
        {
            service => BookPub::Tracker::Service::BAKERANDTAYLOR,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Report period from',
                    'Report period to',
                    'Report date',
                    'Reporting Currency'
                ],
                [undef],
                [undef],
                [undef],
                [undef],
                [
                    'Publisher',
                    'Line item ID#',
                    'Ship-to country',
                    'Ship-to state',
                    'Ship-to county',
                    'Ship-to city',
                    'Ship-to district',
                    'Ship-to ZIP',
                    'Ship-to location',
                    'Ship-to location',
                    'Bill-to state',
                    'Bill-to county',
                    'Bill-to city',
                    'Bill-to district',
                    'Bill-to ZIP',
                    'Bill-to location',
                    'Bill-to location',
                    'Bill-to tax registration number',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date',
                    'Agent\'s transaction ID#',
                    'Additional reference type',
                    'Additional reference ID#',
                    'Main product',
                    'Main product',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author',
                    'Product',
                    'Publisher or Imprint ID#',
                    'Publisher or Imprint Name',
                    'Quantity sold',
                    'Unit selling price',
                    'Agent\'s commission',
                    'Fee type\(s\)',
                    'Total fee amount',
                    'Currency',
                    'Sales value',
                    'Good / service classification',
                    'US State Sales Tax',
                    'US State Sales Tax',
                    'US State Sales Tax',
                    'US County Sales Tax',
                    'US County Sales Tax',
                    'US County Sales Tax',
                    'US City Sales Tax',
                    'US City Sales Tax',
                    'US City Sales Tax',
                    'US District',
                    'US District',
                    'US District',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Non-US',
                    'Total tax collected',
                ],

            ]
        },

        # BISG - Baker and Taylor
        {
            service => BookPub::Tracker::Service::BAKERANDTAYLOR,
            version => 3,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Reporting price type',
                    'Reporting currency',
                    'Report period from',
                    'Report period to',
                    'Report date',
                    'Class of trade / sale',
                    'Sales territory'
                ],
            ]
        },

        # HBG - Baker and Taylor
        {
            service => BookPub::Tracker::Service::BAKERANDTAYLOR,
            version => 6,
            lines   => [
                ( [undef] ) x 4,
                [
                    'OEM',                  'Customer#', 'Publisher',           'Invoice#',
                    'Date',                 'Country',   'State',               'County',
                    'City',                 'Zip',       'ISBN 13',             'Product Title',
                    'Author/Artist',        'Net Units', 'Currency',            'Regular List Price',
                    'Promotion List Price', 'Net Sales', 'Adjusted Pub Margin', 'Promotion Code'
                ],
            ]
        },

        # Learn Out Loud
        {
            service => BookPub::Tracker::Service::LEARN_OUT_LOUD,
            version => 1,
            lines =>
              [ [ 'Quantity Sold', 'Title', 'Author', 'SDP', 'SDP Total', 'Discount', 'Total Due', 'Download ID', 'Territory', '^$' ], ]
        },

        # Learn Out Loud
        {
            service => BookPub::Tracker::Service::LEARN_OUT_LOUD,
            version => 2,
            lines   => [ [ 'Date', 'Title', 'Author', 'SDP', 'Discount', 'Total Due', 'Download ISBN', 'Territory', '^$' ], ]
        },

        # Learn Out Loud
        {
            service => BookPub::Tracker::Service::LEARN_OUT_LOUD,
            version => 3,
            lines => [ [ 'Quantity', 'Title', 'Author', 'SDP', 'Discount', 'SDP Total', 'Total Due', 'Download ISBN', 'Territory', '^$' ], ]
        },

        # KiwiTech
        {
            service => BookPub::Tracker::Service::KIWITECH,
            version => 1,
            lines   => [
                [undef],
                [undef],
                [
                    'Start Date',
                    'End Date',
                    'Vendor Identifier',
                    'Title',
                    'Country Of Sale',
                    'Customer Price',
                    'Customer Currency',
                    'Sales or Return',
                    'Quantity',
                    'Partner Share Currency',
                    'Non-Apple Share',
                    'Extended Non-Apple Share',
                    'Exchange Rate',
                    'Publisher Share \(\$\)',
                    'Extended Publisher Share \(\$\)'
                ],
            ]
        },

        # Libri
        {
            service => BookPub::Tracker::Service::LIBRI,
            version => 1,
            lines   => [ [
                    'Lizenznehmer',           'Libri Verkehrsnummer',   'Datum',                   'PosRefNr',
                    'ISBN13',                 'Libri\.Digital ID',      'Titel',                   'Autor\(en\)',
                    'Libri Netto-EK \[EUR\]', 'Libri EK-Rabatt \[\%\]', 'USt. \[\%\]',             'Menge',
                    'Netto-VK \[EUR\]',       'ISBN13 Related Product', 'Herstellerartikelnummer', 'Einbandart',
                    'Beleg-Nr'
                ],
            ]
        },

        # Libri
        {
            service => BookPub::Tracker::Service::LIBRI,
            version => 2,
            lines   => [ [
                    'Licensee',
                    'Libri ID',
                    'Date of Sales Report',
                    'PosRefNr',
                    'ISBN13',
                    'Libri.Digital ID',
                    'Title',
                    'Author\(s\)',
                    'Wholesale Purchase Price Net',
                    'Wholesale Purchase Price Currency',
                    'Publisher Wholesale Discount \[%\]',
                    'VAT \[%\]',
                    'Quantity',
                    'Sales Price Net',
                    'Sales Price Currency',
                    'ISBN13 Related Product',
                    'Publisher Article ID',
                    'Format',
                    'Credit Note No.',
                    'Date of Sale',
                    '^$'
                ],
            ]
        },

        # Libri, version 3 FB15166
        {
            service => BookPub::Tracker::Service::LIBRI,
            version => 3,
            lines   => [ [
                    'SalesReportNumber',            'IssueDateTime',
                    'SalesPeriodStart',             'SalesPeriodEnd',
                    'SellerPartyIDType',            'SellerPartyIDIdentifier',
                    'PublisherPartyIDType',         'PublisherPartyIDIdentifier',
                    'ProductIDLibriDigital',        'ProductIDEAN13',
                    'ProductIDPublisher',           'Title',
                    'Author',                       'FormatCode',
                    'Quantity',                     'ReportItemReference',
                    'CreditNoteReference',          'OrderReference',
                    'TerritoryOfSale',              'TransactionDate',
                    'ClassOfSale',                  'PriceQualifierCode',
                    'PriceMonetaryAmount',          'PriceCurrencyCode',
                    'PriceCountryCode',             'PriceTaxPercent',
                    'PriceTaxTaxAmount',            'DiscountPercentage',
                    'DueToPublisherNetAmount',      'DueToPublisherCurrencyCode',
                    'DueToPublisherCountryCode',    'RelatedProductIDType',
                    'RelatedProductIDIdentifier',   'SecondaryPriceQualifierCode',
                    'SecondaryPriceMonetaryAmount', 'SecondaryPriceCurrencyCode',
                    'SecondaryPriceCountryCode',    'SecondaryPriceTaxPercent',
                    'SecondaryPriceTaxTaxAmount',   'LinesSalesAmounts_TAX',
                    '^$'
                ]
            ]
        },

        # Libri, version 4 FBoD17430
        {
            service => BookPub::Tracker::Service::LIBRI,
            version => 4,
            lines   => [ [
                    'SalesReportNumber',            'IssueDateTime',
                    'SalesPeriodStart',             'SalesPeriodEnd',
                    'SellerPartyIDType',            'SellerPartyIDIdentifier',
                    'PublisherPartyIDType',         'PublisherPartyIDIdentifier',
                    'ProductIDLibriDigital',        'ProductIDEAN13',
                    'ProductIDPublisher',           'Title',
                    'Author',                       'FormatCode',
                    'Quantity',                     'ReportItemReference',
                    'CreditNoteReference',          'OrderReference',
                    'TerritoryOfSale',              'TransactionDate',
                    'ClassOfSale',                  'PriceQualifierCode',
                    'PriceMonetaryAmount',          'PriceCurrencyCode',
                    'PriceCountryCode',             'PriceTaxPercent',
                    'PriceTaxTaxAmount',            'DiscountPercentage',
                    'DueToPublisherNetAmount',      'DueToPublisherCurrencyCode',
                    'DueToPublisherCountryCode',    'RelatedProductIDType',
                    'RelatedProductIDIdentifier',   'SecondaryPriceQualifierCode',
                    'SecondaryPriceMonetaryAmount', 'SecondaryPriceCurrencyCode',
                    'SecondaryPriceCountryCode',    'SecondaryPriceTaxPercent',
                    'SecondaryPriceTaxTaxAmount',   'LinesSalesAmounts_TAX',
                    'RefundedQuantity',             'ReportItemReferenceOrder',
                    'OrderReferenceCancel',         'CancelReason',
                    '^$'
                ]
            ]
        },

        # Libri, version 5 RSD-4811
        {
            service => BookPub::Tracker::Service::LIBRI,
            version => 5,
            lines   => [ [
                    'SalesReportNumber',
                    'IssueDateTime',
                    'SalesPeriodStart',
                    'SalesPeriodEnd',
                    'SellerPartyIDType',
                    'SellerPartyIDIdentifier',
                    'PublisherPartyIDType',
                    'PublisherPartyIDIdentifier',
                    'ProductIDLibriDigital',
                    'ProductIDEAN13',
                    'ProductIDPublisher',
                    'Title',
                    'Author',
                    'FormatCode',
                    'Quantity',
                    'ReportItemReference',
                    'CreditNoteReference',
                    'OrderReference',
                    'TransactionType',
                    'TerritoryOfSale',
                    'TransactionDate',
                    'ClassOfSale',
                    'PriceQualifierCode',
                    'PriceMonetaryAmount',
                    'PriceCurrencyCode',
                    'PriceCountryCode',
                    'PriceTaxPercent',
                    'PriceTaxAmount',
                    'ExchangeRateToEURO',
                    'DiscountPercentage',
                    'DueToPublisherExchangeRate',
                    'DueToPublisherNetAmount',
                    'DueToPublisherCurrencyCode',
                    'DueToPublisherCountryCode',
                    'DueToPublisherTaxPercent',
                    'DueToPublisherTaxAmount',
                    'SecondaryPriceQualifierCode',
                    'SecondaryPriceMonetaryAmount',
                    'SecondaryPriceCurrencyCode',
                    'SecondaryPriceCountryCode',
                    'SecondaryPriceTaxPercent',
                    'SecondaryPriceTaxAmount',
                    'RetailerName',
                    'RefundedQuantity',
                    'ReportItemReferenceOrder',
                    'OrderReferenceCancel',
                    'CancelReason',
                    '^$'
                ]
            ]
        },

        # christianaudio
        {
            service => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version => 1,
            lines   => [
                [undef],
                [undef],
                [
                    undef, undef, undef, undef, undef, 'Product', 'ISBN', 'Qty.', undef, undef, 'Cash Price', 'Subscrip. Price',
                    'Sub Total', 'Royalty'
                ],
            ],
        },

        # christianaudio
        {
            service => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version => 2,
            lines   => [
                [undef],
                [undef],
                [
                    undef, undef, undef, undef, undef, undef, 'Product', 'ISBN', 'Qty.', undef, undef, 'Cash Price', 'Subscrip. Price',
                    'Sub Total', 'Royalty'
                ],
            ],
        },

        # christianaudio
        {
            service => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version => 3,
            lines   => [
                [undef], [undef], [undef],
                [ undef, 'Order ID', 'Title', 'Website', 'ISBN', 'Payable Qty', 'Total Price', 'Total Sub\. Price', 'Royalty Due' ],
            ],
        },

        # christianaudio
        {
            service => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version => 4,
            lines   => [
                [undef], [undef], [undef],
                [ 'Order ID', 'Title', 'Website', 'ISBN', 'Payable Qty', 'Total Price', 'Total Sub\. Price', 'Royalty %', 'Royalty Due' ],
            ],
        },

        # christianaudio, now echristian
        {
            service          => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version          => 5,
            match_on_any_row => 1,
            lines            => [ [
                    'Order ID', 'Placed On', 'Title', 'Website', 'ISBN', 'Payable Qty',
                    'List Price|Total Price',
                    'Total Sub. Price',
                    'Royalty %', 'Royalty Due'
                ],

            ],
        },

        # christianaudio, now echristian
        {
            service          => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version          => 6,
            match_on_any_row => 1,
            lines            => [ [
                    'Order Id',
                    'Website',
                    'Transaction Date',
                    'Transaction Time',
                    'ISBN / eISBN',
                    'Title',
                    'List Price',
                    'Sale Price',
                    'Sales Tax Amount',
                    'Qty Ordered',
                    'Qty Refunded',
                    'Customer Id',
                    'State',
                    'Zip',
                    'Country',
                    'Payable Qty',
                    'Royalty Payable',
                    'Tax Payable'
                ],

            ],
        },

        # christianaudio, now echristian
        {
            service          => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version          => 7,
            match_on_any_row => 1,
            lines            => [ [
                    'Website',
                    'Order ID|Order Id',
                    'Order Date',
                    'Title',
                    'State',
                    'Post Code',
                    'Country',
                    'Qty Invoiced',
                    'Qty Refunded',
                    'ISBN',
                    'List Price',
                    'Promo Price',
                    'Sale Price',
                    'Tax',
                    'Payable Qty',
                    'Royalty Payable',
                    'Tax Payable'
                ],

            ],
        },

        # christianaudio/echristian
        {
            service          => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version          => 8,
            match_on_any_row => 1,
            lines            => [ [
                    'Order ID',
                    'Order Date PST',
                    'Title',
                    'Website',
                    'ISBN',
                    'Payable Qty',
                    'Cash Price',
                    'Subscrip Price',
                    'Royalty %',
                    'Royalty Due'
                ],
            ],
        },

        # christianaudio/echristian
        {
            service          => BookPub::Tracker::Service::CHRISTIANAUDIO,
            version          => 9,
            match_on_any_row => 1,
            lines            => [ [
                    'Order ID',
                    'Order Date PST',
                    'Title',
                    'Website',
                    'ISBN',
                    'Payable Qty',
                    'Cash Price',
                    'Subscrip Price',
                    'TL Price',
                    'Royalty %',
                    'Royalty Due'
                ],
            ],
        },

        # jonathan ball
        {
            service => BookPub::Tracker::Service::JONATHAN_BALL,
            version => 1,
            lines   => [ [undef], [ 'ISBN', 'TITLE', 'SALES QTY', 'BUYING PRICE', 'SUPPLIER DISC', 'NET PAYMENT' ], ],
        },

        # jonathan ball
        {
            service => BookPub::Tracker::Service::JONATHAN_BALL,
            version => 2,
            lines   => [ [
                    'Vendor Id',
                    'Publisher',
                    'EBook ISBN',
                    'EBook Desc',
                    'Author',
                    'Country of Sale',
                    'Date of Sale',
                    'DLP Per Unit',
                    'Reseller DLP Currency',
                    'Discount',
                    'Publisher Proceeds Per Unit',
                    'Unit Proceeds Currency',
                    'Quantity Sold',
                    'Total Publisher Proceeds',
                    'Payment Currency'
                ],
            ],
        },

        # Anobii
        {
            service => BookPub::Tracker::Service::ANOBII,
            version => 1,
            sheet   => 'any',
            lines   => [
                [ 'PUBLISHER:', undef, undef, 'PERIOD START:', undef, 'CURRENCY', '\w{3}' ],
                [ undef,        undef, undef, 'PERIOD END:',   undef ],
                [undef],
                [
                    'DATE',
                    'TITLE & SUB-TITLE',
                    'ANOBII PURCHASE ID',
                    'ISBN',
                    'AUTHOR',
                    'IMPRINT',
                    'COUNTRY CODE',
                    'UNITS SOLD',
                    'UNITS REFUNDED',
                    'PRICE PAID INC TAX',
                    'SALES TAX PAID',
                    'RRP INC TAX',
                    'RRP EXC TAX',
                    'ANOBII STANDARD DISCOUNT',
                    'ANOBII PROMO DISCOUNT',
                    'ANOBII COMMISSION',
                    'PUBLISHER PROCEEDS'
                ],
            ],
        },

        # Anobii, v2
        {
            service => BookPub::Tracker::Service::ANOBII,
            version => 2,
            sheet   => 'any',
            lines   => [
                [ 'PUBLISHER:', undef, undef, 'PERIOD START:', undef, 'CURRENCY', '\w{3}' ],
                [ undef,        undef, undef, 'PERIOD END:',   undef ],
                [undef],
                [
                    'DATE',
                    'TITLE & SUB-TITLE',
                    'ANOBII PURCHASE ID',
                    'ISBN',
                    'AUTHOR',
                    'IMPRINT',
                    'COUNTRY CODE',
                    'UNITS SOLD',
                    'UNITS REFUNDED',
                    'PRICE PAID INC TAX',
                    'SALES TAX PAID',
                    'RRP INC TAX',
                    'RRP EXC TAX',
                    'ANOBII STANDARD DISCOUNT',
                    'DISCOUNT PERCENTAGE',
                    'ANOBII PROMO DISCOUNT',
                    'ANOBII COMMISSION',
                    'PUBLISHER PROCEEDS',
                    'CURRENCY',
                    'PRICE PAID EXC TAX'
                ],
            ],
        },

        # Anobii, v2 (slightly different columns C, N, P and Q; FB9020)
        {
            service => BookPub::Tracker::Service::ANOBII,
            version => 2,
            sheet   => 'any',
            lines   => [
                [ 'PUBLISHER:', undef, undef, 'PERIOD START:', undef, 'CURRENCY', '\w{3}' ],
                [ undef,        undef, undef, 'PERIOD END:',   undef ],
                [undef],
                [
                    'DATE',
                    'TITLE & SUB-TITLE',
                    'SAINSBURYS PURCHASE ID|SAINSBURYSPURCHASE ID',
                    'ISBN',
                    'AUTHOR',
                    'IMPRINT',
                    'COUNTRY CODE',
                    'UNITS SOLD',
                    'UNITS REFUNDED',
                    'PRICE PAID INC TAX',
                    'SALES TAX PAID',
                    'RRP INC TAX',
                    'RRP EXC TAX',
                    'SAINSBURYS STANDARD DISCOUNT|SAINSBURYSSTANDARD DISCOUNT',
                    'DISCOUNT PERCENTAGE',
                    'SAINSBURYS PROMO DISCOUNT|SAINSBURYSPROMO DISCOUNT',
                    'SAINSBURYS COMMISSION|SAINSBURYSCOMMISSION',
                    'PUBLISHER PROCEEDS',
                    'CURRENCY',
                    'PRICE PAID EXC TAX',
                    'PUBLISHER FUNDED PRICE'
                ],
            ],
        },

        # Anobii (Sainsbury's Entertainemnt), v3
        {
            service => BookPub::Tracker::Service::ANOBII,
            version => 3,
            sheet   => 'any',
            lines   => [
                [ 'PUBLISHER:', undef, undef, 'PERIOD START:', undef, 'CURRENCY', '\w{3}' ],
                [ undef,        undef, undef, 'PERIOD END:',   undef ],
                [undef],
                [
                    'order_date',     'title',              'subtitle',                   'isbn',
                    'authors',        'Publisher Names',    'imprint',                    'units_sold',
                    'units_refunded', 'price_paid_inc_tax', 'price_paid_exc_tax',         'sales_tax_paid',
                    'rrp_inc_tax',    'rrp_exc_tax',        'publisher_proceeds_exc_vat', 'currency',
                    '^$'
                ],
            ],
        },

        # Anobii (Sainsbury's Entertainemnt), v4
        {
            service => BookPub::Tracker::Service::ANOBII,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'isbn',               'title',               'subtitle',  'authors',
                    'publisher',          'imprint_name',        'order_id',  'order_date',
                    'units_sold',         'units_refunded',      'currency',  'rrp_inc_tax',
                    'rrp_exc_tax',        'sales_price_inc_vat', 'sales_vat', 'sales_price_exc_vat',
                    'cost_price_exc_vat', '|currency',           '^$'
                ],
            ],
        },

        # Anobii (Sainsbury's Entertainemnt), v5
        {
            service => BookPub::Tracker::Service::ANOBII,
            version => 5,
            sheet   => 'any',
            lines   => [ [
                    'isbn',                  'title',                  'subtitle',       'authors',
                    'publisher',             'imprint_name',           'order_id',       'order_date',
                    'units_\s?sold',         'units_\s?refunded',      'Country\s?Code', 'rrp_inc_\s?tax',
                    'rrp_exc_\s?tax',        'sales_price_\s?inc_vat', 'sales_vat',      'sales_price_exc_vat',
                    'cost_price_\s?exc_vat', 'currency',               '^$'
                ],
            ],
        },

        # Anobii (Sainsbury's Entertainemnt), v6
        {
            service => BookPub::Tracker::Service::ANOBII,
            version => 6,
            sheet   => 'any',
            lines   => [ [
                    'ISBN',                              'title',
                    'subtitle',                          'authors',
                    'supplier_short_name',               'publisher',
                    'imprint_name',                      'bic_code',
                    'bic_name',                          'order_id',
                    'order_date',                        'units_sold',
                    'refund_id',                         'refund_date',
                    'units_refunded',                    'currency',
                    'rrp_inc_tax',                       'rrp_exc_tax',
                    'vat_rate',                          'sales_price_inc_vat',
                    'sales_price_pre_promotion_inc_vat', 'sales_price_exc_vat',
                    'sales_price_pre_promotion_exc_vat', 'cost_price_inc_vat',
                    'cost_price_exc_vat',                '^$'
                ],
            ],
        },

        # Anobii (Sainsbury's Entertainemnt), v7
        {
            service          => BookPub::Tracker::Service::ANOBII,
            version          => 7,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'ISBN',                                'title',
                    'subtitle',                            'authors',
                    'supplier_.*short_name',               'publisher',
                    'imprint_name',                        'bic_code',
                    'bic_name',                            'order_id',
                    'order_date',                          'units_sold',
                    'refund_id',                           'refund_date',
                    'units_refunded',                      'currency',
                    'rrp_inc_tax',                         'rrp_exc_tax',
                    'vat_rate',                            'sales_price_.*pre_promotion_inc_vat',
                    'sales_price_.*pre_promotion_exc_vat', 'cost_price_.*inc_vat',
                    'cost_price_exc_vat',                  '^$'
                ],
            ],
        },

        # Anobii (now Sainsbury's Entertainemnt), v8
        {
            service          => BookPub::Tracker::Service::ANOBII,
            version          => 8,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'ISBN',                                'title',
                    'subtitle',                            'authors',
                    'supplier_.*short_name',               'publisher',
                    'imprint_name',                        'bic_code',
                    'bic_name',                            'order_id',
                    'order_date',                          'units_sold',
                    'refund_id',                           'refund_date',
                    'units_refunded',                      'currency',
                    'rrp_inc_tax',                         'rrp_exc_tax',
                    'vat_rate',                            'sales_price_.*pre_promotion_inc_vat',
                    'sales_price_.*pre_promotion_exc_vat', 'cost_price_.*inc_vat',
                    'cost_price_exc_vat',                  'Territory',
                    '^$'
                ],
            ],
        },

        # SmartEbook
        {
            service => BookPub::Tracker::Service::SMARTEBOOK,
            version => 1,
            lines   => [
                [undef],
                [undef],
                [undef],
                [undef],
                [
                    'Date',      'Site Name', 'Country Code', 'ISBN',     'Title',             'Author',
                    'ListPrice', 'DL',        'Total',        'Fee\/Tax', 'Total-Carrier Fee', undef,
                    'Total'
                ],
            ],
        },

        # Chegg
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 1,
            lines   => [ [
                    'publisher_name', 'partner_name',  'report_year_month', 'transaction_date',
                    'trans_type',     'term_days',     'digital_ISBN_10',   'digital_ISBN_13',
                    'print_ISBN_10',  'print_ISBN_13', 'edition_no',        'pub_date',
                    'title',          'author',        'list price',        'publisher_fee',
                    'refund_type',    'Currency',      'Country of Sale'
                ],
            ],
        },

        # Chegg
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 2,
            lines   => [ [
                    'publisher_name', 'partner_name',  'report_year_month', 'transaction_date',
                    'trans_type',     'term_days',     'digital_ISBN_10',   'digital_ISBN_13',
                    'print_ISBN_10',  'print_ISBN_13', 'edition_no',        'pub_date',
                    'title',          'author',        'publisher_fee',     'refund_type',
                    'list_price',     'currency',      'country_of_sale'
                ],
            ],
        },

        # Chegg
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 3,
            lines   => [ [
                    'order_date',      'report_month', 'partner_name', 'discount_code', 'term_description', 'title',
                    'edition_no',      'pub_date',     'author',       'digital_ean',   'digital_isbn',     'print_ean',
                    'print_isbn',      'term_days',    'list_price',   'refund_type',   'publisher_fee',    'currency',
                    'country_of_sale', 'campus_name',  'campus_city',  'campus_state',  'campus_zip'
                ],
            ],
        },

        # Chegg
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 4,
            lines   => [ [
                    'order_date',  'report_month', 'partner_name', 'discount_code', 'term_description', 'title',
                    'edition_no',  'pub_date',     'author',       'digital_ean',   'digital_isbn',     'print_ean',
                    'print_isbn',  'term_days',    'list_price',   'refund_type',   'publisher_fee',    'campus_name',
                    'campus_city', 'campus_state', 'campus_zip'
                ],
            ],
        },

        # Chegg
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 5,
            lines   => [ [
                    'order_date',  'report_month', 'partner_name', 'publisher_name', 'discount_code', 'term_description',
                    'title',       'edition_no',   'pub_date',     'author',         'digital_ean',   'digital_isbn',
                    'print_ean',   'print_isbn',   'term_days',    'list_price',     'refund_type',   'publisher_fee',
                    'campus_name', 'campus_city',  'campus_state', 'campus_zip'
                ],
            ],
        },

        # Chegg
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 6,
            sheet   => 'any',
            lines   => [ [
                    'order_date',       'report_month', 'partner_name', 'publisher_name|discount_code',
                    'term_description', 'title',        'edition_no',   'pub_date',
                    'author',           'digital_ean',  'digital_isbn', 'print_ean',
                    'print_isbn',       'term_days',    'list price.*', 'refund_type',
                    'publisher_fee.*',  'campus_name',  'campus_city',  'campus_state',
                    'campus_zip',       'country_of_sale'
                ],
            ],
        },

        # Chegg, version 7
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 7,
            lines   => [ [
                    'order_date',    'report_month',          'partner_name', 'publisher_name',
                    'discount_code', 'term_description',      'title',        'edition_no',
                    'pub_date',      'author',                'digital_ean',  'digital_isbn',
                    'print_ean',     'print_isbn',            'term_days',    'list price \(USD\)',
                    'refund_type',   'publisher_fee \(USD\)', 'campus_name',  'campus_city',
                    'campus_state',  'campus_zip',            'country_of_sale'
                ],
            ],
        },

        # Chegg, version 8
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 8,
            lines   => [ [
                    'order_date',         'report_month',     'partner_name',          'publisher_name',
                    'discount_code',      'term_description', 'title',                 'edition_no',
                    'pub_date',           'author',           'digital_ean',           'digital_isbn',
                    'print_ean',          'print_isbn',       'tax_charged',           'term_days',
                    'list price \(USD\)', 'refund_type',      'publisher_fee \(USD\)', 'campus_name',
                    'campus_city',        'campus_state',     'campus_zip',            'country_of_sale'
                ],
            ],
        },

        # Chegg, version 9
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 9,
            lines   => [ [
                    'order_date',            'report_month',     'partner_name',       'publisher_name',
                    'discount_code',         'term_description', 'title',              'edition_no',
                    'pub_date',              'author',           'digital_ean',        'digital_isbn',
                    'print_ean',             'print_isbn',       'list price \(USD\)', 'refund_type',
                    'publisher_fee \(USD\)', 'campus_name',      'campus_city',        'campus_state',
                    'campus_zip',            'country_of_sale'
                ],
            ],
        },

        # Chegg, version 10
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 10,
            lines   => [ [
                    'order_date',    'report_month',          'partner_name',    'publisher_name',
                    'discount_code', 'term_description',      'title',           'edition_no',
                    'pub_date',      'author',                'digital_ean',     'digital_isbn',
                    'print_ean',     'print_isbn',            'tax_charged',     'list price \(USD\)',
                    'refund_type',   'publisher_fee \(USD\)', 'campus_name',     'campus_city',
                    'campus_state',  'campus_zip',            'country_of_sale', '^$'
                ],
            ],
        },

        # Chegg, version 11
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 11,
            lines   => [ [
                    'order_date',         'order_key',     'report_month',          'partner_name',
                    'publisher_name',     'discount_code', 'term_description',      'title',
                    'edition_no',         'pub_date',      'author',                'digital_ean',
                    'digital_isbn',       'print_ean',     'print_isbn',            'tax_charged',
                    'list price \(USD\)', 'refund_type',   'publisher_fee \(USD\)', 'campus_name',
                    'campus_city',        'campus_state',  'campus_zip',            'country_of_sale',
                    '^$'
                ],
            ],
        },

        # Chegg, version 12
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 12,
            lines   => [ [
                    'order_date',    'report_month',     'partner_name',          'publisher_name',
                    'discount_code', 'term_description', 'title',                 'edition_no',
                    'pub_date',      'author',           'digital_ean',           'digital_isbn',
                    'print_ean',     'print_isbn',       'tax_charged',           'list price \(USD\)',
                    'refund_type',   'order_key',        'publisher_fee \(USD\)', 'campus_name',
                    'campus_city',   'campus_state',     'campus_zip',            'country_of_sale',
                    'payable_name|', '^$'
                ],
            ],
        },

        # Chegg, version 13
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 13,
            lines   => [ [
                    'order_date',    'report_month',          'partner_name',       'publisher_name',
                    'discount_code', 'term_description',      'title',              'edition_no',
                    'pub_date',      'author',                'digital_ean',        'digital_isbn',
                    'print_ean',     'print_isbn',            'list price \(USD\)', 'refund_type',
                    'order_key',     'publisher_fee \(USD\)', 'campus_name',        'campus_city',
                    'campus_state',  'campus_zip',            'country_of_sale',    'payable_name|',
                    '^$'
                ],
            ],
        },

        # Chegg, version 14
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 14,
            lines   => [ [
                    'order_date',         'report_month',     'partner_name', 'publisher_name',
                    'discount_code',      'term_description', 'title',        'edition_no',
                    'pub_date',           'author',           'digital_ean',  'digital_isbn',
                    'print_ean',          'print_isbn',       'tax_charged',  'due_date',
                    'list price \(USD\)', 'refund_type',      'order_key',    'publisher_fee \(USD\)',
                    'campus_name',        'campus_city',      'campus_state', 'campus_zip',
                    'country_of_sale',    'payable_name|',    '^$'
                ],
            ],
        },

        # Chegg, version 15
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 15,
            lines   => [ [
                    'order_date',         'report_month',     'partner_name',   'publisher_name',
                    'discount_code',      'term_description', 'title',          'edition_no',
                    'pub_date',           'author',           'digital_ean',    'digital_isbn',
                    'print_ean',          'print_isbn',       'customer_price', 'order_lines_log_trans_type_',
                    'list price \(USD\)', 'refund_type',      'order_key',      'publisher_fee \(USD\)',
                    'campus_name',        'campus_city',      'campus_state',   'campus_zip',
                    'country_of_sale',    'payable_name',     '^$',
                ]
            ],
        },

        # Chegg, version 16 (the same as v12, but with an additional column 'fee_percentage')
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 16,
            lines   => [ [
                    'order_date',
                    'report_month',
                    'partner_name',
                    'publisher_name',
                    'discount_code',
                    'term_description',
                    'title',
                    'edition_no',
                    'pub_date',
                    'author',
                    'digital_ean',
                    'digital_isbn',
                    'print_ean',
                    'print_isbn',
                    'tax_charged',
                    'list price \(USD\)',
                    'refund_type',
                    'fee_percentage',
                    'order_key',
                    'publisher_fee \(USD\)',
                    'campus_name',
                    'campus_city',
                    'campus_state',
                    'campus_zip',
                    'country_of_sale',
                    'payable_name',
                    '^$'
                ],
            ],
        },

        # Chegg,Version 17 (RSD-3794)
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 17,
            lines   => [ [
                    'report month',
                    'transaction date',
                    'Partner name',
                    'publisher name',
                    'title',
                    'pub date',
                    'digital ean',
                    'digital isbn',
                    'print ean',
                    'print isbn',
                    'term description',
                    'trans type',
                    'refund type',
                    'list price',
                    'discount code',
                    'publisher fee',
                    'payable name',
                    'campus name',
                    'campus city',
                    'campus state',
                    'campus zip',
                    'country_of_sale',
                    '^$'
                ],
            ],
        },

        # Chegg,Version 18 (RSD-3804)
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 18,
            lines   => [ [
                    'report month',
                    'transaction date',
                    'Partner name',
                    'publisher name',
                    'title',
                    'pub date',
                    'digital ean',
                    'digital isbn',
                    'print ean',
                    'print isbn',
                    'term description',
                    'trans type',
                    'refund type',
                    'list price',
                    'tax charged',
                    'discount code',
                    'publisher fee',
                    'payable name',
                    'campus name',
                    'campus city',
                    'campus state',
                    'campus zip',
                    'country_of_sale',
                    '^$'
                ],
            ],
        },

        # Chegg,Version 19 (RSD-4836)
        {
            service => BookPub::Tracker::Service::CHEGG,
            version => 19,
            lines   => [ [
                    'report month',
                    'transaction date',
                    'partner name',
                    'Publisher name',
                    'title',
                    'pub date',
                    'digital ean',
                    'digital isbn',
                    'refund type',
                    'list price',
                    'discount code',
                    'publisher fee',
                    'payable name',
                    'campus name',
                    'campus city',
                    'campus state',
                    'campus zip',
                    'country[ _]?of[ _]?sale',
                    'product type',
                    '^$'
                ],
            ],
        },

        # Recorded Books
        {
            service => BookPub::Tracker::Service::RECORDED_BOOKS,
            version => 1,
            lines   => [
                [undef],
                [undef],
                [undef],
                [undef],
                [
                    'AGENCY|PUBLISHER',                    'CUSTOMER',
                    'ISBN',                                'BOOK #',
                    'TITLE',                               'AUTHOR',
                    'QUANTITY SOLD',                       'LBRARY DIGITAL LIST PRICE',
                    'EXTENDED LIBRARY DIGITAL LIST PRICE', 'PUBLISHER PERCENTAGE',
                    'AMOUNT DUE TO PUBLISHER',             'TRANS DATE',
                    'STATE',                               'ZIP CODE',
                    'TERRITORY',                           'CURRENCY'
                ],
            ],
        },

        # Recorded Books
        {
            service => BookPub::Tracker::Service::RECORDED_BOOKS,
            version => 2,
            lines   => [
                [undef],
                [undef],
                [undef],
                [undef],
                [
                    'AGENCY|PUBLISHER', 'ISBN', 'BOOK #', 'TITLE', 'AUTHOR',
                    'QUANTITY SOLD',
                    'LBRARY DIGITAL LIST PRICE',
                    'EXTENDED LIBRARY DIGITAL LIST PRICE',
                    'PUBLISHER PERCENTAGE',
                    'AMOUNT DUE TO PUBLISHER', 'TERRITORY'
                ],
            ],
        },

        # Recorded Books, version 3 FB 13666
        {
            service => BookPub::Tracker::Service::RECORDED_BOOKS,
            version => 3,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Territory',            'ISBN',      'Title',         'Author',
                    'Publisher',            'Imprint',   'Publisher DLP', 'Units Sold',
                    'Units Refunded',       'Net Units', 'Discount',      'Sales Territory',
                    'Amount Due Local USD', '^$'
                ],
            ],
        },

        # Recorded Books, version 4 RSD-3736
        {
            service          => BookPub::Tracker::Service::RECORDED_BOOKS,
            version          => 4,
            match_on_any_row => 1,
            lines            => [
                [
                    'PUBLISHER',
                    'ISBN',
                    'BOOK #',
                    'TITLE',
                    'AUTHOR',
                    'QUANTITY SOLD',
                    '\w{2} LBRARY DIGITAL LIST PRICE',
                    '\w{2} EXTENDED LIBRARY DIGITAL LIST PRICE',
                    '\w{2} LBRARY DIGITAL LIST PRICE',
                    '\w{2} EXTENDED LIBRARY DIGITAL LIST PRICE',
                    'PUBLISHER PERCENTAGE',
                    'CURRENCY CONVERSION RATE',
                    'AMOUNT DUE TO PUBLISHER \(\w{3}\)',
                    'TERRITORY',
                    '^$'
                ],
            ],
        },

        # Dawson Books
        {
            service => BookPub::Tracker::Service::DAWSON_BOOKS,
            version => 1,
            lines   => [
                [undef],
                [undef],
                [
                    'Company',
                    'Document Number',
                    'Document Date',
                    'Order Number',
                    'Line Number',
                    'Quantity',
                    'Publisher Number',
                    'Imprint Number',
                    'Supplier Name',
                    'e ISBN',
                    'Print ISBN',
                    'Title',
                    'Authors',
                    'ERA Rental',
                    'List Price',
                    'Cost Price',
                    'Supplier Currency',
                    'Total Cost',
                    'Publisher Discount',
                    '^$'
                ],
            ],
        },

        # Dawson Books, version 2 (FB12840)
        {
            service => BookPub::Tracker::Service::DAWSON_BOOKS,
            version => 2,
            lines   => [
                [undef],
                [undef],
                [
                    'Company',
                    'Document Number',
                    'Document Date',
                    'Order Number',
                    'Line Number',
                    'Quantity',
                    'Publisher Number',
                    'Imprint Number',
                    'Supplier Name',
                    'e ISBN',
                    'Print ISBN',
                    'Title',
                    'Authors',
                    'ERA Rental',
                    'List Price',
                    'Cost Price',
                    'Supplier Currency',
                    'Total Cost',
                    'Publisher Discount',
                    'Code',
                    'Country',
                    '^$'
                ],
            ],
        },

        # Dawson Books, version 3 FB13496
        {
            service => BookPub::Tracker::Service::DAWSON_BOOKS,
            version => 3,
            lines   => [
                [undef],
                [undef],
                [
                    'Company',
                    'Document Number',
                    'Document Date',
                    'Order Number',
                    'Line Number',
                    'Quantity',
                    'Publisher Number',
                    'Imprint Number',
                    'Supplier Name',
                    'e ISBN',
                    'Print ISBN',
                    'Title',
                    'Authors',
                    'ERA Rental',
                    'List Price',
                    'Cost Price',
                    'Supplier Currency',
                    'Total Cost',
                    'Publisher Discount',
                    'Country Name',
                    '^$'
                ],
            ],
        },

        # O'Reilly, v1
        {
            service => BookPub::Tracker::Service::OREILLY,
            version => 1,
            lines   => [ [
                    'Year',
                    'Month',
                    'Date',
                    'Customer Name',
                    'Customer #',
                    'Title, ISBN, Format',
                    'ISBN',
                    'IP Identifier',
                    'Transaction #',
                    'Gross Dollars',
                    'Return Dollars',
                    'Net Dollars',
                    'Gross Units',
                    'Return Units',
                    'Net Units',
                    'Comp Units',
                ],
            ],
        },

        # O'Reilly, v2
        {
            service => BookPub::Tracker::Service::OREILLY,
            version => 2,
            lines   => [ [
                    'Year',
                    'Month',
                    'Date',
                    'Customer Name',
                    'Customer #',
                    'Title, ISBN, Format',
                    'ISBN',
                    'PDF ISBN',
                    'IP Identifier',
                    'Transaction #',
                    'Gross Dollars',
                    'Return Dollars',
                    'Net Dollars',
                    'Gross Units',
                    'Return Units',
                    'Net Units',
                    'Comp Units'
                ],
            ],
        },

        # Kno
        {
            service => BookPub::Tracker::Service::KNO,
            version => 1,
            lines   => [
                [ undef, 'Publisher' ],
                [ undef, 'Contract' ],
                [undef],
                [
                    undef, 'Invoice #',   'Invoice Date', 'ISBN13',   'Trnsctn Type', 'License Type',
                    'DLP', 'Amount Owed', 'Discount',     'Currency', 'Country',      'State',
                    'Zip', 'Title',       'Author'
                ],
            ],
        },

        # Kno
        {
            service => BookPub::Tracker::Service::KNO,
            version => 2,
            lines   => [
                ['Publisher'],
                ['Contract'],
                [undef],
                [
                    'ISBN13',
                    'Transaction Type',
                    'License Type',
                    'Qty Sold',
                    'Qty Rented',
                    'Qty Returned',
                    'Net Quantity|Net Qty',
                    'Sale Price',
                    'Comm. %|Comm %',
                    'Amount Owed',
                    'Country Code',
                    'Currency Code',
                    'Author',
                    'Title',
                    'Imprint',
                    'Ship to City',
                    'Ship to State',
                    'Ship to Zip',
                    'Ship to Country',
                    'Taxable Amount',
                    'Tax Rate',
                    'ST Collected'
                ],
            ],
        },

        # Kno
        {
            service => BookPub::Tracker::Service::KNO,
            version => 3,
            lines   => [
                ['Publisher'],
                ['Contract'],
                [undef],
                [
                    'Invoice #',
                    'ISBN13',
                    'Transaction Type',
                    'License Type',
                    'Qty Sold',
                    'Qty Rented',
                    'Qty Returned',
                    'Net Quantity|Net Qty',
                    'Sale Price',
                    'Comm. %|Comm %',
                    'Amount Owed',
                    'Country Code',
                    'Currency Code',
                    'Author',
                    'Title',
                    'Imprint',
                    'Ship to City',
                    'Ship to State',
                    'Ship to Zip',
                    'Ship to Country',
                    'Taxable Amount',
                    'Tax Rate',
                    'ST Collected'
                ],
            ],
        },

        # Kno
        {
            service => BookPub::Tracker::Service::KNO,
            version => 4,
            lines   => [
                [ undef, 'Publisher' ],
                [ undef, 'Contract' ],
                [undef],
                [
                    undef, 'Invoice #',   'Invoice Date', 'ISBN13',   'Trnsctn Type', 'License Type',
                    'DLP', 'Amount Owed', 'Discount',     'Currency', 'Country',      'State',
                    'Zip', 'Author',      'Title'
                ],
            ],
        },

        # Kno (now known as Intel)
        {
            service => BookPub::Tracker::Service::KNO,
            version => 5,
            lines   => [
                ['Publisher'],
                ['Contract'],
                [
                    'Invoice #',
                    'ISBN13',
                    'Transaction Type',
                    'License Type',
                    'Qty Sold',
                    'Qty Rented',
                    'Qty Returned',
                    'Net Quantity|Net Qty',
                    'Sale Price',
                    'Comm. %|Comm %',
                    'Amount Owed',
                    'Country Code',
                    'Currency Code',
                    'Author',
                    'Title',
                    'Imprint',
                    'Ship to City',
                    'Ship to State',
                    'Ship to Zip',
                    'Ship to Country',
                    'Taxable Amount',
                    'Tax Rate',
                    'ST Collected'
                ],
            ],
        },

        # Kno (now known as Intel), version 6
        {
            service => BookPub::Tracker::Service::KNO,
            version => 6,
            lines   => [
                [ undef, 'Publisher' ],
                [ undef, 'Contract' ],
                [undef], [ undef, 'Invoice Date', 'ISBN13', 'DLP', 'Amount Owed', 'Discount', 'Title', 'Ship to State', '^$' ],
            ],
        },


        # DocStoc
        {
            service => BookPub::Tracker::Service::DOCSTOC,
            version => 1,
            lines   => [ [ 'Date', 'Document', 'Price', 'Earnings', 'Refunded' ], ],
        },

        # 3M
        {
            service => BookPub::Tracker::Service::OCLC,
            version => 1,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID\$|Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agents transaction ID#|Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate'
                ],
            ],
        },

        # 3M
        {
            service => BookPub::Tracker::Service::OCLC,
            version => 2,
            lines   => [ [
                    'ReportDate', 'LibraryName',    'EISBN',    'Title',    'Author',      'PurchaseDate',
                    'Price',      'WholesalePrice', 'Discount', 'Quantity', 'CostPerItem', 'TotalAmountDue',
                    '^$'
                ],
            ],
        },

        # 3M
        {
            service => BookPub::Tracker::Service::OCLC,
            version => 3,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID\$|Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agents transaction ID#|Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Content Provider',
                    'Publisher Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate'
                ],
            ],
        },

        # 3M
        {
            service => BookPub::Tracker::Service::OCLC,
            version => 4,
            lines   => [ [
                    'ReportDate',   'LibraryName',    'EISBN',    'Title',    'Author',      'PurchaseDate',
                    'Price',        'WholesalePrice', 'Discount', 'Quantity', 'CostPerItem', 'TotalAmountDue',
                    'CurrencyCode', '^$'
                ],
            ],
        },

        # OCLC v5, RSD-11411
        {
            service => BookPub::Tracker::Service::OCLC,
            version => 5,
            lines   => [ [
                    'Program Start Date',
                    'Program End Date',
                    'Library',
                    'State\/Province',
                    'Country',
                    'Community Reads Program Name',
                    'ISBN',
                    'Title',
                    'Author',
                    'Publisher',
                    'Provider',
                    'Approved Community Program Library Price',
                    'Units \(Checkouts\)',
                    'Amount Owed',
                    'Currency',
                    '^$'
                ],
            ],
        },

        # EBSCO, v1
        {
            service          => BookPub::Tracker::Service::EBSCO,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'IMPRINT',  'ISBN',    'EISBN',     'TITLE',          'AUTHORS',    'ACCOUNT NAME',
                    'CTRY',     'BILL TO', 'SALE TYPE', 'MODEL',          'LIST PRICE', 'QTY',
                    'PREV LPM', 'LPM',     'LIST DISC', 'ADJ LIST PRICE', 'DISC RATE',  'ROYALTY DUE'
                ],
            ],
        },

        # EBSCO, v2
        {
            service => BookPub::Tracker::Service::EBSCO,
            version => 2,
            lines   => [ ( [undef] ) x 3, [ 'PUBLISHER NAME', 'COLLECTION NAME|TITLE', 'ISBN', 'EISBN', 'ROYALTY', '^$' ], ],
        },

        # EBSCO, v3 (FB20318)
        {
            service          => BookPub::Tracker::Service::EBSCO,
            version          => 3,
            match_on_any_row => 1,
            lines            => [ [
                    'IMPRINT',
                    'ORDER ID',
                    'TRANS DATE',
                    'ISBN',
                    'EISBN',
                    'TITLE',
                    'AUTHORS',
                    'ACCOUNT NAME',
                    'CTRY',
                    'BILL TO',
                    'SALE TYPE',
                    'MODEL',
                    'LIST PRICE',
                    'QTY',
                    'PREV LPM',
                    'LPM',
                    'LIST DISC',
                    'ADJ LIST PRICE',
                    'DISC RATE',
                    'ROYALTY DUE'
                ],
            ],
        },

        # EBSCO, v4 (FB21242)
        {
            service          => BookPub::Tracker::Service::EBSCO,
            version          => 4,
            match_on_any_row => 1,
            lines            => [ [
                    'IMPRINT',
                    'ORDER ID',
                    'ISBN',
                    'EISBN',
                    'TITLE',
                    'AUTHORS',
                    'ACCOUNT NAME',
                    'CTRY',
                    'BILL TO',
                    'SALE TYPE',
                    'MODEL',
                    'Transaction Date',
                    'List Price',
                    'Transaction Currency',
                    'Currency Conversion Rate',
                    'List Price \([A-Z]{3}\)',
                    'QTY',
                    'PREV LPM',
                    'LPM',
                    'LIST DISC',
                    'Consortia',
                    'ADJ LIST PRICE',
                    'DISC RATE',
                    'ROYALTY DUE'
                ],
            ],
        },

        # EBSCO, v5 (RSD-780)
        {
            service          => BookPub::Tracker::Service::EBSCO,
            version          => 5,
            match_on_any_row => 1,
            lines            => [ [
                    'IMPRINT',
                    'ORDER ID',
                    'TRANS DATE',
                    'ISBN',
                    'EISBN',
                    'TITLE',
                    'AUTHORS',
                    'ACCOUNT NAME',
                    'CTRY',
                    'BILL TO',
                    'SALE TYPE',
                    'MODEL',
                    'LIST PRICE',
                    'QTY',
                    'PREV LPM',
                    'LPM',
                    'LIST DISC',
                    'Consortia',
                    'ADJ LIST PRICE',
                    'DISC RATE',
                    'ROYALTY DUE'
                ],
            ],
        },

        # Wheelers, v1
        {
            service          => BookPub::Tracker::Service::WHEELERS,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'Supplier', 'Date', 'ISBN',      'Format',          'Title',    'Author',
                    'Quantity', 'RRP',  'Buy Price', 'Total Buy Price', 'Currency', 'Country of Sale'
                ],
            ],
        },

        # Wheelers, v2
        {
            service          => BookPub::Tracker::Service::WHEELERS,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    'Supplier', 'Date', 'ISBN', 'Format', 'Title', 'Author', 'Quantity', 'RRP', 'RRP Ex. Tax', 'Discount', 'Buy Price',
                    'Total Buy Price', 'Currency', 'Country of Sale', 'Publisher', '^$'

                ],
            ],
        },

        # Scribd
        {
            service          => BookPub::Tracker::Service::SCRIBD,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'Purchase date',
                    'Title', 'ISBN',
                    'Purchase price',
                    'Publisher earnings',
                    'Link to document',
                    'Publisher %',
                    'Credit card processing fee',
                    'Adobe DRM Fee'
                ],
            ],
        },

        # Scribd
        {
            service          => BookPub::Tracker::Service::SCRIBD,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [ 'Purchase date', 'Title', 'ISBN', 'Gross Earnings', 'Seller Earnings', 'Fees', 'Refunded\?' ], ],
        },

        # Scribd, variation of version 3 with an extra column at the end
        {
            service => BookPub::Tracker::Service::SCRIBD,
            version => 5,
            lines   => [ [
                    'Payout Month',
                    'Publisher',
                    'Amount owed for this interaction',
                    'Price in original currency',
                    'Digital list price',
                    'Currency',
                    'Price type',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code'
                ],
            ],
        },

        # Scribd
        {
            service => BookPub::Tracker::Service::SCRIBD,
            version => 3,
            lines   => [ [
                    'Payout Month',
                    'Publisher',
                    'Amount owed for this interaction',
                    'Price in original currency',
                    'Digital list price',
                    'Currency',
                    'Price type',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID'
                ],
            ],
        },

        # Scribd
        {
            service => BookPub::Tracker::Service::SCRIBD,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'Report ID',
                    'Report Date',
                    'Message Function',
                    'Report Type',
                    'Report Start',
                    'Report End',
                    'Not Used',
                    'Price Type',
                    'Currency',
                    'Class of Sale',
                    'Sales Territory',
                    'Line Item ID',
                    'Sub-agent ID',
                    'Sub-agent',
                    'Transaction Date',
                    'Agent Transaction ID',
                    'Line Item Reference Type',
                    'Line Item Reference ID',
                    'Line Item Reference Date',
                    'Main Product ID# Type',
                    'Main Product ID#',
                    'Alternative Product ID Type',
                    'Alternative Product ID',
                    'Product Title',
                    'Product Author\(s\)',
                    'Product Description',
                    'Publisher ID',
                    'Publisher',
                    'Imprint',
                    'Product Format',
                    'Device Type',
                    'Number Sold',
                    'Number Returned',
                    'Net Sold',
                    'Non-sale Quantity',
                    'Non-sale Disposal Type',
                    'Class of Sale',
                    'Sale Territory',
                    'Unit Price',
                    'Price Type',
                    'Currency',
                    'Commission',
                    'Gross Sold Value',
                    'Num Refunded',
                    'Net before fees',
                    'Fee Type 1',
                    'Fee Amount 1',
                    'Fee Source 1',
                    'Fee Type 2',
                    'Fee amount 2',
                    'Fee Source 2',
                    'Fee Type 3',
                    'Fee Amount 3',
                    'Fee Source 3',
                    'Amount Due',
                    'Number Line Items',
                    'Number Sold',
                    'Number Returned',
                    'Net Sold',
                    'Non-sales',
                    'Amount Due',
                    'Num Returned',
                    'Net before fees',
                    'Total Fees',
                    'Amount Due',
                    'Reporting Agent ID',
                    'Reporting Agent Name',
                    'Currency Conversion Rate',
                    'List Price',
                    'List Price Type',
                    '^$'
                ],
            ],
        },

        # Scribd, version 6
        {
            service => BookPub::Tracker::Service::SCRIBD,
            version => 6,
            lines   => [ [
                    'Payout month',
                    'Publisher',
                    'Amount owed for this interaction',
                    'Amount owed currency',
                    'Price in original currency',
                    'Digital list price',
                    'Original currency',
                    'Price type',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code',
                    '^$'
                ],
            ],
        },

        # Scribd, version 9 (v6 + a transaction date column at the end)
        {
            service => BookPub::Tracker::Service::SCRIBD,
            version => 9,
            lines   => [ [
                    'Payout month',
                    'Publisher',
                    'Amount owed for this interaction',
                    'Amount owed currency',
                    'Price in original currency',
                    'Digital list price',
                    'Original currency',
                    'Price type',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code',
                    'Threshold Date',
                    '^$'
                ],
            ],
        },

        # Scribd, version 12 (v9 + four additional fields at the end)
        {
            service => BookPub::Tracker::Service::SCRIBD,
            version => 12,
            lines   => [ [
                    'Payout month',
                    'Publisher',
                    'Amount owed for this interaction',
                    'Amount owed currency',
                    'Price in original currency',
                    'Digital list price',
                    'Original currency',
                    'Price type',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code',
                    'Threshold Date',
                    'Applicable currency conversion rate',
                    'Applicable tax rate',
                    'Tax amount in original currency',
                    'Price in original currency minus tax',
                    '^$'
                ],
            ],
        },

        # Scribd, version 13
        {
            service => BookPub::Tracker::Service::SCRIBD,
            version => 13,
            lines   => [ [
                    'Payout month',
                    'Amount owed for this interaction',
                    'Amount owed currency',
                    'Price in original currency',
                    'Digital list price',
                    'Original currency',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Publisher',
                    'Imprint',
                    'Seconds listened to',
                    'Total duration of book',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code',
                    'Threshold Date',
                    'Type of discount',
                    'Amount of discount',
                    'Amount paid after discount',
                    'Price of book after discount',
                    'Business model|^$',
                    '^$'
                ],
            ],
        },

        # Scribd, version 14 (RSD-9472)
        {
            service => BookPub::Tracker::Service::SCRIBD,
            version => 14,
            lines   => [ [
                    'Payout month',
                    'Publisher',
                    'Amount owed for this interaction',
                    'Amount owed currency',
                    'Price in original currency',
                    'Digital list price',
                    'Original currency',
                    'Price type',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code',
                    'Threshold Date',
                    'Applicable currency conversion rate',
                    'Applicable tax rate',
                    'Tax amount in original currency',
                    'Price in original currency minus tax',
                    'Type of discount',
                    'Amount of discount',
                    'Amount paid after discount',
                    'Price of book after discount',
                    'Before discount amount owed',
                    '^$'
                ],
            ],
        },

        # Scribd
        {
            service          => BookPub::Tracker::Service::SCRIBD,
            version          => 7,
            match_on_any_row => 1,
            lines => [ [ 'Purchase date', 'Title', 'ISBN', 'Gross Earnings', 'Seller Earnings', 'Fees', 'Country', 'Refunded\?|' ], ],
        },

        # Scribd
        {
            service          => BookPub::Tracker::Service::SCRIBD,
            version          => 8,
            match_on_any_row => 1,
            lines            => [ [
                    'Payout month',
                    'Publisher',
                    'Price in original currency',
                    'Original currency',
                    'Exchange rate',
                    'Digital list price',
                    'Price type',
                    'Commission',
                    'Amount owed for this interaction',
                    'Amount owed currency',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    'Quantity',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code',
                    'Threshold Date',
                    '^$'
                ],
            ],
        },

        # Scribd, version 10 FB15444
        {
            service          => BookPub::Tracker::Service::SCRIBD,
            version          => 10,
            match_on_any_row => 1,
            lines            => [ [
                    'Payout month',
                    'Publisher',
                    'Amount owed for this interaction',
                    'Amount owed currency',
                    'Price in original currency',
                    'Digital list price',
                    'Original currency',
                    'Price type',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code',
                    'Threshold Date',
                    'Type of discount',
                    'Amount of discount',
                    'Amount paid after discount',
                    'Price of book after discount',
                    'Before discount amount owed',
                    '^$'
                ],
            ],
        },

        # Scribd, version 11 FB15445
        {
            service          => BookPub::Tracker::Service::SCRIBD,
            version          => 11,
            match_on_any_row => 1,
            lines            => [ [
                    'Payout month',
                    'Publisher',
                    'Price in original currency',
                    'Original currency',
                    'Exchange Rate',
                    'Digital list price',
                    'Price type',
                    'Commission',
                    'Amount owed for this interaction',
                    'Amount owed currency',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Imprints',
                    'Quantity',
                    '% Viewed',
                    'Payout type',
                    'Start date of interaction',
                    'Last date of interaction',
                    'Country of reader',
                    'Unique interaction ID',
                    'ISO Country Code',
                    'Threshold Date',
                    'Type of discount',
                    'Amount of discount',
                    'Amount paid after discount',
                    'Price of book after discount',
                    'Before discount amount owed',
                    '^$'
                ],
            ],
        },

        # INscribe Digital
        {
            service => BookPub::Tracker::Service::INSCRIBE_DIGITAL,
            version => 1,
            sheet   => 1,
            lines   => [ [
                    'STARTING', 'RETAILER', 'ENDING', 'PUBLISHER', 'AUTHOR', 'TITLE', 'ISBN', 'TERRITORY', 'QUANTITY',
                    'REVENUE FROM RETAILER',
                    'NET REVENUE TO CLIENT',
                    'CUSTOMER PRICE',
                    'TRANSACTION TYPE'
                ],
            ],
        },

        # INscribe Digital
        {
            service => BookPub::Tracker::Service::INSCRIBE_DIGITAL,
            version => 2,
            sheet   => 2,
            lines   => [ [
                    'STARTING', 'RETAILER', 'ENDING', 'PUBLISHER', 'AUTHOR', 'TITLE', 'ISBN', 'TERRITORY', 'QUANTITY',
                    'VATEX CUSTOMER PRICE',
                    'QTY X VATEX CUSTOMER PRICE',
                    'NET AMOUNT DUE CLIENT IN LOCAL CURRENCIES',
                    'TRANSACTION TYPE'
                ],
            ],
        },

        # INscribe Digital
        {
            service => BookPub::Tracker::Service::INSCRIBE_DIGITAL,
            version => 3,
            sheet   => 2,
            lines   => [ [
                    'PERIOD', 'STARTING', 'RETAILER', 'ENDING', 'PUBLISHER', 'AUTHOR', 'TITLE', 'ISBN', 'TERRITORY', 'QUANTITY',
                    'VATEX CUSTOMER PRICE',
                    'QTY X VATEX CUSTOMER PRICE',
                    'NET AMOUNT DUE CLIENT IN LOCAL CURRENCIES',
                    'TRANSACTION TYPE'
                ],
            ],
        },

        # INscribe Digital, version 4
        {
            service => BookPub::Tracker::Service::INSCRIBE_DIGITAL,
            version => 4,
            sheet   => 1,
            lines   => [ [
                    'PERIOD',                                    'STARTING',
                    'RETAILER',                                  'ENDING',
                    'PUBLISHER',                                 'AUTHOR',
                    'TITLE',                                     'ISBN',
                    'TERRITORY',                                 'QUANTITY',
                    'VATEX CUSTOMER PRICE',                      'QTY X VATEX CUSTOMER PRICE',
                    'NET AMOUNT DUE CLIENT IN LOCAL CURRENCIES', 'DUE IN USD',
                    'TRANSACTION TYPE'
                ],
            ],
        },

        # INscribe Digital version 5 (FBoD16632)
        {
            service => BookPub::Tracker::Service::INSCRIBE_DIGITAL,
            version => 5,
            sheet   => 2,
            lines   => [ [
                    'STATEMENT DATE',
                    'PERIOD OF SALE',
                    'IMPRINT',
                    'ACCOUNT',
                    'COUNTRY OF SALE',
                    'ISBN',
                    'TITLE',
                    'CUSTOMER PRICE',
                    'VATEX',
                    'EXCH RATE',
                    'UNIT PRICE',
                    'NET QTY',
                    'NET VAL',
                    'REV SHARE',
                    'DUE TO PUB',
                    'TRANS TYPE',
                    '^$'
                ]
            ],
        },

        # Google Promotions
        {
            service => BookPub::Tracker::Service::GOOGLE_PROMOTIONS,
            version => 1,
            lines   => [ [undef], [ 'Month', '# of preloads \(US/CA\)', 'Title', 'ISBN', 'Price per unit', 'Total Cost' ], ],
        },

        # Booki.sh, version 1
        {
            service => BookPub::Tracker::Service::BOOKISH,
            version => 1,
            lines   => [ [
                    'Date',
                    'Region of sale',
                    'Currency code',
                    'ISBN',
                    'Title',
                    'Author',
                    'RRP \(\$\)',
                    'RRP ex GST \(\$\)',
                    'GST on RRP \(\$\)',
                    'Bookseller name',
                    'Publisher cut \(\%\)',
                    'Publisher cut \(\$\)',
                ],
            ],
        },

        # TuneCore, version 1
        {
            service => BookPub::Tracker::Service::TUNECORE,
            version => 1,
            lines   => [ [
                    'Sales Period',
                    'Posted Date',
                    'Store Name',
                    'Country Of Sale',
                    'Artist',
                    'Release Type',
                    'Release Title',
                    'Song Title',
                    'Label',
                    'UPC',
                    'Optional UPC',
                    'TC Song ID',
                    'Optional ISRC',
                    'Sales Type',
                    '# Units Sold',
                    'Per Unit Price',
                    'Net Sales',
                    'Net Sales Currency',
                    'Exchange Rate',
                    'Total Earned',
                    'Currency',
                ],
            ],
        },

        # Blackstone Audio, version 1
        {
            service          => BookPub::Tracker::Service::BLACKSTONE_AUDIO,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'Order #',       'SKU',            'Provider',       'Product Name', 'ISBN',  'Format',
                    'Qty\. Ordered', 'Qty\. Invoiced', 'Qty\. Refunded', 'Type',         'Price', 'SRP',
                    'SHARE',         'DUE',
                ],
            ],
        },

        # Blackstone Audio, version 2
        {
            service          => BookPub::Tracker::Service::BLACKSTONE_AUDIO,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    'Order ID', 'Product ID',        'Book ID', 'Provider',     'Title',       'Author',
                    'ISBN 13',  'Quantity Invoiced', 'Price',   'Credits Used', 'Credit Type', 'Row Total',
                    'Total',    'Rate',              'Share',   'Subs',         'ALC',
                ],
            ],
        },

        # Blackstone Audio, version 3
        {
            service          => BookPub::Tracker::Service::BLACKSTONE_AUDIO,
            version          => 3,
            match_on_any_row => 1,
            lines            => [ [
                    'Order ID', 'Product ID',   'Title',     'Author',       'ISBN 13', 'Quantity Invoiced',
                    'Price',    'Credits Used', 'ALC Total', 'Credit Total', 'Rate',    'Share',
                    'Subs',     'ALC',
                ],
            ],
        },

        # Blackstone Audio, version 4
        {
            service          => BookPub::Tracker::Service::BLACKSTONE_AUDIO,
            version          => 4,
            match_on_any_row => 1,
            lines            => [ [
                    'Order ID',          'Product ID', 'Provider',     'Title', 'Author', 'ISBN 13',
                    'Quantity Invoiced', 'Price',      'Credits Used', 'Rate',  'Share',  'Subs',
                    'ALC',
                ],

            ],
        },

        # Blackstone Audio, version 5
        {
            service          => BookPub::Tracker::Service::BLACKSTONE_AUDIO,
            version          => 5,
            match_on_any_row => 1,
            lines            => [ [
                    'Order ID',
                    'Product ID',
                    'Provider',
                    'Title',
                    'Author',
                    'ISBN 13',
                    'Quantity Invoiced',
                    'Price',
                    'Credits Used',
                    'Rate',
                    'ALC Share',
                    'SUBS Share',
                    'Total Share',
                ],

            ],
        },

        # Blackstone Audio, version 6
        {
            service          => BookPub::Tracker::Service::BLACKSTONE_AUDIO,
            version          => 6,
            match_on_any_row => 1,
            lines            => [ [
                    'Book Title',
                    'Item',
                    'ISBN',
                    'Display Name',
                    'Base Price',
                    'Qty. Sold',
                    'Total Revenue',
                    'Royalty %',
                    'Net Payment',
                    'Partner ISBN',
                    '^$'
                ],

            ],
        },

        # ebrary (perpetual), version 1
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 1,
            lines   => [
                ( [undef] ) x 9,
                [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Title',
                    'List Price',
                    'SUPO Sales',
                    'SUPO Revenue Share',
                    'SUPO Net Revenue',
                    'MUPO Sales',
                    'MUPO Revenue Share',
                    'MUPO Net Revenue',
                    'Total Revenue All Types',
                    'Comments'
                ],
            ],
        },

        # ebrary (perpetual), version 2
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 2,
            lines   => [
                ( [undef] ) x 9,
                [
                    'ebrary ID',
                    'Publisher',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Title',
                    'List Price',
                    'SUPO Sales',
                    'SUPO Revenue Share',
                    'SUPO Net Revenue',
                    'MUPO Sales',
                    'MUPO Revenue Share',
                    'MUPO Net Revenue',
                    'Total Revenue All Types',
                    'Comments'
                ],
            ],
        },

        # ebrary (stl), version 3
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 3,
            lines   => [
                ( [undef] ) x 8,
                [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Title',
                    'List Price',
                    'Short-Term Loan Revenue Share',
                    'Percentage of List Price Charged - 1 Day Loans',
                    'Total Number - 1 Day Loans',
                    'Total Net Revenue - 1 Day Loans',
                    'Percentage of List Price Charged - 7 Day Loans',
                    'Total Number - 7 Day Loans',
                    'Total Net Revenue - 7 Day Loans',
                    'Total Net Revenue: All Short-term Loans',
                    'Number of Perpetual Sales Triggered After an Initial Short-Term Loan'
                ],
            ],
        },

# ebrary (split), version 4
#{
#    service => BookPub::Tracker::Service::EBRARY,
#    version => 4,
#    lines => [
#        ([undef]) x 9,
#        [ 'ebrary ID', 'Electronic ISBN', 'Print ISBN', 'Other ISBN', 'ISSN', 'Primary Author', 'Title', 'Microtrx Prints', 'Microtrx Print Revenue', 'Microtrx Copies', 'Microtrx Copy Revenue', 'Total Microtrx Copy & Print Revenue', 'Licensed Access Prints', 'Licensed Access Copies', 'Licensed Access Views', 'Licensed Access Page Download', 'Licensed Access Full Download', 'Split Pool Usage Revenue', 'Total Revenue All Types' ],
#    ],
#},
# ebrary (perpetual), version 5
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 5,
            lines   => [
                ( [undef] ) x 9,
                [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Title',
                    'List Price',
                    'Direct SUPO Sales',
                    'Direct SUPO Revenue Share',
                    'Direct SUPO Net Revenue',
                    '3rd party SUPO Sale',
                    '3rd Party SUPO Revenue Share',
                    '3rd Party SUPO Net Revenue',
                    'Total SUPO Net Revenue',
                    'Direct MUPO Sales',
                    'Direct MUPO Revenue Share',
                    'Direct MUPO Net Revenue',
                    '3rd party MUPO Sales',
                    '3rd Party\s+MUPO Revenue Share',
                    '3rd Party MUPO Net Revenue',
                    'Total MUPO Net Revenue',
                    'Total Revenue All Types',
                    'Comments'
                ],
            ],
        },

        # ebrary (stl), version 6
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 6,
            lines   => [
                ( [undef] ) x 8,
                [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Title',
                    'List Price',
                    'Short-Term Loan Revenue Share',
                    '3rd Party Short-Term Loan Revenue',
                    'Percentage of List Price Charged - 1 Day Loans',
                    'Total Number - 1 Day Loans',
                    'Total Net Revenue - 1 Day Loans',
                    '3rd Party Total Number - 1 Day Loans',
                    '3rd Party Total Net Revenue - 1 Day Loans',
                    'Total Net Revenue - 1 Day Loans',
                    'Percentage of List Price Charged - 7 Day Loans',
                    'Total Number - 7 Day Loans',
                    'Total Net Revenue - 7 Day Loans',
                    '3rd Party Total Number - 7 Day Loans',
                    '3rd Party Total Net Revenue - 7 Day Loans',
                    'Total Net Revenue - 7 Day Loans',
                    'Total Net Revenue: All Short-term Loans',
                    'Number of Perpetual Sales Triggered After an Initial Short-Term Loan'
                ],
            ],
        },

        # ebrary (perpetual), version 7
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 7,
            lines   => [
                ( [undef] ) x 9,
                [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Title',
                    'List Price',
                    'Direct SUPO Sales',
                    'Direct SUPO Revenue Share',
                    'Direct SUPO Net Revenue',
                    '3rd party SUPO Sale',
                    '3rd Party SUPO Revenue Share',
                    '3rd Party SUPO Net Revenue',
                    'Total SUPO Net Revenue',
                    'Direct MUPO Sales',
                    'Direct MUPO Net Revenue',
                    '3rd party MUPO Sales',
                    '3rd Party\s+MUPO Revenue Share',
                    '3rd Party MUPO Net Revenue',
                    'Total MUPO Net Revenue',
                    'Total Revenue All Types',
                    'Comments'
                ],
            ],
        },

        # ebrary (perpetual), version 8
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 8,
            lines   => [
                ( [undef] ) x 9,
                [
                    'ebrary ID', 'Electronic ISBN', 'Print ISBN', 'Primary Author', 'Title', 'List Price', 'Direct SUPO Sales',
                    'Direct SUPO Revenue Share',  'Direct SUPO Net Revenue', '3rd Party SUPO Sales', '3rd Party SUPO Revenue Share',
                    '3rd Party SUPO Net Revenue', 'Total SUPO Net Revenue',  'Direct 3USER Sales',   'Direct 3USER Revenue Share',
                    'Direct 3USER Net Revenue', '3rd Party 3USER Sales', '3rd Party 3USER Revenue Share', '3rd Party 3USER Net Revenue',
                    'Total 3USER Net Revenue',  'Direct MUPO Sales',     'Direct MUPO Revenue Share',     'Direct MUPO Net Revenue',
                    '3rd Party MUPO Sales', '3rd Party MUPO Revenue Share', '3rd Party MUPO Net Revenue', 'Total MUPO Net Revenue',
                    'Total Revenue All Types', 'Comments',   'Africa', 'Asia Pacific', 'Europe', 'Latin America', 'Middle East',
                    'North America',           'South Asia', 'UK /Ireland',
                    'Perpertual Sales \(units\) Triggered by PDA|Perpetual Sales \(units\) Triggered by PDA',
                    'Perpertual Sales \(revenue\) triggered by PDA|Perpetual Sales \(revenue\) triggered by PDA', 'Sales through YBP',
                    'Sales through other 3rd\s+Parties'
                ],
            ],
        },

        # ebrary (stl), version 9
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 9,
            lines   => [
                ( [undef] ) x 8,
                [
                    'ebrary ID',
                    'Publisher',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Title',
                    'List Price',
                    'Short-Term Loan Revenue Share',
                    '3rd Party Short-Term Loan Revenue',
                    'Percentage of List Price Charged - 1 Day Loans',
                    'Total Number - 1 Day Loans',
                    'Total Net Revenue - 1 Day Loans',
                    '3rd Party Total Number - 1 Day Loans',
                    '3rd Party Total Net Revenue - 1 Day Loans',
                    'Total Net Revenue - 1 Day Loans',
                    'Percentage of List Price Charged - 7 Day Loans',
                    'Total Number - 7 Day Loans',
                    'Total Net Revenue - 7 Day Loans',
                    '3rd Party Total Number - 7 Day Loans',
                    '3rd Party Total Net Revenue - 7 Day Loans',
                    'Total Net Revenue - 7 Day Loans',
                    'Total Net Revenue: All Short-term Loans',
                    'Number of Perpetual Sales Triggered After an Initial Short-Term Loan'
                ],
            ],
        },

        # ebrary (perpetual), version 10
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 10,
            lines   => [
                ( [undef] ) x 9,
                [
                    'ebrary ID', 'Electronic ISBN', 'Print ISBN', 'Primary Author', 'Publisher Name', 'Title', 'List Price',
                    'Direct SUPO Sales',            'Direct SUPO Revenue Share',  'Direct SUPO Net Revenue', '3rd Party SUPO Sales',
                    '3rd Party SUPO Revenue Share', '3rd Party SUPO Net Revenue', 'Total SUPO Net Revenue',  'Direct 3USER Sales',
                    'Direct 3USER Revenue Share',  'Direct 3USER Net Revenue', '3rd Party 3USER Sales', '3rd Party 3USER Revenue Share',
                    '3rd Party 3USER Net Revenue', 'Total 3USER Net Revenue',  'Direct MUPO Sales',     'Direct MUPO Revenue Share',
                    'Direct MUPO Net Revenue', '3rd Party MUPO Sales', '3rd Party MUPO Revenue Share', '3rd Party MUPO Net Revenue',
                    'Total MUPO Net Revenue', 'Total Revenue All Types', 'Comments', 'Africa', 'Asia Pacific', 'Europe', 'Latin America',
                    'Middle East', 'North America', 'South Asia', 'UK /Ireland',
                    'Perpertual Sales \(units\) Triggered by PDA|Perpetual Sales \(units\) Triggered by PDA',
                    'Perpertual Sales \(revenue\) triggered by PDA|Perpetual Sales \(revenue\) triggered by PDA', 'Sales through YBP',
                    'Sales through other 3rd\s+Parties'
                ],
            ],
        },

        # ebrary (stl), version 11
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 11,
            lines   => [
                ( [undef] ) x 8,
                [
                    'ebrary ID',
                    'Publisher',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Publisher Name',
                    'Title',
                    'List Price',
                    'Short-Term Loan Revenue Share',
                    '3rd Party Short-Term Loan Revenue',
                    'Percentage of List Price Charged - 1 Day Loans',
                    'Total Number - 1 Day Loans',
                    'Total Net Revenue - 1 Day Loans',
                    '3rd Party Total Number - 1 Day Loans',
                    '3rd Party Total Net Revenue - 1 Day Loans',
                    'Total Net Revenue - 1 Day Loans',
                    'Percentage of List Price Charged - 7 Day Loans',
                    'Total Number - 7 Day Loans',
                    'Total Net Revenue - 7 Day Loans',
                    '3rd Party Total Number - 7 Day Loans',
                    '3rd Party Total Net Revenue - 7 Day Loans',
                    'Total Net Revenue - 7 Day Loans',
                    'Total Net Revenue: All Short-term Loans',
                    'Number of Perpetual Sales Triggered After an Initial Short-Term Loan'
                ],
            ],
        },

        # ebrary (perpetual), version 12
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 12,
            lines   => [
                ( [undef] ) x 4,
                [
                    'ebrary ID', 'Electronic ISBN', 'Print ISBN', 'Publisher Name', 'Title', 'List Price', undef, 'Direct SUPO Sales',
                    'Direct SUPO Revenue Share',  'Direct SUPO Net Revenue', '3rd Party SUPO Sales', '3rd Party SUPO Revenue Share',
                    '3rd Party SUPO Net Revenue', 'Total SUPO Net Revenue',  'Direct 3USER Sales',   'Direct 3USER Revenue Share',
                    'Direct 3USER Net Revenue', '3rd Party 3USER Sales', '3rd Party 3USER Revenue Share', '3rd Party 3USER Net Revenue',
                    'Total 3USER Net Revenue',  'Direct MUPO Sales',     'Direct MUPO Revenue Share',     'Direct MUPO Net Revenue',
                    '3rd Party MUPO Sales', '3rd Party MUPO Revenue Share', '3rd Party MUPO Net Revenue', 'Total MUPO Net Revenue',
                    'Total Revenue All Types', 'Comments',   'Africa', 'Asia Pacific', 'Europe', 'Latin America', 'Middle East',
                    'North America',           'South Asia', 'UK Ireland',
                    'Perpertual Sales units Triggered by PDA|Perpetual Sales units Triggered by PDA',
                    'Perpertual Sales revenue triggered by PDA|Perpetual Sales revenue triggered by PDA', 'Sales through YBP',
                    'Sales through other 3rd\s+Parties'
                ],
            ],
        },

        # ebrary (stl), version 13
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 13,
            lines   => [
                ( [undef] ) x 4,
                [
                    'ebrary ID',
                    'Publisher',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Publisher Name',
                    undef,
                    'Title',
                    'List Price',
                    'Short\s?-Term Loan Revenue Share',
                    '3rd Party Short\s?-Term Loan Revenue',
                    'Percentage of List Price Charged -\s?1 Day Loans',
                    'Total Number -\s?1 Day Loans',
                    'Total Net Revenue -\s?1 Day Loans',
                    '3rd Party Total Number -\s?1 Day Loans',
                    '3rd Party Total Net Revenue -\s?1 Day Loans',
                    'Total Net Revenue -\s?1 Day Loans',
                    'Percentage of List Price Charged -\s?7 Day Loans',
                    'Total Number -?\s?7 Day Loans',
                    'Total Net Revenue -\s?7 Day Loans',
                    '3rd Party Total Number \s?-\s?7 Day Loans',
                    '3rd Party Total Net Revenue -\s?7 Day Loans',
                    'Total Net Revenue -\s?7 Day Loans',
                    'Total Net Revenue All: Short\s?-term Loans',
                    'Number of Perpetual Sales Triggered After an Initial Short\s?-Term'
                ],
            ],
        },

        # ebrary (stl), version 14
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 14,
            lines   => [
                ( [undef] ) x 4,
                [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Publisher Name',
                    'Title',
                    undef,
                    'List Price',
                    'Direct SUPO Sales',
                    'Direct SUPO Revenue Share',
                    'Direct SUPO Net Revenue',
                    '3rd Party SUPO Sales',
                    '3rd Party SUPO Revenue Share',
                    '3rd Party SUPO Net Revenue',
                    'Total SUPO Net Revenue',
                    'Direct 3USER Sales',
                    'Direct 3USER Revenue Share',
                    'Direct 3USER Net Revenue',
                    '3rd Party 3USER Sales',
                    '3rd Party 3USER Revenue Share',
                    'ID3rd Party 3USER Net Revenue',
                    'Total 3USER Net Revenue',
                    'Direct MUPO Sales',
                    'Direct MUPO Revenue Share',
                    'Direct MUPO Net Revenue',
                    '3rd Party MUPO Sales',
                    '3rd Party MUPO Revenue Share',
                    '3rd Party MUPO Net Revenue',
                    'Total MUPO Net Revenue',
                    'Total Revenue All Types',
                    'Comments',
                    'Africa',
                    'Asia Pacific',
                    'Europe',
                    'Latin America',
                    'Middle East',
                    'North America',
                    'South Asia',
                    'UK Ireland',
                    'Perpertual Sales units Triggered by PDA',
                    'Perpertual Sales revenue triggered by PDA',
                    'Sales through YBP',
                    'Sales through other 3rd Parties',
                    '^$'
                ],
            ],
        },

        # ebrary (stl), another version 14
        # Just some small differences in the headers that don't affect any columns we care about.
        {
            service => BookPub::Tracker::Service::EBRARY,
            version => 14,
            lines   => [
                ( [undef] ) x 4,
                [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Primary Author',
                    'Publisher Name',
                    'Title',
                    undef,
                    'List Price',
                    'Direct SUPO Sales',
                    'Direct SUPO Revenue Share',
                    'Direct SUPO Net Revenue',
                    '3rd Party SUPO Sales',
                    '3rd Party SUPO Revenue Share',
                    '3rd Party SUPO Net Revenue',
                    'Total SUPO Net Revenue',
                    'Direct 3USER Sales',
                    'Direct 3USER Revenue Share',
                    'Direct 3USER Net Revenue',
                    '3rd Party 3USER Sales',
                    '3rd Party 3USER Revenue Share',
                    'ID3rd Party 3USER Net Revenue',
                    'Total 3USER Net Revenue',
                    'Direct MUPO Sales',
                    'Direct MUPO Revenue Share',
                    'Direct MUPO Net Revenue',
                    '3rd Party MUPO Sales',
                    '3rd Party MUPO Revenue Share',
                    '3rd Party MUPO Net Revenue',
                    'Total MUPO Net Revenue',
                    'Total Revenue All Types',
                    'Comments',
                    'Africa',
                    'Asia Pacific',
                    'Europe',
                    'Latin America',
                    'Middle East',
                    'North America',
                    'South Asia',
                    'UK Ireland',
                    'Perpertual Sales units Triggered by PDA',
                    'Perpertual Sales revenue triggered by PDA',
                    'Sales through 3rd Parties',
                    '^$'
                ],
            ],
        },

        # ebrary version 15
        {
            service          => BookPub::Tracker::Service::EBRARY,
            version          => 15,
            match_on_any_row => 1,
            lines            => [ [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Other ISBN',
                    'ISSN',
                    'Primary Author',
                    undef,
                    'Title',
                    'Licensed Access Prints',
                    'Licensed Access Copies',
                    'Licensed Access Views',
                    'Licensed Access Page Download',
                    'Licensed Access Full Download',
                    'Split Pool Usage Revenue',
                    'Total Revenue All Types',
                    '^$'
                ],
            ],
        },

        # ebrary (Corporate) version 16
        {
            service   => BookPub::Tracker::Service::EBRARY,
            version   => 16,
            file_name => qr/(?: 200[0-9]-Q[1-4] | 2018-Q1 | Q[1-4]-200[0-9] | Q1-2018 )/x,
            lines     => [
                ( [undef] ) x 2,
                [
                    'Doc ID',       'CP ID',     'Content Provider', 'Publisher',
                    'Title',        'p ISBN',    'e ISBN',           'Pub Date',
                    'Pub Discount', '0-82',      '83-199',           '200-399',
                    '400-799',      '800-1666',  '1667-4999',        '5000-9999',
                    '0-82',         '83-199',    '200-399',          '400-799',
                    '800-1666',     '1667-4999', '5000-9999',        'Total Revenue Due',
                    '^$'
                ],
            ],
        },

        # RSD-4471 - ProQuest Subscription v16 (the same as Ebrary v16)
        {
            service   => BookPub::Tracker::Service::PROQUEST_SUBSCRIPTION,
            version   => 16,
            file_name => qr/(?: 2018-Q[2-4] | 2019-Q[2-4] | 20[2-9][0-9]-Q[1-4] | Q[2-4]-2018 | Q[2-4]-2019 | Q[1-4]-20[2-9][0-9] )/x,
            lines     => [
                ( [undef] ) x 2,
                [
                    'Doc ID',       'CP ID',     'Content Provider', 'Publisher',
                    'Title',        'p ISBN',    'e ISBN',           'Pub Date',
                    'Pub Discount', '0-82',      '83-199',           '200-399',
                    '400-799',      '800-1666',  '1667-4999',        '5000-9999',
                    '0-82',         '83-199',    '200-399',          '400-799',
                    '800-1666',     '1667-4999', '5000-9999',        'Total Revenue Due',
                    '^$'
                ],
            ],
        },

        # ProQuest Subscription (RSD-4469), it was ebrary version 17 (subscription)
        {
            service          => BookPub::Tracker::Service::PROQUEST_SUBSCRIPTION,
            version          => 17,
            match_on_any_row => 1,
            lines            => [ [
                    'ebrary ID',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Other ISBN',
                    'ISSN',
                    'Primary Author',
                    undef,
                    'Publisher Name',
                    'Title',
                    'Licensed Access Prints',
                    'Licensed Access Copies',
                    'Licensed Access Views',
                    'Licensed Access Page Download',
                    'Licensed Access Full Download',
                    'Split Pool Usage Revenue',
                    'Total Revenue All Types',
                    '^$'
                ],
            ],
        },

        # ProQuest Subscription (RSD-4470), it was ebrary version 18 (RSD-1473)
        {
            service          => BookPub::Tracker::Service::PROQUEST_SUBSCRIPTION,
            version          => 18,
            match_on_any_row => 1,
            lines            => [ [
                    'Book ID',
                    'Publisher',
                    'Electronic ISBN',
                    'Print ISBN',
                    'Other ISBN',
                    'ISSN',
                    'Primary Author',
                    'Title',
                    'Licensed Access Prints',
                    'Licensed Access Copies',
                    'Licensed Access Views',
                    'Licensed Access Page Download',
                    'Licensed Access Full Download',
                    'Split Pool Usage Revenue',
                    'Total Revenue All Types',
                    '^$'
                ],
            ],
        },

        # Amazon, version 19
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 19,
            lines   => [ [ 'VSIN', 'Author', 'ASIN', 'Title', 'Ship Date', 'Units Sold', 'List Price', 'Cost', 'Payment Amount' ], ],
        },

        # Amazon, version 21
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 21,
            lines   => [ [
                    '.*\(Invoice Date\)',
                    'ASIN',
                    '.* \(Physical ISBN-10\)',
                    '.* \(Physical ISBN-13\)',
                    '.* \(Digital ISBN\)',
                    '.* \(JDPC_ID\)',
                    '.* \(Title\)',
                    '.* \(Author\)',
                    '.* \(Imprint\)',
                    '.* \(Format\)',
                    '.* \(Units Purchased\)',
                    '.* \(Units Refunded\)',
                    '.* \(Net Units\)',
                    '.*\(Net Units MTD\)',
                    '.* \(Adjustments Made\)',
                    '.*.* \(List Price\)',
                    '.* \(List Price Currency\)',
                    '.* \(Publisher Price\)',
                    '.* \(Publisher Price Currency\)',
                    'PD \(Amazon.*\) \(Discount Percentage\)',
                    '.* \(Payment Amount\)',
                    '.* \(Payment Amount Currency\)',
                    '.* \(Country Code\)',
                    '^$'
                ]
            ],
        },

        # Amazon, version 31
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 31,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'List Price',
                    'List Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Coop Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ]
            ],
        },

        # Amazon, version 35
        {    # Basically version 31 without the country code column (but with agency prices)
            service => BookPub::Tracker::Service::AMAZON,
            version => 35,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Coop Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ]
            ],
        },

# Amazon, version 54 - extended from version 35 with Country Code (and without the sign flipping, we'll need to do something else if it comes up...) (FBoD11398)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 54,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Coop Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Amazon, version 62 - extended from v 54 but with an additional column at the end
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 62,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Coop Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'Program Type',
                    '^$'
                ],
            ],
        },

        # Amazon, version 63 (RSD-3546)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 63,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Publisher Price Without Tax',
                    'Publisher Price Without Tax Currency',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'Program Type',
                    '^$'
                ]
            ],
        },

        # Amazon, version 53
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 53,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Publisher Price Without Tax',
                    'Publisher Price Without Tax Currency',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    '^$'
                ]
            ],
        },

        # Amazon, version 67
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 67,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'Fund Debit Amount',
                    'Fund Debit Currency',
                    'Program Type',
                    'Incentive Rate',
                    'Incentive Amount',
                    'Final Payment Amount',
                    '^$'
                ]
            ],
        },

        # Amazon, version 71
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 71,
            lines   => [ [
                'Invoice Date',
                'ASIN',
                'Physical ISBN-10',
                'Physical ISBN-13',
                'Digital ISBN',
                'Title',
                'Author',
                'Imprint',
                'Format',
                'Units Purchased',
                'Units Refunded',
                'Net Units',
                'Net Units MTD',
                'Adjustments Made',
                'Our Price',
                'Our Price Currency',
                'Publisher Price',
                'Publisher Price Currency',
                'Discount Percentage',
                'Payment Amount',
                'Payment Amount Currency',
                'Country Code',
                'incentive[_\s]payment[_\s]rate',
                'incentive[_\s]payment[_\s]amount',
                'incentive[_\s]payment[_\s]currency',
                'base[_\s]payment[_\s]amount',
                'base[_\s]payment[_\s]amount[_\s]currency',
                'Fund[_\s]Debit[_\s]Amount',
                'Fund[_\s]Debit[_\s]Currency',
                'Program[_\s]Type',
                '^$'
                ]
            ],
        },

        # Amazon, version 72 (RSD-6821)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 72,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Net Units Refunded',
                    'Refund Commission',
                    'Refund Commission Currency',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Program Type',
                    'Max Payment Per Borrow',
                    'Units Hitting Max Payment',
                    '^$'
                ]
            ],
        },

        # Amazon, version 73 (v20 -> v5) RSD-6818
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 73,
            lines   => [ [
                    'Invoice Date',
                    'ASIN',
                    'Physical ISBN-10',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Title',
                    'Author',
                    'Imprint',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'Net Units MTD',
                    'Adjustments Made',
                    'Our Price',
                    'Our Price Currency',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'Discount Percentage',
                    'Payment Amount',
                    'Payment Amount Currency',
                    'Country Code',
                    'incentive[_ ]payment[_ ]rate',
                    'incentive[_ ]payment[_ ]amount',
                    'incentive[_ ]payment[_ ]currency',
                    'base[_ ]payment[_ ]amount',
                    'base[_ ]payment[_ ]amount[_ ]currency',
                    '^$'
                ]
            ],
        },

        # Amazon, version 75 (like as v56 with rows updated. RSD-7219)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 75,
            lines   => [ [
                    'report_date',
                    'transaction_id',
                    'order_id',
                    'transaction_date',
                    'date_used_for_tax_calc',
                    'isbn',
                    'asin',
                    'title',
                    'primary_author',
                    'product_tax_code',
                    'quantity_purchased',
                    'transaction_status',
                    'publisher_price',
                    'publisher_price_currency',
                    'our_price',
                    'our_price_currency',
                    'tax_type_code',
                    'transaction_type_code',
                    'tax_usage_type_code',
                    'rule_reason_code',
                    'buyer_exemption_code',
                    'bill_to_city',
                    'bill_to_state',
                    'bill_to_postal_code',
                    'bill_to_country',
                    'city_tax_collection_model',
                    'city_tax_collection_responsible_party',
                    'city_taxed_jurisdiction',
                    'county_tax_collection_model',
                    'county_tax_collection_responsible_party',
                    'county_taxed_jurisdiction',
                    'state_tax_collection_model',
                    'state_tax_collection_responsible_party',
                    'state_taxed_jurisdiction',
                    'district_tax_collection_model',
                    'district_tax_collection_responsible_party',
                    'district_taxed_jurisdiction',
                    'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',
                    'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',
                    'state_exempt_sale_amount',
                    'county_taxable_sale_amount',
                    'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',
                    'county_exempt_sale_amount',
                    'city_taxable_sale_amount',
                    'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',
                    'city_exempt_sale_amount',
                    'district_taxable_sale_amount',
                    'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount',
                    'district_exempt_sale_amount',
                    'district_tax_amount',
                    'city_tax_amount',
                    'county_tax_amount',
                    'state_tax_amount',
                    'state_taxed_juris_tax_rate',
                    'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',
                    'district_taxed_juris_tax_rate',
                    'payment_amount',
                    'payment_amount_currency',
                    'tax_payment_amount',
                    'tax_payment_currency',
                    'program_type',
                    '^$'
                ]
            ],
        },

        # Amazon, version 83
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 83,
            lines   => [ [
                    'Date',
                    'Title',
                    'Author',
                    'eISBN',
                    'Reference ID',
                    'Release Date',
                    'ASIN',
                    'COR',
                    'Amazon Website',
                    'Payout Rate',
                    'Transaction Type',
                    'Publisher Price',
                    'Publisher Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Offer Price',
                    'Offer Price Currency',
                    'Units Sold',
                    'Units Refunded',
                    'Net Units Sold',
                    'Payment Amount',
                    'Payment Amount Currency',
                    '^$'
                ]
            ],
        },

        # Amazon, version 84
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 84,
            lines   => [ [
                    'report_date',
                    'transaction_id',
                    'order_id',
                    'transaction_date',
                    'date_used_for_tax_calc',
                    'isbn',
                    'asin',
                    'title',
                    'primary_author',
                    'product_tax_code',
                    'quantity_purchased',
                    'transaction_status',
                    'publisher_price',
                    'publisher_price_currency',
                    'our_price',
                    'our_price_currency',
                    'tax_type_code',
                    'transaction_type_code',
                    'tax_usage_type_code',
                    'rule_reason_code',
                    'buyer_exemption_code',
                    'bill_to_city',
                    'bill_to_state',
                    'bill_to_postal_code',
                    'bill_to_country',
                    'city_tax_collection_model',
                    'city_tax_collection_responsible_party',
                    'city_taxed_jurisdiction',
                    'county_tax_collection_model',
                    'county_tax_collection_responsible_party',
                    'county_taxed_jurisdiction',
                    'state_tax_collection_model',
                    'state_tax_collection_responsible_party',
                    'state_taxed_jurisdiction',
                    'district_tax_collection_model',
                    'district_tax_collection_responsible_party',
                    'district_taxed_jurisdiction',
                    'tax_location_code_taxed_juris',
                    'state_taxable_sale_amount',
                    'state_nontaxable_sale_amount',
                    'state_zero_rate_sale_amount',
                    'state_exempt_sale_amount',
                    'county_taxable_sale_amount',
                    'county_nontaxable_sale_amount',
                    'county_zero_rate_sale_amount',
                    'county_exempt_sale_amount',
                    'city_taxable_sale_amount',
                    'city_nontaxable_sale_amount',
                    'city_zero_rate_sale_amount',
                    'city_exempt_sale_amount',
                    'district_taxable_sale_amount',
                    'district_nontaxable_sale_amount',
                    'district_zero_rate_sale_amount',
                    'district_exempt_sale_amount',
                    'district_tax_amount',
                    'city_tax_amount',
                    'county_tax_amount',
                    'state_tax_amount',
                    'state_taxed_juris_tax_rate',
                    'county_taxed_juris_tax_rate',
                    'city_taxed_juris_tax_rate',
                    'district_taxed_juris_tax_rate',
                    'payment_amount',
                    'payment_amount_currency',
                    'tax_payment_amount',
                    'tax_payment_currency',
                    'program_type',
                    'pub_rewards_credits',
                    'pub_rewards_credits_currency',
                    'net_cogs',
                    '^$'
                ]
            ],
        },

        # Amazon v85. Like v5 but different mappings. (RSD-11194)
        {
            service => BookPub::Tracker::Service::AMAZON,
            version => 85,
            match_on_any_row => 1,
            lines   => [ [
                    '日付 \(Invoice Date\)',
                    'ASIN',
                    '紙書籍版ISBN_10桁 \(Physical ISBN-10\)',
                    '紙書籍版ISBN_13桁 \(Physical ISBN-13\)',
                    '電子書籍ISBN \(Digital ISBN\)',
                    'タイトル \(Title\)',
                    '著者 \(Author\)',
                    '出版者 \(Imprint\)',
                    'フォーマット \(Format\)',
                    '注文数 \(Units Purchased\)',
                    '返品数 \(Units Refunded\)',
                    '販売数 \(Net Units\)',
                    '販売数\(当月\)\(Net Units MTD\)',
                    '前月調整数 \(Adjustments Made\)',
                    '希望小売価格\(販売通貨\) \(List Price\)',
                    '希望小売価格_通貨 \(List Price Currency\)',
                    '販売価格 \(Our Price\)',
                    '販売通貨 \(Our Price Currency\)',
                    '希望小売価格\(設定通貨\) \(Publisher Price\)',
                    '希望小売価格_通貨 \(Publisher Price Currency\)',
                    'PD \(Amazon取り分\) \(Discount Percentage\)',
                    '支払金額 \(Payment Amount\)',
                    '支払金額_通貨 \(Payment Amount Currency\)',
                    '国コード \(Country Code\)',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 1
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 1,
            lines   => [
                ( [undef] ) x 6,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Title',
                    'ONIX Currency',
                    'Exchange Rate ONIX',
                    'ONIX Price',
                    'ONIX Price in Euro',
                    'Publisher Share per Title in ONIX Currency',
                    'Publisher Share per Title in Euro',
                    'Purchase Currency',
                    'Exchange Rate Purchase',
                    'Publisher Share per Title in Purchase Currency',
                    'Currency Sale',
                    'Exchange Rate Sale',
                    'Gross Price to end-Customer',
                    'Gross Price to end-Customer in Euro',
                    'Net Price to end-Customer',
                    'Net Price to end-Customer in Euro',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM Fee',
                    'DRM Fee in Euro',
                    'Margin Percentage'
                ],
            ],
        },

        # txtr GmbH, version 2
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 2,
            lines   => [
                ( [undef] ) x 6,
                [
                    'Transaction ID',
                    'Invoice No',
                    'Date',
                    'Time',
                    'ISBN',
                    'Title',
                    'ONIX Currency',
                    'Exchange Rate ONIX',
                    'ONIX Price',
                    'ONIX Price in Euro',
                    'Publisher Share per Title in ONIX Currency',
                    'Publisher Share per Title in Euro',
                    'Purchase Currency',
                    'Exchange Rate Purchase',
                    'Publisher Share per Title in Purchase Currency',
                    'Currency Sale',
                    'Exchange Rate Sale',
                    'Gross Price to end-Customer',
                    'Gross Price to end-Customer in Euro',
                    'Net Price to end-Customer',
                    'Net Price to end-Customer in Euro',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM Fee',
                    'DRM Fee in Euro',
                    'Margin Percentage',
                    'Price Type',
                    'state/province \(only US \/ CA\)',
                    'state tax in USD \/ CAD',
                    'county tax in USD \/ CAD',
                    'city tax in USD \/ CAD',
                    'transit tax in USD \/ CAD',
                    'special tax in USD \/ CAD',
                    'total sales tax in USD \/ CAD',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 3
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 3,
            lines   => [
                ( [undef] ) x 6,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Author',
                    'Title',
                    'Product Type',
                    'ONIX Currency',
                    'Exchange Rate ONIX',
                    'ONIX Price',
                    'ONIX Price in Euro',
                    'Publisher Share per Title in ONIX Currency',
                    'Publisher Share per Title in Euro',
                    'Purchase Currency',
                    'Exchange Rate Purchase',
                    'Publisher Share per Title in Purchase Currency',
                    'Currency Sale',
                    'Exchange Rate Sale',
                    'Gross Price to end-Customer',
                    'Gross Price to end-Customer in Euro',
                    'Net Price to end-Customer',
                    'Net Price to end-Customer in Euro',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM Fee',
                    'DRM Fee in Euro',
                    'Margin Percentage',
                    'Price Type',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 4
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 4,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Invoice No',
                    'Date',
                    'Time',
                    'ISBN',
                    'Title',
                    'ONIX Currency',
                    'ONIX Price in ONIX Currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Publisher Share per Title in ONIX Currency',
                    'Publisher Share per Title in EUR',
                    'Reporting Currency',
                    'Exchange rate EUR to USD',
                    'Publisher Share per Title in USD',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price in Sale Currency',
                    'Unit Gross Price in EUR',
                    'Unit Net Price in Sale Currency',
                    'Unit Net Price in EUR',
                    'Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate ID',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM fee in USD',
                    'DRM fee in EU',
                    'Publisher Share in ',
                    'Price Type',
                    'Refunded By',
                    'State / Province',
                    'City',
                    'Zip code',
                    'Tax Currency',
                    'Country Tax',
                    'State /Province Tax',
                    'County Tax',
                    'City Tax',
                    'Transit Tax',
                    'Special Tax',
                    'Total sales tax',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 5
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 5,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Author',
                    'Title',
                    'Product Type',
                    'ONIX Currency',
                    'ONIX Price in ONIX currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Publisher Share per Title in ONIX Currency',
                    'Publisher Share per Title in EUR',
                    'Purchase currency',
                    'Exchange Rate Purchase',
                    'Publisher Share per Title in \(GBP\)',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price to End-Customer sale currency',
                    'Unit Gross Price to End-Customer in EUR',
                    'Unit Net Price to End-Customer sale currency',
                    'Unit Net Price to End-Customer in EUR',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM Fee',
                    'DRM Fee in EUR',
                    'Discount in %',
                    'ONIX Price type',
                    'Refunded by',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 6
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 6,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Author',
                    'Title',
                    'Product Type',
                    'ONIX Currency',
                    'ONIX Price in ONIX currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Net Publisher Share per Title in ONIX Currency',
                    'Net Publisher Share per Title in EUR',
                    'Purchase currency',
                    'Exchange Rate Purchase',
                    'Net Publisher Share per Title in \(USD\)',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price to End-Customer sale currency',
                    'Promotional discount sale currency',
                    'Unit Gross Price to End-Customer in EUR',
                    'Unit Net Price to End-Customer sale currency',
                    'Unit Net Price to End-Customer in EUR',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM Fee',
                    'DRM Fee in EUR',
                    'Discount in %',
                    'ONIX Price type',
                    'Refunded by',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 7
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 7,
            lines   => [
                [undef],
                [undef],
                [
                    'Order number',
                    'Order date',
                    'Sales country',
                    'Payment method',
                    'ISBN-13',
                    'ISBN-10',
                    'Title',
                    'Sales type',
                    'Original Price \(Local Currency\)',
                    'Charged Amount \(Local Currency\)',
                    'Charged Amount \(USD\)',
                    'Order status',
                    'Publisher',
                    'Contents ID',
                    'txtr - Date',
                    'txtr - Country Code',
                    'txtr - Currency Code',
                    'txtr - Charged Amount \(USD\)',
                    'txtr - VAT Rate',
                    'txtr - VAT Amount \(USD\)',
                    'txtr - Net Charged Amount \(USD\)',
                    'txtr - Content Provider',
                    'txtr - Publisher Share Percentage',
                    'txtr - Net Publisher Share \(USD\)',
                    'txtr - Net Publisher Share \(EUR\)',
                    'txtr - Net Publisher Share \(GBP\)',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 8
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 8,
            lines   => [
                ( [undef] ) x 6,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Title',
                    'Currency Purchase',
                    'Exchange Rate Purchase',
                    'Publisher Share per Title',
                    'Publisher Share per Title in Euro',
                    'Currency Sale',
                    'Exchange Rate Sale',
                    'Gross Price to end-Customer',
                    'Gross Price to end-Customer in Euro',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Content Provider',
                    'DRM Fee',
                    'DRM Fee in Euro',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 9
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 9,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Author',
                    'Title',
                    'Product Type',
                    'ONIX Currency',
                    'ONIX Price in ONIX currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Net Publisher Share per Title in ONIX Currency',
                    'Net Publisher Share per Title in EUR',
                    'Purchase currency',
                    'Exchange Rate Purchase',
                    'Net Publisher Share per Title in \(AUD\)',
                    'Exchange Rate Sale Currency to AUD',
                    'Taxes to remit to publisher sale currency',
                    'Taxes to remit to publisher in AUD',
                    'Amount due to publisher incl. tax to remit \(AUD\)',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price to End-Customer sale currency',
                    'Unit Gross Price to End-Customer in EUR',
                    'VAT Rate Sale',
                    'Unit Net Price to End-Customer sale currency',
                    'Unit Net Price to End-Customer in EUR',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM Fee',
                    'DRM Fee in EUR',
                    'Discount in %',
                    'ONIX Price type',
                    'Refunded by',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 10 (now using unified txtr.pm)
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 10,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Author',
                    'Title',
                    'Product Type',
                    'ONIX Currency',
                    'ONIX Price in ONIX currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Net Publisher Share per Title in ONIX Currency',
                    'Net Publisher Share per Title in EUR',
                    'Purchase currency',
                    'Exchange Rate Purchase',
                    'Net Publisher Share per Title in',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price to End-Customer sale currency',
                    'Promotional discount sale currency',
                    'Unit Gross Price to End-Customer in EUR',
                    'Unit Net Price to End-Customer sale currency',
                    'Unit Net Price to End-Customer in EUR',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM Type',
                    'DRM Fee',
                    'DRM Fee in EUR',
                    'Discount in %',
                    'ONIX Price type',
                    'Refunded by',
                    '^$'
                ],
            ],
        },

        # txtr GmbH, version 11 (still using unified txtr.pm)
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 11,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Invoice No',
                    'Date',
                    'Time',
                    'ISBN',
                    'Title',
                    'ONIX Currency',
                    'ONIX Price in ONIX Currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Net Publisher Share per Title in ONIX Currency',
                    'Net Publisher Share per Title in EUR',
                    'Reporting Currency',
                    'Exchange rate EUR to USD',
                    'Net Publisher Share per Title in USD',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price in Sale Currency',
                    'Unit Gross Price in EUR',
                    'Voucher Amount in Sale Currency',
                    'Voucher Amount in EUR',
                    'Unit Net Price in Sale Currency',
                    'Unit Net Price in EUR',
                    'Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate ID',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM fee in USD',
                    'DRM fee in EUR',
                    'Publisher Share in %',
                    'Price Type',
                    'Refunded By',
                    'State \/ Province.*\(only US\/CA\)',
                    'City.*\(only US\/CA\)',
                    'Zip code.*\(only US\/CA\)',
                    'Tax Currency.*\(only US\/CA\)',
                    'Country Tax.*\(only US\/CA\)',
                    'State \/Province Tax.*\(only US\/CA\)',
                    'County Tax.*\(only US\/CA\)',
                    'City Tax.*\(only US\/CA\)',
                    'Transit Tax.*\(only US\/CA\)',
                    'Special Tax.*\(only US\/CA\)',
                    'Total sales tax.*\(only US\/CA\)'
                ],
            ],
        },

        # txtr GmbH, version 12 (still using unified txtr.pm)
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 12,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Author',
                    'Title',
                    'Product Type',
                    'ONIX Currency',
                    'ONIX Price in ONIX currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Publisher Share per Title in ONIX Currency',
                    'Publisher Share per Title in EUR',
                    'Purchase currency',
                    'Exchange Rate Purchase',
                    'Publisher Share per Title in',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price to End-Customer sale currency',
                    'Unit Gross Price to End-Customer in EUR',
                    'Unit Net Price to End-Customer sale currency',
                    'Unit Net Price to End-Customer in EUR',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'Content Source',
                    'DRM Fee',
                    'DRM Fee in EUR',
                    'Discount in %',
                    'ONIX Price type',
                    'Refunded by'
                ],
            ],
        },

        # txtr GmbH, version 13 (still using unified txtr.pm)
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 13,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Invoice No',
                    'Date',
                    'Time',
                    'ISBN',
                    'Title',
                    'ONIX Currency',
                    'ONIX Price in ONIX Currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Net Publisher Share per Title in ONIX Currency',
                    'Net Publisher Share per Title in EUR',
                    'Reporting Currency',
                    'Exchange rate EUR to USD',
                    'Net Publisher Share per Title in USD',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price in Sale Currency',
                    'Unit Gross Price in EUR',
                    'Discount in Sale Currency',
                    'Unit Net Price in Sale Currency',
                    'Unit Net Price in EUR',
                    'Territory',
                    'Operation Reference',
                    'Affiliate ID',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM fee in USD',
                    'DRM fee in EUR',
                    'Publisher Share in %',
                    'Price Type',
                    'Refunded By',
                    'Country',
                    'State / Province',
                    'City',
                    'Zip code',
                    'Tax Currency \(only US/CA\)',
                    'Country Tax \(only US/CA\)',
                    'State /Province Tax \(only US/CA\)',
                    'County Tax \(only US/CA\)',
                    'City Tax \(only US/CA\)',
                    'Transit Tax \(only US/CA\)',
                    'Special Tax \(only US/CA\)',
                    'Total sales tax \(only US/CA\)'
                ],
            ],
        },

        # txtr GmbH, version 14 (still using unified txtr.pm)
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 14,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Invoice No',
                    'Date',
                    'Time',
                    'ISBN',
                    'Title',
                    'ONIX Currency',
                    'ONIX Price in ONIX Currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Net Publisher Share per Title in ONIX Currency',
                    'Net Publisher Share per Title in EUR',
                    'Reporting Currency',
                    'Exchange rate EUR to USD',
                    'Net Publisher Share per Title in USD',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price in Sale Currency',
                    'Unit Gross Price in EUR',
                    'Unit Net Price in Sale Currency',
                    'Unit Net Price in EUR',
                    'Territory',
                    'Operation Reference',
                    'Affiliate ID',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM fee in USD',
                    'DRM fee in EUR',
                    'Publisher Share in %',
                    'Price Type',
                    'Refunded By',
                    'Country',
                    'State / Province',
                    'City',
                    'Zip code',
                    'Tax Currency.*\(only US/CA\)',
                    'Country Tax.*\(only US/CA\)',
                    'State /Province Tax.*\(only US/CA\)',
                    'County Tax.*\(only US/CA\)',
                    'City Tax.*\(only US/CA\)',
                    'Transit Tax.*\(only US/CA\)',
                    'Special Tax.*\(only US/CA\)',
                    'Total sales tax.*\(only US/CA\)'
                ],
            ],
        },

        # txtr GmbH, version 15
        {
            service => BookPub::Tracker::Service::TXTR,
            version => 15,
            lines   => [
                ( [undef] ) x 10,
                [
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Author',
                    'Title',
                    'Product Type',
                    'ONIX Currency',
                    'ONIX Price in ONIX currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Net Publisher Share per Title in ONIX Currency',
                    'Net Publisher Share per Title in EUR',
                    'Purchase currency',
                    'Exchange Rate Purchase',
                    'Net Publisher Share per Title in \((AUD|GBP)\)',
                    'Exchange Rate Sale Currency to (AUD|GBP)',
                    'Taxes to remit to publisher sale currency',
                    'Taxes to remit to publisher in (AUD|GBP)',
                    'Amount due to publisher incl. tax to remit \((AUD|GBP)\)',
                    'Currency Sale',
                    'Exchange Rate Sale Currency to EUR',
                    'Unit Gross Price to End-Customer sale currency',
                    'Promotional discount sale currency',
                    'Unit Gross Price to End-Customer in EUR',
                    'VAT Rate Sale',
                    'Unit Net Price to End-Customer sale currency',
                    'Unit Net Price to End-Customer in EUR',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM Fee',
                    'DRM Fee in EUR',
                    'Discount in %',
                    'ONIX Price type',
                    'Refunded by',
                    'user ID',
                    'Country',
                    'State / Province',
                    'City',
                    'Zip code'
                ],
            ],
        },

        # Diesel eBooks, version 1
        {
            service => BookPub::Tracker::Service::DIESEL_EBOOKS,
            version => 1,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Report period from',
                    'Report period to',
                    'Report date',
                    'Reporting currency',
                    'Line item ID#',
                    'Ship-to country',
                    'Ship-to state or province \(CA\)',
                    'Ship-to county',
                    'Ship-to city',
                    'Ship-to district',
                    'Ship-to ZIP or postal code',
                    'Ship-to location ID# type',
                    'Ship-to location ID#',
                    'Bill-to state or province \(CA\)',
                    'Bill-to county',
                    'Bill-to city',
                    'Bill-to district',
                    'Bill-to ZIP or postal code',
                    'Bill-to location ID# type',
                    'Bill-to location ID#',
                    'Bill-to tax registration number',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Additional reference type',
                    'Additional reference ID#',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Quantity sold',
                    'Unit selling price',
                    'Agent\'s commission',
                    'Fee type\(s\)',
                    'Total fee amount',
                    'Currency',
                    'Sales value',
                    'Good \/ service classification',
                    'US State Sales Tax tax rate',
                    'US State Sales Tax taxable amount',
                    'US State Sales Tax tax amount',
                    'US County Sales Tax tax rate',
                    'US County Sales Tax taxable amount',
                    'US County Sales Tax tax amount',
                    'US City Sales Tax tax rate',
                    'US City Sales Tax taxable amount',
                    'US City Sales Tax tax amount',
                    'US District Sales Tax tax rate',
                    'US District Sales Tax taxable amount',
                    'US District Sales Tax tax amount',
                    'Non-US Sales Tax tax type 1',
                    'Non-US Sales Tax tax rate 1',
                    'Non-US Sales Tax taxable amount 1',
                    'Non-US Sales Tax tax amount 1',
                    'Non-US Sales Tax tax type 2',
                    'Non-US Sales Tax tax rate 2',
                    'Non-US Sales Tax taxable amount 2',
                    'Non-US Sales Tax tax amount 2',
                    'Non-US Sales Tax tax type 3',
                    'Non-US Sales Tax tax rate 3',
                    'Non-US Sales Tax taxable amount 3',
                    'Non-US Sales Tax tax amount 3',
                    'Total tax collected',
                    'Total number of Line items',
                    'Total sales value for all lines',
                    'Total US State Sales Tax tax amount',
                    'Total US County Sales Tax tax amount',
                    'Total US City Sales Tax tax amount',
                    'Total US District Sales Tax tax amount',
                    'Total Non-US Sales Tax tax amount 1',
                    'Total Non-US Sales Tax tax amount 2',
                    'Total Non-US Sales Tax tax amount 3',
                    'Total tax collected,all lines',
                    'Exempt sales',
                    '^$'
                ],
            ],
        },

        # Dragonmount, version 1
        {
            service => BookPub::Tracker::Service::DRAGONMOUNT,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'order item id',
                    'order time',
                    'isbn',
                    'title',
                    'series',
                    'author',
                    'customer zip',
                    'Customer City',
                    'Customer State',
                    'sold price',
                    'owed price',
                    'tax',
                    'Taxable Amount',
                    'Exempt Amount',
                    'Manual Identified as invalid',
                    'Invalid zip?',
                    'Invalid State?',
                    'Questionable',
                    '^$'
                ],
            ],
        },

        # Dragonmount, version 2
        {
            service => BookPub::Tracker::Service::DRAGONMOUNT,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'order item id',
                    'order time',
                    'isbn',
                    'title',
                    'series',
                    'author',
                    'customer zip',
                    'Customer City',
                    'Customer State',
                    'sold price',
                    'list price',
                    'owed price',
                    'tax',
                    'Taxable Amount',
                    'Exempt Amount',
                    'Manual Identified as invalid',
                    'Invalid zip?',
                    'Invalid State?',
                    'Questionable',
                    '^$'
                ],
            ],
        },

        # Dragonmount, version 3, FB13406
        {
            service => BookPub::Tracker::Service::DRAGONMOUNT,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'order item id',
                    'order time',
                    'isbn',
                    'title',
                    'series',
                    'author',
                    'customer zip',
                    'Customer City',
                    'Customer State',
                    'sold price',
                    'list price',
                    'owed price',
                    'tax',
                    'Taxable Amount',
                    'Exempt Amount',
                    'Manual Identified as invalid',
                    'Invalid zip?',
                    'Invalid State?',
                    'Questionable',
                    'Tax %',
                    '^$'
                ],
            ],
        },

        # Copia, version 1
        # Going to just try to match on the headers from the summary page...
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 1,
            lines   => [ [
                    'Row Labels|Transaction date',
                    'Books Sold',
                    'Sum of Sales|Sum of Unit selling price',
                    'Sum of List Price',
                    'Sum of Cost Due Publisher',
                    'Sum of Agent Comm', '^$'
                ],
            ],
        },

        # Copia, version 2
        # Going to just try to match on the headers from the summary page, again...
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 2,
            lines =>
              [ [ 'Date', 'Sum of Quantity sold', 'Sum of Unit selling price', 'Sum Due Publisher', 'Sum Agent Commission', '^$' ], ],
        },

        # Copia, version 3
        # Going to just try to match on the headers from the summary page, again...
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 3,
            lines   => [ [ 'Date', 'Quantity sold', 'Sum of List price', 'Sum of Amount Due Publisher', 'Agent Commission', '^$' ], ],
        },

        # Copia, version 3
        # Going to just try to match on the headers from the summary page, again...
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 3,
            lines =>
              [ [ 'ISBN', 'Sum of Quantity sold', 'Sum of List price', 'Sum of Amount Due Publisher', 'Sum of Agent Commision', '^$' ], ],
        },

        # Copia, another version 3, minor header variation...
        # Going to just try to match on the headers from the summary page, again...
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 3,
            lines =>
              [ [ 'ISBN', 'Sum of Quantity Sold', 'Sum of List price', 'Sum of Agent commission', 'Sum of Amount Due Publisher', '^$' ], ],
        },

        # Copia, another version 3,
        # They keep changing the headers on the summary page, so we're just gonna have to match on the details tab.
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Report period from',
                    'Report period to',
                    'Report Date',
                    'Reporting currency',
                    'line Item ID#',
                    'Ship-to country',
                    'Ship-to state.*or province',
                    'Ship-to county',
                    'Ship-to city',
                    'Ship-to district',
                    'Ship-to ZIP.*or postal code',
                    'ship-to Location.*ID# Type',
                    'ship-to Location.*ID#',
                    'Bill-to state.*or province',
                    'Bill-to county',
                    'Bill-to city',
                    'Bill-to district',
                    'Bill-to ZIP.*or postal code',
                    'Bill-to Location.*ID# type',
                    'Bill-to Location.*ID#',
                    'Bill-to tax registration Number',
                    'sub-agent ID#',
                    'sub-agent name',
                    'Transaction Date.*or date and time',
                    'Agent\'s transaction ID#',
                    'Additional reference type',
                    'Additional reference Id#',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author',
                    'Product Description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Quantity Sold',
                    'Unit Selling Price',
                    'Agent Commission',
                    'Fee type',
                    'Total fee amount',
                    'Currency',
                    'Sales Value',
                    'Good \/ service Classification',
                    'US State Sales Tax -Tax rate',
                    'US State Sales Tax taxable amount',
                    'US State Sales Tax -Tax Amount',
                    'US County Sales Tax -  Tax  rate',
                    'US County Sales Tax taxable Amount',
                    'US County Sales Tax-  Tax  Amount',
                    'US City Sales Tax - Tax rate',
                    'US City Sales  Tax taxable Amount',
                    'US City Sales Tax - Tax Amount',
                    'US District Sales Tax - Tax rate',
                    'US District Sales Tax taxable amount',
                    'US District Sales Tax - Tax amount',
                    'Non-US Sales Tax tax type 1',
                    'Non-US Sales Tax tax rate 1',
                    'Non-US Sales Tax taxable Amount 1',
                    'Non-US Sales Tax tax amount 1',
                    'Non-US Sales Tax tax type 2',
                    'Non-US Sales Tax tax rate 2',
                    'Non-US Sales Tax taxable Amount 2',
                    'Non-US Sales Tax tax amount 2',
                    'Non-US Sales Tax tax type 3',
                    'Non-US Sales Tax tax rate 3',
                    'Non-US Sales Tax taxable Amount 3',
                    'Non-US Sales Tax tax amount 3',
                    'Total tax collected',
                    'total number of Line Items',
                    'Total sales value for all lines',
                    'Total US State Sales Tax - tax amount',
                    'Total US County Sales Tax tax amount',
                    'Total US City Sales Tax tax amount',
                    'Total US District Sales Tax tax amount',
                    'Total Non-US Sales Tax tax amount 1',
                    'Total Non-US Sales Tax tax amount 2',
                    'Total Non-US Sales Tax tax amount 3',
                    'Total tax collected, all lines',
                    'Reporting agent ID#',
                    'Reporting agent name',
                    'Sales tax report type',
                    'List price',
                    'Tax exempt',
                    'Amount Due.*Publisher',
                    '^$'
                ],
            ],
        },

        # Copia, another version 3,
        # Matching on the Sales Summary tab.
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 3,
            lines   => [ [
                    'Main product.*ID#',
                    'Product title',
                    'Sum of Quantity sold',
                    'Sum of List price',
                    'Sum of Agent Commission',
                    'Sum of Amount Due Publisher',
                    '^$'
                ],
            ],
        },

        # Copia, another version 3,
        # This header is on the Details page
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Report period from',
                    'Report period to',
                    'Report date',
                    'Reporting currency',
                    'Line item ID#',
                    'Sales Territory',
                    'Ship-to state.*or province \(CA\)',
                    'Ship-to county',
                    'Ship-to city',
                    'Ship-to district',
                    'Ship-to ZIP.*or postal code',
                    'Ship-to location.*ID# type',
                    'Ship-to location.*ID#',
                    'Bill-to state.*or province \(CA\)',
                    'Bill-to county',
                    'Bill-to city',
                    'Bill-to district',
                    'Bill-to ZIP.*or postal code',
                    'Bill-to location.*ID# type',
                    'Bill-to location.*ID#',
                    'Bill-to tax registration number',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date.*or date and time',
                    'Agent\'s transaction ID#',
                    'Additional reference type',
                    'Additional reference ID#',
                    'Main product.*ID# type',
                    'Main product.*ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author',
                    'Product.*description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Quantity sold',
                    'Unit selling price',
                    'Agent\'s commission',
                    'Fee type\(s\)',
                    'Total fee amount',
                    'Currency',
                    'Sales value',
                    'Good / service classification',
                    'US State Sales Tax.*tax rate',
                    'US State Sales Tax.*taxable amount',
                    'US State Sales Tax.*tax amount',
                    'US County Sales Tax.*tax rate',
                    'US County Sales Tax.*taxable amount',
                    'US County Sales Tax.*tax amount',
                    'US City Sales Tax.*tax rate',
                    'US City Sales Tax.*taxable amount',
                    'US City Sales Tax.*tax amount',
                    'US District.*Sales Tax.*tax rate',
                    'US District.*Sales Tax.*taxable amount',
                    'US District.*Sales Tax.*tax amount',
                    'Non-US.*Sales Tax.*tax type 1',
                    'Non-US.*Sales Tax.*tax rate 1',
                    'Non-US.*Sales Tax.*taxable amount 1',
                    'Non-US.*Sales Tax.*tax amount 1',
                    'Non-US.*Sales Tax.*tax type 2',
                    'Non-US.*Sales Tax.*tax rate 2',
                    'Non-US.*Sales Tax.*taxable amount 2',
                    'Non-US.*Sales Tax.*tax amount 2',
                    'Non-US.*Sales Tax.*tax type 3',
                    'Non-US.*Sales Tax.*tax rate 3',
                    'Non-US.*Sales Tax.*taxable amount 3',
                    'Non-US.*Sales Tax.*tax amount 3',
                    'Total tax collected',
                    'Total number of Line items',
                    'Total sales value.*for all lines',
                    'Total.*US State Sales Tax.*tax amount',
                    'Total.*US County Sales Tax.*tax amount',
                    'Total.*US City Sales Tax.*tax amount',
                    'Total.*US District.*Sales Tax.*tax amount',
                    'Total.*Non-US.*Sales Tax.*tax amount 1',
                    'Total.*Non-US.*Sales Tax.*tax amount 2',
                    'Total.*Non-US.*Sales Tax.*tax amount 3',
                    'Total tax collected, all lines',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Sales tax.*report type',
                    'List price',
                    'Tax exempt',
                    'Amount Due Publisher',
                    'Agent Commission',
                    '^$'
                ],
            ],
        },

        # Copia, version 4
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product',
                    'Main product',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees',
                    'Total proceeds',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    '^$'
                ],
            ],
        },

        # Copia, version 5
        {
            service   => BookPub::Tracker::Service::COPIA,
            file_name => 'Copia',
            version   => 5,
            sheet     => 'any',
            lines     => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'sub-agent ID#',
                    'sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    '^$'
                ],
            ],
        },

        # Copia, version 6
        {
            service   => BookPub::Tracker::Service::COPIA,
            file_name => 'Copia',
            version   => 6,
            sheet     => 'any',
            lines     => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'sub-agent ID#',
                    'sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    'Country',
                    'State or Province',
                    'City',
                    'Zip Code',
                    'Business Model',
                    'School',
                    '^$'
                ],
            ],
        },

        # Copia verwion 7 (RSD-4835)
        {
            service => BookPub::Tracker::Service::COPIA,
            version => 7,
            sheet   => 'any',
            lines   => [ [
                    'Distributor',
                    'Term',
                    'Account',
                    'Department',
                    'Course',
                    'Sec',
                    'CRN',
                    'Course Title',
                    'Class Start',
                    'Opt Out Deadline',
                    'Instructor Name',
                    'Instructor email',
                    'ISBN',
                    'Book Title',
                    'Author',
                    'PreEnrollment',
                    'Opt Out',
                    'Final Enrollment',
                    'IA Unit Price',
                    'IA Unit Price Total',
                    'Due Publisher',
                    'Due Publisher Total',
                    '^$'
                ],
            ],
        },

        # BookShout!, version 1
        {
            service => BookPub::Tracker::Service::BOOKSHOUT,
            version => 1,
            lines   => [ [
                    'Line item field name',
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade / sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date\s+or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product\s+ID# type',
                    'Main product\s+ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded\s+quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale\s+disposal type',
                    'Class of trade / sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned / refunded value',
                    'Net value\s+before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned / refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned / refunded value',
                    'Total net sold value before fees',
                    'Total fees\s+of all types',
                    'Total proceeds\s+due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate'
                ],
            ],
        },

        # BookShout!, version 2
        {
            service => BookPub::Tracker::Service::BOOKSHOUT,
            version => 2,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Class of trade / sale',
                    'Sales territory',
                    'Reporting currency',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product authors',
                    'Product description',
                    'Publisher ID#',
                    'Publisher name',
                    'Imprint name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade / sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned / refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned / refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned / refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate'
                ],
            ],
        },

        # BookShout!, version 3
        {
            service          => BookPub::Tracker::Service::BOOKSHOUT,
            version          => 3,
            match_on_any_row => 1,
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade / sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product authors',
                    'Product description',
                    'Publisher ID#',
                    'Publisher name',
                    'Imprint name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade / sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned / refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned / refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned / refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type'
                ],
            ],
        },

        # BookShout!, version 4 (Special Sales Edition)
        {
            service => BookPub::Tracker::Service::BOOKSHOUT,
            version => 4,
            lines   => [ [
                    'Report Date',
                    'Report Begin Date',
                    'Report End Date',
                    'Job Name',
                    'Book Title',
                    'ISBN',
                    'Requested Quantity',
                    'Quantity Redeemed',
                    'Net Unit Price',
                    'Publisher Revenue',
                    'BookShout Fee Per Unit',
                    '^$'
                ],
            ],
        },

        # the_book_people, v1
        {
            service          => BookPub::Tracker::Service::THE_BOOK_PEOPLE,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 0,
            lines            => [ [
                    'ISBN',
                    'Title',
                    'Imprint',
                    'Format',
                    'Territory of Sale',
                    'Country of Sale',
                    'City of Sale',
                    'Price Currency',
                    'End User Price \(Inc VAT\)',
                    'End User Price \(Ex VAT\)',
                    'End User Price \(Ex VAT & Comission\)',
                    'Date Ordered',
                    'Date Fulfilled',
                    'Units Sold',
                    'Units Returned',
                    'Total Comission',
                    '^$'
                ],
            ],
        },

        # the_book_people, v2
        {
            service => BookPub::Tracker::Service::THE_BOOK_PEOPLE,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'ISBN', 'Title', 'Format', 'Country', 'City Code', 'Currency', 'Digital List Price/UK RRP',
                    'DLP Ex VAT', 'DLP Ex VAT and Commission',
                    'Order Date', 'Download Date',
                    'Order Qty', 'Return Qty', 'Commission', 'Imprint'
                ],
            ],
        },

        # the_book_people, v3
        {
            service => BookPub::Tracker::Service::THE_BOOK_PEOPLE,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'ISBN',           'Title',                 'Format',                    'Country',
                    'City Code',      'Currency',              'DLP',                       'DLP Ex VAT',
                    'End User Price', 'End User Price Ex VAT', 'DLP Ex VAT and Commission', 'Order Date',
                    'Download Date',  'Order Qty',             'Return Qty',                'Commission',
                    'Imprint',        'Publisher'
                ],
            ],
        },

        # the_book_people, v4
        {
            service => BookPub::Tracker::Service::THE_BOOK_PEOPLE,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'ISBN',       'Title',      'Format',         'Country',
                    'City Code',  'Currency',   'End User Price', 'End User Price Ex VAT',
                    'Cost Price', 'Order Date', 'Download Date',  'Order Qty',
                    'Return Qty', 'Commission', 'Imprint',        'Publisher',
                    '^$'
                ],
            ],
        },

        # flipkart, v1
        {
            service => BookPub::Tracker::Service::FLIPKART,
            version => 1,
            lines   => [ [
                    'Report ID',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade / sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID',
                    'Publisher name',
                    'Imprint name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade / sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price Currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned / refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned / refunded value',
                    'Total net sold before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent ID#',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'Total proceeds*',
                    '^$'
                ],
            ],
        },

        # flipkart, v2
        {
            service => BookPub::Tracker::Service::FLIPKART,
            version => 2,
            lines   => [ [
                    'Report ID',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade / sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID',
                    'Publisher name',
                    'Imprint name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned / refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade / sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price Currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned / refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned / refunded value',
                    'Total net sold before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent ID#',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'Net proceeds to the Publisher in preferred currency \([a-z]{3}\)',
                    '^$'
                ],
            ],
        },

        # flipkart, v3
        {
            service => BookPub::Tracker::Service::FLIPKART,
            version => 3,
            lines   => [ [
                    'Report Date',
                    'Report period From',
                    'Report period To',
                    'Reporting price type',
                    'Reporting currency',
                    'Main product ID',
                    'Product Title',
                    'Product author\(s\)',
                    'Gross sold quantity',
                    'Returned\/ refunded quantity',
                    'Net sold quantity',
                    'Unit price',
                    'Gross sold value',
                    'Returned Value',
                    'Net value before fees',
                    'Proceeds of sale due to publisher',
                    'Total gross sold value',
                    'Total returned\/ refunded value',
                    'Total net sold value before fees',
                    'Total proceeds due to publisher',
                    'Supplier Preferred Currency',
                    'Currency conversion rate',
                    'Net proceeds to publisher in supplier preferred currency',
                    '^$'
                ],
            ],
        },

        # flipkart, v3, same format as above, with 4 extra columns at the end.  I'm keeping the same version number
        {
            service => BookPub::Tracker::Service::FLIPKART,
            version => 3,
            lines   => [ [
                    'Report Date',
                    'Report period From',
                    'Report period To',
                    'Reporting price type',
                    'Reporting currency',
                    'Main product ID',
                    'Product Title',
                    'Product author\(s\)',
                    'Gross sold quantity',
                    'Returned\/ refunded quantity',
                    'Net sold quantity',
                    'Unit price',
                    'Gross sold value',
                    'Returned Value',
                    'Net value before fees',
                    'Proceeds of sale due to publisher',
                    'Total gross sold value',
                    'Total returned\/ refunded value',
                    'Total net sold value before fees',
                    'Total proceeds due to publisher',
                    'Supplier Preferred Currency',
                    'Currency conversion rate',
                    'Net proceeds to publisher in supplier preferred currency',
                    'Net proceeds in INR',
                    'Net Margin',
                    'Revenue share of Flipkart',
                    'Supplier ID',
                    '^$'
                ],
            ],
        },

        # flipkart, v3, same format as above, with Y column.  I'm keeping the same version number
        {
            service => BookPub::Tracker::Service::FLIPKART,
            version => 3,
            lines   => [ [
                    'Report Date',
                    'Report period From',
                    'Report period To',
                    'Reporting price type',
                    'Reporting currency',
                    'Main product ID',
                    'Product Title',
                    'Product author\(s\)',
                    'Gross sold quantity',
                    'Returned\/ refunded quantity',
                    'Net sold quantity',
                    'Unit price',
                    'Gross sold value',
                    'Returned Value',
                    'Net value before fees',
                    'Proceeds of sale due to publisher',
                    'Total gross sold value',
                    'Total returned\/ refunded value',
                    'Total net sold value before fees',
                    'Total proceeds due to publisher',
                    'Supplier Preferred Currency',
                    'Currency conversion rate',
                    'Net proceeds to publisher in supplier preferred currency',
                    'Net proceeds in INR',
                    'FSP',
                    'Net Margin',
                    'Revenue share of Flipkart',
                    'Supplier ID',
                    '^$'
                ],
            ],
        },

        # zola_books, v1
        {
            service => BookPub::Tracker::Service::ZOLA_BOOKS,
            version => 1,
            lines   => [ [
                    'Invoice #',
                    'Invoice Date',
                    'Name of Sub-Agent',
                    'EISBN',
                    'Author',
                    'Title',
                    'Publisher',
                    'Imprint',
                    'Format',
                    'QTY',
                    'Price Type',
                    'Commission %',
                    'Currency Code',
                    'List Price',
                    'Consumer Price',
                    'Revenue due to Publisher',
                    'Gross Exempt',
                    'Gross Taxable',
                    'Country',
                    'State',
                    'City',
                    'Zip',
                    'plus Four',
                    'GST',
                    'HST',
                    'State Tax',
                    'City Tax',
                    'Transit Tax',
                    'Total Tax',
                    '^$',
                ],
            ],
        },

        # ZOLA MMUS, v2
        {
            service => BookPub::Tracker::Service::ZOLA_BOOKS,
            version => 2,
            lines   => [ [
                    'Order ID',
                    'Order Date',
                    'ISBN-13',
                    'Title',
                    'Author',
                    'Fmt',
                    'QTY',
                    'Refunds',
                    'List Price',
                    'Sale Price',
                    'Pub/Dist',
                    'P/D %',
                    'Ter',
                    'State',
                    'City',
                    'Zip',
                    'Exempt',
                    'STA Rate',
                    'STA Tax',
                    'CTY Rate',
                    'CTY Tax',
                    'CIT Rate',
                    'CIT Tax',
                    'DIST Rate',
                    'DIST Tax',
                    'Tax Total',
                    '^$'
                ],
            ],
        },

        # igroup, v1
        {
            service => BookPub::Tracker::Service::IGROUP,
            version => 1,
            sheet   => 'any',
            lines   => [ ( [undef] ) x 2, [ 'No', 'ISBN', 'Title', 'Author', 'Year', 'Price', '^$' ], ],
        },

        # igroup, v2, FB 12744
        {
            service => BookPub::Tracker::Service::IGROUP,
            version => 2,
            sheet   => 'any',
            lines =>
              [ ( [undef] ) x 2, [ 'No', 'ISBN', 'Title', 'Author', 'Year', 'Price', 'TAEBDC Consortia \(Multiplier by 4\)', '^$' ], ],
        },

        # igroup, v3, FB21649
        {
            service => BookPub::Tracker::Service::IGROUP,
            version => 3,
            sheet   => 'any',
            lines =>
              [ ( [undef] ) x 2, [ 'No', 'ISBN', 'Title', 'Author', 'Year', 'Price', 'TAEBDC Consortia \(Multiplier by 5\)', '^$' ], ],
        },

        # zinio, v1
        {
            service          => BookPub::Tracker::Service::ZINIO,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'Publisher Name',
                    'Publication Name',
                    'Publication Type',
                    'Publication ID',
                    'Publication ISSN',
                    'User ID',
                    'Email',
                    'First Name',
                    'Last Name',
                    'Address1',
                    'Address2',
                    'City',
                    'State',
                    'Postal Code',
                    'User Country',
                    'User Franchisee Country Name',
                    'Transaction Type',
                    'Term',
                    'Billing Period',
                    'Publication Currency',
                    'List Sale Amt',
                    'Gross Sale Discount Amt Total',
                    'Net Sale Amt',
                    'Net Sale VAT',
                    'Publisher Contract Currency',
                    'Exchange Rate \(Publication to Publisher Currency\)',
                    'Net Sale Amt \(Publisher Currency\)',
                    'Net Sale VAT \(Publisher Currency\)',
                    'Publisher CC Fee \(Publisher Currency\)',
                    'Net Sale Remit Amt to Publisher \(Publisher Currency\)',
                    'Transaction Date',
                    'Purchase Type',
                    'Auto Renew Flag',
                    'Zinio Offer Code',
                    'Referral Source',
                    'Subscription Start Issue',
                    'Newsstand Code',
                    'Start Issue Title',
                    'Order ID',
                    'Application Name',
                    'Reader Platform Name',
                    'Reseller Name',
                    'Order Source',
                    'Order Type',
                    '^$'
                ],
            ],
        },

        # vital_source, v1
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 1,
            lines   => [ [
                    'TRANSACTION DATE', 'ISBN',               'TITLE',         'AUTHOR',
                    'PUBLISHER',        'TRANSACTION TYPE',   'IDG REFERENCE', 'QTY',
                    'LIST PRICE',       'PUBLISHER DISCOUNT', 'ROYALTY',       '^$'
                ],
            ],
        },

        # vital_source, v2
        {
            service          => BookPub::Tracker::Service::VITAL_SOURCE,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    'Internal Use Invoice #', 'Institution', 'Postal Code',     'Country Code',
                    'Title',                  'VBID\/ISBN',  'eISBN',           'Quantity',
                    'List Price',             'Discount %',  'Wholesale Price', 'Special Net Price',
                    'Total',                  '^$'
                ],
            ],
        },

        # vital_source, v3
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 3,
            lines   => [ [
                    'TRANSACTION_DATE', 'ISBN',          'EBOOK_ISBN', 'TITLE',      'AUTHOR',             'PUBLISHER',
                    'TRANSACTION_TYPE', 'IDG_REFERENCE', 'QTY',        'LIST_PRICE', 'PUBLISHER_DISCOUNT', 'ROYALTY',
                    'CURRENCY'
                ],
            ],
        },

        # vital_source, v4
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 4,
            lines   => [ [
                    'INTERNAL_USE_INVOICE_#', 'INSTITUTION',     'WHOLESALE_PERIOD',  'TITLE',
                    'VBID_ISBN',              'EISBN',           'QUANTITY',          'LIST_PRICE',
                    'DISCOUNT',               'WHOLESALE_PRICE', 'SPECIAL_NET_PRICE', 'TOTAL',
                    'CURRENCY',               '^$'
                ],
            ],
        },

        # vital_source, v5
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 5,
            lines   => [ [
                    'INTERNAL_USE_INVOICE_#', 'TRANSACTION_TYPE',  'INSTITUTION', 'WHOLESALE_PERIOD',
                    'TITLE',                  'VBID_ISBN',         'EISBN',       'FP_ID',
                    'DURATION',               'QUANTITY',          'LIST_PRICE',  'DISCOUNT',
                    'WHOLESALE_PRICE',        'SPECIAL_NET_PRICE', 'TOTAL',       'CURRENCY',
                    '^$'
                ],
            ],
        },

        # vital_source, v6
        {
            service          => BookPub::Tracker::Service::VITAL_SOURCE,
            version          => 6,
            match_on_any_row => 1,
            lines            => [ [
                    'Internal Use Invoice #', 'Title',      'VBID\/ISBN',               '# Units',
                    'List\s+Price',           'Discount %', 'Wholesale\/Special Price', 'Total',
                    '^$'
                ],
            ],
        },

        # vital_source, v7
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 7,
            lines   => [ [
                    'INTERNAL_USE_INVOICE_#', 'TRANSACTION_TYPE', 'INSTITUTION',     'POSTAL_CODE',
                    'COUNTRY',                'TERM_NAME',        'TITLE',           'VBID_ISBN',
                    'EISBN',                  'FP_ID',            'DURATION',        'QUANTITY',
                    'LIST_PRICE',             'DISCOUNT',         'WHOLESALE_PRICE', 'SPECIAL_NET_PRICE',
                    'TOTAL',                  'CURRENCY',         '^$'
                ],
            ],
        },

        # B&N Education, v10 (really, this is vital_source, v10 but we want to use the B&N Ed service ID for the file)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE_EDUCATION,
            version => 10,
            file_name => 'BNED',
            lines   => [ [
                    'INTERNAL_USE_INVOICE_#', 'TRANSACTION_TYPE', 'INSTITUTION', 'SYSTEM_USER|API',
                    'POSTAL_CODE',            'COUNTRY',          'TERM_NAME',   'TITLE',
                    'VBID_ISBN',              'EISBN',            'FP_ID',       'DURATION',
                    'QUANTITY',               'LIST_PRICE',       'DISCOUNT',    'WHOLESALE_PRICE',
                    'SPECIAL_NET_PRICE',      'TOTAL',            'CURRENCY',    '^$|PUB_ID',
                    '^$'
                ],
            ],
        },

        # vital_source, v10 (v7 with an extra column)
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 10,
            lines   => [ [
                    'INTERNAL_USE_INVOICE_#', 'TRANSACTION_TYPE', 'INSTITUTION', 'SYSTEM_USER|API',
                    'POSTAL_CODE',            'COUNTRY',          'TERM_NAME',   'TITLE',
                    'VBID_ISBN',              'EISBN',            'FP_ID',       'DURATION',
                    'QUANTITY',               'LIST_PRICE',       'DISCOUNT',    'WHOLESALE_PRICE',
                    'SPECIAL_NET_PRICE',      'TOTAL',            'CURRENCY',    '^$|PUB_ID',
                    '^$'
                ],
            ],
        },

        # B&N Education, v17 (really, this is vital_source, v17 but we want to use the B&N Ed service ID for the file)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE_EDUCATION,
            version => 17,
            file_name => 'BNED',
            lines   => [ [
                    'INVOICE_NUMBER',
                    'TRANSACTION_DATE',
                    'TRANSACTION_TYPE',
                    'TRANSACTION',
                    'DISTRIBUTOR',
                    'API',
                    'INSTITUTION_NAME',
                    'ADDRESS',
                    'STATE_OR_PROVINCE',
                    'POSTAL_CODE',
                    'COUNTRY',
                    'PUBLISHER',
                    'REDISTRIBUTOR',
                    'PRODUCT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'VBID',
                    'EISBN',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'CONTENT_TYPE',
                    'DURATION',
                    'DISCOUNT_CODE',
                    'CODE_TAG',
                    'TERM_NAME',
                    'QUANTITY',
                    'LIST_PRICE_CURRENCY',
                    'LIST_PRICE_TYPE',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'EFFECTIVE_DISCOUNT',
                    'PUB_COMP_UNIT',
                    'PUB_COMP_TOTAL',
                    'PUB_COMP_CURRENCY',
                    'EXCHANGE_RATE',
                    'VST_MARGIN_USD',
                    '^$'
                ],
            ],
        },

        # vital_source, v17
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 17,
            lines   => [ [
                    'INVOICE_NUMBER',
                    'TRANSACTION_DATE',
                    'TRANSACTION_TYPE',
                    'TRANSACTION',
                    'DISTRIBUTOR',
                    'API',
                    'INSTITUTION_NAME',
                    'ADDRESS',
                    'STATE_OR_PROVINCE',
                    'POSTAL_CODE',
                    'COUNTRY',
                    'PUBLISHER',
                    'REDISTRIBUTOR',
                    'PRODUCT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'VBID',
                    'EISBN',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'CONTENT_TYPE',
                    'DURATION',
                    'DISCOUNT_CODE',
                    'CODE_TAG',
                    'TERM_NAME',
                    'QUANTITY',
                    'LIST_PRICE_CURRENCY',
                    'LIST_PRICE_TYPE',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'EFFECTIVE_DISCOUNT',
                    'PUB_COMP_UNIT',
                    'PUB_COMP_TOTAL',
                    'PUB_COMP_CURRENCY',
                    'EXCHANGE_RATE',
                    'VST_MARGIN_USD',
                    '^$'
                ],
            ],
        },

        # B&N Education, v19 (really, this is vital_source, v19 but we want to use the B&N Ed service ID for the file)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE_EDUCATION,
            version => 19,
            file_name => 'BNED',
            lines   => [ [
                    'INVOICE_NUMBER',
                    'TRANSACTION_DATE',
                    'TRANSACTION_TYPE',
                    'TRANSACTION',
                    'VST BILLING MODEL',
                    'RINGGOLD_ID',
                    'IPEDS_ID',
                    'DISTRIBUTOR',
                    'API',
                    'INSTITUTION_NAME',
                    'ADDRESS',
                    'STATE or PROVINCE',
                    'POSTAL_CODE',
                    'COUNTRY',
                    'PUBLISHER',
                    'REDISTRIBUTOR',
                    'PRODUCT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'VBID',
                    'EISBN',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'CONTENT_TYPE',
                    'DURATION',
                    'DISCOUNT_CODE',
                    'CODE_TAG',
                    'TERM_NAME',
                    'QUANTITY',
                    'LIST_PRICE_CURRENCY',
                    'LIST_PRICE_TYPE',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'EFFECTIVE_DISCOUNT',
                    'PUB_COMP_UNIT',
                    'PUB_COMP_TOTAL',
                    'PUB_COMP_CURRENCY',
                    'EXCHANGE_RATE',
                    'VST_MARGIN_USD',
                    '^$'
                ],
            ],
        },

        # vital_source, v19
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 19,
            lines   => [ [
                    'INVOICE_NUMBER',
                    'TRANSACTION_DATE',
                    'TRANSACTION_TYPE',
                    'TRANSACTION',
                    'VST BILLING MODEL',
                    'RINGGOLD_ID',
                    'IPEDS_ID',
                    'DISTRIBUTOR',
                    'API',
                    'INSTITUTION_NAME',
                    'ADDRESS',
                    'STATE or PROVINCE',
                    'POSTAL_CODE',
                    'COUNTRY',
                    'PUBLISHER',
                    'REDISTRIBUTOR',
                    'PRODUCT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'VBID',
                    'EISBN',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'CONTENT_TYPE',
                    'DURATION',
                    'DISCOUNT_CODE',
                    'CODE_TAG',
                    'TERM_NAME',
                    'QUANTITY',
                    'LIST_PRICE_CURRENCY',
                    'LIST_PRICE_TYPE',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'EFFECTIVE_DISCOUNT',
                    'PUB_COMP_UNIT',
                    'PUB_COMP_TOTAL',
                    'PUB_COMP_CURRENCY',
                    'EXCHANGE_RATE',
                    'VST_MARGIN_USD',
                    '^$'
                ],
            ],
        },

        # B&N Education, v20 (really, this is vital_source, v20 but we want to use the B&N Ed service ID for the file)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE_EDUCATION,
            version => 20,
            file_name => 'BNED',
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION',
                'VST BILLING MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'QUANTITY',
                'LIST_PRICE_CURRENCY',
                'LIST_PRICE_TYPE',
                'LIST_PRICE',
                'LIST_PRICE_TOTAL',
                'EFFECTIVE_DISCOUNT',
                'PUB_COMP_UNIT',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                '^$'
                ],
            ],
        },

        # B&N Education, v25 (really, this is vital_source, v25 but we want to use the B&N Ed service ID for the file)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE_EDUCATION,
            version => 25,
            file_name => 'BNED',
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION',
                'VST BILLING MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'Child Company State',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'CONNECT_ISBN',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'QUANTITY',
                'LIST_PRICE_CURRENCY',
                'LIST_PRICE_TYPE',
                'LIST_PRICE',
                'LIST_PRICE_TOTAL',
                'EFFECTIVE_DISCOUNT',
                'TRANSACTION_FEE',
                'PUB_COMP_UNIT',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                '^$'
                ],
            ],
        },

        # B&N Education, v25 (really, this is vital_source, v25 but we want to use the B&N Ed service ID for the file)
        # Alternative header (RSD-10186)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE_EDUCATION,
            version => 25,
            file_name => 'BNED',
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION',
                'VST BILLING MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'Child Company State',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'CONNECT_ISBN',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'QUANTITY',
                'LIST_PRICE_CURRENCY',
                'LIST_PRICE_TYPE',
                'LIST_PRICE',
                'LIST_PRICE_TOTAL',
                'EFFECTIVE_DISCOUNT',
                'TRANSACTION_FEE',
                'PUB_COMP_UNIT',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                undef,
                'IA_PRICE',
                '^$'
                ],
            ],
        },

        # B&N Education, v27 (RSD-11163) (really, this is vital_source, v27 but we want to use the B&N Ed service ID for the file)
        {
            service => BookPub::Tracker::Service::BARNES_NOBLE_EDUCATION,
            version => 27,
            file_name => 'BNED',
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION_TYPE_CLASSIFICATION',
                'TRANSACTION',
                'BILLING_MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'Child Company State',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'CONNECT_ISBN',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION_DAYS',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'TRANSACTED_PRICE_TYPE',
                'QUANTITY',
                'TRANSACTED_UNIT_PRICE',
                'TRANSACTED_PRICE_TOTAL',
                'TRANSACTED_PRICE_CURRENCY',
                'EFFECTIVE_DISCOUNT',
                'TRANSACTION_FEE',
                'PUB_COMP_UNIT',
                'CA_GST',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                undef,
                'IA_PRICE',
                '^$'
                ],
            ],
        },

        # VitalSource, v25 (the previous section of the B&N Education is related)
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 25,
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION',
                'VST BILLING MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'Child Company State',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'CONNECT_ISBN',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'QUANTITY',
                'LIST_PRICE_CURRENCY',
                'LIST_PRICE_TYPE',
                'LIST_PRICE',
                'LIST_PRICE_TOTAL',
                'EFFECTIVE_DISCOUNT',
                'TRANSACTION_FEE',
                'PUB_COMP_UNIT',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                '^$'
                ],
            ],
        },

        # VitalSource, v25. Alternative header (RSD-10186)
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 25,
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION',
                'VST BILLING MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'Child Company State',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'CONNECT_ISBN',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'QUANTITY',
                'LIST_PRICE_CURRENCY',
                'LIST_PRICE_TYPE',
                'LIST_PRICE',
                'LIST_PRICE_TOTAL',
                'EFFECTIVE_DISCOUNT',
                'TRANSACTION_FEE',
                'PUB_COMP_UNIT',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                undef,
                'IA_PRICE',
                '^$'
                ],
            ],
        },

        # VitalSource, v26. (RSD-11072)
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 26,
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION_TYPE_CLASSIFICATION',
                'TRANSACTION',
                'BILLING_MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'Child Company State',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'CONNECT_ISBN',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION_DAYS',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'TRANSACTED_PRICE_TYPE',
                'QUANTITY',
                'TRANSACTED_UNIT_PRICE',
                'TRANSACTED_PRICE_TOTAL',
                'TRANSACTED_PRICE_CURRENCY',
                'TRANSACTION_FEE',
                'PUB_COMP_UNIT',
                'CA_GST',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EFFECTIVE_DISCOUNT',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                '^$'
                ],
            ],
        },

        #  # VitalSource, v27 (RSD-11163) The same as B&N Education, v27
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 27,
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION_TYPE_CLASSIFICATION',
                'TRANSACTION',
                'BILLING_MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'Child Company State',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'CONNECT_ISBN',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION_DAYS',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'TRANSACTED_PRICE_TYPE',
                'QUANTITY',
                'TRANSACTED_UNIT_PRICE',
                'TRANSACTED_PRICE_TOTAL',
                'TRANSACTED_PRICE_CURRENCY',
                'EFFECTIVE_DISCOUNT',
                'TRANSACTION_FEE',
                'PUB_COMP_UNIT',
                'CA_GST',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                undef,
                'IA_PRICE',
                '^$'
                ],
            ],
        },

        # vital_source, v20
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 20,
            lines   => [ [
                'VST REFERENCE NUMBER',
                'TRANSACTION_DATE',
                'TRANSACTION_TYPE',
                'TRANSACTION',
                'VST BILLING MODEL',
                'RINGGOLD_ID',
                'IPEDS_ID',
                'VST_DIST_ID',
                'DISTRIBUTOR',
                'API',
                'INSTITUTION_NAME',
                'ADDRESS',
                'STATE or PROVINCE',
                'POSTAL_CODE',
                'COUNTRY',
                'PUBLISHER',
                'REDISTRIBUTOR',
                'PRODUCT_TYPE',
                'PACKAGE_SKU',
                'SKU',
                'VBID',
                'EISBN',
                'CUSTOM_ISBN',
                'IA_CPID',
                'TITLE',
                'AUTHOR',
                'CONTENT_TYPE',
                'DURATION',
                'DISCOUNT_CODE',
                'CODE_TAG',
                'TERM_NAME',
                'QUANTITY',
                'LIST_PRICE_CURRENCY',
                'LIST_PRICE_TYPE',
                'LIST_PRICE',
                'LIST_PRICE_TOTAL',
                'EFFECTIVE_DISCOUNT',
                'PUB_COMP_UNIT',
                'PUB_COMP_TOTAL',
                'PUB_COMP_CURRENCY',
                'EXCHANGE_RATE',
                'VST_MARGIN_USD',
                'PUB_COMP_DUE_DATE',
                '^$'
                ],
            ],
        },

        # vital_source, v8 (v3 with a couple extra columns)
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 8,
            lines   => [ [
                    'TRANSACTION_DATE',   'ISBN',      'EBOOK_ISBN',       'FP_ID',         'DURATION', 'TITLE',
                    'AUTHOR',             'PUBLISHER', 'TRANSACTION_TYPE', 'IDG_REFERENCE', 'QTY',      'LIST_PRICE',
                    'PUBLISHER_DISCOUNT', 'ROYALTY',   'CURRENCY'
                ],
            ],
        },

        # vital_source, v9
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 9,
            lines   => [
                ( [undef] ) x 3,
                [
                    'Internal Use Invoice #',
                    'Title', 'VBID\/ISBN', 'eISBN', '# Units', 'List\s+Price', 'Wholesale\/Special Net Price',
                    'Total', '^$'
                ],
            ],
        },

        # vital_source, v11
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 11,
            lines   => [ [
                    'CUSTOMER',       'VB_ID',              'ISBN_13',                      'TITLE',
                    'PUBLISHER',      'TRANSACTION_DATE',   'TERM_NAME',                    'COURSE_NAME',
                    'CREATED_BY',     'PRINT_LIST_PRICE',   'DIGITAL_LIST_PRICE',           'PUBLISHER_ADD_ON',
                    'QUANITY',        'UNIT_SELLING_PRICE', 'VST_FULFILLMENT_FEE_PER_UNIT', 'SALES_AMT_EXT',
                    'VST_FF_FEE_EXT', 'PUBCOMP_EXT',        'PUB_ID|^$',                    '^$'
                ],
            ],
        },

        # vital_source, v12
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 12,
            lines   => [ [
                    'AP Invoice #',           'PUBLISHER',        'Transaction Date', 'Transaction Type',
                    'TITLE',                  'VBID\/ISBN',       'eISBN',            'FP_ID',
                    'DURATION',               'AUTHOR',           'QTY',              'Inv Curr',
                    'List Price in Inv Curr', 'Exchange Rate',    'List Price USD',   'Discount',
                    'Total',                  'Payment Currency', '^$'
                ],
            ],
        },

        # Vital Source, v13, looks like something complete different. Of course. FBoD15227
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 13,
            lines   => [ [
                    'CODE_TYPE', 'SOLD_TO',  'PRODUCT',  'VB_ID',      'TITLE',   'ISBN',   'EISBN',    'PRINT_ISBN',
                    'FP_ID',     'DURATION', 'QUANTITY', 'LIST_PRICE', 'UNIT_\$', 'EXT_\$', 'CURRENCY', '^$'
                ],
            ],
        },

        # Vital Source, v14, RSD-1055
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 14,
            lines   => [ [
                    'INVOICE_NUMBER',   'TRANSACTION_DATE',    'TRANSACTION_TYPE', 'DISTRIBUTOR',
                    'API',              'INSTITUTION_NAME',    'POSTAL_CODE',      'COUNTRY',
                    'PUBLISHER',        'REDISTRIBUTOR',       'VBID',             'EISBN',
                    'CUSTOM_ISBN',      'TITLE',               'AUTHOR',           'CONTENT_TYPE',
                    'DURATION',         'PO_TERMNAME',         'QUANTITY',         'LIST_PRICE',
                    'LIST_PRICE_TOTAL', 'LIST_PRICE_CURRENCY', 'DISCOUNT',         'PUB_COMP_UNIT',
                    'PUB_COMP_TOTAL',   'PUB_COMP_CURRENCY',   'EXCHANGE_RATE',    '^$'
                ],
            ],
        },

        # Vital Source, v15, RSD-2148
        {
            service => BookPub::Tracker::Service::VITAL_SOURCE,
            version => 15,
            lines   => [ [
                    'INVOICE_NUMBER',
                    'TRANSACTION_DATE',
                    'TRANSACTION_TYPE',
                    'TRANSACTION',
                    'DISTRIBUTOR',
                    'API',
                    'INSTITUTION_NAME',
                    'ADDRESS',
                    'STATE_OR_PROVINCE',
                    'POSTAL_CODE',
                    'COUNTRY',
                    'PUBLISHER',
                    'REDISTRIBUTOR',
                    'PRODUCT_TYPE',
                    'PACKAGE_SKU',
                    'SKU',
                    'EISBN',
                    'CUSTOM_ISBN',
                    'TITLE',
                    'AUTHOR',
                    'CONTENT_TYPE',
                    'DURATION',
                    'CODE_TAG',
                    'TERM_NAME',
                    'QUANTITY',
                    'LIST_PRICE_CURRENCY',
                    'LIST_PRICE',
                    'LIST_PRICE_TOTAL',
                    'EFFECTIVE_DISCOUNT',
                    'PUB_COMP_UNIT',
                    'PUB_COMP_TOTAL',
                    'PUB_COMP_CURRENCY',
                    'EXCHANGE_RATE',
                    'VST_MARGIN_USD',
                    '^$'
                ]
            ],
        },

        # Vital Source, v16, RSD-3022
        {
            service          => BookPub::Tracker::Service::VITAL_SOURCE,
            version          => 16,
            sheet            => 'any',
            match_on_any_row => 1,
            lines   => [ [
                    'Row Labels',
                    'Count of Student',
                    'Per',
                    'Revenue',
                    '^$'
                ]
            ],
        },

        # Vital Source, v18, RSD-4057
        {
            service          => BookPub::Tracker::Service::VITAL_SOURCE,
            version          => 18,
            sheet            => 'any',
            match_on_any_row => 1,
            lines   => [ [
                    'Row Labels',
                    'Name',
                    'Count of Student',
                    'Per',
                    'Revenue',
                    '^$'
                ] ],
        },

        # RSD-6244 Rally Reader. Very similar to Feedbooks v1, so we have to distinguish between files by name.
        {
            service          => BookPub::Tracker::Service::RALLY_READER,
            version          => 1,
            file_name        => '.*RALLYREADER.+',
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Report ID#',
                'Report date or date and time',
                'Message function',
                'Sales report type',
                'Report period from',
                'Report period to',
                'NOT USED',
                'Reporting price type',
                'Reporting currency',
                'Class of trade \/ sale',
                'Sales territory',
                'Line item ID#',
                'Sub\-agent ID#',
                'Sub\-agent name',
                'Transaction date or date and time',
                'Agent\'s transaction ID#',
                'Line item reference type',
                'Line item reference ID#',
                'Line item reference date\-time',
                'Main product ID# type',
                'Main product ID#',
                'Alternative product ID# type',
                'Alternative product ID#',
                'Product title',
                'Product author\(s\)',
                'Product description',
                'Publisher ID#',
                'Publisher Name',
                'Imprint Name',
                'Product format',
                'Device type',
                'Gross sold quantity',
                'Returned \/ refunded quantity',
                'Net sold quantity',
                'Non\-sale quantity',
                'Non\-sale disposal type',
                'Class of trade \/ sale',
                'Sales territory',
                'Unit price',
                'Price type',
                'Price currency',
                'Commission or discount percentage',
                'Gross sold value',
                'Returned \/ refunded value',
                'Net value before fees',
                'Fee type 1',
                'Fee amount 1',
                'Fee source 1',
                'Fee type 2',
                'Fee amount 2',
                'Fee source 2',
                'Fee type 3',
                'Fee amount 3',
                'Fee source 3',
                'Proceeds of sale due to publisher',
                'Total number of Line items',
                'Total gross sold quantity',
                'Total returned \/ refunded quantity',
                'Total net sold quantity',
                'Total non-sale quantity',
                'Total gross sold value',
                'Total returned \/ refunded value',
                'Total net sold value before fees',
                'Total fees of all types',
                'Total proceeds due to publisher',
                'Reporting agent #ID',
                'Reporting agent name',
                'Currency conversion rate',
                'List price',
                'Price type',
                '^$'
                ],
            ],
        },


        # Inktera, Version 1 (FB12307)
        # This rule needs to be here before the following Feedbooks rules.
        # The INKTERA file is differentiated by the presence of "Inktera" in column BO of lines
        # after the header.
        {
            service          => BookPub::Tracker::Service::INKTERA,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    '^$'
                ],
                [
                    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, 'Inktera', undef, undef, undef, '^$'
                ],
            ],
        },

        # Vearsa
        # This rule needs to be here before the following TBS Direct and Feedbooks rules, as they are identical.
        # The Vearsa file is differentiated by the file_name attribute
        # FB 12185
        {
            service   => BookPub::Tracker::Service::VEARSA,
            version   => 1,
            file_name => 'Vearsa',
            lines     => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List Price',
                    'Price Type',
                    '^$'
                ],
            ],
        },

        # TBSDirect, v2
        # This rule needs to be here before the followin Feedbooks rule, as they are identical.
        # The TBS file is differentiated by the file_name attribute
        {
            service   => BookPub::Tracker::Service::TBS_DIRECT,
            version   => 2,
            file_name => 'TBSGBS',
            lines     => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List Price',
                    'Price Type',
                    '^$'
                ],
            ],
        },

        # De Marque (RSD-5451) should be located before, since the file format is the same feedbooks, v1
        {
            service   => BookPub::Tracker::Service::DE_MARQUE,
            version   => 1,
            file_name => 'DeMarque',
            lines    => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    '^$'
                ],
            ],
        },

        # BISG feedbooks, v1
        {
            service => BookPub::Tracker::Service::FEEDBOOKS,
            version => 1,
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    '^$'
                ],
            ],
        },

        # AudiobooksNow v1 (RSD-2915). The same as booksfree v1. Note! Must be located above booksfree v1
        {
            service          => BookPub::Tracker::Service::AUDIOBOOKSNOW,
            version          => 1,
            match_on_any_row => 1,
            lines            => [
                [ 'AudiobooksNow(\.com)? Corporation' ],
                ( [undef] ) x 2,
                [ 'ID', 'Date', 'Time', 'Retail', 'Disc. %', 'Total', 'EAN', 'Title', 'Author', '^$' ],
            ],
        },

        # AudiobooksNow v1 (RSD-7173). Alternative header.
        {
            service          => BookPub::Tracker::Service::AUDIOBOOKSNOW,
            version          => 1,
            match_on_any_row => 1,
            lines            => [
                [ 'AudiobooksNow(\.com)? Corporation' ],
                ( [undef] ) x 2,
                [ 'ID', 'Date', 'Time', 'Retail', 'Discount', 'Total', 'EAN', 'Title', 'Author', '^$' ],
            ],
        },

        # booksfree, v1
        {
            service          => BookPub::Tracker::Service::BOOKSFREE,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [ 'ID', 'Date', 'Time', 'Retail', 'Disc. %', 'Total', 'EAN', 'Title', 'Author', '^$' ], ],
        },

        # Ambling Books, v1
        {
            service => BookPub::Tracker::Service::AMBLINGBOOKS,
            version => 1,
            lines =>
              [ [ 'Date', 'Invoice', 'Title', 'Author', 'Abr', 'ISBN', 'List Price', 'Sale Price', 'Publishers Net', 'Country', '^$' ], ],
        },

        # Mackin, v1
        {
            service => BookPub::Tracker::Service::MACKIN,
            version => 1,
            lines   => [
                ( [undef] ) x 4,
                [ 'Title', undef, undef, undef, 'Type', 'ISBN', 'Qty', 'List Price', 'Cost', 'Ext Cost', 'Discount', '(Deal Info|)', '^$' ],
            ],
        },

        # Mackin, v2 (FB1803)
        {
            service => BookPub::Tracker::Service::MACKIN,
            version => 2,
            lines   => [ [
                    'Date of Sale', 'eISBN', 'Title',    'Subtitle', 'Author', 'Library', 'CountryCode', 'Format',
                    'Qty',          'LDP',   'NetPrice', 'Discount', 'Amt Owed'
                ]
            ],
        },

        # Mackin, v3
        {
            service          => BookPub::Tracker::Service::MACKIN,
            version          => 3,
            match_on_any_row => 1,
            lines            => [ [
                    'Title',
                    'Type',
                    'ISBN',
                    'Qty',
                    'List Price',
                    'Cost',
                    'Ext Cost',
                    'Discount',
                    '^$'
                ],
            ],
        },

        # Mackin, v4 (RSD-12241)
        {
            service => BookPub::Tracker::Service::MACKIN,
            version => 4,
            lines   => [ [
                    'Date of Sale',
                    'ISBN',
                    'Title',
                    'Author',
                    'Library',
                    'Country Code',
                    'Forms',
                    'Qty',
                    'LDP',
                    'Net Price',
                    'Discount',
                    'Amt Owed',
                    '^$'
                ]
            ],
        },

        # Courseload, version 1
        {
            service          => BookPub::Tracker::Service::COURSELOAD,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'Date',                 'Billing Address', 'Item',          'eISBN',
                    'Purchase Description', 'Edition',         'Author\(s\)',   'Course Title',
                    'Term',                 'Term Start Date', 'Term End Date', 'Quantity',
                    'Item Rate',            'Amount'
                ],
            ],
        },

        # Courseload, version 2
        {
            service          => BookPub::Tracker::Service::COURSELOAD,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    'Date',         'Company Name',         'Billing Address', 'Item',
                    'eISBN',        'Purchase Description', 'Edition',         'Author\(s\)',
                    'Course Title', 'Term',                 'Term Start Date', 'Term End Date',
                    'Quantity',     'Item Rate',            'Amount',          '^$'
                ],
            ],
        },

        # Koorong, version 1
        {
            service          => BookPub::Tracker::Service::KOORONG,
            version          => 1,
            match_on_any_row => 1,
            lines            => [ [
                    'ISBN',       'Description', 'Qty',  'Publ List', 'Total',    'Supplier %',
                    'Disc Value', 'Amt Payable', 'Curr', 'Territory', 'Pub Code', '^$'
                ],
            ],
        },

        # Koorong, version 2
        {
            service          => BookPub::Tracker::Service::KOORONG,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    'ISBN', 'Product Description',
                    'Qty', 'Value Inc GST',
                    'GST', 'Commission %',
                    'Commission Value',
                    'Amount Payable',
                    'Territory', 'Author', 'Date', 'Customer', 'Postcode', 'Region', '^$'
                ],
            ],
        },

        # BISG FEEDBOOKS, v2
        {
            service => BookPub::Tracker::Service::FEEDBOOKS,
            version => 2,
            lines   => [ [
                    'ISBN',
                    'Title',
                    'Sales units',
                    'Date of sale',
                    'Territory of sale',
                    'Currency',
                    'Sell TYpe|Sell Type',
                    'sales by price point',
                    'Customer price',
                    'Customer price without tax',
                    'Customer price without commision and taxes',
                    'Tax rate',
                    'Discount',
                    'Total commission deducted',
                    'Total amount payable',
                    'List price',
                    '^$'
                ],
            ],
        },

        # FEEDBOOKS, v3
        {
            service => BookPub::Tracker::Service::FEEDBOOKS,
            version => 3,
            lines   => [ [
                    'ISBN',
                    'Title',
                    'Sales units',
                    'Date of sale',
                    'Territory of sale',
                    'Currency',
                    'Sell TYpe|Sell Type',
                    'sales by price point',
                    'Customer price',
                    'Customer price without tax',
                    'Customer price without commision and taxes',
                    'Tax rate',
                    'Discount',
                    'Total commission deducted',
                    'Total amount payable',
                    '^$'
                ],
            ],
        },

        # JB Hi-Fi, version 1
        {
            service => BookPub::Tracker::Service::JB_HIFI,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'Reporting currency',
                    'Line item ID#',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID#',
                    'Main product ID# type',
                    'Main product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Publisher ID#',
                    'Publisher Name',
                    'Product format',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Sales territory',
                    'Unit price',
                    'Sale Price \(inc. GST\)',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value \(ex. GST\)',
                    'Returned \/ refunded value \(ex. GST\)',
                    'Net Value before Fees',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total gross sold value \(ex. GST\)',
                    'Total returned \/ refunded value \(ex. GST\)',
                    'Total net sold value before fees',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    '^$'
                ],
            ],
        },

        # Rowman.com Esales, version 1
        {
            service => BookPub::Tracker::Service::ROWMAN_COM_ESALES,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'SALE_DATE',    'SERVICE_NAME', 'ISBN',            'TITLE',     'AUTHOR', 'IMPRINT',
                    'PRODUCT_TYPE', 'EPUB_TYPE',    'COUNTRY_CODE',    'PO_NUM',    'UNITS',  'PRICE_TYPE',
                    'PRICE_ACTUAL', 'TAX_ACTUAL',   'DISCOUNT_ACTUAL', 'NET_PRICE', '^$'
                ],
            ],
        },

        # Readbooks, version 1
        {
            service => BookPub::Tracker::Service::READBOOKS,
            version => 1,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 3,
                [
                    'Start date',
                    'End date',
                    'ISBN',
                    'Product type',
                    'List price',
                    'Currency',
                    'Purchase price',
                    'Currency',
                    'Qty',
                    'Title',
                    'Sales proceeds',
                    'Currency',
                    'Country',
                    'Province',
                    'City',
                    'Postal code',
                    'Country Tax Rate',
                    'Country Tax Amount',
                    'Province Tax Rate',
                    'Province Tax Amount',
                    'Total Tax Collected',
                    'Refund QTY',
                    'Transaction ID',
                    '^$'
                ],
            ],
        },

        # Readbooks, version 2
        {
            service          => BookPub::Tracker::Service::READBOOKS,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Start date',
                    'End date',
                    'ISBN',
                    'Product type',
                    'List price',
                    'Currency',
                    'Purchase price',
                    'Currency',
                    'Qty',
                    'Title',
                    'Sales proceeds',
                    'Currency',
                    'Country',
                    'Province',
                    'City',
                    'Postal code',
                    'Country Tax Rate',
                    'Country Tax Amount',
                    'Province Tax Rate',
                    'Province Tax Amount',
                    'Total Tax Collected',
                    'Refund QTY',
                    'Transaction ID',
                    'Transaction date',
                    '^$'
                ],
            ],
        },

        # Readbooks, version 3, FB12039
        {
            service          => BookPub::Tracker::Service::READBOOKS,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Date of Sale',
                    'Invoice \/ Credit',
                    'Units',
                    'Unique user identifier code',
                    'Device Ourchased On',
                    'Postcode',
                    'Town \/ City',
                    'County \/ Region',
                    'Country of Residence',
                    'ISBN',
                    'Product Title',
                    'PRH Price \(PRHP\)',
                    'Tax included in PRHP',
                    'Customer Price \(inclusive of applicable taxes\)',
                    'Tax Rate applicable',
                    'Tax payable on Customer Price',
                    'PRHP excluding tax actually payable',
                    'Sales proceeds received, excluding tax actually paid',
                    'Commision rate',
                    'Publisher Revenue ex tax from PRHP',
                    'Commission pre-discounting',
                    'Net value of commission',
                    'Eamings currency',
                    'Currency rate of Conversion \(if applicable\)',
                    '^$'
                ],
            ],
        },

        # Readbooks, version 4, FB12037
        {
            service => BookPub::Tracker::Service::READBOOKS,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'Invoice \/ Credit',
                    'Units',
                    'Country of Residence',
                    'ISBN',
                    'Product Title',
                    'PRH Price \(PRHP\)',
                    'Tax included in PRHP',
                    'Customer Price \(inclusive of applicable taxes\)',
                    'Tax Rate applicable',
                    'Tax payable on Customer Price',
                    'PRHP excluding tax actually payable',
                    'Sales proceeds received, excluding tax actually paid',
                    'Commision rate',
                    'Publisher Revenue ex tax from PRHP',
                    'Commission pre-discounting',
                    'Net value of commission',
                    'Eamings currency',
                    'Currency rate of Conversion \(if applicable\)',
                    '^$'
                ],
            ],
        },

        # Bolinda Digital, version 1
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 1,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 9,
                [
                    'Territory',     undef, 'ISBN',      undef, 'Title',      undef,
                    'Author',        undef, 'Publisher', undef, 'Imprint',    undef,
                    'Publisher DLP', undef, 'Qty Sold',  undef, 'Amount Due', '^$'
                ],
            ],
        },

        # Bolinda Digital, version 2
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 2,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 9,
                [
                    'Territory', undef, 'ISBN', undef, 'Title', undef, 'Author', undef, 'Publisher', undef, 'Imprint', undef,
                    'Publisher DLP',
                    undef, undef, 'Qty Sold', undef, 'Amount Due', '^$'
                ],
            ],
        },

        # Bolinda Digital, version 3
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 3,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 8,
                [
                    'Territory',     undef, 'ISBN',      undef,        'Title',          undef,
                    'Author',        undef, 'Publisher', undef,        'Imprint',        undef,
                    'Publisher DLP', undef, 'Qty Sold',  'Amount Due', 'Percent of DLP', '^$'
                ],
            ],
        },

        # Bolinda Digital, version 4
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 4,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Territory',     'ISBN',           'Title',    'Author',     'Publisher', 'Imprint',
                    'Publisher DLP', '% to Publisher', 'Qty Sold', 'Amount Due', '^$'
                ],
            ],
        },

        # Bolinda Digital, version 5
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 5,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Territory',     'ISBN',           'Title',    'Author',     'Publisher',      'Imprint',
                    'Publisher DLP', '% to Publisher', 'Qty Sold', 'Amount Due', 'Amount Due GBP', '^$'
                ],
            ],
        },

        # Bolinda Digital, version 6
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 6,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Country',       'ISBN',           'Title',    'Author',     'Publisher',      'Imprint',
                    'Publisher DLP', '% to Publisher', 'Qty Sold', 'Amount Due', 'Amount Due GBP', '^$'
                ],
            ],
        },

        # Bolinda Digital, version 7
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 7,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 6,
                [
                    'Country',       'ISBN',           'Title',    'Author',     'Publisher', 'Imprint',
                    'Publisher DLP', '% to Publisher', 'Qty Sold', 'Amount Due', '^$'
                ],
            ],
        },

        # Bolinda Digital version 8 (based on version 6) (FBoD16820)
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 8,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Country', 'ISBN',          'Format',         'Title', 'Author',         'Publisher',
                    'Imprint', 'Publisher DLP', '% to Publisher', undef,   undef,            'Qty Sold',
                    undef,     undef,           'Amount Due',     undef,   'Amount Due GBP', '^$'
                ],
            ],
        },

        # Bolinda Digital version 9 (based on version 7) (FBoD16822)
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 9,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Country', 'ISBN',          'Format',         'Title', 'Author', 'Publisher',
                    'Imprint', 'Publisher DLP', '% to Publisher', undef,   undef,    'Qty Sold',
                    undef,     undef,           'Amount Due',     '^$'
                ],
            ],
        },

        # Bolinda Digital version 10 (based on version 9) (FBoD17288)
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 10,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Country', 'ISBN',          'Format',         'Title',    'Author',     'Publisher',
                    'Imprint', 'Publisher DLP', '% to Publisher', 'Qty Sold', 'Amount Due', '^$'
                ],
            ],
        },

        # Bolinda Digital version 11 (based on version 8) (FBoD17359)
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 11,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Country', 'ISBN',          'Format',         'Title',    'Author',     'Publisher',
                    'Imprint', 'Publisher DLP', '% to Publisher', 'Qty Sold', 'Amount Due', 'Amount Due \w{3}',
                    '^$'
                ],
            ],
        },

        # Bolinda Digital version 12 (based on version 11) (RSD-2149)
        {
            service => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version => 12,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Country', 'ISBN',          'Format',         'Title',    'Author',     'Publisher',
                    'Imprint', 'Publisher DLP', '% to Publisher', 'Qty Sold', 'Net Receipt', 'Amount Due', 'Amount Due \w{3}',
                    '^$'
                ],
            ],
        },

        # Bolinda Digital version 13 (based on version 11) (RSD-2149)
        {
            service          => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version          => 13,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [
                [
                    'Country',
                    'ISBN',
                    'Format',
                    'Title',
                    'Author',
                    'Publisher',
                    'Imprint',
                    'Publisher DLP',
                    '% to Publisher',
                    'Qty Sold',
                    'Amount Due',
                    'Amount Due \w{3}',
                    '^$'
                ],
            ],
        },

        # Bolinda Digital version 14 (based on version 12) (RSD-2149)
        {
            service          => BookPub::Tracker::Service::BOLINDA_DIGITAL,
            version          => 14,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [
                [
                    'Country',
                    'ISBN',
                    'Format',
                    'Title',
                    'Author',
                    'Publisher',
                    'Imprint',
                    'Publisher DLP',
                    '% to Publisher',
                    'Qty Sold',
                    'Net Receipt',
                    'Amount Due',
                    'Amount Due \w{3}',
                    '^$'
                ],
            ],
        },

        # Direct Ebooks, version 1
        {
            service => BookPub::Tracker::Service::DIRECT_EBOOKS,
            version => 1,
            sheet   => 'any',
            lines   => [
                ['Ecommerce Report for publisher'],
                [
                    'Name',
                    'Address Line1',
                    'Address Line2',
                    'City',
                    'State',
                    'Country',
                    'Postal Code',
                    'E-Mail ID',
                    'Date of Purchase',
                    'VAT Registration Number',
                    'Card Authorisation Code',
                    'Receipt No.',
                    'List Price',
                    'Discount',
                    'Discounted Price',
                    'Tax',
                    'Taxed Price',
                    'Content Format',
                    'Total Shipping Price',
                    'Total Price',
                    'Print Quantity',
                    'Publisher Name',
                    'Title',
                    'Contributor',
                    'Primary ISBN',
                    'Format ISBN',
                    'GL Account Number',
                    'Series Title',
                    '^$'
                ],
            ],
        },

        # Direct Ebooks, version 2
        {
            service => BookPub::Tracker::Service::DIRECT_EBOOKS,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'Date of purchase \(AEST\)',
                    'Order Id', 'ISBN', 'Title', 'Format', 'List Price',
                    'Has discounts',
                    'Discounts total',
                    'Shipping', 'Item Tax', 'Item total', 'Customer country', '^$'
                ],
            ],
        },

        # ReadCloud, version 1
        {
            service => BookPub::Tracker::Service::READCLOUD,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'EAN',                      'Title',                  'Customer Price - inc gst', 'Customer Price - ex gst',
                    'Customer Currency',        'Date',                   'Bookstore',                'Territory',
                    'Publisher Share - ex gst', 'Partner Share - ex gst', '^$'
                ],
            ],
        },

        # ReadCloud, version 2
        {
            service => BookPub::Tracker::Service::READCLOUD,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'EAN', 'Title', 'Author', 'Imprint', 'Publisher',
                    'Customer Price - inc gst',
                    'Customer Price - ex gst',
                    'Customer Currency',
                    'Date', 'Bookstore', 'Territory',
                    'Publisher share - ex GST',
                    'Partner Share - ex gst', '^$'
                ],
            ],
        },

        # ReadCloud, version 3
        {
            service => BookPub::Tracker::Service::READCLOUD,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'Items sold',
                    'EAN',
                    'Title',
                    'Customer Price - inc gst',
                    'Customer Price - ex gst',
                    'Customer Currency',
                    'Date',
                    'Bookstore',
                    'Territory',
                    'Total - ex gst',
                    'Publisher Share - ex gst',
                    'Partner Share - ex gst',
                    '^$'
                ],
            ],
        },

        # ReadCloud, version 4
        {
            service => BookPub::Tracker::Service::READCLOUD,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'Copies',            'ISBN',                     'Title',                    'Author',
                    'Imprint',           'Publisher',                'Customer Price - inc gst', 'Customer Price - ex gst',
                    'Customer Currency', 'Date',                     'Bookstore',                'Territory',
                    'Total - ex gst',    'Publisher Share - ex gst', 'Partner Share - ex gst',   '^$'
                ],
            ],
        },

        # Momentum Books, version 1
        {
            service => BookPub::Tracker::Service::MOMENTUM_BOOKS,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'Products::Primary ISBN',
                    'Products::Title',
                    'Products::Author',
                    'Tax Exclusive Value',
                    'Tax Inclusive Value',
                    'Item Amount',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Entitle Books, version 1
        {
            service => BookPub::Tracker::Service::ENTITLE_BOOKS,
            version => 1,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 2,
                [
                    'ISBN',            'Title',       'Distributor',      'Region of Sale', 'Units', 'Unit Price',
                    'Unit Commission', 'Total Price', 'Total Commission', '^$'
                ],
            ],
        },

        # Findaway World (renamed to InAudio), version 1
        {
            service => BookPub::Tracker::Service::IN_AUDIO,
            version => 1,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 4,
                [
                    'Description \(Sales\)',
                    'Display #',
                    'ISBN #',
                    'DLP',
                    'Gross Sales Qty',
                    'Gross Revenue',
                    'Return Qty',
                    'Month Actual Returns',
                    'Royalty Earned',
                    '^$'
                ],
            ],
        },

        # Findaway World (renamed to InAudio), version 2
        {
            service => BookPub::Tracker::Service::IN_AUDIO,
            version => 2,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 4,
                [
                    'Description \(Sales\)',
                    'ISBN #',
                    'DLP',
                    'Gross Sales Qty',
                    'Gross Revenue',
                    'Return Qty',
                    'Month Actual Returns',
                    'Royalty Earned',
                    '^$'
                ],
            ],
        },

        # Findaway World (renamed to InAudio), version 3
        {
            service => BookPub::Tracker::Service::IN_AUDIO,
            version => 3,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 4,
                [
                    'Description \(Sales\)',
                    'Tiered Royalty Rate',
                    'ISBN #',
                    'DLP',
                    'Gross Sales Qty',
                    'Gross Revenue',
                    'Return Qty',
                    'Actual Returns',
                    'Royalty Earned',
                    '^$'
                ],
            ],
        },

        # Findaway World (renamed to InAudio), version 4
        {
            service => BookPub::Tracker::Service::IN_AUDIO,
            version => 4,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 3,
                [
                    'Description \(Sales\)',
                    'ISBN #',
                    'Publisher',
                    'Royalty Rate',
                    'DLP',
                    'Gross Sales Qty',
                    'Gross Revenue',
                    'Return Qty',
                    'Month Actual Returns',
                    'Royalty Earned',
                    '^$'
                ],
            ],
        },

        # Findaway World (renamed to InAudio), version 5
        {
            service => BookPub::Tracker::Service::IN_AUDIO,
            version => 5,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 3,
                [
                    'Description \(Sales\)',
                    'Sales Type',
                    'Royalty Rate',
                    'Display #',
                    'ISBN #',
                    'Publisher',
                    'Partner',
                    'Promo Code',
                    'DLP',
                    'Gross Sales Qty',
                    'Gross Revenue',
                    'Return Qty',
                    'Actual Returns',
                    'Royalty Earned',
                    'Conversion Factor',
                    'Royalty Payable in USD',
                    '^$'
                ],
            ],
        },

        # Findaway World (renamed to InAudio), version 6
        {
            service => BookPub::Tracker::Service::IN_AUDIO,
            version => 6,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 3,
                [
                    'Description \(Sales\)',
                    'Sales Type', 'Royalty Rate', 'Display #', 'ISBN #', 'Publisher', 'Partner', 'Promo Code', 'DLP', 'Price Type',
                    'Sales Qty', 'Revenue', 'Return Qty',
                    'Actual Returns',
                    'Royalty Earned', '^$'
                ],
            ],
        },

        # Findaway World (renamed to InAudio), version 7
        {
            service => BookPub::Tracker::Service::IN_AUDIO,
            version => 7,
            sheet   => 'any',
            lines   => [ [
                    'Report ID',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade sale RENAME',
                    'Sales territory RENAME',
                    'Line item ID',
                    'Sub agent ID',
                    'Sub agent name',
                    'Transaction date or date and time',
                    'Agent transaction ID',
                    'Line item reference type',
                    'Line item reference ID',
                    'Line item reference date time',
                    'Main product ID type',
                    'Main product ID',
                    'Alternative product ID type',
                    'Alternative product ID',
                    'Product title',
                    'Product author',
                    'Product description',
                    'Publisher ID',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned refunded quantity',
                    'Net sold quantity',
                    'Non sale quantity',
                    'Non sale disposal type',
                    'Class of trade sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned refunded quantity',
                    'Total net sold quantity',
                    'Total non sale quantity',
                    'Total gross sold value',
                    'Total returned refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'Royalty Payable in \w{3}',
                    '^$'
                ],
            ],
        },

        # Findaway World (renamed to InAudio), version 8 (RSD-4108)
        {
            service          => BookPub::Tracker::Service::IN_AUDIO,
            version          => 8,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Title',
                    'Sales Type',
                    'Royalty Rate',
                    'Display #',
                    'ISBN #',
                    'Publisher',
                    'Partner',
                    'Promotion',
                    'Sale Territory',
                    'Currency',
                    'DLP',
                    'Price Type',
                    'Sales Qty',
                    'Revenue',
                    'Royalty Earned',
                    'Less Distribution Fee',
                    'Exchange Rate',
                    'Royalty Payable Currency',
                    'Royalty Payable',
                    '^$'
                ],
            ],
        },

        # Word, version 1
        {
            service => BookPub::Tracker::Service::WORD,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'Product_ID',         'AuthorArtist', 'Title',       'ISBN13',    'PriceBase',     'PriceExGST',
                    'GST',                'QtySold',      'QtyReturned', 'SalesDate', 'Country',       'PublisherNet',
                    'PublisherNetIncGST', 'Commission',   'RoyaltyRate', 'LifeSales', 'PublisherName', '^$'
                ],
            ],
        },

        # blinkbox, version 1
        {
            service => BookPub::Tracker::Service::BLINKBOX,
            version => 1,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Time of Sale',
                    'Unique user identifier code',
                    'Publisher Name',
                    'ISBN',
                    'Product Title',
                    'Author',
                    'Units',
                    'DLP.*',
                    'DLP Ex.VAT.*',
                    'Tx Value.*',
                    'Tx Value Ex. VAT.*',
                    'Currency',
                    'Discount.*',
                    'Discount \(%\)',
                    'Commission Rate',
                    'Royalty Due.*',
                    '^$'
                ],
            ],
        },

        # Numilog, version 1
        {
            service => BookPub::Tracker::Service::NUMILOG,
            version => 1,
            lines   => [ [
                    'Editeur',
                    'Point De Vente',
                    'Titre',
                    'Nom Auteur',
                    'Pr.nom Auteur',
                    'EAN Papier',
                    'EAN Num.rique',
                    'Format',
                    'Quantit.',
                    'CA HT en Devise',
                    'CA TTC en Devise',
                    'Prix Unitaire TTC en Devise',
                    'DEVISE',
                    'CA HT en EUROS',
                    'TVA',
                    undef,
                    'CA TTC en EUROS',
                    undef,
                    'Prix Unitaire TTC en EUROS',
                    undef,
                    undef,
                    undef,
                    'Prix Unitaire HT en EUROS',
                    'Mode Acquisition',
                    'Canal de Vente',
                    'Note',
                    '^$'
                ],
            ],
        },

        # Numilog, version 2
        {
            service => BookPub::Tracker::Service::NUMILOG,
            version => 2,
            lines   => [ [
                    'Editeur',                    'Point De Vente',
                    'Titre',                      'Nom Auteur',
                    'Pr.nom Auteur',              'EAN Papier',
                    'EAN Num.rique',              'Format',
                    'Quantit.',                   'CA HT en Devise',
                    'CA TTC en Devise',           'Prix Unitaire TTC en Devise',
                    'DEVISE',                     'CA HT en EUROS',
                    'TVA',                        undef,
                    'Pays',                       undef,
                    'CA TTC en EUROS',            undef,
                    'Prix Unitaire TTC en EUROS', undef,
                    undef,                        'Prix Unitaire HT en EUROS',
                    'Mode Acquisition',           'Canal de Vente',
                    'Note',                       '^$'
                ],
            ],
        },

        # Numilog, version3
        {
            service => BookPub::Tracker::Service::NUMILOG,
            version => 3,
            lines   => [ [
                    'Editeur',
                    'Point De Vente',
                    'Titre',
                    'Nom Auteur',
                    'Pr.nom Auteur',
                    'EAN Papier',
                    'EAN Num.rique',
                    'Format',
                    'Quantit.',
                    'CA HT en Devise',
                    'CA TTC en Devise',
                    'Prix Unitaire TTC en Devise',
                    undef,
                    'DEVISE',
                    'CA HT EUROS',
                    'Taux',
                    'Commission HT',
                    undef,
                    'TVA',
                    'Pays',
                    'CA TTC EUROS',
                    'Prix Unit. TTC EUROS',
                    'Prix Unit. HT EUROS',
                    'Mode Acquisition',
                    'Canal de Vente',
                    'Note',
                    '^$'
                ],
            ],
        },

        # Numilog, version4
        {
            service => BookPub::Tracker::Service::NUMILOG,
            version => 4,
            lines   => [ [
                    'Editeur',
                    'Point De Vente',
                    'Titre',
                    'Collection',
                    'Nom Auteur',
                    'Pr.nom Auteur',
                    'EAN Papier',
                    'EAN Num.rique',
                    'Format',
                    'Quantit.',
                    'CA HT en Devise',
                    'CA TTC en Devise',
                    'Prix Unitaire TTC en Devise',
                    undef,
                    undef,
                    'DEVISE',
                    'CA HT EUROS',
                    undef,
                    'Taux',
                    undef,
                    'Commission HT',
                    'TVA',
                    'Pays',
                    'CA TTC EUROS',
                    'Prix Unit. TTC EUROS',
                    'Prix Unit. HT EUROS',
                    'Mode Acquisition',
                    'Canal de Vente',
                    'Biblioth.que',
                    'Note',
                    '^$'
                ],
            ],
        },

        # Numilog, version5
        {
            service => BookPub::Tracker::Service::NUMILOG,
            version => 5,
            lines   => [ [
                    '.*Publisher.*',
                    'Point Of Sale',
                    'Title',
                    'Collection',
                    'Author\'s Name',
                    'Author\'s First Name',
                    'Print EAN',
                    'Digital EAN',
                    'Format',
                    'Quantity',
                    'Sales Amount in local currency VAT\s+included',
                    'Unit Price in local currency\s+VAT included',
                    'Sales Amount in local currency VAT excluded',
                    'Unit Price in Local Currency VAT excluded',
                    'Local Currency',
                    'Country',
                    'Unit Price in Euro\s+VAT excluded',
                    'Sales Amount in Euros VAT excluded',
                    'Discount Rate',
                    'Commission VAT excluded',
                    'Due to Publisher VAT excluded',
                    'Business Model',
                    'Sales Channel',
                    'Name of the Library if any',
                    'Note',
                    '^$'
                ],
            ],
        },

        # HBG, version 1
        {
            service => BookPub::Tracker::Service::HBG,
            version => 1,
            lines   => [ [
                    'Geo Country', 'Acct Nbr', 'Acct Name', 'Doc Date', 'Doc NBR', 'Doc Type',
                    'Fiscal Period Code \(Inv\)|Fiscal Period Code',    # FB12133
                    'Sale Type|Sale Type Code',                         # FB12133
                    'Sale Type Desc|Sale Type',                         # FB12133
                    'ISBN \(Item Code\)', 'ISBN10', 'Author', 'Item Record Fam Code \(G\) - Description', 'On-Sale Date', 'Title \(Long\)',
                    'Price', 'Gross Qty',
                    'Inv Line Curr Func Amount|Gross Amount \(\$\)',
                    '^$'
                ],
            ],
        },

        # HBG, version 2, FB13213
        {
            service => BookPub::Tracker::Service::HBG,
            version => 2,
            lines   => [ [
                    'Geo Country',
                    'Acct Name',
                    'Acct Nbr',
                    'Doc Date',
                    'Doc NBR',
                    'Doc Type',
                    'Fiscal Period Code',
                    'Sale Type',
                    'Sale Type Code',
                    'ISBN \(Item Code\)',
                    'ISBN10',
                    'Author',
                    'Item Record Fam Code \(G\) - Description',
                    'On-Sale Date',
                    'Title \(Long\)',
                    'Price',
                    'Gross Qty',
                    'Gross Amount \(\$\)',
                    '^$'
                ],
            ],
        },

        # HBG, version 3, FB14537
        {
            service => BookPub::Tracker::Service::HBG,
            version => 3,
            lines   => [ [
                    'Geo Country',
                    'Acct Name',
                    'Acct Nbr',
                    'Doc Date',
                    'Doc NBR',
                    'Doc Type',
                    'Fiscal Period Code',
                    'Sale Type',
                    'Sale Type Code',
                    'ISBN \(Item Code\)',
                    'ISBN10',
                    'Author',
                    'Item Record Fam Code \(G\) - Description',
                    'On-Sale Date',
                    'Title \(Long\)',
                    'Price',
                    'Line Qty',
                    'Line Amt USD \(\$\)',
                    '^$'
                ],
            ],
        },

        # HBG, version 4, RSD-2563
        {
            service => BookPub::Tracker::Service::HBG,
            version => 4,
            lines   => [ [
                    'Geo (?:Country|Code)',
                    'Acct Name',
                    'Acct Nbr',
                    'Doc Date',
                    'Doc NBR',
                    'Doc Type',
                    'Fiscal Period Code',
                    'Sale Type',
                    'Sale Type Code',
                    'ISBN \(Item Code\)',
                    'ISBN10',
                    'Author',
                    'Item Record Fam Code \(G\) - Description',
                    'On-Sale Date',
                    'Title \(Long\)',
                    'Price',
                    'Item Fam Code \(C\) - Publisher Code \(Category 1\)',
                    'Item Fam Code \(C\) - Publisher Name \(Category 1\)',
                    'Gross Amount \(\$\)',
                    'Gross Qty',
                    'Line Amt USD \(\$\)',
                    '^$'
                ],
            ],
        },

        # Skoobe, Version 1
        {
            service => BookPub::Tracker::Service::SKOOBE,
            version => 1,
            lines   => [ [
                    'account', 'isbn13', 'title', 'quantity',
                    'source currency',
                    'gross price \(source currency\)',
                    'net price \(source currency\)',
                    'target currency',
                    'net payout \(target currency\)', '^$'
                ],
            ],
        },

        # Skoobe, Version 2 (electric boogaloo)
        {
            service => BookPub::Tracker::Service::SKOOBE,
            version => 2,
            lines   => [ [
                    'account', 'identifier', 'title', 'quantity', 'country',
                    'source currency',
                    'gross price \(source currency\)',
                    'net price \(source currency\)',
                    'target currency',
                    'net payout \(target currency\)', '^$'
                ],
            ],
        },

        # Skoobe, Version 3 (revenge of the skoobe)
        {
            service => BookPub::Tracker::Service::SKOOBE,
            version => 3,
            lines   => [ [
                    'account', 'identifier', 'title', 'quantity', 'country',
                    'source currency',
                    'gross price \(source currency\)',
                    'net price \(source currency\)',
                    'target currency',
                    'net price \(target currency\)',
                    'net payout \(target currency\)', '^$'
                ],
            ],
        },

        # Skoobe, Version 4 (the skoobe awakens)
        {
            service => BookPub::Tracker::Service::SKOOBE,
            version => 4,
            lines   => [ [
                    'account', 'identifier', 'title', 'quantity', 'country',
                    'source currency',
                    'gross price \(source currency\)',
                    'net price \(source currency\)',
                    'net price \(\w{3}\)',
                    'target currency',
                    'net payout \(target currency\)', '^$'
                ],
            ],
        },

        # Macquarie, Version 1
        {
            service => BookPub::Tracker::Service::MACQUARIE,
            version => 1,
            lines   => [ [
                    'id',                             'subscription_type_purchased',
                    'subscription_access_type',       'additional_access_display',
                    'view_organisation_property',     'subscription',
                    'notes',                          'added_by',
                    'status',                         'date_started',
                    'date_ended',                     'promo_code',
                    'payment_date',                   'payment_type',
                    'payment_sent',                   'invoice_number',
                    'invoice_sent',                   'invoice_due',
                    'cancelled_date',                 'purchase_order_number',
                    'display_country',                'display_total_invoice_incl_gst',
                    'display_total_invoice_excl_gst', 'display_isbn',
                    'payment_number',                 'invoice_notes',
                    'refund_date',                    'created',
                    'modified',                       '|Title',
                    '^$'
                ],
            ],
        },

        # Macquarie, Version 2
        {
            service => BookPub::Tracker::Service::MACQUARIE,
            version => 2,
            lines   => [ [
                    'id',                                             'subscription[_\s]type[_\s]purchased',
                    'subscription[_\s]access[_\s]type',               'additional[_\s]access[_\s]display',
                    'view[_\s]organisation[_\s]property',             'subscription',
                    'notes',                                          'added[_\s]by',
                    'status',                                         'money[_\s]refunded',
                    'date[_\s]started',                               'date[_\s]ended',
                    'promo[_\s]code',                                 'payment[_\s]date',
                    'payment[_\s]type',                               'payment[_\s]sent',
                    'invoice[_\s]number',                             'invoice[_\s]sent',
                    'invoice[_\s]due',                                'cancelled[_\s]date',
                    'purchase[_\s]order[_\s]number',                  'display[_\s]country',
                    'display[_\s]total[_\s]invoice[_\s]incl[_\s]gst', 'display[_\s]total[_\s]invoice[_\s]excl[_\s]gst',
                    'display[_\s]isbn',                               'payment[_\s]number',
                    'invoice[_\s]notes',                              'refund[_\s]date',
                    'created',                                        'modified',
                    'Title',                                          '^$'
                ],
            ],
        },

        # Macquarie, Version 3 (FB21375)
        {
            service => BookPub::Tracker::Service::MACQUARIE,
            version => 3,
            lines   => [ [
                    'Subscription Type Purchased',
                    'Subscription Access Type',
                    'View Organisation Property',
                    'Subscription',
                    'Notes',
                    'Added By',
                    'Status',
                    'Money Refunded',
                    'Date Started',
                    'Date Ended',
                    'Promo Code',
                    'Payment Date',
                    'Payment Type',
                    'Payment Sent',
                    'Invoice Number',
                    'Invoice Sent',
                    'Invoice Due',
                    'Cancelled Date',
                    'Purchase Order Number',
                    'Display Country',
                    'Display Total Invoice Incl Gst',
                    'Display Total Invoice Excl Gst',
                    'Display Isbn',
                    'Payment Number',
                    'Invoice Notes',
                    'Refund Date',
                    '|Created',
                    '|Modified',
                    '|Title',
                ],
            ],
        },

        # Booksource, Version 1
        {
            service => BookPub::Tracker::Service::BOOKSOURCE,
            version => 1,
            lines   => [ [
                    'PUBLISHER', 'TITLE', 'AUTHOR', 'ISBN', 'TERRITORY SOLD',
                    'SCHOOL NAME', 'LIST.PRICE',
                    'AMT DUE PER COPY',
                    'QUANTITY SOLD|QUANTITY',
                    'AMT DUE PER TITLE|AMOUNT DUE', '^$'
                ],
            ],
        },

        # Booksource, Version 2
        {
            service => BookPub::Tracker::Service::BOOKSOURCE,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'VENDOR',     'TITLE',            'AUTHOR',        'ISBN',      'TERRITORY SOLD', 'SCHOOL NAME',
                    'LIST.PRICE', 'AMT DUE PER COPY', 'QUANTITY SOLD', 'PER TITLE', '^$'
                ],
            ],
        },

        # Librify, Version 1
        {
            service => BookPub::Tracker::Service::LIBRIFY,
            version => 1,
            lines   => [
                ['LIBRIFY'],
                [
                    'Line item field name',
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Transaction date  or date and time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Publisher ID#',
                    'Publisher Name',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees and discounts of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    '^$'
                ],
            ],
        },

        # Virdocs, Version 1
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 1,
            lines   => [
                ( [undef] ) x 3,
                [
                    'Title',    'ISBN',   'Author',   'Pricing', 'Count', 'List', 'Refunded', 'Taxes',
                    'Shipping', 'RS Fee', 'Sales CR', 'Net CR',  '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 2
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 2,
            lines   => [
                ( [undef] ) x 3,
                [
                    'Date',       'User',         'Name',             'University',
                    'Book',       'Author',       'eISBN13',          'ISBN13',
                    'List Price', 'RedShelf Fee', 'Publisher Credit', 'Publisher Net Due',
                    'Status',     'Type',         'Period',           'Taxable',
                    'Address',    'City',         'State',            'Zip',
                    'Country',    '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 3
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 3,
            lines   => [
                ( [undef] ) x 3,
                [
                    'Date',             'User',   'Name',    'University', 'Book Owner', 'Imprint',
                    'Book',             'Author', 'eISBN13', 'ISBN13',     'List Price', 'RedShelf Fee',
                    'Publisher Credit', 'Status', 'Type',    'Period',     'Taxable',    'Address',
                    'City',             'State',  'Zip',     'Country',    '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 4
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 4,
            lines   => [
                ( [undef] ) x 3,
                [
                    'Date',             'User',    'Name',              'University', 'Book Owner', 'Imprint',
                    'Book',             'Author',  'eISBN13',           'ISBN13',     'List Price', 'RedShelf Fee',
                    'Publisher Credit', 'Taxes',   'Publisher Net Due', 'Status',     'Type',       'Period',
                    'Taxable',          'Address', 'City',              'State',      'Zip',        'Country',
                    '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 5
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 5,
            lines   => [
                ( [undef] ) x 2,
                [
                    'Order ID',             'Date',             'User',       'Name',
                    'University',           'Imprint',          'Book',       'Author',
                    'eISBN13',              'ISBN13',           'List Price', 'Discount',
                    'RedShelf Fee',         'Publisher Credit', 'Shipping',   'Taxes',
                    'Publisher Net Credit', 'Status',           'Type',       'Period',
                    'Taxable',              'Source',           'Address',    'City',
                    'State',                'Postal Code',      'Country',    '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 6
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 6,
            lines   => [
                ( [undef] ) x 2,
                [
                    'Order ID|ID', 'Date',                 'User',             'Name',
                    'University',  'Imprint',              'Book',             'Author',
                    'eISBN13',     'ISBN13',               'Retail Price',     'Purchase Price',
                    'Discount',    'RedShelf Fee',         'Publisher Credit', 'Shipping',
                    'Taxes',       'Publisher Net Credit', 'Status',           'Type',
                    'Period',      'Taxable',              'Source',           'Address',
                    'City',        'State',                'Postal Code',      'Country',
                    '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 7
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 7,
            lines   => [
                ( [undef] ) x 2,
                [
                    'Order ID',       'Date',     'User',                 'Name',
                    'University',     'Imprint',  'Book',                 'Author',
                    'eISBN13',        'ISBN13',   'ISBN-10',              'Retail Price',
                    'Purchase Price', 'Discount', 'RedShelf Fee',         'Publisher Credit',
                    'Shipping',       'Taxes',    'Publisher Net Credit', 'Status',
                    'Type',           'Period',   'Taxable',              'Source',
                    'Address',        'City',     'State',                'Postal Code',
                    'Country',        '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 8, FB11992
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 8,
            lines   => [
                ( [undef] ) x 2,
                [
                    'Order ID|ID', 'Date', 'User', 'Name', 'Course', 'Title', 'eISBN13', 'ISBN13', 'Price',
                    'Institution Due',
                    'Publisher Credit',
                    'Status', '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 9, FB11992
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 9,
            lines   => [
                ( [undef] ) x 2,
                [
                    'Order ID|ID', 'Date', 'User', 'Name', 'Institution', 'Course', 'Title', 'eISBN13', 'ISBN13', 'Price',
                    'Institution Due',
                    'Publisher Credit',
                    'Status', '^$'
                ],
            ],
        },

        # RedShelf (formerly known as Virdocs), Version 10, same as 6, but with a column inserted at column W
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 10,
            lines   => [
                ( [undef] ) x 2,
                [
                    'Order ID|ID', 'Date',                 'User',             'Name',
                    'University',  'Imprint',              'Book',             'Author',
                    'eISBN13',     'ISBN13',               'Retail Price',     'Purchase Price',
                    'Discount',    'RedShelf Fee',         'Publisher Credit', 'Shipping',
                    'Taxes',       'Publisher Net Credit', 'Status',           'Type',
                    'Period',      'Taxable',              'Tax Entity',       'Source',
                    'Address',     'City',                 'State',            'Postal Code',
                    'Country',     '^$'
                ],
            ],
        },

        # RedShelf version 11, FBoD15902
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 11,
            lines   => [
                ['Content Owner'],    # a few flavors with that in it
                [
                    'ID',           'Date',                 'User',             'Name',
                    'University',   'Imprint',              'Book',             'Author',
                    'eISBN13',      'ISBN13',               'Retail Price',     'Purchase Price',
                    'Discount',     'RedShelf Fee',         'Publisher Credit', 'Shipping',
                    'Taxes',        'Publisher Net Credit', 'Status',           'Type',
                    'Period',       'Taxable',              'Tax Entity',       'Source',
                    'Address',      'City',                 'State',            'Postal Code',
                    'Country',      'Course',               'Course Status',    'Member Type',
                    'Opt-Out Date', 'Opt-Out Reason',       'Code',             'CHANNEL',
                    '^$'
                ],
            ],
        },

        # RedShelf version 12, FBoD19661 (Update: RSD-790)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 12,
            lines   => [ [
                    '(ID|Journal)', 'Date',                 '(User|First Initial)', '(Name|Last Initial)',
                    'University',   'Imprint',              'Book',             'Author',
                    'eISBN13',      'ISBN13',               'Retail Price',     'Purchase Price',
                    'Discount',     'RedShelf Fee',         'Publisher Credit', 'Shipping',
                    'Taxes',        'Publisher Net Credit', 'Status',           'Type',
                    'Period',       'Taxable',              'Tax Entity',       'Source',
                    'Address',      'City',                 'State',            'Postal Code',
                    'Country',      'Course',               'Course Status',    'Member Type',
                    'Opt-Out Date', 'Opt-Out Reason',       'Code',             'Add\/Drop Date',
                    'CHANNEL',      '^$'
                ],
            ],
        },

        # RedShelf version 13, RSD-3639
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 13,
            lines   => [ [
                    'ID',
                    'Date',
                    '(?:First|User)',
                    '(?:Last|Name)',
                    'University',
                    'Imprint',
                    'Book',
                    'Author',
                    'eISBN13',
                    'ISBN13',
                    'Retail Price',
                    'Purchase Price',
                    'Discount',
                    'RedShelf Fee',
                    'Publisher Credit',
                    'Shipping',
                    'Taxes',
                    'Publisher Net Credit',
                    'Status',
                    'Type',
                    'Period',
                    'Taxable',
                    'Tax Entity',
                    'Source',
                    'Address',
                    'City',
                    'State',
                    'Postal Code',
                    'Country',
                    'Course',
                    'Course Status',
                    'Member Type',
                    'Opt\-Out Date',
                    'Opt\-Out Reason',
                    'Code',
                    'Add\/Drop Date',
                    'CHANNEL',
                    '^$'
                ],
            ],
        },

        # RedShelf - based on the Version 10
        {
            service          => BookPub::Tracker::Service::VIRDOCS,
            version          => 14,
            match_on_any_row => 1,
            lines            => [
                [
                    'ID',
                    'Date',
                    'User',
                    'Name',
                    'University',
                    'Imprint',
                    'Book',
                    'Author',
                    'eISBN13',
                    'ISBN13',
                    'Retail Price',
                    'Purchase Price',
                    'Discount',
                    'RedShelf Fee',
                    'Publisher Credit',
                    'Shipping',
                    'Taxes',
                    'Publisher Net Credit',
                    'Status',
                    'Type',
                    'Period',
                    'Taxable',
                    'Tax Entity',
                    'Source',
                    'Address',
                    'City',
                    'State',
                    'Postal Code',
                    'Country',
                    'OPEID\-8',
                    'Publisher Code',
                    'Pricing Method',
                    '^$'
                ],
            ],
        },

        # RedShelf version 15, (RSD-8221)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 15,
            lines   => [ [
                    'ID',
                    'Date',
                    'University',
                    'Imprint',
                    'Book',
                    'Author',
                    'eISBN13',
                    'ISBN13',
                    'Custom ISBN',
                    'Retail Price',
                    'Purchase Price',
                    'Discount',
                    'RedShelf Fee',
                    'Publisher Credit',
                    'Shipping',
                    'Taxes',
                    'Publisher Net Credit',
                    'Status',
                    'Type',
                    'Period',
                    'Taxable',
                    'Tax Entity',
                    'Source',
                    'City',
                    'State',
                    'Postal Code',
                    'Country',
                    'Course',
                    'Course Status',
                    'Member Type',
                    'Opt-Out Date',
                    'Opt-Out Reason',
                    'Code',
                    'Add\/Drop Date',
                    'CHANNEL',
                    '^$'
                ],
            ],
        },

        # RedShelf version 16, (RSD-8422)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 16,
            lines   => [ [
                    'ID',
                    'Date',
                    'University',
                    'Book',
                    'Author',
                    'eISBN13',
                    'ISBN13',
                    'Publisher Credit',
                    'Status',
                    'Type',
                    'Period',
                    'Taxable',
                    'Sales Tax',
                    'Tax Entity',
                    'Source',
                    'Address',
                    'City',
                    'State',
                    'Postal Code',
                    'Country',
                    'OPEID-8',
                    'Publisher Code',
                    'Pricing Method',
                    'Location Number',
                    'Location Name',
                    '^$'
                ],
            ],
        },

        # RedShelf version 17, (RSD-8421)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 17,
            lines   => [ [
                    'Journal ID',
                    'Transaction Date',
                    'Institution',
                    'Course Member Status',
                    'Member Type',
                    'Product Title',
                    'eISBN13',
                    'ISBN13',
                    'Custom ISBN',
                    'Publisher Code',
                    'Amount Due to Publisher',
                    'Transaction Status',
                    'Product Type',
                    'Duration',
                    'Start Date',
                    'Add/Drop Date',
                    'Opt-out Date',
                    'Opt-out Reason',
                    'Billing Date',
                    'Bookstore Address',
                    'Bookstore City',
                    'Bookstore State',
                    'Bookstore Zip',
                    'Bookstore Country',
                    'OPEID-8',
                    '(:?Campus ID)?',
                    '(:?Campus Name)?',
                    '^$'
                ],
            ],
        },

        # RedShelf version 18 (Like v15 with added column), (RSD-8548)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 18,
            lines   => [ [
                    'ID',
                    'Date',
                    'User',
                    'Name',
                    'University',
                    'Imprint',
                    'Book',
                    'Author',
                    'eISBN13',
                    'ISBN13',
                    'Custom ISBN',
                    'Retail Price',
                    'Purchase Price',
                    'Discount',
                    'RedShelf Fee',
                    'Publisher Credit',
                    'Shipping',
                    'Taxes',
                    'Publisher Net Credit',
                    'Status',
                    'Type',
                    'Period',
                    'Taxable',
                    'Tax Entity',
                    'Source',
                    'Address',
                    'City',
                    'State',
                    'Postal Code',
                    'Country',
                    'Course',
                    'Course Status',
                    'Member Type',
                    'Opt-Out Date',
                    'Opt-Out Reason',
                    'Code',
                    'Add\/Drop Date',
                    'CHANNEL',
                    '^$'
                ],
            ],
        },

        # RedShelf version 19 (Like v18 with column shifted), (RSD-9839)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 19,
            lines   => [ [
                    'ID',
                    'Date',
                    'User',
                    'Name',
                    'University',
                    'Imprint',
                    'Book',
                    'Author',
                    'eISBN13',
                    'ISBN13',
                    'Custom ISBN',
                    'Retail Price',
                    'Purchase Price',
                    'Discount',
                    'RedShelf Fee',
                    'Publisher Credit',
                    'Shipping',
                    'Taxes',
                    'Publisher Net Credit',
                    'Status',
                    'Type',
                    'Period',
                    'Taxable',
                    'Tax Entity',
                    'Source',
                    'City',
                    'State',
                    'Postal Code',
                    'Country',
                    'Course',
                    'Course Status',
                    'Member Type',
                    'Opt-Out Date',
                    'Opt-Out Reason',
                    'Code',
                    'Add/Drop Date',
                    'CHANNEL',
                    '^$'
                ],
            ],
        },

        # RedShelf version 19, but different format (RSD-10694)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 19,
            lines   => [ [
                    'Journal ID',
                    'Transaction Date',
                    'Transaction Period',
                    'Customer',
                    'Course',
                    'Vendor',
                    'Publisher',
                    'Vendor Transaction',
                    'Unit',
                    'Member Type',
                    'Book Title',
                    'eISBN13',
                    'ISBN13',
                    'SRP',
                    'Price to Student',
                    'Institution Due',
                    'Publisher Credit',
                    'RedShelf Fee',
                    'Product Type',
                    'Period',
                    'Status',
                    'Channel',
                    'Course Start Date',
                    'Add\/Drop Date',
                    'Course End Date',
                    'Membership Date',
                    'Drop Date',
                    'Opt\-Out Date',
                    'Opt\-Out Reason',
                    'Bookstore Address',
                    'Bookstore City',
                    'Bookstore State',
                    'Bookstore Zip',
                    'Bookstore Country',
                    'Publisher Code',
                    'Custom ISBN',
                    '.*',
                    'Term Start Date',
                    'Session Start Date',
                    'Student Identifier',
                    'Course Number',
                    'Department',
                    'Section',
                    'LMS Course ID',
                    'Campus ID',
                    'Student Type',
                    'Reason Code',
                    'Course Status',
                    'RedShelf Fee',
                    '^$'
                ],
            ],
        },

        # RedShelf version 20 (RSD-10991)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 20,
            sheet  => 'any',
            lines   => [ [
                    'Journal ID',
                    'Transaction Date',
                    'Customer',
                    'Course',
                    'Vendor',
                    'Publisher',
                    'Vendor Transaction',
                    'Unit',
                    'Member Type',
                    'Book Title',
                    'eISBN13',
                    'ISBN13',
                    'SRP',
                    'Price to Student',
                    'Institution Due',
                    'Publisher Credit',
                    'RedShelf Fee',
                    'Product Type',
                    'Period',
                    'Status',
                    'Channel',
                    'Course Start Date',
                    'Add/Drop Date',
                    'Course End Date',
                    'Membership Date',
                    'Drop Date',
                    'Opt\-Out Date',
                    'Opt\-Out Reason',
                    'Bookstore Address',
                    'Bookstore City',
                    'Bookstore State',
                    'Bookstore Zip',
                    'Bookstore Country',
                    'Publisher Code',
                    'Custom ISBN',
                    'Student Identifier',
                    'Alternative Pricing',
                    'Term Start Date',
                    'Session Start Date',
                    'Course Number',
                    'Department',
                    'Section',
                    'LMS Course ID',
                    'Campus ID',
                    'Student Type',
                    'Reason Code',
                    'Course Status',
                    'RedShelf Fee',
                    'Campus ID',
                    'Campus Name',
                    '^$'
                ] ]
        },

        # RedShelf version 20 header for 'Month_YYYY' tab (RSD-11392)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 20,
            sheet  => 'any',
            lines   => [ [
                    'ID',
                    'Date',
                    'User',
                    'Name',
                    'University',
                    'Imprint',
                    'Book',
                    'Author',
                    'eISBN13',
                    'ISBN13',
                    'Custom ISBN',
                    'Retail Price',
                    'Purchase Price',
                    'Discount',
                    'RedShelf Fee',
                    'Publisher Credit',
                    'Shipping',
                    'Taxes',
                    'Publisher Net Credit',
                    'Status',
                    'Type',
                    'Period',
                    'Taxable',
                    'Tax Entity',
                    'Source',
                    'City',
                    'State',
                    'Postal Code',
                    'Country',
                    'Course',
                    'Course Status',
                    'Member Type',
                    'Opt\-Out Date',
                    'Opt\-Out Reason',
                    'Code',
                    'Add\/Drop Date',
                    'CHANNEL',
                    'publisher name',
                    '^$'
                ] ]
        },

        # RedShelf version 20, Alternative header for 'RSM 2 -IA&EA Detail' tab (RSD-11392)
        {
            service => BookPub::Tracker::Service::VIRDOCS,
            version => 20,
            sheet  => 'any',
            lines   => [ [
                    'Journal ID',
                    'Transaction Date',
                    'Customer',
                    'Course',
                    'Vendor',
                    'Publisher',
                    'Vendor Transaction',
                    'Unit',
                    'Member Type',
                    'Book Title',
                    'eISBN13',
                    'ISBN13',
                    'SRP',
                    'Price to Student',
                    'Institution Due',
                    'Publisher Credit',
                    'RedShelf Fee',
                    'Product Type',
                    'Period',
                    'Status',
                    'Channel',
                    'Course Start Date',
                    'Add/Drop Date',
                    'Course End Date',
                    'Membership Date',
                    'Drop Date',
                    'Opt\-Out Date',
                    'Opt\-Out Reason',
                    'Bookstore Address',
                    'Bookstore City',
                    'Bookstore State',
                    'Bookstore Zip',
                    'Bookstore Country',
                    'Publisher Code',
                    'Custom ISBN',
                    'Alternative Pricing',
                    'Term Start Date',
                    'Session Start Date',
                    'Student Identifier',
                    'Course Number',
                    'Department',
                    'Section',
                    'LMS Course ID',
                    'Student Type',
                    'Reason Code',
                    'Course Status',
                    'RedShelf Fee',
                    'Campus ID',
                    'Campus Name',
                    '^$'
                ] ]
        },

        # Catch Group, Version 1
        {
            service => BookPub::Tracker::Service::CATCH_GROUP,
            version => 1,
            lines   => [ [
                    'Publisher name',
                    'Title',
                    'ISBN',
                    'Author',
                    'Units Sold',
                    'Year to date sales units',
                    'Sale price inc',
                    'Sale Price ex',
                    'Cost Price inc',
                    'Cost Price ex',
                    'Didgio Commission inc',
                    'Didgio commission ex',
                    'Payment amount inc',
                    'Payment Amount ex',
                    'GST',
                    'Location of sale',
                    'Date of sale',
                    'Returns',
                    '^$'
                ],
            ],
        },

        # ACX, Version 1
        {
            service => BookPub::Tracker::Service::ACX,
            version => 1,
            lines   => [
                ['ACX'],
                ['Activity Summary Report'],
                [
                    'Payee Name',
                    undef,
                    'Parent Product ID',
                    'Title',
                    'Author',
                    'ISBN',
                    'Marketplace Name',
                    'Royalty Share Percent',
                    'Audible Non-Member Cash: Quantity - ALC',
                    'Audible Non-Member Cash: Net Sales - ALC',
                    'Audible Non-Member Cash: Royalty Earned - ALC',
                    'Audible Member Credit: Quantity - AL',
                    'Audible Member Credit: Net Sales - AL',
                    'Audible Member Credit: Royalty Earned - AL',
                    'Audible Member Cash: Quantity - ALOP',
                    'Audible Member Cash: Net Sales - ALOP',
                    'Audible Member Cash: Royalty Earned - ALOP',
                    'Grand Total Quantity',
                    'Grand Total Net Sales',
                    'Grand Total Royalty Earned',
                    '^$'
                ],
            ],
        },

        # ACX, Version 2
        {
            service          => BookPub::Tracker::Service::ACX,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    undef,            'Product ID', 'Title',          'Autho', 'Mkt',       'Royalty Share',
                    'Qty',            'Net Sales',  'Royalty Earned', 'Qty',   'Net Sales', 'Royalty Earned',
                    'Qty',            'Net Sales',  'Royalty Earned', 'Qty',   'Net Sales', undef,
                    'Royalty Earned', '^$'
                ],
            ],
        },

        # ACX, Version 3 (RSD-7982)
        {
            service          => BookPub::Tracker::Service::ACX,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    undef,
                    'Product ID',
                    'Title',
                    'Author',
                    'Mkt',
                    'Offer',
                    'Royalty Share',
                    undef,
                    'Qty.',
                    'Net Sales',
                    'Royalty Earned',
                    'Qty.',
                    'Net Sales',
                    'Royalty Earned',
                    'Qty.',
                    'Net Sales',
                    'Royalty Earned',
                    'Qty.',
                    'Net Sales',
                    undef,
                    'Royalty Earned',
                    '^$'
                ],
            ],
        },

        # ACX, Version v5
        {
            service          => BookPub::Tracker::Service::ACX,
            version          => 5,
            sheet            => 'any',
            file_name        => '[ _.]ACX[ _.]',
            match_on_any_row => 1,
            lines            => [ [
                    'Royalty Earner',
                    'Product ID',
                    'Author',
                    'Title',
                    'Digital ISBN',
                    'Provider Product ID',
                    'Transaction Type',
                    'Marketplace',
                    'Purchase Type',
                    'Offer',
                    'Royalty Rule',
                    'Additional Rule Details',
                    'Currency',
                    'Royalty Rate',
                    'Payee Split',
                    'Net Units',
                    'Net Sales',
                    'Net Royalties Earned',
                    '^$'
                ],
            ],
        },

        # Yuzu, Version 1
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 1,
            lines   => [ [
                    'Publisher',
                    'Contract Key',
                    'Cost',
                    'Digital ISBN',
                    'EAN',
                    'Purchase Type',
                    'Store Location',
                    'Zip Code',
                    'Order Type',
                    'Transaction Date',
                    '^$'
                ],
            ],
        },

        # Yuzu, Version 2
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 2,
            lines   => [ [
                    'Publisher',      'Contract Key', 'Cost',       'Digital ISBN',     'EAN',    'Title',
                    'Author',         'List Price',   'Quantity',   'Currency',         'Format', 'Purchase Type',
                    'Store Location', 'Zip',          'Order Type', 'Transaction Date', '^$'
                ],
            ],
        },

        # Yuzu, Version 3
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 3,
            lines   => [ [
                    'Publisher',        'Ean',            'Digital Isbn', 'Title',      'Author', 'Format',
                    'Contract Key',     'Purchase Type',  'Quantity',     'List Price', 'Cost',   'Currency',
                    'Transaction Date', 'Store Location', 'Zip',          'Order Type', '^$'
                ],
            ],
        },

        # Yuzu, Version 4
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 4,
            lines   => [ [
                    'Publisher',      'Ean',           'Digital Isbn', 'Title',      'Author',          'Format',
                    'Contract Key',   'Purchase Type', 'Quantity',     'List Price', 'Cost',            'Transaction Date',
                    'Store Location', 'Zip',           'Order Type',   'Currency',   'Country Sold To', '^$'
                ],
            ],
        },

        # Yuzu, Version 5
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 5,
            lines   => [ [
                    'Publisher',        'Ean|EAN|ean',    'Digital Isbn', 'Author',     'Title', 'Format',
                    'Contract Key',     'Purchase Type',  'Quantity',     'List Price', 'Cost',  'Currency',
                    'Transaction Date', 'Store Location', 'Zip Code|Zip', 'Order Type', '^$'
                ],
            ],
        },

        # Yuzu, Version 6
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 6,
            lines   => [ [
                    'Publisher',
                    'Ean|EAN|ean',
                    'Digital Isbn|Digital ISBN',
                    'Title',
                    'Author',
                    'Contract Key',
                    'Purchase Type',
                    'Quantity',
                    'List Price',
                    'Cost',
                    'Transaction Date',
                    'Store Location',
                    'Zip Code|Zip',
                    'Order Type',
                    'Format Code',
                    'Currency',
                    '^$'
                ],
            ],
        },

        # Yuzu, Version 7
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 7,
            lines   => [ [
                    'Publisher',    'Ean|EAN|ean',  'Digital Isbn|Digital ISBN', 'Author',
                    'Title',        'Contract Key', 'Purchase Type',             'Quantity',
                    'List Price',   'Cost',         'Transaction Date',          'Store Location',
                    'Zip Code|Zip', 'Order Type',   'Format',                    'Currency',
                    '^$'
                ],
            ],
        },

        # Yuzu, Version 8, FB13407
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 8,
            lines   => [ [
                    'Publisher',    'Ean|EAN|ean',  'Digital Isbn|Digital ISBN', 'Author',
                    'Title',        'Contract Key', 'Purchase Type',             'Quantity',
                    'List Price',   'Cost',         'Transaction Date',          'Store Location',
                    'Zip Code|Zip', 'Order Type',   'Currency',                  'Format',
                    '^$'
                ],
            ],
        },

        # Yuzu, Version 9, FB13511
        {
            service => BookPub::Tracker::Service::YUZU,
            version => 9,
            lines   => [ [
                    'Publisher',    'Ean|EAN|ean',  'Digital Isbn|Digital ISBN', 'Author',
                    'Title',        'Contract Key', 'Purchase Type',             'Cost',
                    'Quantity',     'List Price',   'Transaction Date',          'Store Location',
                    'Zip Code|Zip', 'Order Type',   'Format',                    'Currency',
                    '^$'
                ],
            ],
        },

        # Slicebooks, Version 1
        {
            service => BookPub::Tracker::Service::SLICEBOOKS,
            version => 1,
            lines   => [ [
                    'Order #',
                    'App Name',
                    'Report Date',
                    'Parent eBook SKU',
                    'Parent eBook ISBN10',
                    'Parent eBook ISBN13',
                    'Remix SKU',
                    'Remix ISBN13',
                    'Remix Identifier',
                    'Slice SKU',
                    'Slice ISBN13',
                    'Slice Identifier',
                    'Source ID',
                    'Source Name',
                    'Source Type',
                    'Type',
                    'Book Title',
                    'Author',
                    'Slice Title',
                    'Remix Title',
                    'Remixed By',
                    'Publisher',
                    'Imprint \(if available\)',
                    'QTY Sold',
                    'Order Amount',
                    'List Price \(Selling Price\)',
                    'Discounted price',
                    'Download Date',
                    'Transaction status',
                    'Transaction Date',
                    'Transaction Code',
                    'Transaction amount',
                    'Sales Tax Collected - Agency',
                    'Sales Tax Collected - NonAgency \(CO State only\)',
                    'Sales Tax Refund - Agency',
                    'Sales Tax Refund - NonAgency',
                    'Refund Date',
                    'Updated Transaction Amount',
                    'Seller Discount',
                    'Partner Royalty Amount',
                    '^$'
                ],
            ],
        },

        # Slicebooks, Version 2
        {
            service => BookPub::Tracker::Service::SLICEBOOKS,
            version => 2,
            lines   => [ [
                    'Order #',
                    'Report Date',
                    'Parent eBook SKU',
                    'Parent eBook ISBN10',
                    'Parent eBook ISBN13',
                    'Remix SKU',
                    'Remix ISBN13',
                    'Remix Identifier',
                    'Slice SKU',
                    'Slice ISBN13',
                    'Slice Identifier',
                    'Source ID',
                    'Source Name',
                    'Source Type',
                    'Type',
                    'Book Title',
                    'Author',
                    'Slice Title',
                    'Remix Title',
                    'Remixed By',
                    'Publisher',
                    'Imprint \(if available\)',
                    'QTY Sold',
                    'Order Amount',
                    'List Price \(Selling Price\)',
                    'Promo Name',
                    'Promo Code',
                    'Promo Amount',
                    'Discounted price',
                    'Download Date',
                    'Transaction status',
                    'Transaction Date',
                    'Transaction Code',
                    'Transaction amount',
                    'Sales Tax Collected - Agency',
                    'Sales Tax Collected - NonAgency \(CO State only\)',
                    'PayPal Transaction fee amount',
                    'Transaction Refund Amount',
                    'PayPal Transaction Fee Refund amount',
                    'Sales Tax Refund - Agency',
                    'Sales Tax Refund - NonAgency',
                    'Refund Date',
                    'Updated Transaction Amount',
                    'Seller Discount',
                    'Partner Royalty Amount',
                    '^$'
                ],
            ],
        },

        # Slicebooks, Version 3
        {
            service => BookPub::Tracker::Service::SLICEBOOKS,
            version => 3,
            lines   => [ [
                    'Order #',
                    'Report Date',
                    'Parent eBook SKU',
                    'Parent eBook ISBN10',
                    'Parent eBook ISBN13',
                    'Remix SKU',
                    'Remix ISBN13',
                    'Remix Identifier',
                    'Slice SKU',
                    'Slice ISBN13',
                    'Slice Identifier',
                    'Source ID',
                    'Source Name',
                    'Source Type',
                    'Type',
                    'Book Title',
                    'Author',
                    'Slice Title',
                    'Remix Title',
                    'Remixed By',
                    'Publisher',
                    'Imprint',
                    'Imprint \(if available\)',
                    'QTY Sold',
                    'Order Amount',
                    'List Price \(Selling Price\)',
                    'Promo Name',
                    'Promo Code',
                    'Promo Amount',
                    'Discounted price',
                    'Download Date',
                    'Transaction status',
                    'Transaction Date',
                    'Transaction Code',
                    'Transaction amount',
                    'Sales Tax Collected - Agency',
                    'Sales Tax Collected - NonAgency \(CO State only\)',
                    'PayPal Transaction fee amount',
                    'Transaction Refund Amount',
                    'PayPal Transaction Fee Refund amount',
                    'Sales Tax Refund - Agency',
                    'Sales Tax Refund - NonAgency',
                    'Refund Date',
                    'Updated Transaction Amount',
                    'Seller Discount',
                    'Partner Royalty Percentage',
                    'Partner Royalty'
                ],
            ],
        },

        # Glose, Version 1
        {
            service => BookPub::Tracker::Service::GLOSE,
            version => 1,
            lines   => [ [
                    'ISBN',
                    'Purchase date',
                    'Quantity',
                    'Author',
                    'Title',
                    'Country of purchaser',
                    'Zipcode of purchaser',
                    'Tax rate',
                    'Discount',
                    'Purchase currency',
                    'Publisher retail price \(excl\. tax\)',
                    'Amount charged to purchaser \(incl\. tax\)',
                    'Amount charged to purchaser \(excl\. tax\)',
                    'Taxes charged to purchaser',
                    'Proceeds currency',
                    'Proceeds to publisher \(excl\. tax\)',
                    'Glose commission \(excl\. tax\)',
                    '^$'
                ],
            ],
        },

        # Glose, Version 2
        {
            service => BookPub::Tracker::Service::GLOSE,
            version => 2,
            lines   => [ [
                    'id',
                    'ISBN',
                    'Format',
                    'Purchase date',
                    'Quantity',
                    'Author',
                    'Title',
                    'Country of purchaser',
                    'State of purchaser',
                    'Zipcode of purchaser',
                    'Tax rate',
                    'Discount',
                    'Purchase currency',
                    'Publisher retail price \(excl. tax\)',
                    'Amount charged to purchaser \(incl. tax\)',
                    'Amount charged to purchaser \(excl. tax\)',
                    'Taxes charged to purchaser',
                    'Proceeds currency',
                    'Proceeds to publisher \(excl. tax\)',
                    'Proceeds to publisher \(%\)',
                    'Glose commission \(excl. tax\)',
                    '^$'
                ],
            ],
        },

        # Glose, Version 3
        {
            service => BookPub::Tracker::Service::GLOSE,
            version => 3,
            lines   => [ [
                    'id',
                    'ISBN',
                    'Format',
                    'Purchase date',
                    'Quantity',
                    'Author',
                    'Title',
                    'Country of purchaser',
                    'State of purchaser',
                    'Zipcode of purchaser',
                    'Tax rate',
                    'Discount',
                    'Purchase currency',
                    'Publisher retail price \(excl\. tax\)',
                    'Amount charged to purchaser \(incl\. tax\)',
                    'Amount charged to purchaser \(excl\. tax\)',
                    'Taxes charged to purchaser',
                    'Proceeds currency',
                    'Proceeds to publisher \(excl\. tax\)',
                    'Proceeds to publisher \(%\)',
                    'Glose commission \(excl\. tax\)',
                    '^$'
                ],
            ],
        },

        # Pan Australia, Version 1
        {
            service => BookPub::Tracker::Service::PAN_AUSTRALIA,
            version => 1,
            lines   => [ [
                    'CUSTOMER_NUM',        'ISBN',              'EAN',                'ORDER_DATE',
                    'TRANSACTION_UNITS',   'TRANSACTION_VALUE', 'SALES_TYPE',         'TRANSACTION_TYPE',
                    'PUB_VALUE',           'DISCOUNT',          'COUNTRY_OF_SALE',    'COST_VALUE',
                    'SALES_PERIOD',        'Retailer',          'Transaction_Period', 'List_Price',
                    'List_Price_Currency', 'Purchase_Price',    'Revenue_Currency',   'Discount',
                    'Conversion_Rate',     'Price_Type',        'Title',              'Imprint',
                    'Publisher',           '^$'
                ],
            ],
        },

        # Pan Australia, Version 2
        {
            service => BookPub::Tracker::Service::PAN_AUSTRALIA,
            version => 2,
            lines   => [ [
                    'CUSTOMER_NUM',        'ISBN',              'EAN',                'ORDER_DATE',
                    'TRANSACTION_UNITS',   'TRANSACTION_VALUE', 'SALES_TYPE',         'TRANSACTION_TYPE',
                    'PUB_VALUE',           'DISCOUNT',          'COUNTRY_OF_SALE',    'COST_VALUE',
                    'SALES_PERIOD',        'Retailer',          'Transaction_Period', 'List_Price',
                    'List_Price_Currency', 'Purchase_Price',    'Revenue_Currency',   'Discount',
                    'Conversion_Rate',     'Price_Type',        'Purchase_type',      'Product_Type',
                    'Title',               'Imprint',           'Publisher',          '^$'
                ],
            ],
        },

        # Odilo, Version 1
        {
            service => BookPub::Tracker::Service::ODILO,
            version => 1,
            lines   => [
                [undef],
                [
                    'Date', 'ISBN',     'Title',           'Author',        'Sale type',       'DLP \(\$\)',
                    'Qty',  'Discount', 'Net Sale \(\$\)', 'Totals \(\$\)', 'Library sold to', 'Country',
                    '^$'
                ],
            ],
        },

        # Odilo, Version 2
        {
            service => BookPub::Tracker::Service::ODILO,
            version => 2,
            lines   => [
                [undef],
                [
                    'Date', 'ISBN', 'Title', 'Author', 'Sale type', 'DLP \(\w{3}\)',
                    'Qty', 'Discount',
                    'Net Sale\s+\(\w{3}\)',
                    'Totals \(\$\)|Totals \(\w{3}\)',
                    'Library sold to',
                    'Country', '^$'
                ],
            ],
        },

        # Odilo, Version 3, FB13473
        {
            service => BookPub::Tracker::Service::ODILO,
            version => 3,
            lines   => [
                [undef],
                [
                    'Date', 'ISBN', 'Title', 'Author', 'DLP \(\w{3}\)',
                    'Qty', 'Discount',
                    'Net Sale \(\w{3}\)',
                    'Totals \(\$\)|Totals \(\w{3}\)',
                    'Library sold to',
                    'Country', '^$'
                ],
            ],
        },

        # Odilo, Version 4, FB15425
        {
            service => BookPub::Tracker::Service::ODILO,
            version => 4,
            lines   => [
                [undef],
                [
                    'ISBN',            'Title',    'Author',             'Price per checkout',
                    'Checkouts?',      'Discount', 'Net Sale \(\w{3}\)', 'Totals \(\w{3}\)',
                    'Library sold to', 'Country',  '^$'
                ],
            ],
        },

        # Odilo, Version 5, RSD-3169
        {
            service          => BookPub::Tracker::Service::ODILO,
            version          => 5,
            match_on_any_row => 1,
            lines            => [
                [
                    'Date',
                    'ISBN',
                    'Title',
                    'Author',
                    'Currency',
                    'DLP',
                    'Qty',
                    'Discount',
                    'Net Sale',
                    'Totals',
                    'Library sold to',
                    'Country',
                    '^$'
                ],
            ],
        },

        # Odilo, Version 6, RSD-3777
        {
            service          => BookPub::Tracker::Service::ODILO,
            version          => 6,
            match_on_any_row => 1,
            lines            => [
                [
                'ISBN',
                'Title',
                'Author',
                'Price per checkout',
                'Currency',
                'Checkouts?',
                'Discount',
                'Net Sale',
                'Totals',
                'Library sold to',
                'Country',
                '^$'
                ],
            ],
        },

        # Odilo Importers v7 and v8 were retired (RSD-9637)

        # Odilo, Version 9, RSD-8920
        {
            service          => BookPub::Tracker::Service::ODILO,
            version          => 9,
            match_on_any_row => 1,
            lines            => [
                [
                    'Purchase date',
                    'ISBN',
                    'Format',
                    'Title',
                    'Title ID',
                    'Author',
                    'Target audience note',
                    'Publisher',
                    'Sale type',
                    'Currency',
                    'Current Digital List Price',
                    'Type of change',
                    '(?:Sale price|Pay per checkout)',
                    'Amount',
                    'Discount',
                    'Net sale',
                    'Total price',
                    'Library',
                    'Country',
                    '^$'
                ],
            ],
        },

        # Odilo, Version 10, RSD-8920
        {
            service          => BookPub::Tracker::Service::ODILO,
            version          => 10,
            match_on_any_row => 1,
            lines            => [
                [
                    'Country.1',
                    'Year',
                    'Distribuidor',
                    'Distribuidor_',
                    'Month',
                    'Purchase date',
                    'ISBN',
                    'Format',
                    'Title',
                    'Title ID',
                    'Author',
                    'Target audience note',
                    'Publisher',
                    'Sale type',
                    'Currency',
                    'Current Digital List Price',
                    'Type of change',
                    'Sale price',
                    'Amount',
                    'Discount',
                    'Net sale',
                    'Total price',
                    'Library',
                    'Country',
                    '^$'
                ],
            ],
        },

        # Odilo, Version 11, (RSD-10796)
        {
            service          => BookPub::Tracker::Service::ODILO,
            version          => 11,
            match_on_any_row => 1,
            lines            => [[
                    'Purchase date',
                    'ISBN',
                    'Format',
                    'Title',
                    'Title ID',
                    'Author',
                    'Target audience note',
                    'Publisher',
                    'Sale type',
                    'Currency',
                    'Current Digital List Price',
                    'Type of change',
                    '(?:Sale price|Pay per checkout)',
                    'Amount',
                    'Discount',
                    'Net sale',
                    'Total price',
                    'Library',
                    'Country',
                    'Type of customer',
                    '^$'
            ]],
        },

        # Kortext, Version 1 (FB8815)
        {
            service => BookPub::Tracker::Service::KORTEXT,
            version => 1,
            lines   => [ [
                    'Institution',         'Activation Date', 'ISBN',       'Title',
                    'Authors',             'Publisher',       'Edition',    'Quantity',
                    'Sales Channel',       'Purchase Model',  'Ex Tax RRP', 'Discount',
                    'Net Receipt \/ unit', 'Net Revenue'
                ],
            ],
        },

        # Kortext, Version 2 (FB21622)
        {
            service => BookPub::Tracker::Service::KORTEXT,
            version => 2,
            lines   => [ [
                    'Activation Month', 'Institution',         'ISBN',           'Title',
                    'Format',           'Authors',             'Publisher',      'Edition',
                    'Quantity',         'Sales Channel',       'Purchase Model', 'Ex Tax RRP',
                    'Discount',         'Net Receipt \/ unit', 'Net Revenue'
                ],
            ],
        },

        # Kortext, Version 3 (RSD-1690)
        {
            service => BookPub::Tracker::Service::KORTEXT,
            version => 3,
            lines   => [ [
                    'Activation Month', 'Institution',   'ISBN',                'Title',
                    'Format',           'Authors',       'Publisher',           'Edition',
                    'Quantity',         'Sales Channel', 'Purchase Model',      'Currency',
                    'Ex Tax RRP',       'Discount',      'Net Receipt \/ unit', 'Net Revenue'
                ]
            ],
        },

        # Kortext, Version 4 (RSD-4004)
        {
            service => BookPub::Tracker::Service::KORTEXT,
            version => 4,
            lines   => [ [
                    'Activation Month',
                    'Institution',
                    'ISBN',
                    'Title',
                    'Format',
                    'Authors',
                    'Publisher',
                    'Edition',
                    'Quantity',
                    'Sales Channel',
                    'Purchase Model',
                    'Qualifier',
                    'Currency',
                    'Ex Tax RRP',
                    'Discount',
                    'Net Receipt \/ unit',
                    'Net Revenue',
                    '^$'
                ]
            ],
        },

        # Kortext, Version 5 (RSD-9955) TODO
        {
            service => BookPub::Tracker::Service::KORTEXT,
            match_on_any_row => 1,
            sheet            => 'any',
            version => 5,
            lines   => [ [
                    'Month',
                    'Institution',
                    'ISBN',
                    'Title',
                    'Format',
                    'Authors',
                    'Publisher',
                    'Edition',
                    'Currency',
                    'Country',
                    'Model',
                    '1:1 Qty',
                    'Library Concurrency',
                    '1:1\s*Perpetual',
                    '1:1\s*12mth Rental',
                    '1:1\s*6mth Rental',
                    '1:1\s*3mth Rental',
                    'Special Pricing',
                    'Library\s*1U Perp',
                    'Library\s*3U Perp',
                    'Library\s*5U Perp',
                    'Library\s*10U Perp',
                    'Library Unlimited Perp',
                    'Library\s*1U 12 Mths',
                    'Library\s*3U 12 Mths',
                    'Library\s*5U 12 Mths',
                    'Library\s*10U 12 Mths',
                    'Library Unlimited 12 Mths',
                    'Discount',
                    'Sub Total',
                    'Total Pub Comp',
                    'Notes',
                    'PO ID',
                    '^$'
                ]
            ],
        },

        # Safari Books, Version 1 (FB9024)
        {
            service          => BookPub::Tracker::Service::SAFARIBOOKS,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [
                [ undef, 'ISBN', 'eISBN', 'Title', 'Publisher', 'Author', 'Channel', undef, 'Sales', 'Commission Rate', 'Commission Earned', '^$' ],
            ],
        },

        # Oyster, version 1
        {
            service => BookPub::Tracker::Service::OYSTER,
            version => 1,
            sheet   => 'any',
            lines   => [ [ 'Transaction', 'Title', 'ISBN', 'Author', 'Price', 'Discount', 'Timestamp', 'Effective Price|^$', '^$' ], ],
        },

        # Oyster, version 2
        {
            service => BookPub::Tracker::Service::OYSTER,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report Date',
                    'Message function',
                    'Report period from',
                    'Report period to',
                    'Reporting currency',
                    'Main product ID# type',
                    'Main product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Gross sold quantity',
                    'Returned\/Refunded Quantity',
                    'Net sold quantity',
                    'Sale territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Gross sold value',
                    'Returned\/refunded value',
                    'Net value before fees',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned\/refunded quantity',
                    'Total net sold quantity',
                    'Total Gross Sold Value',
                    'Total returned\/refunded value',
                    'Total net sold value before fees',
                    'Total proceeds due to publisher',
                    '^$'
                ],
            ],
        },

        # Oyster, version 3
        {
            service => BookPub::Tracker::Service::OYSTER,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'Territory', 'ISBN', 'Title', 'Author', 'Publisher', 'Imprint', 'Publisher DLP',
                    'Units Sold', 'Units Refunded',
                    'Net Units', 'Discount',
                    'Amount Due Local Currency',
                    'Amount Due GBP', '^$'
                ],
            ],
        },

        # Oyster, version 4
        {
            service => BookPub::Tracker::Service::OYSTER,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report Date',
                    'Message function',
                    'Report period from',
                    'Report period to',
                    'Reporting currency',
                    'Main product ID# type',
                    'Main product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Gross sold quantity',
                    'Returned\/Refunded Quantity',
                    'Net sold quantity',
                    'Sale territory',
                    'Unit price',
                    'Price type',
                    'Oyster Commission Rate',
                    'Price currency',
                    'Gross sold value',
                    'Returned\/refunded value',
                    'Net value before fees',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned\/refunded quantity',
                    'Total net sold quantity',
                    'Total Gross Sold Value',
                    'Total returned\/refunded value',
                    'Total net sold value before fees',
                    'Total proceeds due to publisher',
                    '^$'
                ],
            ],
        },

        # 24 Symbols, version 1
        {
            service => BookPub::Tracker::Service::TWENTY_FOUR_SYMBOLS,
            version => 1,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'id',    'Title',      'Author\/s',  'isbn',   'Publisher', 'Library',
                    'Sales', 'List Price', 'Discount %', 'Income', 'Currency',  '^$'
                ],
            ],
        },

        # 24 Symbols, version 2
        {
            service          => BookPub::Tracker::Service::TWENTY_FOUR_SYMBOLS,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'ID',        'Title',          'Author\/s',          'ISBN',
                    'Publisher', 'Library',        'Reading Territory',  'VAT',
                    'Currency',  'Net Unit Price', 'Discount %',         'Readings',
                    'Income',    'Exchange Rate',  'Invoicing Currency', 'Income to invoice',
                    '^$'
                ],
            ],
        },

        # Inkling, version 1
        {
            service => BookPub::Tracker::Service::INKLING,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'Fiscal Month',
                    'Period Start',
                    'Period End',
                    'Channel',
                    'Inkling Title ID',
                    'Inkling ISBN10',
                    'Inkling ISBN13',
                    'Print ISBN10',
                    'Print ISBN13',
                    'Publisher',
                    'Author',
                    'Title',
                    'Edition',
                    'Product Type',
                    'Chapter Number',
                    'Institution',
                    'Billing State',
                    'Billing Country',
                    'Units',
                    'Gross Receipts \(\w{3}\)',
                    'VAT \(\w{3}\)',
                    'Post-VAT Gross Receipts \(\w{3}\)',
                    'Apple Share \(\w{3}\)',
                    'Credit Card Fees \(\w{3}\)',
                    'Net Receipts \(\w{3}\)',
                    'Inkling Royalty \(\w{3}\)',
                    'Publisher Net Revenue \(\w{3}\)',
                    '^$'
                ],
            ],
        },

        # Booktopia, version 1
        {
            service => BookPub::Tracker::Service::BOOKTOPIA,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'BOOKTOPIA REF',
                    'ISBN', 'DISPLAY NAME|NAME',
                    'AUTHOR', 'QTY', 'SALE PRICE', 'AGENT COMM %', 'PUB SHARE',
                    'PUB SHARE - Ex GST',
                    'SALE TERRITORY|SALE TERR',
                    'CURRENCY|CURR', 'COMPANY[ _]NAME', '^$'
                ],
            ],
        },

        # Booktopia, version 2
        {
            service => BookPub::Tracker::Service::BOOKTOPIA,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'BOOKTOPIA REF',
                    'ISBN', 'DISPLAY NAME|NAME',
                    'AUTHOR', 'QTY', 'SALE PRICE', 'GST on SALE PRICE',
                    'AGENT COMM %', 'PUB SHARE', 'SALE TERRITORY|SALE TERR',
                    'CURRENCY|CURR', 'COMPANY[ _]NAME', '^$'
                ],
            ],
        },

        # Booktopia, version 3
        {
            service => BookPub::Tracker::Service::BOOKTOPIA,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'BOOKTOPIA REF*',
                    'ISBN', 'DISPLAY NAME|NAME',
                    'AUTHOR', 'QTY', 'SALE PRICE', 'AGENT COMM %', 'PUB SHARE',
                    'PUB SHARE EX GST|PUB SHARE \(EX GST\)',
                    'SALE TERRITORY|SALE TERR',
                    'CURRENCY|CURR', 'COMPANY[ _]NAME', '^$'
                ],
            ],
        },

        # Booktopia version 4 (FBoD16623)
        {
            service => BookPub::Tracker::Service::BOOKTOPIA,
            version => 4,
            lines   => [ [
                    'BOOKTOPIA REF',
                    'ISBN',
                    'NAME',
                    'AUTHOR',
                    'QTY',
                    'SALE PRICE',
                    'SALE PRICE EX GST',
                    'COST PRICE',
                    'COST PRICE EX GST',
                    'SALE TERR',
                    'CURR',
                    'COMPANY NAME',
                    '^$'
                ]
            ],
        },

        # Booktopia version 5 (FBoD17819)
        {
            service => BookPub::Tracker::Service::BOOKTOPIA,
            version => 5,
            lines   => [ [
                    'BOOKTOPIA REF',
                    'ISBN',
                    'NAME',
                    'AUTHOR',
                    'QTY',
                    'SALE PRICE',
                    'SALE PRICE',
                    'AGENT COMM %',
                    'PUB SHARE',
                    'PUB SHARE',
                    'SALE TERR',
                    'CURR',
                    'COMPANY NAME',
                    '^$'
                ]
            ],
        },

        # Peter Pal, version 1
        {
            service => BookPub::Tracker::Service::PETER_PAL,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'Licensor',
                    'EAN',
                    'Title Text',
                    'Creator',
                    'Imprint',
                    'Publisher',
                    'Order Reference',
                    'Acquisition Date',
                    'Distribution Right Type',
                    'Licence ID',
                    'Licence Activation Date',
                    'Quantity',
                    'Territory',
                    'Account Code',
                    'Account Name',
                    'List Price Type',
                    'List Price Currency',
                    'List Price Amount',
                    'Wholesale Discount',
                    'Wholesale Unit Price',
                    'Wholesale Amount',
                    '^$'
                ],
            ],
        },

        # Peter Pal, version 2
        {
            service => BookPub::Tracker::Service::PETER_PAL,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'Report ID#',
                    'Report date or date and time',
                    '(Message function|Main product.*ID#)',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date.*or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product.*ID# type',
                    'Main product.*ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale.*disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value.*before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees.*of all types',
                    'Total proceeds.*due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    '^$'
                ],
            ],
        },

        # BitLit Media (BISG v5), version 1
        {
            service => BookPub::Tracker::Service::BITLIT_MEDIA,
            version => 1,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 2,
                [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Reporting price type',
                    'Reporting currency',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product',
                    'Main product',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees',
                    'Total proceeds',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price Type',
                    '^$'
                ],
            ],
        },

        # Readwell, version 1
        {
            service => BookPub::Tracker::Service::READWELL,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'publisher',                         'line_item_id',
                    'Ship_to_country',                   'hip_to_state',
                    'Ship_to_county',                    'Ship_to_city',
                    'Ship_to_district',                  'Ship_to_zip',
                    'transaction_date',                  'main_product_type_id',
                    'main_product_id',                   'alternative_product_id',
                    'product_title',                     'product_author',
                    'quantity_sold',                     'unit_selling_price',
                    'currency',                          'sales_value',
                    'us_state_sales_tax_tax_rate',       'us_state_sales_tax_taxable_amount',
                    'us_state_sales_tax_amount',         'us_county_sales_tax_rate',
                    'us_county_sales_tax_taxale_amount', 'us_county_sales_tax_tax_amount',
                    'us_city_sales_tax_rate',            'us_city_sales_tax_taxable_amount',
                    'us_city_sales_tax_amount',          'total_tax_collected',
                    'currency_conversion_rate',          'list_price',
                    '^$'
                ],
            ],
        },

        # Readwell, version 2 (BISG v4)
        {
            service => BookPub::Tracker::Service::READWELL,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'report_id',                         'report_date',
                    'message_function',                  'report_period_from',
                    'report_period_to',                  'not_used',
                    'reporting_price_type',              'reporting_currency',
                    'class_of_trade',                    'sales_territory',
                    'line_item_id',                      'sub_agent_id',
                    'sub_agent_name',                    'transaction_date',
                    'agent_transaction_id',              'line_item_reference_type',
                    'line_item_reference_date',          'main_product_id',
                    'alternative_product_id',            'product_title',
                    'product_authors',                   'product_description',
                    'publisher_id',                      'publisher_name',
                    'imprint_name',                      'product_format',
                    'device_type',                       'gross_sold_quantity',
                    'returned_quantity',                 'net_sold_quantity',
                    'non_sale_quantity',                 'non_sale_disposal_type',
                    'class_of_trade2',                   'sales_territory3',
                    'unit_price',                        'price_type',
                    'price_currency',                    'commission',
                    'gross_sold_value',                  'returned_value',
                    'net_value',                         'fee_type_1',
                    'fee_amount_1',                      'fee_source_1',
                    'fee_type_2',                        'fee_amount_2',
                    'fee_source_2',                      'fee_type_3',
                    'fee_amount_3',                      'fee_source_3',
                    'proceeds_of_sale_due_to_publisher', 'total_number_of_line_items',
                    'total_gross_sold_quantity',         'total_returned_quantity',
                    'total_net_sold_quantity',           'total_non_sale_quantity',
                    'total_gross_sold_value',            'total_returned_value',
                    'total_net_sold_value_before_fees',  'total_fees',
                    'total_proceeds_due_to_publisher',   'reporting_agent_id',
                    'reporting_agent_name',              'currency_conversion_rate',
                    'list_price',                        'price_type4',
                    '^$'
                ],
            ],
        },

        # Readwell, version 3
        {
            service => BookPub::Tracker::Service::READWELL,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'publisher',                         'report_id',
                    'report_date',                       'message_function',
                    'report_period_from',                'report_period_to',
                    'not_used',                          'reporting_price_type',
                    'reporting_currency',                'class_of_trade',
                    'sales_territory',                   'line_item_id',
                    'sub_agent_id',                      'sub_agent_name',
                    'transaction_date',                  'agent_transaction_id',
                    'line_item_reference_type',          'line_item_reference_date',
                    'main_product_id',                   'alternative_product_id',
                    'product_title',                     'product_authors',
                    'product_description',               'publisher_id',
                    'publisher_name',                    'imprint_name',
                    'product_format',                    'device_type',
                    'gross_sold_quantity',               'returned_quantity',
                    'net_sold_quantity',                 'non_sale_disposal_type',
                    'class_of_trade2',                   'sales_territory3',
                    'unit_price',                        'price_type',
                    'price_currency',                    'commission',
                    'gross_sold_value',                  'returned_value',
                    'net_value',                         'fee_type_1',
                    'fee_amount_1',                      'fee_source_1',
                    'fee_type_2',                        'fee_amount_2',
                    'fee_source_2',                      'fee_type_3',
                    'fee_amount_3',                      'fee_source_3',
                    'proceeds_of_sale_due_to_publisher', 'total_number_of_line_items',
                    'total_gross_sold_quantity',         'total_returned_quantity',
                    'total_net_sold_quantity',           'total_non_sale_quantity',
                    'total_gross_sold_value',            'total_returned_value',
                    'total_net_sold_value_before_fees',  'total_fees',
                    'total_proceeds_due_to_publisher',   'reporting_agent_id',
                    'reporting_agent_name',              'currency_conversion_rate',
                    'list_price',                        'price_type4',
                    '^$'
                ],
            ],
        },

        # Readwell, version 4
        {
            service          => BookPub::Tracker::Service::READWELL,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'report_id',                         'report_date',
                    'message_function',                  'report_period_from',
                    'report_period_to',                  'not_used',
                    'reporting_price_type',              'reporting_currency',
                    'class_of_trade',                    'sales_territory',
                    'line_item_id',                      'sub_agent_id',
                    'sub_agent_name',                    'Transaction_date',
                    'agent_transaction_id',              'line_item_reference_type',
                    'line_item_reference_date',          'main_product_id',
                    'alternative_product_id',            'product_title',
                    'product_author',                    'product_description',
                    'publisher_id',                      'publisher_name',
                    'imprint_name',                      'product_format',
                    'device_type',                       'gross_sold_quantity',
                    'returned_quantity',                 'net_sold_quantity',
                    'non_sale_quantity',                 'non_sales_disposal_type',
                    'class_of_trade2',                   'sales_territory2',
                    'unit_price',                        'price_type',
                    'price_currency',                    'commission',
                    'gross_sold_value',                  'returned_value',
                    'net_value',                         'fee_type_1',
                    'fee_amount_1',                      'fee_source_1',
                    'fee_type_2',                        'fee_amount_2',
                    'fee_source_2',                      'fee_type_3',
                    'fee_amount_3',                      'fee_source_3',
                    'proceeds_of_sale_due_to_publisher', 'total_number_of_line_items',
                    'total_gross_sold_quantity',         'total_returned_quantity',
                    'total_net_sold_quantity',           'total_non_sale_quantity',
                    'total_gross_sold_value',            'total_returned_value',
                    'total_net_sold_value_before_fees',  'total_fees',
                    'total_proceeds_due_to_publisher',   'reporting_agent_name',
                    'currency_conversion_rate',          'list_price',
                    'price_type2',                       '^$'
                ],
            ],
        },

        # SharedBook, version 1 (became XanEdu in October 2016, at least in RoyaltyShareLand)
        {
            service => BookPub::Tracker::Service::XANEDU,
            version => 1,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 5,
                [
                    'Details|Order Details|Publication Title', 'Item Code|Filename',
                    'Royalty Price|Royalty',                   'Quantity',
                    'Total|Royalty',                           '^$'
                ],
            ],
        },

        # Epic!, version 1
        {
            service => BookPub::Tracker::Service::EPIC,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'Billing Month',
                    'ISBN13',
                    'Book Title|Title',
                    'Author',
                    'Subscription Orders',
                    'DLP',
                    'Epic! Cost Per View',
                    'Amount Owed',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # Blloon, Version 1 (FB11029)
        {
            service          => BookPub::Tracker::Service::BLLOON,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Exceeded 10%',
                    'Transaction ID',
                    'Date',
                    'Time',
                    'ISBN',
                    'Author',
                    'Title',
                    'No of pages',
                    'Product Type',
                    'User',
                    'ONIX Currency',
                    'ONIX Price in ONIX currency',
                    'Exchange Rate ONIX Currency to EUR',
                    'ONIX Price in EUR',
                    'Net Publisher Share per Title in ONIX Currency',
                    'Net Publisher Share per Title in EUR',
                    'Purchase currency',
                    'Exchange Rate Purchase',
                    'Net Publisher Share per Title in \(EUR\)',
                    'Seller Country',
                    'Territory',
                    'Operation Reference',
                    'Affiliate',
                    'Client Marker',
                    'Publisher',
                    'Content Provider',
                    'DRM type',
                    'DRM Fee in EUR',
                    'Fulfillment Cost in EUR',
                    'Discount in %',
                    'ONIX Price type',
                    'Refunded by',
                    '^$'
                ],
            ],
        },

        # Bookmate, Version 1 (FB10108)
        {
            service          => BookPub::Tracker::Service::BOOKMATE,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'ISBN',         'Title',    'Authors',            'User id',
                    'Country Code', 'Date',     'Reading Percentage', 'DLP Price',
                    'DLP Currency', 'Discount', 'Local Price',        'Local Currency',
                    'Revenue',      'Currency', '^$'
                ],
            ],
        },

        # Adams Book Company, Version 1 (FB11331)
        {
            service => BookPub::Tracker::Service::ADAMS_BOOK_COMPANY,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'City',
                    'County',
                    'State',
                    'Zip',
                    'Invoice Number',
                    'Invoice Date',
                    'ISBN',
                    'Qty',
                    'Consumer Price Supplied by Publisher',
                    'Purchase Price Paid by Consumer',
                    'Owed to Macmillan',
                    'Shipping',
                    'Gross Amount',
                    'Gross Exempt Amount',
                    'Gross Taxable Amount',
                    'District Tax',
                    'City Tax',
                    'County Tax',
                    'Transit Tax',
                    'Total Tax',
                    '^$'
                ],
            ],
        },

        # Adams Book Company, Version 2 (FB11410)
        {
            service => BookPub::Tracker::Service::ADAMS_BOOK_COMPANY,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'City',
                    'County',
                    'State',
                    'Zip',
                    'Invoice Number',
                    'Invoice Date',
                    'ISBN',
                    'Qty',
                    'Consumer Price Supplied by Publisher',
                    'Due to Macmillan',
                    'Shipping',
                    'Gross Amount',
                    'Gross Exempt Amount',
                    'Gross Taxable Amount',
                    'State Tax',
                    'District Tax',
                    'City Tax',
                    'County Tax',
                    'Transit Tax',
                    'Total Tax',
                    '^$'
                ],
            ],
        },

        # Adams Book Company, Version 3 (FB11869)
        {
            service => BookPub::Tracker::Service::ADAMS_BOOK_COMPANY,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'City',
                    'County',
                    'State',
                    'Zip',
                    'Invoice Number',
                    'Invoice Date',
                    'ISBN',
                    'Quantity Purchased',
                    'Consumer Price Supplied by Publisher',
                    'Purchase Price Paid by Consumer',
                    'Due to Macmillan',
                    'Shipping',
                    'Gross Amount',
                    'Gross Exempt Amount',
                    'Gross Taxable Amount',
                    'Transit Tax',
                    'State Tax',
                    'County and\/or.*City Tax',
                    'Total Tax',
                    '^$'
                ],
            ],
        },

        # Adams Book Company, Version 4 (FB15266)
        {
            service          => BookPub::Tracker::Service::ADAMS_BOOK_COMPANY,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'ISBN #',                  'Title',
                    'Author',                  'Order #',
                    'Order Date',              'Unit Price',
                    'Qty',                     'School',
                    'City',                    'County',
                    'State',                   'Zip',
                    'Gross Sold Value \(\$\)', 'Commission',
                    'AOL Share',               'Proceeds of Sale Due to Publisher',
                    'SalesTax',                'Total Due Publisher',
                    '^$'
                ],
            ],
        },

        # Storytel, Version 1 (FB11925)
        {
            service => BookPub::Tracker::Service::STORYTEL,
            version => 1,
            sheet   => 'any',
            lines => [ ( [undef] ) x 5, [ 'Author\(s\)', 'Audio Book Title', 'ISBN', 'Nr of listened books', 'Factor', 'Royalty', '^$' ], ],
        },

        # Storytel, Version 2 (FB12853)
        {
            service => BookPub::Tracker::Service::STORYTEL,
            version => 2,
            sheet   => 'any',
            lines   => [
                ( [undef] ) x 3,
                [
                    'Author\(s\)',          'Audio Book Title', 'ISBN',    'Royalty model',
                    'Nr of listened books', 'Factor',           'Royalty', 'Publisher',
                    '^$'
                ],
            ],
        },

        # Storytel, Version 3 (RSD-4444)
        {
            service => BookPub::Tracker::Service::STORYTEL,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'Author\(s\)',
                    'Audio Book Title',
                    'ISBN',
                    'Country',
                    'Royalty model',
                    'Quantity/no. of units',
                    'Net receipts per hour \(local currency\)',
                    'ECB exchange rate',
                    'Net receipts per hour \(\w{3}\)',
                    'Book length \(in hours\)',
                    'Price per Unit \(\w{3}\)',
                    'Renumeration \(\w{3}\)',
                    'Publisher',
                    'Imprint',
                    '^$'
                ],
            ],
        },

        # Storytel, Version 3 (RSD-7172)
        {
            service => BookPub::Tracker::Service::STORYTEL,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'Author\(s\)',
                    'Audio Book Title',
                    'ISBN',
                    'Country \/ Pool',
                    'Price model',
                    'Quantity/no. of units',
                    'Net receipts per hour \(local currency\)',
                    'ECB exchange rate',
                    'Net receipts per hour \(\w{3}\)',
                    'Book length \(in hours\)',
                    'Price per Unit \(\w{3}\)',
                    'Remuneration \(\w{3}\)',
                    'VAT \(%\)',
                    'Publisher',
                    'Imprint',
                    'Consumption dates',
                    '^$'
                ],
            ],
        },

        # Storytel, Version 5 (RSD-8506)
        {
            service          => BookPub::Tracker::Service::STORYTEL,
            version          => 5,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Author\(s\)',
                    'Audio Book Title',
                    'ISBN',
                    'Pool',
                    'Country',
                    'Price model',
                    'Quantity\/no\. of units',
                    'Net receipts per hour \(local currency\)',
                    'ECB exchange rate',
                    'Net receipts per hour \(\w{3}\)',
                    'Book length \(in hours\)',
                    'Price per Unit \(\w{3}\)',
                    'Remuneration \(\w{3}\)',
                    'VAT \(%\)',
                    'Publisher',
                    'Imprint',
                    'Consumption dates',
                    '^$'
                ],
            ],
        },

        # Gale, Version 1 (FB11501)
        {
            service          => BookPub::Tracker::Service::GALE,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    undef, 'PROD\. NO', 'PROD\. DESCRIPTION',
                    'QTY', 'SALES', undef, 'METHOD', 'RATE', undef, 'EARNINGS', 'ADVANCE', undef, 'BALANCE', undef, 'RETURN', undef, undef,
                    undef, 'PAYABLE', 'FORWARD', 'RETURNS', '^$'
                ],
            ],
        },

        # Gale, Version 2 (RSD-6471)
        {
            service          => BookPub::Tracker::Service::GALE,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Start Date',
                    'End Date',
                    'Title',
                    'Product ID/ISBN',
                    'Format',
                    'Net Revenue',
                    'Net Units',
                    'Royalty Earnings',
                    '^$'
                ] ]
        },

        # Credo, Version 1 (FB11484)
        {
            service          => BookPub::Tracker::Service::CREDO,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines =>
              [ [ 'Title Name', 'Credo ID', 'Publisher ID', 'Units Sold', 'Total Revenue', 'Royalty Rate', 'Royalty Earned', '^$' ], ],
        },
        # Credo, Version 1 (FB11484)
        {
            service          => BookPub::Tracker::Service::CREDO,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines =>
              [ [
                    'Vol ID',
                    'Title',
                    'Pub ISBN/Code',
                    '[0-9-]{6}',
                    '[0-9-]{6}',
                    '[0-9-]{6}',
                    'Total',
                    '[0-9-]{6}',
                    '[0-9-]{6}',
                    '[0-9-]{6}',
                    'Total'
              ] ],
        },

        # Shaw Digital, Version 1 (FB11472)
        {
            service          => BookPub::Tracker::Service::SHAW_DIGITAL,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Territory', 'ISBN', 'Title', 'Author', 'Publisher', 'Imprint', 'Publisher DLP',
                    'Units Sold', 'Units Refunded',
                    'Net Units', 'Discount',
                    'Amount Due Local Currency',
                    'Amount Due .*', '^$'
                ],
            ],
        },

        # Shaw Digital, Version 2 (FB13147)
        {
            service          => BookPub::Tracker::Service::SHAW_DIGITAL,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Territory', 'ISBN', 'Title', 'Author', 'Publisher', 'Imprint', 'DLP GBP £', 'DLP USD \$', 'DLP aud \$', 'DLP INR',
                    'Units Sold', 'Units Refunded',
                    'Net Units', 'Discount',
                    'Amount Due Local Currency',
                    'Amount Due .*', '^$'
                ],
            ],
        },

        # Unizin, Version 1 (FB12511)
        {
            service => BookPub::Tracker::Service::UNIZIN,
            version => 1,
            lines   => [
                [ 'Date', 'Book Title', 'Book Price', 'Page Count', 'Royalty Amount', 'Textbook ISBN', 'Publisher', 'Institution', '^$' ],
            ],
        },

        # Unizin, Version 2 (FB12311)
        {
            service          => BookPub::Tracker::Service::UNIZIN,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Term', 'Subject', 'Catalog Number', 'Section',    'Enrollment',     'Publisher',
                    'ISBN', 'Title',   'List Price',     'Inst Price', 'Extended Price', '^$'
                ],
            ],
        },

        # Unizin, Version 3 (FB14358)
        {
            service          => BookPub::Tracker::Service::UNIZIN,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Transaction Date', 'Course', 'Combo',     'Instructor', 'Content ENRL', 'ISBN',
                    'Content Title',    'Author', 'Publisher', 'base price', 'bc price',     'Extended Price',
                    '^$'
                ],
            ],
        },

        # Unizin, Version 4 (FB14359)
        {
            service          => BookPub::Tracker::Service::UNIZIN,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Transaction Date', 'Course', 'Section',   'Term',       'Content ENRL', 'ISBN',
                    'Content Title',    'Author', 'Publisher', 'base price', 'bc price',     'Extended Price',
                    '^$'
                ],
            ],
        },

        # Unizin, Version 5 (FB14355)
        {
            service          => BookPub::Tracker::Service::UNIZIN,
            version          => 5,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Transaction Date', 'Term',               'Subject',    'Catalog Number',
                    'Section',          'Current Enrollment', 'Publisher',  'ISBN',
                    'Title',            'List Price',         'Inst Price', 'Extended Price',
                    '^$'
                ],
            ],
        },

        # Unizin version 6 (FBoD16745)
        {
            service => BookPub::Tracker::Service::UNIZIN,
            version => 6,
            lines   => [ [
                    'Course',    'Descr',      'Content ENRL', 'ISBN',           'Content Title',    'Author',
                    'Publisher', 'Base price', 'BC Price',     'Extended Price', 'Transaction Date', 'Term',
                    '^$'
                ],
            ],
        },

        # Unizin version 7 (FBoD19342)
        {
            service          => BookPub::Tracker::Service::UNIZIN,
            version          => 7,
            match_on_any_row => 1,
            lines            => [ [
                    'Transaction Date', 'Combo',         'Section', 'Term',      'Content ENRL', 'ISBN',
                    'ISBN2',            'Content Title', 'Author',  'Publisher', 'List Price',   'Berkeley Price',
                    'Extended Price',   '^$'
                ],
            ],
        },

        # Unizin version 8 (FBoD19342)
        {
            service          => BookPub::Tracker::Service::UNIZIN,
            version          => 8,
            match_on_any_row => 1,
            lines            => [ [
                    'Transaction',   'Combo',  'Section',   'Term',       'Content ENRL',   'ISBN',
                    'Content Title', 'Author', 'Publisher', 'List Price', 'Berkeley Price', 'Extended Price',
                    '^$'
                ],
            ],
        },

        # Unizin version 9 (RSD-5818)
        {
            service          => BookPub::Tracker::Service::UNIZIN,
            version          => 9,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Campus',
                    'Transaction date',
                    'Term',
                    'Dept',
                    'Course',
                    'Section',
                    'ENRL',
                    'Opt\-outs',
                    'Waivers',
                    'Billable ENRL',
                    'Title',
                    'Author',
                    'ISBN',
                    'Billable ISBN',
                    'DLT\/ETEXT',
                    'List Price',
                    'Unizin Price',
                    'Total',
                    '^$'
                ],
            ],
        },

        # Unizin version 10 (RSD-7660)
        {
            service          => BookPub::Tracker::Service::UNIZIN,
            version          => 10,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Transaction date',
                    'Year',
                    'Campus',
                    'Term',
                    'Dept',
                    'Course',
                    'Section',
                    'ENRL',
                    'Opt\-outs',
                    'Waivers',
                    'Billable ENRL',
                    'DLT\/TEXT',
                    'Title',
                    'ISBN',
                    'Billable ISBN',
                    'List Price',
                    'Unizin Price',
                    'Total',
                    '^$'
                ],
            ],
        },

        # Amigos, Version 1 (FB12519)
        {
            service          => BookPub::Tracker::Service::AMIGOS,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Amigos Title ID', 'ISBN',         'Title', 'License',        'Amigos Order ID', 'Order Date',
                    'Retail',          'Amigos Price', 'Qty',   'Extended Price', '^$'
                ],
            ],
        },

        # Amigos version 2 (FBoD16350)
        {
            service => BookPub::Tracker::Service::AMIGOS,
            version => 2,
            lines   => [
                [],
                [],
                [],
                [],
                [],
                [
                    'Amigos Title ID', 'ISBN',         'Title', 'License',        'Amigos Order ID', 'Order Date',
                    'Retail',          'Amigos Price', 'Qty',   'Extended Price', 'Library Name',    'Address 1',
                    'Address 2',       'City',         'State', 'Zip',            'Phone',           'Lib Type',
                    '^$'
                ],
            ],
        },

        # WebAssign, Version 2, Version 1 was an RSFormat file (FB13981)
        {
            service          => BookPub::Tracker::Service::WEBASSIGN,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [ 'School', 'Textbook', 'Qty', 'Price', 'Total', '^$' ], ],
        },

        # WebAssign, Version 3 (FB21510)
        {
            service          => BookPub::Tracker::Service::WEBASSIGN,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    '', 'SUBJECT', 'MARKET DESCRIPTION',
                    'MEDIA', 'SCHOOL', 'SHORT TITLE NAME',
                    'TITLE', 'EDITION', 'TYPE', 'PRODUCT TYPE', 'AVG PPU',
                    'COMPONENT UNITS SOLD',
                    'BNDL QTY SOLD',
                    'ROYALTY', '^$'
                ],
            ],
        },

        # WebAssign, Version 4 (RSD-2001)
        {
            service          => BookPub::Tracker::Service::WEBASSIGN,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    '',              'SUBJECT',                    'MARKET DESCRIPTION',  'MEDIA',
                    'School',        'City',                       '\s*State\s*',         '\s*SHORT TITLE NAME\s*',
                    'TITLE',         '\s*EDITION\s*',              '\s*TYPE\s*',          '\s*PRODUCT TYPE\s*',
                    '\s*AVG PPU\s*', '\s*COMPONENT UNITS SOLD\s*', '\s*BNDL QTY SOLD\s*', '\s*ROYALTY\'?',
                    '^$'
                ],
            ],
        },

        # WebAssign, Version 5
        {
            service          => BookPub::Tracker::Service::WEBASSIGN,
            version          => 5,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    undef,
                    'SUBJECT',
                    'MARKET DESCRIPTION',
                    'MEDIA',
                    'School',
                    'City',
                    'State',
                    'SHORT TITLE NAME',
                    'TITLE',
                    'EDITION',
                    'TYPE',
                    'PRODUCT TYPE',
                    'AVG PPU',
                    'COMPONENT UNITS SOLD',
                    'ROYALTY',
                    '^$'
                ],
            ],
        },

        # Trajectory, Version 1 (FB12698)
        {
            service          => BookPub::Tracker::Service::TRAJECTORY,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Main product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Metadata DIGITAL EXPORT Price \(\w{3}\)',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value  \(\w{3}\)',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Proceeds of sale due to publisher',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher \(\w{3}\)',
                    'Alternative product ID#',
                    '^$'
                ],
            ],
        },

        # Trajectory, Version 2 (RSD-4602)
        {
            service          => BookPub::Tracker::Service::TRAJECTORY,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    '发票日期 \(Invoice Date\)',
                    '电子书ISBN \(Digital ISBN\)',
                    '书名 \(Title\)',
                    '作者 \(Author\)',
                    '出版方 \(Imprint\)',
                    '订购总量 \(Units Purchased\)',
                    '含税市场价\(List Price With Tax\)',
                    '含税市场价格货币\(List Price With Tax Currency\)',
                    '出版方定价 \(Publisher Price\)',
                    '电子书定价币种 \(Publisher Price Currency\)',
                    '折扣率 \(Discount Percentage\)',
                    '付款总额 \(Payment Amount\)',
                    '币种 \(Payment Amount Currency\)',
                    '^$'
                ],
            ],
        },

        # Hummingbird Digital, Version 1, FB13759
        {
            service          => BookPub::Tracker::Service::HUMMINGBIRD_DIGITAL,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date.*or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product.*ID# type',
                    'Main product.*ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale.*disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value.*before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees.*of all types',
                    'Total proceeds.*due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    'Total net quantity sold year to date',
                    'Total net HDM commission this month',
                    'Total net HDM commissions year to date',
                    'Total net proceeds to vendor year to date',
                    '^$',
                ],
            ],
        },

        # Hummingbird Digital, Version 2, FB14068
        {
            service          => BookPub::Tracker::Service::HUMMINGBIRD_DIGITAL,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'Reporting price type',
                    'Reporting currency',
                    'NOT USED',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date.*or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product.*ID# type',
                    'Main product.*ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale.*disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value.*before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees.*of all types',
                    'Total proceeds.*due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    'Total net quantity sold year to date',
                    'Total net HDM commission this month',
                    'Total net HDM commissions year to date',
                    'Total net proceeds to vendor year to date',
                    '^$',
                ],
            ],
        },

        # Hummingbird Digital, Version 2, FB20677 (same as above minus the last 4 rows (which we don't use anyway)
        {
            service          => BookPub::Tracker::Service::HUMMINGBIRD_DIGITAL,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'Reporting price type',
                    'Reporting currency',
                    'NOT USED',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date.*or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product.*ID# type',
                    'Main product.*ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale.*disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value.*before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees.*of all types',
                    'Total proceeds.*due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    '^$',
                ],
            ],
        },

        # Hummingbird Digital, Version 2 (RSD-2805 with a shorter header)
        {
            service          => BookPub::Tracker::Service::HUMMINGBIRD_DIGITAL,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'Reporting price type',
                    'Reporting currency',
                    'NOT USED',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date\s+or date and time',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date-time',
                    'Main product\s+ID# type',
                    'Main product\s+ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale\s+disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value\s+before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees\s+of all types',
                    'Total proceeds\s+due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    '^$'
                ],
            ],
        },

        # Hummingbird Digital, Version 2 (RSD-6888)
        {
            service          => BookPub::Tracker::Service::HUMMINGBIRD_DIGITAL,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Report ID#',
                'Report date or date and time',
                'Message function',
                'Sales report type',
                'Report period from',
                'Report period to',
                'Reporting price type',
                'Reporting currency',
                'NOT USED',
                'Class of trade \/ sale',
                'Sales territory',
                'Line item ID#',
                'Sub\-agent ID#',
                'Sub\-agent name',
                'Transaction date  or date and time',
                'Agent\'s transaction ID#',
                'Line item reference type',
                'Line item reference ID#',
                'Line item reference date\-time',
                'Main product  ID# type',
                'Main product  ID#',
                'Alternative product ID# type',
                'Alternative product ID#',
                'Product title',
                'Product author\(s\)',
                'Product description',
                'Publisher ID#',
                'Publisher Name',
                'Imprint Name',
                'Product format',
                'Device type',
                'Gross sold quantity',
                'Returned \/ refunded quantity',
                'Net sold quantity',
                'Non-sale quantity',
                'Non-sale  disposal type',
                'Class of trade \/ sale',
                'Sales territory',
                'List price',
                'Price type',
                'Price currency',
                'Commission or discount percentage',
                'Gross sold value',
                'Returned \/ refunded value',
                'Net value  before fees',
                'Fee type 1',
                'Fee amount 1',
                'Fee source 1',
                'Fee type 2',
                'Fee amount 2',
                'Fee source 2',
                'Fee type 3',
                'Fee amount 3',
                'Fee source 3',
                'Proceeds of sale due to publisher',
                'Total number of Line items',
                'Total gross sold quantity',
                'Total returned \/ refunded quantity',
                'Total net sold quantity',
                'Total non\-sale quantity',
                'Total gross sold value',
                'Total returned \/ refunded value',
                'Total net sold value before fees',
                'Total fees  of all types',
                'Total proceeds  due to publisher',
                'Reporting agent #ID',
                'Reporting agent name',
                'Currency conversion rate',
                '^$'
                ],
            ],
        },

        # Hummingbird Digital, Version 3 (RSD-6123)
        # Header update (RSD-6850)
        {
            service          => BookPub::Tracker::Service::HUMMINGBIRD_DIGITAL,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Publisher',
                    'Report Period From',
                    'Report Period To',
                    '(Sub Agent|Merchant)',
                    'ISBN',
                    'Title',
                    'Product Author\(s\)',
                    '(Qty )?Sold',
                    'Currency',
                    'Retail( Price)?',
                    '(Commission or )?Discount( %)?',
                    'HDM to Pay Publisher',
                    'Total Proceeds Due to Publisher',
                    '^$'
                ],
            ],
        },

        # Hummingbird Digital, Version 4
        {
            service          => BookPub::Tracker::Service::HUMMINGBIRD_DIGITAL,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Report ID#',
                'Report date or date and time',
                'Message function',
                'Sales report type',
                'Reporting price type',
                'Reporting currency',
                'Report period from',
                'Report period to',
                'NOT USED',
                'Class of trade \/ sale',
                'Sales territory',
                'Line item ID#',
                'Sub\-agent ID#',
                'Sub\-agent name',
                'Transaction date  or date and time',
                'Agent\'s transaction ID#',
                'Line item reference type',
                'Line item reference ID#',
                'Line item reference date\-time',
                'Main product  ID# type',
                'Main product  ID#',
                'Alternative product ID# type',
                'Alternative product ID#',
                'Product title',
                'Product author\(s\)',
                'Product description',
                'Publisher ID#',
                'Publisher Name',
                'Imprint Name',
                'Product format',
                'Device type',
                'Gross sold quantity',
                'Returned \/ refunded quantity',
                'Net sold quantity',
                'Non\-sale quantity',
                'Non\-sale  disposal type',
                'Class of trade \/ sale',
                'Sales territory',
                'Unit price',
                'Price type',
                'Price currency',
                'Commission or discount percentage',
                'Gross sold value',
                'Returned \/ refunded value',
                'Net value  before fees',
                'Fee type 1',
                'Fee amount 1',
                'Fee source 1',
                'Fee type 2',
                'Fee amount 2',
                'Fee source 2',
                'Fee type 3',
                'Fee amount 3',
                'Fee source 3',
                'Proceeds of sale due to publisher',
                'Total number of Line items',
                'Total gross sold quantity',
                'Total returned \/ refunded quantity',
                'Total net sold quantity',
                'Total non-sale quantity',
                'Total gross sold value',
                'Total returned \/ refunded value',
                'Total net sold value before fees',
                'Total fees  of all types',
                'Total proceeds  due to publisher',
                'Reporting agent #ID',
                'Reporting agent name',
                'Currency conversion rate',
                '^$'
                ],
            ],
        },

        # Grand Canyon Univ, Version 1 (FB14515)
        {
            service          => BookPub::Tracker::Service::GRAND_CANYON_UNIV,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Course Code',
                    'College',
                    'Course Title',
                    'Textbook Title',
                    'Author',
                    'Year',
                    'Edition',
                    'Publisher',
                    'Print Text ISBN #',
                    'Print List Price',
                    'eBook Cost',
                    '.* Enrollment',
                    '.* Cost Per Course',
                    '^$'
                ],
            ],
        },

        # Grand Canyon Univ, Version 2 (FB21977)
        {
            service          => BookPub::Tracker::Service::GRAND_CANYON_UNIV,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Course Code',
                    'College',
                    'Course Title',
                    'Textbook Title',
                    'Author',
                    'Year',
                    'Edition',
                    'Publisher',
                    'Imprint',
                    'Print Text ISBN #',
                    'Digital ISBN',
                    'Print List Price',
                    'Digital List Price',
                    'GCU Cost After Discount',
                    '.* Usage',
                    '.* Cost',
                    'eBook Notes',
                    '^$'
                ],
            ],
        },

        # Grand Canyon Univ, Version 3 (RSD-3898)
        {
            service          => BookPub::Tracker::Service::GRAND_CANYON_UNIV,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Course Code',
                    'College',
                    'Course Title',
                    'Textbook Title',
                    'Author',
                    'Year',
                    'Edition',
                    'Publisher',
                    'Imprint',
                    'Print Text ISBN #',
                    'Digital ISBN',
                    'Custom eBook ISBN #',
                    'Print List Price Before Discount',
                    'Digital List Price Before Discount',
                    'GCU Cost( After Discount)?',
                    '.* Usage',
                    '.* Cost',
                    '^$'
                ],
            ],
        },

        # Grand Canyon Univ, Version 4 (RSD-10433)
        {
            service          => BookPub::Tracker::Service::GRAND_CANYON_UNIV,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Course Code',
                    'College',
                    'Course Title',
                    'Textbook Title',
                    'Author',
                    'Year',
                    'Edition',
                    'Publisher',
                    'Imprint',
                    'Print Text ISBN \(ISBN\-13 \/ SKU\)',
                    'Digital ISBN',
                    'Billing ISBN',
                    'Print List Price',
                    'Digital List Price',
                    'Cost to GCU',
                    'Q\d \d{4} Usage',
                    'Q\d \d{4} Usage Cost',
                    '^$'
                ],
            ],
        },

        # Grand Canyon Univ, Version 5 (RSD-11146)
        {
            service          => BookPub::Tracker::Service::GRAND_CANYON_UNIV,
            version          => 5,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Course Code',
                    'College',
                    'Course Title',
                    'Textbook Title',
                    'Author',
                    'Year',
                    'Edition',
                    'Publisher',
                    'Imprint',
                    'Print Text ISBN.*',
                    'Digital ISBN',
                    'Print List Price',
                    'Digital List Price',
                    'Cost to GCU',
                    'Q\d \d{4} Usage',
                    'Q\d \d{4} Usage Cost',
                    '^$'
                ],
            ],
        },

        # Texidium, Version 1 (FB14262)
        {
            service          => BookPub::Tracker::Service::TEXIDIUM,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Row',
                    undef,
                    undef,
                    undef,
                    'Academic Session',
                    undef,
                    'Course Code',
                    'Course Name',
                    undef,
                    'Book ISBN',
                    undef,
                    'ebook ISBN',
                    'Book Title',
                    'Ebook list price',
                    'Ebook cost price to Texidium',
                    'US.* fee discounted',
                    'Book Authors',
                    'Sale type',
                    'Orders',
                    'Returns',
                    'Net Orders',
                    undef,
                    undef,
                    'Net value',
                    '^$'
                ],
            ],
        },

        # ED Map, Version 1 (FB14588)
        {
            service => BookPub::Tracker::Service::ED_MAP,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'Location',
                    'Cust Code',
                    'ISBN',
                    'Title',
                    'Sale Date',
                    'Date Shipped',
                    'Qty',
                    'Order#',
                    'Ext',
                    'Order Status',
                    'Order Type',
                    'Vendor',
                    'Vendor Name',
                    'Course',
                    'Redemption Code',
                    'Print ISBN',
                    'Print ISBN \(Fld8\)',
                    'Print MSRP',
                    'eISBN \(Fld11\)',
                    'SKU No.',
                    'Std Cost',
                    'ED MAP Cost',
                    'VTLS Add\/Drop',
                    'VTLS Add\/Drop Date',
                    '^$'
                ],
            ],
        },

        # ED Map, Version 2, POD files (FB14783)
        {
            service          => BookPub::Tracker::Service::ED_MAP,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Location',      'Customer Code',                'ISBN',                'Description',
                    'Sale Date',     'Shipped Date',                 'Quantity',            'Order Number',
                    'Extension|EXT', 'Order Status',                 'Type',                'Vendor',
                    'Course',        'Description|Description\(1\)', 'Original Print ISBN', 'Print ISBN',
                    'Ed Map Cost',   '^$'
                ],
            ],
        },

        # ED Map, Version 3, POD files (FB21507)
        {
            service          => BookPub::Tracker::Service::ED_MAP,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Location',
                    'Customer Code',
                    'ISBN',
                    'Description',
                    'Sale Date',
                    'Shipped Date',
                    'Quantity',
                    'Order Number',
                    'EXT',
                    'Order Status',
                    'Type',
                    'Vendor',
                    'Course',
                    'Description',
                    'Original Print ISBN',
                    'Print ISBN',
                    'Ship to state',
                    'Ship to zip',
                    'Ship to country',
                    'Ed Map Cost',
                    'Distributor Discount',
                    'Currency',
                    'Business Model of eBook Sale'
                ],
            ],
        },

        # Savant Learning, Version 1 (FB14613)
        {
            service          => BookPub::Tracker::Service::SAVANT_LEARNING,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [ undef, undef, 'E-Books', 'Price', '^$' ], ],
        },

        # Savant Learning, Version 2 (FB14907)
        {
            service          => BookPub::Tracker::Service::SAVANT_LEARNING,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [ undef, 'Course', 'ISBN', 'E-Books', 'Price', '^$' ], ],
        },

        # DeVry, Version 1 (FB14601)
        {
            service          => BookPub::Tracker::Service::DEVRY,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'College', 'Campus', 'Course', 'ISBN', 'Ebook VBID', 'eBook Cost', 'Courseware', 'POD Y\/N', 'POD Price',
                    'Final Enrollment',
                    'eBook Total', 'Courseware Total',
                    'POD Total', 'Final Publisher Cost', '^$'
                ],
            ],
        },

        # DeVry, Version 2 (FB19618)
        {
            service          => BookPub::Tracker::Service::DEVRY,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'College', 'Campus', 'Course', 'ISBN', 'Ebook VBID', 'eBook Cost', 'Courseware', 'POD Y\/N', 'POD Price',
                    'Final Enrollment|Ambassador eBooks Sold',
                    'eBook Total', 'POD Total', 'Final Publisher Cost', '^$'
                ],
            ],
        },

        # DeVry, Version 3 (RSD-4420)
        {
            service          => BookPub::Tracker::Service::DEVRY,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'College',
                    'Campus',
                    'Course',
                    'ISBN',
                    'Ebook VBID',
                    'eBook Cost',
                    'POD Y/N',
                    'POD Price',
                    'Final Enrollment',
                    'eBook Total',
                    'POD Total',
                    'Final Publisher Cost',
                    '^$'
                ],
            ],
        },

        # DeVry, Version 4 (RSD-7454)
        {
            service          => BookPub::Tracker::Service::DEVRY,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'College',
                    'Campus',
                    'Course',
                    'ISBN',
                    'Ebook VBID',
                    'eBook Cost',
                    'POD Y/N',
                    'POD Price',
                    'POD Sales',
                    'Final Enrollment',
                    'eBook Total',
                    'POD Total',
                    'Final Publisher Cost',
                    '^$'
                ],
            ],
        },

        # eCampus, Version 1 (FB13982)
        {
            service          => BookPub::Tracker::Service::ECAMPUS,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Ship Date',
                    'Print ISBN13',
                    'eBook ISBN13',
                    'Duration',
                    'Title',
                    'Authors',
                    'Qty Sold',
                    'Net Price',
                    'Selling Price',
                    'List Price',
                    'Customer Name',
                    'Address Line 1',
                    'Address Line 2',
                    'City',
                    'State',
                    'Zip Code',
                    'School Affiliation',
                    'Email Address',
                    '^$'
                ],
            ],
        },

        # Copyright Clearance, Version 1 (FB14909)
        {
            service          => BookPub::Tracker::Service::COPYRIGHT_CLEARANCE,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Payee Account Number',
                    'Payee Account Name',
                    'Account Number',
                    'Rightsholder',
                    'Publication Type',
                    'IDNO',
                    'Title',
                    'Royalty Total \(USD\)',
                    'Payment Date',
                    'Payment #',
                    'Service',
                    'Period End Date',
                    'Royalty Event #',
                    'Rightsholder Accounting Identifier',
                    '^$'
                ],
            ],
        },

        # Copyright Clearance, Version 2 (FB14914)
        {
            service          => BookPub::Tracker::Service::COPYRIGHT_CLEARANCE,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Payee Account Number',
                    'Payee Account Name',
                    'Account Number',
                    'Rightsholder',
                    'Payment Date',
                    'Payment Number',
                    'Service',
                    'Event Number',
                    'IDNO',
                    'Publication Title',
                    'WRK_INST',
                    'Payable Subtotal \(USD\)',
                    'Amount Collected',
                    'Service Charge',
                    'Tax Withholding',
                    'Period End Date',
                    '^$'
                ],
            ],
        },

        # Copyright Clearance, Version 3 (FB14915)
        {
            service          => BookPub::Tracker::Service::COPYRIGHT_CLEARANCE,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Account Number',
                    'Rightsholder',
                    'Payee Account Number',
                    'Payee Account Name',
                    'Payment Date',
                    'Payment Number',
                    'Event Number',
                    'Order Detail Number',
                    'Content Id',
                    'Channel',
                    'Status',
                    'License #',
                    'Organization',
                    'Promo code',
                    'Rightsholder Accounting Identifier',
                    'Order Date',
                    'Payable Subtotal \(USD\)',
                    'Publication Title',
                    'IDNO',
                    'DOI',
                    'Publication Date',
                    'Licensed portion name',
                    'Article\/Chapter\/Image',
                    'Author',
                    'Requestor is original author',
                    'Portion type',
                    'Publication Date of New Work',
                    'Name of new work',
                    'Publisher of new work',
                    'Licensee',
                    'Requestor type',
                    'Period End Date',
                    'Publication Type',
                    '^$'
                ],
            ],
        },

        # Indiana University, Version 1 (FB14928)
        {
            service          => BookPub::Tracker::Service::INDIANA_UNIVERSITY,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'DESCRIPTION', 'TERM',   'CAMPUS',  'SUBJECT', 'COURSE',     'CLASS',    'PRINT ISBN', 'EBOOK ISBN',
                    'TITLE',       'AUTHOR', 'EDITION', 'DATE',    'LIST PRICE', 'IU PRICE', 'ENROLLMENT', 'WAIVER',
                    'COUNT',       'FEES',   '^$'
                ],
            ],
        },

        # Indiana University, Version 1 (FB18379)
        {
            service => BookPub::Tracker::Service::INDIANA_UNIVERSITY,
            version => 2,
            sheet   => 'any',
            lines   => [ [
                    'FEE ID',  'TERM',     'CAMPUS',  'SUBJECT', 'COURSE',     'CLASS',      'PRINT ISBN', 'EBOOK ISBN',
                    'TITLE',   'AUTHOR',   'EDITION', 'DATE',    'LIST PRICE', 'IU PRICE',   'FLAG',       'ENROLLMENT',
                    'WAIVERS', 'OPT-OUTS', 'COUNT',   'FEES',    'ADJ',        'ADJ\. FEES', '^$'
                ],
            ],
        },

        # APUS, Version 2 (FB15743)
        {
            service => BookPub::Tracker::Service::APUS,
            version => 2,
            sheet   => 1,
            lines   => [ [
                    'Session Name',  'Course\/Session Start Date', 'Course\/Session End Date', 'Publisher', 'Course Number', 'Title',
                    'ECM Unit Cost', '# of\s+Students',            'ECM Total',                '^$'

                ],
            ],
        },

        # APUS, Version 1 (FB14776)
        {
            service          => BookPub::Tracker::Service::APUS,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Session Name', 'Course\/Session Start Date', 'Course\/Session End Date', 'Course Material Publisher', 'Course Number',
                    'Course Material Title', 'Course Material ECM Unit Cost', '# of Course Material ECM Overseas Students',
                    '# of Course Material ECM Stateside Students', 'Course Material ECM Extended Price.*Stateside and Overseas Students',
                    '^$'

                ],
            ],
        },

        # APUS, Version 3 (RSD-4494)
        {
            service          => BookPub::Tracker::Service::APUS,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Course\/Session Start Date',
                    'Course\/Session End Date',
                    'lastname',
                    'First name',
                    'COURSE',
                    'Course Material\/ISBN',
                    'Publisher',
                    'Cost',
                    '^$'
                ],
            ],
        },

        # Bridgepoint Education, Version 1 (FB14973)
        {
            service          => BookPub::Tracker::Service::ZOVIO,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    undef,       'Sy Student Id', undef, undef,     undef,       'First Name',
                    undef,       'Last Name',     undef, undef,     'Stu Num',   undef,
                    undef,       'Code',          undef, 'Descrip', 'Startdate', undef,
                    'ITEM CODE', 'REF CODE',      'QTY', 'PRICE',   'TOTAL',     'PUBLISHER',
                    '^$'
                ],
            ],
        },

        # Bridgepoint Education version 2 (FBoD16648)
        {
            service          => BookPub::Tracker::Service::ZOVIO,
            version          => 2,
            match_on_any_row => 1,
            lines            => [ [
                    undef,   'Sy Student Id', undef, undef,     undef,       'First Name',
                    undef,   'Last Name',     undef, undef,     'Stu Num',   undef,
                    undef,   'Code',          undef, 'Descrip', 'Startdate', 'EBOOK ISBN',
                    'PRICE', 'TOTAL',         '^$'
                ],
            ],
        },

        # Bridgepoint Education version 3 (FBoD20975)
        {
            service => BookPub::Tracker::Service::ZOVIO,
            version => 3,
            sheet   => 'any',
            lines   => [ [
                    'Anticipated Start Date',
                    'Course Number',
                    'Resource Title',
                    'eBook ISBN \(Custom epub\/VS\)',
                    'Implementation Status',
                    'AuthorName',
                    'Distributor Discount',
                    'List Price',
                    'Currency',
                    'Country of Sale',
                    'State',
                    'Zip Code',
                    'Business Model',
                    'Non-Repeats',
                    '^$'
                ],
            ],
        },

        # Zovio (RSD-5785)
        {
            service => BookPub::Tracker::Service::ZOVIO,
            version => 4,
            sheet   => 'any',
            lines   => [ [
                    'Anticipated Start Date',
                    'Course Number',
                    'Resource Title',
                    'eBook ISBN \(Custom epub\/VS\)',
                    'Implementation Status',
                    'AuthorName',
                    'Distributor Discount',
                    'List Price',
                    'Currency',
                    'Institution',
                    'Country of Sale',
                    'State',
                    'Zip Code',
                    'Business Model',
                    'Non-Repeats.*',
                    'Total',
                    '^$'
                ],
            ],
        },

        # UAGC (formerly Zovio) (RSD-9424)
        {
            service => BookPub::Tracker::Service::UAGC,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    'Anticipated Start Date',
                    'Course Number',
                    'Resource Title',
                    'eBook ISBN \(Custom epub\/VS\)',
                    'Implementation Status',
                    'AuthorName',
                    'Distributor Discount',
                    'List Price',
                    'Currency',
                    'Institution',
                    'Country of Sale',
                    'State',
                    'Zip Code',
                    'Business Model',
                    '.*',
                    '.* Price',
                    'Total',
                    '^$'
                ],
            ],
        },

        # Laureate, Version 1 (FB14926)
        {
            service          => BookPub::Tracker::Service::LAUREATE,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Date Sold', 'Publisher\/Title', 'VBID', 'Institution', 'Country Code', 'Grand Total',
                    'Price per unit',
                    'Total ebook cost per school', '^$'
                ],
            ],
        },

        # Bloomsbury.com, Version 1 (FB14782)
        {
            service          => BookPub::Tracker::Service::BLOOMSBURY_COM,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Category L0',   'Category L1',   'Category L2',          'Category L3',
                    'Category L4',   'Category L5',   'Category L6',          'ProductName',
                    'ProductFormat', 'ISBN',          'CountryOfPublication', 'TotalQuantity',
                    'TotalRevenue',  'AvgOrderValue', 'Site',                 '^$'
                ],
            ],
        },

        # Bloomsbury.com, Version 2 (RSD-12275)
        {
            service          => BookPub::Tracker::Service::BLOOMSBURY_COM,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'OrderId',
                    'Site',
                    'Territory',
                    'OrderType',
                    'SAPOrderNumber',
                    'OrderLineStatus',
                    'DeliveryCity',
                    'DeliveryStateProvince',
                    'DeliveryCountry',
                    'BillingStateProvince',
                    'BillingCountry',
                    'CreatedOnUtc',
                    'Qty',
                    'ISBN13',
                    'ProductName',
                    'ProductFormat',
                    'CountryOfOrigin',
                    'PriceInclusiveVat',
                    'PriceExclusiveVat',
                    'ItemTax',
                    'ItemTaxRate',
                    'DiscountValue1',
                    'DiscountName',
                    'DiscountCouponCode',
                    'MembershipDiscount',
                    'PaidDate',
                    'SchoolOrder',
                    'List price',
                    'Discount',
                    'Net sales',
                    'Division',
                    '^$'
                ],
            ],
        },

        # Snapplify Version 1 (FB15138)
        {
            service          => BookPub::Tracker::Service::SNAPPLIFY,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [
                [ 'ISBN', 'Title', 'Quantity', 'Territory of Sale', 'Currency', 'RRP', 'Total', 'Discount', 'Total Amount Payable', '^$' ],
            ],
        },

        # Snapplify Version 2 (RSD-7437)
        {
            service          => BookPub::Tracker::Service::SNAPPLIFY,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [
                [ 'Date', 'Supplier Name', '^ISBN', 'Title', 'Business Model', 'Quantity', 'Territory of Sale', 'Currency', 'RRP', 'Total', 'Discount', 'Total Amount Payable', '^$' ],
            ],
        },

        # Snapplify Version 3 (RSD-9961)
        {
            service          => BookPub::Tracker::Service::SNAPPLIFY,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [
                [ 'Date', 'Supplier Name', 'Order Reference', 'ISBN', 'Title', 'Business Model', 'Quantity', 'Territory of Sale', 'Currency', 'RRP', 'Total', 'Discount', 'Total Amount Payable', '^$' ],
            ],
        },

        # EDMC, Version 1 (FB14579)
        {
            service => BookPub::Tracker::Service::EDMC,
            version => 1,
            sheet   => 'any',
            lines   => [ [
                    # no ^$ in this rule, there are varying numbers of differently named columns
                    # on each sheet, so nothing matters after the REVENUE column
                    undef, 'TERM', 'ISBN TOTAL', 'FLAT FEE', 'REVENUE'
                ],
            ],
        },

        # Ambassador, Version 1 (FB15205)
        {
            service          => BookPub::Tracker::Service::AMBASSADOR,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [

                    'Publisher Name', 'POD ISBN', 'POD Title', 'Client Name', 'eBook Cost', 'Publisher POD Fee Method',
                    'Publisher POD Fee', 'Total Net Qty Sold', 'Total Net Publisher POD Fee', '^$'
                ],
            ],
        },

        # Ambassador, Version 2 (FB18315)
        {
            service          => BookPub::Tracker::Service::AMBASSADOR,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Publisher Name',
                    'Period', 'POD ISBN', 'POD Title', 'Client Name', 'eBook Cost',
                    'Publisher POD Fee Method',
                    'Publisher POD Fee',
                    'Total Net Qty Sold',
                    'Total Net Publisher POD Fee', '^$'
                ],
            ],
        },

        # Ambassador, Version 3 (FB21746)
        {
            service          => BookPub::Tracker::Service::AMBASSADOR,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Publisher Name',
                    'Period',
                    'POD ISBN',
                    'POD Title',
                    'Author',
                    'State Name',
                    'Client Name',
                    'eBook License Duration \(Days\)',
                    'eBook Cost',
                    'Publisher POD Fee Method',
                    'Publisher POD Fee',
                    'Total Net Qty Sold',
                    'Total Net Publisher POD Fee'
                ],
            ],
        },

        # Apollo Group, Version 1 (FB15231)
        {
            service          => BookPub::Tracker::Service::APOLLO_GROUP,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Month', 'Publisher', 'Course Number',
                    'ISBN', 'E-ISBN for XML',
                    'Title', 'Content Description',
                    'Price', 'College',
                    'Number of Chapters Used',
                    'Chapter Book Price',
                    'Course Enrollments',
                    'Course Totals',
                    'Publisher Total', '^$'
                ],
            ],
        },

        # Apollo Group, Version 2 (FB18313)
        {
            service          => BookPub::Tracker::Service::APOLLO_GROUP,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Month',          'Publisher',          'Course Number',       'ISBN',
                    'E-ISBN for XML', 'Title',              'Content Description', 'Price',
                    'College',        'Course Enrollments', 'Course Totals',       'Publisher Total',
                    '^$'
                ],
            ],
        },

        # Shelfie, Version 1 (FB14828)
        {
            service          => BookPub::Tracker::Service::SHELFIE,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'EPUB',      'MOBI',     'PDF',             'PAPER',          'Book Title',   'Authors',
                    'Firstname', 'Lastname', 'Email',           'Date Completed', 'Date Created', 'Price',
                    'DRM Fee',   'BitLit',   'Berrett-Koehler', '^$'
                ],
            ],
        },

        # Faithlife, Version 1 (FB15282)
        {
            service          => BookPub::Tracker::Service::FAITHLIFE,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [ 'Rightholder Resource Name', 'ISBN', 'Digital List Price', 'Sales', 'Units', 'Amount Due', '^$' ], ],
        },

        # Faithlife, Version 2 (RSD-6880)
        {
            service          => BookPub::Tracker::Service::FAITHLIFE,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Publisher Title',
                'Primary ISBN',
                'Digital List Price',
                'Sales',
                'Units',
                'Amount Due',
                '^$'
            ], ],
        },

        # Faithlife, Version 3
        {
            service          => BookPub::Tracker::Service::FAITHLIFE,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Rightholder Name',
                'Publisher Title',
                'Primary ISBN',
                'Sales',
                'Units',
                'Amount Due',
                '^$'
            ], ],
        },

        # Faithlife, Version 4 (FB15282) The other version is an RSFORMAT file and is in that section above
        {
            service          => BookPub::Tracker::Service::WESTERN_INTERNATIONAL,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Course No.',
                    'ISBN',
                    'Materials Description',
                    'Unit Price',
                    'Course Start Date',
                    'Total Enrollment',
                    'Total Value',
                    '^$'
                ],
            ],
        },

        # OneClickdigital, Version 1 (FB15695)
        {
            service => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version => 1,
            lines   => [ [
                    'Document Type',
                    'Document Number',
                    'Document Date',
                    'Customer Code',
                    'Customer Name',
                    'Customer Country',
                    'Contract Number',
                    'Item Number',
                    'ISBN',
                    'Title',
                    'Author',
                    'Publisher',
                    'List Price \(Per Unit\)',
                    'Units Sold',
                    'Sale Price \(Per Unit\)',
                    'Discount \(Per Unit\)',
                    'Net Sale Price',
                    'Net Discount',
                    'Royalty %',
                    'Royalty Value',
                    '^$'
                ],
            ],
        },

        # OneClickdigital, Version 2 (FB17287)
        {
            service => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version => 2,
            lines   => [ [
                    'Document Type',
                    'Document Number',
                    'Document Date',
                    'Customer Code',
                    'Customer Name',
                    'Customer Country',
                    'Contract Number',
                    'Item Number',
                    'ISBN',
                    'Title',
                    'Author',
                    'Publisher',
                    'List Price \(Per Unit\)',
                    'Units Sold',
                    'Sale Price \(Per Unit\)',
                    'Discount \(Per Unit\)',
                    'Net Sale Price',
                    'Net Discount',
                    'Royalty %',
                    'Royalty Value',
                    '\w\w\w',
                    '^$'
                ],
            ],
        },

        # OneClickdigital, Version 3 (FB19269)
        {
            service => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version => 3,
            lines   => [ [
                    'Agent Code',
                    'Agent Name',
                    'Publisher',
                    'Country',
                    'Period From',
                    'Period To',
                    'Statement Name',
                    'Contract Number',
                    'Title',
                    'Author',
                    'Status',
                    'Type',
                    'Publication Date',
                    'Item No\.',
                    'ISBN',
                    'Royalty Adjustment',
                    'Advance',
                    'Cume Royalty',
                    'Cume Payments',
                    'Unit Solds in Period',
                    'List Price',
                    'Royalty %',
                    'Total Units Sold To End Period',
                    'Total Royalty Earned in Period',
                    '^$'
                ],
            ],
        },

        # OneClickdigital, Version 4 (FB20279)
        {
            service => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version => 4,
            lines   => [ [
                    'Agent Code',
                    'Agent Name',
                    'Publisher',
                    'Country',
                    'Period From',
                    'Period To',
                    'Contract Number',
                    'Title',
                    'Author',
                    'Type',
                    'Item No\.',
                    'ISBN',
                    'Cume\. Royalty',
                    'Period Royalty',
                    'Royalty %',
                    'Units? Sold in period',
                    'Royalty Due',
                    '^$'
                ],
            ],
        },

        # OneClickdigital, Version 5 (FB20505)
        {
            service => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version => 5,
            lines   => [ [
                    'Transaction Date', 'ISBN',       'Title',      'Author',   'Publisher',       'Quantity Sold',
                    'List Price',       'Discount %', 'Amount Due', 'Currency', 'Country of Sale', '^$'
                ],
            ],
        },

        # W.F. Howes (OneClickdigital), Version 6 (RSD-2826)
        {
            service => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version => 6,
            lines   => [ [
                    'Card Code',
                    'Invoice',
                    'Credit Note',
                    'Doc Date',
                    'Line No\.',
                    'Item Code',
                    'ISBN',
                    'Description',
                    'Quantity',
                    'Line Value at List',
                    'Line Value Net',
                    'Royalty Value',
                    '^$'
                ],
            ],
        },

        # W.F. Howes (OneClickdigital), Version 7 (RSD-3364)
        {
            service          => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version          => 7,
            match_on_any_row => 1,
            lines            => [ [
                    'Contract Number',
                    'Title',
                    'Author',
                    '',
                    'ISBN',
                    '',
                    'Library Code',
                    'Library Country',
                    'Date Sold',
                    'Item Code',
                    'Invoice Number',
                    'Currency',
                    'List Price',
                    'Nett Price',
                    'Ex Rate',
                    'Quantity Sold',
                    'Royalty Value',
                    '^$'
                ],
            ],
        },

        # W.F. Howes (OneClickdigital), Version 8 (RSD-6011)
        {
            service          => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version          => 8,
            match_on_any_row => 1,
            lines            => [ [
                    'Contract Number',
                    'Contract Type',
                    'Title',
                    'Author',
                    'ISBN',
                    'Customer Code',
                    'Customer  Country',
                    'Date Sold',
                    'Item Code',
                    'Customer Type',
                    'Invoice Number',
                    'Currency',
                    'List Price',
                    'Nett Price',
                    'Ex Rate',
                    'Quantity Sold',
                    'Royalty Value',
                    '^$'
                ],
            ],
        },

        # W.F. Howes (OneClickdigital), Version 9 (RSD-7526)
        {
            service          => BookPub::Tracker::Service::ONECLICKDIGITAL,
            version          => 9,
            match_on_any_row => 1,
            lines            => [ [
                    'Contract Number',
                    'Contract Type',
                    'Title',
                    'Author',
                    'ISBN',
                    'Customer  Country',
                    'Date Sold',
                    'Item Code',
                    'Media Type',
                    'Customer Type',
                    'Invoice Number',
                    'Currency',
                    'List Price',
                    'Nett Price',
                    'Ex Rate',
                    'Quantity Sold',
                    'Royalty Value',
                    '^$'
                ],
            ],
        },

        # WGU (Western Governors University) version 1 (FBoD16162), their own (sad) format
        {
            service => BookPub::Tracker::Service::WGU,
            version => 1,
            lines   => [ [ 'PERSON_USERNAME', 'LR_name', 'crse_numb', 'first_access_date', 'pass_date', 'ISBN', 'Price', '^$' ], ]
        },

        # WGU version 2 (FBoD18380)
        # This is almost exactly the same as Acrobatiq v1, so we need to check for "WGU" in the first line.
        {
            service => BookPub::Tracker::Service::WGU,
            version => 2,
            lines   => [
                ['.*WGU'],
                [
                    'Learning Resource',
                    'Author',
                    'Date of Sale',
                    'Sales',
                    'Returns',
                    'Qty',
                    'eISBN',
                    'Print ISBN',
                    'List Price',
                    'Price Per Student',
                    'Invoice Total',
                    'Revenue Share Percent',
                    'Net Revenue Share',
                    'Currency',
                    'Channel',
                    'Institution',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Business Model',
                    '^$'
                ]
            ]
        },

        # Library (not very bright) Ideas version 1 (FBoD15996)
        {
            service => BookPub::Tracker::Service::LIBRARY_IDEAS,
            version => 1,
            lines   => [ [], [ 'ISBN', 'Title', 'Imprint', 'Publication', 'Dlds', 'Tokens', 'Token Value', 'Commission', '^$' ] ]
        },

        # Alexi version 1 (FBoD15996)
        {
            service => BookPub::Tracker::Service::ALEXI,
            version => 1,
            lines   => [
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [
                    'Territory', 'ISBN', 'Title', 'Author', 'Publisher', 'Imprint', 'DLP GBP', 'DLP USD', 'DLP AUD', 'DLP INR',
                    'Units Sold', 'Units Refunded',
                    'Net Units', 'Discount',
                    'Amount Due Local Currency',
                    'Amount Due GBP', '^$'
                ]
            ]
        },

        # Alexi version 2 (FBoD16986)
        {
            service => BookPub::Tracker::Service::ALEXI,
            version => 2,
            lines   => [
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                [
                    'Territory', 'ISBN', 'Title', 'Author', 'Publisher', 'Imprint', 'DLP GBP', 'DLP USD', 'DLP AUD', 'DLP INR',
                    'Units Sold', 'Units Refunded',
                    'Net Units', 'Total', 'Discount',
                    'Amm?ount Due Local Currency',
                    'Amount Due GBP', '^$'
                ]
            ]
        },

        # Alexi version 3 (FBoD18076)
        {
            service => BookPub::Tracker::Service::ALEXI,
            version => 3,
            lines   => [
                [],
                [],
                [],
                [],
                [],
                [],
                [
                    'Territory',
                    'ISBN',
                    'Title',
                    'Author',
                    'Publisher',
                    'Imprint',
                    'DLP GBP',
                    'DLP USD',
                    'DLP AUD',
                    'DLP INR',
                    'Units Sold',
                    'Units Refunded',
                    'Net Units',
                    'Total',
                    'Discount',
                    'Amm?ount Due Local Currency',
                    'Local Currency Code',
                    'Amount Due GBP',
                    '^$'
                ]
            ]
        },

        # Alexi version 4 (FB21618) - the same as v1 but with an additional column
        {
            service          => BookPub::Tracker::Service::ALEXI,
            version          => 4,
            match_on_any_row => 1,
            lines            => [ [
                    'Territory',
                    'ISBN',
                    'Title',
                    'Author',
                    'Publisher',
                    'Imprint',
                    'DLP GBP',
                    'DLP USD',
                    'DLP AUD',
                    'DLP INR',
                    'Units Sold',
                    'Units Refunded',
                    'Net Units',
                    'Discount',
                    'Amm?ount Due Local Currency',
                    'Local Currency Code',
                    'Amount Due GBP',
                    '^$'
                ]
            ]
        },

        # Perusal version 1 (FBoD16772)
        {
            service => BookPub::Tracker::Service::PERUSALL,
            version => 1,
            lines   => [ [
                    'Transaction', 'Title', 'Authors',         'Edition',     'ISBN',       'Purchase option',
                    'List price',  'Tax',   'Publisher share', 'Institution', 'City/state', 'Country',
                    'Notes',       '^$'
                ]
            ]
        },

        # Perusal version 2 (RSD-582)
        {
            service => BookPub::Tracker::Service::PERUSALL,
            version => 2,
            lines   => [ [
                    'Purchase ID',
                    'Timestamp',
                    'Status',
                    'Institution name',
                    'Institution city',
                    'Institution state',
                    'Institution country',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Edition',
                    'Purchase type',
                    'Purchase duration',
                    'Total price paid',
                    'Sales tax collected',
                    'Gross revenue excluding taxes',
                    'State tax',
                    'County tax',
                    'City tax',
                    'Special district tax',
                    'Publisher share',
                    'Publisher revenue %',
                    'Notes'
                ]
            ]
        },

        # Perusal version 3 (RSD-6185)
        {
            service => BookPub::Tracker::Service::PERUSALL,
            version => 3,
            lines   => [ [
                    'Purchase ID',
                    'Timestamp',
                    'Status',
                    'Institution name',
                    'Institution city',
                    'Institution state',
                    'Institution country',
                    'ISBN',
                    'Title',
                    'Authors',
                    'Edition',
                    'Purchase type',
                    'Purchase duration',
                    'Total price paid \(\w{3}\)',
                    'Tax collected \(\w{3}\)',
                    'Gross revenue excluding taxes \(\w{3}\)',
                    'Country tax',
                    'State tax',
                    'County tax',
                    'City tax',
                    'Special district tax',
                    'Publisher share',
                    'Publisher revenue %',
                    'Notes',
                    'Tax jurisdiction city',
                    'Tax jurisdiction state',
                    'Tax jurisdiction zip',
                    'Tax to be remitted by Perusall',
                    '^$'
                ] ]
        },

        # Perusal version 4 (RSD-6835)
        {
            service => BookPub::Tracker::Service::PERUSALL,
            version => 4,
            lines   => [ [
                'Purchase ID',
                'Timestamp',
                'Status',
                'Institution name',
                'Institution city',
                'Institution state',
                'Institution country',
                'ISBN',
                'Title',
                'Authors',
                'Edition',
                'Purchase type',
                'Purchase duration',
                'Total price paid \(\w{3}\)',
                'Tax collected \(\w{3}\)',
                'Gross revenue excluding taxes \(\w{3}\)',
                'Tax currency',
                'Country tax',
                'State tax',
                'County tax',
                'City tax',
                'Special district tax',
                'Publisher share',
                'Publisher revenue %',
                'Notes',
                'Tax jurisdiction city',
                'Tax jurisdiction state',
                'Tax jurisdiction zip',
                'Tax to be remitted by Perusall',
                'Purchase method|^$'
                ] ]
        },

        # Perusal version 5 (RSD-6836)
        {
            service => BookPub::Tracker::Service::PERUSALL,
            version => 5,
            lines   => [ [
                'Purchase ID',
                'Timestamp',
                'Status',
                'Institution name',
                'Institution city',
                'Institution state',
                'Institution country',
                'ISBN',
                'Title',
                'Authors',
                'Edition',
                'Purchase type',
                'Purchase duration',
                'Total price paid',
                'Sales tax collected \(if direct to student\)',
                'Gross revenue excluding taxes',
                'Tax currency',
                'Country tax',
                'State tax',
                'County tax',
                'City tax',
                'Special district tax',
                'Publisher share',
                'Publisher revenue %',
                'Notes',
                'Tax jurisdiction city',
                'Tax jurisdiction state',
                'Tax jurisdiction zip',
                'Tax remitted to state',
                'Geolocation country',
                'Original retail price in local currency',
                'Original currency',
                '^$'
                ] ]
        },

        # Perusal version 1 (FBoD17322)
        {
            service => BookPub::Tracker::Service::CNPEREADING,
            version => 1,
            lines   => [
                [],
                [
                    'Customer Name',
                    'Order date', 'eISBN', 'Title', 'Qty', 'Concurrent user',
                    'Currency', 'List Price',
                    'Pub Commission Rate',
                    'Net amount to Publisher',
                    'Publiser|Publisher', 'Supplier|^$', '^$'
                ]
            ]
        },

        # Perusal version 1 (RSD-7296)
        {
            service => BookPub::Tracker::Service::CNPEREADING,
            match_on_any_row => 1,
            version => 2,
            lines   => [
                [
                    'Customer Name',
                    'Order date',
                    'eISBN',
                    'Title',
                    'Qty',
                    'Concurrent user',
                    'Currency',
                    'List Price',
                    'Pub Commission Rate',
                    'Net Amount',
                    'Publiser',
                    '^$'
                ]
            ]
        },

        # CNPeReading v3 (RSD-10431) similar to v2
        {
            service => BookPub::Tracker::Service::CNPEREADING,
            match_on_any_row => 1,
            version => 3,
            lines   => [
                [
                    'Customer Name',
                    'Order date',
                    'eISBN',
                    'Title',
                    'Qty',
                    'Currency',
                    'List Price',
                    'Pub Commission Rate',
                    'Net amount to Publisher',
                    'Publish?er',
                    '^$'
                ]
            ]
        },

        # Kinokuniya version 1 (FBoD17879)
        {
            service => BookPub::Tracker::Service::KINOKUNIYA,
            version => 1,
            lines   => [ [
                    'Purchase ID',
                    'Purchase/Return Code',
                    'Transaction Date',
                    'eISBN',
                    'Print ISBN',
                    'Title',
                    'Author',
                    'Publisher',
                    'Quantity',
                    'Currency',
                    'List Price',
                    'discount rate',
                    'Net Proceed',
                    'Currency',
                    '\w{3} Price',
                    'Price with Consumption Tax',
                    'Exchange Rate',
                    'Store Location',
                    'Country of Licensee',
                    'B2C\(1\)/B2B\(2\) Code',
                    'Pub Code',
                    'Store Channel Code',
                    '^$'
                ]
            ]
        },

        # BFC-GB, version 1 (FBoD18222)
        {
            service => BookPub::Tracker::Service::BFC_GB,
            version => 1,
            lines   => [ [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment',
                    'Notes Field',
                    '^$'
                ],
                [ undef, undef, undef, 'BFC-GB' ],
            ],
        },

        # BFC-US, version 1 (FBoD18222)
        {
            service => BookPub::Tracker::Service::BFC_US,
            version => 1,
            lines   => [ [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'Service Name',
                    'ISBN',
                    'Title',
                    'Sub-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Price Type',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment',
                    'Notes Field',
                    '^$'
                ],
                [ undef, undef, undef, 'BFC-US' ],
            ],
        },

        # RM Books version 1 (FBoD18181)
        {
            service => BookPub::Tracker::Service::RM_BOOKS,
            version => 1,
            lines   => [ [
                    'Report ID',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Reporting currency',
                    'Report period from',
                    'Report period to',
                    'Seller Party',
                    'Publisher Party',
                    'SupplierParty',
                    'Line Item ID',
                    'Transaction date',
                    'Agents transaction id',
                    'Line Item Reference type',
                    'Main product type',
                    'Main Product ID',
                    'Product title',
                    'Product author\(s\)',
                    'Publisher ID',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Purchase type',
                    'Purchase period',
                    'Usage type',
                    'Gross sold quantity',
                    'Returned\/refunded quantity',
                    'Net sold quantity',
                    'Class of trade \/ sale',
                    'Postal code',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned\/refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned\/ refunded quantity',
                    'Total net sold quantity',
                    'Total gross sold value',
                    'Total returned\/refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    '^$'
                ]
            ]
        },

        # Kinokuniya version 1 (FBoD18548)
        {
            service => BookPub::Tracker::Service::LANGUAGE_WORLD,
            version => 1,
            lines   => [
                [],
                [],
                [],
                [],
                [],
                [
                    'Online Carrier \(SP\)', 'Title',   'Author',                  'eISBN',
                    'Publisher',             'DSRP',    'Discount',                'After discount',
                    'Sold copies',           'Country', 'Royalties Due \(\w{3}\)', '^$'
                ]
            ]
        },

        # Bokbasen version 1 (FBoD18573)
        {
            service => BookPub::Tracker::Service::BOKBASEN,
            version => 1,
            lines   => [ [
                    'Isbn', 'Copies Sold', 'Price',
                    'Bookstore name',
                    'Gross Sales in Local Currency',
                    'Net Sales Proceeds Local Currency',
                    'Currency', 'Territory', 'FX Rate', 'Net Sales Proceeds EUR'
                ]
            ]
        },
        # Bokbasen version 2 (RSD-9874)
        {
            service => BookPub::Tracker::Service::BOKBASEN,
            version => 2,
            lines   => [ [
                    'ISBN',
                    'Copies Sold',
                    'Price',
                    'Bookstore Name',
                    'Gross Sales in Local Currency',
                    'Net Sales Proceeds Local Currency ex vat',
                    'Currency',
                    'Territory',
                    'FX Rate',
                    'Net Sales Proceeds',
                    '^$'
                ]
            ]
        },

        # Acrobatiq version 1 (FBoD18380)
        {
            service => BookPub::Tracker::Service::ACROBATIQ,
            version => 1,
            lines   => [
                [],
                [],
                [
                    'Learning Resource',
                    'Author',
                    'Date of Sale',
                    'Sales',
                    'Returns',
                    'Qty',
                    'eISBN',
                    'Print ISBN',
                    'List Price',
                    'Price Per Student',
                    'Invoice Total',
                    'Revenue Share Percent',
                    'Net Revenue Share',
                    'Currency',
                    'Channel',
                    'Institution',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Business Model',
                    '^$'
                ]
            ]
        },

        # Acrobatiq version 2 (RSD-12288)
        {
            service => BookPub::Tracker::Service::ACROBATIQ,
            version => 2,
            match_on_any_row => 1,
            lines   => [
                [
                    'Learning Resource',
                    'Author',
                    'Date of Sale',
                    'Quantity',
                    'Returns',
                    'eISBN',
                    'Price Per Student',
                    'Invoice Total',
                    'Revenue Share Percent',
                    'Net Revenue Share',
                    'Currency',
                    'Channel',
                    'Institution',
                    'State',
                    'Postal Code',
                    'Country Code',
                    '^$'
                ]
            ]
        },

        # Downpour version 1 (FBoD19031)
        {
            service => BookPub::Tracker::Service::DOWNPOUR,
            version => 1,
            lines   => [
                ['Downpour\.com'],
                [ 'Period', 'Provider', 'Prodcode', 'Title', 'Author', 'ISBN13', 'Quantity Invoiced', 'List Price', 'Total Share', '^$' ]
            ]
        },

        # Downpour version 2 (FB21416)
        {
            service => BookPub::Tracker::Service::DOWNPOUR,
            version => 2,
            lines   => [
                ['Downpour\.com'], ['.*'], [undef],
                [ 'Period', 'Provider', 'Prodcode', 'Title', 'Author', 'ISBN', 'Quantity Invoiced', 'List Price', 'Total Share' ]
            ]
        },

        # Downpour version 3 (RSD-4196)
        {
            service => BookPub::Tracker::Service::DOWNPOUR,
            version => 3,
            lines   => [
                ['Downpour\.com'], ['.*'], [undef],
                [
                    'Period',
                    'Title',
                    'Author',
                    'ISBN',
                    'Quantity(?: Invoiced)?',
                    'List Price',
                    'ALC Total',
                    'Credit Total',
                    'SALES Total',
                    'Rate',
                    'ALC Share',
                    'Credit Share',
                    'Total Share',
                    '^$'
                ]
            ]
        },

        # Downpour version 4 (RSD-2745)
        {
            service => BookPub::Tracker::Service::DOWNPOUR,
            version => 4,
            lines   => [
                ['Downpour\.com'], ['.*'], [undef],
                [
                    'Period',
                    'Title',
                    'Author',
                    'ISBN',
                    'Quantity Invoiced',
                    'List Price',
                    'ALC Total',
                    'Credit Total',
                    'SALES Total',
                    'Rate',
                    'Total Share',
                    '^$'
                ]
            ]
        },

        # Verba version 1 (FBoD18370)
        {
            service => BookPub::Tracker::Service::VERBA,
            version => 1,
            lines   => [ [
                    'Client Name',
                    'Catalog Name\/Term',
                    'Department',
                    'Course',
                    'Billing ISBN',
                    'Author',
                    'Title',
                    'Total Number of Students Enrolled',
                    'Total Number of Students Opted-Out',
                    'Total Number of Participating Students',
                    'Publisher Net Price',
                    'Extended Item Total',
                    '^$'
                ]
            ]
        },

        # Alexander Street version 1 (FBoD19812)
        {
            service => BookPub::Tracker::Service::ALEXANDER_STREET,
            version => 1,
            lines   => [ [
                    'Product Name',
                    'Product Index',
                    'IP Identifier',
                    'Title',
                    'Royalty Type',
                    'Length',
                    'Title Streams',
                    'Product Streams',
                    'Sourcing Date',
                    'Live Date',
                    'Royalty Rate',
                    'Title Royalty',
                    'PPR',
                    'Advance\/Roy Adj\.',
                    'Title Royalty Earned',
                    '^$'
                ]
            ]
        },

        # Alexander Street version 2 (RSD-3501)
        {
            service => BookPub::Tracker::Service::ALEXANDER_STREET,
            match_on_any_row => 1,
            version => 2,
            lines   => [ [
                    'Product Name',
                    'Product Index',
                    'IP Identifier',
                    'Title',
                    'Royalty Type',
                    'Length',
                    'Title Streams',
                    'Product Streams',
                    'Sourcing Date',
                    'Live Date',
                    'Royalty Rate',
                    'Title Royalty',
                    'PPR',
                    'Advance\/Roy Adj\.',
                    'Title Royalty Earned',
                    '^$'
                ]
            ]
        },

        # Knovel version 1 (FBoD20178)
        {
            service          => BookPub::Tracker::Service::KNOVEL,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    undef, 'Title ID',     undef, undef,            undef, undef,
                    undef, 'ISBN\/ISSN',   undef, 'Title',          undef, 'Title Revenue',
                    undef, 'Royalty Rate', undef, 'Royalty Earned', '^$'
                ]
            ]
        },

        # Prodevia Learning version 1 (FBoD20673)
        {
            service => BookPub::Tracker::Service::PRODEVIA_LEARNING,
            version => 1,
            lines   => [ [], [], [ 'TITLE', 'AUTHOR', 'ISBN-13', 'Units', '^(?:Prodevia eBook|Rate)$', 'Total', '^$' ] ]
        },

        # Perma-Bound v1 (FB21500)
        {
            service          => BookPub::Tracker::Service::PERMA_BOUND,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [ 'I S B N', 'e-Book TITLE', 'QTY', 'SRP', 'DISC', 'NET AMT' ], ],
        },

        # Lix, version 1 (FB21337)
        {
            service          => BookPub::Tracker::Service::LIX,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    '13 digit ISBN',
                    'eISBN', 'Title', 'Author\(s\)', 'Date of licence',
                    'List price', 'Quantities', 'Country of license',
                    'Currency',
                    'Commission rate',
                    'Price, end-user Less VAT',
                    'Price, end-user',
                    'Total commission', '^$'
                ],
            ],
        },

        # BookPal, version 1 (FB21350)
        {
            service          => BookPub::Tracker::Service::BOOKPAL,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Report period from',
                    'Report period to',
                    'Report date',
                    'Reporting currency',
                    'Line item ID#',
                    'Ship-to country',
                    'Ship-to state\s+or province \(CA\)',
                    'Ship-to county',
                    'Ship-to city',
                    'Ship-to district',
                    'Ship-to ZIP\s+or postal code',
                    'Ship-to location\s+ID# type',
                    'Ship-to location\s+ID#',
                    'Bill-to state\s+or province \(CA\)',
                    'Bill-to county',
                    'Bill-to city',
                    'Bill-to district',
                    'Bill-to ZIP\s+or postal code',
                    'Bill-to location\s+ID# type',
                    'Bill-to location\s+ID#',
                    'Bill-to tax registration number',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date\s+or date and time',
                    'Agent\'s transaction ID#',
                    'Additional reference type',
                    'Additional reference ID#',
                    'Main product\s+ID# type',
                    'Main product\s+ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author',
                    'Product\s+description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Quantity sold',
                    'Unit selling price',
                    'Agent\'s commission\s+percentage',
                    'Fee type\(s\)',
                    'Total fee amount',
                    'Currency',
                    'Sales value',
                    'Good \/ service classification',
                    'US State Sales Tax\s+tax rate',
                    'US State Sales Tax\s+taxable amount',
                    'US State Sales Tax\s+tax amount',
                    'US County Sales Tax\s+tax rate',
                    'US County Sales Tax\s+taxable amount',
                    'US County Sales Tax\s+tax amount',
                    'US City Sales Tax\s+tax rate',
                    'US City Sales Tax\s+taxable amount',
                    'US City Sales Tax\s+tax amount',
                    'US District\s+Sales Tax\s+tax rate',
                    'US District\s+Sales Tax\s+taxable amount',
                    'US District\s+Sales Tax\s+tax amount',
                    'Non-US\s+Sales Tax\s+tax type 1',
                    'Non-US\s+Sales Tax\s+tax rate 1',
                    'Non-US\s+Sales Tax\s+taxable amount 1',
                    'Non-US\s+Sales Tax\s+tax amount 1',
                    'Non-US\s+Sales Tax\s+tax type 2',
                    'Non-US\s+Sales Tax\s+tax rate 2',
                    'Non-US\s+Sales Tax\s+taxable amount 2',
                    'Non-US\s+Sales Tax\s+tax amount 2',
                    'Non-US\s+Sales Tax\s+tax type 3',
                    'Non-US\s+Sales Tax\s+tax rate 3',
                    'Non-US\s+Sales Tax\s+taxable amount 3',
                    'Non-US\s+Sales Tax\s+tax amount 3',
                    'Total\s+tax collected',
                    'Total\s+number of Line items',
                    'Total\s+sales value\s+for all lines',
                    'Total\s+US State Sales Tax\s+tax amount',
                    'Total\s+US County Sales Tax\s+tax amount',
                    'Total\s+US City Sales Tax\s+tax amount',
                    'Total\s+US District\s+Sales Tax\s+tax amount',
                    'Total\s+Non-US\s+Sales Tax\s+tax amount 1',
                    'Total\s+Non-US\s+Sales Tax\s+tax amount 2',
                    'Total\s+Non-US\s+Sales Tax\s+tax amount 3',
                    'Total\s+tax collected, all lines',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Sales tax\s+report type',
                    'List price',
                    'Tax exempt'
                ],
            ],
        },

        # Adtalem-Chamberlain V1 (RSD-823)
        {
            service          => BookPub::Tracker::Service::ADTALEM_CHAMBERLAIN,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines => [ [ 'ISBN13', 'EBOOK ID', 'EBOOK QTY', 'EBOOK COST', 'POD QTY', 'POD COST', 'SALE QTY', 'PUBLISHER TOTAL', '^$' ], ],
        },

        # Adtalem-Chamberlain V2 (RSD-7451)
        {
            service          => BookPub::Tracker::Service::ADTALEM_CHAMBERLAIN,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines => [ [ 'ISBN13', 'EBOOK ID', 'SKU', 'EBOOK COST', 'EBOOK QTY', 'POD COST', 'POD QTY', 'PUBLISHER TOTAL', '^$'  ], ],
        },

        # B�ksala st�denta (RSD-1044)
        {
            service          => BookPub::Tracker::Service::BOKSALA_STUDENTA,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Date',            'Title',    'Author',     'Publisher', 'e-ISBN', 'Print ISBN',
                    '\w+ - list price', 'Discount', 'cost price', 'Location',  'Tax',    'Quantity',
                    'Rental length',   '^$'
                ],
            ],
        },

        # Boksala studenta (RSD-9317)
        {
            service          => BookPub::Tracker::Service::BOKSALA_STUDENTA,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Territory',
                    'ISBN',
                    'Title',
                    'Author',
                    'Publisher',
                    'Imprint',
                    'Publisher DLP',
                    'Net Units',
                    'Discount',
                    'Sales Territory',
                    'Amount Due',
                    '^$'
            ] ],
        },

        # Boksala studenta (RSD-9659)
        {
            service          => BookPub::Tracker::Service::BOKSALA_STUDENTA,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Territory',
                    'ISBN',
                    'Title',
                    'Licence Type',
                    'Author',
                    'Publisher',
                    'Imprint',
                    'Publisher DLP',
                    'Price for Licence',
                    'Net Units',
                    'Discount',
                    'Sales Territory',
                    'Amount Due',
                    '^$'
            ] ],
        },

        # Boksala studenta (RSD-11220)
        {
            service          => BookPub::Tracker::Service::BOKSALA_STUDENTA,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Territory',
                    'ISBN',
                    'Title',
                    'Licence Type',
                    'Publisher',
                    'Publisher DLP',
                    'Price for Licence',
                    'Net Units',
                    'Discount',
                    'Sales Territory',
                    'Amount Due',
                    '^$'
                ],
            ],
        },

        # Baobab eBook Services (RSD-1167)
        {
            service          => BookPub::Tracker::Service::BAOBAB_EBOOK_SERVICES,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Item No\.',
                    'EAN\/ISBN13',
                    'Title',
                    'Publisher',
                    'Date of Sale',
                    'Units Sold',
                    'Returns\/ Cancellations',
                    'Net Units Sold',
                    'Bundle Selling Price',
                    'List Price',
                    'Distributor Discount',
                    'Remitted Payment',
                    'Country of Sale\/End User Location',
                    'Currency',
                    'Business Model',
                    '^$'
                ],
            ],
        },

        # Perlego (RSD-1930 + RSD-2107)
        {
            service          => BookPub::Tracker::Service::PERLEGO,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                '(?:Internal\s)?book[ _]id',
                'ISBN(?:-13\sValue)?',
                'Title',
                'Currency',
                'Royalty[ _]Value',
                'Start[ _]Period',
                'End[ _]Period',
                '^$'
            ], ],
        },

        # Perlego RSD-4373
        {
            service          => BookPub::Tracker::Service::PERLEGO,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'InternalBookID',
                'Period Start',
                'Period End',
                'Royalty Value .*',
                'Royalty Value .*',
                'Book Title',
                'ISBN',
                '^$'
            ], ],
        },

        # Perlego RSD-5409
        {
            service          => BookPub::Tracker::Service::PERLEGO,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'InternalBookID',
                'Period Start',
                'Period End',
                'First time opened',
                'DLP .',
                'Royalty Value .',
                'Royalty Value .',
                'Book Title',
                'ISBN',
                'Units',
                'Distinct User Countries',
                '^$'
            ], ],
        },

        # Perlego RSD-8618
        {
            service          => BookPub::Tracker::Service::PERLEGO,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'InternalBookID',
                'Period Start',
                'Period End',
                'First time opened',
                'DLP',
                'Royalty Value',
                'Royalty Value USD',
                'ISBN',
                'Units',
                'Distinct User Countries',
                '^$'
            ], ],
        },

        # Perlego RSD-9507
        {
            service          => BookPub::Tracker::Service::PERLEGO,
            version          => 5,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Invoice Date',
                'Start Period',
                'End Period',
                'Date of Transaction',
                'Digital ISBN',
                'Title',
                'Author\(s\)',
                'Book URL',
                'Format',
                'Publication Date',
                'Publisher',
                'Imprint',
                'Total Net Payment Amount',
                'Payment Amount Currency',
                'Channel',
                'User University',
                'Purchase City',
                'Purchase Country',
                '^$'
            ], ],
        },

        # Perlego RSD-9892
        {
            service          => BookPub::Tracker::Service::PERLEGO,
            version          => 6,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Invoice Date',
                'Start Period',
                'End Period',
                'Date of Transaction',
                'Digital ISBN',
                'Title',
                'Author\(s\)',
                'Book URL',
                'Format',
                'Publication Date',
                'Publisher',
                'Imprint',
                'Total Net Payment Amount',
                'Payment Amount Currency',
                '^$'
            ], ],
        },

        # Perlego v7
        {
            service          => BookPub::Tracker::Service::PERLEGO,
            version          => 7,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Invoice Date',
                    'Start Period',
                    'End Period',
                    'Date of Transaction',
                    'Digital ISBN',
                    'Title',
                    'Author\(s\)',
                    'Book URL',
                    'Format',
                    'Publication Year',
                    'Publisher',
                    'Imprint',
                    'Rental Term',
                    'Digital List Price',
                    'Digital List Price Currency',
                    'Unit Price',
                    'Total Net Payment Amount',
                    'Payment Amount Currency',
                    'Channel',
                    'User University',
                    'Purchase City',
                    'Purchase Country',
                    '^$'
            ], ],
        },

        # Hoopla Digital (RSD-2075)
        {
            service          => BookPub::Tracker::Service::HOOPLA_DIGITAL,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'circId',
                'borrowed',
                'title',
                'groupTitle',
                'artist',
                'format',
                'isbn',
                'publisher',
                'publisherid',
                'upc',
                'library',
                'state',
                'postal',
                'revenue',
                'revenueCurrency',
                'netDueMin',
                'netDueMax',
                'netDueFlat',
                'netDuePercent',
                'netDue',
                'netDueCurrency',
                '^$'
            ], ],
        },

        # Hoopla Digital (RSD-5394)
        {
            service          => BookPub::Tracker::Service::HOOPLA_DIGITAL,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Model',
                'Date \/ Time',
                'Circ ID',
                'Title',
                'Group Title',
                'Artist',
                'Format',
                'ISBN',
                'Publisher',
                'Publisher Id',
                'UPC',
                'Library',
                'Country',
                'State',
                'Postal',
                'Revenue',
                'Revenue Currency',
                'Net Due Flat',
                'Net Due Percent',
                'Net Due',
                'Net Due Currency',
                '^$'
            ], ],
        },

        # Hoopla Digital (RSD-5517)
        {
            service          => BookPub::Tracker::Service::HOOPLA_DIGITAL,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Title',
                'ISBN',
                'Release Date',
                'Date Live on hoopla',
                'Digital List Price',
                'Circulations',
                'Sales .',
                'Net . to Publisher',
                '^$'
            ], ],
        },

        # Hoopla Digital (RSD-7436)
        {
            service          => BookPub::Tracker::Service::HOOPLA_DIGITAL,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'model',
                'Date \/ Time',
                'license_id',
                'title',
                'Group Title',
                'artist',
                'format',
                'isbn',
                'publisher',
                'publisher_id',
                'upc',
                'country',
                'library',
                'state',
                'postal',
                'revenue',
                'Revenue Currency',
                'Net Due Flat',
                'Net Due Percent',
                'Net Due',
                'Net Due Currency',
                '^$'
            ], ],
        },

        # Hoopla Digital (RSD-8730)
        {
            service          => BookPub::Tracker::Service::HOOPLA_DIGITAL,
            version          => 5,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Model',
                'Date \/ Time',
                'Circ ID',
                'Flex Quantity Sold',
                'Title',
                'Group Title',
                'Artist',
                'Format',
                'ISBN',
                'Publisher',
                'Publisher Id',
                'UPC',
                'Library',
                'Country',
                'State',
                'Postal',
                'Revenue',
                'Revenue Currency',
                'Net Due Flat',
                'Net Due Percent',
                'Net Due',
                'Net Due Currency',
                '^$'
            ], ],
        },

        # Franklin University (RSD-3023)
        {
            service          => BookPub::Tracker::Service::FRANKLIN_UNIVERSITY,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Quantity',
                'AUTHOR',
                'EBOOK TITLE',
                'FIRST DAY CUSTOM ISBN',
                'UNIT COST',
                'TOTAL  COST',
                'UNIT  RETAIL',
                'START DATE',
                'END  DATE',
                '^$'
            ], ],
        },

        # The Vivlio (RSD-3236)
        {
            service          => BookPub::Tracker::Service::VIVLIO,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'DATE VENTE',
                'EDITEUR',
                'EAN',
                'TITRE',
                'FORMAT',
                'PROTECTION',
                'E LIBRAIRE',
                'CANAL',
                'AFFILIE',
                'GLN REVENDEUR',
                'CODE PAYS',
                'PROVINCE',
                'VENTE\-ANNULATION',
                'QUANTITE',
                'PRIX PUBLIC TTC',
                'PRIX PUBLIC HT',
                'CA ACHAT TTC',
                'CA ACHAT HT',
                'BASE TAXABLE FEDERALE',
                'BASE TAXABLE PROVINCE',
                'MONTANT TVA ACHAT',
                'TAUX TVA ACHAT',
                'DEVISE PRIX PUBLIC',
                'OFFRE SPECIALE',
                'TAUX TAXE FEDERALE',
                'MONTANT TAXE FEDERALE',
                'TAUX TAXE PROVINCE',
                'MONTANT TAXE PROVINCE',
                'DEVISE PAIEMENT',
                'TAUX DE CONVERSION',
                'TAUX DE CONVERSION INVERSE',
                'CA HT en .?',
                'MONTANT TOTAL TAXE .?',
                'MONTANT FACTUR.+',
                'PRECOMMANDE',
                '^$'
            ], ],
        },

        # The Vivlio. Version 2 (RSD-6425)
        {
            service          => BookPub::Tracker::Service::VIVLIO,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'DATE OF SALE',
                'EDITOR',
                'EAN',
                'TITLE',
                'FORMAT',
                'PROTECTION',
                'E BOOKSELLER',
                'CHANNEL',
                'AFFILIATED',
                'GLN RESELLER',
                'COUNTRY CODE',
                'PROVINCE',
                'SALE-CANCELLATION',
                'QUANTITY',
                'PUBLIC PRICE INCL. TAXES',
                'PUBLIC PRICE EXCL. TAXES',
                'PURCHASE TURNOVER INCL. TAXES',
                'PURCHASE TURNOVER EXCL. TAXES',
                'FEDERAL TAX BASE',
                'PROVINCE TAX BASE',
                'PURCHASE VAT AMOUNT',
                'PURCHASE VAT RATE',
                'CURRENCY PUBLIC PRICE',
                'SPECIAL OFFER',
                'FEDERAL TAX RATE',
                'FEDERAL TAX AMOUNT',
                'PROVINCE TAX RATE',
                'PROVINCE TAX AMOUNT',
                'CURRENCY PAYMENT',
                'CONVERSION RATE',
                'REVERSE CONVERSION RATE',
                'TURNOVER EXCL. TAX IN €',
                'TOTAL AMOUNT TAX €',
                'AMOUNT OF DIFFUSER INVOICE EXCL. TAX',
                'PREORDER',
                '^$'
            ], ],
        },

        # CSU Fullerton (RSD-3025)
        {
            service          => BookPub::Tracker::Service::CSU_FULLERTON,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'School ID',
                'Name',
                'Quantity',
                'Purchase Price',
                'Amount',
                'Email',
                'Date',
                'UPC',
                'ISBN',
                'Name',
                'VBID',
                'Imprint \/ Publisher',
                'Matrix Item',
                'Preferred Vendor',
                '^$'
            ], ],
        },

        # CSU Fullerton (RSD-4740)
        {
            service          => BookPub::Tracker::Service::CSU_FULLERTON,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Name',
                'Quantity',
                'Purchase Price',
                'Amount',
                'UPC',
                'ISBN',
                'VBID',
                'Imprint \/ Publisher',
                'Preferred Vendor',
                '^$'
            ], ],
        },

        # ALKEM
        {
            service          => BookPub::Tracker::Service::ALKEM,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Territory',
                'ISBN',
                'Title',
                'Author',
                'Publisher',
                'Imprint',
                'Publisher DLP',
                'Units Sold',
                'Units Refunded',
                'Net Units',
                'Discount',
                'Sales Territory',
                'Amount Due Local Currency',
                'Amount Due USD',
                '^$'
            ], ],
        },

        # Librios (RSD-4164)
        {
            service          => BookPub::Tracker::Service::LIBRIOS,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'eISBN',
                'Title',
                'Quantity',
                'List Price',
                'Discount',
                'Net Price',
                'Blmsbry Discount',
                'Net to Rowman',
                'combined? %',
                'List \* combined\%',
                '^$'
            ]],
        },

        # Mofibo (RSD-4177)
        {
            service          => BookPub::Tracker::Service::MOFIBO,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Publisher',
                'PublisherPaymentRuleName',
                'ISBN',
                'Title',
                'Authors',
                'Type',
                'Quarter',
                'Country',
                'List price',
                'Avg\. book price',
                'Quantity',
                'Amount',
                '^$'
            ] ],
        },

        # Barnes & Noble - First Day (RSD-4729)
        {
            service          => BookPub::Tracker::Service::BARNES_NOBLE_FIRST_DAY(),
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Publisher',
                'PO#',
                'Store',
                'Transaction',
                'ISBN',
                'Description',
                'Institution',
                'IA Dept',
                'IA Course',
                'Quantity',
                'Agreed Cost',
                'Ext. Cost',
                '^$'
            ] ],
        },

        # Bookwire
        {
            service          => BookPub::Tracker::Service::BOOKWIRE(),
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Period Start Date',
                'Period End Date',
                'Report Start Date',
                'Report End Date',
                'Account Number',
                'Publisher',
                'Provider',
                'Shop',
                'Sale Country',
                'ISBN',
                'Title',
                'Author',
                'Publisher Order Number',
                'Format',
                'Sale Type',
                'Service Type',
                'Net Retail Price \(Sale Currency\)',
                'Bookwire Income \(Sale Currency\)',
                'Sale Currency',
                'Exchange Rate',
                'Payment Currency',
                'Net Retail Price \(Payment Currency\)',
                'Bookwire Income \(Payment Currency\)',
                'Share Publisher %',
                'Units',
                'Payment Amount Publisher',
                '^$'
            ] ],
        },

        # Juggernaut
        {
            service          => BookPub::Tracker::Service::JUGGERNAUT(),
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Book ID',
                'Book Title',
                'Authors',
                'Publishers',
                'Base Price',
                'Final Price',
                'Paid Android Sales',
                'Paid iOS Sales',
                'Paid Web Sales',
                'Free Sales',
                'Paid Sales',
                'Total Sales',
                'Net Price',
                'Royalty Beneficiary',
                'Revenue',
                'Royalty Rate',
                'Net Payout',
                '^$'
            ] ],
        },

        # Libro.fm V1 (RSD-4197)
        {
            service          => BookPub::Tracker::Service::LIBRO(),
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Publisher',
                'Title',
                'Author',
                'ISBN',
                'Digital a la Carte List Price',
                'Purchase type',
                'Discount',
                'Price Per Unit',
                '\w+? Units',
                '\w+? Dues',
                'Territory',
                '^$'
            ] ],
        },

        # Libro.fm V2 (RSD-9022)
        {
            service          => BookPub::Tracker::Service::LIBRO(),
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Publisher',
                'Title',
                'Author',
                'ISBN',
                'Digital a la Carte List Price',
                'List Price Currency',
                'Purchase type',
                'Discount',
                'Price Per Unit',
                'Currency',
                '\w+? Units',
                '\w+? Dues',
                'Territory',
                'Total in \w{3}',
                '^$'
            ] ],
        },

        # Libro.fm v3 (RSD-10521)
        {
            service          => BookPub::Tracker::Service::LIBRO(),
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Publisher',
                'Title',
                'Author',
                'ISBN',
                'Digital a la Carte List Price',
                'List Price Currency',
                'Purchase type',
                'Discount',
                'Price Per Unit',
                'Currency',
                '\w+? Units',
                '\w+? Dues',
                'Territory',
                '^$'
            ] ],
        },

        # AudiobookStore.com (RSD-5519)
        {
            service          => BookPub::Tracker::Service::AUDIOBOOK_STORE(),
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Title',
                'Author',
                'ISBN',
                'SRP',
                'Qty',
                'Royalty Payout',
                '^$'
            ] ],
        },

        # AudiobookStore.com (RSD-8604)
        {
            service          => BookPub::Tracker::Service::AUDIOBOOK_STORE(),
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Title',
                'Author',
                'ISBN',
                'Country',
                'SRP',
                'Qty',
                'Royalty Payout',
                '^$'
            ] ],
        },

        # Cloudaloud (RRSD-5511)
        {
            service          => BookPub::Tracker::Service::CLOUDALOUD(),
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Date of Sale',
                'ISBN',
                'Title',
                'Author',
                'Units',
                'Currency',
                'Country of Sale',
                'RRP incl VAT',
                'ExVat',
                'Publisher Discount %',
                'Publisher Net Receipts',
                '^$'
            ] ],
        },

        # 1World Content (RSD-5719)
        {
            service          => BookPub::Tracker::Service::ONEWORLD_CONTENT(),
            version          => 1,
            sheet            => 'any',
            lines            => [
                [ undef, undef, undef, '1World Sales Report - Macmillan USA' ],
                ['Publisher Name', 'Macmillan \(Holtzbrinck Publishers, LLC\)', 'From-To-Date', '.*'],
                ['Date', 'School ID', 'School Name', 'ISBN', 'Title', 'Author', '# Units Sold', 'Business Model', '\$ Price', '\$ Total Sale', 'Discount %', '\$ Due Publisher', 'Country', '^$']

            ],
        },

        # Nextory (RSD-5737)
        {
            service          => BookPub::Tracker::Service::NEXTORY(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Period',
                'ISBN',
                'Book_format',
                'Author',
                'Title',
                'Publisher',
                'Currency',
                'Sales_Territory',
                'Net\-price',
                'Count',
                'Sum of cost',
                '^$'
            ] ],
        },

        # BookBeat (RSD-5710)
        {
            service          => BookPub::Tracker::Service::BOOKBEAT(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                undef,
                'ISBN',
                'Author',
                'Title',
                'Format',
                'Publisher',
                'BookBeat Market',
                'Consumptions',
                'Digital List Price excl sales tax',
                'BookBeat Price excl sales tax',
                'Trial Consumption Share',
                'Trial Consumption Discount',
                'Total Amount',
                'Currency',
                '^$'
            ] ],
        },

        # BookBeat (RSD-9966)
        {
            service          => BookPub::Tracker::Service::BOOKBEAT(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                undef,
                'ISBN',
                'Author',
                'Title',
                'Format',
                'Publisher',
                'BookBeat Market',
                'Consumptions',
                'BookBeat Price excl sales tax',
                'Total Amount',
                'Currency',
                '^$'
            ] ],
        },

        # Zebralution (RSD-6112)
        {
            service          => BookPub::Tracker::Service::ZEBRALUTION(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Period',
                'Period Sold',
                'Code-Licensor',
                'Name Publisher',
                'CC',
                'Imprint',
                'LC',
                'Author',
                'Title',
                'EAN',
                'Label Order-Nr',
                'Provider',
                'Shop',
                'Content',
                'Country',
                'Unit',
                'Revenue-EUR',
                'Unit Type',
                'Track Count Bundle',
                'count in bundle',
                '^$'
            ] ],
        },

        # Zebralution v2 (RSD-10974)
        {
            service          => BookPub::Tracker::Service::ZEBRALUTION(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Accounting Period',
                'Account Number',
                'Licensor Contract Name',
                'Label Number',
                'Label Name',
                'DSP Reporting Period',
                'Report Type',
                'DSP Group',
                'Shop Name',
                'Usage Type',
                'Item Type',
                'EAN',
                'Product Display Artist',
                'Product Title',
                'Product Version',
                'Product Catalog Number',
                'ISRC',
                'Track Display Artist',
                'Track Title',
                'Track Version',
                'Country',
                'Income Type',
                'Deduction Type',
                'DSP Refund',
                'DSP Adjustment',
                'Quantity',
                'Quantity Integer',
                'Contract Share',
                'Amount Distributable in \w{3}',
                'Mechanicals Amount in \w{3}',
                'Licensor Amount in \w{3}',
                '^$'
            ] ],
        },

        # Izneo. Version 1 (RSD-6251)
        {
            service          => BookPub::Tracker::Service::IZNEO(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Période de reddition',
                'Editeur',
                'No izneo',
                'Ean1',
                'Ean2',
                'Ean papier',
                'Collection',
                'Série',
                'Tome',
                'Titre',
                'Langue',
                'Période vente',
                'Réseau',
                'Sous_réseau',
                'Plateforme',
                'Canal',
                'Bibliothèque',
                'Libraire',
                'Pays client',
                'DLP',
                'DLP Currency',
                'Publisher share',
                'Publisher share Currency',
                'Prix unitaire ttc devise',
                'Prix unitaire htx devise',
                'Taux taxes',
                'Devise vente',
                'Taux Devise',
                'Prix unitaire ttc euros',
                'Prix unitaire htx euros',
                'Quantite',
                'CA htx euros',
                'CA TTC euros',
                'CA htx devise',
                'Type transaction',
                'Type vente',
                'Affilie',
                '% affilie',
                'Part affilie',
                'Mode répartition',
                'Base répartition euros',
                'Base répartition devise',
                '% Ayant Droit',
                'Part Ayant Droit euros',
                'Part Ayant Droit devises',
                '% Libraire',
                'Part Libraire',
                '% Distribution',
                'Part Distribution',
                '% Izneo',
                'Part Izneo',
                'Devise Reporting',
                '^$'
            ] ],
        },

        # Open Road Media. Version 1 (RSD-6038)
        {
            service          => BookPub::Tracker::Service::OPEN_ROAD_MEDIA(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Month',
                'Retailer',
                'Type',
                'ISBN',
                'Primary ISBN',
                'Country \(ISO\)',
                'List Price',
                'Net Quantity',
                'Unit Price',
                'Proceeds \(USD\)',
                'Firebrand +Price',
                'Client',
                'Publisher',
                'Imprint',
                'Type',
                'Author',
                'Title',
                'BISAC',
                'Status',
                'Country Name',
                'Budget Category',
                'Format',
                'Batch #',
                'Reporting Type',
                'Partner Type',
                '^$'
            ] ],
        },

        # Open Road Media. Version 2 (RSD-8013)
        {
            service          => BookPub::Tracker::Service::OPEN_ROAD_MEDIA(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                   'Month',
                   'Retailer',
                   'Type',
                   'ISBN',
                   'Primary ISBN',
                   'Country \(ISO\)',
                   'List Price',
                   'Net Quantity',
                   'Proceeds \(USD\)',
                   'Firebrand  Price',
                   'Client',
                   'Publisher',
                   'Imprint',
                   'Type',
                   'Author',
                   'Title',
                   'Status',
                   'Country Name',
                   'Format',
                   'Batch #',
                   'Reporting Type',
                   'Partner Type',
                   'On Sale Date',
                   '^$'
            ] ],
        },
        # Open Road Media. Version 2. Alternative sheet (RSD-9922)
        {
            service          => BookPub::Tracker::Service::OPEN_ROAD_MEDIA(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Row Labels',
                    'Title',
                    'Primary Author',
                    'BISAC Status',
                    'Batch #',
                    'Sum of Net Quantity',
                    'Proceeds \(USD\)',
                    'Baseline',
                    'Uplift',
                    'Publisher Share',
                    '^$'
            ] ],
        },

        # Open Road Media. Version 3 (RSD-7988)
        {
            service          => BookPub::Tracker::Service::OPEN_ROAD_MEDIA(),
            version          => 3,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Month',
                'Retailer',
                'Type',
                'ISBN',
                'Primary ISBN',
                'Country \(ISO\)',
                'List Price',
                'Net Quantity',
                'Unit Price',
                'Proceeds \(USD\)',
                'Firebrand  Price',
                'Client',
                'Publisher',
                'Imprint',
                'Type',
                'Author',
                'Title',
                'Status',
                'Country Name',
                'Format',
                'Batch #',
                'Reporting Type',
                'Partner Type',
                'On Sale Date',
                '^$'
            ] ],
        },

        # Open Road Media. Version 4 (RSD-11188)
        {
            service          => BookPub::Tracker::Service::OPEN_ROAD_MEDIA(),
            version          => 4,
            match_on_any_row => 1,
            sheet            => 'any',
            file_name        => qr/Macmillan/i,
            lines            => [ [
                'ISBN',
                'Title',
                'Primary Author',
                'BISAC Status',
                'Batch #',
                'Sum of Net Quantity',
                'Sum of Proceeds \(\w{3}\)',
                'Baseline',
                'Uplift',
                'Publisher Share',
                '^$'
            ] ],
        },

        # Open Road Media. Version 5 (RSD-11280), similar to V4, but with an extended header.
        {
            service          => BookPub::Tracker::Service::OPEN_ROAD_MEDIA(),
            version          => 5,
            match_on_any_row => 1,
            sheet            => 'any',
            file_name        => qr/Macmillan/i,
            lines            => [ [
                'Publisher',
                'ISBN13',
                'Title',
                'Primary Author',
                'BISAC Status',
                'Batch #',
                'Sum of Net Quantity',
                'Sum of Proceeds \(\w{3}\)',
                'Baseline',
                'Uplift',
                'Publisher Share',
            ] ],
        },

        # Open Road Media. Version 6 (RSD-11728), similar to V5, but with the Imprint in column B
        {
            service          => BookPub::Tracker::Service::OPEN_ROAD_MEDIA(),
            version          => 6,
            match_on_any_row => 1,
            sheet            => 'any',
            file_name        => qr/Macmillan/i,
            lines            => [ [
                'Publisher',
                'Imprint',
                'ISBN',
                'Title',
                'Primary Author',
                'BISAC Status',
                'Batch #',
                'Sum of Net Quantity',
                'Sum of Proceeds \(\w{3}\)',
                'Baseline',
                'Uplift',
                'Publisher Share',
                '^$'
            ] ],
        },

        # Blinkist. Version 1 (RSD-6288)
        {
            service          => BookPub::Tracker::Service::BLINKIST(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'row_type',
                'year_quarter',
                'month',
                'currency',
                'record_reference',
                'title',
                'author',
                'imprint',
                'dlp',
                'territory',
                'vat',
                'copies_sold_member',
                'net_proceeds_member',
                'copies_sold_a_la_carte',
                'net_proceeds_a_la_carte',
                'net_proceeds_total',
                'cumulative_member_proceeds_calendar_year',
                'cumulative_a_la_carte_proceeds_calendar_year',
                'cumulative_total_proceeds_calendar_year',
                'revenue_gross_total',
                'revenue_net_total',
                '^$'
            ] ],
        },

        # Blinkist. Version 2 (RSD-6771)
        {
            service          => BookPub::Tracker::Service::BLINKIST(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'row_type',
                'year_quarter',
                'month',
                'currency',
                'record_reference',
                'title',
                'author',
                'publisher',
                'publisher_group',
                'net_dlp',
                'territory',
                'vat',
                'member_sales',
                'member_revenue',
                'member_payout_net',
                'a_la_carte_sales',
                'a_la_carte_revenue',
                'a_la_carte_payout_net',
                'total_sales',
                'total_payout_net',
                '^$'
            ] ],
        },

        # Blinkist. Version 3 (RSD-7730)
        {
            service          => BookPub::Tracker::Service::BLINKIST(),
            version          => 3,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'row type',
                'year\-quarter',
                'month',
                'currency',
                'record reference',
                'isbn',
                'title',
                'author',
                'publisher',
                'publisher group',
                'net dlp',
                'territory',
                'vat',
                'member sales',
                'member revenue',
                'member payout net',
                'a la carte sales',
                'a la carte revenue',
                'a la carte payout net',
                'total sales',
                'payout current period \(net\)',
                '^$'
            ] ],
        },

        # Blinkist. Version 4
        {
            service          => BookPub::Tracker::Service::BLINKIST(),
            version          => 4,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'row type',
                'year\-quarter',
                'month',
                'currency',
                'record reference',
                'isbn',
                'title',
                'author',
                'publisher',
                'publisher group',
                'net dlp',
                'territory',
                'vat',
                'member sales',
                'member revenue',
                'member payout net',
                'a la carte sales',
                'a la carte revenue',
                'a la carte payout net',
                'total sales',
                'reporting_payout_net',
                '^$'
            ] ],
        },

        # Fable. Version 1 (RSD-6356)
        {
            service          => BookPub::Tracker::Service::FABLE(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Line item field name',
                'Report ID#',
                'Report date or date and time',
                'Message function',
                'Sales report type',
                'Report period from',
                'Report period to',
                'NOT USED',
                'Reporting price type',
                'Reporting currency',
                'Class of trade \/ sale',
                'Sales territory',
                'Line item ID#',
                'Sub-agent ID#',
                'Sub-agent name',
                'Transaction date or date and time',
                'Agent.s transaction ID#',
                'Line item reference type',
                'Line item reference ID#',
                'Line item reference date\-time',
                'Main product ID# type',
                'Main product ID#',
                'Alternative product ID# type',
                'Alternative product ID#',
                'Product title',
                'Product author\(s\)',
                'Product description',
                'Publisher ID#',
                'Publisher Name',
                'Imprint Name',
                'Product format',
                'Device type',
                'Gross sold quantity',
                'Returned \/ refunded quantity',
                'Net sold quantity',
                'Non-sale quantity',
                'Non-sale disposal type',
                'Class of trade \/ sale',
                'Sales territory',
                'Unit price',
                'Price type',
                'Price currency',
                'Commission or discount percentage',
                'Gross sold value',
                'Returned \/ refunded value',
                'Net value before fees',
                'Fee type 1',
                'Fee amount 1',
                'Fee source 1',
                'Fee type 2',
                'Fee amount 2',
                'Fee source 2',
                'Fee type 3',
                'Fee amount 3',
                'Fee source 3',
                'Proceeds of sale due to publisher',
                'Total number of Line items',
                'Total gross sold quantity',
                'Total returned \/ refunded quantity',
                'Total net sold quantity',
                'Total non-sale quantity',
                'Total gross sold value',
                'Total returned \/ refunded value',
                'Total net sold value before fees',
                'Total fees of all types',
                'Total proceeds due to publisher',
                'Reporting agent #ID',
                'Reporting agent name',
                'Currency conversion rate',
                'List price',
                'Price type',
                'Ship\-to country',
                'Ship\-to state or province \(\w{2}\)',
                'Ship\-to county',
                'Ship\-to city',
                'Ship\-to district',
                'Ship\-to ZIP or postal code',
                'Ship\-to location ID# type',
                'Ship\-to location ID#',
                'Bill\-to state or province \(\w{2}\)',
                'Bill\-to county',
                'Bill\-to city',
                'Bill\-to district',
                'Bill\-to ZIP or postal code',
                'Bill\-to location ID# type',
                'Bill\-to location ID#',
                'Bill\-to tax registration number',
                'Currency',
                'Sales value',
                'Good \/ service classification',
                'US State Sales Tax tax rate',
                'US State Sales Tax taxable amount',
                'US State Sales Tax tax amount',
                'US County Sales Tax tax rate',
                'US County Sales Tax taxable amount',
                'US County Sales Tax tax amount',
                'US City Sales Tax tax rate',
                'US City Sales Tax taxable amount',
                'US City Sales Tax tax amount',
                'US District Sales Tax tax rate',
                'US District Sales Tax taxable amount',
                'US District Sales Tax tax amount',
                'Non\-US Sales Tax tax type 1',
                'Non\-US Sales Tax tax rate 1',
                'Non\-US Sales Tax taxable amount 1',
                'Non\-US Sales Tax tax amount 1',
                'Non\-US Sales Tax tax type 2',
                'Non\-US Sales Tax tax rate 2',
                'Non\-US Sales Tax taxable amount 2',
                'Non\-US Sales Tax tax amount 2',
                'Non\-US Sales Tax tax type 3',
                'Non\-US Sales Tax tax rate 3',
                'Non\-US Sales Tax taxable amount 3',
                'Non\-US Sales Tax tax amount 3',
                'Total tax collected',
                'Total number of Line items',
                'Total sales value for all lines',
                'Total US State Sales Tax tax amount',
                'Total US County Sales Tax tax amount',
                'Total US City Sales Tax tax amount',
                'Total US District Sales Tax tax amount',
                'Total Non\-US Sales Tax tax amount 1',
                'Total Non\-US Sales Tax tax amount 2',
                'Total Non\-US Sales Tax tax amount 3',
                'Total tax collected, all lines',
                'Reporting agent #ID',
                'Reporting agent name',
                'Sales tax report type',
                'List price',
                'Tax exempt',
                '^$'
            ] ],
        },

        {
            service => BookPub::Tracker::Service::RSFORMAT,
            sheet   => 'any',
            version => 4,
            lines   => [
                [ 'Service Name', undef, 'Total Units', undef, 'Total Payment', undef, 'Payment Currency', undef ],
                [
                    'Sale Start Date',
                    'Sale End Date',
                    'Distributor Name',
                    'ISBN',
                    'Title',
                    'Sub\-Title',
                    'Author Name',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Type',
                    'Epub Type',
                    'Purchase Type',
                    'State',
                    'Postal Code',
                    'Country Code',
                    'Institution',
                    'Duration',
                    'Transaction Category',
                    'Model',
                    'Channel',
                    'Price Type',
                    'Price Type Qualifier',
                    'Units',
                    'Purchase Price',
                    'Purchase Price Currency',
                    'List Price',
                    'List Price Currency',
                    'Publisher Discount',
                    'Tax Amount',
                    'Net Price \(List Currency\)',
                    'Currency Conversion',
                    'Net Price \(Payment Currency\)',
                    'Net Payment'
                ],
            ]
        },

        # BibliU. Version 1 (RSD-5986)
        {
            service          => BookPub::Tracker::Service::BIBLIU(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Institution Invoice Date',
                'PO Number',
                'Title',
                'Physical ISBN\-13',
                'Digital ISBN',
                'Format \- PDF or ePUB',
                'Units Purchased',
                'Units refunded',
                'Net Units',
                'List Price Currency',
                'Digital List Price',
                'Duration pricing discount',
                'Digital List Price Currency',
                'Discount Percentage',
                'Discounted Digital List Price',
                'Bibliotech Fufilment Fee',
                'Net Payment Amount',
                'Payment Amount Currency',
                'Length of Access',
                'Start/End Date',
                'University Name',
                'Course',
                'Country Code \(ISO Code\)',
                'Sale Type',
                'Country',
                'Month',
                '^$'
            ] ],
        },

        # BibliU. Version 2 (RSD-7315)
        {
            service          => BookPub::Tracker::Service::BIBLIU(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'Institution Invoice Date',
                'PO Number',
                'Title',
                'Physical ISBN\-13',
                'Digital ISBN',
                'Format \- PDF or ePUB',
                'Units Purchased',
                'Units refunded',
                'Net Units',
                'List Price Currency',
                'Digital List Price',
                'DLP With Time Discounts',
                'Digital List Price Currency',
                'Discount Percentage',
                'Discounted Digital List Price',
                'Bibliotech Fufilment Fee',
                'Net Payment Amount',
                'Payment Amount Currency',
                'Length of Access',
                'Start/End Date',
                'University Name',
                'Course',
                'Country Code \(ISO Code\)',
                'Sale Type',
                'Country',
                'Month',
                '^$'
            ] ],
        },

        # BibliU. Version 3 (RSD-7952)
        {
            service          => BookPub::Tracker::Service::BIBLIU(),
            version          => 3,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Date',
                    'PO Number',
                    'Title',
                    'Physical ISBN-13',
                    'Digital ISBN',
                    'Format',
                    'Units Purchased',
                    'Units Refunded',
                    'Net Units',
                    'List Price Currency',
                    'Digital List Price',
                    'Volume Discount',
                    'Duration Discount',
                    'DLP after volume\/duration discount',
                    'Publisher Discount Percentage',
                    'Net unit cost \(remittance\)',
                    'Net Payment Amount \(Publisher\)',
                    'Access Length/Duration',
                    'Access \/ Start Date',
                    'University Name',
                    'Course',
                    'Country Code \(ISO Code\)',
                    'Deal Type',
                    '^$'
            ] ],
        },

        #  Yoto. Version 1 (RSD-7230)
        {
            service          => BookPub::Tracker::Service::YOTO(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Title',
                    'ISBN',
                    'Author',
                    'Qty Sold',
                    'List Price',
                    'Gross Revenue',
                    'Ex VAT',
                    'Royalty Due',
                    'Royalty Due \$',
                    '^$'
            ] ],
        },

        #  Yoto. Version 2 (RSD-7455)
        {
            service          => BookPub::Tracker::Service::YOTO(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Title',
                    'ISBN',
                    'Author',
                    'Qty Sold',
                    'List Price',
                    'List Price Currency',
                    'Gross Revenue',
                    'Ex VAT',
                    'Royalty Due',
                    'Royalty Due \$',
                    '^$'
            ] ],
        },

        #  Yoto. Version 3 (RSD-7906)
        {
            service          => BookPub::Tracker::Service::YOTO(),
            version          => 3,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Title',
                    'ISBN',
                    'Author',
                    'Net Quantity',
                    'Currency Code',
                    'List Price',
                    'Net Unit Price',
                    'Royalty Rate %',
                    'Net Royalty Contract Currency',
                    'Net Revenue Contract Currency',
                    '^$'
            ] ],
        },

        #  Yoto. Version 4 (RSD-9946)
        {
            service          => BookPub::Tracker::Service::YOTO(),
            version          => 4,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Content ID',
                    'Title',
                    'Net Quantity',
                    'Net Unit Price',
                    'Currency Code',
                    'Royalty Rate %',
                    'Net Royalty Contract Currency',
                    'Net Revenue Contract Currency',
                    undef,
                    'Total Advances',
                    'Advances Unrecouped at start of period',
                    'Advances Unrecouped at end of period',
                    'Royalty Due',
                    '^$'
            ] ],
        },

        #  Chapter. Version 1 (RSD-7385)
        {
            service          => BookPub::Tracker::Service::CHAPTER(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'ISBN',
                    'Period',
                    'Title',
                    'Publisher',
                    'Format',
                    'Price',
                    'Quantity',
                    'Total settlement ex vat',
                    'CurrencyCode',
                    '^$'
            ] ],
        },

        #  Willo Labs. Version 1 (RSD-7337)
        {
            service          => BookPub::Tracker::Service::WILLO_LABS(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'School',
                'Term',
                'StartDate',
                'Dept',
                'Course',
                'Publisher',
                'Print ISBN',
                'Digital ISBN',
                'Business Model',
                'Distributor \(Willo\) Discount',
                'Title',
                'Author',
                'Content Type',
                'Cost Price \(to SAGE\) \(Net Price to Pub \- IA Net Less Tech Fees\)',
                'List Price',
                'Total Enrollment',
                'Units Sold \(Billed IA Units\)',
                'Returns \/ Cancelled',
                'Amount Remitted to Publisher',
                'Date of Sale',
                'Reseller Name',
                'Country of Sale',
                'State / Province \/ Zip Code of Sale',
                'Currency',
                'Total by School',
                '^$'
            ] ],
        },

        #  Willo Labs. Version 2 (RSD-8866)
        {
            service          => BookPub::Tracker::Service::WILLO_LABS(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'School',
                'Term',
                'StartDate',
                'Dept',
                'Course',
                'Publisher',
                'Print ISBN',
                'Digital ISBN',
                'Business Model',
                'Distributor \(Willo\) Discount',
                'Title',
                'Author',
                'Content Type',
                'Net Price \(with Fees\)',
                'Willo Fees per unit',
                'Cost Price \(to SAGE\) \(Net Price to Pub \- IA Net Less Tech Fees\)',
                'List Price',
                'Total Enrollment',
                'Units Sold \(Billed IA Units\)',
                'Returns \/ Cancelled',
                'Amount Remitted to Publisher',
                'Date of Sale',
                'Reseller Name',
                'Country of Sale',
                'State \/ Province \/ Zip Code of Sale',
                'Currency',
                'Total by School',
                '^$'
            ] ],
        },

        #  Willo Labs. Version 3 (RSD-8867)
        {
            service          => BookPub::Tracker::Service::WILLO_LABS(),
            version          => 3,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                'School',
                'Term',
                'StartDate',
                'Dept',
                'Course',
                'Publisher',
                'Print ISBN',
                'Digital ISBN',
                'Business Model',
                'Distributor \(Willo\) Discount',
                'Title',
                'Author',
                'Content Type',
                'Net Price \(with Fees\)',
                'Willo Fees per unit',
                'Cost Price \(to SAGE\) \(Net Price to Pub \- IA Net Less Tech Fees\)',
                'List Price',
                'Total Enrollment',
                'Units Sold \(Billed IA Units\)',
                'Returns \/ Cancelled',
                'Amount Due from Publisher',
                'Date of Sale',
                'Reseller Name',
                'Country of Sale',
                'State \/ Province \/ Zip Code of Sale',
                'Currency',
                '^$'
            ] ],
        },

        #  Willo Labs. Version 4 (RSD-9518)
        {
            service          => BookPub::Tracker::Service::WILLO_LABS(),
            version          => 4,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'School',
                    'Term',
                    'StartDate',
                    'Dept',
                    'Course',
                    'Duration',
                    'Publisher',
                    'Print ISBN',
                    'Digital ISBN',
                    'Business Model',
                    'Distributor \(Willo\) Discount',
                    'Title',
                    'Author',
                    'Content Type',
                    'Net Price \(with Fees\)',
                    'Willo Fees per unit',
                    'Cost Price \(to SAGE\) \(Net Price to Pub - IA Net Less Tech Fees\)',
                    'List Price',
                    'Total Enrollment',
                    'Units Sold \(Billed IA Units\)',
                    'Returns \/ Cancelled',
                    'Amount Remitted to Publisher',
                    'Date of Sale',
                    'Reseller Name',
                    'Country of Sale',
                    'State \/ Province \/ Zip Code of Sale',
                    'Currency',
                    'Total by School',
                    '^$'
            ] ],
        },

        #  Willo Labs. Version 5 (RSD-9844)
        {
            service          => BookPub::Tracker::Service::WILLO_LABS(),
            version          => 5,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'School',
                    'Term',
                    'StartDate',
                    'Dept',
                    'Course',
                    'Duration',
                    'Publisher',
                    'Print ISBN',
                    'Digital ISBN',
                    'Business Model',
                    'Distributor \(Willo\) Discount',
                    'Title',
                    'Author',
                    'Content Type',
                    'Net Price \(with Fees\)',
                    'Willo Fees per unit',
                    'Cost Price \(to SAGE\) \(Net Price to Pub - IA Net Less Tech Fees\)',
                    'List Price',
                    'Total Enrollment',
                    'Units Sold \(Billed IA Units\)',
                    'Returns \/ Cancelled',
                    'Amount Remitted to Publisher',
                    'Amount Remitted to Publisher USD',
                    'Date of Sale',
                    'Reseller Name',
                    'Country of Sale',
                    'State \/ Province \/ Zip Code of Sale',
                    'Currency',
                    'Total by School USD',
                    'Total by School CAD',
                    '^$'
            ] ],
        },

        # AIDC
        {
            service => BookPub::Tracker::Service::AIDC,
            version => 1,
            lines   => [
                [undef],
                [
                    '^0[1-9]|1[012]\D0[1-9]|[12][0-9]|3[01]\D19|20\d\d$', undef, undef, '\w{10,13}', '\w{10}', undef, undef, undef, undef,
                    undef, undef, undef, undef, undef, undef, undef, undef, undef, '\d{4,6}', undef, undef, undef, undef, undef, undef,
                    undef, undef, undef, undef, undef, undef, undef, undef, undef, undef,     undef, '\d*', '\d*',
                ],
            ],
        },

        # AIDC, now with a header!
        {
            service => BookPub::Tracker::Service::AIDC,
            version => 2,
            lines   => [ [
                    '@ID',
                    'SHIPTO',
                    'FNAME',
                    'LNAME',
                    'SHIPTO ADD1',
                    'SHIPTO ADD2',
                    'SHIPTO ADD3',
                    'CITY',
                    'ST',
                    'ZIP',
                    'COUNTRY',
                    'EMAIL',
                    'PHONE #',
                    'FAX',
                    'PMID',
                    'GROSS UNITS',
                    'GROSS DOLLARS',
                    'RTRN UNITS',
                    'RTRN DOLLARS',
                    'NET UNITS',
                    'NET DOLLARS',
                    'SALE PRICE',
                    'DISC PRICE',
                    'DISC PERC',
                    'BOOK TITLE',
                    'AUTHOR',
                    'MAILCODE',
                    'MLC DESC(?: -----------------)?',
                    'INIT',
                    'INIT CODE DESCRIPTION',
                    'OT',
                    'OTYP.DESC',
                    'SHIPTO MKTSEG',
                    'MKS DESC -----------------',
                    'TYPE',
                    'PTYP CODE DESCRIPTION',
                    'PROD LINE',
                    'PLI CODE DESCRIPTION',
                    'CAT',
                    'PCC CODE DESCRIPTION',
                    'MKT SEG GROUP',
                    'ST MKS GRP DESC|MKS.GRP DESCRIPTION',
                    'ST MKS GRP SAN',
                    'POST DATE',
                ],
            ],
        },

        #  Campus eBookstore v1 (RSD-5829)
        {
            service          => BookPub::Tracker::Service::CAMPUS_EBOOKSTORE(),
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Date',
                    'Order ID',
                    'Bookseller ID',
                    'Bookseller Name',
                    'ISBN',
                    'Title',
                    'QTY',
                    'PubPrice',
                    'Discount',
                    'UnitCost',
                    'TotalCost',
                    'Currency',
                    'ISBN',
                    'Publisher',
                    '^$'
            ] ],
        },

        #  Campus eBookstore v2 (RSD-8740)
        {
            service          => BookPub::Tracker::Service::CAMPUS_EBOOKSTORE(),
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Date',
                    'Order ID',
                    'Bookseller ID',
                    'Bookseller Name',
                    'Bookseller_Institution',
                    'ISBN',
                    'Title',
                    'QTY',
                    'PubPrice',
                    'Discount',
                    'UnitCost',
                    'TotalCost',
                    'Currency',
                    'ISBN',
                    'Publisher',
                    '^$'
            ] ],
        },

        #  Campus eBookstore v3 (RSD-9870)
        {
            service          => BookPub::Tracker::Service::CAMPUS_EBOOKSTORE(),
            version          => 3,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Date',
                    'Order ID',
                    'Bookseller ID',
                    'Bookseller Name',
                    'Bookseller_Institution',
                    'ISBN',
                    'Title',
                    'QTY',
                    'PubPrice',
                    'Discount',
                    'UnitCost',
                    'TotalCost',
                    'Currency',
                    '^$'
            ] ],
        },

        #  Campus eBookstore v4 (RSD-10737) Simial to v3 but with the 'PartID' column
        {
            service          => BookPub::Tracker::Service::CAMPUS_EBOOKSTORE(),
            version          => 4,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Date',
                    'Order ID',
                    'PartID',
                    'Bookseller ID',
                    'Bookseller Name',
                    'Bookseller_Institution',
                    'ISBN',
                    'Title',
                    'QTY',
                    'PubPrice',
                    'Discount',
                    'UnitCost',
                    'TotalCost',
                    'Currency',
                    '^$'
            ] ],
        },

        #  Campus eBookstore v5 (RSD-10761)
        {
            service          => BookPub::Tracker::Service::CAMPUS_EBOOKSTORE(),
            version          => 5,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'PartID',
                    'Bookseller Name',
                    'Bookseller ID',
                    'ISBN',
                    'Title',
                    'qty',
                    'PubPrice',
                    'Discount',
                    'UnitCost',
                    'TotalCost',
                    'ACTUAL TOTAL COST \(Qty  times PubPrice\)',
                    'Sage Payment \(ACTUAL TOTAL COST less 14%\)',
                    'Currency',
                    'SP-CAD',
                    'SP-USD',
                    '^$'
            ] ],
        },

        #  Campus eBookstore v5 (RSD-12108)
        {
            service          => BookPub::Tracker::Service::CAMPUS_EBOOKSTORE(),
            version          => 6,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'PartID',
                    'Bookseller Name',
                    'Bookseller ID',
                    'ISBN',
                    'Alt ISBN',
                    'Title',
                    'qty',
                    'PubPrice',
                    'Discount',
                    'UnitCost',
                    'TotalCost',
                    'ACTUAL TOTAL PUB PRICE \(Qty  times PubPrice\)',
                    'Sage Payment \(ACTUAL TOTAL PUBPRICE less 14%\)',
                    'Currency',
                    'SP-CAD',
                    'SP-USD',
                    '^$'
            ] ],
        },

        # XigXag (RSD-8023), Mmm YYYY audiobook sales tab
        {
            service => BookPub::Tracker::Service::XIG_XAG,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'ISBN',
                    'Title',
                    'Territory',
                    'Qty Sold',
                    'Unit cost',
                    'Total',
                    'VAT',
                    'Notes|^$',
                    '^$'
                ],
            ],
        },

        # XigXag (RSD-8023), Mmm YYYY ebook sales tab
        {
            service => BookPub::Tracker::Service::XIG_XAG,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'eBook ISBN',
                    'Title',
                    'Territory',
                    'Customers accessed ',
                    'Access %',
                    'Unit cost ',
                    'Total',
                    '^$'
                ],
            ],
        },

        # XigXag v2 (RSD-9967)
        {
            service => BookPub::Tracker::Service::XIG_XAG,
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'ISBN',
                    'Title',
                    'Territory',
                    'Qty Sold',
                    'DLP',
                    'DLP ex-tax',
                    'Unit cost',
                    'Total',
                    'VAT',
                    '(?:Notes)*',
                    '^$'
                ],
            ],
        },

        # XigXag v3 (RSD-10103)
        {
            service => BookPub::Tracker::Service::XIG_XAG,
            version          => 3,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'ISBN',
                    'Title',
                    'Author',
                    'Territory',
                    'Sales Model',
                    'Qty Sold',
                    'DLP',
                    'DLP ex-tax',
                    'Unit cost',
                    'Total',
                    'VAT',
                    'Cumulative',
                    'Notes|^$',
                    '^$'
                ],
            ],
        },

        # Chirp (RSD-8225)
        {
            service => BookPub::Tracker::Service::CHIRP,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Product ID',
                    'ISBN',
                    'Title',
                    'Author',
                    'Country',
                    '(?:Currency|Country) Code',
                    'Discount Type',
                    'Digital List Price',
                    'Unit Cost',
                    'Units',
                    'Invoice \$',
                    undef,
                    'Returned Units',
                    'Returned Unit Cost',
                    'Returned \$',
                    '^$'
                ],
            ],
        },

        # Book of the Month, v1 (RSD-8483)
        {
            service => BookPub::Tracker::Service::BOOK_OF_THE_MONTH,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Statement Month Year',
                    'Publisher',
                    'Audiobook Title',
                    'Audiobook Author',
                    'Audiobook ISBN',
                    'List Price',
                    'Quantity of Audiobooks Sold by Title',
                    'Publisher Proceeds Due to Publisher by Title',
                    'Territory of Purchase',
                    'SDP',
                    'Discount by Title',
                    '^$'
                ],
            ],
        },

        # Speechify, v1 (RSD-8481)
        {
            service => BookPub::Tracker::Service::SPEECHIFY,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Reporting price type',
                    'Reporting currency',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date.*',
                    'Agent\'s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date\-time',
                    'Main product.*',
                    'Main product.*',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale.*',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value.*',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees.*',
                    'Total proceeds.*',
                    'Reporting agent #ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    'List price',
                    'Price type',
                    '^$'
                ],
            ],
        },
        # Maruzen-Yushodo, v1 (RSD-8409)
        {
            service => BookPub::Tracker::Service::MARUZEN_YUSHODO,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    '№',
                    'eBookISBN',
                    'Title',
                    'No.of Access',
                    'GBP Digital List Price',
                    'Rate',
                    'GBP Net',
                    'QTY',
                    'GBP Payment Amount',
                    'Order Date',
                    'Customer Name',
                    'country of origin',
                    '^$'
                ],
            ],
        },

        # CEPIEC, v1 (RSD-8731)
        {
            service => BookPub::Tracker::Service::CEPIEC,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'EISBN',
                    'Title',
                    'Contributor',
                    'Publisher',
                    'Currency',
                    'DLP',
                    'concurrent users',
                    'Charge Payable.*',
                    'Institution',
                    'Country Code',
                    '^$'
                ],
            ],
        },

        # HENI, v1 (RSD-8738)
        {
            service => BookPub::Tracker::Service::HENI,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'ISBN',
                    'Title',
                    undef,
                    undef,
                    'Pages Read',
                    'Royalty',
                    '^$'
                ],
            ],
        },

        # ALDI, v1 (RSD-9282)
        {
            service => BookPub::Tracker::Service::ALDI,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'CUSTOMER_NUM',
                    'ONIX_PRODUCT_FORM',
                    'ISBN',
                    'EAN',
                    'TITLE',
                    'ORDER_DATE',
                    'TRANSACTION_UNITS',
                    'TRANSACTION_VALUE',
                    'SALES_TYPE',
                    'TRANSACTION_TYPE',
                    'PUB_VALUE',
                    'DISCOUNT',
                    'COUNTRY_OF_SALE',
                    'COST_VALUE',
                    'PERIOD',
                    '^$'
                ],
            ],
        },

        # 1000 Cookbooks Ltd , v1 (RSD-9256)
        {
            service => BookPub::Tracker::Service::BOOKSIO,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Report ID.',
                    'Report date or date and time',
                    'Message function',
                    'Sales Report Type',
                    'Reporting price type',
                    'Reporting currency',
                    'Report Period From',
                    'Report Period To',
                    'NOT USED',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Line item ID.',
                    'Sub-agent ID.',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent\'s transaction ID.',
                    'Line item reference type',
                    'Line item reference ID.',
                    'Line item rederence date-time',
                    'Main product ID. type',
                    'Main product ID.',
                    'Alternative product ID. type',
                    'Alternative product ID.',
                    'Product Title',
                    'Product Author',
                    'Product description',
                    'Publisher ID.',
                    'Publisher Name',
                    'Imprint Name',
                    'Product Format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned\/Refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade/sale',
                    'Salesterritory',
                    'Unit price',
                    'Price Type',
                    'Price Currency',
                    'Commission percentage',
                    'Gross Sold Value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent .ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    '^$'
                ],
            ],
        },

        # 1000 Cookbooks Ltd , v1 (RSD-9256)
        {
            service => BookPub::Tracker::Service::THOUSAND_COOKBOOKS_LTD,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Territory',
                    'ISBN',
                    'Title',
                    'Author',
                    'Publisher',
                    'Publisher DLP',
                    'Sale Price \(excluding tax\)',
                    'Sale Currency',
                    'Sales tax collected',
                    'Units Sold',
                    'Units Refunded',
                    'Net Units',
                    'Discount',
                    'Sales Territory',
                    'Amount Due Local Currency',
                    'Amount Due \w{3}',
                    '^$'
                ],
            ],
        },

        # Soomo Learning, v1 (RSD-9426)
        {
            service => BookPub::Tracker::Service::SOOMO_LEARNING,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Date',
                    'Course',
                    'Title',
                    'Provisioning',
                    'Per Student Fee',
                    'Total Due',
                    '^$'
                ],
            ],
        },

        # Spotify, v1 (RSD-9667)
        {
            service => BookPub::Tracker::Service::SPOTIFY,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Start Date',
                    'End Date',
                    'Market',
                    'URI',
                    'Content ID',
                    'Title',
                    'Author',
                    'ISBN',
                    'Publisher',
                    'Duration',
                    'SRP Currency',
                    'SRP',
                    'Discount Rate',
                    'Unit Sales',
                    'Rounded Unit Sales',
                    'FX',
                    'Royalty Currency',
                    'Royalty Amount',
                    '^$'
                ],
            ],
        },

        # Spotify, v2 (RSD-10024)
        {
            service => BookPub::Tracker::Service::SPOTIFY,
            version          => 2,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Report ID#',
                    'Report date or date and time',
                    'Message function',
                    'Sales report type',
                    'Report period from',
                    'Report period to',
                    'NOT USED',
                    'Reporting price type',
                    'Reporting currency',
                    'Class of trade sale RENAME',
                    'Sales territory RENAME',
                    'Line item ID#',
                    'Sub-agent ID#',
                    'Sub-agent name',
                    'Transaction date or date and time',
                    'Agent.s transaction ID#',
                    'Line item reference type',
                    'Line item reference ID#',
                    'Line item reference date\-time',
                    'Main product ID# type',
                    'Main product ID#',
                    'Alternative product ID# type',
                    'Alternative product ID#',
                    'Product title',
                    'Product author\(s\)',
                    'Product description',
                    'Publisher ID#',
                    'Publisher Name',
                    'Imprint Name',
                    'Product format',
                    'Device type',
                    'Gross sold quantity',
                    'Returned \/ refunded quantity',
                    'Net sold quantity',
                    'Non-sale quantity',
                    'Non-sale disposal type',
                    'Class of trade \/ sale',
                    'Sales territory',
                    'Unit price',
                    'Price type',
                    'Price currency',
                    'Commission or discount percentage',
                    'Gross sold value',
                    'Returned \/ refunded value',
                    'Net value before fees',
                    'Fee type 1',
                    'Fee amount 1',
                    'Fee source 1',
                    'Fee type 2',
                    'Fee amount 2',
                    'Fee source 2',
                    'Fee type 3',
                    'Fee amount 3',
                    'Fee source 3',
                    'Proceeds of sale due to publisher',
                    'Total number of Line items',
                    'Total gross sold quantity',
                    'Total returned \/ refunded quantity',
                    'Total net sold quantity',
                    'Total non\-sale quantity',
                    'Total gross sold value',
                    'Total returned \/ refunded value',
                    'Total net sold value before fees',
                    'Total fees of all types',
                    'Total proceeds due to publisher',
                    'Reporting agent ID',
                    'Reporting agent name',
                    'Currency conversion rate',
                    '^$'
                ],
            ],
        },

        # Spotify, v3 (RSD-10028)
        {
            service => BookPub::Tracker::Service::SPOTIFY,
            version          => 3,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Start Date',
                    'End Date',
                    'Market',
                    'URI',
                    'Content ID',
                    'Title',
                    'Author',
                    'ISBN',
                    'Publisher',
                    'Duration',
                    'Consumption',
                    'Equivalent units',
                    'Equivalent units rounded',
                    'Royalty Currency',
                    'Royalty Amount',
                    '^$'
                ],
            ],
        },

        # Spotify, v4 (RSD-10023)
        {
            service => BookPub::Tracker::Service::SPOTIFY,
            version          => 4,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Start Date',
                    'End Date',
                    'Market',
                    'URI',
                    'Content ID',
                    'Title',
                    'Author',
                    'ISBN',
                    'Publisher',
                    'Duration',
                    'SRP Currency',
                    'SRP',
                    'Discount Rate',
                    'Unit Sales',
                    'FX',
                    'Royalty Currency',
                    'Royalty Amount',
                    '^$'
                ],
            ],
        },

        # Spotify, v5 (RSD-11222)
        {
            service => BookPub::Tracker::Service::SPOTIFY,
            version          => 5,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Title',
                    'Royalty Rate',
                    'ISBN',
                    'Publisher',
                    'Promotion',
                    'Sale Territory',
                    'Currency',
                    'DLP',
                    'Sales Qty',
                    'Royalty Basis',
                    'Royalty Earned',
                    'Exchange Rate',
                    'Royalty Payable Currency',
                    'Royalty Payable',
                    '^$'
                ],
            ],
        },

        # Spotify, v6 (RSD-12214)
        {
            service => BookPub::Tracker::Service::SPOTIFY,
            version          => 6,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Start Date',
                    'End Date',
                    'Market',
                    'URI',
                    'Content ID',
                    'Title',
                    'Author',
                    'ISBN',
                    'EAN',
                    'Publisher',
                    'Duration',
                    'CPH Currency',
                    'CPH',
                    'Consumption Minutes',
                    'Unit Sales',
                    'Rounded Unit Sales',
                    'FX',
                    'Royalty Currency',
                    'Royalty Amount',
                    '^$'
                ],
            ],
        },

        # Casalini, v1 (RSD-9660), sheet: Institutional sales
        {
            service => BookPub::Tracker::Service::CASALINI,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'Institutional sales',
            lines            => [ [
                    'Distributor',
                    'ID Casalini',
                    'e\-ISBN',
                    'Title',
                    'Quantity',
                    'Price',
                    'Country \(ISO\)',
                    'Sale Model',
                    'Digital DLP',
                    'Discount rate',
                    'DLP multiplier',
                    'Sale type',
                    'Revenue due (to )?the Publisher',
                    'Any sums deducted for taxation',
                    '^$'
                ],
            ],
        },

        # Casalini, v1 (RSD-9660), sheet: Individual sales
        {
            service => BookPub::Tracker::Service::CASALINI,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'Individual sales',
            lines            => [ [
                    'Distributor',
                    'ID Casalini',
                    'e\-ISBN',
                    'Title',
                    'Quantity',
                    'Price',
                    'Country \(ISO\)',
                    'Sale type',
                    'Revenue due the Publisher',
                    '^$'
                ],
            ],
        },

        # Saxo, v1 (RSD-9960)
        {
            service => BookPub::Tracker::Service::SAXO,
            version          => 1,
            match_on_any_row => 1,
            sheet            => 'any',
            lines            => [ [
                    'Period',
                    'ISBN13',
                    'Title',
                    'Authors',
                    'BookType',
                    'Chunks',
                    'SupplierCurrency',
                    'AmountToSettleSupplierCurrency',
                    'AvgPriceSupplierCurrency',
                    '^$'
                ],
            ],
        },

        # Bookt Version 1 (RSD-9105)
        {
            service          => BookPub::Tracker::Service::BOOKT,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Date',
                    'Supplier Name',
                    'E-BOOK ISBN',
                    'Title',
                    'Business Model',
                    'Quantity',
                    'Territory of Sale',
                    'Currency',
                    'RRP',
                    'Total',
                    'Discount',
                    'Total Amount Payable',
                    '^$'
                ],
            ],
        },

        # Pansing Version 1 (RSD-9633)
        {
            service          => BookPub::Tracker::Service::PANSING,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    undef,
                    'ISBN',
                    (undef) x 5,
                    'TITLE',
                    (undef) x 13,
                    'QTY',
                    (undef) x 11,
                    '^$'
                ],
            ],
        },

        # MBS Textbook Exchange (prev: Textbooks.com) Version 1 (RSD-9856, RSD-10621)
        {
            service          => BookPub::Tracker::Service::MBS_TEXTBOOK_EXCHANGE,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'eBook Distributor',
                    'Customer ID',
                    'Customer Name',
                    'Customer Address 1',
                    'Customer Address 2',
                    'Customer Address 3',
                    'Customer Address 4',
                    'Customer City',
                    'Customer State',
                    'Customer Zip',
                    'VBID',
                    'Author',
                    'Title',
                    'eBook List Price',
                    'Net Qty Sold',
                    'Unit Cost',
                    'Reporting Date',
                    'Customer SAN',
                    'MBS Batch #',
                    'MBS Due to Publisher',
                    'MBS Book #',
                    'eBook ISBN 10',
                    'eBook ISBN 13',
                    'Print ISBN 10',
                    'Print ISBN 13',
                    '^$'
                ],
            ],
        },

        # Legible v1 (RSD-10558)
        {
            service          => BookPub::Tracker::Service::LEGIBLE,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'REPORT_DATE',
                    'REPORT_PERIOD_FROM',
                    'REPORT_PERIOD_TO',
                    'SALES_TERRITORY',
                    'RELEASE_ID',
                    'ISBN',
                    'PRODUCT_TITLE',
                    'PRODUCT_AUTHOR',
                    'PUBLISHER_NAME',
                    'IMPRINT_NAME',
                    'LABEL',
                    'PRODUCT_FORMAT',
                    'RELEASE_PRICE_USD',
                    'RELEASE_PRICE_CAD',
                    'REPORTING_CURRENCY',
                    'NET_SOLD_QUANTITY',
                    'CURRENCY_CONVERSION_RATE',
                    'GROSS_SOLD_AMOUNT',
                    'LEGIBLE_COMMISSION_%',
                    'LEGIBLE_COMMISSION_AMOUNT',
                    'PUBLISHER_ROYALTIES_%',
                    'PUBLISHER_ROYALTY_AMOUNT',
                    '^$'
                ],
            ],
        },

        # Bookshop v1 (RSD-10987)
        {
            service          => BookPub::Tracker::Service::BOOKSHOP,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'line_item_id',
                    'ship_to_country',
                    'bill_to_state',
                    'bill_to_county',
                    'bill_to_city',
                    'bill_to_district',
                    'bill_to_zip',
                    'transaction_date',
                    'agent_transaction_id',
                    'main_product_id_type',
                    'main_product_id',
                    'product_title',
                    'product_author',
                    'quantity_sold',
                    'unit_selling_price',
                    'agent_commission_percentage',
                    'currency',
                    'subtotal',
                    'us_state_sales_tax_rate',
                    'us_state_sales_tax_amount',
                    'us_county_sales_tax_rate',
                    'us_county_sales_tax_amount',
                    'us_city_sales_tax_rate',
                    'us_city_sales_tax_amount',
                    'us_district_sales_tax_rate',
                    'us_district_sales_tax_amount',
                    'total_tax_collected',
                    'tax_exempt',
                    'net_to_publisher',
                    '^$'
                ] ],
        },

        # Bookshop v2 (RSD-11108)
        {
            service          => BookPub::Tracker::Service::BOOKSHOP,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'line_item_id',
                    'net_to_publisher',
                    'ship_to_country',
                    'bill_to_state',
                    'bill_to_county',
                    'bill_to_city',
                    'bill_to_district',
                    'bill_to_zip',
                    'transaction_date',
                    'agent_transaction_id',
                    'main_product_id_type',
                    'main_product_id',
                    'product_title',
                    'product_author',
                    'quantity_sold',
                    'unit_selling_price',
                    'agent_commission_percentage',
                    'currency',
                    'subtotal',
                    'us_state_sales_tax_rate',
                    'us_state_sales_tax_amount',
                    'us_county_sales_tax_rate',
                    'us_county_sales_tax_amount',
                    'us_city_sales_tax_rate',
                    'us_city_sales_tax_amount',
                    'us_district_sales_tax_rate',
                    'us_district_sales_tax_amount',
                    'total_tax_collected',
                    'tax_exempt',
                    '^$'
                ] ],
        },

        # Bookshop v3 (RRSD-11814)
        {
            service          => BookPub::Tracker::Service::BOOKSHOP,
            version          => 3,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'order_number',
                    'transaction_date',
                    'ship_to_country',
                    'bill_to_country',
                    'ISBN',
                    'title',
                    'publisher',
                    'author',
                    'rrp_list_price',
                    'sale_price',
                    'publisher_discount_basis',
                    'publisher_discount',
                    'vat_rate',
                    'vat_amount',
                    'units_sold',
                    'units_refunded',
                    'net_units',
                    'gross_receipts',
                    'amount_due',
                    '^$'
                ] ],
        },

        # Bookshop v4 (RSD-11845)
        {
            service          => BookPub::Tracker::Service::BOOKSHOP,
            version          => 4,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'line_item_id',
                'net_to_publisher',
                'ship_to_country',
                'bill_to_state',
                'bill_to_county',
                'bill_to_city',
                'bill_to_district',
                'bill_to_zip',
                'transaction_date',
                'agent_transaction_id',
                'main_product_id_type',
                'main_product_id',
                'product_title',
                'product_author',
                'quantity_sold',
                'unit_selling_price',
                'agent_commission_percentage',
                'currency',
                'actual sales tax \(AL\/MS\)',
                'subtotal',
                'us_state_sales_tax_rate',
                'us_state_sales_tax_amount',
                'us_county_sales_tax_rate',
                'us_county_sales_tax_amount',
                'us_city_sales_tax_rate',
                'us_city_sales_tax_amount',
                'us_district_sales_tax_rate',
                'us_district_sales_tax_amount',
                'total_tax_collected',
                'total sales tax \%',
                'tax_exempt',
                '^$'
                ] ],
        },

        # Bookshop v5 (RSD-12080)
        {
            service          => BookPub::Tracker::Service::BOOKSHOP,
            version          => 5,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'order_number',
                    'transaction_date',
                    'ship_to_country',
                    'bill_to_country',
                    'ISBN',
                    'title',
                    'author',
                    'Currency',
                    'rrp_list_price',
                    'sale_price',
                    'publisher_discount_basis',
                    'publisher_discount',
                    'vat_rate',
                    'vat_amount',
                    'units_sold',
                    'units_refunded',
                    'net_units',
                    'gross_receipts',
                    'amount_due',
                    '^$'
                ] ],
        },

        # JSTOR | ITHAKA v1 (RSD-9416)
        {
            service          => BookPub::Tracker::Service::JSTOR_ITHAKA,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Inv #',
                    'Inv Date',
                    'Order #',
                    'Type',
                    'Participant ID',
                    'Participant',
                    'End Consumer Institution',
                    'End Consumer Add \| Info',
                    'End Consumer Country',
                    'End Consumer Community',
                    'Participant Tier',
                    'ISBN \/ Order No',
                    'Product ID',
                    'Author\(s\)',
                    'Title',
                    'Publisher',
                    'Publisher ID',
                    'Price Type',
                    'Price',
                    'Qty',
                    'Disc %',
                    'Net Price',
                    'Agent Commission',
                    'Tax \/ VAT',
                    'Tax Withholding',
                    'Line Total',
                    'Net Receipt To Publisher',
                    'JSTOR Commission',
                    'Currency',
                    'Report Date',
                    'Invoice Paid Date',
                    '^$'
                ],
            ],
        },

        # JSTOR | ITHAKA v2 (RSD-12287)
        {
            service          => BookPub::Tracker::Service::JSTOR_ITHAKA,
            version          => 2,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                'Type',
                'Bill to Account ID',
                'Bill to Account',
                'End Consumer Institution',
                'Consortium or System\/District',
                'End Consumer Address',
                'End Consumer Country',
                'End Consumer Community',
                'Size Classification',
                'ISBN \/ Order No',
                'Product ID',
                'Author\(s\)',
                'Title',
                'Publisher',
                'Publisher ID',
                'Quantity',
                'Publisher List Price',
                'Final Price Before Sales Tax',
                'Tax \/ VAT',
                'Final Price',
                'Agent Commission',
                'Net Sale Revenue',
                'JSTOR Commission',
                'Publisher Revenue before Withholding Tax',
                'Tax Withholding',
                'Net Receipt To Publisher',
                'Price Type',
                'Currency',
                'Report Date',
                'Invoice Date',
                'Invoice Paid Date',
                'Inv #',
                'Order #',
                '^$'
                ],
            ],
        },

        # Playaway v1 (RSD-11768)
        {
            service          => BookPub::Tracker::Service::PLAYAWAY,
            version          => 1,
            sheet            => 'any',
            match_on_any_row => 1,
            lines            => [ [
                    'Description \(Sales\)',
                    'Publisher',
                    'Return Allowance Rate',
                    'Royalty Rate',
                    'Display #',
                    'ISBN #',
                    'Gross Sales Qty',
                    'Gross Revenue',
                    'Return Allow Est',
                    'Reversal Prior Qtr Return Allow',
                    'Return Qty',
                    'Qtr Actual Returns',
                    'Freight Allow',
                    'Royalty Base',
                    'Royalty Earned',
                    'Prior Remaining Royalty Advance',
                    'Remaining Royalty Advance',
                    'Adjusted Royalty Owed',
                    '^$'
                ],
            ],
        },

    ];    # rules

    return $rules;
}

1;
