diff --git a/lib/secretariat/line_item.rb b/lib/secretariat/line_item.rb
index 8f7a683..e10cfce 100644
--- a/lib/secretariat/line_item.rb
+++ b/lib/secretariat/line_item.rb
@@ -154,8 +154,11 @@ def to_xml(xml, line_item_index, version: 2, validate: true)
if (version == 2)
xml['ram'].SpecifiedTradeProduct do
xml['ram'].Name name
- xml['ram'].OriginTradeCountry do
- xml['ram'].ID origin_country_code
+ # BT-159 is optional; it describes where goods were made, which a service doesn't have.
+ unless origin_country_code.to_s.empty?
+ xml['ram'].OriginTradeCountry do
+ xml['ram'].ID origin_country_code
+ end
end
end
end
diff --git a/test/invoice_test.rb b/test/invoice_test.rb
index 8af2c76..7148ce8 100644
--- a/test/invoice_test.rb
+++ b/test/invoice_test.rb
@@ -861,6 +861,20 @@ def test_fr_invoice
assert_match(%r{\s*304755032\s*}, xml)
end
+ def test_origin_country_is_written_when_given
+ xml = make_de_invoice.to_xml(version: 2)
+ assert_match(%r{\s*DE\s*}, xml)
+ end
+
+ def test_line_without_origin_country
+ invoice = make_eu_invoice
+ invoice.line_items.each { |line_item| line_item.origin_country_code = nil }
+ xml = invoice.to_xml(version: 2)
+
+ refute_match(/OriginTradeCountry/, xml)
+ assert_equal [], Validator.new(xml, version: 2).validate_against_schematron
+ end
+
def test_invoice_with_quantity_causing_sub_cent_amounts
errors = []