###############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
###############################################################################
#
# Arithmetic properties for configuring BigDecimal calculations
#

# This is only used for rounding of GL posting trial balances and should be 1 digit more than any other financial rounding setting.
ledger.decimals = 4
# These should correspond to the convention in minilang which is different than that for BigDecimal in Java.  See simple-methods.xsd
ledger.rounding = HalfUp

# For setting decimal precision and rounding method of operations related to invoices
invoice.decimals = 2
invoice.SALES_INVOICE.decimals = 2
invoice.PURCHASE_INVOICE.decimals = 4
invoice.rounding = ROUND_HALF_UP

# For setting decimal precision and rounding method of operations related to orders,
# such as shopping cart amounts and order amounts
order.decimals = 2
order.rounding = ROUND_HALF_UP

# For setting decimal precision and rounding method of operations related to customer accounts
# such as Financial Accounts
finaccount.decimals = 2
finaccount.rounding = ROUND_HALF_UP
finaccount.roundingSimpleMethod = HalfUp

# Most companies would want their sales tax calculations ALWAYS to round up (ie, 100.081 becomes 100.09)
# This could be ROUND_CEILING or ROUND_UP.  (The difference is that ROUND_CEILING rounds towards positive infinity,
# ROUND_UP away from zero.  So, for 1.13, both ROUND_UP and ROUND_CEILING will round to 1.2, but for -1.13,
# ROUND_UP gives you -1.2 and ROUND_CEILING -1.1.)
salestax.calc.decimals = 3
salestax.final.decimals = 2
salestax.rounding = ROUND_HALF_UP

# the default accounting-number format for negatives in parentheses
accounting-number.format = #,##0.00;(#,##0.00)
