Class: Einvoicing::LineItem

Inherits:
Data
  • Object
show all
Defined in:
lib/einvoicing/line_item.rb

Overview

A single line on an invoice.

Examples:

Einvoicing::LineItem.new(
  description: "Software consulting",
  quantity: 5,
  unit_price: 150.00,
  vat_rate: 0.20
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(description:, quantity:, unit_price:, vat_rate: 0.20, unit: "C62", category: nil, exemption_reason: nil, exemption_reason_code: nil) ⇒ LineItem

Returns a new instance of LineItem.

Parameters:

  • category (Symbol, nil) (defaults to: nil)

    a key of Einvoicing::Tax::CATEGORY_CODES (:standard, :zero_rated, :exempt, :reverse_charge, :intra_community, :export, :not_subject); nil infers standard or zero-rated from the rate

  • exemption_reason (String, nil) (defaults to: nil)

    BT-120, carried into the VAT breakdown

  • exemption_reason_code (String, nil) (defaults to: nil)

    BT-121, carried into the VAT breakdown



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/einvoicing/line_item.rb', line 23

def initialize(description:, quantity:, unit_price:, vat_rate: 0.20, unit: "C62",
               category: nil, exemption_reason: nil, exemption_reason_code: nil)
  super(
    description: description,
    quantity:    BigDecimal(quantity.to_s),
    unit_price:  BigDecimal(unit_price.to_s),
    vat_rate:    vat_rate,
    unit:        unit,
    category:    category,
    exemption_reason:      exemption_reason,
    exemption_reason_code: exemption_reason_code
  )
end

Instance Attribute Details

#categoryObject (readonly)

Returns the value of attribute category

Returns:

  • (Object)

    the current value of category



16
17
18
# File 'lib/einvoicing/line_item.rb', line 16

def category
  @category
end

#descriptionObject (readonly)

Returns the value of attribute description

Returns:

  • (Object)

    the current value of description



16
17
18
# File 'lib/einvoicing/line_item.rb', line 16

def description
  @description
end

#exemption_reasonObject (readonly)

Returns the value of attribute exemption_reason

Returns:

  • (Object)

    the current value of exemption_reason



16
17
18
# File 'lib/einvoicing/line_item.rb', line 16

def exemption_reason
  @exemption_reason
end

#exemption_reason_codeObject (readonly)

Returns the value of attribute exemption_reason_code

Returns:

  • (Object)

    the current value of exemption_reason_code



16
17
18
# File 'lib/einvoicing/line_item.rb', line 16

def exemption_reason_code
  @exemption_reason_code
end

#quantityObject (readonly)

Returns the value of attribute quantity

Returns:

  • (Object)

    the current value of quantity



16
17
18
# File 'lib/einvoicing/line_item.rb', line 16

def quantity
  @quantity
end

#unitObject (readonly)

Returns the value of attribute unit

Returns:

  • (Object)

    the current value of unit



16
17
18
# File 'lib/einvoicing/line_item.rb', line 16

def unit
  @unit
end

#unit_priceObject (readonly)

Returns the value of attribute unit_price

Returns:

  • (Object)

    the current value of unit_price



16
17
18
# File 'lib/einvoicing/line_item.rb', line 16

def unit_price
  @unit_price
end

#vat_rateObject (readonly)

Returns the value of attribute vat_rate

Returns:

  • (Object)

    the current value of vat_rate



16
17
18
# File 'lib/einvoicing/line_item.rb', line 16

def vat_rate
  @vat_rate
end

Instance Method Details

#gross_amountObject

Gross line total (including VAT).



48
49
50
# File 'lib/einvoicing/line_item.rb', line 48

def gross_amount
  (net_amount + vat_amount).round(2, :half_up)
end

#net_amountObject

Net line total (excluding VAT).



38
39
40
# File 'lib/einvoicing/line_item.rb', line 38

def net_amount
  (quantity * unit_price).round(2, :half_up)
end

#tax_category_codeObject

CII/UBL tax category code — delegates to shared Tax logic.



57
58
59
# File 'lib/einvoicing/line_item.rb', line 57

def tax_category_code
  Tax.category_code_for(rate: vat_rate, category: category)
end

#vat_amountObject

VAT amount for this line. Exempt / reverse-charge categories bill 0 %.



43
44
45
# File 'lib/einvoicing/line_item.rb', line 43

def vat_amount
  (net_amount * Tax.effective_rate(rate: vat_rate, category: category)).round(2, :half_up)
end

#vat_rate_percentObject



52
53
54
# File 'lib/einvoicing/line_item.rb', line 52

def vat_rate_percent
  (Tax.effective_rate(rate: vat_rate, category: category) * 100).round(2)
end