The Interface

invoice total 01

LF‑ET generates an interface from the decision table with

  • an 'is-method' for each condition value

  • a 'do-method' for each action value

  • a 'trace method' which can be used to log the execution of the rules

If method names other than the automatically generated ones are to be generated, this can be configured individually for specific conditions and actions using the inline parameter $$MethodName.
// *** WARNING: DO NOT MODIFY *** This is a generated Java source code! 
// 
// Generated by LF-ET 2.4.1 (260219a), https://www.lohrfink.de/lfet
// From decision table
//  "/src/main/resources/lfet/demo/InvoiceTotal.lfet"
// 24.02.2026 15:20
// 

// Prolog Standard ---->
// profile LFET.Java.Prolog.Standard.Interface.ini not found
// used LF-ET 2.4.1 (260219a) build in default

package lfet.demo;

import javax.annotation.processing.Generated;

@Generated("LF-ET")
interface InvoiceTotal_iFace
{

    // Prolog Standard <----
    
    /** 
     * <b>C01: Purchase order value</b><br>
     * <br>
     * <b>C01/01: &lt; 20.00 - low</b>
     */
    boolean isPurchaseOrderValue_Less2000();
    
    /** 
     * <b>C01: Purchase order value</b><br>
     * <br>
     * <b>C01/02: 20.00 - 75.00 - normal</b>
     */
    boolean isPurchaseOrderValue_20007500();
    
    /** 
     * <b>C02: Discount</b><br>
     * <br>
     * <b>C02/01: &gt;0 - discount given</b>
     */
    boolean isDiscount_Greater0();
    
    /** 
     * <b>C03: Discount type</b><br>
     * <br>
     * <b>C03/01: % - percentage discount on the purchase order value</b>
     */
    boolean isDiscountType_PercentageDiscountOnThePurchaseOrderValue();
    
    /** 
     * <b>C04: Discount &lt; Purchase order value</b><br>
     * <br>
     * <b>C04/01: Y - Yes</b>
     */
    boolean isDiscountLessPurchaseOrderValue();
    
    /** 
     * <b>A01: Apply discount</b>
     */
    void doApplyDiscount();
    
    /** 
     * <b>A02: Calculate shipping costs</b>
     */
    void doCalculateShippingCosts();
    
    /** 
     * <b>A03: Invoice total</b><br>
     * <br>
     * <b>A03/01: upd - Invoice total must be updated</b>
     */
    void doInvoiceTotal_Upd();
    
    /** 
     * <b>A03: Invoice total</b><br>
     * <br>
     * <b>A03/02: pov - Purchase order value can be taken over as invoice total</b>
     */
    void doInvoiceTotal_Pov();
    
    void doTrace(java.lang.String dtName, java.lang.String version, int rules, int rule);

    // Epilog Standard ---->
    // profile LFET.Java.Epilog.Standard.Interface.ini not found
    // used LF-ET 2.4.1 (260219a) build in default

}

// Epilog Standard <----

// End of generated Java source code
// Generated by LF-ET 2.4.1 (260219a), https://www.lohrfink.de/lfet

For each condition value an is‑method

…​almost, since for the last value of each condition, the so-called 'ELSE-Value', an ELSE branch is always generated.

Presented as an example here the methods for Condition C01:

invoice total 02

/**
 * <b>C01: Purchase order value</b><br>
 * <br>
 * <b>C01/01: &lt; 20.00 - low</b>
 */
boolean isPurchaseOrderValue_Less2000();

/**
 * <b>C01: Purchase order value</b><br>
 * <br>
 * <b>C01/02: 20.00 - 75.00 - normal</b>
 */
boolean isPurchaseOrderValue_20007500();
  • For each condition value, a unique method name is generated from 'is', the title of the condition and the symbol of the condition value

  • For example, 'Purchase order value < 20.00' becomes the method name isPurchaseOrderValue_Less2000

  • Automatically JavaDoc:

    • A JavaDoc comment is created from Condition title, symbol and description of value and from a Text potentially specified for the value for each method

    • This means that also the comments in the software are auto­mati­cally kept up-to-date during maintenance and further deve­lop­ment of deci­sion ta­bles

  • For the last condition value 'Purchase order value > 75.00' no method has been gene­rated since we are speaking here about the last value, the so-called 'ELSE-value' for which an ELSE branch is gene­rated

For each action value a do‑method

invoice total 01

Presented here are e.g. the gene­ra­ted methods for Action A03:

/**
 * <b>A03: Invoice total</b><br>
 * <br>
 * <b>A03/01: upd - Invoice total must be updated</b>
 */
void doInvoiceTotal_Upd();

/**
 * <b>A03: Invoice total</b><br>
 * <br>
 * <b>A03/02: pov - Purchase order value can be taken over as invoice total</b>
 */
void doInvoiceTotal_Pov();
  • for each action value a unique method name is generated from 'do', the action title and the action value symbol

  • no matter how often the method is used in rules, it must be implemented only once, the generator takes over the “installation” in the rules module

    • A03/01 is used in 6 rules (i.e. in 6 program branches)

    • A03/02 is used in 1 rule

And a trace-method

It is called in the rules module in each rule BEFORE the first action is executed.

void doTrace(java.lang.String dtName, java.lang.String version, int rules, int rule);

Notes

  • As long as only rules are changed in the deci­sion ta­ble:

    • the Interface - and also all imple­men­ta­tions of the inter­faces remain valid

    • can simply be regenerated, only the rules module is affected by these changes, this is auto­mati­cally completely recal­culated and rege­nerated

  • Only if also conditions or actions are changed in deci­sion ta­bles, also the interface is affected, however, only targeted readjustments of individual methods are necessary

    • omission of values: methods must be removed

    • changed values: methods must be adjusted

    • new values: methods must be implemented once

  • As a rule, modern develop­ment environ­ments offer powerful functions to support such readjustments.