Skip to content

API Parity Matrix (Rust -> FFI -> Python)

This matrix lists public Rust core API items and their FFI/Python coverage. Items intentionally not exposed in FFI are marked as Omitted (intentional). Items without an FFI/Python equivalent are marked Missing (yet to be added). This list is comprehensive for public items in fatoora-core as of today.

Status values: - Done: exposed and in headers/wrappers. - Omitted (intentional): not exposed by design. - Missing (yet to be added): public core API with no FFI/Python equivalent.

config

Core public API item FFI symbol(s) Python symbol Status Notes
EnvironmentType FfiEnvironment Environment Done
EnvironmentType::as_str Omitted (intentional) FFI uses enums directly.
EnvironmentType::endpoint_url Omitted (intentional) Not exposed to bindings.
EnvironmentParseError Omitted (intentional) Errors normalized via FfiErrorKind.
Config::new fatoora_config_new Config Done
Config::default Omitted (intentional) Config defaults to NonProduction in Rust.
Config::env fatoora_config_env Config.env_value Done Python method reads from FFI handle.

csr

Core public API item FFI symbol(s) Python symbol Status Notes
CsrError Omitted (intentional) Errors normalized via FfiErrorKind.
SigningKey::generate fatoora_signing_key_generate SigningKey.generate Done
SigningKey::from_pem fatoora_signing_key_from_pem SigningKey.from_pem Done
SigningKey::from_der fatoora_signing_key_from_der SigningKey.from_der Done
SigningKey::to_pem fatoora_signing_key_to_pem SigningKey.to_pem Done
SigningKey::to_der fatoora_signing_key_to_der SigningKey.to_der Done Uses FfiBytes.
Csr::from_der fatoora_csr_from_der Csr.from_der Done
Csr::to_der fatoora_csr_to_der Csr.to_der Done
Csr::to_pem fatoora_csr_to_pem Csr.to_pem Done
Csr::to_base64 fatoora_csr_to_base64 Csr.to_base64 Done
Csr::to_pem_base64 fatoora_csr_to_pem_base64 Csr.to_pem_base64 Done
Csr::subject_string fatoora_csr_subject_string Csr.subject_string Done
Csr::extension_values_der fatoora_csr_extension_values_der Csr.extension_values_der Done
CsrProperties::from_properties_str fatoora_csr_properties_from_str CsrProperties.from_properties_str Done
CsrProperties::parse_csr_config fatoora_csr_properties_parse CsrProperties.parse Done
CsrProperties::parse_csr_config_file fatoora_csr_properties_parse_file CsrProperties.parse_file Done
CsrProperties::build fatoora_csr_build CsrProperties.build Done

invoice (model types)

