Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Warehouse
  3. kardex - stock card - valuation report | odoo kardex v 18.0
  4. Sales Conditions FAQ

kardex - stock card - valuation report | odoo kardex

by QoriTech https://odoootips.com
Odoo

$ 288.21

v 18.0 Third Party 9
Live Preview
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Inventory (stock)
• Discuss (mail)
• Invoicing (account)
• Purchase (purchase)
Community Apps Dependencies Show
• Direct Download Base
• M2M Tags Widget
Lines of code 11946
Technical Name qt_stock_card_kardex
LicenseOPL-1
Websitehttps://odoootips.com
Versions 16.0 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Inventory (stock)
• Discuss (mail)
• Invoicing (account)
• Purchase (purchase)
Community Apps Dependencies Show
• Direct Download Base
• M2M Tags Widget
Lines of code 11946
Technical Name qt_stock_card_kardex
LicenseOPL-1
Websitehttps://odoootips.com
Versions 16.0 17.0 18.0 19.0
  • Description
  • License
Stock Card Valuation (AVCO)
Odoo 18 Community & Enterprise
Know exactly what your inventory is worth

Your accountant needs stock cards. Odoo doesn't have them. This module solves that.

  • ✔ Stock card per product with running AVCO
  • ✔ Summary of all products — opening to closing
  • ✔ Instant Excel & PDF — 5-10x faster
  • ✔ Inventory vs Accounting reconciliation
  • ✔ Costing change detection + draft correction entries
  • ✔ 375 automated tests — production-grade
▶ Watch Demo
v18.0 ✔ CE ✔ EE ✔ .sh ✘ Online
How It Works

This module does not create stock movements. It reads what Odoo already recorded and presents it as a professional stock card with running AVCO.

How stock movements flow into the Stock Card
Compatible with all your Odoo workflows

Only Inventory is required. The rest are detected automatically if installed.

📦
Inventory
Required
🛒
Purchase
Auto-detected
💰
Sales
Auto-detected
🏭
Manufacturing
Auto-detected
💸
Landed Costs
Auto-detected
Don't have Purchase or Manufacturing? No problem — the stock card works perfectly with Inventory alone. Install more modules later and the stock card adapts instantly.
337
Tests
15
Business Cases
12
Drill-Downs
4
Exports
EN/ES
Languages
▶ Watch Demo
📖 Documentation
  • 📖 User Guide
  • 💼 Business Cases
  • 🔍 Advanced Analysis
  • 🚀 Performance
  • ⚙ Installation
  • ❓ FAQ
  • 📧 Support
User Guide
I. VIEWS I.1 Summary View I.2 Stock Card Detail I.3 Previous Balance I.4 SVL Actual Panel II. NAVIGATION II.1 Click to Open Docs II.2 Date Filter II.3 Search & Group II.4 Totals & SVL Check III. EXPORT → WIZARD III.1 Stock Card III.2 Summary IV. EXPORT → VIEWS IV.1 One Product IV.2 With Filters V. SETTINGS V.1 Detailed vs Simple V.2 Custom Colors VI. GETTING STARTED VI.1 User Permissions VI.2 The Wizard VI.3 Smart Selector VI.4 From Product Form VII. ANALYSIS VII.1 Reconciliation Bar

VI.2 The Wizard

🧭 The Wizard — select period, products, and output
Wizard

Inventory → Reports → Stock Card Valuation

PeriodSpecific month or custom date range
ScopePeriod Activity (auto) │ By Category │ Selected Products
LayoutDetailed (In/Out separated) or Simplified (net movement)
OutputPreview │ Stock Card Excel/PDF │ Summary Excel/PDF

I.1 Summary View

📋 Summary View — all products with opening and closing balance

All AVCO products in one table. Click any row to open its stock card.

Columns: Product, Category, Opening (Qty/Cost/Value), In, Out, Closing
Features: Sticky header/footer, server-side pagination, click-to-detail

I.2 Stock Card Detail

📊 Stock Card Detail — every movement with running AVCO

Every inventory movement for one product, in chronological order with running AVCO balance.

Each rowDate, partner, reference, origin, movement type
In / OutQuantity, unit cost, total value
Running balanceQty, AVCO unit cost, total value after each movement
Clickable refsOpens the source document (picking, invoice, MO, etc.)

I.3 Previous Balance

📅 Previous Balance — opening stock before the selected period
Previous Balance

First row of the stock card: accumulated Qty, AVCO cost, and value before the selected period. Calculated from all SVL records prior to the start date. In All-time mode, it is always zero.

II.1 Click to Open Source Documents

🔗 Click to Open Docs — trace any row back to its source

Every reference and origin tag is a clickable link. Opens the source document (receipt, delivery, PO, SO, MO) in a popup. Full audit trail from balance to transaction.

I.4 SVL Actual Panel

📊 SVL Actual Panel — real-time Qty, Cost, and Value from Odoo
SVL Actual Panel

Real-time valuation panel at the top of the detail view. Compare it against the closing balance to detect movements after the cutoff date.

QtyTotal from Stock Valuation Layers (quantity_svl)
CostProduct's standard_price — the official AVCO unit cost
ValueTotal inventory value (value_svl)

II.2 Date Filter in Views

📅 Date Filter — change period without returning to the wizard
Date Filter

From/To date pickers in both views. Click Apply to recalculate instantly. Detail view includes an "All Time" button for full history.

II.3 Search & Group by Category

🔍 Search & Group — find products and group by category

Search by name, code, or barcode. Group by category for collapsible subtotals. Pagination at 80 products/page. Filters and grouping carry over to Excel/PDF exports.

