{"product_id":"nursery-management-dolibarr","title":"NURSERY MANAGEMENT - Dolibarr","description":"\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e1. Executive summary\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eNursery Management is a business module that turns Dolibarr into a complete production-management system for plant nurseries. It follows every plant from the seed lot or the mother plant it came from to the customer who received it: the production space it occupied, the sowing, pricking out, potting or grafting that created it, every cultural operation, watering, feeding and plant-protection treatment it received, the growth measurements and losses recorded on its batch, the quality grading it passed, the cost it accumulated and the margin it returned.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe module adds 50 business objects to Dolibarr, grouped into 17 menu areas, governed by 10 permission groups totalling 33 rights, and driven by 79 controlled vocabularies that keep the nursery trade language consistent across every screen, every report and every export. Fourteen cross-functional reports export to CSV, Excel, Word and PDF, a dashboard consolidates forty key indicators and ten charts, and a REST API exposes the data to field applications and third-party tools.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eNothing in the Dolibarr core is modified. Third parties, products, stock, users and documents remain those of your ERP; nursery data attaches to them. The module installs as a standard external module, is multi-entity aware, and ships in five languages.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e1.1 What the module delivers\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eA single production record — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003eone production batch carries its species, variety, rootstock, seed lot, location, planned, sown, germinated, real, lost, available, reserved and sold quantities, and its germination, success and loss rates.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eA modelled production space — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003enursery, sector, zone, greenhouse, polytunnel, growing bench, growing row and growing position, each with its own capacity and occupancy, so saturation is visible before it becomes a problem.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eA complete propagation record — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003esowing, pricking out, potting and propagation by cutting, grafting, budding, layering, division and in-vitro culture, each with its take rate and its cost.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eA defensible plant-health register — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003ediseases and pests, authorised products with their marketing authorisation number, treatments with pre-harvest and re-entry intervals, and scouting observations against an action threshold.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eReal production costs — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003ecost entries by category and nature, cost per plant, per batch and per species, revenue against cost, and margin by species, variety and batch.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eEnd-to-end traceability — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003eupstream to the seed lot and its supplier, downstream to the shipment, its plant passport number and the customer, openable from a scanned QR code.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e2. Scope and target users\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe module is designed for plant producers whose business is growing plants for sale rather than growing a crop for harvest. The vocabulary, the units and the indicators are those of the nursery trade: plug trays, godets and containers rather than hectares; germination rate, take rate and grading rather than tonnage; production cycle stages rather than a single harvest date.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" style=\"margin-bottom: 2.0pt;\"\u003e\u003cspan lang=\"EN-US\"\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e3. Functional architecture\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe module publishes one top menu and 17 menu groups. The order of the groups is the order of the nursery workflow: you describe the production space, then the botanical material, then what you bought to propagate it, then the campaign and the batches, then everything that happens to those batches, then what you sell, and finally what it all cost. \u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e3.1 The production workflow\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eA production batch is the spine of the module. It is created against a campaign, placed in a zone, a greenhouse or on a growing bench, and linked to a species, a variety, optionally a rootstock, and to the seed lot or plant material it came from. It then walks the nine stages of the production cycle, and every operation recorded against it feeds three things at once: its quantities, its traceability chain and its cost.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" style=\"margin-bottom: 2.0pt;\"\u003e\u003cspan lang=\"EN-US\"\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e4. Detailed functional description\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eEvery table below lists the fields the module actually manages on the object, the type of each field and, where the value is chosen from a controlled list, the vocabulary that supplies it. Every object additionally carries a reference, a status, an entity (for multi-company installations), creation and modification stamps and the users who created and last modified the record.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.1 Nurseries and the production-space hierarchy\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe production space is modelled on seven levels, so a plant can be located as loosely or as precisely as the business needs: nursery, sector, zone, greenhouse or polytunnel, growing bench, growing row and growing position. Every level carries its own area, plant capacity and current occupancy, which is what makes the occupancy rate and the saturation alert possible.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eA nursery can be linked to a Dolibarr third party, carries its plant passport registration number and its certifications, and holds GPS coordinates that feed the schematic nursery map. The map is drawn server-side from the recorded areas and occupancy rates: no external tile service is ever contacted.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eZones record cover type, ground type, and whether they carry irrigation, heating and shading.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eGreenhouses record structure and cover type, dimensions, heating type, target temperature and humidity, misting and benching.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003ePolytunnels record cover type and cover year, dimensions and ventilation.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eBenches record bench type (fixed, rolling, ebb-and-flood, mesh, ground, hydroponic), tray capacity and heating.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eA growing position can be bound to the production batch that currently occupies it.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" style=\"margin-bottom: 2.0pt;\"\u003e\u003cspan lang=\"EN-US\"\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.2 Botanical database: species, varieties and rootstocks\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe botanical database is the reference the whole module reads from. A species record carries its commercial and scientific name, its botanical family and genus, its type and habit, and the growing requirements that drive the cultural calendar: minimum, ideal and maximum temperature, ideal humidity, water and light requirement, growing medium and soil pH range, germination time in days, production time in months, best season and preferred propagation method.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eVarieties and cultivars are attached to their species and carry the breeder, the registration number, the colour, and five agronomic ratings expressed on the same five-level scale: productivity, cold resistance, drought resistance, disease resistance and vigour. Rootstocks carry the conferred vigour, tolerance to soil, limestone, drought and nematodes, and grafting affinity.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.3 Plant material and suppliers\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003ePlant material is registered as a lot, whatever its nature: seeds, bulbs, rhizomes, cuttings, scions, rootstocks, plantlets, tubers, layers or in-vitro material. Each lot carries its supplier lot number, its origin country, its germination rate, its purity and its thousand-seed weight, the quantity purchased and the quantity still available, the storage temperature and place, the certificate reference and the organic flag.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eTwo dates drive the alerts: the harvest date and the expiry date. A lot whose expiry falls inside the configured notice period is reported on the dashboard, and a lot can be moved through its own life cycle, from in stock to in use, reserved, depleted, expired, quarantined or rejected.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan lang=\"EN-US\"\u003e- \u003c\/span\u003e\u003c\/h3\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.4 Production campaigns and production batches\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eA campaign is the annual frame of the nursery: its start and end dates, its target and produced plant counts, the quantity sold, the target and actual revenue and the total cost. Batches, forecasts, orders and cost entries all attach to it, which is what allows one season to be compared with another.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe production batch is the central object of the module. It records where the plants came from (species, variety, rootstock, seed lot, material type and propagation method), where they are (nursery, zone, greenhouse, bench), how many there are at every point of the cycle (planned, sown, germinated, real, lost, available, reserved, sold), how well they did (germination rate, success rate, loss rate), what they are worth (unit cost, total cost, selling price) and what stage of the cycle they have reached. It also carries its own QR code, which opens the traceability screen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eThe germination rate, success rate and loss rate are computed from the recorded quantities of the same batch, never from unrelated populations.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eExpected and real ready dates make the gap between plan and reality measurable.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eQuality grade and container size on the batch are the ones the sales screens read.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.5 The nine-stage production cycle and its historisation\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe cycle is modelled as nine ordered stages: preparation, sowing, germination, pricking out, potting, growing on, hardening off, available and marketed. The batch carries the stage it is standing in now; the stage records keep the history.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eEach historised stage stores its order in the cycle, its start and end dates and its duration in days, the quantity that entered it, the quantity that came out of it and the quantity lost inside it, the zone it happened in, the operator responsible and the cost accumulated during the stage. That is what turns a cycle into an auditable record: where the plants were lost, and what each step of the cycle really cost.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.6 Sowing, pricking out, potting and propagation\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eFour dedicated objects record how plants are created and moved on, because the data each one needs is genuinely different.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eSowing records the seed lot used, the sowing method, the number of seeds, the number of trays and cells per tray, the sowing depth, the growing medium and the volume used, the temperature and humidity held, the expected and real germination dates and the germination rate obtained. Pricking out records the move from one zone to another, the container and growing medium used, the spacing and the quantities in, out and discarded. Potting records the potting type (first potting, repotting, potting on, root ball, containerising, final pot), the container it came from and the container it went into, and separates the container cost from the growing-medium cost.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003ePropagation covers the vegetative methods: cutting, grafting, budding, layering, division, in-vitro culture and suckers. It records the grafting type used, the mother plant reference, the rooting hormone, the quantities prepared, taken and failed, the resulting take rate and the date the take was checked.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.7 Cultural operations\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eEvery other piece of work done on a batch is recorded as a cultural operation: pruning, weeding, staking, spacing, hardening off, labelling, sales preparation, sorting, cleaning, watering, feeding and treatment. An operation carries a planned date and an actual date, so the module can report what is late, a priority level and a status, the number of operators and the hours spent, the quantity of plants treated, the equipment used and its labour and input costs.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eOperations flagged as planned with a past planned date feed the overdue-work alert.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eThe labour cost is derived from the operator hourly rate, the input cost from the materials consumed; both roll up into the cost of the batch.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.8 Growth monitoring and losses\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eGrowth is measured on a sample, not on a guess: sample size, height, collar and stem diameter, number of leaves and branches, root length, fresh weight, leaf colour, health state, vigour and homogeneity, with an optional photograph. The growth screen plots height, collar diameter and leaf count over time for one batch and compares it with the other batches of the same species at a comparable age.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eLosses are recorded separately, with their cause taken from a thirteen-value list (non-germination, disease, pest, drought, over-watering, frost, heat stress, handling, growing medium, transport, quality, theft, unknown), the stage of the cycle they happened in, the quantity and rate lost, the unit cost and the value destroyed, whether the loss was avoidable and the corrective action decided.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.9 Production forecasting\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eForecasting answers the question a nursery is asked months in advance: how many saleable plants of that species and that variety will be ready in that month. A forecast carries the campaign, the species and variety, the target month, the forecast, confirmed and real quantities, the resulting accuracy, the expected price and revenue and a confidence level, so forecasting quality itself can be measured season after season.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.10 Irrigation and water management\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eWater is managed from the resource down to the individual watering. A water source records its type (borehole, well, mains, rainwater, pond, river, recycled, canal), its capacity, flow rate and annual quota, the volume already consumed, its pH, electrical conductivity and quality rating, the date of the last analysis, its price per cubic metre and whether it is pumped.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eAn irrigation programme binds a zone or a greenhouse to a water source with a method (sprinkler, drip, sub-irrigation, misting, boom, manual, capillary, flooding), a frequency, a number of cycles per day, a duration, a volume per cycle, a start time and a season. Individual watering records then carry the real duration and volume, the volume per plant, the water temperature, whether the pass was a fertigation, and the water and energy cost, so consumption and cost can be read per batch and per greenhouse.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.11 Fertilisation\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe fertiliser register carries the type, the supplier and commercial reference, the N, P, K and Mg content, the organic-matter percentage, the physical form, the organic certification flag, the minimum and maximum dose with its unit, the stock held and its alert threshold and the unit price.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eApplications record what was really applied: the batch and zone, the product, the date, the method (broadcast, fertigation, foliar, incorporated, top dressing, slow release), the dose and quantity used, the area and number of plants treated, the solution volume, the EC and pH of the solution, the product and labour cost and a rating of the observed effect.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.12 Plant protection\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003ePlant protection is built as a register that can be produced at an audit. The disease and pest database describes each problem: its type (fungus, bacterium, virus, insect, mite, nematode, mollusc, weed or physiological disorder), the organ affected, the symptoms, the conditions that favour it, the season of risk, its default severity, the prevention advice and whether it is a quarantine organism.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe product register carries the active substance and concentration, the marketing authorisation number, the physical form, the dose range, the pre-harvest interval in days, the re-entry period in hours, the maximum number of applications per season, the toxicity class, whether the product is allowed in organic production, and the stock held with its alert threshold.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eEach treatment records the batch and zone treated, the product and the target disease, the treatment type and application method, the dose and quantity used, the solution volume, the area and number of plants treated, the calculated end of the pre-harvest interval and of the re-entry period, the weather conditions and temperature, the measured efficacy, the equipment and operator, and whether personal protective equipment was worn. When the corresponding setting is enabled, a batch still inside its pre-harvest interval is blocked from shipment.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eHealth observations are the scouting side of the same register: sample size, number of plants affected, infestation percentage, severity, organ affected, whether the action threshold was reached, the action required and the treatment that answered it.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.13 Stock: growing media, containers, supplies, movements and inventories\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe module manages the three stock families a nursery consumes daily, each with its own characteristics. Growing media carry their composition, pH, electrical conductivity, density, water retention, porosity, sterilisation and organic certification, stock in litres and price per litre. Containers carry their type, size, material, volume, diameter, height and number of cells, recyclability and biodegradability, stock and unit price. Supplies cover everything else: tools, packaging, irrigation parts, energy, consumables and spares, optionally linked to a native Dolibarr product.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eEvery entry, exit, transfer, adjustment, consumption, scrapping, inventory correction and return is recorded as a stock movement carrying its value and the batch that consumed it. Inventories record the count itself: type, number of items counted, number of gaps found, theoretical, counted and gap values and the resulting accuracy.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.14 Sales, shipments and purchasing\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eCustomers are typed by trade (garden centre, landscaper, local authority, wholesaler, retailer, farmer, forestry operator, individual, exporter), linked to a Dolibarr third party, and carry their discount, payment terms, order count, cumulative revenue, last order date and loyalty level.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eA sales order line binds a customer to a batch, a species and a variety with a container size and a quality grade, the quantity ordered and delivered, the unit price and discount, the amounts excluding and including tax, and — because the cost is known — the unit cost, the margin amount and the margin rate on the very same row. The order can reference the native Dolibarr order it belongs to.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eShipments record the dispatch itself: date, expected date, quantity shipped, number of pallets and Danish trolleys, total weight, carrier, tracking number, destination town, distance and transport cost, the plant passport number and the QR code printed on the consignment.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003ePurchasing closes the loop upstream: supplier orders and receipts for seed lots and supplies, with ordered and received quantities, unit price, amounts and the supplier invoice reference.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.15 Quality control and certifications\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eQuality checks are recorded by type: visual, sizing, root system, sanitary, homogeneity, packaging and final check. Each carries the sample size, the number of conforming and non-conforming plants, the resulting conformity rate, the average height and diameter, the root and foliage quality, the homogeneity, the grade awarded (Extra, A, B, C or discard), the result, the cause of any non-conformity and the corrective action.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eCertifications record the scheme (organic, plant passport, GlobalG.A.P., ISO 9001, MPS, Label Rouge, specialised plant labels), the certificate number, the issuing body, the issue and expiry dates, the scope, the last and next audit dates, the annual cost and the supporting document. A certificate whose expiry falls inside the configured notice period is reported on the dashboard.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.16 Workforce, time entry, equipment and maintenance\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eOperators are recorded with their job role, contract type, hire and end dates, hourly cost, weekly hours, skill level and — for plant-protection work — whether they hold a spraying licence and its number. An operator can be linked to a Dolibarr user.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eTime entries bind an operator to a batch, a zone and an operation on a given day, with hours worked and overtime, the quantity done, the resulting productivity per hour, the hourly cost and the labour cost, and a validation flag. The field-entry screen is a large-target, mobile-friendly form that records and costs one operation in a few taps.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eEquipment carries its type, brand, model, serial number, purchase date and price, power, hours of use, hourly cost, next service date and status. Maintenance records the intervention: type, provider, duration, downtime, parts and labour cost and the next due date.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.17 Costing and profitability\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eCost entries are the analytical backbone. Each one carries a category (seed, growing medium, container, fertiliser, plant protection, labour, water, energy, equipment, transport, packaging, overhead) and a nature (direct, indirect, fixed, variable), and is attached to a campaign, a batch, a nursery or a species. Because it also carries the number of plants concerned, it produces a cost per plant directly.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe costs and profitability screen consolidates cost by category, by batch and by species, then sets revenue against cost per campaign and per month to give the gross margin and the margin rate. The reference prices used when a cost is not entered manually — water per cubic metre, energy per kWh, labour per hour and growing medium per litre — are module settings.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.18 Traceability and QR codes\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eEvery production batch and every shipment carries a QR code. The traceability screen opens either from the batch or directly from a scanned code, and rebuilds the whole chain in one page: upstream, the seed lot or plant material, its supplier, its lot number, origin and certificate; in the middle, the batch itself with every cultural operation, treatment, watering, feeding and consumed input recorded against it; downstream, the sales orders, the shipments, the plant passport numbers and the customers who received the plants.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe label generator prints production batch, growing position and shipment labels with an inline QR code and exports them as a PDF sheet. The QR matrix is built server-side and drawn as plain SVG rectangles: no image and no pixel is ever fetched from a remote service, so labels print identically on a nursery with no internet connection.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e4.19 Alerts\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eAlerts are persisted objects, not screen decorations. Each one carries its type, its severity, the date it was raised and the date it is due, the nursery, zone and batch concerned, a reference to the object that raised it, the message, the recommended action, the operator it is assigned to, its closing date and its status (open, acknowledged, in progress, resolved, closed).\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eA daily scheduled job recomputes the whole alert set, and the alert console can recompute it on demand. Thirteen situations are watched:\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eSupplies below the alert threshold\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eSeed lots close to expiry\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eGermination rate below threshold\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003ePlant health observations above threshold\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eBatches within pre-harvest interval\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eOverdue crop operations\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eBatches ready to market\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eOrders to deliver\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eBatches with abnormal loss rate\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eZones close to saturation\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eCertifications to renew\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEquipment out of order\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eMaintenance to schedule\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e5. Dashboard\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe dashboard is the landing page of the module. It presents 40 indicators grouped into seven themed zones, the nine-stage production cycle with the number of batches standing in each stage and the current stage highlighted, the latest health observations, the supplies closest to their alert threshold, the alerts still to be handled, and ten charts. The number of rows shown in each dashboard table is a module setting. \u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eMonthly charts are always built from a complete twelve-month axis ending on the current month, so a month with no activity is shown as an empty column instead of silently shifting the series.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e6. Reporting\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe reporting engine publishes 14 cross-functional reports. Each report declares the filters it honours, so a filter that cannot apply to a report is never offered, and each report offers a status selector fed by its own controlled vocabulary. Rows, totals, indicator cards and charts are produced from the same raw result set and formatted in a single pass, so the screen, the CSV, the spreadsheet and the PDF can never drift apart.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e6.1 Export matrix\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eEvery report exports to four formats from the same screen. All fourteen reports support all four formats.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" style=\"margin-bottom: 2.0pt;\"\u003e\u003cspan lang=\"EN-US\"\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eAccented characters are decoded before they are written to CSV and PDF and escaped for the Excel and Word exports, so no export ever shows an HTML entity.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEvery export carries the report title, the period covered, the generation date, the row cap actually applied and the publisher line.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eThe default reporting window covers the whole recorded campaign history, not the civil year, so a production cycle that straddles two years is never cut in half.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eThe number of rows returned by a report is a module setting.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e7. Permissions\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003ePermissions are organised into ten business groups plus reporting, demonstration-data management and administration, for a total of 33 rights. Each business group grants read, write and delete independently, so least privilege can genuinely be applied: an irrigation technician never sees the sales figures, and a salesperson cannot alter a plant-protection record.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eRead and write are granted by default so the module is usable immediately after activation. Delete, demonstration-data management and administration are off by default and must be granted explicitly. Menu groups are hidden from users who do not hold the matching read right, and every page and every API route re-checks the right server-side.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e8. Configuration\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe settings page is reached from Administration, Settings inside the module. It is reserved to Dolibarr administrators and is organised into seven sections: general settings, production cycle, irrigation, plant protection, stock and alerts, dashboard and reports. Every posted value is whitelisted and normalised before it is stored: a numeric setting can never be negative, and a list setting only accepts a code the vocabulary actually offers.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" style=\"margin-bottom: 2.0pt;\"\u003e\u003cspan lang=\"EN-US\"\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe general section additionally holds the default currency used by the cost and margin screens (PEPINIERE_DEFAULT_CURRENCY), which is initialised from the currency of the Dolibarr instance.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e8.1 Demonstration dataset buttons\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe settings page carries two buttons and a live counter of the demonstration rows currently present, counted straight from the module business tables.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" style=\"margin-bottom: 2.0pt;\"\u003e\u003cspan lang=\"EN-US\"\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e9. Integration with native Dolibarr modules\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe module declares a dependency on Third parties and Products and reuses the native objects rather than duplicating them. Where a nursery record points at a Dolibarr object, the list and card screens render it as the standard clickable Dolibarr link, with its own icon and its own tooltip.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e10. REST API\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe module publishes its own REST API under the \/pepiniere\/ prefix of the native Dolibarr API. Authentication uses the Dolibarr API key: the key is issued on the user record and sent on every call in the DOLAPIKEY header, exactly as for the native endpoints. Every route re-checks the caller's rights against the permission group of the object family it touches, and answers 401 when the caller is not authenticated, 403 when the right is missing, 404 when the object type or the record does not exist and 400 when a filter names a column that does not exist.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eGeneric routes cover reading and writing every one of the 50 object types; the named routes below are convenience shortcuts and computed views on top of them.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eCollection routes accept sortfield, sortorder, limit, page and an optional column:value filter; the sort and filter columns are whitelisted against the real table columns before they reach the SQL.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEvery result set is scoped to the caller's entity.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eThe traceability route returns the whole chain of a batch in a single response: seed lot and supplier upstream, operations, treatments, waterings, feedings and consumed inputs in the middle, orders, shipments and customers downstream.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e11. Technical specification\u003c\/span\u003e\u003c\/h1\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e11.1 Architecture\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eStandard external module — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003einstalls into custom\/ or as a ZIP through the module deployment screen; activation creates the tables, the menus and the rights and can seed the demonstration dataset.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eSelf-healing schema — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003eDolibarr only ever creates tables, never alters them, so the module verifies its own schema at activation and adds any column introduced by a later version.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eNo core modification — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003eno native file is patched, renamed or overridden; removing the module leaves Dolibarr exactly as it was.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eMulti-entity — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003eevery query filters on getEntity('pepiniere'), so a multi-company installation keeps each entity's nurseries strictly separate.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eResponsive interface — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003elist and card screens, the dashboard and the field-entry form adapt to tablet and phone widths; the field-entry form is built for large touch targets and works with gloves on.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\"\u003eOffline-friendly — \u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003ethe map, the charts and the QR codes are rendered server-side; the module never contacts an external service, a tile server or a CDN.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e11.2 Security\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEvery write action is protected by a CSRF token and every form issues a fresh one.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEvery posted setting is whitelisted and normalised before storage; a list setting only accepts a code the vocabulary offers, a numeric setting is clamped.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eSort fields and filter columns arriving from the interface or the API are validated against the real columns of the table before they reach the SQL.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEvery page and every API route checks the permission of its own object family, server-side, in addition to the menu being hidden.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eDelete, demonstration-data management and administration rights are off by default.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eOutput is escaped; codes are always rendered through their translated label and never printed raw.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eNo hard-coded credential, no plain-text password, no outbound call to a third-party service.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch2\u003e\u003cspan lang=\"EN-US\"\u003e11.3 Controlled vocabularies\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe 79 vocabularies below are the closed lists the module offers on its selectors. Values are stored as stable codes and displayed through their translated label, which is what allows the same database to be read in five languages and keeps reports comparable from one season to the next.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e12. Languages\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe module ships in five languages: French, English, Spanish, Italian and German, with 1 488 translation keys per language. Not a single visible string is hard-coded in PHP or JavaScript.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEvery key is prefixed with Pep, so wording coming from another installed module can never overwrite the nursery vocabulary.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eThe nursery labels are re-asserted after the page header is rendered, because rendering the header reloads the language files of the other active modules.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eThe trade vocabulary itself — the 79 controlled lists — is translated key by key, so a report produced in Spanish reads as a Spanish nursery report, not as English codes.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e13. Demonstration dataset\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eOne click installs a complete, coherent and entirely fictitious nursery business, so the module can be evaluated with populated screens, meaningful charts and non-empty reports from the first minute. A second click removes it, touching only the rows technically marked as demonstration data.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe dataset spans the whole functional scope: sowings, prickings out, pottings and propagation operations, cultural operations, waterings, fertiliser applications, plant-protection treatments and health observations, growth measurements and losses, stock movements and inventories, quality checks and certifications, operators, time entries, equipment and maintenance, customers, orders, shipments, purchases, cost entries and alerts.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpFirst\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEvery batch stage of the nine-stage cycle is populated, so the cycle strip on the dashboard is never empty.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eEvery monthly series covers at least twelve months, so no chart is flat because the history is too short.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpMiddle\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eDeliberate outliers are included — seed lots inside and past their expiry window, batches above the loss threshold, zones close to saturation, overdue operations, equipment out of order — so every alert can be seen working.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoListBulletCxSpLast\" style=\"margin-left: 18.0pt; mso-add-space: auto; text-indent: -18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;\"\u003e\u003c!-- [if !supportLists]--\u003e\u003cspan lang=\"EN-US\" style=\"font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;\"\u003e\u003cspan style=\"mso-list: Ignore;\"\u003e·\u003cspan style=\"font: 7.0pt 'Times New Roman';\"\u003e       \u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!--[endif]--\u003e\u003cspan dir=\"LTR\"\u003e\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003eAll demonstration rows are tagged, which is what makes the removal exact.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003ci style=\"mso-bidi-font-style: normal;\"\u003e\u003cspan lang=\"EN-US\" style=\"color: #6b7d66;\"\u003eAll demonstration data is fictitious and provided for demonstration purposes only. Names, quantities, doses, thresholds and prices are illustrative and are not a technical recommendation.\u003c\/span\u003e\u003c\/i\u003e\u003cspan lang=\"EN-US\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1\u003e\u003cspan lang=\"EN-US\"\u003e14. Legal notice and disclaimer\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThis module is a management tool. It does not replace agronomic diagnosis, plant-protection prescription, or the regulatory obligations regarding plant passports and traceability.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe pre-harvest and re-entry intervals, doses, toxicity classes and marketing authorisation numbers recorded in the module are those entered by the user. It is the responsibility of the nursery to keep them aligned with the product labels and with the regulations in force in its own country, and to comply with the conditions of use of every plant-protection product it applies. The blocking of shipment during a pre-harvest interval is a configurable aid, not a legal guarantee.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThe plant passport numbers, certificate numbers and traceability chains produced by the module reflect the data captured by the user. They do not constitute an official certification and do not discharge the operator from the registration, labelling, record-keeping and notification duties imposed by the plant-health authority of its territory.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003eThresholds, reference prices and standard cycle lengths supplied as defaults are starting points for configuration, not agronomic or financial advice. The module is distributed under the GNU General Public License v3, without warranty of any kind, to the extent permitted by applicable law.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\"\u003e\u003cspan lang=\"EN-US\"\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" align=\"center\" style=\"margin-bottom: 2.0pt; text-align: center;\"\u003e\u003cb style=\"mso-bidi-font-weight: normal;\"\u003e\u003cspan lang=\"EN-US\" style=\"font-size: 11.0pt; line-height: 112%; color: #1b5e20;\"\u003eNursery Management 1.0.0 — published by DoliResources\u003c\/span\u003e\u003c\/b\u003e\u003cspan lang=\"EN-US\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" align=\"center\" style=\"margin-bottom: 2.0pt; text-align: center;\"\u003e\u003cspan lang=\"EN-US\" style=\"color: #2f7d32;\"\u003ewww.doliresources.com\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"MsoNormal\" align=\"center\" style=\"text-align: center;\"\u003e\u003cspan lang=\"EN-US\" style=\"font-size: 9.0pt; mso-bidi-font-size: 11.0pt; line-height: 112%; color: #6b7d66;\"\u003eCopyright © 2026 DoliResources · Document issued on 22 July 2026\u003c\/span\u003e\u003cspan lang=\"EN-US\"\u003e\u003c\/span\u003e\u003c\/p\u003e","brand":"Dolibarr Resources","offers":[{"title":"Default Title","offer_id":53954683306302,"sku":null,"price":299.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/4174\/0094\/files\/RefinedVectorLogoforDoliCRMPro_28849e17-a3d6-44a9-959c-cd66d8abab40.png?v=1784801815","url":"https:\/\/doliresources.com\/products\/nursery-management-dolibarr","provider":"DoliResources","version":"1.0","type":"link"}