Вот как это сделано у нас:
Код:
package .plugins.cashcheck;
import ru.bitel.common.TimeUtils;
import ru.bitel.bgbilling.kernel.contract.api.common.bean.Contract;
import ru.bitel.bgbilling.kernel.contract.api.server.bean.ContractDao;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.plugins.cashcheck.common.Payment;
import ru.bitel.bgbilling.plugins.cashcheck.common.Printer;
import ru.bitel.bgbilling.plugins.cashcheck.server.CheckMaker;
import ru.bitel.bgbilling.plugins.cashcheck.server.bean.Check;
import ru.bitel.bgbilling.server.util.Setup;
import java.sql.Connection;
import java.util.Set;
public class CheckHeaders extends CheckMaker {
    private ContractDao contractManager;
    @Override
    public void init(Setup setup, Connection con, Connection conSlave) throws BGException {
        this.contractManager = new ContractDao(con, 0);
    }
    /**
     * Формируем шапку чека.
     * В общем случае, шапка чека должна быть такой:
     * <p>
     * Основание: услуги связи по дог.
     * 100500900 от 01.02.1917
     *
     * @param payment
     * @param check
     * @param printer
     * @throws BGException
     */
    @Override
    public void addPayment(Payment payment, Check check, Printer printer) throws BGException {
        check.addString(" ");
        check.addString("Основание: Услуги связи по дог.");
        Contract contract = contractManager.get(payment.getContractId());
        check.addString(payment.getContractTitle() + " от " + TimeUtils.format(contract.getDateFrom(), "dd.MM.yyyy"));
        check.addString(" ");
        check.setTax(3); // Налог с номером 3 (НДС 18%) по умолчанию.
//        Разобрать платежи по типам.
        switch (payment.getPaymentTypeId()) {
            case 61:
            case 59: {
//                Платёж наличными в кассу
//                Установить соответсвующий тип для ККМ
                check.setPaymentType(1);
                break;
            }
            case 18:
            case 66: {
//                Платёж безналичный в кассу
                check.setPaymentType(2);
                break;
            }
        }
        check.addPayment(payment.getSumma(), String.valueOf(payment.getSumma()) + "р.", 0);
    }
    public void endCreate(int cid, Check check, Printer printer)
            throws BGException {
        // ничего нету, ничего не делаем
    }
    @Override
    public void endCreate(Set<Integer> cids, Check check, Printer printer)
            throws BGException {
        // ничего не делаем
    }
    /**
     * Обработка возвратов
     *
     * @param payment - платёж
     * @param check   - объект чека
     * @param printer - объект ККМ принтера
     * @throws BGException
     */
    @Override
    public void addPaymentRefund(Payment payment, Check check, Printer printer) throws BGException {
        check.addString(" ");
        check.addString("Основание: возврат оплаты.");
        Contract contract = contractManager.get(payment.getContractId());
        check.addString(payment.getContractTitle() + " от " + TimeUtils.format(contract.getDateFrom(), "dd.MM.yyyy"));
        check.addString(" ");
        check.setTax(1); // Налог с номером 1 (НДС 0%).
        check.addPayment(payment.getSumma(), String.valueOf(payment.getSumma()) + "р.", 0);
    }
}
Идентификаторы типов платежей и типов налогов надо брать из таблиц справочников ККМ.
Для АТОЛЛ, обычно,
платежи:
1 - платёж наличными
2 - платёж по безналу
налоги:
1 - НДС 0%
3 - НДС 18%
Ах да, чуть не забыл. 
В биллинге, конечно, должны быть заведены соответствующие типы для обработки наличных и безналичных платежей.