III.1 Stock Card Report

Wizard → Stock Card Excel / PDF — one file with all selected products. Excel: one sheet per product. PDF: one page per product, print-ready.
💾 Wizard → Stock Card — export all products in one file
📊 Excel Output — one sheet per product with all movements
Excel Output
📄 PDF Output — print-ready with company header and custom colors
PDF Output

III.2 Summary Report

Wizard → Summary Excel / PDF — all products in one table: opening, in, out, closing balance with Grand Total.
💾 Wizard → Summary — export valuation overview
📊 Excel Output — all products in one sheet with Grand Total
Excel Output
📄 PDF Output — A4, formatted for print
PDF Output

IV.1 Export One Product

Detail View → toolbar → Excel / PDF — exports the current product with active date range and layout. Manager role only.
💾 Detail View → Export single product
Export One Product

IV.2 Export with Filters

Summary View → toolbar → Excel / PDF — exports exactly what you see: active search, date range, and grouping are preserved. Manager role only.
💾 Summary View → Export with active filters
📄 PDF Output — with filters and grouping applied
PDF Output
📊 Excel Output — with filters and grouping applied
Excel Output
vs. Wizard export: Wizard includes ALL products in scope. This export includes only what's visible after your search/filters.

V.1 Detailed vs Simplified

Switch with one click in the toolbar. Same data, different column layout.

DetailedSimplified
Columns1512
MovementsSeparated: In (Qty, Cost, Total) + Out (Qty, Cost, Total)Merged: Movement (Qty, Cost, Total) — positive = in, negative = out
Best forAccountants, auditors, tax reportsManagers, quick reviews, presentations
Detailed Layout 15 columns
Detailed Layout
Simplified Layout 12 columns
Simplified Layout

V.2 Custom Report Colors

Choose header background and text color in the wizard. Applied consistently to views, Excel, and PDF exports.

① Set colors in the Wizard
Color Settings
② Colors applied in the Detail View
Colors in Detail View
③ Colors applied in Excel export
Colors in Excel

VI.4 Stock Card from Product Form

📦 Product Form → Stock Card smart button
Stock Card button on product form

Click the "Stock Card" button on any AVCO product form to open its full movement history. Works on both template and variant forms. No wizard needed.

VII.1 Reconciliation Bar

🔍 Reconciliation Bar — inventory vs accounting at a glance
Reconciliation Bar

Collapsible bar at the top of Summary View. Every number is clickable (12 drill-down actions).

Card Val. vs SVLIn report + Excluded = Total SVL?
SVL vs AccountingSVL value = accounting balance on valuation account?

VI.1 User Permissions

Settings → Users → Stock Card Valuation
User Permissions
RoleAccess
UserPreview, search, navigate, open from product form
ManagerAll above + Excel/PDF export + reconciliation + draft correction entries

VI.3 Smart Product Selector

⚡ Smart Product Selector — replaces Odoo's standard many2many widget

Odoo's standard widget sends one server request per product added/removed — freezes with 200+ products. This widget accumulates changes locally and syncs once. Search, browse, paginate (40/page), zero lag.

Included as dependency: qt_m2m_tags_widget installs automatically.

II.4 Totals & SVL Verification

Grand Total (footer) and category subtotals are compared in real time against Odoo's SVL via the reconciliation bar.

📊 Grand Total — footer row with totals across all products
Grand Total
📊 Category Subtotals — grouped by product category
Category Subtotals
Grand Total = what the report shows. SVL Total = what Odoo has. Reconciliation bar = the bridge between them. If they differ, click to see which products are excluded and why.
Business Cases
I. PURCHASES I.1 Multiple Purchases I.2 Bill Price Difference I.3 Vendor Discount I.4 Vendor Return + Credit I.5 Multicurrency (USD) I.6 Tax Included II. SALES & RETURNS II.1 Purchases + Sales II.2 Customer Return II.3 Vendor Return Chain III. COSTS & REVALUATIONS III.1 Landed Cost + Partial III.2 Landed Cost + Backorder III.3 Manual Revaluation III.4 Standard Price Change III.5 Price Fluctuations IV. ADJUSTMENTS IV.1 Adjustments & Scrap IV.2 Negative Stock V. MANUFACTURING V.1 MRP Production V.2 MRP Byproduct V.3 MRP Unbuild VI. LOGISTICS VI.1 Internal Transfers VI.2 Intercompany Transfer VI.3 Dropshipping VII. ANALYSIS VII.1 Monthly Close VII.2 Method Changes VII.3 Full SVL Coverage

I.1 Multiple Purchases

Flow: PO#1 → Receipt → PO#2 → Receipt → PO#3 → Receipt   |   Result: AVCO updates after each incoming
OperationRefInCostQtyAVCOValue
Receipt 1WH/IN/15631100$10.00100$10.00$1,000
Receipt 2WH/IN/1563250$12.00150$10.67$1,600
Receipt 3WH/IN/1563380$9.00230$10.09$2,320
Key point: Each receipt recalculates AVCO = (Previous Value + New Value) / (Previous Qty + New Qty). The stock card shows the AVCO change in every row.
📊 Stock Card — Multiple Purchases at Different Costs
Stock Card - Multiple Purchases

II.1 Purchases + Sales

Flow: Buy at different prices → Sell → Outgoing uses current AVCO   |   Result: AVCO does not change on sales
OperationInOutCostQtyAVCOValue
Purchase 200 @ $8200$8.00200$8.00$1,600
Purchase 100 @ $10100$10.00300$8.67$2,600
Delivery 120 units120$8.67180$8.67$1,560
Key point: The sale price is irrelevant here. The stock card only shows the cost of goods sold (COGS) at the current AVCO.
📊 Stock Card — Purchases + Sales (outgoing at current AVCO)
Stock Card - Purchases + Sales

