In this example we will prepare a QR bill for eBill delivery by adding the necessary eBill recipient information. The eBill delivery string (I.e. eBill/B/recipient@example.org) is added to the QR invoice in the alternative schemes section.

The recipient can either be identified by E-Mail address, the Enterprise Identification Number UID (I.e. CHE123456789) or the eBill Recipient ID. Only one type of identification should be set at once.

A bill type must be specified. The common use case is Type.BILL. In case of a bill representing a reminder, set the type to Type.REMINDER and provide the original bill’s eBill reference number using referencedBill.

For more details concerning eBill delivery, consult the Dibito documentation. Dibito is an offering by Codeblock GmbH for easy eBill delivery.

Create an eBill delivery string

import ch.codeblock.qrinvoice.model.QrInvoice;
import ch.codeblock.qrinvoice.model.alternativeschemes.ebill.EBill;
import ch.codeblock.qrinvoice.model.alternativeschemes.ebill.Type;
import ch.codeblock.qrinvoice.model.alternativeschemes.ebill.builder.EBillBuilder;
import ch.codeblock.qrinvoice.model.builder.QrInvoiceBuilder;
import ch.codeblock.qrinvoice.model.validation.ValidationException;
import ch.codeblock.qrinvoice.model.validation.ValidationResult;

import java.util.Arrays;

// ...
try {
    final EBill ebill = EBillBuilder
            .create()
            .type(Type.BILL)
            .emailAddress("recipient@example.org")
            .build();

    // Contains "eBill/B/recipient@example.org"
    final String result = ebill.toAlternativeSchemeParameterString();

    // Add it to a QR invoice
    final QrInvoice qrInvoice = QrInvoiceBuilder.create()
            .alternativeSchemeParameters(Arrays.asList(result))
            ...
            .build();

} catch (final ValidationException validationException) {
    final ValidationResult validationResult = validationException.getValidationResult();
    // Handle validation exceptions...
}

Add invoice date and due date

To an invoice number, invoice date and a due date to an eBill delivered by Dibito, add the information with the help of a Swico S1 string in the bill information.

The due date is taken from the 0% skonto payment period.

import ch.codeblock.qrinvoice.model.QrInvoice;
import ch.codeblock.qrinvoice.model.builder.QrInvoiceBuilder;
import ch.codeblock.qrinvoice.model.validation.ValidationException;
import ch.codeblock.qrinvoice.model.validation.ValidationResult;

import ch.codeblock.qrinvoice.model.billinformation.swicos1v12.SwicoS1v12;
import ch.codeblock.qrinvoice.model.billinformation.swicos1v12.builder.PaymentConditionBuilder;
import ch.codeblock.qrinvoice.model.billinformation.swicos1v12.builder.SwicoS1v12Builder;

// ...
try {

    final SwicoS1v12 s1 = SwicoS1v12Builder
    .create()
    .invoiceReference("123456789")
    .invoiceDate(LocalDate.of(2025, 11, 6))
    .paymentConditions(
            PaymentConditionBuilder.create().cashDiscountPercentage(0).eligiblePaymentPeriodDays(30).build()
    )
    .build();

    // contains: "//S1/10/123456789/11/251106/40/0:30"
    final String swicoBillInformation = s1.toBillInformationString();

    final QrInvoice qrInvoice = QrInvoiceBuilder
    .create()
    // ..
    .additionalInformation(a -> a
        .billInformation(swicoBillInformation)
    )
    .alternativeSchemeParameters(...)
    .build();
} catch (ValidationException validationException) {
    final ValidationResult validationResult = validationException.getValidationResult();
    // handle exception...
}