zatca 0.2.1 copy "zatca: ^0.2.1" to clipboard
zatca: ^0.2.1 copied to clipboard

A Flutter package for generating ZATCA (Saudi Arabia's Zakat, Tax and Customs Authority) compliant invoice XML and QR codes.

example/zatca_example.dart

import 'package:flutter/foundation.dart';
import 'package:intl/intl.dart';
import 'package:zatca/models/invoice_data_model.dart';
import 'package:zatca/resources/enums.dart';
import 'package:zatca/zatca_manager.dart';

void main() {
  /// Initialize the ZatcaManager singleton instance with seller and supplier details.
  final zatcaManager = ZatcaManager.instance;
  zatcaManager.initializeZacta(
    sellerName: "My Branch",
    sellerTRN: "310175397400003",
    supplier: Supplier(
      companyID: "310175397400003",
      companyCRN: "454634645645654",
      registrationName: "My Branch",
      address: Address(
        streetName: "King Fahahd st",
        buildingNumber: "0000",
        citySubdivisionName: "West",
        cityName: "Khobar",
        postalZone: "31952",
      ),
    ),
    privateKeyPem:
        """-----BEGIN EC PRIVATE KEY-----\nprivate_key_pem_content\n-----END EC PRIVATE KEY-----""",
    certificatePem:
        """-----BEGIN CERTIFICATE-----\ncertificate_pem_content\n-----END CERTIFICATE-----""",
  );

  /// Generate QR data for the invoice using the ZatcaManager.
  final qrData = zatcaManager.generateZatcaQrInit(
    invoiceLines: [
      InvoiceLine(
        id: '1',
        quantity: '1',
        unitCode: 'PCE',
        lineExtensionAmount: 10.00,
        itemName: 'Item 1',
        taxPercent: 15,
      ),
    ],
    invoiceType: InvoiceType.standardInvoicesAndSimplifiedInvoices,
    issueDate: "2025-04-08",
    issueTime: "03:41:08",
    invoiceUUid: "8e6000cf-1a98-4174-b3e7-b5d5954bc10d",
    invoiceNumber: "INV0001",
    totalVat: 1.50,
    totalWithVat: 11.50,
    customer: Customer(
      companyID: '300000000000003',
      registrationName: 'S7S',
      address: Address(
        streetName: '__',
        buildingNumber: '00',
        citySubdivisionName: 'ssss',
        cityName: 'jeddah',
        postalZone: '00000',
      ),
    ),
    previousInvoiceHash: "zDnQnE05P6rFMqF1ai21V5hIRlUq/EXvrpsaoPkWRVI=",
    invoiceRelationType: InvoiceRelationType.b2c,
  );

  /// Extract XML and QR string from the generated QR data.
  String xml = qrData.xmlString;
  String qr = zatcaManager.getQrString(qrData);

  /// Extract additional details like invoice hash and digital signature.
  String invoiceHash = qrData.invoiceHash;
  String invoiceXmlString = qrData.xmlString;

  /// Generate UBL XML using the extracted details.
  String ublXML = zatcaManager.generateUBLXml(
    invoiceHash: invoiceHash,
    signingTime:
        "${DateFormat("yyyy-MM-dd'T'HH:mm:ss").format(DateTime.now().toUtc())}Z",
    digitalSignature: qrData.digitalSignature,
    invoiceXmlString: invoiceXmlString,
    qrString: qr,
  );

  /// Debug output to print the generated XML, QR, and UBL XML.
  if (kDebugMode) {
    print("XML: $xml");
    print("qr: $qr");
    print("UBL XML: $ublXML");
  }
}
12
likes
0
points
240
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package for generating ZATCA (Saudi Arabia's Zakat, Tax and Customs Authority) compliant invoice XML and QR codes.

Repository (GitHub)
View/report issues

Funding

Consider supporting this project:

github.com

License

unknown (license)

Dependencies

asn1lib, convert, crypto, flutter, intl, pointycastle, xml

More

Packages that depend on zatca