I.2 Bill Price Difference

Flow: Receipt @ $10 → Bill arrives @ $13 → Odoo creates qty=0 revaluation (+$3 per unit)   |   Result: AVCO goes up
OperationRefInCostQtyAVCOValue
Receipt 100 @ $10WH/IN/15636100$10.00100$10.00$1,000
Bill at $13 (+$3 diff)F F001-941680+$3.00100$13.00$1,300
Receipt 50 @ $11WH/IN/1563750$11.00150$12.33$1,850
Bill at $12 (+$1 diff)F F001-977150+$1.00150$12.67$1,900
Key point: When the vendor bill price differs from the PO, Odoo creates a qty=0 valuation layer. The stock card shows this as a cost adjustment row (highlighted in yellow). The AVCO updates based on value / quantity in stock.
📊 Stock Card — Bill Price Difference (revaluation rows in yellow)
Stock Card - Bill Price Difference

I.3 Vendor Discount

Flow: Receipt @ $100 → Bill arrives @ $90 (discount) → Negative revaluation   |   Result: AVCO goes down
OperationRefInCostQtyAVCOValue
Receipt 1 @ $100WH/IN/156381$100.001$100.00$100
Bill at $90 (discount −$10)F F001-958030−$10.001$90.00$90
Key point: Same mechanism as case 3, but in reverse. The vendor gave a discount, so the AVCO decreases. Quantity stays the same — only value changes.
📊 Stock Card — Vendor Discount (negative revaluation)
Stock Card - Vendor Discount

III.1 Landed Cost After Partial Delivery

Flow: Receipt 10 → Deliver 4 → Add $50 freight → Only 6 units absorb it   |   Result: AVCO = $105.00
OperationInOutCostQtyAVCOValue
Receipt 10 @ $10010$10010$100.00$1,000
Delivery 4 units4$1006$100.00$600
Landed Cost $50 freight0+$5.006$105.00$630
Key point: Odoo distributes the freight ($50) proportionally by remaining quantity on the original receipt. Since 6 of 10 units remain, the SVL absorbs $30 ($50 × 6/10). AVCO = (600 + 30) / 6 = $105.00.
📊 Stock Card — Landed Cost after partial delivery (only remaining units absorb)
Stock Card - Landed Cost Partial

II.2 Customer Return

Flow: Receipt → Deliver → Customer returns → Re-enters at original delivery cost   |   Note: Odoo 18 default
OperationInOutCostQtyAVCOValue
Receipt 10 @ $2010$20.0010$20.00$200
Delivery 4 units4$20.006$20.00$120
Customer return 2 units2$20.008$20.00$160
Key point: Odoo 18 uses the cost from the original delivery, not the current AVCO. If prices changed between delivery and return, the AVCO may shift slightly.
📊 Stock Card — Customer Return (re-entry at historical cost)
Stock Card - Customer Return

II.3 Vendor Return + Return of Return

Flow: Receipt → Return to vendor (stock goes out) → Vendor sends back (re-entry)   |   Result: AVCO returns to original
OperationInOutCostQtyAVCOValue
Receipt 10 @ $2010$20.0010$20.00$200
Vendor return 4 units4$20.006$20.00$120
Re-entry (return of return)4$20.0010$20.00$200
Key point: The full return chain is traceable. Vendor return = outgoing at AVCO. Re-entry = incoming at the original cost. The stock card shows each step with clickable references.
📄 PDF Export — Vendor Return + Re-entry (full return chain)
PDF - Vendor Return Chain

IV.1 Inventory Adjustments & Scrap

Flow: Physical count differs from system → Adjust → AVCO stays the same   |   Scrap: same as negative adjustment
OperationInOutCostQtyAVCOValue
Receipt 10 @ $1210$12.0010$12.00$120
Positive adjustment +55$12.0015$12.00$180
Negative adjustment −66$12.009$12.00$108
Scrap 2 units2$12.007$12.00$84
Key point: Adjustments and scrap use the current AVCO. The average cost does not change — only quantity and total value adjust.
📊 Stock Card — Adjustments & Scrap (AVCO stays the same)
Stock Card - Adjustments Scrap

VI.1 Internal Transfer (Trace Row)

When you move stock between warehouses within the same company, the inventory value doesn't change — you still own the same products. The stock card shows a purple trace row so you can see the transfer happened.

Scenario: Buy 100 units @ $8 = $800 total. Then transfer 30 units from main warehouse (WH/Stock) to a second warehouse (wh2/Stock).
OperationRefInOutCostBal. QtyAVCOValue
Receipt 100 @ $8WH/IN/17087100$8.00100$8.00$800
Transfer 30 units to wh2WH/INT/0006300$0.00100$8.00$800
Why does the trace row show Qty=0 and Value=0? Because the transfer doesn't change the company's total inventory. You moved 30 units from one warehouse to another, but you still own 100 units worth $800. The stock card tracks valuation at company level, not per warehouse — so the balance stays the same.
The purple trace row tells you: "A transfer of 30 units happened on this date via WH/INT/00063." You can click the reference to see the full transfer details. But the AVCO and balance don't change.
📊 Stock Card — Receipt + Internal Transfer trace row (purple row = no balance impact)
Stock Card - Internal Transfer

VI.2 Intercompany Transfer

When you transfer stock between two different companies, each company gets its own SVL. This is different from an internal transfer (same company) — here, real valuation entries are created.

