انتقل إلى المحتوى الرئيسي

Costing Versions - Business Concepts

Overview

Costing Versions are containers that hold item prices (costs) for different purposes and time periods. They provide a structured way to manage, plan, and track product costs over time while maintaining complete historical accuracy.

Think of a Costing Version as a "snapshot" or "workspace" for item prices - you can have multiple versions active simultaneously for different purposes (standard costs vs. planned costs), and each version maintains its own complete price history.

Key Business Concepts

1. What is a Costing Version?

A Costing Version is a named collection of item prices that serves a specific business purpose. It acts as:

  • A container for item prices with date-effective pricing
  • A workspace for planning future costs
  • A historical record of cost changes over time
  • An approval boundary for price activation workflow

2. Costing Types

There are two main types of costing versions:

Standard Costing (CostingType.Standard)

  • Purpose: Represents the "official" costs used for financial transactions
  • Usage: Inventory valuation, cost of goods sold (COGS), variance analysis
  • Lifecycle: Typically one active standard version at a time per company
  • Example: "FY2024-STD" - Standard costs for fiscal year 2024

Planned Costing (CostingType.Planned)

  • Purpose: Represents future or proposed costs for planning and simulation
  • Usage: Budget planning, what-if scenarios, future price negotiations
  • Lifecycle: Multiple planned versions can exist simultaneously
  • Examples:
    • "2024Q2-PLAN" - Planned costs for Q2 2024
    • "SUPPLIER-ALT" - Alternative costs from different supplier

3. Version Status Lifecycle

Every costing version progresses through three states:

┌─────────┐    Activate    ┌────────┐    Close    ┌────────┐
│ Pending ├───────────────►│ Active ├────────────►│ Closed │
└─────────┘ └────────┘ └────────┘

Pending Status

  • Definition: Version has been created but not yet activated
  • Behavior:
    • Prices can be freely added and modified
    • Not available for financial transactions
    • Used for setup and data entry
  • Use Case: Setting up next year's standard costs

Active Status

  • Definition: Version is live and available for use
  • Behavior:
    • Available for financial transactions
    • Individual item prices can still be added (with date-effectiveness)
    • Existing prices cannot be modified (only deactivated)
  • Use Case: Current fiscal year standard costs

Closed Status

  • Definition: Version is archived and read-only
  • Behavior:
    • No changes allowed whatsoever
    • Remains available for historical reporting
    • Cannot be reopened
  • Use Case: Prior fiscal year costs (locked for audit)

4. Dual Activation Model

The system uses two levels of activation for maximum flexibility and control:

Level 1: Costing Version Activation

Controls whether the entire version is available for use:

Pending Version → Cannot use ANY prices
Active Version → Prices available based on individual activation
Closed Version → Read-only historical access

Level 2: Item Price Activation

Controls whether individual prices within an active version are effective:

Pending Price (IsActivated = false) → Not yet available
Activated Price (IsActivated = true) → Available for cost calculations

Why Both Levels?

This dual approach enables powerful workflows:

Scenario 1: Staged Price Entry

FY2024-STD (Status: Active)
├─ Item A0001: $10.00, FromDate: 2024-01-01 [✓ Activated] ← In use
├─ Item A0001: $12.50, FromDate: 2024-02-15 [✗ Pending] ← Future price, not yet effective
├─ Item B0002: $25.00, FromDate: 2024-01-01 [✓ Activated] ← In use
└─ Item B0002: $27.00, FromDate: 2024-03-01 [✗ Pending] ← Awaiting approval

You can:

  1. Keep the version ACTIVE for current operations
  2. Add 1000 new prices with future dates
  3. Review and approve each price individually
  4. Activate prices selectively when ready

Scenario 2: Approval Workflow

Step 1: Cost analyst enters 500 price updates → All pending
Step 2: Manager reviews first 100 prices → Activates approved ones
Step 3: Manufacturing continues using old prices for remaining items
Step 4: Manager completes review → Activates remaining prices

Scenario 3: Selective Correction

Problem: One price ($10.00) was entered incorrectly in an active version
Solution:
- Deactivate the incorrect price
- Add new correct price ($12.00)
- Activate the new price
- Version remains active for all other items

5. Date-Effective Pricing

Within a single costing version, you can have multiple prices for the same item with different FromDate values:

Item: A0001 in Version: FY2024-STD
├─ $10.00, FromDate: 2024-01-01 [Activated] ← Used Jan 1 - Feb 14
├─ $12.50, FromDate: 2024-02-15 [Activated] ← Used Feb 15 - Mar 31
└─ $14.00, FromDate: 2024-04-01 [Pending] ← Future price (not yet activated)

How it works:

  • When you query for a cost on January 20, 2024 → Returns $10.00
  • When you query for a cost on February 20, 2024 → Returns $12.50
  • When you query for a cost on March 15, 2024 → Returns $12.50 (most recent activated price)
  • The system selects the most recent activated price where FromDate <= QueryDate

Business Value:

  • Price Planning: Enter future prices weeks or months in advance
  • Historical Accuracy: Know exactly what the cost was on any past date
  • Regulatory Compliance: Maintain immutable audit trail of all price changes
  • Approval Workflow: Prices can be reviewed before activation

