P4 Software P4 Software / logisticaHQ-en

Add these docs to Claude

Ask Claude questions about these docs. Claude reads the published pages and links you back to them. Copy this address:

https://docs.p4software.cloud/mcp

In claude.ai or Claude Desktop: open Settings, then Connectors, choose Add custom connector and paste the address.

In Claude Code, run:

claude mcp add --transport http docs https://docs.p4software.cloud/mcp

Audit

Every time stock is added, moved or removed, every time a pallet, tote or order changes hands, and every time someone signs in or out, LogisticaHQ writes an audit record: who did it, when, on which device, with which product, lot, serial and quantity, from where to where, against which document, and for what reason. The records are never edited and never purged. The Audit screen is where you question them.

Audit answers the questions a warehouse is asked every day:

  • Where did these 12 units go? Every move of the SKU, bin by bin, with the quantity left behind at each step.
  • Who adjusted stock out last week, and why? Every adjust-out with the user and the reason code they chose.
  • How many picks did each picker do today? A count of pick records grouped by user.
  • What happened to lot L2409 / serial SN-0042? Every record for that lot or serial, from receipt to shipment.
  • Who was signed in when this happened, and on which device? The sign-in and sign-out records.

Open Setup > System > Audit.

The screen

The Audit screen after Execute: the query builder on the left, the grouping panel on the right, and the results grid below

  • The query builder (left) says which records you want: a tree of conditions joined by AND or OR.
  • The grouping panel (right) optionally groups the records and totals them.
  • Execute runs the query. The number of records found appears above the results.
  • The results grid lists the records, newest first. It works like every other list: search, filter per column, choose columns, and Export to Excel.

When the screen opens it already holds one condition, Timestamp greater than or equal -864000000, which means the last 10 days (see Dates below). Click Execute to see everything recorded in the last 10 days.

Build a query

  1. Click + beside AND / OR and choose Add Condition.
  2. In the new condition, pick a field, then an operator, then type the value.
  3. Choose AND (a record must match every condition) or OR (a record may match any one).
  4. Click Execute.

A query with two conditions joined by AND: Timestamp in the last 10 days and Operation type equal to ProductRemove, returning 10 pick records

To mix AND and OR, choose Add Group: a group is a set of conditions with its own AND / OR, nested inside the outer one. For example, last 30 days AND (SubType = AdjustIn OR SubType = AdjustOut) finds every manual adjustment of the last month. Click × beside a condition to remove it. A condition with an empty value stops the query from running until it is filled in or removed.

Operators

Kind of fieldOperators
Text (Sku, bins, lot, reason...)Equal, Not equal, Is null (empty), Is not null. The value must match exactly: INS-9005, not INS-90.
Numbers (Quantity, EachCount...)Equal, Not equal, Greater than or equal, Less than or equal.
Dates (Timestamp, ExpiryDate...)Greater than or equal, Less than or equal, Is null, Is not null.
Ids (ProductId, UserId...)Equal, Not equal, Is null, Is not null, with the full id.
Operation typeEqual, Not equal, with one of the seven types below, typed exactly as written.

Dates

A date value can be written two ways:

  • A fixed date, such as 2026-09-01 or 2026-09-01 14:30. Use two conditions, Greater than or equal and Less than or equal, for a period.
  • A time relative to now, on the Timestamp field only: a minus sign followed by a number of milliseconds. The query then always covers the most recent period, whenever it is run.
PeriodValue
Last hour-3600000
Last 24 hours-86400000
Last 7 days-604800000
Last 10 days (the default)-864000000
Last 30 days-2592000000
Last 90 days-7776000000

How many records a query returns

A query returns at most the 1,000 newest matching records. When the count above the results shows exactly 1,000, there are probably more: narrow the period or add conditions. An administrator can change the limit with Maximum number of records an audit report should return in Configuration. A higher limit makes large queries slower. Grouping and totals are calculated on the records returned, so they too cover at most that many records.

What is recorded

Each record has an Operation type (the Type column), which says what kind of event it was, and a SubType, which says exactly which operation produced it. Query on Operation type for a broad question and on SubType for a precise one.