Core public API item FFI symbol(s) Python symbol Status Notes
InvoiceError Omitted (intentional) Errors normalized via FfiErrorKind.
ValidationError Omitted (intentional) Internal validation details.
ValidationIssue Omitted (intentional) Internal validation details.
InvoiceField Omitted (intentional) Internal validation details.
ValidationKind Omitted (intentional) Internal validation details.
CountryCode + parse/as_str Omitted (intentional) FFI uses validated strings.
CurrencyCode + parse/as_str Omitted (intentional) FFI uses validated strings.
InvoiceTimestamp + parse/as_str Omitted (intentional) FFI uses validated strings.
InvoiceDate + parse/as_str Omitted (intentional) FFI uses validated strings.
Address accessors fatoora_address_* Address.* Done
VatId::parse/as_str fatoora_vat_id_* VatId.value Done
OtherId::{new,with_scheme,as_str,scheme_id} fatoora_other_id_* OtherId.value/scheme Done Constructors via builder only.
InvoiceNote::{new,language,text} fatoora_invoice_note_* InvoiceNote.language/text Done Constructors via builder only.
PartyRole Omitted (intentional) Marker trait only.
SellerRole / BuyerRole Omitted (intentional) Marker types only.
Party::{new,name,address,vat_id,other_id} fatoora_party_* Party.* Done Constructors via builder only.
InvoiceSubType FfiInvoiceSubType InvoiceSubType Done
OriginalInvoiceRef + accessors fatoora_original_invoice_ref_* OriginalInvoiceRef.* Done
InvoiceType FfiInvoiceTypeKind/FfiInvoiceSubType + accessors InvoiceTypeKind/InvoiceSubType Done
InvoiceType::is_simplified Omitted (intentional) Can be derived from kind/subtype in bindings.
VatCategory FfiVatCategory VatCategory Done
LineItem::{new,from_totals,try_from_parts} Omitted (intentional) Constructed via builder setters in FFI/Python.
LineItem accessors fatoora_*_invoice_line_item_* InvoiceLineItem Done
InvoiceFlags FfiInvoiceFlag + fatoora_*_flags InvoiceFlag Done Exposed as bitset.
InvoiceData Omitted (intentional) Use per-field accessors on FinalizedInvoice/SignedInvoice.
InvoiceData::invoice_type fatoora_*_invoice_type_kind/sub_type FinalizedInvoice.invoice_type_kind/sub_type, SignedInvoice.invoice_type_kind/sub_type Done
InvoiceData::id fatoora_invoice_id / fatoora_signed_invoice_id FinalizedInvoice.id / SignedInvoice.id Done
InvoiceData::uuid fatoora_invoice_uuid / fatoora_signed_invoice_uuid FinalizedInvoice.uuid / SignedInvoice.uuid Done
InvoiceData::issue_datetime fatoora_invoice_issue_datetime / fatoora_signed_invoice_issue_datetime FinalizedInvoice.issue_datetime / SignedInvoice.issue_datetime Done
InvoiceData::currency fatoora_invoice_currency / fatoora_signed_invoice_currency FinalizedInvoice.currency / SignedInvoice.currency Done
InvoiceData::previous_invoice_hash fatoora_invoice_previous_hash / fatoora_signed_invoice_previous_hash FinalizedInvoice.previous_invoice_hash / SignedInvoice.previous_invoice_hash Done
InvoiceData::invoice_counter fatoora_invoice_counter / fatoora_signed_invoice_counter FinalizedInvoice.invoice_counter / SignedInvoice.invoice_counter Done
InvoiceData::note fatoora_invoice_note / fatoora_signed_invoice_note FinalizedInvoice.note, SignedInvoice.note Done
InvoiceData::seller fatoora_invoice_seller / fatoora_signed_invoice_seller FinalizedInvoice.seller, SignedInvoice.seller Done
InvoiceData::buyer fatoora_invoice_buyer / fatoora_signed_invoice_buyer FinalizedInvoice.buyer, SignedInvoice.buyer Done
InvoiceData::line_items fatoora_*_invoice_line_item_* + count FinalizedInvoice.line_items, SignedInvoice.line_items Done
InvoiceData::payment_means_code fatoora_invoice_payment_means_code / fatoora_signed_invoice_payment_means_code FinalizedInvoice.payment_means_code / SignedInvoice.payment_means_code Done
InvoiceData::vat_category fatoora_invoice_vat_category / fatoora_signed_invoice_vat_category FinalizedInvoice.vat_category / SignedInvoice.vat_category Done
InvoiceData::flags fatoora_invoice_flags / fatoora_signed_invoice_flags FinalizedInvoice.flags/flags_raw, SignedInvoice.flags/flags_raw Done
InvoiceData::is_* helpers Omitted (intentional) Derivable from flags.
InvoiceData::invoice_level_charge fatoora_invoice_level_charge / fatoora_signed_invoice_level_charge FinalizedInvoice.invoice_level_charge / SignedInvoice.invoice_level_charge Done
InvoiceData::invoice_level_discount fatoora_invoice_level_discount / fatoora_signed_invoice_level_discount FinalizedInvoice.invoice_level_discount / SignedInvoice.invoice_level_discount Done
InvoiceData::allowance_reason fatoora_invoice_allowance_reason / fatoora_signed_invoice_allowance_reason FinalizedInvoice.allowance_reason / SignedInvoice.allowance_reason Done
InvoiceTotalsData accessors fatoora_*_invoice_totals_* InvoiceTotals Done

invoice (builder + finalized/signed)

