code: @Override
    public final InvItemTaxCategoryLine process(
      final Map<String, Object> pAddParam,
        final InvItemTaxCategoryLine pEntity,
          final IRequestData pRequestData) throws Exception {
      if (pEntity.getItsPercentage().doubleValue() <= 0) {
        throw new ExceptionWithCode(ExceptionWithCode.WRONG_PARAMETER,
          "percentage_wrong");
      }
      if (pEntity.getTax() == null) {
        throw new ExceptionWithCode(ExceptionWithCode.WRONG_PARAMETER,
          "tax_wrong");
      }
      // Beige-Orm refresh:
      pEntity.setItsOwner(getSrvOrm()
        .retrieveEntity(pAddParam, pEntity.getItsOwner()));
      // optimistic locking (dirty check):
      Long ownerVersion = Long.valueOf(pRequestData
        .getParameter(InvItemTaxCategory.class.getSimpleName()
          + ".ownerVersion"));
      pEntity.getItsOwner().setItsVersion(ownerVersion);
      pEntity.setTax(getSrvOrm().retrieveEntity(pAddParam, pEntity.getTax()));
      if (!(ETaxType.SALES_TAX_INITEM.equals(pEntity.getTax().getItsType())
        || ETaxType.SALES_TAX_OUTITEM.equals(pEntity.getTax().getItsType()))) {
        throw new ExceptionWithCode(ExceptionWithCode.WRONG_PARAMETER,
          "tax_wrong");
      }
      if (pEntity.getIsNew()) {
        getSrvOrm().insertEntity(pAddParam, pEntity);
        pEntity.setIsNew(false);
      } else {
        getSrvOrm().updateEntity(pAddParam, pEntity);
      }
      updateInvItemTaxCategory(pAddParam, pEntity.getItsOwner());
      pAddParam.put("nextEntity", pEntity.getItsOwner());
      pAddParam.put("nameOwnerEntity",
        InvItemTaxCategory.class.getSimpleName());
      return null;
    }
docs: <p>Process entity request.</p>
  @param pAddParam additional param, e.g. return this line's
  document in "nextEntity" for farther process
  @param pRequestData Request Data
  @param pEntity Entity to process
  @return Entity processed for farther process or null
  @throws Exception - an exception