6. Common Business Scenarios

Scenario A: Annual Cost Update

Situation: New fiscal year requires updated standard costs

Steps:

  1. Create new version: "FY2025-STD" (Status: Pending)
  2. Bulk import 5,000 item prices from supplier data
  3. Review prices with procurement team
  4. Activate the version (Status: Active)
  5. Activate all individual item prices
  6. Close previous year version: "FY2024-STD" (Status: Closed)

Scenario B: Mid-Year Price Increase

Situation: Supplier raises prices effective March 1st

Steps:

  1. Open active version: "FY2024-STD"
  2. Add new prices for affected items (FromDate: March 1, 2024)
  3. Prices remain pending while negotiating with supplier
  4. Once confirmed, activate the new prices
  5. System automatically uses new prices for March 1st onward

Scenario C: What-If Analysis

Situation: Evaluating cost impact of switching suppliers

Steps:

  1. Create planned version: "SUPPLIER-B-EVAL"
  2. Enter alternative supplier prices
  3. Activate the planned version
  4. Run cost roll-ups and BOM calculations using this version
  5. Compare total costs vs. current standard
  6. Decision made → Either adopt prices or close the version

Scenario D: Correcting an Error

Situation: Discovered wrong price entered last month

Steps:

  1. Cannot modify activated price (immutable for audit)
  2. Deactivate the incorrect price record
  3. Add new price record with correct value and appropriate FromDate
  4. Activate the new price
  5. Both records remain in history for audit trail

Price Activation Workflow

Why Activate Individual Prices?

Individual price activation enables:

  1. Incremental Updates: Add 1000 prices to an active version, activate them as reviewed
  2. Approval Gates: Manager reviews and activates prices individually
  3. Rollback: Deactivate incorrect prices without closing the version
  4. Future Planning: Enter future prices, activate them when the effective date arrives

Activation Rules

  • Can activate prices in Pending or Active versions
  • Cannot activate prices in Closed versions
  • Can deactivate activated prices (e.g., to correct errors)
  • Can have multiple activated prices for same item with different FromDates
  • System uses most recent activated price where FromDate ≤= transaction date

Querying Prices

Active Prices Only (Default)

Query: GetItemPrice(ItemId: A0001, AsOfDate: 2024-02-20, IsActivated: true)
Returns: $12.50 (most recent activated price on that date)

Pending Prices (For Review)

Query: GetItemPricesForVersion(VersionId: FY2024, IsActivated: false)
Returns: All pending prices awaiting activation

All Prices (Historical Analysis)

Query: GetItemPriceHistory(ItemId: A0001)
Returns: Complete history of all activated prices

Integration with Other Modules

Inventory Module

  • Uses active standard costing version for inventory valuation
  • FIFO/LIFO methods reference historical prices from costing version

Production/Manufacturing

  • BOM cost calculations use prices from specified costing version
  • Can compare standard vs. planned versions for cost analysis

Accounts Receivable (AR)

  • Invoice COGS calculation uses active standard costing version
  • System queries price using invoice posting date

Financial Reporting

  • Cost of Goods Sold (COGS) calculated using active standard costs
  • Variance analysis compares actual costs vs. standard costing version

Best Practices

1. Version Naming Conventions

Standard Costs: FY[Year]-STD  (e.g., "FY2024-STD")
Planned Costs: [Year]Q[Quarter]-PLAN (e.g., "2024Q2-PLAN")
Simulations: [Purpose]-EVAL (e.g., "SUPPLIER-B-EVAL")

2. Lifecycle Management

  • ✅ Keep one active standard version per company/legal entity
  • ✅ Close previous year versions after fiscal year-end audit
  • ✅ Maintain planned versions for each upcoming quarter
  • ❌ Avoid having multiple active standard versions (creates confusion)

3. Price Entry Workflow

  1. Create prices with future FromDates
  2. Leave as pending during review/negotiation
  3. Activate prices once confirmed
  4. System automatically applies on FromDate

4. Audit and Compliance

  • Never delete price records (immutable history)
  • Deactivate incorrect prices, add corrected versions
  • Closed versions provide locked historical record
  • ActivatedDate field tracks when prices became effective

Technical Notes for Non-Technical Users

Why Prices Are Immutable

Once a price is activated, it cannot be edited. This is because:

  • Financial transactions may have already used that price
  • Regulatory requirements demand unchangeable cost history
  • Audit trails must be complete and tamper-proof

To "change" a price: Deactivate the old one, add a new one, activate the new one.

Why FromDate and ActivatedDate Are Different

  • FromDate: When the price becomes effective for calculations
  • ActivatedDate: When the price was approved and made available

Example: On January 15th, you activate a price with FromDate = February 1st.

  • Activated on January 15th (ActivatedDate)
  • Effective from February 1st onward (FromDate)

Summary

Costing Versions provide enterprise-grade cost management with:

  • ✅ Dual activation (version-level and price-level) for workflow flexibility
  • ✅ Date-effective pricing with complete historical trail
  • ✅ Support for multiple costing scenarios (standard vs. planned)
  • ✅ Immutable audit trail for regulatory compliance
  • ✅ Flexible approval workflows with staged activation
  • ✅ Time-travel queries for historical cost analysis