Scenario: Company 1 buys 50 units @ $20. Then sends 20 units to Company 2 via intercompany transit.
Company 1 — Stock card (sender)
OperationRefQtyValue
Receipt 50 @ $20WH/IN/17088+50+$1,000
Send to Company 2WH/OUT/06944-20-$400
Final: Qty = 30, Value = $600, AVCO = $20
Company 2 — Stock card (receiver)
OperationRefQtyValue
Receive from Company 1PE Co/IN/00001+20+$400
Final: Qty = 20, Value = $400, AVCO = $20
Key difference vs internal transfer: Internal transfers (same company) create a trace row with Qty=0. Intercompany transfers create real SVL entries — an outgoing in the sender company and an incoming in the receiver company. Each company has its own stock card.
In the module: When you open the stock card in Company 1, you see the receipt + outgoing. When you switch to Company 2, you see the incoming. The module tracks each company's valuation independently.
📊 Stock Card Company 1 — Receipt + outgoing to Company 2
Stock Card - Intercompany Company 1
📊 Stock Card Company 2 — Incoming from Company 1
Stock Card - Intercompany Company 2

V.1 MRP — Consume + Produce

Flow: Buy components → Manufacturing Order → Components consumed (out) → Finished product produced (in)
Component stock card (BC-V1-COMP):
OperationRefInOutCostBal. QtyAVCOValue
Receipt 1 @ $10WH/IN/156621$10.001$10.00$10
Receipt 1 @ $20WH/IN/156631$20.002$15.00$30
MO consumptionWH/MO/005632$15.000$15.00$0
Finished product stock card (BC-V1-FG):
OperationRefInCostBal. QtyAVCOValue
MO production 2 unitsWH/MO/005632$15.002$15.00$30
Key point: The component AVCO = ($10 + $20) / 2 = $15.00. The MO consumes 2 units at $15 = $30 total. The finished product enters at the same $30 (cost = $15/unit). Both stock cards reference the same MO (WH/MO/00563).
📊 Stock Card — Component (BC-V1-COMP): receipts + MO consumption
Stock Card - MRP Component
📊 Stock Card — Finished Good (BC-V1-FG): MO production
Stock Card - MRP Finished Good

V.2 MRP Byproduct — Cost Share

A factory produces juice from oranges. The main product is the juice, but the process also generates orange peel (byproduct). How much of the orange cost goes to the juice, and how much to the peel? That's what the BOM cost share defines.

In this example: We buy 2 units of raw material at $15 each = $30 total. One Manufacturing Order produces 2 finished goods + 2 byproducts. The BOM says: 90% of the cost goes to the finished good, 10% to the byproduct.
Step by step — what happens to the $30:
① Raw material is consumed
The MO takes 2 components out of stock.
Component: Qty 0, Value $0
It was all used up in production.
② Finished good receives 90%
$30 × 90% = $27
Finished: 2 units @ $13.50
This is the main product.
③ Byproduct receives 10%
$30 × 10% = $3
Byproduct: 2 units @ $1.50
Secondary product from the process.
In the stock card: Each product has its own stock card. The component card shows it going to zero (consumed). The finished good and byproduct cards show them entering stock at their proportional cost.
① Component (BC-V2-COMP) — Purchased 2 @ $15, then consumed by MO. Stock ends at zero.
Stock Card - Component
② Finished Good (BC-V2-FG) — Produced by MO. Received $27 (90% of $30). Unit cost = $13.50
Stock Card - Finished Good
③ Byproduct (BC-V2-BYP) — Produced by MO. Received $3 (10% of $30). Unit cost = $1.50
Stock Card - Byproduct

V.3 MRP Unbuild — Reverse a Production

You produced something, but now you need to undo it — maybe the product was defective, or you need the raw materials back. Unbuild reverses the Manufacturing Order: the finished product leaves stock, and the components return.

What happened: We bought 2 components (1 @ $10 + 1 @ $20 = AVCO $15). We produced 1 finished good (cost = $15). Then we unbuilt it — the finished good left stock and the component came back.
Finished Good (BC-V3-FG)
OperationRefQtyValue
MO productionWH/MO/00565+1+$15
Unbuild (leaves stock)UB/00124-1-$15
Final: Qty = 0, Value = $0. The product was disassembled.
Component (BC-V3-COMP)
OperationRefQtyValue
Receipt 1 @ $10WH/IN/15665+1+$10
Receipt 1 @ $20WH/IN/15666+1+$20
MO consumptionWH/MO/00565-1-$15
Unbuild (returns to stock)UB/00124+1+$15
Final: Qty = 2, Value = $30. All materials are back in stock.
Key point: Unbuild is the exact reverse of production. The finished good goes from 1 to 0. The component goes from 1 back to 2. Both reference the same unbuild order (UB/00124). The AVCO ($15) stays the same throughout — no value is lost.
📊 Stock Card — Component (BC-V3-COMP): bought, consumed by MO, then returned by unbuild
Stock Card - Unbuild Component
📊 Stock Card — Finished Good (BC-V3-FG): produced by MO, then removed by unbuild
Stock Card - Unbuild Finished Good

I.5 Multicurrency Purchase (USD)

Flow: PO in USD (company uses PEN) → Receipt converts at exchange rate (1 USD = 3.72 PEN) → Stock card shows values in PEN
OperationRefPO PriceRateInCost (PEN)QtyAVCOValue
ReceiptWH/IN/15677$30 USD3.7210S/111.6010S/111.60S/1,116.00
Conversion: 10 units × $30 USD × 3.72 (rate) = S/1,116.00 PEN. AVCO = S/111.60 per unit.
Key point: The PO is created in USD but the stock card always shows values in the company currency (PEN). Odoo converts at the exchange rate on the receipt date. If the vendor bill is posted on a different date with a different exchange rate, Odoo creates a qty=0 revaluation SVL to adjust the inventory value.
📊 Stock Card — Receipt converted from USD to PEN
Stock Card - Multicurrency
🛒 Purchase Order — Created in USD ($30 per unit)
Purchase Order in USD
💱 Exchange Rate — 1 USD = 3.72 PEN
Exchange Rate USD/PEN

