ExCius.BillingReference (ExCius v0.3.2)
View SourceBilling Reference (BG-3) for Croatian e-Invoice (Fiskalizacija 2.0).
This module handles references to preceding invoices, which is critical for:
- Corrective Invoices (P10/384) - Must reference the invoice being corrected
- Credit Notes (381) - Must reference the invoice being credited
- Debit Notes (383) - Must reference the invoice being debited
The BillingReference contains an InvoiceDocumentReference with:
- ID: The number/identifier of the original invoice being referenced
- IssueDate: The issue date of the original invoice
Reference: EN 16931-1:2017, Business Group BG-3 (PRECEDING INVOICE REFERENCE) Croatian CIUS-2025 Specification
Summary
Functions
Creates a new BillingReference struct.
Creates a new BillingReference struct, raising on error.
Checks if a billing reference is required for the given business process.
Checks if a billing reference is required for the given invoice type and business process.
Converts a BillingReference struct to a map suitable for XML generation.
Validates billing reference data without creating a struct.
Types
@type t() :: %ExCius.BillingReference{ invoice_document_reference: invoice_document_reference() }
Functions
Creates a new BillingReference struct.
Parameters
attrs- A map containing::invoice_document_reference- A map with:id(required) and:issue_date(optional)
Examples
iex> ExCius.BillingReference.new(%{
...> invoice_document_reference: %{
...> id: "INV-2025-001",
...> issue_date: ~D[2025-01-15]
...> }
...> })
{:ok, %ExCius.BillingReference{
invoice_document_reference: %{
id: "INV-2025-001",
issue_date: ~D[2025-01-15]
}
}}
iex> ExCius.BillingReference.new(%{})
{:error, %{invoice_document_reference: "is required"}}
Creates a new BillingReference struct, raising on error.
Examples
iex> ExCius.BillingReference.new!(%{
...> invoice_document_reference: %{id: "INV-2025-001", issue_date: ~D[2025-01-15]}
...> })
%ExCius.BillingReference{...}
Checks if a billing reference is required for the given business process.
Examples
iex> ExCius.BillingReference.required_for_business_process?(:p9)
true
iex> ExCius.BillingReference.required_for_business_process?(:p10)
true
iex> ExCius.BillingReference.required_for_business_process?(:p1)
false
Checks if a billing reference is required for the given invoice type and business process.
Credit notes (381), corrected invoices (384), and debit notes (383) require billing references. Business processes P9 (credit notes) and P10 (corrective invoices) also indicate a billing reference is expected.
Examples
iex> ExCius.BillingReference.required_for_invoice_type?(:credit_note)
true
iex> ExCius.BillingReference.required_for_invoice_type?(:corrected_invoice)
true
iex> ExCius.BillingReference.required_for_invoice_type?(:commercial_invoice)
false
Converts a BillingReference struct to a map suitable for XML generation.
Examples
iex> ref = %ExCius.BillingReference{
...> invoice_document_reference: %{id: "INV-001", issue_date: ~D[2025-01-15]}
...> }
iex> ExCius.BillingReference.to_map(ref)
%{
invoice_document_reference: %{
id: "INV-001",
issue_date: ~D[2025-01-15]
}
}
Validates billing reference data without creating a struct.
Returns :ok if valid, or {:error, errors} if invalid.
Examples
iex> ExCius.BillingReference.validate(%{
...> invoice_document_reference: %{id: "INV-001"}
...> })
:ok
iex> ExCius.BillingReference.validate(%{})
{:error, %{invoice_document_reference: "is required"}}