Inventory & internal licences

Overview
This area answers two questions: who has what? and what does it cost us? It manages devices (inventory) and internal software subscriptions (licences) — both with assignment to staff, terms and costs.
An important distinction: this is about your own equipment, not about goods. What you sell lives in the product and stock areas.
Core tasks
Record and assign a device. In the inventory you create the device and assign it to a person. The assignment can be withdrawn later — the history remains.
Track licences and subscriptions. A licence has a term, costs and a number of seats. Seats are assigned like devices, so occupied and free seats are always visible.
Reconcile domains and hosting. For objects of type Domain, Hosting or Server the detail page shows Reconciliation with the provider on the right. Octibiz asks the provider hourly (at most once a day per object) and adopts differences itself:
- Domain: the registry's public domain directory (RDAP) provides **expiry date, status, registrar
and name servers**. If the expiry date differs, it becomes the object's Expires on — and thus the deadline in the deadline warning (30 days ahead). .de domains do not publish an expiry date: only status and name servers are reconciled there, maintain the date yourself if needed; the card says so explicitly.
- Hosting/server: the address is called — reachable yes/no, HTTP status and **expiry of
the TLS certificate** with its issuer. The certificate gets its own deadline TLS certificate next to the object's date.
Every adopted difference is shown on the card (Last adopted on …, from → to) and in the object's change log, there as automation. If a domain expires in less than 30 days or a certificate in less than 14 days, the card shows a notice; likewise for a registry lock status or when the registry does not know the domain. Only public targets are queried — an internal address is rejected, never called. The target is prefilled from the object's name; Check now asks immediately, the switch Included in the hourly reconciliation takes an object out.
Watch deadlines. The renewals view shows what has to be renewed soon or can be cancelled. Reminders can be set up so that a notice period does not pass unnoticed.
My devices and licenses. In your own profile (bottom left, Edit profile) the section My devices and licenses shows what is currently assigned to you — devices and licence seats with the handover date. Acknowledge handover confirms receipt; afterwards it reads "Acknowledged on …". An acknowledgement happens exactly once and only for your own assignment — not even administration can acknowledge on someone else's behalf. The permission assets.asset.view_own is enough for this. Whoever sees personnel files finds a person's devices there in the Equipment tab.
Record and read costs. Under Asset costs every cost entry belongs to a device or a licence: amount (net), interval (one-off, monthly, quarterly, yearly), validity. The / month column turns every running entry into a monthly value (quarterly divided by three, yearly by twelve); one-off entries do not count there. Gross / month adds tax at the recorded VAT rate — purely informative, booking happens in accounting. The tiles above total Recurring costs / month, Fixed costs gross / month, Recurring costs / year and the number of entries. In the Document ref. field you pick the incoming invoice when accounting is active (and you hold accounting.incoming_invoice.view) — Open incoming invoice jumps there; without accounting it is a free reference, for instance the document number from lexoffice.
Analyse costs. The costs view totals the running amounts; controlling shows the trend and the distribution.
Customer revenue against own costs. If a device, domain, hosting or licence is linked to a customer contract, the contract shows in the section Linked inventory the comparison Customer revenue and own costs: Revenue/month (net, per the contract's billing template as of today), Own cost/month (monthly values of the linked items and licences) and Margin/month. Controlling shows the same table for all contracts. It is visible with assets.cost.view and contract.contract.view.
Leaving: collect devices. When someone leaves, the system creates one task "Collect asset: …" per open assignment — device or licence seat — assigned to the person's manager (without a manager it stays unassigned and thus visible). The device stays assigned until then; only Return on the device records the return and completes the task by itself. A second leaving run creates no second task.
Take over existing data (import). Under Import there are four targets for this area: Inventory (duplicates via the asset tag), Internal licenses (duplicates via name and vendor; cancel-by date and deadline reminders are created at once), Assignment list (who has what) — device via the asset tag or licence via name and vendor, employee via personnel number, e-mail or a unique name — and Internal costs (amount as a euro amount, interval one_off, monthly, quarterly or yearly, default monthly; duplicates via target, interval, amount and start). The assignment list follows the same rules as the mask: one open assignment per device, one seat of a licence per person.
Costs without a brand are distributed. A server, domain or licence without a brand belongs to everyone — so its amount counts proportionally in every brand of the brand view, by headcount per brand. The shares add up without remainder, and controlling shows the distributed part separately as "of which distributed" — it is an assumption, not an assignment. The distribution is purely analytical and books nothing between brands. To switch it off, set the setting assets.cost.unbranded_allocation to none.
Fields in detail
Asset
| Field | Required | Values / format | What it does |
|---|---|---|---|
Asset tag assetTag | no | text, max. 60 characters | Your number, usually a sticker on the device. It links what stands on the shelf with what stands in the system. |
Name name | yes | text, max. 200 characters | What the asset is called. |
Type type | yes | hardware, domain, hosting, server, other | What it is. Not only devices: a domain with an expiry date belongs here just as much — it costs money and it runs out. |
Category category | no | text, max. 60 characters | Finer classification. |
Serial number serialNumber | no | text, max. 120 characters | The manufacturer's number. In a warranty case the first question. |
Manufacturer manufacturer / model model | no | text, max. 120 characters | What exactly it is. |
Purchased on purchasedAt / price purchasePriceAmount | no | date, amount | Acquisition and value. The basis for depreciation and replacement planning. |
Warranty until warrantyUntil | no | date | When the warranty ends. Flagged in good time — this is the point of the whole mask: a fault three days after warranty end is expensive and avoidable. For domains and certificates the field is called Expires on and is flagged as end of term; for domains the reconciliation with the registry fills it. |
Location location | no | text, max. 120 characters | Where it is. |
Supplier supplierRef | no | supplier from the list (its identifier is stored) | Where it was bought. Without the supplier module or read permission it stays a text field; an earlier typed entry stays visible. |
Cost centre costCenterNumber | no | number from the cost centre directory | Who bears the cost. The NUMBER is stored, not an id: it stays readable and is what goes into the DATEV batch. Without the accounting module this is a free text field; with accounting active an unknown number is rejected. |
Contract contractId | no | an existing contract | Which contract hangs on it — maintenance, hosting, support. |
Brand brandId | no | one of your brands | For which brand. |
Document ref. expenseRef | no | incoming invoice (with accounting) or text, max. 100 characters | Reference to the acquisition document, see Record and read costs. Asset management books nothing. |
Notes notes | no | text | Free text. |
Reconciliation with the provider
| Field | Required | Values / format | What it does |
|---|---|---|---|
Domain or address target | no | domain name (domain, e.g. example.com) or public address (hosting/server, e.g. https://www.example.com), max. 255 characters | What is queried at the provider. Prefilled from the object's name; a new target is checked in the next run. A target that does not fit the type is rejected. Empty means: no reconciliation. |
Included in the hourly reconciliation enabled | no | yes (default)/no | Whether the object runs in the schedule. Check now also queries with "no". |
Licence
| Field | Required | Values / format | What it does |
|---|---|---|---|
Name name / vendor vendor | yes / no | text | What it is and from whom. Name and vendor together recognise a licence on import. |
Type type | yes | SaaS, perpetual license, open source | Kind of licence. |
Plan / tier plan | no | text | The plan booked. |
Seats (total) seatsTotal | no | whole number | How many seats are bought. Occupied and free are worked out from the assignments; more assignments than seats are reported as overbooked. |
Term term | yes | monthly, yearly, perpetual | Renewal rhythm. |
Login / portal ref. loginRef | no | text | Where to sign in — without a password. |
Start startsAt / end endsAt | no | date | Term frame. |
Renews on renewsAt | no | date | Next renewal; together with the notice period it yields the cancel-by date. |
Cancellation notice (days) cancellationNoticeDays | no | whole number | How many days before renewal notice must be given. |
Auto-renewal autoRenew | no | yes/no | Only with yes does the renewals view warn before the cancel-by date. |
Cost centre costCenterNumber / cost bearer (brand) brandId | no | number / brand | As for the asset. |
Contract contractId | no | an existing contract | Customer contract through which the licence is recharged. |
Document ref. expenseRef / notes notes | no | as for the asset | — |
Cost entry
| Field | Required | Values / format | What it does |
|---|---|---|---|
Object type targetType / asset / licence targetId | yes | device or licence | What the costs belong to. |
Label label | yes | text | What it is, e.g. "hosting fee". |
Amount amount | yes | amount (net) | Amount per interval. |
Interval interval | yes | one-off, monthly, quarterly, yearly | Determines the monthly value; one-off entries have none. |
Valid from validFrom / valid to validTo | yes / no | date | Period; empty end = open-ended. |
Cost centre costCenterNumber / cost bearer (brand) brandId | no | empty = taken from the object | Where the costs go. |
VAT rate (%) taxRate | no | percent | Basis for gross / month — informative. |
Supplier supplierRef | no | supplier | Who charges the costs. |
Document ref. expenseRef | no | incoming invoice or text, max. 100 characters | Document for the entry. |
Note note | no | text | Free text. |
Assignment
| Field | Values / format | What it does |
|---|---|---|
Employee employeeId | an employee | Who has it. On return the assignment is ended, not deleted — so it stays traceable who had what and when. |
Condition condition | new, used, defective | In what condition it was handed over or taken back. When a colleague leaves, the entry that avoids the argument. |
Note note | text | What is to be recorded about the handover. |
Settings & permissions
- View:
assets.asset.view, licencesassets.license.view, costsassets.cost.view - See and acknowledge your own devices:
assets.asset.view_own - Customer revenue against own costs:
assets.cost.viewandcontract.contract.view - Maintain:
assets.asset.manage,assets.license.manage,assets.cost.manage - Assign and withdraw:
assets.assignment.manage - Reminders:
assets.reminder.manage - Reconciliation with the provider: read the state with
assets.asset.view, maintain the target and
Check now with assets.asset.manage (GET/PATCH /api/v1/assets/internal-assets/{ulid}/external-check, POST …/external-check/run); manual run on the console assets:check-external
- Cross-brand view:
assets.brand.all - Status catalogue under Settings → Assets:
assets.config.manage
Module flag: module.assets.
FAQ & troubleshooting
A device cannot be assigned. Check the status — retired devices no longer accept assignments.
A licence shows more occupied seats than issued. Then an assignment is still open whose person has left. Withdraw the seat in the licence detail view.
Costs appear twice. Check whether the same item is tracked both on the licence and as a separate cost line.