Ownware
Home›Assetora›Manual
Assetora · Manual

Assetora Manual, as shipped in the download

Assetora — User Manual

A fixed-asset register: costs, depreciation, book value and disposal. Version 3.1.4 [src: app/controllers/api.php:16].

About this manual

Every statement here was written by reading Assetora's own source, and each one carries the file it came from in a bracketed src marker. Paths are relative to the folder this docs directory sits in. If a sentence disagrees with the application, the application is right and this manual has a bug — the markers exist so you can check rather than take our word for it.

Nothing is described that the code does not do. Where something is deliberately limited, that is said plainly rather than left out.

Read this first

Assetora is an accounting record-keeping register. It records asset costs and computes depreciation figures; it moves no money, integrates with no bank, general ledger or payment system, and is not tax or accounting advice [src: app/src/Depreciation.php:22].

Methods and rates must be confirmed with your accountant [src: app/src/Depreciation.php:24]. Nothing in this manual is advice either — it describes what the arithmetic does.

The money

Integer cents throughout, with depreciation done in exact integer arithmetic [src: app/src/Depreciation.php:11].

Book value never drops below salvage [src: app/src/Depreciation.php:12].

The two methods, and the difference that matters when you choose

Two are offered [src: app/src/Depreciation.php:34], and they behave differently at the end of life in a way worth seeing before you pick one.

Straight-line accounts for every penny

The depreciable base — cost less salvage — is spread evenly over the useful life. Each period takes an equal integer share and the final period absorbs the rounding remainder, so accumulated depreciation equals exactly cost less salvage at the end of life [src: app/src/Depreciation.php:13].

Running the product's own arithmetic on an awkward figure — cost 1,000,000, salvage 13,337, life 7 periods, a base of 986,663 that does not divide evenly:

periods 1–6:  140,951 each
period 7:     140,957      ← absorbs the 6-cent remainder
sum:          986,663      = cost − salvage, exactly

Reducing-balance is asymptotic and does not finish at salvage

A per-period rate in basis points is applied to the opening book value each period, with round-half-up integer arithmetic, clamped so book value never crosses salvage [src: app/src/Depreciation.php:16].

The source is explicit that this stops at end of life with book value greater than or equal to salvage — it does not force book value down to exactly salvage the way straight-line does [src: app/src/Depreciation.php:18].

The same asset at 20% per period shows what that means in practice:

period 1: charge 200,000 → book 800,000
period 4: charge 102,400 → book 409,600
period 7: charge  52,429 → book 209,715
                            salvage was 13,337

Same cost, same salvage, same seven periods: straight-line leaves the asset fully depreciated; reducing-balance leaves 209,715 of book value still on the register.

That is not a defect — it is what reducing balance means — but it is the single most useful thing to understand before choosing a method, and nothing in the product's own screens will tell you.

Disposal

Gain or loss on disposal is proceeds less book value at the disposal date, computed exactly [src: app/src/Depreciation.php:20].

Two statuses: active and disposed [src: app/src/Depreciation.php:37].

Reinstating a disposed asset clears its disposal date and proceeds, so it takes the same permission as disposing (asset.dispose) and is written to the audit trail [src: app/controllers/app.php:431].

Closing a period and the journal

A close records what the register said through a date: the assets held on that date, their cost, accumulated depreciation and book value, the depreciation booked since the last close, and the disposals dated inside the period [src: app/controllers/v3.php:151]. An asset disposed during the period still counts for its depreciation up to the disposal date; it is no longer counted as held [src: app/controllers/v3.php:237].

Each close downloads as a journal CSV in a generic, QuickBooks Online or Xero manual-journal shape [src: app/src/JournalExport.php:37]. The journal debits depreciation expense per category and credits accumulated depreciation, then posts one entry per disposal in the period: Dr proceeds, Dr accumulated depreciation, Dr loss / Cr the asset's cost, Cr gain [src: app/src/JournalExport.php:86]. The five account names are yours to set in Settings; blank ones fall back to names a bookkeeper recognises, never an invented code [src: app/src/JournalExport.php:55].

