Class: Steuernummer

Inherits:
Object
  • Object
show all
Defined in:
lib/steuernummer.rb,
lib/steuernummer/version.rb

Defined Under Namespace

Classes: TaxTable

Constant Summary collapse

VERSION =
"1.1.7"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tax_string, region = "unknown") ⇒ Steuernummer

Validate your German Steuernummer

Example:

>> tax_no = Steuernummer.new("93815/08152", 'Baden-Württemberg')
>> tax_no.is_valid?
=> true

>> tax_no.country_wide_number
=> {:number => '2893081508152', :region => Baden-Württemberg')

>> tax_no = Steuernummer.new("2893081508152")
>> tax_no.is_valid?
=> true

>> tax_no.region_wide_number
=> {:number => '93815/08152', :region => Baden-Württemberg')

tax_no = Steuernummer.new('151/815/08156','unknown') tax_no.is_valid? => true

tax_no.region_wide_number => {:number => '151/815/08156', :region => 'unknown'}

tax_no.country_wide_number => RuntimeError: Can't determine country wide number for a region wide number without knowing the region....

Steuernummer.valid_regions => ["Baden-Württemberg", "Bayern", "Berlin", "Brandenburg",....]

Arguments:

steuernummer: (String)
region: (String)


45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/steuernummer.rb', line 45

def initialize(tax_string, region = "unknown")
  if tax_string.class != String
    raise("Please use a String as argument")
  end
  unless (region == "unknown") || (Steuernummer.valid_regions.include? region)
    raise("unknown region, please use 'unknown' or one of the entries you can get from Steuernummer.valid_regions}")
  end

  @tax_string = tax_string
  @provided_region = region
  @tax_rules = get_tax_rules(tax_string)
end

Class Method Details

.valid_regionsObject



107
108
109
# File 'lib/steuernummer.rb', line 107

def self.valid_regions
  Steuernummer::TaxTable.tax_rules.map { |x| x[:region] }
end

Instance Method Details

#country_wide_numberObject

(German: Vereinheitlichtes Bundesschema)



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/steuernummer.rb', line 68

def country_wide_number
  return nil if !is_valid?
  if get_number_type == :country
    { :number => @tax_string, :region => @tax_rules.first[:region] }
  elsif (@tax_rules.count > 1) && (@provided_region == "unknown")
    raise("Can't determine country wide number for a region wide number without knowing the region.
           Please use only entries you can get from Steuernummer.valid_regions")
  else
    tax_rule = get_tax_rule_on_region

    match_data = @tax_string.match tax_rule[:match_pattern_region]
    arguments_array = match_data.to_a
    arguments_array.shift

    country_wide = tax_rule[:to_country_wide].call(*arguments_array)

    { :number => country_wide, :region => tax_rule[:region] }
  end
end

#is_valid?Boolean

Returns:

  • (Boolean)


58
59
60
61
62
63
64
65
# File 'lib/steuernummer.rb', line 58

def is_valid?
  if @provided_region != "unknown"
    regions = @tax_rules.map { |x| x[:region] }
    regions.include? @provided_region
  else
    !@tax_rules.empty?
  end
end

#region_wide_numberObject

(German: Bündesland)



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/steuernummer.rb', line 89

def region_wide_number
  return nil if !is_valid?
  if get_number_type == :region
    { :number => @tax_string, :region => @provided_region }
  elsif get_number_type == :country
    # country_wide_numbers only have one rule, so it's always the first
    tax_rule = @tax_rules.first

    match_data = @tax_string.match tax_rule[:match_pattern_country]
    arguments_array = match_data.to_a
    arguments_array.shift

    region_wide = tax_rule[:to_region_wide].call(*arguments_array)

    { :number => region_wide, :region => tax_rule[:region] }
  end
end