AWRA OpsHub Search

Bringing a Register You Already Have

Nobody adopts an asset register with no assets. The interesting part of a migration is never the file format — it is the four columns you have that the destination has nowhere to put, and deciding in advance which of them you are prepared to lose.

Assets & Equipment AWRA OpsHub Team 11 min read

The position, stated first

Import the identity, the location, the custody and the ownership — all four are first-class here and all four survive. Do not attempt to bring accumulated depreciation, purchase order references or funder tags through the importer, because there is nowhere for them to land. Decide that before you build the file, not after the load fails.

Every asset register migration begins the same way: somebody exports the old system, opens it in a spreadsheet, and discovers it has forty-one columns. The work is not moving them. The work is deciding which nine matter.

What the importer is

It is a validated write path, not a raw loader — and that distinction is the useful thing to know about it. The ownership field, for instance, is validated in five separate places in this codebase, and the bulk importer is one of them. A file containing a value that is not owned, leased or borrowed is rejected there exactly as it would be on the form.

That is worth more than it sounds. An importer that bypasses validation is how a register acquires a thousand rows nobody can filter, and it is the default behaviour of most bulk loaders.

The four things that survive

Identity

Tag, name, category, serial, purchase date and cost. The spine of the register, and the part every source system has.

Built in

Location

Where it belongs. Import your locations first — a register loaded against locations that do not exist yet is a register you will re-import.

Built in

Custody

Who holds it, as an assignment. Movements from the old system do not come across; this is a starting position, not a history.

Built in

Ownership

Owned, leased or borrowed, validated on the way in. Most source registers do not have this column at all, which makes the migration the moment to decide it.

Built in

Accumulated depreciation

Nothing computes or holds it. It stays in the schedule it came from.

Not built

Purchase order and supplier

No relationship exists on an asset, so no import can populate one. A custom field is the honest destination.

Not built

Project, grant or funder

Same reason. If donor reporting matters, this is the column to plan for as a custom field before the load.

Not built

Movement history

The new register starts on the day you load it. Old movements stay in the old system, which is a reason not to switch it off.

Not built

A migration is a decision about what you are willing to lose. Deciding it in the spreadsheet is cheap; discovering it in month three is not.

The order that avoids a second load

  1. Locations first, and get the hierarchy right

    Assets reference locations. Loading assets against locations that do not exist yet produces a register you have to correct row by row, and the correction is manual because the relationship is already wrong.

  2. Categories second

    Small, quick, and the thing every subsequent filter depends on. A register with one category is a list.

  3. Decide the custom fields before the assets

    Purchase order, supplier, funder — whatever your old register held that this one has no home for. Create them first and the import fills them; create them later and you are back in the spreadsheet.

  4. Load a hundred assets and stop

    Filter them, verify a few physically, print a label, scan it. A hundred rows will surface every mapping error the full file has, and correcting a hundred is an afternoon.

  5. Then the rest, then the custody positions

    Assignments last, because they are the most likely to have changed between the export and the load — and the easiest to fix individually afterwards.

The column nobody thinks about until later

Ownership. Most source registers do not have it, because most were built by finance and finance already knew everything on the list was owned. So the migration is the first moment anybody is asked, per asset, whether it is yours.

That is an annoying question to answer for four hundred rows and a very useful one to have answered. It is also the only chance you will get to do it as a bulk exercise rather than one asset at a time forever afterwards. Default the column to owned, then go and find the leases.

Do not switch the old system off

The movement history does not migrate — not because of a limitation in the file format but because the new register has no concept of a movement that happened before it existed. Keep the old system readable for as long as anybody might ask who had something in a year you no longer cover.

Asset import, precisely

What AWRA OpsHub does today

  • A bulk asset importer that validates on the way in, sharing the ownership rules enforced on the create and update forms and the API.
  • Import of identity, category, location, purchase details and custody position.
  • Custom fields on assets, which are the destination for source columns this product has no relationship for.
  • Locations and categories as separate, importable reference data.

What it does not do

  • Accumulated depreciation, net book value or any depreciation state. There is no engine to hold it.
  • Movement history from a previous system. The register begins the day it is loaded.
  • A purchase order or supplier relationship on an asset, so no import can populate one.
  • A project, grant or funder relationship on an asset.
  • Any reconciliation report between an imported file and the resulting register.