I.6 Purchase with Tax Included

Flow: Gross price $110 with 10% tax included → Stock keeps only the net $100   |   Result: Taxes do NOT create stock card rows
OperationGrossTaxNet CostQtyAVCOValue
ReceiptS/118.0018% incl.S/100.001S/100.00S/100
Key point: The tax portion ($10) goes to the tax account, not to inventory. The stock card only shows the net inventory cost ($100).
💾 Excel Export — Stock Card downloaded from the system
Stock Card - Tax Included

VI.3 Dropshipping

Flow: Vendor ships directly to customer → Paired SVLs (in + out) → Stock closes at zero
OperationInOutCostQtyValue
Dropship incoming2S/25.002S/50
Dropship outgoing2S/25.000S/0
Key point: The product never enters your warehouse. Odoo creates both SVLs simultaneously. Stock card shows both movements but closes at zero.
📊 Stock Card — Dropshipping (paired in + out, net zero)
Stock Card - Dropshipping

III.2 Landed Cost with Backorder

Flow: Partial receipt 4 @ $10 → Landed cost $20 → Backorder 6 @ $10   |   Result: Final AVCO = $12.00
OperationInCostQtyAVCOValue
Partial receipt 4 @ $104$10.004$10.00$40
Landed Cost $200+$5.004$15.00$60
Backorder 6 @ $106$10.0010$12.00$120
Key point: The landed cost is applied to the first partial receipt only. When the backorder arrives at the original PO price, the AVCO blends both: (60 + 60) / 10 = $12.00.
📊 Stock Card — Landed Cost with backorder (partial receipt + freight + backorder)
Stock Card - Landed Cost Backorder

IV.2 Negative Stock

Flow: Sell more than available → Stock goes negative → New receipt resets AVCO
OperationInOutCostQtyAVCOValue
Receipt 10 @ $5010$5010$50.00$500
Oversell 15 units15$50-5$50.00-$250
New receipt 20 @ $5520$5515$55.00$825
Key point: When stock goes negative and new goods arrive, Odoo resets the AVCO to the new receipt cost. The stock card tracks this correctly.
📊 Stock Card — Negative Stock (oversell then restock)
Stock Card - Negative Stock

VII.2 Costing Method Changes

When someone changes a product's costing method (e.g. FIFO → AVCO), Odoo creates internal SVL entries to reset the valuation. These entries may not have matching accounting entries — leaving a gap between inventory and accounting.

📊 Stock Card — Method Change (FIFO → AVCO: empty + replenish SVLs)
Method Changes
What happens in Odoo when you change the costing method:
  • Empty SVL — Odoo removes all stock value with the old method (qty goes to 0)
  • Replenish SVL — Odoo re-enters the same stock with the new method (qty restored)
  • These two SVLs may not have matching accounting entries — this is a known Odoo behavior, not a bug in this module
What this module does:
  • Detects — scans all SVLs and finds those created by method/valuation changes
  • Analyzes — classifies the type of change and calculates the missing accounting value
  • Proposes a draft correction — creates a journal entry in draft state with the suggested accounts and amounts for the accountant to review
Important: The module does NOT publish the correction automatically. It creates the entry as a draft so the accountant can review, adjust if needed, and post manually. This is by design — accounting corrections should always be reviewed by a human before posting.

III.5 Price Fluctuations

Scenario: Market price spikes → AVCO absorbs the impact gradually → Stabilizes after normal purchases resume
MonthOperationRefInOutPriceBal. QtyAVCOValue
JanBuy 200 @ $5WH/IN/15656200$5.00200$5.00$1,000
FebSell 80WH/OUT/0627180$5.00120$5.00$600
MarBuy 100 @ $8 (spike!)WH/IN/15657100$8.00220$6.36$1,400
AprBuy 150 @ $5.50WH/IN/15658150$5.50370$6.01$2,225
Key point: The March price spike ($8 vs normal $5) pushes AVCO up to $6.36. But in April, buying 150 units at $5.50 brings it back down to $6.01. The stock card shows exactly how each purchase affects the running average — useful for spotting price trends and negotiating with suppliers.
📊 Stock Card — Price Fluctuations (AVCO absorbs the spike gradually)
Stock Card - Price Fluctuations

VII.1 Monthly Close Workflow

At the end of each month, you need to verify that your inventory valuation matches your accounting. This module does it in one screen.

📊 Reconciliation Bar — SVL Automated = Accounting Balance, Difference = 0.00
Monthly Close - Reconciliation
What the image shows:
Section 1 — Card Val. ↔ SVL: Are all products accounted for?
  • In Card Val.: 27 products (S/17,637.50) — AVCO products with activity in the selected period, shown in the report
  • Excluded: 3,046 products — products with SVL that are NOT in the report. Reasons:
    • Cost method: FIFO or Standard — only AVCO products appear in the card valuation
    • Archived — product was deactivated but still has SVL records from when it was active
    • No activity in period — AVCO storable product but no movement in the selected date range (has historical SVL only)
  • Total SVL: 3,073 products — the complete universe. If In report + Excluded = Total SVL, everything is accounted for
  • 19 Non-storable (S/44,290.00) — products that were changed from Storable to Consumable or Service after stock movements were recorded. The old SVL records still exist. These are flagged as anomalies for review
