View source | View content page | Page history | Printable version   

Projects:Cost Adjustments/FunctionalSpecs


Cost Adjustments - Functional Specifications


This project implements the ability to modify calculated costs. These modifications can be needed by different causes. Backdated transactions or landed cost are the most common.


Current Cost Engine is based on Perpetual Costing. This means that any calculated cost shouldn't be modified. Because of this restriction there are some cases that currently cannot be resolved. To solve this Cost Adjustments are needed. With this project it would be able to fix unexpected cost results when transactions are not registered in the system in the same order that happened or to implement landed costs.


The scope of this project is to create a new functionality to manage cost adjustments. This project also enables the possibility to create modules with processes to adjust costs.


This project is an extension of the Costing Engine, deep knowledge of this functionality is required.

Design Considerations





Functional Requirements

Business process definition

  1. New document Cost Adjustment
    1. Header with the adjustment definition, includes cause, type,...
    2. Lines with all the transactions affected by the adjustment.
  2. The process that searches the transactions involved and calculates the adjustment amounts:
    1. Algorithms are in charge of defining this process
    2. Needs to take into account the possibility of a Costing Rule change.
    3. Changes in amount of outgoing transactions is the only case where no other related transactions are affected. There is an exception on closing inventories of Costing Rule initializations.
  3. The cost adjustments are generated by different processes:
    1. Backdated transactions:
      1. Backdated transactions are adjusted when their cost is calculated.
      2. The cost is calculated and then an adjustment is created to recalculate it on the movement date.
    2. Price Difference Corrections:
      1. This process is executed as:
        • part of the closing period process.
        • periodically as a background process.
      2. Fixes transaction costs known to be not accurate.
      3. The process is done for a reference date.
        1. The process searches transactions that require adjustments up to the reference date.
        2. Involved transactions can be on a later date.
        3. The process ensures a synchrony between ledger balance and inventory balance only on the reference date.
      4. Transactions that require adjustments:
        1. Differences in order/invoice prices.
        2. Order price modification with receipt cost calculated. Under discussion if this scenario is possible.
      5. Products without stock but with a balance in the ledger or inventory different to zero.
    3. Negative stock corrections, for average costing:
      1. When negative stock is allowed the transactions that leave negative stock are calculated with the current average cost.
      2. The next incoming transaction recalculates the average, but also should adjust the previous transactions that left the stock below zero.
      3. With this adjustment the average after the receipt is the price of the receipt and is not affected by the previous negative stock transactions.
    4. Landed Cost:
      1. Ability to assign additional costs to single transactions. Usually freight costs or custom taxes to receipts.
    5. Ability to update the balance of a product on a date to an specific amount.
      1. The process generates closing/starting inventories whose calculated cost is the old balance (closing inventory) and the new balance (starting)
      2. If this process is done for a date in the past a cost adjustment will be needed. This adjustment should be done as a regular backdated transaction.
  4. Cost adjustments are cumulative. A single transaction can have several adjustments.
  5. The process to search for involved transactions needs to take into account consumed goods transactions of manufacturing. Both BOM and Work Efforts.
    1. In this case the related produced goods costs needs to be adjusted as well.
  6. The accounting of the adjustments is not driven by the Cost Adjustment document.
    1. New document/process to post adjustments to the ledger.
    2. A accounting date is set as reference.
    3. All adjustments pending to be posted prior to the reference date are posted on a single journal entry on the given accounting date.
    4. It is not possible to close an accounting period with adjustments pending to be posted.
  7. Algorithms can add their own adjustments
    1. When allowing negative stock and using average algorithm. The cost of a transaction that has produced negative stock needs to be adjusted when the next incoming transaction is adjusted.

User stories

Case 1

Closing a period with backdated transactions.

  1. Ann want to close an accounting period.
  2. She knows that in that period there were some shipments that were not entered in the same date.
  3. She creates a new Cost Adjustment to check for backdated transactions up to the last date of the period she's closing.
  4. She process the cost adjustment.
  5. On the lines she can review all the transactions that have been updated.

Case 2