Not ours, by choice

  • The importer being a validated path rather than a raw loader is a real strength, and it means a badly-shaped file fails loudly rather than quietly producing unfilterable rows.
  • The four unimportable things above are all consequences of relationships that do not exist on an asset, not of the importer. No file format would change them.
  • Nothing here is Colombian. Colombia is here because the buyers for an asset register are established businesses with an existing one, and the migration is the first real conversation.

This is scope, not a ceiling

What is not built for your market today can still be built for you

Anything described above as not built is a statement about what ships in the standard product today — not a limit on what AWRA OpsHub can do in your market. Kenya's eTIMS integration and its maintained payroll engine exist because Kenyan clients needed them and commissioned them; neither appeared by itself. The same door is open here. If the seam to a clearance provider, a supplier invoice that can be read, a limit that is not an amount, a bank or mobile money feed, a statutory return format, a rule your own operation needs that the standard one does not have, or a link to a system you already run is what stands between you and a decision, tell us and we will scope it as a build — written spec, timeline and price — before you commit to anything.

Which end of the document you stand at, and what the limit is written in

Three builds cover most of what this region exposes, and the first is a seam rather than a system. Document exchange with the authority runs through a role somebody is accredited for, so what we build is the two-way join to the provider you pick — our document handed over in the shape they expect, and the reference, status and any acknowledgement written straight back onto our record, which is what turns "which of ours are not yet cleared" into a report rather than a reconstruction. Second, reading a supplier's electronic invoice into lines that carry tax, so the purchase side holds a rate and not only an amount. Third, a limit expressed as a multiple of an index unit rather than as a sum of money, with something that actually reads the unit when it is revalued. All three are data-model changes rather than settings, and we would quote them as such.

Local payment rails, and obligations that fall on the buyer

Statement feeds and local payment rails wired into the Payments Register, alongside the buyer-side obligations this region is unusual for — an acknowledgement generated from a receiving event and transmitted, and a report of purchases received but not yet acknowledged. Receiving against the order already runs; the outbound half is the buildable part on top of it.

The operational work, which is what most commissions actually are

An extra approval stage in a chain that does not match the standard one, a custom field set on employees or assets that only your sector needs, an expiry that has to block an order rather than send an email, a report your board asks for in a shape nothing produces, or a scanner or weighbridge feeding the goods-in door. These are the commissions we are asked for most often and the smallest ones we quote — and unlike a revenue-authority pipeline, none of them waits on a regulator.

Payroll and statutory returns

A local payroll engine with income tax tables and social security contributions computed on live employee records, producing returns in the layout your authority expects rather than rebuilt each month.

Systems you already run

The accounting package, CRM, online store or custom database you intend to keep — connected through our API so a fact is entered once and appears everywhere it is needed.

How it works: you describe the requirement, we return a written scope, timeline and cost, and once agreed it is built into your environment and maintained as part of the product. No roadmap slide, and no pretending in a demo that something exists when it does not.

Tell us what you need integrated

Four questions before you build the file

Which columns in my export have no destination?

A good answer sounds like

A specific list, before the load.

What it actually means

The whole migration, in one question. Ours are depreciation, order, supplier, funder and history.

Does the importer validate, or does it just insert?

A good answer sounds like

It validates, using the same rules as the form.

What it actually means

A raw loader gets your data in and your filters wrong, and the discovery is months later.

What happens to a row that fails?

A good answer sounds like

It is reported, and the rest load.

What it actually means

All-or-nothing loads on a four-hundred-row file mean one bad date costs you the afternoon.

Can I load a hundred and look before committing?

A good answer sounds like

Yes, obviously.

What it actually means

If the answer is no, the migration plan needs a test tenant, and that is a different conversation.

Map the columns before you export

If you have a register and are wondering what survives the move, send the column headings. That is a twenty-minute answer and it is a much better first conversation than a demonstration.

Talk about migrating a register

Frequently asked questions

Can I re-import to correct a mistake?

Corrections are best done as updates rather than a second load, because a re-import against existing tags is how a register acquires duplicates. This is the argument for loading a hundred rows first.

What do I do with net book value from the old system?

Keep it in the depreciation schedule, which is where it will continue to live — nothing here computes or stores it. The register and the schedule stay two documents, reconciled at year end.

Should I bring dormant or disposed assets across?

Generally no. A retired asset in the new register is a row that will be counted, filtered and verified against forever. Bring what exists; keep the rest readable in the old system.

Help Center

Need a quick answer while you read?

Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.

Search all approved AWRA public help articles.

Open Help Center