P4 Software / cifraHQ

Surgical Trays

Surgical Trays

Surgical trays (also called loaner kits) are the metal boxes that go out to a hospital for an operation and come back afterwards. The top tray holds consumable implants that get used during surgery; the bottom tray holds reusable instruments that are supposed to return with the box.

CifraHQ and your warehouse system split this work between them:

  • CifraHQ owns what a tray should contain, what it costs, and the invoice to the hospital.
  • The warehouse owns each physical box, ships it out, counts it back in, and works out what was actually used.

You build the tray here. The warehouse never decides prices, and you never have to keep the same tray contents up to date in two places.

Building a tray

Trays have their own module: Trays > Templates in the main menu (this section only appears if your company has surgical trays turned on). Click New to start a tray, giving it a name and description. CifraHQ generates the tray code for you.

Open a tray to work on its contents. On the Contents tab, click Add Line to search for a product and set its quantity for every item that belongs in the tray.

Whether a product is a consumable implant or a reusable instrument is not set on the tray. It is set once, on the product itself:

Where Field Meaning What happens when it does not come back
Product's Details tab Is instrument switched on A reusable surgical tool It is a missing tool, not a sale. It is reported, not billed
Product's Details tab Is instrument switched off A consumable implant used during surgery It was implanted in the patient, so it is billed to the hospital

Every tray line shows the product's instrument/consumable status as a read-only badge, so you can see at a glance what is in the tray, but you cannot change it from the tray. That keeps the flag consistent everywhere the product is used, not just on this one tray.

Getting this right matters. An instrument marked as a consumable will be invoiced to the hospital at implant prices if it goes missing. Check the product's **Is instrument** switch, not the tray.

The tray's Details tab shows the rolled-up cost: the total of every line's cost multiplied by its quantity. This is the number to price your tray models from, and it updates as you edit the contents.

Editing tray contents in Excel

A long tray is quicker to build, re-count or hand to a colleague as a spreadsheet than one line at a time. The Contents tab carries an Export button and an Import button in its section header for exactly that. Neither is restricted to administrators: anyone who can add or remove a tray line one at a time can also import a sheet.

Export reads Preparing... while it works, then saves a workbook named after the tray code and ending in -contents.xlsx. It has one sheet, Contents, with the headers Sku, Description, Quantity, Unit Cost, Extended Cost and Role, and one row per tray line in the order they appear on screen. Unit Cost is the product's cost and Extended Cost is that cost multiplied by the line quantity.

Only Sku and Quantity are read back on import. The other four are there so you can read the sheet, and are ignored: cost and the instrument/consumable role always come from the product master, never from the file.

Export a tray that has no lines yet and you get the bold header row on its own. That empty sheet is the blank template for building a tray from scratch, so there is nothing separate to download.

What the file needs

Only two things really matter: a Sku column and a Quantity column, with the headers on the first row. Everything else is forgiving:

  • The sheet should be called Contents, but if there is no sheet by that name the first sheet in the workbook is used, so a file you built by hand or re-saved out of another program still imports.
  • Headers are matched ignoring case and spaces, so SKU, sku, Unit Cost and unitcost all work.
  • Rows with an empty Sku are ignored, so the blank rows Excel leaves at the bottom do no harm.

Importing

Click Import in the Contents header, or Import from Excel in the empty state if the tray has no lines. Click Choose File, pick your .xlsx (anything over ten megabytes is refused before it leaves your machine), choose the mode, then click Import. Picking the file only holds it in the browser, so nothing is written until you click Import, and the mode is always a deliberate choice.

Mode What it does If a row is bad
Merge (preselected) Adds the rows that are new and updates the quantity on rows already on the tray. New lines go to the end and the lines already there keep their position. Lines missing from the file are left alone, so nothing is ever deleted That row alone is skipped and listed, and the good rows still land
Replace The tray ends up holding exactly what the file lists, renumbered into the file's row order. Every line whose product is not in the file is deleted The whole import is cancelled. Nothing is added, updated or deleted
**Replace** is destructive, so choose it on purpose. A file that is missing a line you meant to keep will remove that line from the tray.

A rejected row is shown in the dialog as a red bullet naming the SKU and the reason: the SKU is not a product in this company, the quantity is not a number, the quantity is zero or less, the quantity is fractional on a product that is not decimal controlled, or the same SKU appears more than once (every row carrying that SKU is skipped, because the quantity you wanted is ambiguous). Fix those rows in Excel and import again.

Two problems stop the whole import in either mode, because neither leaves anything sensible to apply: a file with no worksheets at all, and a sheet with no usable rows. The second is deliberate. An empty file in Replace mode would otherwise be read as "this tray should hold nothing" and wipe it.

After an import

A successful import shows a green Contents imported toast and a summary of how many lines were added, updated, left unchanged and removed. The grid, the Contents tab count, the rolled-up cost and the Physical Trays list all refresh, and the new contents are pushed out to every registered physical tray, usually within a second, exactly as a hand-edited line would be. That push replaces the warehouse-side contents of each kit, so a change made to a kit in the warehouse will not survive it.