Section 2 — SVL vs Accounting: Does inventory value match the accounting books?
  • SVL Automated: S/17,637.50 — total valuation from Stock Valuation Layers (automated valuation products only)
  • Acct. Balance: S/17,637.50 — balance on the inventory valuation account in accounting
  • Difference: 0.00 ✔ — they match. Your inventory is reconciled with your books
How to use the summary view for monthly close:
  1. Open wizard → set the month → click Preview
  2. Expand the Reconciliation Bar → verify Difference = 0
  3. If difference ≠ 0: click the amount → see which products cause the gap → investigate in Odoo
  4. Use the summary view toolbar to export Excel or PDF if you need a copy for your records
Note: This module does not generate a special "monthly close report". It uses the same summary view with the reconciliation bar to help you verify that inventory matches accounting. The exports (Excel/PDF) are the standard summary and stock card exports — not a separate close document.

I.4 Vendor Return + Credit Note

Flow: Receipt 10 @ $100 → Bill @ $100 → Return 2 defective units → Credit note for returned goods   |   Result: Qty = 8, AVCO stays $100
OperationRefInOutCostQtyAVCOValue
Receipt 10 @ $100WH/IN/1567410$10010$100.00$1,000
Vendor return (defective)WH/OUT/062762$1008$100.00$800
Key point: The vendor return creates an outgoing SVL (stock card row). The credit note is a purely accounting document — it does NOT create a stock card row. This is Odoo 18's standard behavior: credit notes only affect accounting, not inventory valuation.
Credit note vs bill discount: If the vendor reduces the price (without returning goods), use a vendor bill at lower price (see case I.3 Vendor Discount). That creates a qty=0 revaluation row in the stock card.
📊 Stock Card — Vendor Return + Credit Note
Stock Card - Vendor Return + Credit

III.3 Manual Stock Revaluation

Flow: Go to Product → Inventory Valuation → Revaluation wizard → Add/subtract value   |   Result: AVCO changes, qty stays
OperationRefInCostQtyAVCOValue
Receipt 50 @ $20WH/IN/1565450S/20.0050S/20.00S/1,000
Manual revaluation +S/250Revaluation0+S/5.0050S/25.00S/1,250
Key point: Odoo's built-in revaluation wizard creates a qty=0 SVL. The stock card shows it as a value adjustment row. Useful for year-end adjustments or currency corrections.
📊 Stock Card — Manual Revaluation (+S/250 value adjustment)
Stock Card - Manual Revaluation

III.4 Standard Price Change

Flow: Change product's cost price manually while stock exists → Odoo creates revaluation SVL   |   Result: AVCO updates to new price
OperationInCostQtyAVCOValue
Current stock100$10.00100$10.00$1,000
Price change $10 → $120+$2.00100$12.00$1,200
Key point: Changing the product cost with stock on hand creates a revaluation SVL (qty=0, value = difference × qty on hand). The stock card captures this automatically.
📊 Stock Card — Standard Price Change ($10 → $12 with stock on hand)
Stock Card - Standard Price Change

VII.3 Full SVL Coverage

Before buying this module, you probably want to know: "Will it show ALL my inventory movements?" Here is the complete answer.

✔ YES — these operations appear in the stock card:
Purchases
  • Purchase receipt (full or partial)
  • Vendor bill with price difference
  • Vendor discount (bill lower than PO)
  • Multicurrency bill (exchange rate difference)
  • Tax included purchases (net cost only)
Sales & Returns
  • Sale delivery (full or partial)
  • Customer return (at historical cost)
  • Vendor return
  • Return of return (re-entry)
Costs & Revaluations
  • Landed cost (freight, customs)
  • Manual stock revaluation
  • Standard price change
  • Negative stock rounding adjustment
Manufacturing & Logistics
  • MRP: component consumed + finished good produced
  • MRP: byproduct with cost share
  • MRP: unbuild (reverse production)
  • Dropshipping (paired in + out)
  • Internal transfer (trace row for visibility)
  • Intercompany transfer (SVL per company)