The journal is checked against what the close froze. If an asset's cost, a disposal or a reinstatement changed the period after the close, the download refuses and says which [src: app/src/JournalExport.php:86].

A close recorded before 3.1.4 left out the depreciation of assets that were already disposed. Its journal still downloads exactly as it was closed, and the report shows beside it how much it left out, to post by hand [src: app/controllers/v3.php:341].

⭐ The QR label sheet, and why it is written the hard way

The printable label sheet — one QR code per asset, opening that asset's page — carries the clearest engineering justification in the product [src: app/src/Qr.php:5]:

A label sheet that does not scan is worse than no label sheet — somebody sticks four hundred of them onto four hundred machines before anyone finds out.

So the encoder is written from the ISO standard rather than approximated, and the suite checks it against an independent reference implementation, matrix for matrix, not by eye [src: app/src/Qr.php:8].

Why there is no QR service or library

Two reasons, both stated [src: app/src/Qr.php:11]:

A QR image endpoint would send your asset URLs to a third party on every label print, and the product is sold on the promise that it talks to nobody.

And there is no package dependency either — the application is drop-in-and-run PHP [src: app/src/Qr.php:13].

The deliberate limits

Byte mode only, error-correction level M — about 15% recovery, which the source calls "the right trade for a label that will be scuffed but is not on a foundry floor" — and versions 1 to 10, carrying a URL of up to 213 bytes [src: app/src/Qr.php:15].

Beyond that the encoder refuses loudly rather than truncating, because "a label that quietly lost the end of its URL is the worst outcome" [src: app/src/Qr.php:18].

If your installation lives at a very long URL, that limit is worth checking before you print four hundred labels.

Users and roles

Three roles, and unusually for this family every one is enumerated — even admin [src: app/controllers/v3.php:19]:

Permissionviewermemberadmin
asset.readyesyesyes
asset.write—yesyes
audit.scan—yesyes
asset.dispose——yes
category.write——yes
settings.write——yes

Two things follow from that. Disposing of an asset is an administrator's act, separate from editing one — disposal is where a gain or loss enters the books. And because admin holds a list rather than a wildcard, a new permission is not silently granted to anybody; it has to be added to a role deliberately.

Note that audit.scan is a stock-take scan, not an audit trail. Assetora has no audit-trail permission at all.

Backups are an administrator's download

Both backup downloads — the JSON export and the raw SQLite file — take settings.write, which only an administrator holds [src: app/controllers/api.php:275]. Before 3.1.4 any signed-in user could take them. The JSON export leaves out password hashes, two-factor secrets, API-key hashes and signing secrets [src: app/controllers/v3.php:68]; the SQLite file is the database itself.

Importing assets from a CSV takes asset.write, so a viewer cannot [src: app/controllers/api.php:330].

The API and agent access

Five tools are exposed to an agent [src: app/controllers/v3.php:432]: listing assets, asset detail and a depreciation report on the read side; creating an asset and disposing of one on the write side.

Note that an agent can dispose of an asset — the act that puts a gain or loss into the books. If that is not what you want from an automation, issue it a key whose role lacks asset.dispose [src: app/controllers/v3.php:24].

What Assetora does not do

It does not move money or post to a ledger [src: app/src/Depreciation.php:22], and it is not tax or accounting advice [src: app/src/Depreciation.php:23].

It does not choose a depreciation method for you, and the two do not end at the same place [src: app/src/Depreciation.php:18].

It does not let book value fall below salvage [src: app/src/Depreciation.php:12].

It does not send your asset URLs anywhere to make a QR code [src: app/src/Qr.php:11].

It does not truncate a URL that will not fit on a label [src: app/src/Qr.php:18] — it refuses.

← Back to Assetora · Quickstart · API · Test run

Affiliate program
Recommend tools people own — earn 35% on every sale. 90-day tracking, instant delivery, payouts by Lemon Squeezy.
Become an affiliate →