Operation typeMeaning
ProductAddStock came into a location from nowhere: a receipt, an adjust-in, a production build, a count that found more.
ProductRemoveStock left a location for nowhere: a pick, an adjust-out, production consumption, a count that found less.
ProductMoveStock went from one location to another: a move, a letdown, a pick to a production work area, a tray refill.
LicensePlateMoveA whole pallet (LPN) moved, with one record for each product on it.
HandlingSomething happened without stock changing: a tote moved, an order shipped, a count confirmed, stock blocked.
CustomActionA value-added service was performed. See VAS.
UserActionA person signed in or out, approved a count, or took a quality-control step.

Stock records and their SubTypes

SubTypeTypeProduced by
ReceivePo, NonPoReceiveProductAddReceiving against a purchase order, or without one. The reference is the PO and line.
UnreceivePoProductRemoveReversing a receipt.
ReceiveRma, NonRmaReceiveProductAdd (Handling when received as damaged)Receiving a customer return. The reference is the RMA and line.
PickProductRemovePicking into a tote or carton. The reference is the tote's SSCC.
UnpickPickTicket, UnpickToteProductAddPutting picked stock back.
AdjustIn, AdjustOutProductAdd, ProductRemoveManual adjustments on the handheld, with the reason code chosen. See Reason codes.
CustomerReturn, VendorReturnProductAdd, ProductRemoveAdjusting in from a customer or out to a vendor.
ProductMove, BinMove, WarehouseMoveProductMoveMoving a product, a whole bin, or stock to another warehouse.
LetdownProductMoveReplenishing a pick location from reserve.
PacksizeConvert, PacksizeBreakdownAnyConsolidating or breaking pack sizes.
SubstituteConvertProductRemove + ProductAddConverting one product into its substitute.
CycleCountProductAdd / ProductRemove, plus HandlingA cycle count. The Handling record holds the quantity counted; an Add or Remove record is written only where the count differed.
ProdOrderPick, ProdOrderBuild, ProdOrderConsumeProductMove, ProductAdd, ProductRemoveProduction: components to the work area, finished goods built, components consumed.
KitRefill, KitPullProductMoveSurgical trays: items picked into or pulled out of a tray.
LicensePlateMoveLicensePlateMoveMoving a pallet, including to a dock door.
InitProductAdd / ProductRemoveInitial stock loaded when the company was set up.

Handling records

SubTypeProduced by
ToteBinMove, ToteDockDoorMove, ToteLpnMove, ToteFloorMoveMoving a tote to a bin, a dock door, a pallet or the floor.
ShipToteCount, DeliveryToteCountConfirming a tote's contents at shipping or at delivery.
RepackageRepackaging or merging totes.
SmallParcelShip, TruckLoadShip, PrivateFleetShip, ExternalShip, MasterTruckLoadShipShipping an order or a truck load, one record per tote.
PalletPrintingGiving a pallet its SSCC label.
BlockInventory, UnblockInventoryBlocking or releasing stock, with the reason.
ProdOrderProdStepA production order moving to its next step.
KitDispatch, KitDispatchCancel, KitReconcile, KitRefillComplete, KitHomeCustomerSetSurgical tray office actions.
FieldDraftApprove, FieldDraftRejectReviewing a consumption report sent from the Field app.

User records

SubTypeMeaning
Web, Handheld, OtherSigned in on the web, on a handheld, or through another channel such as the client portal or the Field app.
LoginImpersonateAn administrator opened a session as this user.
LogoutRegular, LogoutByAdmin, LogoutExpirySigned out, signed out by an administrator, or signed out after inactivity.
LogoutUserDuplicateSigned out because the same user signed in on another device.
LogoutNoLicenseSigned out to free a license seat for someone else.
LogoutUserDeactivatedSigned out because the user was deactivated.
CycleCountApprovalA supervisor approved a count adjustment. The user is the approver.
QcInspectionStart, QcHold, QcRelease, QcComplete and the other Qc... SubTypesEach step of an outbound quality-control inspection and its corrective actions.
FieldPhotoUpload, FieldDraftSubmitPhotos and consumption reports sent from the Field app.