The import is recorded against your user name in the activity log, with the mode used and how many lines were added, updated, removed and rejected.

An import that writes nothing changes nothing: the tray and the warehouse kits are left exactly as they were.

If nothing could be written, you get Nothing was imported. Fix the rows below and try again. with the rejected rows underneath, no toast, and no push to the warehouse. Either way the file selection clears after each attempt, so a second click of Import can never quietly apply the same sheet twice. Re-pick the file (the same filename works) and go again, then click Close.

Registering the physical trays

One tray design usually has several physical boxes in circulation. Each box is registered separately on the tray's Physical Trays tab.

Click Register Tray and choose the warehouse the box lives in. That is the only thing to fill in.

Everything else about the box is decided elsewhere, so you are not asked to type it:

  • The box takes its name from the tray design, because every physical box off a design is that tray
  • The kit number and license plate are issued by the warehouse on the first sync, so both stay blank until then

The Trays > Physical Trays page lists every registered box across every tray design, with its current sync status, in case you want a warehouse-wide view instead of one tray at a time.

Sending the tray to the warehouse

Saving any change to a tray's contents automatically queues a sync to every box registered against it, usually within a second. You can also click Sync to Warehouse on the tray to push immediately rather than wait.

The sync **replaces** the tray contents on the warehouse side. CifraHQ is the master copy, so anything edited directly in the warehouse is overwritten on the next push. Always make changes here.

After a successful sync each physical tray shows its kit number and the time it last synced. If a push fails, the tray shows Failed and you can hover it to see the reason.

If the warehouse no longer has the kit at all, CifraHQ rebuilds it on the next push rather than failing forever. The box keeps its name, warehouse and history, and the warehouse issues it a new kit number and license plate, so the numbers you see on that row will change.

From surgery to invoice

Once a tray comes back from the hospital and the warehouse has counted it, CifraHQ picks the result up automatically, roughly every ten minutes, and creates the hospital's invoice.

Each invoice line carries the lot number, expiry date and serial number of exactly what was used, because hospitals require that traceability on implant Invoices. The invoice also references the consumption document, the kit number and the original dispatch, so any query is easy to trace back.

Prices come from the hospital's price list in CifraHQ, exactly as they would on an invoice you typed yourself.

By default the invoice is created as a draft so someone can review it before it goes out.

Settings

These live under Settings, in the warehouse integration section.

Tray consumption sync has no on/off switch: it starts running automatically for your company the moment any tray template exists, and there is nothing to turn on separately.

Setting Default What it does
Missing instrument policy Report Report records missing instruments without billing. Charge bills them, for hospitals whose contract says replacements are billable
Damaged policy Absorb Absorb writes off units the warehouse counted back damaged. Bill adds them to the invoice
Post tray Invoices automatically Off Leave off to review each invoice as a draft first

Whether the Trays section appears in the main menu at all is a separate setting your administrator turns on per company; it only controls what you see, never whether syncing runs.

Checking what is outstanding

Trays > Consumption Backlog lists every consumption document CifraHQ has seen from the warehouse, its state (pending, invoiced, acknowledged, failed, or needs review), the invoice it produced if any, and the reason for anything that could not be invoiced.

Common reasons a tray cannot be invoiced:

  • The hospital does not exist as a customer in CifraHQ. Create the customer with exactly the code the warehouse uses, and it will invoice on the next sync.
  • A SKU on the tray is missing from your product list. Add the product and it will invoice on the next sync.
**A missing SKU blocks the entire document, not just that line.** If any single line of a returned tray's consumption references a product that is not in CifraHQ, the whole consumption parks with a **Failed** status and nothing is invoiced from it, not even the lines whose Products ARE known. This applies to every line, including instruments that were only being reported and never going to be billed. This is deliberate: CifraHQ will not invoice a hospital from a consumption document it cannot fully resolve. Add the missing product and the next sync pass picks the document back up automatically; nothing needs to be re-sent or re-processed by hand.

Nothing is lost while a problem is being fixed. The consumption keeps coming back until it succeeds.

Corrections

If your warehouse office re-sends a consumption that CifraHQ has already invoiced, CifraHQ does not bill it a second time and does not cancel the original invoice on its own. It flags the document as needs review so a person can decide whether a credit note is required. Clear the review from the row's action menu on Trays > Consumption Backlog once you have decided what to do.

A consumption document can never be billed twice, no matter how many times it is re-sent.

Scanning: GTIN and barcode standard

Medical packaging normally carries a UDI barcode holding the product identifier, lot and expiry together. Two fields on the product master make warehouse scanning work without anyone retyping them:

  • GTIN - the device identifier printed on the packaging
  • Barcode standard - how the scanner should read the symbol (GS1, HIBC, or plain). Leave it blank to use the warehouse default.

Both are sent to the warehouse with the rest of the product details.

Was this page helpful?