A shipment is entered on a later date

  1. John has registered a mislaid receipt.
  2. He wants its cost to be calculated using the original date.
  3. He creates a new Cost Adjustment for the receipt setting the correct date.
  4. He processes the cost adjustment.
  5. On the lines he can review all the transactions that have been updated.

Case 3

Negative stock corrections when shipment is processed before the receipt.

  1. Current avg is 20EUR/unit and stock is 5 units (100EUR balance)
  2. Michelle creates a shipment of 15 units. The cost amount is 300EUR leaving a negative stock of -10.
  3. Michael later on that day registers the receipt of 20 units of 25EUR/unit.
    1. The stock is +10
    2. The new average is 30EUR/unit. Current cost balance divided by current stock. (100 -300 + 500)/10.
  4. A cost adjustment is generated to adjust the cost of the shipment.
    1. The cost of the shipment is adjusted. The existing 5 units are valued at 20EUR/units, but the remaining 10 units are valued at the receipt's cost 25EUR/unit.
    2. The cost of the shipment is increased by 50EUR. From 300EUR to 350EUR.
    3. The new average is 25EUR/units. (100 - 300 - 50 + 500)/10

Functional requirements based on business processes

Cost Adjustment document
Id Requirement Importance Status
1.1 Window Cost Adjustment.


  • Reference Date
  • Type
  • Document Type and Number
  • Transaction
  • ... others TBD


  • Transaction
  • Transaction New Date
  • Difference Amount
Must have Started
1.2 Cost Adjustment process. The process:
  • The process that generates the adjustment must insert in the lines all the transactions that causes adjustments.
  • Based on the algorithm in use, searches for all involved transactions that needs to be updated and a line for each of them is created.
  • Adds the corresponding transactions costs to each transaction.
Must have Started
1.3 Process Checks:
  • There is not a later manual inventory amount set.
Must have Not Started
1.4 Ability to cancel cost adjustments:
  • When an adjustment is canceled the transaction costs need to be reverted and new transactions after the adjustments need to be adjusted.
Should have Not Started
1.5 Yes/No Flag for transactions permanently adjusted. Must have Not Started

Price Difference Corrections functionality
Id Requirement Importance Status
2.1 Process Price Difference Corrections.


  • Reference Date (mandatory)
Must have Not Started
2.2 The process:
  • Generates a Cost Adjustment Document.
    • Recalculate the cost of the transaction with current values and in case there is a difference an adjustment is created for it.
  • Adds a line for each transaction found that requires adjustments:
    • Difference in price of order and invoice.
    • Difference in inventory amount and ledger amount of zero stock products (Under discussion)
    • Order price updated after receipt calculation. (Under discussion)
    • Difference in price of invoice with invoice reactivated. (Under discussion)
  • Yes/No flag for transactions to be reviewed.
    • Set to true when a purchase order or invoice related to the receipt transaction is processed.
    • Set to false when the adjustment process is run.
Must have Not Started
2.3 The process is run as part of the Closing Period process. Must have Not Started
2.4 Ability to run the process periodically in background mode. Nice to have Not Started