Core public API item FFI symbol(s) Python symbol Status Notes
InvoiceBuilder::new fatoora_invoice_builder_new InvoiceBuilder.new Done
InvoiceBuilder::set_id fatoora_invoice_builder_set_id InvoiceBuilder.set_id Done
InvoiceBuilder::set_uuid fatoora_invoice_builder_set_uuid InvoiceBuilder.set_uuid Done
InvoiceBuilder::set_issue_datetime fatoora_invoice_builder_set_issue_datetime InvoiceBuilder.set_issue_datetime Done
InvoiceBuilder::set_currency fatoora_invoice_builder_set_currency InvoiceBuilder.set_currency Done
InvoiceBuilder::set_previous_invoice_hash fatoora_invoice_builder_set_previous_hash InvoiceBuilder.set_previous_invoice_hash Done
InvoiceBuilder::set_invoice_counter fatoora_invoice_builder_set_invoice_counter InvoiceBuilder.set_invoice_counter Done
InvoiceBuilder::set_seller fatoora_invoice_builder_set_seller InvoiceBuilder.set_seller Done
InvoiceBuilder::set_payment_means_code fatoora_invoice_builder_set_payment_means_code InvoiceBuilder.set_payment_means_code Done
InvoiceBuilder::set_vat_category fatoora_invoice_builder_set_vat_category InvoiceBuilder.set_vat_category Done
InvoiceBuilder::set_buyer fatoora_invoice_builder_set_buyer InvoiceBuilder.set_buyer Done
InvoiceBuilder::set_note fatoora_invoice_builder_set_note InvoiceBuilder.set_note Done
InvoiceBuilder::set_allowance fatoora_invoice_builder_set_allowance InvoiceBuilder.set_allowance Done
InvoiceBuilder::add_line_item fatoora_invoice_builder_add_line_item InvoiceBuilder.add_line_item Done
InvoiceBuilder::flags fatoora_invoice_builder_set_flags InvoiceBuilder.set_flags Done Rust uses flags(...) setter.
InvoiceBuilder::invoice_level_charge Missing (yet to be added) Not exposed in bindings.
InvoiceBuilder::invoice_level_discount Missing (yet to be added) Not exposed in bindings.
InvoiceBuilder::allowance_reason Missing (yet to be added) Not exposed in bindings.
InvoiceBuilder::build fatoora_invoice_builder_build InvoiceBuilder.build Done
FinalizedInvoice::data fatoora_invoice_* accessors Done Accessed via per-field FFI getters.
FinalizedInvoice::totals fatoora_invoice_totals_* FinalizedInvoice.totals Done
FinalizedInvoice::hash_base64 fatoora_invoice_hash_base64 FinalizedInvoice.hash_base64 Done
FinalizedInvoice::sign fatoora_invoice_sign FinalizedInvoice.sign Done
SignedInvoice::data fatoora_signed_invoice_* accessors Done Accessed via per-field FFI getters.
SignedInvoice::totals fatoora_signed_invoice_totals_* SignedInvoice.totals Done
SignedInvoice::signed_properties Omitted (intentional) Access via signed-only getters.
SignedInvoice::qr_code fatoora_signed_invoice_qr SignedInvoice.qr Done
SignedInvoice::xml fatoora_signed_invoice_xml SignedInvoice.xml Done
SignedInvoice::uuid fatoora_signed_invoice_uuid SignedInvoice.uuid Done
SignedInvoice::invoice_hash fatoora_signed_invoice_hash SignedInvoice.invoice_hash Done
SignedInvoice::hash_base64 fatoora_signed_invoice_hash_base64 SignedInvoice.hash_base64 Done
SignedInvoice::signature fatoora_signed_invoice_signature SignedInvoice.signature Done
SignedInvoice::public_key fatoora_signed_invoice_public_key SignedInvoice.public_key Done
SignedInvoice::zatca_key_signature fatoora_signed_invoice_zatca_key_signature SignedInvoice.zatca_key_signature Done
SignedInvoice::to_xml_base64 fatoora_signed_invoice_xml_base64 SignedInvoice.xml_base64 Done
InvoiceView Omitted (intentional) Internal trait.

invoice::sign

Core public API item FFI symbol(s) Python symbol Status Notes
SigningError Omitted (intentional) Errors normalized via FfiErrorKind.
SignedProperties::invoice_hash fatoora_signed_invoice_hash SignedInvoice.invoice_hash Done Accessed via signed invoice getters.
SignedProperties::signature fatoora_signed_invoice_signature SignedInvoice.signature Done Accessed via signed invoice getters.
SignedProperties::public_key fatoora_signed_invoice_public_key SignedInvoice.public_key Done Accessed via signed invoice getters.
SignedProperties::zatca_key_signature fatoora_signed_invoice_zatca_key_signature SignedInvoice.zatca_key_signature Done Accessed via signed invoice getters.
SignedProperties::cert_hash fatoora_signed_invoice_cert_hash SignedInvoice.cert_hash Done Accessed via signed invoice getters.
SignedProperties::signed_props_hash fatoora_signed_invoice_signed_props_hash SignedInvoice.signed_props_hash Done Accessed via signed invoice getters.
SignedProperties::signing_time fatoora_signed_invoice_signing_time SignedInvoice.signing_time Done Accessed via signed invoice getters.
SignedProperties::issuer Missing (yet to be added) Not exposed in bindings.
SignedProperties::serial Missing (yet to be added) Not exposed in bindings.
InvoiceSigner::from_der fatoora_signer_from_der Signer.from_der Done
InvoiceSigner::from_pem fatoora_signer_from_pem Signer.from_pem Done
InvoiceSigner::sign_xml Missing (yet to be added)
InvoiceSigner::certificate Omitted (intentional) Returns external x509_cert::Certificate.
invoice_hash_base64_from_xml_str Missing (yet to be added)

