File Coverage

blib/lib/Business/RO/TaxDeduction/Amount.pm
Criterion Covered Total %
statement 14 14 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 19 19 100.0


line stmt bran cond sub pod time code
1             package Business::RO::TaxDeduction::Amount;
2             $Business::RO::TaxDeduction::Amount::VERSION = '0.011';
3             # ABSTRACT: Personal deduction amount by year and number of persons
4              
5 3     3   84942 use 5.010001;
  3         12  
6 3     3   457 use utf8;
  3         16  
  3         20  
7 3     3   366 use Moo;
  3         7926  
  3         22  
8 3     3   1882 use MooX::HandlesVia;
  3         6656  
  3         19  
9 3         19 use Business::RO::TaxDeduction::Types qw(
10             Int
11             HashRef
12             TaxPersons
13 3     3   659 );
  3         9  
14             with qw(Business::RO::TaxDeduction::Role::Utils);
15              
16             has 'persons' => (
17             is => 'ro',
18             isa => TaxPersons,
19             required => 1,
20             coerce => sub {
21             $_[0] >= 4 ? 4 : $_[0];
22             },
23             default => sub { 0 },
24             );
25              
26             has '_deduction_map_2005' => (
27             is => 'ro',
28             isa => HashRef,
29             lazy => 1,
30             default => sub {
31             return {
32             0 => 250,
33             1 => 350,
34             2 => 450,
35             3 => 550,
36             4 => 650,
37             };
38             },
39             );
40              
41             has '_deduction_map_2016' => (
42             is => 'ro',
43             isa => HashRef,
44             lazy => 1,
45             default => sub {
46             return {
47             0 => 300,
48             1 => 400,
49             2 => 500,
50             3 => 600,
51             4 => 800,
52             };
53             },
54             );
55              
56             has '_deduction_map' => (
57             is => 'ro',
58             handles_via => 'Hash',
59             lazy => 1,
60             default => sub {
61             my $self = shift;
62             my $year = $self->base_year;
63             my $meth = "_deduction_map_$year";
64             return $self->$meth;
65             },
66             handles => {
67             _get_deduction_for => 'get',
68             }
69             );
70              
71             has amount => (
72             is => 'ro',
73             isa => Int,
74             lazy => 1,
75             default => sub {
76             my $self = shift;
77             return $self->_get_deduction_for( $self->persons );
78             },
79             );
80              
81             1;
82              
83             __END__