Landed Cost functionality
Id Requirement Importance Status
3.1 Window Landed Cost:
  • Header (Date, Document type and number, type basic or advanced)
    • Receipts tab (Receipt id)
    • Landed Costs (amount, type)
    • Transactions (receipt's transactions ids, amount)
Must have Not Started
3.2 Process Landed Cost.
  • Generates a Cost Adjustment Document.
  • Adds a line for the transaction with the amount
  • Uses a user defined algorithm to distribute amount on each receipt line.
Must have Not Started
3.3 Ability to define landed costs on Goods Receipt windows.
  • Before completing the receipt.
  • In a tab under the header.
Must Have Not Started
3.4 Process to adjust differences on basic landed cost with received invoices. Nice to Have Not Started
3.5 Ability to assign to the receipt the invoices that originates the Landed Cost. Nice to Have Not Started
3.6 Ability to relate receipts to the invoices or documents that originates the landed cost. Nice to Have Not Started

Inventory amount update process
Id Requirement Importance Status
4.1 Process Inventory amount update.


  • Product
  • Reference date.
  • Warehouse. When the rule active on the reference date is based on warehouse.
  • Desired amount. Defaulted from product and date.
  • Quantity. Read only. Defaulted from product and date.
  • Average Cost. Defaulted from quantity and amount.
Must have Not Started
4.2 The process:
  • Generates 2 closing/opening inventories.
    • Closing inventory cost is the inventory amount on that moment. The costing background should be disabled during this process to avoid being it calculated as usual.
    • Opening inventory cost is the desired amount (average).
  • Generates a Cost Adjustment Document so the cost is adjusted to the reference date in case this is a different date than the current one.
  • Sets all transactions prior to the reference date as permanently adjusted.
Must have Not Started

Backdated Transactions functionality
Id Requirement Importance Status
5.1 Checked and adjusted by the Costing Server class. Must have Not Started
5.2 The process:
  • Generates a Cost Adjustment Document.
  • Adds a line for the given transaction with an empty adjustment amount.
  • Costing Background stopped while adjustment is done and processed.
Must have Not Started

Negative stock correction for Average Algorithm functionality
Id Requirement Importance Status
6.1 Checked and adjusted by the Average Algorithm. Nice to have Not Started
6.2 The process:
  • Generates a Cost Adjustment Document.
  • Adds a line for the transactions that need to be adjusted and the adjustment amount.
  • Costing Background stopped while adjustment is done and processed.
Nice to have Not Started

Manual Cost Corrections functionality
Id Requirement Importance Status
7.1 Button Manual Cost Corrections in Transaction tab of Product window.


  • Desired cost.
Must have Done
7.2 The process:
  • Generates a Cost Adjustment Document.
  • Adds a line for the given transaction.
Must have Started
7.3 Process Manual Cost Corrections.


  • Transaction
  • Current cost. Read only.
  • Desired cost.
Nice to have Not Started

Accounting process
Id Requirement Importance Status
8.1 Process to generate the journal entry of the adjustments.


  • Reference date.
Must have Not Started
8.2 The Process:
  • Searches all the adjustments pending to be posted of on a date before the reference date and posts them on the reference date.
Must have Not Started
8.3 Check on closing period. It should not be possible to close a period with adjustments pending to be posted. Should have Not Started

Upgrade of Openbravo's Costing Algorithms
Id Requirement Importance Status
9.1 Average Algorithm Must have Not Started
9.2 Standard Algorithm
  • When using standard algorithm user shouldn't enter manual standard cost entries in the costing tab.
  • To modify the standard cost user should use the Inventory Amount Update process.
Must have Not Started
9.3 FIFO Algorithm Must have Not Started

User Interface Mockups

Technical Requirements

Non-Functional Requirements

Open Discussion Items

  1. What happens is a backdated transaction is registered in the system after a balance update is done?
    • Balance for 31st of January is set to be 1000EUR.
    • Later a receipt of 25th of January is registered on 10th of February.
    • The receipt cost is calculated generating a new average cost as of 10th February.
    • The receipt cannot be adjusted to 25th of January as it would change the balance of 1000EUR.
    • Shall the cost and the average be calculated at all?
    • Shall the cost be adjusted from the 1st of February?
  2. Should we allow a easy process where all adjustments are posted on the same date than the original transaction?
  3. Reopening and modification of a purchase order whose receipt is processed and cost calculated.
    • Is it possible?
    • Should we create an adjustment?
  4. It has to considered the possibility of reactivating of a invoice and changing the price.
    • A invoice is processed with a wrong price.
    • The cost adjustment is done with the wrong price.
    • The invoice is reactivated and the price changed to the correct one, which is the order price.
    • There are 2 possibilities:
      • A new cost adjustment is done so the sum of both adjustments is zero.
      • The original adjustment is deleted. We would require to unpost it in case it is already posted.
      • The original adjustment needs to be reactivated or canceled when the invoice is reactivated. New process to consider (reactivating/canceling of existing adjustments).

Closed Discussion Items

Retrieved from ""

This page has been accessed 4,222 times. This page was last modified on 10 July 2014, at 09:58. Content is available under Creative Commons Attribution-ShareAlike 2.5 Spain License.