Skip to content

Instantly share code, notes, and snippets.

@sumchattering
Forked from avar/30-income-calculon.pl
Created December 17, 2013 13:09

Revisions

  1. @avar avar renamed this gist Sep 15, 2013. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. @avar avar renamed this gist Sep 15, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion 30-income-calculon.pl → 30-income-calculonn.pl
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    # To check whether this is up-to-date with the tax rates go to
    # To check if this is up-to-date with the tax rates go to
    # http://www.expatax.nl/tax_rates_2013.php and see if there's anything
    # newer there.
    use strict;
  3. @avar avar revised this gist Sep 15, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion 30-income-calculon.pl
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    # To check if this is up-to-date with the tax rates go to
    # To check whether this is up-to-date with the tax rates go to
    # http://www.expatax.nl/tax_rates_2013.php and see if there's anything
    # newer there.
    use strict;
  4. @avar avar revised this gist Jul 23, 2013. 1 changed file with 77 additions and 74 deletions.
    151 changes: 77 additions & 74 deletions 30-income-calculon.pl
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,6 @@
    # To check if this is up-to-date with the tax rates go to
    # http://www.expatax.nl/tax_rates_2013.php and see if there's anything
    # newer there.
    use strict;
    use warnings;
    use Text::TabularDisplay;
    @@ -42,9 +45,9 @@ sub taxes_for {
    my @tax_brackets = (

    # difference tax rate
    [ 18_628 => .33 ],
    [ 33_436 - 18_628 => .4195 ],
    [ 55_694 - 33_436 => .42 ],
    [ 19_645 => .37 ],
    [ 33_363 - 19_645 => .2 ],
    [ 55_991 - 33_363 => .42 ],
    [ 0 => .52 ],
    );

    @@ -91,75 +94,75 @@ sub eurofy {
    | (before taxes) | (after taxes) | | (after taxes, | |
    | | | | with 30% ruling) | |
    +----------------+---------------+----------+------------------+----------+
    | 30,000 EUR | 19,082 EUR | 36.4% | 22,857 EUR | 23.8% |
    | 31,000 EUR | 19,662 EUR | 36.6% | 23,564 EUR | 24.0% |
    | 32,000 EUR | 20,243 EUR | 36.7% | 24,270 EUR | 24.2% |
    | 33,000 EUR | 20,823 EUR | 36.9% | 24,976 EUR | 24.3% |
    | 34,000 EUR | 21,403 EUR | 37.0% | 25,683 EUR | 24.5% |
    | 35,000 EUR | 21,983 EUR | 37.2% | 26,389 EUR | 24.6% |
    | 36,000 EUR | 22,563 EUR | 37.3% | 27,095 EUR | 24.7% |
    | 37,000 EUR | 23,143 EUR | 37.4% | 27,802 EUR | 24.9% |
    | 38,000 EUR | 23,723 EUR | 37.6% | 28,508 EUR | 25.0% |
    | 39,000 EUR | 24,303 EUR | 37.7% | 29,214 EUR | 25.1% |
    | 40,000 EUR | 24,883 EUR | 37.8% | 29,921 EUR | 25.2% |
    | 41,000 EUR | 25,463 EUR | 37.9% | 30,627 EUR | 25.3% |
    | 42,000 EUR | 26,043 EUR | 38.0% | 31,333 EUR | 25.4% |
    | 43,000 EUR | 26,623 EUR | 38.1% | 32,040 EUR | 25.5% |
    | 44,000 EUR | 27,203 EUR | 38.2% | 32,746 EUR | 25.6% |
    | 45,000 EUR | 27,783 EUR | 38.3% | 33,452 EUR | 25.7% |
    | 46,000 EUR | 28,363 EUR | 38.3% | 34,159 EUR | 25.7% |
    | 47,000 EUR | 28,943 EUR | 38.4% | 34,865 EUR | 25.8% |
    | 48,000 EUR | 29,523 EUR | 38.5% | 35,571 EUR | 25.9% |
    | 49,000 EUR | 30,103 EUR | 38.6% | 36,277 EUR | 26.0% |
    | 50,000 EUR | 30,683 EUR | 38.6% | 36,983 EUR | 26.0% |
    | 51,000 EUR | 31,263 EUR | 38.7% | 37,689 EUR | 26.1% |
    | 52,000 EUR | 31,843 EUR | 38.8% | 38,395 EUR | 26.2% |
    | 53,000 EUR | 32,423 EUR | 38.8% | 39,101 EUR | 26.2% |
    | 54,000 EUR | 33,003 EUR | 38.9% | 39,807 EUR | 26.3% |
    | 55,000 EUR | 33,583 EUR | 38.9% | 40,513 EUR | 26.3% |
    | 56,000 EUR | 34,133 EUR | 39.0% | 41,219 EUR | 26.4% |
    | 57,000 EUR | 34,613 EUR | 39.3% | 41,925 EUR | 26.4% |
    | 58,000 EUR | 35,093 EUR | 39.5% | 42,631 EUR | 26.5% |
    | 59,000 EUR | 35,573 EUR | 39.7% | 43,337 EUR | 26.5% |
    | 60,000 EUR | 36,053 EUR | 39.9% | 44,043 EUR | 26.6% |
    | 61,000 EUR | 36,533 EUR | 40.1% | 44,749 EUR | 26.6% |
    | 62,000 EUR | 37,013 EUR | 40.3% | 45,455 EUR | 26.7% |
    | 63,000 EUR | 37,493 EUR | 40.5% | 46,161 EUR | 26.7% |
    | 64,000 EUR | 37,973 EUR | 40.7% | 46,867 EUR | 26.8% |
    | 65,000 EUR | 38,453 EUR | 40.8% | 47,573 EUR | 26.8% |
    | 66,000 EUR | 38,933 EUR | 41.0% | 48,279 EUR | 26.8% |
    | 67,000 EUR | 39,413 EUR | 41.2% | 48,985 EUR | 26.9% |
    | 68,000 EUR | 39,893 EUR | 41.3% | 49,691 EUR | 26.9% |
    | 69,000 EUR | 40,373 EUR | 41.5% | 50,397 EUR | 27.0% |
    | 70,000 EUR | 40,853 EUR | 41.6% | 51,103 EUR | 27.0% |
    | 71,000 EUR | 41,333 EUR | 41.8% | 51,809 EUR | 27.0% |
    | 72,000 EUR | 41,813 EUR | 41.9% | 52,515 EUR | 27.1% |
    | 73,000 EUR | 42,293 EUR | 42.1% | 53,221 EUR | 27.1% |
    | 74,000 EUR | 42,773 EUR | 42.2% | 53,927 EUR | 27.1% |
    | 75,000 EUR | 43,253 EUR | 42.3% | 54,633 EUR | 27.2% |
    | 76,000 EUR | 43,733 EUR | 42.5% | 55,339 EUR | 27.2% |
    | 77,000 EUR | 44,213 EUR | 42.6% | 56,045 EUR | 27.2% |
    | 78,000 EUR | 44,693 EUR | 42.7% | 56,751 EUR | 27.2% |
    | 79,000 EUR | 45,173 EUR | 42.8% | 57,457 EUR | 27.3% |
    | 80,000 EUR | 45,653 EUR | 42.9% | 58,133 EUR | 27.3% |
    | 81,000 EUR | 46,133 EUR | 43.0% | 58,769 EUR | 27.4% |
    | 82,000 EUR | 46,613 EUR | 43.2% | 59,405 EUR | 27.6% |
    | 83,000 EUR | 47,093 EUR | 43.3% | 60,041 EUR | 27.7% |
    | 84,000 EUR | 47,573 EUR | 43.4% | 60,677 EUR | 27.8% |
    | 85,000 EUR | 48,053 EUR | 43.5% | 61,313 EUR | 27.9% |
    | 86,000 EUR | 48,533 EUR | 43.6% | 61,949 EUR | 28.0% |
    | 87,000 EUR | 49,013 EUR | 43.7% | 62,585 EUR | 28.1% |
    | 88,000 EUR | 49,493 EUR | 43.8% | 63,221 EUR | 28.2% |
    | 89,000 EUR | 49,973 EUR | 43.9% | 63,857 EUR | 28.3% |
    | 90,000 EUR | 50,453 EUR | 43.9% | 64,493 EUR | 28.3% |
    | 91,000 EUR | 50,933 EUR | 44.0% | 65,129 EUR | 28.4% |
    | 92,000 EUR | 51,413 EUR | 44.1% | 65,765 EUR | 28.5% |
    | 93,000 EUR | 51,893 EUR | 44.2% | 66,401 EUR | 28.6% |
    | 94,000 EUR | 52,373 EUR | 44.3% | 67,037 EUR | 28.7% |
    | 95,000 EUR | 52,853 EUR | 44.4% | 67,673 EUR | 28.8% |
    | 96,000 EUR | 53,333 EUR | 44.4% | 68,309 EUR | 28.8% |
    | 97,000 EUR | 53,813 EUR | 44.5% | 68,945 EUR | 28.9% |
    | 98,000 EUR | 54,293 EUR | 44.6% | 69,581 EUR | 29.0% |
    | 99,000 EUR | 54,773 EUR | 44.7% | 70,217 EUR | 29.1% |
    | 100,000 EUR | 55,253 EUR | 44.7% | 70,853 EUR | 29.1% |
    | 30,000 EUR | 20,660 EUR | 31.1% | 22,460 EUR | 25.1% |
    | 31,000 EUR | 21,460 EUR | 30.8% | 23,320 EUR | 24.8% |
    | 32,000 EUR | 22,260 EUR | 30.4% | 24,180 EUR | 24.4% |
    | 33,000 EUR | 23,060 EUR | 30.1% | 25,040 EUR | 24.1% |
    | 34,000 EUR | 23,720 EUR | 30.2% | 25,900 EUR | 23.8% |
    | 35,000 EUR | 24,300 EUR | 30.6% | 26,760 EUR | 23.5% |
    | 36,000 EUR | 24,880 EUR | 30.9% | 27,620 EUR | 23.3% |
    | 37,000 EUR | 25,460 EUR | 31.2% | 28,480 EUR | 23.0% |
    | 38,000 EUR | 26,040 EUR | 31.5% | 29,340 EUR | 22.8% |
    | 39,000 EUR | 26,620 EUR | 31.7% | 30,200 EUR | 22.6% |
    | 40,000 EUR | 27,200 EUR | 32.0% | 31,060 EUR | 22.3% |
    | 41,000 EUR | 27,780 EUR | 32.2% | 31,920 EUR | 22.1% |
    | 42,000 EUR | 28,360 EUR | 32.5% | 32,780 EUR | 22.0% |
    | 43,000 EUR | 28,940 EUR | 32.7% | 33,640 EUR | 21.8% |
    | 44,000 EUR | 29,520 EUR | 32.9% | 34,500 EUR | 21.6% |
    | 45,000 EUR | 30,100 EUR | 33.1% | 35,360 EUR | 21.4% |
    | 46,000 EUR | 30,680 EUR | 33.3% | 36,220 EUR | 21.3% |
    | 47,000 EUR | 31,260 EUR | 33.5% | 37,080 EUR | 21.1% |
    | 48,000 EUR | 31,840 EUR | 33.7% | 37,888 EUR | 21.1% |
    | 49,000 EUR | 32,420 EUR | 33.8% | 38,594 EUR | 21.2% |
    | 50,000 EUR | 33,000 EUR | 34.0% | 39,300 EUR | 21.4% |
    | 51,000 EUR | 33,580 EUR | 34.2% | 40,006 EUR | 21.6% |
    | 52,000 EUR | 34,160 EUR | 34.3% | 40,712 EUR | 21.7% |
    | 53,000 EUR | 34,740 EUR | 34.5% | 41,418 EUR | 21.9% |
    | 54,000 EUR | 35,320 EUR | 34.6% | 42,124 EUR | 22.0% |
    | 55,000 EUR | 35,900 EUR | 34.7% | 42,830 EUR | 22.1% |
    | 56,000 EUR | 36,479 EUR | 34.9% | 43,536 EUR | 22.3% |
    | 57,000 EUR | 36,959 EUR | 35.2% | 44,242 EUR | 22.4% |
    | 58,000 EUR | 37,439 EUR | 35.4% | 44,948 EUR | 22.5% |
    | 59,000 EUR | 37,919 EUR | 35.7% | 45,654 EUR | 22.6% |
    | 60,000 EUR | 38,399 EUR | 36.0% | 46,360 EUR | 22.7% |
    | 61,000 EUR | 38,879 EUR | 36.3% | 47,066 EUR | 22.8% |
    | 62,000 EUR | 39,359 EUR | 36.5% | 47,772 EUR | 22.9% |
    | 63,000 EUR | 39,839 EUR | 36.8% | 48,478 EUR | 23.1% |
    | 64,000 EUR | 40,319 EUR | 37.0% | 49,184 EUR | 23.1% |
    | 65,000 EUR | 40,799 EUR | 37.2% | 49,890 EUR | 23.2% |
    | 66,000 EUR | 41,279 EUR | 37.5% | 50,596 EUR | 23.3% |
    | 67,000 EUR | 41,759 EUR | 37.7% | 51,302 EUR | 23.4% |
    | 68,000 EUR | 42,239 EUR | 37.9% | 52,008 EUR | 23.5% |
    | 69,000 EUR | 42,719 EUR | 38.1% | 52,714 EUR | 23.6% |
    | 70,000 EUR | 43,199 EUR | 38.3% | 53,420 EUR | 23.7% |
    | 71,000 EUR | 43,679 EUR | 38.5% | 54,126 EUR | 23.8% |
    | 72,000 EUR | 44,159 EUR | 38.7% | 54,832 EUR | 23.8% |
    | 73,000 EUR | 44,639 EUR | 38.9% | 55,538 EUR | 23.9% |
    | 74,000 EUR | 45,119 EUR | 39.0% | 56,244 EUR | 24.0% |
    | 75,000 EUR | 45,599 EUR | 39.2% | 56,950 EUR | 24.1% |
    | 76,000 EUR | 46,079 EUR | 39.4% | 57,656 EUR | 24.1% |
    | 77,000 EUR | 46,559 EUR | 39.5% | 58,362 EUR | 24.2% |
    | 78,000 EUR | 47,039 EUR | 39.7% | 59,068 EUR | 24.3% |
    | 79,000 EUR | 47,519 EUR | 39.8% | 59,774 EUR | 24.3% |
    | 80,000 EUR | 47,999 EUR | 40.0% | 60,479 EUR | 24.4% |
    | 81,000 EUR | 48,479 EUR | 40.1% | 61,115 EUR | 24.5% |
    | 82,000 EUR | 48,959 EUR | 40.3% | 61,751 EUR | 24.7% |
    | 83,000 EUR | 49,439 EUR | 40.4% | 62,387 EUR | 24.8% |
    | 84,000 EUR | 49,919 EUR | 40.6% | 63,023 EUR | 25.0% |
    | 85,000 EUR | 50,399 EUR | 40.7% | 63,659 EUR | 25.1% |
    | 86,000 EUR | 50,879 EUR | 40.8% | 64,295 EUR | 25.2% |
    | 87,000 EUR | 51,359 EUR | 41.0% | 64,931 EUR | 25.4% |
    | 88,000 EUR | 51,839 EUR | 41.1% | 65,567 EUR | 25.5% |
    | 89,000 EUR | 52,319 EUR | 41.2% | 66,203 EUR | 25.6% |
    | 90,000 EUR | 52,799 EUR | 41.3% | 66,839 EUR | 25.7% |
    | 91,000 EUR | 53,279 EUR | 41.5% | 67,475 EUR | 25.9% |
    | 92,000 EUR | 53,759 EUR | 41.6% | 68,111 EUR | 26.0% |
    | 93,000 EUR | 54,239 EUR | 41.7% | 68,747 EUR | 26.1% |
    | 94,000 EUR | 54,719 EUR | 41.8% | 69,383 EUR | 26.2% |
    | 95,000 EUR | 55,199 EUR | 41.9% | 70,019 EUR | 26.3% |
    | 96,000 EUR | 55,679 EUR | 42.0% | 70,655 EUR | 26.4% |
    | 97,000 EUR | 56,159 EUR | 42.1% | 71,291 EUR | 26.5% |
    | 98,000 EUR | 56,639 EUR | 42.2% | 71,927 EUR | 26.6% |
    | 99,000 EUR | 57,119 EUR | 42.3% | 72,563 EUR | 26.7% |
    | 100,000 EUR | 57,599 EUR | 42.4% | 73,199 EUR | 26.8% |
    +----------------+---------------+----------+------------------+----------+
  5. @avar avar revised this gist Oct 11, 2011. 1 changed file with 118 additions and 178 deletions.
    296 changes: 118 additions & 178 deletions 30-income-calculon.pl
    Original file line number Diff line number Diff line change
    @@ -3,223 +3,163 @@
    use Text::TabularDisplay;
    use List::Util qw(sum);

    my $start = 1_000 || $ARGV[0];
    my $end = 100_000 || $ARGV[1];
    my $step = 1_000 || $ARGV[2];
    my $start = 30_000 || $ARGV[0];
    my $end = 100_000 || $ARGV[1];
    my $step = 1_000 || $ARGV[2];

    my @data;
    for (my $salary = $start; $salary <= $end; $salary += $step) {
    for ( my $salary = $start ; $salary <= $end ; $salary += $step ) {

    push @data => [
    # Your Gross income
    eurofy($salary),

    # Without 30% ruling
    eurofy(
    tax_each_bucket(
    divide_income_into_tax_buckets($salary),
    )
    ),

    # With a 30% ruling you only pay taxes on 70% of your income
    eurofy(
    sum(
    tax_each_bucket(
    divide_income_into_tax_buckets($salary * 0.70),
    ),
    $salary * 0.30
    ),
    ),
    eurofy( $salary - taxes_for($salary) ),

    percentify( taxes_for($salary), $salary ),

    # With 30% ruling
    eurofy( $salary - taxes_for( $salary * .7 ) ),

    percentify( taxes_for( $salary * .7 ), $salary ),
    ];
    }

    my $table = Text::TabularDisplay->new(
    "Gross income\n(before taxes)",
    "Net income\n(after taxes)",
    "Tax rate",
    "Net income\n(after taxes,\nwith 30% ruling)",
    "Tax rate",
    );
    $table->add(@$_) for @data;
    print $table->render, "\n";
    exit;

    sub divide_income_into_tax_buckets {
    my ($income) = @_;

    # The tax rate According to Abigail:
    ## 33% for income up to EUR 18.628
    ## 41.95% for income between EUR 18.628 and EUR 33.436
    ## 42% for income between EUR 33.436 and EUR 55.694
    ## 52% for income above EUR 55.694
    my %bucket_checks = (
    33 => sub { $_[0] < 18_628 },
    '41.95' => sub { $_[0] >= 18_628 and $_[0] < 33_436 },
    42 => sub { $_[0] >= 33_436 and $_[0] < 55_694 },
    52 => sub { $_[0] >= 55_694 }
    sub taxes_for {
    my $income = shift;
    my @tax_brackets = (

    # difference tax rate
    [ 18_628 => .33 ],
    [ 33_436 - 18_628 => .4195 ],
    [ 55_694 - 33_436 => .42 ],
    [ 0 => .52 ],
    );

    my %bucket;
    for my $amount (1..$income) {
    my $in_bucket = 0;
    for my $bucket (keys %bucket_checks) {
    # Brute-force to keep your house warm during winter in
    # Amsterdam.
    if ($bucket_checks{$bucket}->($amount)) {
    die "panic: We already have amount <$amount> in a bucket" if $in_bucket;
    $bucket{$bucket}++;
    $in_bucket = 1;
    }
    my $money_left = $income;
    my $taxes = 0;
    foreach my $bracket (@tax_brackets) {
    my ( $progressive_amount, $taxes_for ) = @$bracket;
    my $taxable_amount = $money_left;
    if ( $taxable_amount > $progressive_amount ) {
    $taxable_amount = $progressive_amount if $progressive_amount;
    }
    $money_left -= $taxable_amount;
    $taxes += $taxable_amount * $taxes_for;
    last unless $money_left;
    }

    return %bucket;
    }

    sub tax_each_bucket {
    my (%bucket) = @_;

    return sum(
    map {
    apply_tax_rate(
    $bucket{$_},
    $_,
    );
    } keys %bucket
    );
    }

    sub apply_tax_rate {
    my ($number, $tax_rate) = @_;

    return ($number * ((100 - $tax_rate) / 100));
    return $taxes;
    }

    # From perlfaq5
    sub commify {
    local $_ = shift;
    local $_ = shift;
    1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
    return $_;
    }

    sub percentify {
    my ( $amount, $total ) = @_;
    return sprintf "%.1f%%" => ( ( 100 * $amount ) / $total );
    }

    sub eurofy {
    my ($number) = @_;

    # Round it
    $number = int $number;

    return sprintf("%s EUR", commify($number));
    }

    sub percentify {
    my ($number) = @_;

    return sprintf "%.02f%%", $number;
    return sprintf( "%s EUR", commify($number) );
    }

    __DATA__
    $ perl 30-income-calculon.pl
    +----------------+---------------+------------------+
    | Gross income | Net income | Net income |
    | (before taxes) | (after taxes) | (after taxes, |
    | | | with 30% ruling) |
    +----------------+---------------+------------------+
    | 1,000 EUR | 670 EUR | 769 EUR |
    | 2,000 EUR | 1,340 EUR | 1,538 EUR |
    | 3,000 EUR | 2,010 EUR | 2,307 EUR |
    | 4,000 EUR | 2,680 EUR | 3,076 EUR |
    | 5,000 EUR | 3,350 EUR | 3,845 EUR |
    | 6,000 EUR | 4,020 EUR | 4,614 EUR |
    | 7,000 EUR | 4,690 EUR | 5,383 EUR |
    | 8,000 EUR | 5,360 EUR | 6,152 EUR |
    | 9,000 EUR | 6,030 EUR | 6,921 EUR |
    | 10,000 EUR | 6,700 EUR | 7,690 EUR |
    | 11,000 EUR | 7,370 EUR | 8,458 EUR |
    | 12,000 EUR | 8,040 EUR | 9,228 EUR |
    | 13,000 EUR | 8,710 EUR | 9,997 EUR |
    | 14,000 EUR | 9,380 EUR | 10,766 EUR |
    | 15,000 EUR | 10,050 EUR | 11,535 EUR |
    | 16,000 EUR | 10,720 EUR | 12,304 EUR |
    | 17,000 EUR | 11,390 EUR | 13,073 EUR |
    | 18,000 EUR | 12,060 EUR | 13,842 EUR |
    | 19,000 EUR | 12,696 EUR | 14,611 EUR |
    | 20,000 EUR | 13,277 EUR | 15,380 EUR |
    | 21,000 EUR | 13,857 EUR | 16,148 EUR |
    | 22,000 EUR | 14,438 EUR | 16,917 EUR |
    | 23,000 EUR | 15,018 EUR | 17,686 EUR |
    | 24,000 EUR | 15,599 EUR | 18,456 EUR |
    | 25,000 EUR | 16,179 EUR | 19,225 EUR |
    | 26,000 EUR | 16,760 EUR | 19,994 EUR |
    | 27,000 EUR | 17,340 EUR | 20,738 EUR |
    | 28,000 EUR | 17,921 EUR | 21,444 EUR |
    | 29,000 EUR | 18,501 EUR | 22,151 EUR |
    | 30,000 EUR | 19,082 EUR | 22,857 EUR |
    | 31,000 EUR | 19,662 EUR | 23,563 EUR |
    | 32,000 EUR | 20,243 EUR | 24,270 EUR |
    | 33,000 EUR | 20,823 EUR | 24,976 EUR |
    | 34,000 EUR | 21,403 EUR | 25,683 EUR |
    | 35,000 EUR | 21,983 EUR | 26,389 EUR |
    | 36,000 EUR | 22,563 EUR | 27,095 EUR |
    | 37,000 EUR | 23,143 EUR | 27,802 EUR |
    | 38,000 EUR | 23,723 EUR | 28,508 EUR |
    | 39,000 EUR | 24,303 EUR | 29,214 EUR |
    | 40,000 EUR | 24,883 EUR | 29,921 EUR |
    | 41,000 EUR | 25,463 EUR | 30,626 EUR |
    | 42,000 EUR | 26,043 EUR | 31,333 EUR |
    | 43,000 EUR | 26,623 EUR | 32,039 EUR |
    | 44,000 EUR | 27,203 EUR | 32,745 EUR |
    | 45,000 EUR | 27,783 EUR | 33,452 EUR |
    | 46,000 EUR | 28,363 EUR | 34,158 EUR |
    | 47,000 EUR | 28,943 EUR | 34,865 EUR |
    | 48,000 EUR | 29,523 EUR | 35,571 EUR |
    | 49,000 EUR | 30,103 EUR | 36,277 EUR |
    | 50,000 EUR | 30,683 EUR | 36,983 EUR |
    | 51,000 EUR | 31,263 EUR | 37,689 EUR |
    | 52,000 EUR | 31,843 EUR | 38,395 EUR |
    | 53,000 EUR | 32,423 EUR | 39,101 EUR |
    | 54,000 EUR | 33,003 EUR | 39,807 EUR |
    | 55,000 EUR | 33,583 EUR | 40,513 EUR |
    | 56,000 EUR | 34,133 EUR | 41,219 EUR |
    | 57,000 EUR | 34,613 EUR | 41,925 EUR |
    | 58,000 EUR | 35,093 EUR | 42,631 EUR |
    | 59,000 EUR | 35,573 EUR | 43,337 EUR |
    | 60,000 EUR | 36,053 EUR | 44,043 EUR |
    | 61,000 EUR | 36,533 EUR | 44,749 EUR |
    | 62,000 EUR | 37,013 EUR | 45,455 EUR |
    | 63,000 EUR | 37,493 EUR | 46,161 EUR |
    | 64,000 EUR | 37,973 EUR | 46,867 EUR |
    | 65,000 EUR | 38,453 EUR | 47,573 EUR |
    | 66,000 EUR | 38,933 EUR | 48,279 EUR |
    | 67,000 EUR | 39,413 EUR | 48,985 EUR |
    | 68,000 EUR | 39,893 EUR | 49,691 EUR |
    | 69,000 EUR | 40,373 EUR | 50,397 EUR |
    | 70,000 EUR | 40,853 EUR | 51,103 EUR |
    | 71,000 EUR | 41,333 EUR | 51,809 EUR |
    | 72,000 EUR | 41,813 EUR | 52,515 EUR |
    | 73,000 EUR | 42,293 EUR | 53,221 EUR |
    | 74,000 EUR | 42,773 EUR | 53,927 EUR |
    | 75,000 EUR | 43,253 EUR | 54,633 EUR |
    | 76,000 EUR | 43,733 EUR | 55,339 EUR |
    | 77,000 EUR | 44,213 EUR | 56,045 EUR |
    | 78,000 EUR | 44,693 EUR | 56,751 EUR |
    | 79,000 EUR | 45,173 EUR | 57,457 EUR |
    | 80,000 EUR | 45,653 EUR | 58,133 EUR |
    | 81,000 EUR | 46,133 EUR | 58,769 EUR |
    | 82,000 EUR | 46,613 EUR | 59,404 EUR |
    | 83,000 EUR | 47,093 EUR | 60,040 EUR |
    | 84,000 EUR | 47,573 EUR | 60,676 EUR |
    | 85,000 EUR | 48,053 EUR | 61,312 EUR |
    | 86,000 EUR | 48,533 EUR | 61,948 EUR |
    | 87,000 EUR | 49,013 EUR | 62,584 EUR |
    | 88,000 EUR | 49,493 EUR | 63,220 EUR |
    | 89,000 EUR | 49,973 EUR | 63,856 EUR |
    | 90,000 EUR | 50,453 EUR | 64,492 EUR |
    | 91,000 EUR | 50,933 EUR | 65,128 EUR |
    | 92,000 EUR | 51,413 EUR | 65,764 EUR |
    | 93,000 EUR | 51,893 EUR | 66,400 EUR |
    | 94,000 EUR | 52,373 EUR | 67,037 EUR |
    | 95,000 EUR | 52,853 EUR | 67,673 EUR |
    | 96,000 EUR | 53,333 EUR | 68,309 EUR |
    | 97,000 EUR | 53,813 EUR | 68,945 EUR |
    | 98,000 EUR | 54,293 EUR | 69,581 EUR |
    | 99,000 EUR | 54,773 EUR | 70,217 EUR |
    | 100,000 EUR | 55,253 EUR | 70,853 EUR |
    +----------------+---------------+------------------+
    +----------------+---------------+----------+------------------+----------+
    | Gross income | Net income | Tax rate | Net income | Tax rate |
    | (before taxes) | (after taxes) | | (after taxes, | |
    | | | | with 30% ruling) | |
    +----------------+---------------+----------+------------------+----------+
    | 30,000 EUR | 19,082 EUR | 36.4% | 22,857 EUR | 23.8% |
    | 31,000 EUR | 19,662 EUR | 36.6% | 23,564 EUR | 24.0% |
    | 32,000 EUR | 20,243 EUR | 36.7% | 24,270 EUR | 24.2% |
    | 33,000 EUR | 20,823 EUR | 36.9% | 24,976 EUR | 24.3% |
    | 34,000 EUR | 21,403 EUR | 37.0% | 25,683 EUR | 24.5% |
    | 35,000 EUR | 21,983 EUR | 37.2% | 26,389 EUR | 24.6% |
    | 36,000 EUR | 22,563 EUR | 37.3% | 27,095 EUR | 24.7% |
    | 37,000 EUR | 23,143 EUR | 37.4% | 27,802 EUR | 24.9% |
    | 38,000 EUR | 23,723 EUR | 37.6% | 28,508 EUR | 25.0% |
    | 39,000 EUR | 24,303 EUR | 37.7% | 29,214 EUR | 25.1% |
    | 40,000 EUR | 24,883 EUR | 37.8% | 29,921 EUR | 25.2% |
    | 41,000 EUR | 25,463 EUR | 37.9% | 30,627 EUR | 25.3% |
    | 42,000 EUR | 26,043 EUR | 38.0% | 31,333 EUR | 25.4% |
    | 43,000 EUR | 26,623 EUR | 38.1% | 32,040 EUR | 25.5% |
    | 44,000 EUR | 27,203 EUR | 38.2% | 32,746 EUR | 25.6% |
    | 45,000 EUR | 27,783 EUR | 38.3% | 33,452 EUR | 25.7% |
    | 46,000 EUR | 28,363 EUR | 38.3% | 34,159 EUR | 25.7% |
    | 47,000 EUR | 28,943 EUR | 38.4% | 34,865 EUR | 25.8% |
    | 48,000 EUR | 29,523 EUR | 38.5% | 35,571 EUR | 25.9% |
    | 49,000 EUR | 30,103 EUR | 38.6% | 36,277 EUR | 26.0% |
    | 50,000 EUR | 30,683 EUR | 38.6% | 36,983 EUR | 26.0% |
    | 51,000 EUR | 31,263 EUR | 38.7% | 37,689 EUR | 26.1% |
    | 52,000 EUR | 31,843 EUR | 38.8% | 38,395 EUR | 26.2% |
    | 53,000 EUR | 32,423 EUR | 38.8% | 39,101 EUR | 26.2% |
    | 54,000 EUR | 33,003 EUR | 38.9% | 39,807 EUR | 26.3% |
    | 55,000 EUR | 33,583 EUR | 38.9% | 40,513 EUR | 26.3% |
    | 56,000 EUR | 34,133 EUR | 39.0% | 41,219 EUR | 26.4% |
    | 57,000 EUR | 34,613 EUR | 39.3% | 41,925 EUR | 26.4% |
    | 58,000 EUR | 35,093 EUR | 39.5% | 42,631 EUR | 26.5% |
    | 59,000 EUR | 35,573 EUR | 39.7% | 43,337 EUR | 26.5% |
    | 60,000 EUR | 36,053 EUR | 39.9% | 44,043 EUR | 26.6% |
    | 61,000 EUR | 36,533 EUR | 40.1% | 44,749 EUR | 26.6% |
    | 62,000 EUR | 37,013 EUR | 40.3% | 45,455 EUR | 26.7% |
    | 63,000 EUR | 37,493 EUR | 40.5% | 46,161 EUR | 26.7% |
    | 64,000 EUR | 37,973 EUR | 40.7% | 46,867 EUR | 26.8% |
    | 65,000 EUR | 38,453 EUR | 40.8% | 47,573 EUR | 26.8% |
    | 66,000 EUR | 38,933 EUR | 41.0% | 48,279 EUR | 26.8% |
    | 67,000 EUR | 39,413 EUR | 41.2% | 48,985 EUR | 26.9% |
    | 68,000 EUR | 39,893 EUR | 41.3% | 49,691 EUR | 26.9% |
    | 69,000 EUR | 40,373 EUR | 41.5% | 50,397 EUR | 27.0% |
    | 70,000 EUR | 40,853 EUR | 41.6% | 51,103 EUR | 27.0% |
    | 71,000 EUR | 41,333 EUR | 41.8% | 51,809 EUR | 27.0% |
    | 72,000 EUR | 41,813 EUR | 41.9% | 52,515 EUR | 27.1% |
    | 73,000 EUR | 42,293 EUR | 42.1% | 53,221 EUR | 27.1% |
    | 74,000 EUR | 42,773 EUR | 42.2% | 53,927 EUR | 27.1% |
    | 75,000 EUR | 43,253 EUR | 42.3% | 54,633 EUR | 27.2% |
    | 76,000 EUR | 43,733 EUR | 42.5% | 55,339 EUR | 27.2% |
    | 77,000 EUR | 44,213 EUR | 42.6% | 56,045 EUR | 27.2% |
    | 78,000 EUR | 44,693 EUR | 42.7% | 56,751 EUR | 27.2% |
    | 79,000 EUR | 45,173 EUR | 42.8% | 57,457 EUR | 27.3% |
    | 80,000 EUR | 45,653 EUR | 42.9% | 58,133 EUR | 27.3% |
    | 81,000 EUR | 46,133 EUR | 43.0% | 58,769 EUR | 27.4% |
    | 82,000 EUR | 46,613 EUR | 43.2% | 59,405 EUR | 27.6% |
    | 83,000 EUR | 47,093 EUR | 43.3% | 60,041 EUR | 27.7% |
    | 84,000 EUR | 47,573 EUR | 43.4% | 60,677 EUR | 27.8% |
    | 85,000 EUR | 48,053 EUR | 43.5% | 61,313 EUR | 27.9% |
    | 86,000 EUR | 48,533 EUR | 43.6% | 61,949 EUR | 28.0% |
    | 87,000 EUR | 49,013 EUR | 43.7% | 62,585 EUR | 28.1% |
    | 88,000 EUR | 49,493 EUR | 43.8% | 63,221 EUR | 28.2% |
    | 89,000 EUR | 49,973 EUR | 43.9% | 63,857 EUR | 28.3% |
    | 90,000 EUR | 50,453 EUR | 43.9% | 64,493 EUR | 28.3% |
    | 91,000 EUR | 50,933 EUR | 44.0% | 65,129 EUR | 28.4% |
    | 92,000 EUR | 51,413 EUR | 44.1% | 65,765 EUR | 28.5% |
    | 93,000 EUR | 51,893 EUR | 44.2% | 66,401 EUR | 28.6% |
    | 94,000 EUR | 52,373 EUR | 44.3% | 67,037 EUR | 28.7% |
    | 95,000 EUR | 52,853 EUR | 44.4% | 67,673 EUR | 28.8% |
    | 96,000 EUR | 53,333 EUR | 44.4% | 68,309 EUR | 28.8% |
    | 97,000 EUR | 53,813 EUR | 44.5% | 68,945 EUR | 28.9% |
    | 98,000 EUR | 54,293 EUR | 44.6% | 69,581 EUR | 29.0% |
    | 99,000 EUR | 54,773 EUR | 44.7% | 70,217 EUR | 29.1% |
    | 100,000 EUR | 55,253 EUR | 44.7% | 70,853 EUR | 29.1% |
    +----------------+---------------+----------+------------------+----------+
  6. @avar avar revised this gist Oct 11, 2011. 1 changed file with 110 additions and 107 deletions.
    217 changes: 110 additions & 107 deletions 30-income-calculon.pl
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    use strict;
    use warnings;
    use Text::Table;
    use Text::TabularDisplay;
    use List::Util qw(sum);

    my $start = 1_000 || $ARGV[0];
    @@ -33,13 +33,13 @@
    ];
    }

    my $table = Text::Table->new(
    my $table = Text::TabularDisplay->new(
    "Gross income\n(before taxes)",
    "Net income\n(after taxes)",
    "Net income\n(after taxes,\nwith 30% ruling)",
    );
    $table->load(@data);
    print $table;
    $table->add(@$_) for @data;
    print $table->render, "\n";
    exit;

    sub divide_income_into_tax_buckets {
    @@ -117,106 +117,109 @@ sub percentify {

    __DATA__
    $ perl 30-income-calculon.pl
    Gross income Net income Net income
    (before taxes) (after taxes) (after taxes,
    with 30% ruling)
    1,000 EUR 670 EUR 769 EUR
    2,000 EUR 1,340 EUR 1,538 EUR
    3,000 EUR 2,010 EUR 2,307 EUR
    4,000 EUR 2,680 EUR 3,076 EUR
    5,000 EUR 3,350 EUR 3,845 EUR
    6,000 EUR 4,020 EUR 4,614 EUR
    7,000 EUR 4,690 EUR 5,383 EUR
    8,000 EUR 5,360 EUR 6,152 EUR
    9,000 EUR 6,030 EUR 6,921 EUR
    10,000 EUR 6,700 EUR 7,690 EUR
    11,000 EUR 7,370 EUR 8,458 EUR
    12,000 EUR 8,040 EUR 9,228 EUR
    13,000 EUR 8,710 EUR 9,997 EUR
    14,000 EUR 9,380 EUR 10,766 EUR
    15,000 EUR 10,050 EUR 11,535 EUR
    16,000 EUR 10,720 EUR 12,304 EUR
    17,000 EUR 11,390 EUR 13,073 EUR
    18,000 EUR 12,060 EUR 13,842 EUR
    19,000 EUR 12,696 EUR 14,611 EUR
    20,000 EUR 13,277 EUR 15,380 EUR
    21,000 EUR 13,857 EUR 16,148 EUR
    22,000 EUR 14,438 EUR 16,917 EUR
    23,000 EUR 15,018 EUR 17,686 EUR
    24,000 EUR 15,599 EUR 18,456 EUR
    25,000 EUR 16,179 EUR 19,225 EUR
    26,000 EUR 16,760 EUR 19,994 EUR
    27,000 EUR 17,340 EUR 20,738 EUR
    28,000 EUR 17,921 EUR 21,444 EUR
    29,000 EUR 18,501 EUR 22,151 EUR
    30,000 EUR 19,082 EUR 22,857 EUR
    31,000 EUR 19,662 EUR 23,563 EUR
    32,000 EUR 20,243 EUR 24,270 EUR
    33,000 EUR 20,823 EUR 24,976 EUR
    34,000 EUR 21,403 EUR 25,683 EUR
    35,000 EUR 21,983 EUR 26,389 EUR
    36,000 EUR 22,563 EUR 27,095 EUR
    37,000 EUR 23,143 EUR 27,802 EUR
    38,000 EUR 23,723 EUR 28,508 EUR
    39,000 EUR 24,303 EUR 29,214 EUR
    40,000 EUR 24,883 EUR 29,921 EUR
    41,000 EUR 25,463 EUR 30,626 EUR
    42,000 EUR 26,043 EUR 31,333 EUR
    43,000 EUR 26,623 EUR 32,039 EUR
    44,000 EUR 27,203 EUR 32,745 EUR
    45,000 EUR 27,783 EUR 33,452 EUR
    46,000 EUR 28,363 EUR 34,158 EUR
    47,000 EUR 28,943 EUR 34,865 EUR
    48,000 EUR 29,523 EUR 35,571 EUR
    49,000 EUR 30,103 EUR 36,277 EUR
    50,000 EUR 30,683 EUR 36,983 EUR
    51,000 EUR 31,263 EUR 37,689 EUR
    52,000 EUR 31,843 EUR 38,395 EUR
    53,000 EUR 32,423 EUR 39,101 EUR
    54,000 EUR 33,003 EUR 39,807 EUR
    55,000 EUR 33,583 EUR 40,513 EUR
    56,000 EUR 34,133 EUR 41,219 EUR
    57,000 EUR 34,613 EUR 41,925 EUR
    58,000 EUR 35,093 EUR 42,631 EUR
    59,000 EUR 35,573 EUR 43,337 EUR
    60,000 EUR 36,053 EUR 44,043 EUR
    61,000 EUR 36,533 EUR 44,749 EUR
    62,000 EUR 37,013 EUR 45,455 EUR
    63,000 EUR 37,493 EUR 46,161 EUR
    64,000 EUR 37,973 EUR 46,867 EUR
    65,000 EUR 38,453 EUR 47,573 EUR
    66,000 EUR 38,933 EUR 48,279 EUR
    67,000 EUR 39,413 EUR 48,985 EUR
    68,000 EUR 39,893 EUR 49,691 EUR
    69,000 EUR 40,373 EUR 50,397 EUR
    70,000 EUR 40,853 EUR 51,103 EUR
    71,000 EUR 41,333 EUR 51,809 EUR
    72,000 EUR 41,813 EUR 52,515 EUR
    73,000 EUR 42,293 EUR 53,221 EUR
    74,000 EUR 42,773 EUR 53,927 EUR
    75,000 EUR 43,253 EUR 54,633 EUR
    76,000 EUR 43,733 EUR 55,339 EUR
    77,000 EUR 44,213 EUR 56,045 EUR
    78,000 EUR 44,693 EUR 56,751 EUR
    79,000 EUR 45,173 EUR 57,457 EUR
    80,000 EUR 45,653 EUR 58,133 EUR
    81,000 EUR 46,133 EUR 58,769 EUR
    82,000 EUR 46,613 EUR 59,404 EUR
    83,000 EUR 47,093 EUR 60,040 EUR
    84,000 EUR 47,573 EUR 60,676 EUR
    85,000 EUR 48,053 EUR 61,312 EUR
    86,000 EUR 48,533 EUR 61,948 EUR
    87,000 EUR 49,013 EUR 62,584 EUR
    88,000 EUR 49,493 EUR 63,220 EUR
    89,000 EUR 49,973 EUR 63,856 EUR
    90,000 EUR 50,453 EUR 64,492 EUR
    91,000 EUR 50,933 EUR 65,128 EUR
    92,000 EUR 51,413 EUR 65,764 EUR
    93,000 EUR 51,893 EUR 66,400 EUR
    94,000 EUR 52,373 EUR 67,037 EUR
    95,000 EUR 52,853 EUR 67,673 EUR
    96,000 EUR 53,333 EUR 68,309 EUR
    97,000 EUR 53,813 EUR 68,945 EUR
    98,000 EUR 54,293 EUR 69,581 EUR
    99,000 EUR 54,773 EUR 70,217 EUR
    100,000 EUR 55,253 EUR 70,853 EUR
    +----------------+---------------+------------------+
    | Gross income | Net income | Net income |
    | (before taxes) | (after taxes) | (after taxes, |
    | | | with 30% ruling) |
    +----------------+---------------+------------------+
    | 1,000 EUR | 670 EUR | 769 EUR |
    | 2,000 EUR | 1,340 EUR | 1,538 EUR |
    | 3,000 EUR | 2,010 EUR | 2,307 EUR |
    | 4,000 EUR | 2,680 EUR | 3,076 EUR |
    | 5,000 EUR | 3,350 EUR | 3,845 EUR |
    | 6,000 EUR | 4,020 EUR | 4,614 EUR |
    | 7,000 EUR | 4,690 EUR | 5,383 EUR |
    | 8,000 EUR | 5,360 EUR | 6,152 EUR |
    | 9,000 EUR | 6,030 EUR | 6,921 EUR |
    | 10,000 EUR | 6,700 EUR | 7,690 EUR |
    | 11,000 EUR | 7,370 EUR | 8,458 EUR |
    | 12,000 EUR | 8,040 EUR | 9,228 EUR |
    | 13,000 EUR | 8,710 EUR | 9,997 EUR |
    | 14,000 EUR | 9,380 EUR | 10,766 EUR |
    | 15,000 EUR | 10,050 EUR | 11,535 EUR |
    | 16,000 EUR | 10,720 EUR | 12,304 EUR |
    | 17,000 EUR | 11,390 EUR | 13,073 EUR |
    | 18,000 EUR | 12,060 EUR | 13,842 EUR |
    | 19,000 EUR | 12,696 EUR | 14,611 EUR |
    | 20,000 EUR | 13,277 EUR | 15,380 EUR |
    | 21,000 EUR | 13,857 EUR | 16,148 EUR |
    | 22,000 EUR | 14,438 EUR | 16,917 EUR |
    | 23,000 EUR | 15,018 EUR | 17,686 EUR |
    | 24,000 EUR | 15,599 EUR | 18,456 EUR |
    | 25,000 EUR | 16,179 EUR | 19,225 EUR |
    | 26,000 EUR | 16,760 EUR | 19,994 EUR |
    | 27,000 EUR | 17,340 EUR | 20,738 EUR |
    | 28,000 EUR | 17,921 EUR | 21,444 EUR |
    | 29,000 EUR | 18,501 EUR | 22,151 EUR |
    | 30,000 EUR | 19,082 EUR | 22,857 EUR |
    | 31,000 EUR | 19,662 EUR | 23,563 EUR |
    | 32,000 EUR | 20,243 EUR | 24,270 EUR |
    | 33,000 EUR | 20,823 EUR | 24,976 EUR |
    | 34,000 EUR | 21,403 EUR | 25,683 EUR |
    | 35,000 EUR | 21,983 EUR | 26,389 EUR |
    | 36,000 EUR | 22,563 EUR | 27,095 EUR |
    | 37,000 EUR | 23,143 EUR | 27,802 EUR |
    | 38,000 EUR | 23,723 EUR | 28,508 EUR |
    | 39,000 EUR | 24,303 EUR | 29,214 EUR |
    | 40,000 EUR | 24,883 EUR | 29,921 EUR |
    | 41,000 EUR | 25,463 EUR | 30,626 EUR |
    | 42,000 EUR | 26,043 EUR | 31,333 EUR |
    | 43,000 EUR | 26,623 EUR | 32,039 EUR |
    | 44,000 EUR | 27,203 EUR | 32,745 EUR |
    | 45,000 EUR | 27,783 EUR | 33,452 EUR |
    | 46,000 EUR | 28,363 EUR | 34,158 EUR |
    | 47,000 EUR | 28,943 EUR | 34,865 EUR |
    | 48,000 EUR | 29,523 EUR | 35,571 EUR |
    | 49,000 EUR | 30,103 EUR | 36,277 EUR |
    | 50,000 EUR | 30,683 EUR | 36,983 EUR |
    | 51,000 EUR | 31,263 EUR | 37,689 EUR |
    | 52,000 EUR | 31,843 EUR | 38,395 EUR |
    | 53,000 EUR | 32,423 EUR | 39,101 EUR |
    | 54,000 EUR | 33,003 EUR | 39,807 EUR |
    | 55,000 EUR | 33,583 EUR | 40,513 EUR |
    | 56,000 EUR | 34,133 EUR | 41,219 EUR |
    | 57,000 EUR | 34,613 EUR | 41,925 EUR |
    | 58,000 EUR | 35,093 EUR | 42,631 EUR |
    | 59,000 EUR | 35,573 EUR | 43,337 EUR |
    | 60,000 EUR | 36,053 EUR | 44,043 EUR |
    | 61,000 EUR | 36,533 EUR | 44,749 EUR |
    | 62,000 EUR | 37,013 EUR | 45,455 EUR |
    | 63,000 EUR | 37,493 EUR | 46,161 EUR |
    | 64,000 EUR | 37,973 EUR | 46,867 EUR |
    | 65,000 EUR | 38,453 EUR | 47,573 EUR |
    | 66,000 EUR | 38,933 EUR | 48,279 EUR |
    | 67,000 EUR | 39,413 EUR | 48,985 EUR |
    | 68,000 EUR | 39,893 EUR | 49,691 EUR |
    | 69,000 EUR | 40,373 EUR | 50,397 EUR |
    | 70,000 EUR | 40,853 EUR | 51,103 EUR |
    | 71,000 EUR | 41,333 EUR | 51,809 EUR |
    | 72,000 EUR | 41,813 EUR | 52,515 EUR |
    | 73,000 EUR | 42,293 EUR | 53,221 EUR |
    | 74,000 EUR | 42,773 EUR | 53,927 EUR |
    | 75,000 EUR | 43,253 EUR | 54,633 EUR |
    | 76,000 EUR | 43,733 EUR | 55,339 EUR |
    | 77,000 EUR | 44,213 EUR | 56,045 EUR |
    | 78,000 EUR | 44,693 EUR | 56,751 EUR |
    | 79,000 EUR | 45,173 EUR | 57,457 EUR |
    | 80,000 EUR | 45,653 EUR | 58,133 EUR |
    | 81,000 EUR | 46,133 EUR | 58,769 EUR |
    | 82,000 EUR | 46,613 EUR | 59,404 EUR |
    | 83,000 EUR | 47,093 EUR | 60,040 EUR |
    | 84,000 EUR | 47,573 EUR | 60,676 EUR |
    | 85,000 EUR | 48,053 EUR | 61,312 EUR |
    | 86,000 EUR | 48,533 EUR | 61,948 EUR |
    | 87,000 EUR | 49,013 EUR | 62,584 EUR |
    | 88,000 EUR | 49,493 EUR | 63,220 EUR |
    | 89,000 EUR | 49,973 EUR | 63,856 EUR |
    | 90,000 EUR | 50,453 EUR | 64,492 EUR |
    | 91,000 EUR | 50,933 EUR | 65,128 EUR |
    | 92,000 EUR | 51,413 EUR | 65,764 EUR |
    | 93,000 EUR | 51,893 EUR | 66,400 EUR |
    | 94,000 EUR | 52,373 EUR | 67,037 EUR |
    | 95,000 EUR | 52,853 EUR | 67,673 EUR |
    | 96,000 EUR | 53,333 EUR | 68,309 EUR |
    | 97,000 EUR | 53,813 EUR | 68,945 EUR |
    | 98,000 EUR | 54,293 EUR | 69,581 EUR |
    | 99,000 EUR | 54,773 EUR | 70,217 EUR |
    | 100,000 EUR | 55,253 EUR | 70,853 EUR |
    +----------------+---------------+------------------+
  7. @avar avar revised this gist Oct 11, 2011. 1 changed file with 83 additions and 83 deletions.
    166 changes: 83 additions & 83 deletions 30-income-calculon.pl
    Original file line number Diff line number Diff line change
    @@ -52,7 +52,7 @@ sub divide_income_into_tax_buckets {
    ## 52% for income above EUR 55.694
    my %bucket_checks = (
    33 => sub { $_[0] < 18_628 },
    '44.95' => sub { $_[0] >= 18_628 and $_[0] < 33_436 },
    '41.95' => sub { $_[0] >= 18_628 and $_[0] < 33_436 },
    42 => sub { $_[0] >= 33_436 and $_[0] < 55_694 },
    52 => sub { $_[0] >= 55_694 }
    );
    @@ -138,85 +138,85 @@ sub percentify {
    16,000 EUR 10,720 EUR 12,304 EUR
    17,000 EUR 11,390 EUR 13,073 EUR
    18,000 EUR 12,060 EUR 13,842 EUR
    19,000 EUR 12,685 EUR 14,611 EUR
    20,000 EUR 13,235 EUR 15,380 EUR
    21,000 EUR 13,786 EUR 16,148 EUR
    22,000 EUR 14,336 EUR 16,917 EUR
    23,000 EUR 14,887 EUR 17,686 EUR
    24,000 EUR 15,437 EUR 18,456 EUR
    25,000 EUR 15,988 EUR 19,225 EUR
    26,000 EUR 16,538 EUR 19,994 EUR
    27,000 EUR 17,089 EUR 20,730 EUR
    28,000 EUR 17,639 EUR 21,415 EUR
    29,000 EUR 18,190 EUR 22,101 EUR
    30,000 EUR 18,740 EUR 22,786 EUR
    31,000 EUR 19,291 EUR 23,471 EUR
    32,000 EUR 19,841 EUR 24,157 EUR
    33,000 EUR 20,392 EUR 24,842 EUR
    34,000 EUR 20,959 EUR 25,527 EUR
    35,000 EUR 21,539 EUR 26,213 EUR
    36,000 EUR 22,119 EUR 26,898 EUR
    37,000 EUR 22,699 EUR 27,583 EUR
    38,000 EUR 23,279 EUR 28,269 EUR
    39,000 EUR 23,859 EUR 28,954 EUR
    40,000 EUR 24,439 EUR 29,639 EUR
    41,000 EUR 25,019 EUR 30,324 EUR
    42,000 EUR 25,599 EUR 31,010 EUR
    43,000 EUR 26,179 EUR 31,695 EUR
    44,000 EUR 26,759 EUR 32,380 EUR
    45,000 EUR 27,339 EUR 33,066 EUR
    46,000 EUR 27,919 EUR 33,751 EUR
    47,000 EUR 28,499 EUR 34,437 EUR
    48,000 EUR 29,079 EUR 35,127 EUR
    49,000 EUR 29,659 EUR 35,833 EUR
    50,000 EUR 30,239 EUR 36,539 EUR
    51,000 EUR 30,819 EUR 37,245 EUR
    52,000 EUR 31,399 EUR 37,951 EUR
    53,000 EUR 31,979 EUR 38,657 EUR
    54,000 EUR 32,559 EUR 39,363 EUR
    55,000 EUR 33,139 EUR 40,069 EUR
    56,000 EUR 33,688 EUR 40,775 EUR
    57,000 EUR 34,168 EUR 41,481 EUR
    58,000 EUR 34,648 EUR 42,187 EUR
    59,000 EUR 35,128 EUR 42,893 EUR
    60,000 EUR 35,608 EUR 43,599 EUR
    61,000 EUR 36,088 EUR 44,305 EUR
    62,000 EUR 36,568 EUR 45,011 EUR
    63,000 EUR 37,048 EUR 45,717 EUR
    64,000 EUR 37,528 EUR 46,423 EUR
    65,000 EUR 38,008 EUR 47,129 EUR
    66,000 EUR 38,488 EUR 47,835 EUR
    67,000 EUR 38,968 EUR 48,541 EUR
    68,000 EUR 39,448 EUR 49,247 EUR
    69,000 EUR 39,928 EUR 49,953 EUR
    70,000 EUR 40,408 EUR 50,659 EUR
    71,000 EUR 40,888 EUR 51,365 EUR
    72,000 EUR 41,368 EUR 52,071 EUR
    73,000 EUR 41,848 EUR 52,777 EUR
    74,000 EUR 42,328 EUR 53,483 EUR
    75,000 EUR 42,808 EUR 54,189 EUR
    76,000 EUR 43,288 EUR 54,895 EUR
    77,000 EUR 43,768 EUR 55,601 EUR
    78,000 EUR 44,248 EUR 56,307 EUR
    79,000 EUR 44,728 EUR 57,013 EUR
    80,000 EUR 45,208 EUR 57,688 EUR
    81,000 EUR 45,688 EUR 58,324 EUR
    82,000 EUR 46,168 EUR 58,960 EUR
    83,000 EUR 46,648 EUR 59,596 EUR
    84,000 EUR 47,128 EUR 60,232 EUR
    85,000 EUR 47,608 EUR 60,868 EUR
    86,000 EUR 48,088 EUR 61,504 EUR
    87,000 EUR 48,568 EUR 62,140 EUR
    88,000 EUR 49,048 EUR 62,776 EUR
    89,000 EUR 49,528 EUR 63,412 EUR
    90,000 EUR 50,008 EUR 64,048 EUR
    91,000 EUR 50,488 EUR 64,684 EUR
    92,000 EUR 50,968 EUR 65,320 EUR
    93,000 EUR 51,448 EUR 65,956 EUR
    94,000 EUR 51,928 EUR 66,592 EUR
    95,000 EUR 52,408 EUR 67,228 EUR
    96,000 EUR 52,888 EUR 67,864 EUR
    97,000 EUR 53,368 EUR 68,500 EUR
    98,000 EUR 53,848 EUR 69,136 EUR
    99,000 EUR 54,328 EUR 69,772 EUR
    100,000 EUR 54,808 EUR 70,408 EUR
    19,000 EUR 12,696 EUR 14,611 EUR
    20,000 EUR 13,277 EUR 15,380 EUR
    21,000 EUR 13,857 EUR 16,148 EUR
    22,000 EUR 14,438 EUR 16,917 EUR
    23,000 EUR 15,018 EUR 17,686 EUR
    24,000 EUR 15,599 EUR 18,456 EUR
    25,000 EUR 16,179 EUR 19,225 EUR
    26,000 EUR 16,760 EUR 19,994 EUR
    27,000 EUR 17,340 EUR 20,738 EUR
    28,000 EUR 17,921 EUR 21,444 EUR
    29,000 EUR 18,501 EUR 22,151 EUR
    30,000 EUR 19,082 EUR 22,857 EUR
    31,000 EUR 19,662 EUR 23,563 EUR
    32,000 EUR 20,243 EUR 24,270 EUR
    33,000 EUR 20,823 EUR 24,976 EUR
    34,000 EUR 21,403 EUR 25,683 EUR
    35,000 EUR 21,983 EUR 26,389 EUR
    36,000 EUR 22,563 EUR 27,095 EUR
    37,000 EUR 23,143 EUR 27,802 EUR
    38,000 EUR 23,723 EUR 28,508 EUR
    39,000 EUR 24,303 EUR 29,214 EUR
    40,000 EUR 24,883 EUR 29,921 EUR
    41,000 EUR 25,463 EUR 30,626 EUR
    42,000 EUR 26,043 EUR 31,333 EUR
    43,000 EUR 26,623 EUR 32,039 EUR
    44,000 EUR 27,203 EUR 32,745 EUR
    45,000 EUR 27,783 EUR 33,452 EUR
    46,000 EUR 28,363 EUR 34,158 EUR
    47,000 EUR 28,943 EUR 34,865 EUR
    48,000 EUR 29,523 EUR 35,571 EUR
    49,000 EUR 30,103 EUR 36,277 EUR
    50,000 EUR 30,683 EUR 36,983 EUR
    51,000 EUR 31,263 EUR 37,689 EUR
    52,000 EUR 31,843 EUR 38,395 EUR
    53,000 EUR 32,423 EUR 39,101 EUR
    54,000 EUR 33,003 EUR 39,807 EUR
    55,000 EUR 33,583 EUR 40,513 EUR
    56,000 EUR 34,133 EUR 41,219 EUR
    57,000 EUR 34,613 EUR 41,925 EUR
    58,000 EUR 35,093 EUR 42,631 EUR
    59,000 EUR 35,573 EUR 43,337 EUR
    60,000 EUR 36,053 EUR 44,043 EUR
    61,000 EUR 36,533 EUR 44,749 EUR
    62,000 EUR 37,013 EUR 45,455 EUR
    63,000 EUR 37,493 EUR 46,161 EUR
    64,000 EUR 37,973 EUR 46,867 EUR
    65,000 EUR 38,453 EUR 47,573 EUR
    66,000 EUR 38,933 EUR 48,279 EUR
    67,000 EUR 39,413 EUR 48,985 EUR
    68,000 EUR 39,893 EUR 49,691 EUR
    69,000 EUR 40,373 EUR 50,397 EUR
    70,000 EUR 40,853 EUR 51,103 EUR
    71,000 EUR 41,333 EUR 51,809 EUR
    72,000 EUR 41,813 EUR 52,515 EUR
    73,000 EUR 42,293 EUR 53,221 EUR
    74,000 EUR 42,773 EUR 53,927 EUR
    75,000 EUR 43,253 EUR 54,633 EUR
    76,000 EUR 43,733 EUR 55,339 EUR
    77,000 EUR 44,213 EUR 56,045 EUR
    78,000 EUR 44,693 EUR 56,751 EUR
    79,000 EUR 45,173 EUR 57,457 EUR
    80,000 EUR 45,653 EUR 58,133 EUR
    81,000 EUR 46,133 EUR 58,769 EUR
    82,000 EUR 46,613 EUR 59,404 EUR
    83,000 EUR 47,093 EUR 60,040 EUR
    84,000 EUR 47,573 EUR 60,676 EUR
    85,000 EUR 48,053 EUR 61,312 EUR
    86,000 EUR 48,533 EUR 61,948 EUR
    87,000 EUR 49,013 EUR 62,584 EUR
    88,000 EUR 49,493 EUR 63,220 EUR
    89,000 EUR 49,973 EUR 63,856 EUR
    90,000 EUR 50,453 EUR 64,492 EUR
    91,000 EUR 50,933 EUR 65,128 EUR
    92,000 EUR 51,413 EUR 65,764 EUR
    93,000 EUR 51,893 EUR 66,400 EUR
    94,000 EUR 52,373 EUR 67,037 EUR
    95,000 EUR 52,853 EUR 67,673 EUR
    96,000 EUR 53,333 EUR 68,309 EUR
    97,000 EUR 53,813 EUR 68,945 EUR
    98,000 EUR 54,293 EUR 69,581 EUR
    99,000 EUR 54,773 EUR 70,217 EUR
    100,000 EUR 55,253 EUR 70,853 EUR
  8. @avar avar revised this gist Oct 11, 2011. 1 changed file with 153 additions and 147 deletions.
    300 changes: 153 additions & 147 deletions 30-income-calculon.pl
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,7 @@
    use strict;
    use warnings;
    use Text::Table;
    use List::Util qw(sum);

    my $start = 1_000 || $ARGV[0];
    my $end = 100_000 || $ARGV[1];
    @@ -15,71 +16,81 @@

    # Without 30% ruling
    eurofy(
    salary_at_tax_rate(
    $salary,
    tax_rate($salary, 0),
    ),
    tax_each_bucket(
    divide_income_into_tax_buckets($salary),
    )
    ),
    percentify(tax_rate($salary, 0)),

    # With 30% ruling
    # With a 30% ruling you only pay taxes on 70% of your income
    eurofy(
    # You only pay taxes on 70% of your income
    salary_at_tax_rate(
    $salary * 0.70,
    tax_rate($salary, 1),
    )
    +
    # You get the other 30% for free
    $salary * 0.30,
    sum(
    tax_each_bucket(
    divide_income_into_tax_buckets($salary * 0.70),
    ),
    $salary * 0.30
    ),
    ),
    percentify(tax_rate($salary, 1)),
    ];
    }

    my $table = Text::Table->new(
    "Gross income\n(before taxes)",
    "Net income\n(after taxes)",
    "tax rate",
    "Net income\n(after taxes,\nwith 30% ruling)",
    "tax rate\nwith 30% ruling",
    );
    $table->load(@data);
    print $table;
    exit;

    sub tax_rate {
    my ($income, $has_30_percent_ruling) = @_;

    # If you have a 1000 Euros per month you get 300 EUR tax free and
    # pay income tax is if you'd have made 700 EUR.
    $income *= 0.70 if $has_30_percent_ruling;
    sub divide_income_into_tax_buckets {
    my ($income) = @_;

    # The tax rate According to Abigail:
    ## 33% for income up to EUR 18.628
    ## 41.95% for income between EUR 18.628 and EUR 33.436
    ## 42% for income between EUR 33.436 and EUR 55.694
    ## 52% for income above EUR 55.694
    my $tax_rate;
    if ($income < 18_628) {
    $tax_rate = 33;
    } elsif ($income >= 18_628 and $income < 33_436) {
    $tax_rate = 41.95;
    } elsif ($income >= 33_436 and $income < 55.694) {
    $tax_rate = 42;
    } elsif ($income >= 55.694) {
    $tax_rate = 52;
    } else {
    die "zomg error";
    my %bucket_checks = (
    33 => sub { $_[0] < 18_628 },
    '44.95' => sub { $_[0] >= 18_628 and $_[0] < 33_436 },
    42 => sub { $_[0] >= 33_436 and $_[0] < 55_694 },
    52 => sub { $_[0] >= 55_694 }
    );

    my %bucket;
    for my $amount (1..$income) {
    my $in_bucket = 0;
    for my $bucket (keys %bucket_checks) {
    # Brute-force to keep your house warm during winter in
    # Amsterdam.
    if ($bucket_checks{$bucket}->($amount)) {
    die "panic: We already have amount <$amount> in a bucket" if $in_bucket;
    $bucket{$bucket}++;
    $in_bucket = 1;
    }
    }
    }

    return $tax_rate;
    return %bucket;
    }

    sub tax_each_bucket {
    my (%bucket) = @_;

    return sum(
    map {
    apply_tax_rate(
    $bucket{$_},
    $_,
    );
    } keys %bucket
    );
    }

    sub salary_at_tax_rate {
    my ($salary, $tax_rate) = @_;
    sub apply_tax_rate {
    my ($number, $tax_rate) = @_;

    return ($salary * ((100 - $tax_rate) / 100));
    return ($number * ((100 - $tax_rate) / 100));
    }

    # From perlfaq5
    @@ -105,112 +116,107 @@ sub percentify {
    }

    __DATA__
    $ perl 30-income-calculon.pl 20000 80000 2000
    Gross income Net income tax rate Net income tax rate
    (before taxes) (after taxes) (after taxes, with 30% ruling
    with 30% ruling)
    1,000 EUR 670 EUR 33.00% 769 EUR 33.00%
    2,000 EUR 1,340 EUR 33.00% 1,538 EUR 33.00%
    3,000 EUR 2,010 EUR 33.00% 2,307 EUR 33.00%
    4,000 EUR 2,680 EUR 33.00% 3,076 EUR 33.00%
    5,000 EUR 3,350 EUR 33.00% 3,845 EUR 33.00%
    6,000 EUR 4,020 EUR 33.00% 4,614 EUR 33.00%
    7,000 EUR 4,690 EUR 33.00% 5,383 EUR 33.00%
    8,000 EUR 5,360 EUR 33.00% 6,152 EUR 33.00%
    9,000 EUR 6,030 EUR 33.00% 6,921 EUR 33.00%
    10,000 EUR 6,700 EUR 33.00% 7,690 EUR 33.00%
    11,000 EUR 7,370 EUR 33.00% 8,459 EUR 33.00%
    12,000 EUR 8,040 EUR 33.00% 9,228 EUR 33.00%
    13,000 EUR 8,710 EUR 33.00% 9,997 EUR 33.00%
    14,000 EUR 9,380 EUR 33.00% 10,766 EUR 33.00%
    15,000 EUR 10,050 EUR 33.00% 11,535 EUR 33.00%
    16,000 EUR 10,720 EUR 33.00% 12,304 EUR 33.00%
    17,000 EUR 11,390 EUR 33.00% 13,073 EUR 33.00%
    18,000 EUR 12,060 EUR 33.00% 13,842 EUR 33.00%
    19,000 EUR 11,029 EUR 41.95% 14,611 EUR 33.00%
    20,000 EUR 11,610 EUR 41.95% 15,380 EUR 33.00%
    21,000 EUR 12,190 EUR 41.95% 16,149 EUR 33.00%
    22,000 EUR 12,771 EUR 41.95% 16,918 EUR 33.00%
    23,000 EUR 13,351 EUR 41.95% 17,687 EUR 33.00%
    24,000 EUR 13,932 EUR 41.95% 18,456 EUR 33.00%
    25,000 EUR 14,512 EUR 41.95% 19,225 EUR 33.00%
    26,000 EUR 15,093 EUR 41.95% 19,994 EUR 33.00%
    27,000 EUR 15,673 EUR 41.95% 19,071 EUR 41.95%
    28,000 EUR 16,254 EUR 41.95% 19,777 EUR 41.95%
    29,000 EUR 16,834 EUR 41.95% 20,484 EUR 41.95%
    30,000 EUR 17,415 EUR 41.95% 21,190 EUR 41.95%
    31,000 EUR 17,995 EUR 41.95% 21,896 EUR 41.95%
    32,000 EUR 18,576 EUR 41.95% 22,603 EUR 41.95%
    33,000 EUR 19,156 EUR 41.95% 23,309 EUR 41.95%
    34,000 EUR 16,320 EUR 52.00% 24,015 EUR 41.95%
    35,000 EUR 16,800 EUR 52.00% 24,722 EUR 41.95%
    36,000 EUR 17,280 EUR 52.00% 25,428 EUR 41.95%
    37,000 EUR 17,760 EUR 52.00% 26,134 EUR 41.95%
    38,000 EUR 18,240 EUR 52.00% 26,841 EUR 41.95%
    39,000 EUR 18,720 EUR 52.00% 27,547 EUR 41.95%
    40,000 EUR 19,200 EUR 52.00% 28,254 EUR 41.95%
    41,000 EUR 19,680 EUR 52.00% 28,960 EUR 41.95%
    42,000 EUR 20,160 EUR 52.00% 29,666 EUR 41.95%
    43,000 EUR 20,640 EUR 52.00% 30,373 EUR 41.95%
    44,000 EUR 21,120 EUR 52.00% 31,079 EUR 41.95%
    45,000 EUR 21,600 EUR 52.00% 31,785 EUR 41.95%
    46,000 EUR 22,080 EUR 52.00% 32,492 EUR 41.95%
    47,000 EUR 22,560 EUR 52.00% 33,198 EUR 41.95%
    48,000 EUR 23,040 EUR 52.00% 30,528 EUR 52.00%
    49,000 EUR 23,520 EUR 52.00% 31,164 EUR 52.00%
    50,000 EUR 24,000 EUR 52.00% 31,800 EUR 52.00%
    51,000 EUR 24,480 EUR 52.00% 32,436 EUR 52.00%
    52,000 EUR 24,960 EUR 52.00% 33,072 EUR 52.00%
    53,000 EUR 25,440 EUR 52.00% 33,708 EUR 52.00%
    54,000 EUR 25,920 EUR 52.00% 34,344 EUR 52.00%
    55,000 EUR 26,400 EUR 52.00% 34,980 EUR 52.00%
    56,000 EUR 26,880 EUR 52.00% 35,616 EUR 52.00%
    57,000 EUR 27,360 EUR 52.00% 36,252 EUR 52.00%
    58,000 EUR 27,840 EUR 52.00% 36,888 EUR 52.00%
    59,000 EUR 28,320 EUR 52.00% 37,524 EUR 52.00%
    60,000 EUR 28,800 EUR 52.00% 38,160 EUR 52.00%
    61,000 EUR 29,280 EUR 52.00% 38,796 EUR 52.00%
    62,000 EUR 29,760 EUR 52.00% 39,432 EUR 52.00%
    63,000 EUR 30,240 EUR 52.00% 40,068 EUR 52.00%
    64,000 EUR 30,720 EUR 52.00% 40,704 EUR 52.00%
    65,000 EUR 31,200 EUR 52.00% 41,340 EUR 52.00%
    66,000 EUR 31,680 EUR 52.00% 41,976 EUR 52.00%
    67,000 EUR 32,160 EUR 52.00% 42,612 EUR 52.00%
    68,000 EUR 32,640 EUR 52.00% 43,248 EUR 52.00%
    69,000 EUR 33,120 EUR 52.00% 43,884 EUR 52.00%
    70,000 EUR 33,600 EUR 52.00% 44,520 EUR 52.00%
    71,000 EUR 34,080 EUR 52.00% 45,156 EUR 52.00%
    72,000 EUR 34,560 EUR 52.00% 45,792 EUR 52.00%
    73,000 EUR 35,040 EUR 52.00% 46,428 EUR 52.00%
    74,000 EUR 35,520 EUR 52.00% 47,064 EUR 52.00%
    75,000 EUR 36,000 EUR 52.00% 47,700 EUR 52.00%
    76,000 EUR 36,480 EUR 52.00% 48,336 EUR 52.00%
    77,000 EUR 36,960 EUR 52.00% 48,972 EUR 52.00%
    78,000 EUR 37,440 EUR 52.00% 49,608 EUR 52.00%
    79,000 EUR 37,920 EUR 52.00% 50,244 EUR 52.00%
    80,000 EUR 38,400 EUR 52.00% 50,880 EUR 52.00%
    81,000 EUR 38,880 EUR 52.00% 51,516 EUR 52.00%
    82,000 EUR 39,360 EUR 52.00% 52,152 EUR 52.00%
    83,000 EUR 39,840 EUR 52.00% 52,788 EUR 52.00%
    84,000 EUR 40,320 EUR 52.00% 53,424 EUR 52.00%
    85,000 EUR 40,800 EUR 52.00% 54,060 EUR 52.00%
    86,000 EUR 41,280 EUR 52.00% 54,696 EUR 52.00%
    87,000 EUR 41,760 EUR 52.00% 55,332 EUR 52.00%
    88,000 EUR 42,240 EUR 52.00% 55,968 EUR 52.00%
    89,000 EUR 42,720 EUR 52.00% 56,604 EUR 52.00%
    90,000 EUR 43,200 EUR 52.00% 57,240 EUR 52.00%
    91,000 EUR 43,680 EUR 52.00% 57,876 EUR 52.00%
    92,000 EUR 44,160 EUR 52.00% 58,512 EUR 52.00%
    93,000 EUR 44,640 EUR 52.00% 59,148 EUR 52.00%
    94,000 EUR 45,120 EUR 52.00% 59,784 EUR 52.00%
    95,000 EUR 45,600 EUR 52.00% 60,420 EUR 52.00%
    96,000 EUR 46,080 EUR 52.00% 61,056 EUR 52.00%
    97,000 EUR 46,560 EUR 52.00% 61,692 EUR 52.00%
    98,000 EUR 47,040 EUR 52.00% 62,328 EUR 52.00%
    99,000 EUR 47,520 EUR 52.00% 62,964 EUR 52.00%
    100,000 EUR 48,000 EUR 52.00% 63,600 EUR 52.00%
    $ perl 30-income-calculon.pl
    Gross income Net income Net income
    (before taxes) (after taxes) (after taxes,
    with 30% ruling)
    1,000 EUR 670 EUR 769 EUR
    2,000 EUR 1,340 EUR 1,538 EUR
    3,000 EUR 2,010 EUR 2,307 EUR
    4,000 EUR 2,680 EUR 3,076 EUR
    5,000 EUR 3,350 EUR 3,845 EUR
    6,000 EUR 4,020 EUR 4,614 EUR
    7,000 EUR 4,690 EUR 5,383 EUR
    8,000 EUR 5,360 EUR 6,152 EUR
    9,000 EUR 6,030 EUR 6,921 EUR
    10,000 EUR 6,700 EUR 7,690 EUR
    11,000 EUR 7,370 EUR 8,458 EUR
    12,000 EUR 8,040 EUR 9,228 EUR
    13,000 EUR 8,710 EUR 9,997 EUR
    14,000 EUR 9,380 EUR 10,766 EUR
    15,000 EUR 10,050 EUR 11,535 EUR
    16,000 EUR 10,720 EUR 12,304 EUR
    17,000 EUR 11,390 EUR 13,073 EUR
    18,000 EUR 12,060 EUR 13,842 EUR
    19,000 EUR 12,685 EUR 14,611 EUR
    20,000 EUR 13,235 EUR 15,380 EUR
    21,000 EUR 13,786 EUR 16,148 EUR
    22,000 EUR 14,336 EUR 16,917 EUR
    23,000 EUR 14,887 EUR 17,686 EUR
    24,000 EUR 15,437 EUR 18,456 EUR
    25,000 EUR 15,988 EUR 19,225 EUR
    26,000 EUR 16,538 EUR 19,994 EUR
    27,000 EUR 17,089 EUR 20,730 EUR
    28,000 EUR 17,639 EUR 21,415 EUR
    29,000 EUR 18,190 EUR 22,101 EUR
    30,000 EUR 18,740 EUR 22,786 EUR
    31,000 EUR 19,291 EUR 23,471 EUR
    32,000 EUR 19,841 EUR 24,157 EUR
    33,000 EUR 20,392 EUR 24,842 EUR
    34,000 EUR 20,959 EUR 25,527 EUR
    35,000 EUR 21,539 EUR 26,213 EUR
    36,000 EUR 22,119 EUR 26,898 EUR
    37,000 EUR 22,699 EUR 27,583 EUR
    38,000 EUR 23,279 EUR 28,269 EUR
    39,000 EUR 23,859 EUR 28,954 EUR
    40,000 EUR 24,439 EUR 29,639 EUR
    41,000 EUR 25,019 EUR 30,324 EUR
    42,000 EUR 25,599 EUR 31,010 EUR
    43,000 EUR 26,179 EUR 31,695 EUR
    44,000 EUR 26,759 EUR 32,380 EUR
    45,000 EUR 27,339 EUR 33,066 EUR
    46,000 EUR 27,919 EUR 33,751 EUR
    47,000 EUR 28,499 EUR 34,437 EUR
    48,000 EUR 29,079 EUR 35,127 EUR
    49,000 EUR 29,659 EUR 35,833 EUR
    50,000 EUR 30,239 EUR 36,539 EUR
    51,000 EUR 30,819 EUR 37,245 EUR
    52,000 EUR 31,399 EUR 37,951 EUR
    53,000 EUR 31,979 EUR 38,657 EUR
    54,000 EUR 32,559 EUR 39,363 EUR
    55,000 EUR 33,139 EUR 40,069 EUR
    56,000 EUR 33,688 EUR 40,775 EUR
    57,000 EUR 34,168 EUR 41,481 EUR
    58,000 EUR 34,648 EUR 42,187 EUR
    59,000 EUR 35,128 EUR 42,893 EUR
    60,000 EUR 35,608 EUR 43,599 EUR
    61,000 EUR 36,088 EUR 44,305 EUR
    62,000 EUR 36,568 EUR 45,011 EUR
    63,000 EUR 37,048 EUR 45,717 EUR
    64,000 EUR 37,528 EUR 46,423 EUR
    65,000 EUR 38,008 EUR 47,129 EUR
    66,000 EUR 38,488 EUR 47,835 EUR
    67,000 EUR 38,968 EUR 48,541 EUR
    68,000 EUR 39,448 EUR 49,247 EUR
    69,000 EUR 39,928 EUR 49,953 EUR
    70,000 EUR 40,408 EUR 50,659 EUR
    71,000 EUR 40,888 EUR 51,365 EUR
    72,000 EUR 41,368 EUR 52,071 EUR
    73,000 EUR 41,848 EUR 52,777 EUR
    74,000 EUR 42,328 EUR 53,483 EUR
    75,000 EUR 42,808 EUR 54,189 EUR
    76,000 EUR 43,288 EUR 54,895 EUR
    77,000 EUR 43,768 EUR 55,601 EUR
    78,000 EUR 44,248 EUR 56,307 EUR
    79,000 EUR 44,728 EUR 57,013 EUR
    80,000 EUR 45,208 EUR 57,688 EUR
    81,000 EUR 45,688 EUR 58,324 EUR
    82,000 EUR 46,168 EUR 58,960 EUR
    83,000 EUR 46,648 EUR 59,596 EUR
    84,000 EUR 47,128 EUR 60,232 EUR
    85,000 EUR 47,608 EUR 60,868 EUR
    86,000 EUR 48,088 EUR 61,504 EUR
    87,000 EUR 48,568 EUR 62,140 EUR
    88,000 EUR 49,048 EUR 62,776 EUR
    89,000 EUR 49,528 EUR 63,412 EUR
    90,000 EUR 50,008 EUR 64,048 EUR
    91,000 EUR 50,488 EUR 64,684 EUR
    92,000 EUR 50,968 EUR 65,320 EUR
    93,000 EUR 51,448 EUR 65,956 EUR
    94,000 EUR 51,928 EUR 66,592 EUR
    95,000 EUR 52,408 EUR 67,228 EUR
    96,000 EUR 52,888 EUR 67,864 EUR
    97,000 EUR 53,368 EUR 68,500 EUR
    98,000 EUR 53,848 EUR 69,136 EUR
    99,000 EUR 54,328 EUR 69,772 EUR
    100,000 EUR 54,808 EUR 70,408 EUR
  9. @avar avar revised this gist Oct 11, 2011. 1 changed file with 213 additions and 0 deletions.
    213 changes: 213 additions & 0 deletions 30-income-calculon.pl
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,216 @@
    use strict;
    use warnings;
    use Text::Table;

    my $start = 1_000 || $ARGV[0];
    my $end = 100_000 || $ARGV[1];
    my $step = 1_000 || $ARGV[2];

    my @data;
    for (my $salary = $start; $salary <= $end; $salary += $step) {

    push @data => [
    # Your Gross income
    eurofy($salary),

    # Without 30% ruling
    eurofy(
    salary_at_tax_rate(
    $salary,
    tax_rate($salary, 0),
    ),
    ),
    percentify(tax_rate($salary, 0)),

    # With 30% ruling
    eurofy(
    # You only pay taxes on 70% of your income
    salary_at_tax_rate(
    $salary * 0.70,
    tax_rate($salary, 1),
    )
    +
    # You get the other 30% for free
    $salary * 0.30,
    ),
    percentify(tax_rate($salary, 1)),
    ];
    }

    my $table = Text::Table->new(
    "Gross income\n(before taxes)",
    "Net income\n(after taxes)",
    "tax rate",
    "Net income\n(after taxes,\nwith 30% ruling)",
    "tax rate\nwith 30% ruling",
    );
    $table->load(@data);
    print $table;
    exit;

    sub tax_rate {
    my ($income, $has_30_percent_ruling) = @_;

    # If you have a 1000 Euros per month you get 300 EUR tax free and
    # pay income tax is if you'd have made 700 EUR.
    $income *= 0.70 if $has_30_percent_ruling;

    # The tax rate According to Abigail:
    ## 33% for income up to EUR 18.628
    ## 41.95% for income between EUR 18.628 and EUR 33.436
    ## 42% for income between EUR 33.436 and EUR 55.694
    ## 52% for income above EUR 55.694
    my $tax_rate;
    if ($income < 18_628) {
    $tax_rate = 33;
    } elsif ($income >= 18_628 and $income < 33_436) {
    $tax_rate = 41.95;
    } elsif ($income >= 33_436 and $income < 55.694) {
    $tax_rate = 42;
    } elsif ($income >= 55.694) {
    $tax_rate = 52;
    } else {
    die "zomg error";
    }

    return $tax_rate;
    }

    sub salary_at_tax_rate {
    my ($salary, $tax_rate) = @_;

    return ($salary * ((100 - $tax_rate) / 100));
    }

    # From perlfaq5
    sub commify {
    local $_ = shift;
    1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
    return $_;
    }

    sub eurofy {
    my ($number) = @_;

    # Round it
    $number = int $number;

    return sprintf("%s EUR", commify($number));
    }

    sub percentify {
    my ($number) = @_;

    return sprintf "%.02f%%", $number;
    }

    __DATA__
    $ perl 30-income-calculon.pl 20000 80000 2000
    Gross income Net income tax rate Net income tax rate
    (before taxes) (after taxes) (after taxes, with 30% ruling
    with 30% ruling)
    1,000 EUR 670 EUR 33.00% 769 EUR 33.00%
    2,000 EUR 1,340 EUR 33.00% 1,538 EUR 33.00%
    3,000 EUR 2,010 EUR 33.00% 2,307 EUR 33.00%
    4,000 EUR 2,680 EUR 33.00% 3,076 EUR 33.00%
    5,000 EUR 3,350 EUR 33.00% 3,845 EUR 33.00%
    6,000 EUR 4,020 EUR 33.00% 4,614 EUR 33.00%
    7,000 EUR 4,690 EUR 33.00% 5,383 EUR 33.00%
    8,000 EUR 5,360 EUR 33.00% 6,152 EUR 33.00%
    9,000 EUR 6,030 EUR 33.00% 6,921 EUR 33.00%
    10,000 EUR 6,700 EUR 33.00% 7,690 EUR 33.00%
    11,000 EUR 7,370 EUR 33.00% 8,459 EUR 33.00%
    12,000 EUR 8,040 EUR 33.00% 9,228 EUR 33.00%
    13,000 EUR 8,710 EUR 33.00% 9,997 EUR 33.00%
    14,000 EUR 9,380 EUR 33.00% 10,766 EUR 33.00%
    15,000 EUR 10,050 EUR 33.00% 11,535 EUR 33.00%
    16,000 EUR 10,720 EUR 33.00% 12,304 EUR 33.00%
    17,000 EUR 11,390 EUR 33.00% 13,073 EUR 33.00%
    18,000 EUR 12,060 EUR 33.00% 13,842 EUR 33.00%
    19,000 EUR 11,029 EUR 41.95% 14,611 EUR 33.00%
    20,000 EUR 11,610 EUR 41.95% 15,380 EUR 33.00%
    21,000 EUR 12,190 EUR 41.95% 16,149 EUR 33.00%
    22,000 EUR 12,771 EUR 41.95% 16,918 EUR 33.00%
    23,000 EUR 13,351 EUR 41.95% 17,687 EUR 33.00%
    24,000 EUR 13,932 EUR 41.95% 18,456 EUR 33.00%
    25,000 EUR 14,512 EUR 41.95% 19,225 EUR 33.00%
    26,000 EUR 15,093 EUR 41.95% 19,994 EUR 33.00%
    27,000 EUR 15,673 EUR 41.95% 19,071 EUR 41.95%
    28,000 EUR 16,254 EUR 41.95% 19,777 EUR 41.95%
    29,000 EUR 16,834 EUR 41.95% 20,484 EUR 41.95%
    30,000 EUR 17,415 EUR 41.95% 21,190 EUR 41.95%
    31,000 EUR 17,995 EUR 41.95% 21,896 EUR 41.95%
    32,000 EUR 18,576 EUR 41.95% 22,603 EUR 41.95%
    33,000 EUR 19,156 EUR 41.95% 23,309 EUR 41.95%
    34,000 EUR 16,320 EUR 52.00% 24,015 EUR 41.95%
    35,000 EUR 16,800 EUR 52.00% 24,722 EUR 41.95%
    36,000 EUR 17,280 EUR 52.00% 25,428 EUR 41.95%
    37,000 EUR 17,760 EUR 52.00% 26,134 EUR 41.95%
    38,000 EUR 18,240 EUR 52.00% 26,841 EUR 41.95%
    39,000 EUR 18,720 EUR 52.00% 27,547 EUR 41.95%
    40,000 EUR 19,200 EUR 52.00% 28,254 EUR 41.95%
    41,000 EUR 19,680 EUR 52.00% 28,960 EUR 41.95%
    42,000 EUR 20,160 EUR 52.00% 29,666 EUR 41.95%
    43,000 EUR 20,640 EUR 52.00% 30,373 EUR 41.95%
    44,000 EUR 21,120 EUR 52.00% 31,079 EUR 41.95%
    45,000 EUR 21,600 EUR 52.00% 31,785 EUR 41.95%
    46,000 EUR 22,080 EUR 52.00% 32,492 EUR 41.95%
    47,000 EUR 22,560 EUR 52.00% 33,198 EUR 41.95%
    48,000 EUR 23,040 EUR 52.00% 30,528 EUR 52.00%
    49,000 EUR 23,520 EUR 52.00% 31,164 EUR 52.00%
    50,000 EUR 24,000 EUR 52.00% 31,800 EUR 52.00%
    51,000 EUR 24,480 EUR 52.00% 32,436 EUR 52.00%
    52,000 EUR 24,960 EUR 52.00% 33,072 EUR 52.00%
    53,000 EUR 25,440 EUR 52.00% 33,708 EUR 52.00%
    54,000 EUR 25,920 EUR 52.00% 34,344 EUR 52.00%
    55,000 EUR 26,400 EUR 52.00% 34,980 EUR 52.00%
    56,000 EUR 26,880 EUR 52.00% 35,616 EUR 52.00%
    57,000 EUR 27,360 EUR 52.00% 36,252 EUR 52.00%
    58,000 EUR 27,840 EUR 52.00% 36,888 EUR 52.00%
    59,000 EUR 28,320 EUR 52.00% 37,524 EUR 52.00%
    60,000 EUR 28,800 EUR 52.00% 38,160 EUR 52.00%
    61,000 EUR 29,280 EUR 52.00% 38,796 EUR 52.00%
    62,000 EUR 29,760 EUR 52.00% 39,432 EUR 52.00%
    63,000 EUR 30,240 EUR 52.00% 40,068 EUR 52.00%
    64,000 EUR 30,720 EUR 52.00% 40,704 EUR 52.00%
    65,000 EUR 31,200 EUR 52.00% 41,340 EUR 52.00%
    66,000 EUR 31,680 EUR 52.00% 41,976 EUR 52.00%
    67,000 EUR 32,160 EUR 52.00% 42,612 EUR 52.00%
    68,000 EUR 32,640 EUR 52.00% 43,248 EUR 52.00%
    69,000 EUR 33,120 EUR 52.00% 43,884 EUR 52.00%
    70,000 EUR 33,600 EUR 52.00% 44,520 EUR 52.00%
    71,000 EUR 34,080 EUR 52.00% 45,156 EUR 52.00%
    72,000 EUR 34,560 EUR 52.00% 45,792 EUR 52.00%
    73,000 EUR 35,040 EUR 52.00% 46,428 EUR 52.00%
    74,000 EUR 35,520 EUR 52.00% 47,064 EUR 52.00%
    75,000 EUR 36,000 EUR 52.00% 47,700 EUR 52.00%
    76,000 EUR 36,480 EUR 52.00% 48,336 EUR 52.00%
    77,000 EUR 36,960 EUR 52.00% 48,972 EUR 52.00%
    78,000 EUR 37,440 EUR 52.00% 49,608 EUR 52.00%
    79,000 EUR 37,920 EUR 52.00% 50,244 EUR 52.00%
    80,000 EUR 38,400 EUR 52.00% 50,880 EUR 52.00%
    81,000 EUR 38,880 EUR 52.00% 51,516 EUR 52.00%
    82,000 EUR 39,360 EUR 52.00% 52,152 EUR 52.00%
    83,000 EUR 39,840 EUR 52.00% 52,788 EUR 52.00%
    84,000 EUR 40,320 EUR 52.00% 53,424 EUR 52.00%
    85,000 EUR 40,800 EUR 52.00% 54,060 EUR 52.00%
    86,000 EUR 41,280 EUR 52.00% 54,696 EUR 52.00%
    87,000 EUR 41,760 EUR 52.00% 55,332 EUR 52.00%
    88,000 EUR 42,240 EUR 52.00% 55,968 EUR 52.00%
    89,000 EUR 42,720 EUR 52.00% 56,604 EUR 52.00%
    90,000 EUR 43,200 EUR 52.00% 57,240 EUR 52.00%
    91,000 EUR 43,680 EUR 52.00% 57,876 EUR 52.00%
    92,000 EUR 44,160 EUR 52.00% 58,512 EUR 52.00%
    93,000 EUR 44,640 EUR 52.00% 59,148 EUR 52.00%
    94,000 EUR 45,120 EUR 52.00% 59,784 EUR 52.00%
    95,000 EUR 45,600 EUR 52.00% 60,420 EUR 52.00%
    96,000 EUR 46,080 EUR 52.00% 61,056 EUR 52.00%
    97,000 EUR 46,560 EUR 52.00% 61,692 EUR 52.00%
    98,000 EUR 47,040 EUR 52.00% 62,328 EUR 52.00%
    99,000 EUR 47,520 EUR 52.00% 62,964 EUR 52.00%
    100,000 EUR 48,000 EUR 52.00% 63,600 EUR 52.00%
  10. @avar avar created this gist Oct 11, 2011.
    3 changes: 3 additions & 0 deletions 30-income-calculon.pl
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    use strict;
    use warnings;