{"product_id":"advanced-inventory-reports-pro","title":"Advanced Inventory Reports Pro","description":"\u003cdiv class=\"hero\"\u003e\n\u003ch1\u003eAdvanced Inventory Reports Pro\u003c\/h1\u003e\n\u003cp\u003eTen inventory analyses for Dolibarr, and the share of the catalogue they describe\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch2\u003eFeatures\u003c\/h2\u003e\n\u003cdiv class=\"grid\"\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eInventory turnover, measured over one window\u003c\/b\u003e\u003cbr\u003eConsumption over the period divided by the\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eaverage stock held over that same period\u003c\/b\u003e, annualised on 365 days, with the days of cover and the trend against the previous window of equal length. Both terms of the ratio come from the same population: a numerator counting every exit against a denominator counting only the classified items reads high for no reason.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eFSN: what moves, what lingers, what sleeps\u003c\/b\u003e\u003cbr\u003eClassification by movement frequency:\u003cspan\u003e \u003c\/span\u003e\u003cb\u003efast\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eabove the high threshold,\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eslow\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003ebetween the two,\u003cspan\u003e \u003c\/span\u003e\u003cb\u003enon-moving\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003ebelow. Separated by warehouse, because the same reference can turn fast in one depot and sleep in another — and that is exactly the case the report exists to find. The published thresholds (3 and 1) are the default, not a constant.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eXYZ: where the stock value actually sits\u003c\/b\u003e\u003cbr\u003eThe first 70 percent of the value in class X, the next 20 in Y, the last 10 in Z, shares editable. The Pareto curve shows at a glance how few references carry the bulk of the capital: that is the number of lines actually worth steering.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eThe FSN × XYZ matrix, and the action each cell calls for\u003c\/b\u003e\u003cbr\u003eThe nine crossings, each with the action it calls for. The cell that matters is\u003cspan\u003e \u003c\/span\u003e\u003cb\u003edormant AND high value\u003c\/b\u003e: frozen capital, which neither report alone brings to the surface. The matrix does not recompute the classes — it reads back the two latest FSN and XYZ runs, because a cell that disagreed with the report it summarises would be worse than no cell at all.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eStock age, and its breakdown into buckets\u003c\/b\u003e\u003cbr\u003eDays since entry, per reference, then the same population summed into editable day buckets and per warehouse. Limited to\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eFIFO\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eand\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eweighted average\u003c\/b\u003e: without an entry layer there is no age to measure, and inventing one would put a figure on the screen that nothing supports. The dashboard states how much of the catalogue carries a method the measurement is possible on.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eOut of stock: what, when, how much to order\u003c\/b\u003e\u003cbr\u003eWhat the observed consumption rate will exhaust, on what date, and the quantity to order allowing for the supplier lead time and the safety horizon. The sale lost during the lead time is valued at the\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eselling price\u003c\/b\u003e: valuing it at cost would understate it by the whole margin. An item nobody consumes never appears here — that is dormant stock, not a stockout.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eOverstock: the excess, its value, and what it costs to keep\u003c\/b\u003e\u003cbr\u003eEverything held beyond the target coverage horizon: the excess quantity, its value, its share of the total and its\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eyearly holding cost\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eat the rate you set. Crossed with the XYZ and FSN classes, so that what is both expensive and immobile is dealt with first.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eStock movements in fourteen buckets, and they add up\u003c\/b\u003e\u003cbr\u003eOpening stock, purchases and purchase returns, sales and sales returns, transfers in and out, adjustments up and down, transit in and out, production, consumption, closing stock. Dolibarr records a movement type and an\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eorigin type\u003c\/b\u003e, and it is the origin that tells a purchase from a sales return from an inventory correction: a report reading only the type collapses all of them into \"in\". A\u003cspan\u003e \u003c\/span\u003e\u003cb\u003ebalance check\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eproves on every row that the columns add up.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eABC on consumption value\u003c\/b\u003e\u003cbr\u003eRanked on\u003cspan\u003e \u003c\/span\u003e\u003cb\u003econsumption\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003evalue, not on the value in stock: ABC answers \"what do we spend on\", XYZ answers \"what is lying in the warehouse\". Two different populations, so deliberately two tables, plus an ABC × XYZ crossing to read them together.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eStock snapshots, rebuilt for any past date\u003c\/b\u003e\u003cbr\u003eDolibarr keeps\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eno history\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eof stock levels:\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003ellx_product_stock\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003eholds the current quantity and nothing else. Any analysis \"as at\" a past date is therefore rebuilt by replaying the movement ledger backwards. Every snapshot states which of the two modes it used, and every line keeps the drift between the rebuilt quantity and today's level.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eWhat the figures do not cover, said out loud\u003c\/b\u003e\u003cbr\u003eAn item with no cost price, or whose costing method is not covered, is\u003cspan\u003e \u003c\/span\u003e\u003cb\u003enot\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003edropped into the cheapest band at random: it is counted, its reason is named, the Dolibarr field to fix is printed, and every run states what share of the catalogue its figures actually describe. This is the one mistake that would show on no screen — an item with no cost falsifies every share, every cumulated percentage and every class boundary downstream.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eSeven dashboards, 61 reports, alerts and delivery\u003c\/b\u003e\u003cbr\u003eSeven web dashboards (FSN, XYZ, the matrix, overstock, out of stock, movements, age breakdown), 61 reports in 8 families exportable to CSV, Excel, Word, PDF and JSON, configurable alert rules, column templates, scheduled e-mail delivery, a REST API of 44 routes, and a demonstration dataset that installs and uninstalls in one click.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch2\u003e\u003c\/h2\u003e\n\u003ch2\u003eWhat the module does not do\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cb\u003eThe module modifies no native Dolibarr table.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eIt creates its own\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003ellx_inventoryreportspro_*\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003etables and plugs in through hooks and triggers.\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eIt never runs an analysis while a page is being rendered\u003c\/b\u003e, nor inside a trigger. Classifying a catalogue is measured in seconds: doing it inside a product card would make the ERP wait for it, and doing it on every stock movement would do it hundreds of times an hour for one answer. The screens\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eread\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003ethe latest stored run, and say which one.\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eIt does not correct your data.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eIt names what is missing and the Dolibarr field to enter it in; the entry stays yours.\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eLIFO is not covered.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eBecause the layers consumed first are the newest ones, the age of what remains cannot be read off the movement history the way FIFO and weighted average allow. The module says so rather than producing a figure.\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eAn analysis \"as at\" a date is a reconstruction, not a reading.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eDolibarr keeps no history of stock levels: a past quantity is derived from the movement ledger, and the drift against the current level is kept on every snapshot line.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2\u003ePutting it to work\u003c\/h2\u003e\n\u003col\u003e\n\u003cli\u003eActivate the module. A complete demonstration set is already in place: 84 references across 6 warehouses, a year of movements and the ten analyses already run.\u003c\/li\u003e\n\u003cli\u003eGrant the permissions to your groups. Without a permission row, the left-menu entries stay greyed.\u003c\/li\u003e\n\u003cli\u003eCheck the cost price of your products: that is the only real prerequisite. The data-issue screen tells you which ones are missing and where to enter them.\u003c\/li\u003e\n\u003cli\u003eSet the analysis window and, if your sector calls for it, the FSN thresholds, the XYZ and ABC shares, the age buckets and the coverage bands.\u003c\/li\u003e\n\u003cli\u003eTake a stock snapshot, then run the ten analyses with\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eRun all\u003c\/b\u003e. The order is imposed: the matrix reads back FSN and XYZ, and overstock and ABC read back XYZ.\u003c\/li\u003e\n\u003cli\u003eEnable the scheduled jobs if you want the analyses to recompute on their own. They ship disabled.\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003ch2\u003eTechnical summary\u003c\/h2\u003e\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eModule number\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e1712000\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eDolibarr\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e16 to 23\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003ePHP\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e7.1 to 8.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eDepends on\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eProducts, Stock\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eTables\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e34, prefix\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003ellx_inventoryreportspro_\u003c\/code\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eColumns\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e559\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003ePermissions\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e33 in 14 groups\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eConstants\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e30\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eScheduled jobs\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eAnalyses\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e10\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eDashboards\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eReports\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e61 in 8 families\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eREST API\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e44 routes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eExports\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eCSV, Excel, Word, PDF, JSON\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eLanguages\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eEnglish, French, German, Italian, Spanish\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eCosting methods valued\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eFIFO, weighted average, standard cost\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eAge measurable on\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eFIFO, weighted average\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cdiv class=\"sig\"\u003eDeveloped by DoliResource\u003cbr\u003eCopyright © DoliResource\u003cbr\u003eWebsite :\u003cspan\u003e \u003c\/span\u003e\u003ca href=\"https:\/\/www.doliresource.com\"\u003ewww.doliresource.com\u003c\/a\u003e\n\u003c\/div\u003e","brand":"Dolibarr Resources","offers":[{"title":"Default Title","offer_id":54737841455422,"sku":null,"price":399.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/4174\/0094\/files\/Logo_Access_Manager_Pro_24_Oct_2026_1.40_pm.png?v=1792845641","url":"https:\/\/doliresource.com\/products\/advanced-inventory-reports-pro","provider":"DoliResource","version":"1.0","type":"link"}