A CustomAction record's SubType is the name of the value-added service, as configured on the VAS screen.

The fields of a record

FieldMeaning
Username, UserIdWho did it.
TimestampWhen, shown in your time zone.
Type (Operation type), SubTypeWhat it was, see above.
Client, ClientIdThe client the product belongs to.
Sku, ProductIdThe product.
FromWarehouse, FromBin, FromLpnWhere the stock came from. Empty for an add.
ToWarehouse, ToBin, ToLpnWhere it went. Empty for a remove.
IsFromBinEmpty, IsFromLpnEmptyWhether the source bin or pallet was left empty.
QuantityHow much, always positive and always in single units (eaches): 2 cases of 12 are recorded as 24. Whether it went in or out is told by the Type.
PacksizeName, PacksizeBarcode, EachCount, NumberOfPacksThe pack size handled and how many packs.
AbsoluteFromQuantityWhat was left of the product at the source after the operation. What was there before is this plus Quantity.
AbsoluteToQuantityWhat there was of the product at the destination after the operation. What was there before is this minus Quantity.
LotNumber, SerialNumber, ExpiryDate, ManufactureDateThe lot, serial and dates of the stock handled.
ReferenceType, ReferenceCode, ReferenceIdThe document behind it: a purchase order line, a tote, a production order, a tray, a truck load.
ReasonThe reason code or note given.
ReceivingArrivalIdFor a receipt, the arrival it belongs to.
IntegrationReference, IntegrationMessage, IntegrationTimestampSet when another system, such as your ERP, has taken the record. See Audit and your ERP.

AbsoluteFromQuantity and AbsoluteToQuantity make Audit a running stock card. Query one SKU in one bin and read the records from the oldest up: each line shows what moved and what was left.

Review one record

Click Review... at the end of a row to see the whole record exactly as it is stored: every field, including the ids and those not shown as columns. Empty fields show null.

The Audit details window showing every field of one pick record

Group and total

The panel on the right turns a list of records into a summary.

  1. In Field, choose the field to group by, for example Username, and click Add. Add more fields to group within groups, for example Username then SubType. Use the arrows to change their order and × to remove one.
  2. In Aggregation Type, choose what to calculate for each group: Count (how many records), or Sum, Min, Max or Average of a number field.
  3. For Sum, Min, Max and Average, choose the number field in Aggregation Field, usually Quantity.
  4. Click Execute.

The result is a summary table: one column for each field you grouped by, outermost first, then the total. When you group without choosing an aggregation, the total is the number of records in each group.

The records of the last 10 days grouped by Username with Count: a summary table of each user and how many records they produced

Examples:

  • Picks per picker today: SubType = Pick, Timestamp ≥ -86400000; group by Username; Count.
  • Units adjusted out per reason this month: SubType = AdjustOut, Timestamp ≥ -2592000000; group by Reason; Sum of Quantity.
  • Units received per SKU: SubType = ReceivePo; group by Sku; Sum of Quantity.

The request

Below the results, Request shows the query you ran as JSON: the conditions, the grouping and the totals. Copy it when you ask your LogisticaHQ partner for help with a query, so they can run exactly the same one.

The Request panel showing the query as JSON

Audit and your ERP

Stock adjustments usually need to reach your accounting or ERP system. The REST API offers them through POST /adjustments, which reads these same audit records. It can return only the records not yet uploaded, and POST /adjustments/upload marks records as uploaded by setting their IntegrationTimestamp. To see which adjustments your ERP has not yet taken, query IntegrationTimestamp is null.

Reset adjustments, above the results, acts on the ticked records. It clears their IntegrationReference and IntegrationMessage and sets their IntegrationTimestamp to now. It asks for no confirmation, so tick only the records you mean.

Good to know

  • Audit records are kept for good; nothing deletes them over time.
  • A client user sees only their own client's records through the REST API.
  • The fixed layout of the grid (columns shown, widths, filters) is remembered per user. If a result looks filtered when it should not be, click Clear filters above the grid.
  • For changes to documents and settings, such as who changed a product's weight or a purchase order's date, use the record's History button or History search. Audit covers stock and people; History covers edits to records.

Was this page helpful?