Zatca e-invoice (fatoora) Phase 2 QR code generator in Flutter

images

This package strictly follows the guidelines provided by the Zatca authority to generate a simplified e-invoice (fatoora) QR code to print into the Bill/invoice of your business.

For more info kindly visit the official Zatca Docs.

Features

  • Simple QR code
  • Simple QR code generator
  • Generate QR code from Zatca QR data model

Usage

For full example of the code, kindly have a look here example folder.

Code result full

Alt Text

Code result

Alt Text

Scan result

Alt Text

Initialize zacta in main.dart:

       void main() {
  initZacta();
  runApp(MyApp());
}

void initZacta() {
  ZatcaManager.instance.initializeZacta(
    sellerName: ZatcaConstants.companyName,
    sellerTRN: ZatcaConstants.taxRegistrationNumber,
    privateKeyBase64: ZatcaConstants.privateKeyBase64,
    certificateBase64: ZatcaConstants.certificateBase64,
    supplier: Supplier(
      companyID: ZatcaConstants.commercialRegistrationNumber,
      registrationName: ZatcaConstants.taxRegistrationNumber,
      address: Address(
        streetName: ZatcaConstants.street,
        buildingNumber: ZatcaConstants.buildingNumber,
        citySubdivisionName: ZatcaConstants.area,
        cityName: ZatcaConstants.cityName,
        postalZone: ZatcaConstants.postalZone,
      ),
    ),
  );
}

QR code Data Model:

note: for B2B Invoices


final qrDataModel = ZatcaManager.instance.generateZatcaQrInit(
    totalVat: "45.0",
    totalWithVat: "300.0",
    issueDate: "2024-01-17",
    issueTime: "05:41:08",
    invoiceUUid: "8e6000cf-1a98-4174-b3e7-b5d5954bc10d",
    invoiceNumber: "INV0001",
    invoiceLines: [
      InvoiceLine(
        id: '1',
        quantity: '10',
        unitCode: 'PCE',
        lineExtensionAmount: '100.00',
        itemName: 'Item 1',
        taxPercent: '15',
      ),
      InvoiceLine(
        id: '2',
        quantity: '1',
        unitCode: 'PCE',
        lineExtensionAmount: '200.00',
        itemName: 'Item 1',
        taxPercent: '15',
      ),
    ],
    invoiceType: ZatcaConstants.invoiceType,
    invoiceRelationType: InvoiceRelationType.b2b,
    customer: Customer(
      companyID: ' serag sakr ',
      registrationName: ' 87978',
      address: Address(
        streetName: ' ',
        buildingNumber: ' ',
        citySubdivisionName: ' ',
        cityName: 'Alexandria ',
        postalZone: ' ',
        countryCode: ' ',
      ),
    )
);

note: for B2C Invoices

        final qrDataModel = ZatcaManager.instance.generateZatcaQrInit(
    totalVat: "45.0",
    totalWithVat: "300.0",
    issueDate: "2024-01-17",
    issueTime: "05:41:08",
    invoiceUUid: "8e6000cf-1a98-4174-b3e7-b5d5954bc10d",
    invoiceNumber: "INV0001",
    invoiceLines: [
      InvoiceLine(
        id: '1',
        quantity: '10',
        unitCode: 'PCE',
        lineExtensionAmount: '100.00',
        itemName: 'Item 1',
        taxPercent: '15',
      ),
      InvoiceLine(
        id: '2',
        quantity: '1',
        unitCode: 'PCE',
        lineExtensionAmount: '200.00',
        itemName: 'Item 1',
        taxPercent: '15',
      ),
    ],
    invoiceType: ZatcaConstants.invoiceType,
  
  
  );

Simple QR code:

       Center(
          child: Zatca2InvoiceQrGenerator(qrDataModel: qrDataModel),
        );

Can Get Content Only AS String

 final content = ZatcaManager.instance.getQrCodeContent(qrDataModel);

         SizedBox(
            height: 200,
            width: 200,
child: PrettyQrView.data(
data: content,
decoration: const PrettyQrDecoration(),
),
);

- Thanks for visiting here, hope you find this package useful if so then don't forget to give a like and star into the repo. Have a Bugs-free day 😉👨‍💻