invoice::xml

Core public API item FFI symbol(s) Python symbol Status Notes
InvoiceXml Omitted (intentional) Internal XML model.
InvoiceXmlError Omitted (intentional) Errors normalized via FfiErrorKind.
XmlFormat Omitted (intentional) Internal XML formatting.
ToXml Omitted (intentional) Exposed via fatoora_invoice_to_xml.

invoice::xml::parse

Core public API item FFI symbol(s) Python symbol Status Notes
ParseError Omitted (intentional) Errors normalized via FfiErrorKind.
parse_finalized_invoice_xml fatoora_parse_finalized_invoice_xml parse_finalized_invoice_xml Done
parse_finalized_invoice_xml_file fatoora_parse_finalized_invoice_xml_file parse_finalized_invoice_xml_file Done
parse_signed_invoice_xml fatoora_parse_signed_invoice_xml parse_signed_invoice_xml Done
parse_signed_invoice_xml_file fatoora_parse_signed_invoice_xml_file parse_signed_invoice_xml_file Done

invoice::validation

Core public API item FFI symbol(s) Python symbol Status Notes
ValidationResult Omitted (intentional) FFI only exposes boolean result.
XmlValidationError Omitted (intentional) Errors normalized via FfiErrorKind.
validate_xml_invoice_from_str fatoora_validate_xml_str validate_xml_str Done

invoice::qr

Core public API item FFI symbol(s) Python symbol Status Notes
QrCodeError Omitted (intentional) Errors normalized via FfiErrorKind.
QrResult Omitted (intentional) QR exposed as string.
QrPayload Omitted (intentional) QR exposed as string.

api

Core public API item FFI symbol(s) Python symbol Status Notes
ZatcaError Omitted (intentional) Errors normalized via FfiErrorKind.
TokenScope Omitted (intentional) Internal marker trait.
Compliance Omitted (intentional) Marker type only.
Production Omitted (intentional) Marker type only.
ValidationResponse::{validation_results,reporting_status,clearance_status,qr_seller_status,qr_buyer_status} fatoora_validation_response_* ValidationResponse.* Done
ValidationResults::{info_messages,warning_messages,error_messages,status} fatoora_validation_results_* ValidationResults.* Done
ValidationMessage::{message_type,code,category,message,status} fatoora_validation_message_* ValidationMessage.* Done
MessageList Omitted (intentional) Flattened into FFI accessors.
UnauthorizedResponse Omitted (intentional) Internal error body.
ServerErrorResponse Omitted (intentional) Internal error body.
CsidCredentials::new fatoora_csid_compliance_new / fatoora_csid_production_new CsidCompliance.new / CsidProduction.new Done Separate handle types.
CsidCredentials::env fatoora_csid_*_env CsidCompliance.env / CsidProduction.env Done
CsidCredentials::request_id fatoora_csid_*_request_id CsidCompliance.request_id / CsidProduction.request_id Done request_id is a string; empty string is the sentinel.
CsidCredentials::binary_security_token fatoora_csid_*_token CsidCompliance.token / CsidProduction.token Done
CsidCredentials::secret fatoora_csid_*_secret CsidCompliance.secret / CsidProduction.secret Done
ZatcaClient::new fatoora_zatca_client_new ZatcaClient.__init__ Done
ZatcaClient::check_invoice_compliance fatoora_zatca_check_compliance ZatcaClient.check_compliance Done
ZatcaClient::report_simplified_invoice fatoora_zatca_report_simplified_invoice ZatcaClient.report_simplified_invoice Done
ZatcaClient::clear_standard_invoice fatoora_zatca_clear_standard_invoice ZatcaClient.clear_standard_invoice Done
ZatcaClient::post_csr_for_ccsid fatoora_zatca_post_csr_for_ccsid ZatcaClient.post_csr_for_ccsid Done
ZatcaClient::post_ccsid_for_pcsid fatoora_zatca_post_ccsid_for_pcsid ZatcaClient.post_ccsid_for_pcsid Done
ZatcaClient::renew_csid fatoora_zatca_renew_csid ZatcaClient.renew_csid Done