✘ NO — these do NOT appear (and here's why):
OperationWhy it doesn't show
Customer invoice or credit noteIt's an accounting document — no stock movement happens
Vendor bill at the same price as the PONo price difference — no revaluation needed, nothing changed
Vendor credit note (without return)Credit notes are accounting-only — they don't create SVL in Odoo 18
Manual journal entriesNot linked to stock.move — the module reads only SVL-backed operations
Service or consumable productsNot inventoriable — Odoo doesn't create SVL for these product types
FIFO or Standard Cost productsThis module is designed for Average Cost (AVCO) only
The simple rule: if an operation creates a Stock Valuation Layer (SVL) for an AVCO product in Odoo, it will appear in the stock card. No exceptions. This is verified by 337 automated tests covering every case listed above.
337 automated tests verify every case above. Stock card values always match Odoo's inventory valuation layers.
Advanced Analysis
1. Difference Analysis 2. Anomaly Detection 3. Orphan Entries

1. Difference Analysis

Your inventory valuation (SVL) says S/3,757,742.87. Your accounting says S/3,758,289.01. That's a S/546.94 gap. Which products cause it? And why? This tool answers both questions.

🔍 Reconciliation Bar shows the gap → click Difference → Analysis opens below
Difference Analysis View
What the image shows:
  • Top — Reconciliation Bar: SVL Automated = S/3,757,742.87 vs Acct. Balance = S/3,758,289.01 → Difference: -546.94
  • Bottom — Difference Analysis (34 products): the module found 34 products where SVL ≠ Accounting, grouped by cause
  • "Entry without stock move" (1 product): an accounting entry of S/500.00 exists on the valuation account but is not linked to any stock movement
  • "Multiple causes" (33 products): a mix of unlinked entries + small rounding differences in linked entries
The module classifies the cause automatically:
CauseWhat it means in plain language
Entry without stock moveSomeone posted an accounting entry to the inventory account manually — it's not from a purchase, sale, or any stock operation
No accounting recordThe product has inventory value in Odoo, but nothing was posted to the accounting account — usually happens when valuation mode was changed
Linked entry mismatchBoth inventory and accounting entries exist from real stock operations, but the totals differ slightly — typically rounding or currency conversion
Multiple causesA combination: some entries are manual + some have rounding differences
Click "Investigate" on any product to see the exact journal entries or SVL records causing the difference. From there you can investigate in Odoo — check the product, review the entries, and decide the appropriate action.

2. Anomaly Detection

Someone changed a product from Storable to Consumable or Service — but the old inventory valuation records still exist. The module finds these products automatically.

⚠ 19 non-storable products with S/44,290 in orphaned valuation — click to see the list
Anomaly Detection
What the image shows:
  • Top: the reconciliation bar flags "19 NON-STOR (44,290)" — 13 Consumables + 6 Services that still have SVL records
  • Bottom: clicking the badge opens the SVL list for these products — you can see each product's quantity and value
Why it matters: These products have inventory value (S/44,290) but will never generate new valuation entries because they're no longer Storable. This creates a permanent gap. The module flags them so you can decide: write off the value, change the product type back, or leave as is.
How it got there: A warehouse user changed the product type to "Consumable" to stop tracking it, without realizing that old SVL records worth thousands still exist in the system.

3. Orphan Accounting Entries

Accounting entries on the inventory valuation account that don't have a product assigned. They affect the SVL vs Accounting comparison but can't be attributed to any specific product.

Where you see it: Summary View → Reconciliation Bar → SVL vs Accounting section → orphan entries count and value
What these are:
  • Journal entries on the valuation account without a product: someone posted a manual entry directly to the inventory account (e.g., account 2011100) without linking it to a product
  • Data migration artifacts: imported accounting entries that don't have the product_id field populated
  • Deleted products: the product was removed but the accounting entry remains
Why it matters: If the SVL total is S/17,637 but accounting shows S/18,000, the S/363 difference could be explained by orphan entries. The module shows you how many entries and what total value — so you can investigate and decide if they need to be reclassified or corrected.
Click to investigate: Opens the specific journal items on the valuation account that have no product. You can then assign the correct product, move them to another account, or create a corrective entry.
👻 Orphan Entries — accounting entries without product on valuation account
Orphan Entries
Performance
1. Detail Report 2. Summary Report

Detail Report — Stock Card

One sheet/page per product with every movement and running AVCO balance.

SPEED DEMO — DETAIL REPORT
How it works
ExcelXlsxWriter writes directly to disk (no RAM buffering). Atomic rename on completion. Ideal for large reports with 1,000+ products.
PDFReportLab generates in memory (BytesIO), then writes to disk. No wkhtmltopdf — 5-10x faster than standard Odoo reports.
DeliveryStreaming via wrap_file() — file goes straight to your browser. Delete-on-read: file removed from disk as download starts.
Benchmarks
VolumeExcelPDF
100 products~2s~3s
500 products~8s~12s
1,000 products~15s~25s
114,932 rows~20s~58s (3,062 pages)
OWL Preview: Instant at any scale — server-side pagination, only visible rows are loaded.

Summary Report — Valuation Overview

All products in one table: opening, in, out, closing balance with Grand Total.

SPEED DEMO — SUMMARY REPORT
How it works
ExcelXlsxWriter generates in memory (BytesIO) with merged headers and Grand Total row, then writes to disk for streaming delivery.
PDFReportLab generates in memory (BytesIO). A4 landscape, formatted for print. No wkhtmltopdf.
DeliverySame streaming engine: wrap_file() + delete-on-read. No database storage, no temp file accumulation.
Benchmarks
VolumeExcelPDF
100 products< 1s< 1s
500 products~2s~2s
1,000 products~3s~3s
3,070 products~3s~8s (70 pages)
OWL Preview: Instant at any scale — server-side pagination, only visible rows are loaded.
Tested with 3,000+ products and 90,000+ movements. Zero cron jobs. Zero background processes. Files auto-expire after 60 minutes + garbage collection for orphans.
Install (5 minutes)
1Download the ZIP from Odoo Apps
2Extract 3 folders into your addons path: qt_stock_card_kardex, qt_m2m_tags_widget, direct_download_base
3Restart Odoo → Apps → Update Apps List → search "Stock Card" → Install
Verify: Inventory → Reports → Stock Card Valuation → select month → Preview. If you see data, it works.
Requirements
RequirementWhere to set itWhy
AVCO Costing Method Inventory → Configuration → Product Categories → Costing Method Only AVCO products generate the valuation layers this module reads
Storable Products Product form → Product Type = "Storable Product" Consumables and Services don't create SVL records
Automated Valuation Product Categories → Inventory Valuation = Automated Needed for SVL vs Accounting reconciliation

❓ Frequently Asked Questions

Before Purchasing
Is it hard to install? How long does it take?
No — it takes under 5 minutes. Download the ZIP, extract 3 folders to your addons path, restart the server, and install from the Apps menu. There's no complex configuration. If your products already use AVCO costing, the module works immediately. See the Installation tab for the complete step-by-step guide.
How fast is report generation? I have a lot of products.
Very fast. The module uses a native PDF engine and an optimized Excel engine — both generate files in memory and deliver them instantly to your browser (no external tools, no database storage). For 100 products, an Excel report takes about 2 seconds. For 500 products, about 8 seconds. The interactive preview loads instantly because it uses server-side pagination. See the Performance tab for detailed benchmarks.
Does it work with my existing data? Do I need to configure anything?
Yes, it works with your existing data immediately. The module reads Odoo's Stock Valuation Layers (SVL) — the same data that Odoo's built-in inventory valuation uses. It doesn't create new tables or require data migration. If you have AVCO products with stock movements, you'll see results the moment you install.
Will it slow down my Odoo instance?
No. The module only runs when you explicitly open the wizard or view a report. It doesn't add background processes, cron jobs, or computed fields on stock moves. When idle, it has zero performance impact on your system.
Does it support multi-company?
Yes. The wizard automatically filters by the current company. Each company sees only its own products and stock movements. Reports include the company name and VAT in the header.
About the Module
What is a Stock Card (Kardex)?
A Stock Card is a detailed record of every inventory movement for a product — dates, quantities, costs, and a running balance after each movement. It's the standard tool accountants and auditors use to verify inventory valuation. In Latin America, it's commonly called "Kardex". Odoo doesn't include this report by default — that's why this module exists.
Why only AVCO? What about FIFO and Standard Cost?
AVCO (Average Cost) calculates a weighted average after each incoming movement. This module replicates that exact calculation row by row. FIFO assigns costs in first-in-first-out order, and Standard Cost uses a fixed price — both follow completely different calculation rules. Each would need a separate implementation. This module focuses on AVCO because it's the most widely used costing method globally.
Can I preview without downloading a file?
Yes! Click Preview in the wizard to open the interactive OWL view directly inside Odoo. You can search, filter, group by category, and click into any product's detail — all without any download. Only when you're ready to share or archive, export as Excel or PDF.
Does it support manufacturing (MRP)?
Yes. When a production order consumes components and produces a finished good, both sides are tracked in their respective stock cards — component consumption as outgoing, finished goods as incoming. The MRP module must be installed. See the Business Cases tab for a concrete example.
What about Landed Costs?
Fully supported. When you add freight, customs, or insurance costs to a receipt, the stock card shows each adjustment as a separate revaluation entry and the AVCO updates accordingly. See the Business Cases tab for a detailed landed costs example with numbers.
What is the "SVL Reconciliation" feature?
It's an automatic comparison between your inventory valuation (Stock Valuation Layers — what Odoo says your stock is worth) and your accounting entries on the inventory valuation account (what your books say). If they don't match, the module tells you which products cause the gap, classifies the reason, and lets you drill down to the exact problematic entries. See the Analysis Tools tab for full details.
Does it work with Odoo Online (SaaS)?
No. This module requires custom addons installation, which is only available on:
  • Community (self-hosted) ✔
  • Enterprise on-premises (self-hosted) ✔
  • Odoo.sh (cloud managed) ✔
  • Odoo Online (SaaS) ✘
How many products can it handle?
The module has been tested with 3,000+ products and 90,000+ inventory movements. Server-side pagination and optimized batch queries ensure smooth performance at any scale. 337 automated tests verify that calculations stay accurate regardless of volume.
Is the module translated?
Yes. The source code is in English, and a complete Spanish (es_PE) translation is included. The module uses Odoo's standard i18n system, so it automatically displays in the user's configured language. Adding more languages is straightforward via .po files.
Do you provide updates?
Yes. Bug fixes and improvements are published as updates on Odoo Apps. If you encounter an issue, contact us through the Support tab — we typically respond within 24 hours and publish fixes promptly.

📧 Support & Guarantees

🛡
Quality Guaranteed

337 automated tests covering every business flow. If you find a bug, we fix it — no questions asked.

💬
Fast Response

We respond within 24 hours on business days. Most issues are resolved within 48 hours.

🔄
Free Updates

Bug fixes and improvements are published as updates on Odoo Apps. Download anytime.

📞 Contact Us
🌐 Website
odootips.com
📧 Email
Send us an email
📝 When contacting support, please include:
  • Your Odoo version (17.0.x.y.z)
  • Module version (from Apps → module info)
  • Steps to reproduce the issue
  • Screenshots if applicable
Odoo Proprietary License v1.0

This software and associated files (the "Software") may only be used (executed,
modified, executed after modifications) if you have purchased a valid license
from the authors, typically via Odoo Apps, or if you have received a written
agreement from the authors of the Software (see the COPYRIGHT file).

You may develop Odoo modules that use the Software as a library (typically
by depending on it, importing it and using its resources), but without copying
any source code or material from the Software. You may distribute those
modules under the license of your choice, provided that this license is
compatible with the terms of the Odoo Proprietary License (For example:
LGPL, MIT, or proprietary licenses similar to this one).

It is forbidden to publish, distribute, sublicense, or sell copies of the Software
or modified copies of the Software.

The above copyright notice and this permission notice must be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author or have a question related to your purchase, please use the support page.
  • Ratings
  • Discuss
There are no ratings yet!
Excelent support
by
Javier Viniegra Bribiesca
on 3/23/26, 2:29 PM


We had an issue purchasing the module, and Wilder responded very quickly with a solution.



Highly recommended
by
CML
on 1/6/26, 12:06 PM

Great module, well-built and fully aligned with what is mentioned in the description. The support is outstanding—quick replies and effective solutions.


An excellent app and good support.
by
David Jesús Peralta Buendia
on 1/6/26, 11:18 AM

An excellent app and good support.


Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with