Invoice Model¶
Core data types for building and inspecting invoices.
InvoiceBuilder¶
new¶
Create builder
Create a builder for a specific invoice type/subtype.
InvoiceBuilder::new(invoice_type: InvoiceType) -> InvoiceBuilder
InvoiceBuilder.new(invoice_type: InvoiceTypeKind, invoice_subtype: InvoiceSubType, original_invoice_id: Optional[str] = None, original_invoice_uuid: Optional[str] = None, original_invoice_issue_date: Optional[str] = None, original_invoice_reason: Optional[str] = None) -> InvoiceBuilder
FfiResult_FfiInvoiceBuilder fatoora_invoice_builder_new(FfiInvoiceTypeKind type_kind, FfiInvoiceSubType subtype, const char* original_id, const char* original_uuid, const char* original_issue_date, const char* original_reason);
set_id¶
Set invoice ID
InvoiceBuilder::set_id(id: impl Into<String>) -> &mut Self
InvoiceBuilder.set_id(invoice_id: str) -> None
FfiResult_bool fatoora_invoice_builder_set_id(FfiInvoiceBuilder* builder, const char* id);
set_uuid¶
Set invoice UUID
InvoiceBuilder::set_uuid(uuid: impl Into<String>) -> &mut Self
InvoiceBuilder.set_uuid(uuid: str) -> None
FfiResult_bool fatoora_invoice_builder_set_uuid(FfiInvoiceBuilder* builder, const char* uuid);
set_issue_datetime¶
Set issue datetime
InvoiceBuilder::set_issue_datetime(value: impl Into<String>) -> &mut Self
InvoiceBuilder.set_issue_datetime(issue_datetime: str) -> None
FfiResult_bool fatoora_invoice_builder_set_issue_datetime(FfiInvoiceBuilder* builder, const char* value);
set_currency¶
Set currency
InvoiceBuilder::set_currency(code: impl Into<String>) -> &mut Self
InvoiceBuilder.set_currency(currency_code: str) -> None
FfiResult_bool fatoora_invoice_builder_set_currency(FfiInvoiceBuilder* builder, const char* code);
set_previous_invoice_hash¶
Set previous invoice hash
InvoiceBuilder::set_previous_invoice_hash(hash: impl Into<String>) -> &mut Self
InvoiceBuilder.set_previous_invoice_hash(hash: str) -> None
FfiResult_bool fatoora_invoice_builder_set_previous_hash(FfiInvoiceBuilder* builder, const char* hash);
set_invoice_counter¶
Set invoice counter
InvoiceBuilder::set_invoice_counter(counter: u64) -> &mut Self
InvoiceBuilder.set_invoice_counter(counter: int) -> None
FfiResult_bool fatoora_invoice_builder_set_invoice_counter(FfiInvoiceBuilder* builder, uint64_t counter);
set_payment_means_code¶
Set payment means code
InvoiceBuilder::set_payment_means_code(code: impl Into<String>) -> &mut Self
InvoiceBuilder.set_payment_means_code(code: str) -> None
FfiResult_bool fatoora_invoice_builder_set_payment_means_code(FfiInvoiceBuilder* builder, const char* code);
set_vat_category¶
Set invoice VAT category
InvoiceBuilder::set_vat_category(category: VatCategory) -> &mut Self
InvoiceBuilder.set_vat_category(category: VatCategory) -> None
FfiResult_bool fatoora_invoice_builder_set_vat_category(FfiInvoiceBuilder* builder, FfiVatCategory cat);
set_seller¶
Set seller party
InvoiceBuilder::set_seller(seller: Seller) -> &mut Self
InvoiceBuilder.set_seller(...) -> None
FfiResult_bool fatoora_invoice_builder_set_seller(FfiInvoiceBuilder* builder, const char* name, const char* country, const char* city, const char* street, const char* additional_street, const char* building_number, const char* additional_number, const char* postal_code, const char* subdivision, const char* district, const char* vat_id, const char* other_id, const char* other_id_scheme);
set_buyer¶
Set buyer party
InvoiceBuilder::set_buyer(buyer: Buyer) -> &mut Self
InvoiceBuilder.set_buyer(...) -> None
FfiResult_bool fatoora_invoice_builder_set_buyer(FfiInvoiceBuilder* builder, const char* name, const char* country, const char* city, const char* street, const char* additional_street, const char* building_number, const char* additional_number, const char* postal_code, const char* subdivision, const char* district, const char* vat_id, const char* other_id, const char* other_id_scheme);
set_note¶
Set invoice note
InvoiceBuilder::set_note(note: InvoiceNote) -> &mut Self
InvoiceBuilder.set_note(language: str, text: str) -> None
FfiResult_bool fatoora_invoice_builder_set_note(FfiInvoiceBuilder* builder, const char* lang, const char* text);
set_allowance¶
Set allowance reason and amount
InvoiceBuilder::set_allowance(reason: impl Into<String>, amount: f64) -> &mut Self
InvoiceBuilder.set_allowance(reason: str, amount: float) -> None
FfiResult_bool fatoora_invoice_builder_set_allowance(FfiInvoiceBuilder* builder, const char* reason, double amount);
invoice_level_charge¶
Set invoice-level charge
InvoiceBuilder::invoice_level_charge(charge: f64) -> &mut Self
InvoiceBuilder.invoice_level_charge(charge: float) -> None
FfiResult_bool fatoora_invoice_builder_invoice_level_charge(FfiInvoiceBuilder* builder, double charge);
invoice_level_discount¶
Set invoice-level discount
InvoiceBuilder::invoice_level_discount(discount: f64) -> &mut Self
InvoiceBuilder.invoice_level_discount(discount: float) -> None
FfiResult_bool fatoora_invoice_builder_invoice_level_discount(FfiInvoiceBuilder* builder, double discount);
allowance_reason¶
Set allowance reason
InvoiceBuilder::allowance_reason(reason: impl Into<String>) -> &mut Self
InvoiceBuilder.allowance_reason(reason: str) -> None
FfiResult_bool fatoora_invoice_builder_allowance_reason(FfiInvoiceBuilder* builder, const char* reason);
flags¶
Set invoice flags
InvoiceBuilder::flags(flags: InvoiceFlags) -> &mut Self
InvoiceBuilder.flags(flags: int) -> None
FfiResult_bool fatoora_invoice_builder_flags(FfiInvoiceBuilder* builder, uint8_t flags);
add_line_item¶
Add line item
InvoiceBuilder::add_line_item(item: LineItem) -> &mut Self
InvoiceBuilder.add_line_item(description: str, quantity: float, unit_code: str, unit_price: float, vat_rate: float, vat_category: VatCategory) -> None
FfiResult_bool fatoora_invoice_builder_add_line_item(FfiInvoiceBuilder* builder, const char* description, double quantity, const char* unit_code, double unit_price, double vat_rate, FfiVatCategory vat_category);
build¶
Finalize invoice
InvoiceBuilder::build(self) -> Result<FinalizedInvoice, InvoiceError>
InvoiceBuilder.build() -> FinalizedInvoice
FfiResult_FfiFinalizedInvoice fatoora_invoice_builder_build(FfiInvoiceBuilder* builder);
Field Groups¶
id¶
- Setter:
InvoiceBuilder::set_id/InvoiceBuilder.set_id/fatoora_invoice_builder_set_id - Getters:
FinalizedInvoice.id,SignedInvoice.id,fatoora_invoice_id,fatoora_signed_invoice_id
uuid¶
- Setter:
InvoiceBuilder::set_uuid/InvoiceBuilder.set_uuid/fatoora_invoice_builder_set_uuid - Getters:
FinalizedInvoice.uuid,SignedInvoice.uuid,fatoora_invoice_uuid,fatoora_signed_invoice_uuid
issue_datetime¶
- Setter:
InvoiceBuilder::set_issue_datetime/InvoiceBuilder.set_issue_datetime/fatoora_invoice_builder_set_issue_datetime - Getters:
FinalizedInvoice.issue_datetime,SignedInvoice.issue_datetime,fatoora_invoice_issue_datetime,fatoora_signed_invoice_issue_datetime
currency¶
- Setter:
InvoiceBuilder::set_currency/InvoiceBuilder.set_currency/fatoora_invoice_builder_set_currency - Getters:
FinalizedInvoice.currency,SignedInvoice.currency,fatoora_invoice_currency,fatoora_signed_invoice_currency
previous_invoice_hash¶
- Setter:
InvoiceBuilder::set_previous_invoice_hash/InvoiceBuilder.set_previous_invoice_hash/fatoora_invoice_builder_set_previous_hash - Getters:
FinalizedInvoice.previous_invoice_hash,SignedInvoice.previous_invoice_hash,fatoora_invoice_previous_hash,fatoora_signed_invoice_previous_hash
invoice_counter¶
- Setter:
InvoiceBuilder::set_invoice_counter/InvoiceBuilder.set_invoice_counter/fatoora_invoice_builder_set_invoice_counter - Getters:
FinalizedInvoice.invoice_counter,SignedInvoice.invoice_counter,fatoora_invoice_counter,fatoora_signed_invoice_counter
payment_means_code¶
- Setter:
InvoiceBuilder::set_payment_means_code/InvoiceBuilder.set_payment_means_code/fatoora_invoice_builder_set_payment_means_code - Getters:
FinalizedInvoice.payment_means_code,SignedInvoice.payment_means_code,fatoora_invoice_payment_means_code,fatoora_signed_invoice_payment_means_code
vat_category¶
- Setter:
InvoiceBuilder::set_vat_category/InvoiceBuilder.set_vat_category/fatoora_invoice_builder_set_vat_category - Getters:
FinalizedInvoice.vat_category,SignedInvoice.vat_category,fatoora_invoice_vat_category,fatoora_signed_invoice_vat_category
Parties (seller, buyer)¶
- Setters:
InvoiceBuilder::set_seller,InvoiceBuilder::set_buyerand matching Python/C builder methods. - Getters:
FinalizedInvoice.seller,FinalizedInvoice.buyer,SignedInvoice.seller,SignedInvoice.buyer,fatoora_invoice_seller,fatoora_invoice_buyer,fatoora_signed_invoice_seller,fatoora_signed_invoice_buyer
Notes and Allowance (note, allowance_reason, charge/discount)¶
- Setters:
set_note,set_allowance,invoice_level_charge,invoice_level_discount,allowance_reasonand matching Python/C builder methods. - Getters:
note,allowance_reason,invoice_level_charge,invoice_level_discounton finalized/signed invoices and matchingfatoora_invoice_*andfatoora_signed_invoice_*getters.
Flags and Type¶
- Setter:
InvoiceBuilder::flags/InvoiceBuilder.flags/fatoora_invoice_builder_flags - Getters:
flags,is_third_party,is_nominal,is_export,is_summary,is_self_billed,is_simplified,invoice_type_kind,invoice_sub_typeon finalized/signed invoices and matching C getters.
Line Items and Totals¶
- Setter:
InvoiceBuilder::add_line_item/InvoiceBuilder.add_line_item/fatoora_invoice_builder_add_line_item - Getters:
line_items,totalson finalized/signed invoices and matching C line-item/totals getters (fatoora_invoice_line_item_*,fatoora_invoice_totals_*,fatoora_signed_invoice_line_item_*,fatoora_signed_invoice_totals_*).
FinalizedInvoice¶
hash_base64¶
Get finalized invoice hash (Base64)
FinalizedInvoice::hash_base64(&self) -> Result<String, SigningError>
FinalizedInvoice.hash_base64() -> str
FfiResult_FfiString fatoora_invoice_hash_base64(FfiFinalizedInvoice* invoice);
sign¶
Sign finalized invoice
FinalizedInvoice::sign(self, signer: &InvoiceSigner) -> Result<SignedInvoice, SigningError>
FinalizedInvoice.sign(signer: Signer) -> SignedInvoice
FfiResult_FfiSignedInvoice fatoora_invoice_sign(FfiFinalizedInvoice* invoice, FfiSigner* signer);
field accessors¶
Read finalized invoice fields
Accessors for identity, parties, references, flags, line items, and totals are available per field in Python and C.
FinalizedInvoice.id() -> str
FinalizedInvoice.uuid() -> str
FinalizedInvoice.issue_datetime() -> str
FinalizedInvoice.currency() -> str
FinalizedInvoice.previous_invoice_hash() -> str
FinalizedInvoice.invoice_counter() -> int
FinalizedInvoice.payment_means_code() -> str
FinalizedInvoice.vat_category() -> VatCategory
FinalizedInvoice.invoice_level_charge() -> float
FinalizedInvoice.invoice_level_discount() -> float
FinalizedInvoice.allowance_reason() -> Optional[str]
FinalizedInvoice.invoice_type_kind() -> InvoiceTypeKind
FinalizedInvoice.invoice_sub_type() -> InvoiceSubType
FinalizedInvoice.original_invoice_ref() -> Optional[OriginalInvoiceRef]
FinalizedInvoice.original_invoice_reason() -> Optional[str]
FinalizedInvoice.seller() -> Party
FinalizedInvoice.buyer() -> Optional[Party]
FinalizedInvoice.note() -> Optional[InvoiceNote]
FinalizedInvoice.line_items() -> list[InvoiceLineItem]
FinalizedInvoice.totals() -> InvoiceTotals
FinalizedInvoice.flags() -> set[InvoiceFlag]
FinalizedInvoice.is_third_party() -> bool
FinalizedInvoice.is_nominal() -> bool
FinalizedInvoice.is_export() -> bool
FinalizedInvoice.is_summary() -> bool
FinalizedInvoice.is_self_billed() -> bool
FinalizedInvoice.is_simplified() -> bool
FinalizedInvoice.xml() -> str
/* field-level getters: fatoora_invoice_* */
FfiResult_FfiString fatoora_invoice_id(FfiFinalizedInvoice* invoice);
FfiResult_FfiString fatoora_invoice_uuid(FfiFinalizedInvoice* invoice);
FfiResult_FfiString fatoora_invoice_to_xml(FfiFinalizedInvoice* invoice);
FfiResult_u64 fatoora_invoice_line_item_count(FfiFinalizedInvoice* invoice);
FfiResult_f64 fatoora_invoice_totals_tax_inclusive(FfiFinalizedInvoice* invoice);
/* plus remaining fatoora_invoice_* accessors */
SignedInvoice¶
xml¶
Get signed invoice XML
SignedInvoice::xml(&self) -> &str
SignedInvoice.xml() -> str
FfiResult_FfiString fatoora_signed_invoice_xml(FfiSignedInvoice* signed);
to_xml_base64¶
Get signed XML as Base64
SignedInvoice::to_xml_base64(&self) -> String
SignedInvoice.to_xml_base64() -> str
FfiResult_FfiString fatoora_signed_invoice_to_xml_base64(FfiSignedInvoice* signed);
hash_base64¶
Get signed invoice hash (Base64)
SignedInvoice::hash_base64(&self) -> Result<String, SigningError>
SignedInvoice.hash_base64() -> str
FfiResult_FfiString fatoora_signed_invoice_hash_base64(FfiSignedInvoice* signed);
signature metadata accessors¶
Read signature metadata
SignedInvoice::invoice_hash(&self) -> &str
SignedInvoice::signature(&self) -> &str
SignedInvoice::public_key(&self) -> &str
SignedInvoice::zatca_key_signature(&self) -> Option<&str>
SignedProperties::issuer(&self) -> &str
SignedProperties::serial(&self) -> &str
SignedInvoice.invoice_hash() -> str
SignedInvoice.signature() -> str
SignedInvoice.public_key() -> str
SignedInvoice.zatca_key_signature() -> Optional[str]
SignedInvoice.cert_hash() -> str
SignedInvoice.signed_props_hash() -> str
SignedInvoice.signing_time() -> str
SignedInvoice.issuer() -> str
SignedInvoice.serial() -> str
FfiResult_FfiString fatoora_signed_invoice_hash(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_signature(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_public_key(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_zatca_key_signature(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_cert_hash(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_signed_props_hash(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_signing_time(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_issuer(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_serial(FfiSignedInvoice* signed);
Address.new¶
Create address value
Address.new(
country_code: str,
city: str,
street: str,
building_number: str,
postal_code: str,
additional_street: Optional[str] = None,
additional_number: Optional[str] = None,
subdivision: Optional[str] = None,
district: Optional[str] = None,
) -> Address
FfiResult_FfiAddress fatoora_address_new(
const char* country_code,
const char* city,
const char* street,
const char* additional_street,
const char* building_number,
const char* additional_number,
const char* postal_code,
const char* subdivision,
const char* district
);
field accessors¶
Read signed invoice data fields
Signed invoices expose the same business-field accessors as finalized invoices, plus signature metadata.
SignedInvoice.id() -> str
SignedInvoice.uuid() -> str
SignedInvoice.issue_datetime() -> str
SignedInvoice.currency() -> str
SignedInvoice.previous_invoice_hash() -> str
SignedInvoice.invoice_counter() -> int
SignedInvoice.payment_means_code() -> str
SignedInvoice.vat_category() -> VatCategory
SignedInvoice.invoice_level_charge() -> float
SignedInvoice.invoice_level_discount() -> float
SignedInvoice.allowance_reason() -> Optional[str]
SignedInvoice.invoice_type_kind() -> InvoiceTypeKind
SignedInvoice.invoice_sub_type() -> InvoiceSubType
SignedInvoice.original_invoice_ref() -> Optional[OriginalInvoiceRef]
SignedInvoice.original_invoice_reason() -> Optional[str]
SignedInvoice.seller() -> Party
SignedInvoice.buyer() -> Optional[Party]
SignedInvoice.note() -> Optional[InvoiceNote]
SignedInvoice.line_items() -> list[InvoiceLineItem]
SignedInvoice.totals() -> InvoiceTotals
SignedInvoice.flags() -> set[InvoiceFlag]
SignedInvoice.is_third_party() -> bool
SignedInvoice.is_nominal() -> bool
SignedInvoice.is_export() -> bool
SignedInvoice.is_summary() -> bool
SignedInvoice.is_self_billed() -> bool
SignedInvoice.is_simplified() -> bool
/* field-level getters: fatoora_signed_invoice_* */
FfiResult_FfiString fatoora_signed_invoice_id(FfiSignedInvoice* signed);
FfiResult_FfiString fatoora_signed_invoice_uuid(FfiSignedInvoice* signed);
FfiResult_u64 fatoora_signed_invoice_line_item_count(FfiSignedInvoice* signed);
FfiResult_f64 fatoora_signed_invoice_totals_tax_inclusive(FfiSignedInvoice* signed);
/* plus remaining fatoora_signed_invoice_* accessors */
Supporting Types¶
Types
CountryCode,CurrencyCode,InvoiceTimestamp,InvoiceDate,VatId,OtherId.InvoiceNote,OriginalInvoiceRef,LineItem,Party(Seller/Buyerroles).
See also: Invoice Signing Reference