Design partnership, Germany domestic road freight
Lovehoney Onboarding Pack
Everything prepared for the start of the design partnership between Lovehoney Group UK Limited and Certin Technologies Limited, for Germany domestic road shipments, in one place.
- A step by step guide, from first sign in to closing an exception
- Three days of acceptance testing, tracked in one live sheet
- Everything Certin needs from Lovehoney, gathered in one list
What is in this pack
Onboarding Guide
Step by step: signing in, bringing shipment data in, adding contracts, and working exceptions from review to resolution. Includes the onboarding session plan.
For every Lovehoney userVideo Walkthrough
A recorded tour of the Certin platform.
For every Lovehoney userUAT Plan
How Lovehoney and Certin test the configured workflow over three working days before live running, and how acceptance is decided.
For the UAT lead, testers and administratorsUAT Tracker
The shared working record of test results, defects, retests and sign-off.
For the UAT lead and testersEngineering Deliverables
Technical onboarding checklist, data intake, field mapping, integration, access, security, KPI and baseline requirements.
For Lovehoney's systems, data and security contactsOpen Questions
What Certin needs from Lovehoney, gathered in one list, with the owner, when it is needed and a place to answer.
For the Lovehoney owner of each questionOpen questions
Several decisions and pieces of information are needed from Lovehoney before configuration and testing can go ahead. They are gathered on the Open Questions tab, each with its owner, when it is needed and where it came from.
Key dates
The Design Partnership Agreement starts the ninety day evaluation period once data access is in place. Detection goes live on Day 13, the mid-point review falls on Day 40, and the final review runs from Day 80 to Day 90.
Certin has set a test gate of 28 September 2026, with detection targeted to go live on 29 September 2026. The three UAT dates are still to be agreed.
Operator Onboarding Guide and Session Plan
A step by step guide to Certin for the Lovehoney transport team: signing in, bringing shipment data in, adding contracts, and reviewing, acknowledging, managing and resolving exceptions. The session plan for onboarding closes the guide.
1. Before you start
Today the team checks the Excel tracker, Zencargo and email each morning to find out what has changed overnight and whether it matters. From go-live, Certin reads those sources continuously, compares every shipment against Lovehoney's own operating rules and delivery commitments, and raises an exception when a commitment is at risk. You decide what happens next and carry it out. Certin records every step.
Who does what
Some tasks happen once, during setup. Others are the daily work. This guide covers both, so that every user understands where the data comes from and how to check it.
| Task | Carried out by | Section |
|---|---|---|
| Upload and map the Excel tracker | Lovehoney administrator, with Certin | 4 |
| Connect the automated status source | Certin, with Lovehoney's systems contact | 4 |
| Upload and review customer and carrier agreements | Lovehoney operational owner, with Certin | 5 |
| Add team members and assign roles | Lovehoney administrator, with Certin | 10 |
| Set alert thresholds, notification channels and escalation | Certin, as agreed in the Configuration Workbook | 10 |
| Daily routine and exception handling | Lovehoney operators | 7 to 9 |
Two dates, one measure
Each shipment carries two dates, held separately.
Carrier expected date
When the carrier says the shipment will arrive. It changes as the carrier updates.
Business commitment date
The date Lovehoney has committed to. Certin measures risk against this date.
A carrier date that moves but stays inside the business commitment does not become an exception unless Lovehoney's rules say it should. You see the exceptions that threaten a commitment, not every change in the data.
Severity
Every exception carries one of three severity levels. The thresholds behind each level are set in the Lovehoney Operations Configuration Workbook.
- L1 Critical: work these first.
- L2 Medium: then these.
- L3 Low: then these.
2. Signing in for the first time
Every userOnce you have been added as a team member (section 10), you sign in at the address below. On your first sign in, Certin takes you through a short setup in four steps.
-
Go to app.getcertin.ai. Enter your email and password and select Sign in, or select Continue with Google. Tick Remember me on a computer only you use. If you have forgotten your password, select Forgot password.
The Certin sign in page at app.getcertin.ai. -
The welcome screen explains what Certin does. Select Get Started.
Step 1 of 4: welcome. -
The second screen explains that carrier contracts and service level documents are uploaded from the Contracts & SLAs page, where Certin extracts the key terms. Section 5 covers this. Select Continue.
Step 2 of 4: contracts and service levels. -
The third screen offers four ways to bring shipment data in: file upload, Google Sheets, Microsoft Excel in OneDrive or SharePoint, and email. During the design partnership these connections are set up before operators sign in, so operators select Continue. Section 4 explains each option.
Step 3 of 4: shipment data and tools. -
Select Go to Dashboard.
Step 4 of 4: setup complete. -
On first arrival, Certin offers a short tour of the main sections. Select Start tour to follow it, or Skip tour to go straight in.
The tour offered on first arrival.
3. Finding your way around
The menu on the left groups every screen. These are the screens used during the design partnership.
| Screen | What it is for |
|---|---|
| Dashboard | The current picture of all shipments and service level performance. |
| Daily Pulse | The start of day digest, the shift log and handover notes. |
| Inbox | A thread for each exception, where you communicate with carriers and record what was done. |
| Signal Review | Carrier and forwarder messages Certin could not interpret with confidence, waiting for a person to review. |
| Exceptions | The Exception Resolution Center: every exception, by severity. |
| Shipments | Every shipment and its status. |
| Contracts & SLAs | Customer and carrier agreements, service level rules, carriers and compliance. |
| Reports & Analytics | Performance over time, reports and alert logs. |
| Data Ingestion | Connections to the sources Certin reads. |
| Imports | Every file upload and sync, with its result. |
| Settings | Organisation, team, notifications and alert configuration. |
Ask Clara sits at the bottom right of every screen. The search bar at the top of every screen finds shipments, exceptions and carriers. Fleets, Forecasting and Automation also appear in the menu; section 12 explains why they are not used during the design partnership.
4. Bringing shipment data in
Certin works from three kinds of data:
- Bookings, from the master Excel tracker: each shipment, its carrier, its route and its dates.
- Status updates, from an automated source: Zencargo data held in BigQuery, Parcel Perform for integrated road carriers, carrier emails, or EDI where a carrier offers it.
- Agreements, from uploaded customer and carrier contracts. Section 5 covers these.
Uploading the Excel tracker
Lovehoney administrator, with Certin-
Open Imports under Data and System in the menu. Stay on the File Uploads tab.
-
Select Upload File and choose the tracker. Certin accepts CSV, Excel and JSON files.
Imports, before the first upload. -
Certin checks every row and shows the import results in three counts: Imported cleanly, Needs a decision and Failed. Settle anything that needs a decision, then select Finish import.
Import results. Here, all 381 records imported cleanly. -
The file now appears in the list with its number of records, success rate and status. Check that the success rate is 100 per cent and the status reads Completed.
A completed upload in the Imports list.
If rows fail, correct them in the tracker and upload it again. When a tracker is uploaded again with a different number of rows, Certin reconciles it against the current set of shipments, so nothing is duplicated and nothing is lost.
Mapping the tracker columns
Lovehoney administrator, with Certin. Done once.-
Open Settings, then Column Mapping. This tells Certin which column in the tracker holds which piece of information. Until a mapping exists, uploads are read using default column names.
-
Select Add Mapping and match each column header in the tracker to the Certin field it belongs to. Mappings are grouped under Shipment, Driver, Carrier and Contract.
Column Mapping, before any mapping is added. -
Map the carrier expected date and the business commitment date to separate fields. Everything Certin assesses depends on these two dates being kept apart.
Keeping the tracker in sync
Lovehoney administrator, with CertinUploading by hand works, but a connected tracker keeps Certin current without anyone remembering to upload. Where the tracker is held in OneDrive or SharePoint, Microsoft Excel Sync connects it directly. Where it is held in Google Sheets, Google Sheets Sync does the same. Both options appear at first sign in, as shown in section 2, and on the Data Ingestion page under Data Sources. Connected files then appear in Imports under the Cloud Syncs and Live Sync tabs.
Connecting the automated status source
Certin, with Lovehoney's systems contactThe status source is what lets Certin see a change as soon as it is reported. Which source comes first is confirmed at mobilisation. How often it refreshes sets the fastest point at which Certin can see a change.
-
Zencargo data held in BigQuery. Open Data Ingestion. Under Enterprise System Sync, select Connect BigQuery and follow the steps.
Enterprise System Sync on the Data Ingestion page. -
Parcel Perform. On the same page, select New Connection and choose Parcel Perform from the list.
The list of systems Certin connects to. Enter the API base URL, client ID and API key, then select Test Connection before completing the remaining steps.
Connection details for an enterprise system. -
Carrier and forwarder emails. On the Data Ingestion page, under Data Sources, connect the shared inbox through the Email option. Gmail, Outlook and any IMAP inbox are supported.
-
Carriers that offer EDI. Under EDI Connections, select New EDI Connection. Enter the carrier name, choose the EDI version (ANSI X12 214, EDIFACT IFTSTA, or a custom mapping) and the communication method (SFTP, AS2 or API).
Setting up an EDI connection for a carrier.
5. Adding contracts and service levels
Lovehoney operational owner, with CertinCertin assesses each exception against what Lovehoney is contractually held to, for that customer and that carrier. That is only possible once the agreements are in Certin.
-
Open Contracts & SLAs and select + New SLA Contract. Choose Upload Document, then drag the agreement into the box or browse for it. PDF, DOC, DOCX, PNG and JPG files are accepted.
Uploading an agreement. -
Certin reads the document and pre-fills four steps. Review every field against the original document before moving on. A wrongly captured obligation produces a confidently wrong assessment, which is why the agreement between Lovehoney and Certin names a Lovehoney reviewer for this check.
Contract Details. Contract name and reference, the other party, and whether it is a Client agreement (a Lovehoney customer) or a Carrier contract. Contact details and dates.
Step 1 of 4: Contract Details, pre-filled from the uploaded document. -
Service Scope. Service tier, route origin and destination, any volume commitment, and special requirements.
Step 2 of 4: Service Scope. -
SLA Metrics. The on-time delivery target, maximum delivery hours, and where the agreement sets them, lead time, proof of delivery upload time and response time for issues.
Step 3 of 4: SLA Metrics. -
Financial Terms. Base rate, the penalty model (per hour or per breach) and amount, any bonus, and payment terms. Penalties are calculated and tracked in Compliance Analytics. Select Create Contract.
Step 4 of 4: Financial Terms. -
The agreement now appears under Active Contracts, with its type, contact, status, renewal date, compliance and documents.
Active Contracts after the first agreement is added.
The other tabs on this page hold the SLA Rules Certin applies, the Carriers Lovehoney works with, and Compliance Analytics by client and by carrier. The rules are set from the Configuration Workbook.
6. Checking shipments and the dashboard
Shipments
Every user-
Open Shipments. Every shipment from the tracker is listed with its waybill, origin, destination, carrier, status, service level deadline and any exception. Search by waybill or destination, or filter by status, column and date.
The Shipments list. -
Select a shipment to open its panel: status, priority, delay risk, risk score and service level status. The Track on Fleet Map option in this panel is not used during the design partnership.
A shipment panel.
The dashboard
The dashboard gives the current picture across every shipment: total shipments, in transit, at risk, on-time delivery rate, tracking visibility, service level breaches, amount at risk and penalty exposure. Below these sit service level health, a live feed of events, the compliance trend, the causes of exceptions, a shipment map and recent shipments. Use Filters to narrow the view and Export to take the figures away. How each figure is calculated is set out in the KPI framework.
7. Your day in Certin
Lovehoney operatorsAt the start of the day
-
Open Daily Pulse. The Daily Digest tab shows performance measures, critical alerts and open exceptions in one place.
The Daily Digest. -
Read the critical alerts and open exceptions before acting on any of them. Further down, Exception Management offers Acknowledge All, Assign Priority and Add Comment. Acknowledge All records that someone has read every listed exception, so use it only once you have. Quick Actions below let you broadcast an alert to the shift, assign several exceptions at once, or generate a shift report. Export PDF at the top saves the digest.
Exception Management on the Daily Digest. -
Open Signal Review. It holds carrier and forwarder messages Certin read but could not interpret with confidence. Review each one so that nothing is missed. When nothing is waiting, the screen says so.
Signal Review with nothing waiting. -
Open Exceptions. The Exception Resolution Center shows the total and the count at each severity. Filter by status, severity, domain or carrier, or search by waybill. Work from L1 down.
The Exception Resolution Center. Each card shows severity, shipment, risk score, the issue, its category, age, carrier and route.
Through the day
When a new exception is raised, you receive an email according to the notification routing set in the Configuration Workbook. Work it using the steps in section 8. If an exception is not acted on within the time set in the workbook, Certin escalates it automatically to Lovehoney's operations manager.
Before you finish
- No L1 exception is left unacknowledged.
- Anything still open has an owner, through Assign, or a note in its thread explaining where it stands.
- Where a colleague picks up after you, leave a handover note in Daily Pulse under Shift Log.
8. Working an exception
Lovehoney operatorsEvery exception follows the same route from raised to resolved. Select View on an exception card to open its panel. The four actions sit at the top: Acknowledge, Assign, Reject and Resolve.
-
Acknowledge
Select Acknowledge as soon as you have read the exception, before you start investigating. This records that a named person has taken ownership.
The panel shows the time since trigger: how long the exception has waited. The interval from an exception being raised to its first recorded action is the time to act measure used to assess this design partnership. Acknowledging promptly is what that measure records.
-
Decide
Take one of four paths.
-
It is not material: Reject
Use Reject when the exception should not have been raised. A rejection reason is required. Begin it with one of these phrases, then add one sentence of detail: Within tolerance, Duplicate, Data error, Not in scope or Already handled.
Rejections and their reasons are how Lovehoney's rules are tuned, and how the design partnership measures whether Certin raises the right exceptions. Consistent phrasing makes them countable.
Reject Exception. The reason is required. -
Someone else owns it: Assign
Choose the person under Assign To. Set a due date that falls before the business commitment date. Add a note saying what you need from them. Select Assign.
Assign Exception. -
It needs the operations manager: escalate
In the exception panel, under Communication & Coordination, select Escalate to Operations Manager.
Escalation, from the lower part of the exception panel. Choose an urgency level and write the escalation reason, saying why escalation is needed and what intervention is required. Both are required. Select Escalate to Ops Manager.
Urgency is your judgement of how quickly the manager must act. It is separate from severity and can differ from it: a Medium exception can need Critical urgency when a launch date depends on it. The exception stays open after escalation.
Escalate to Operations Manager. -
You own it: act
Move to step 3.
-
-
Act
Open Inbox. Every exception has a thread, filtered by status and severity. Select the thread to open it. Assign, Resolve and Escalate are available here too.
An exception thread in the Inbox. Reply to the carrier or forwarder from the thread, using Templates where one fits, and attach documents where needed. Everything sent and received stays on the thread. The Context panel on the right shows the shipment, the service level requirement, and the deadline against the estimated delivery.
Deadline and estimated delivery in the Context panel. Select Ask Clara for a summary of what is happening with the shipment and suggested next steps, or ask Clara a question about Lovehoney's shipments in your own words. The decision and the action remain yours.
Clara answering a question about delayed shipments. -
Resolve
When the matter is settled, select Resolve. Choose a resolution category and write the resolution details. Both are required. Select Resolve Exception. Section 9 sets out which categories to use and what the details must contain.
Resolve Exception.
9. Closing an exception
What the resolution details contain
Every resolution records three things:
- The final delivery date, stated against the business commitment date.
- Who was informed: customer, receiving site or internal owner.
- Any cost incurred, such as redelivery, storage or waiting time, with the amount where known.
This is the record of what happened to the shipment, and it is how demurrage, detention and redelivery exposure are measured during the design partnership.
Which category to use
| Category | Use when |
|---|---|
| Issue Resolved, Normal Operations | The shipment was delivered by the business commitment date. |
| Alternative Route Taken | The shipment was rebooked or moved to another service or vehicle. |
| External Issue, Beyond Control | The cause was outside the control of Lovehoney and the carrier, such as a road closure, industrial action or severe weather. |
| To be confirmed | A revised delivery date was agreed with the customer. |
| To be confirmed | The shipment was cancelled. |
Categories not used by Lovehoney
| Category | Instead |
|---|---|
| False Alarm, No Action Needed | Use Reject with a reason. An exception that should not have been raised is rejected, not resolved. |
| Escalated to Management | Escalate from the exception panel and keep the exception open. |
| Issue Ongoing, Monitoring | Leave the exception open. Resolving it removes a live problem from the queue. |
| Driver Assisted Remotely | Not applicable. Lovehoney freight is carried by third party carriers. |
| On-site Support Provided | Not applicable, for the same reason. |
10. Team, alerts, escalation and reports
These settings are made once, from the Configuration Workbook. They are shown so that every user knows who has access, how alerts reach them and when escalation happens.
Adding team members
Lovehoney administrator, with CertinOperators are added once the tracker is connected and the agreements are reviewed, so that Certin holds Lovehoney's data from their first sign in.
-
Open Settings at the bottom of the menu, then Team & Access. Select Invite Member.
Team & Access, where each named user is added. -
Enter the user's details and choose a role. The role for each named user is agreed in the Configuration Workbook. Up to five named users take part in the design partnership. Each user then signs in as described in section 2.
The roles available, with what each one can do.
Alerts and escalation
Certin, as agreed with the Lovehoney operational owner-
Risk score thresholds. Open Settings, then Alert Config. Three thresholds decide when a shipment is placed under watch, flagged for early intervention, or flagged critical.
Risk score thresholds in Alert Config. -
Notification channels. On the same page, each alert level is sent through the channels ticked for it. During the design partnership, notifications are sent by email only.
Notification channels by alert level. -
Automatic escalation. Unresolved alerts are escalated to the operations manager, and then to the system administrator, after the times set here.
Auto-escalation rules.
Reports
Reports & Analytics shows performance over a chosen period, by carrier and by route: average delivery time, service level compliance, exception resolution time, deliveries, the root causes of exceptions, delivery outcomes, the compliance trend and a carrier leaderboard. The Reports & Digests and Alert Logs tabs hold scheduled reports and the record of every alert sent. The operational owner uses this page to prepare for the weekly working session.
11. The seven scenarios
These are the situations used in User Acceptance Testing and in the onboarding sessions. Severity in each case is set by Lovehoney's rules.
| Scenario | What you see | What you do | How it closes |
|---|---|---|---|
| Normal delivery | No exception. The shipment moves to Delivered. | Nothing. If an exception is raised, reject it with Data error or Within tolerance. | No exception, or Reject. |
| Delayed collection | The carrier has not collected by the booked time. | Acknowledge. Ask the carrier for the new collection time. If it threatens the commitment, assign to the commercial owner or escalate. | Issue Resolved if the commitment holds. Otherwise the outcome that applies. |
| Missed connection | The consignment missed a linehaul or hub connection. | Acknowledge. Confirm the next departure with the carrier and check it against the commitment. | Issue Resolved, or Alternative Route Taken. |
| Changed delivery date | The carrier date moves beyond the business commitment date. | Acknowledge. Confirm the date with the carrier. Assign to the commercial owner where the customer needs to agree a new date. | Revised date agreed, category to be confirmed. |
| Cancellation | The booking is cancelled or withdrawn. | Acknowledge. Confirm with the booking owner that the cancellation is intended, and update the Excel tracker. | Shipment cancelled, category to be confirmed. |
| Fixed delivery appointment | The arrival is at risk of missing a booked slot at the receiving site. | Acknowledge. Confirm the arrival time with the carrier. Ask the receiving site to hold or move the slot before it is missed. | Issue Resolved if the slot is met. Otherwise record any refusal or redelivery cost. |
| SLA breach | The business commitment date has passed without delivery. | Acknowledge. Escalate where a customer or launch is affected. Confirm the final delivery date. | The category that matches the outcome, with the cost recorded. |
12. Screens outside this partnership
Some parts of the platform are not used during the design partnership.
- Fleets, the Driver and Vehicle and Live Location sections of the exception panel, View on Fleet Map, Track on Fleet Map, Call Driver and WhatsApp Driver. Lovehoney freight is carried by third party carriers, and the design partnership does not include live vehicle positions.
- GPS Tracking, WhatsApp and Traffic Intelligence on the Data Ingestion page. Not connected, for the same reason.
- Automation. Certin surfaces and assesses exceptions; Lovehoney decides and acts.
- Forecasting. Used only if the predictive layer is taken forward at the Day 40 mid-point review.
13. Onboarding session plan
One setup session with the administrator and operational owner, then three short sessions that take operators from first sign in to confident daily use. Day numbers follow the timeline in the Design Partnership Agreement, where the evaluation period starts once data access is in place.
In place before the operator sessions
- Named users invited, up to five, with roles assigned.
- Lovehoney's operations manager set up to receive escalations.
- Notifications set to email.
- The Excel tracker uploaded and mapped, and the first automated status source connected.
- Operating rules configured, and in-scope agreements uploaded and reviewed.
- A test environment prepared, so that practice exceptions do not enter the live measures.
| Session | When | Who | What it covers | Leave with |
|---|---|---|---|---|
| Setup 60 minutes |
Days 8 to 12, alongside rules configuration | Lovehoney administrator, operational owner and Certin | Sections 2, 4, 5 and 10: signing in, uploading and mapping the tracker, the status source, uploading and reviewing agreements, adding team members, alerts and escalation. | Users invited, tracker mapped, first agreements reviewed, operations manager set up. |
| 1. Orientation 60 minutes |
Day 12, straight after the final rules configuration session | Named operators and the operational owner | Sections 1, 3 and 6 to 9: the two dates, severity, finding your way around, the daily routine, and the full exception route worked on Lovehoney examples in the test environment. | Every operator has signed in and has acknowledged, rejected, assigned, escalated and resolved a practice exception. |
| 2. First live day 45 minutes |
Day 13, when detection goes live | Named operators and the operational owner | Working the first live exceptions together. Checking that notification emails arrive and that escalation reaches the operations manager. | First live exceptions acknowledged. Any access or routing problems logged with Certin. |
| 3. First week review 45 minutes |
Around Day 20 | Named operators, the operational owner and Certin | Rejected exceptions and their reasons, alert volume, and anything the team found that Certin did not raise. | Rule changes agreed and logged for the tuning period, Days 30 to 40. |
Time per operator across the three operator sessions: two and a half hours. After Session 3, the weekly working session set out in the agreement continues, moving to fortnightly where both parties agree, followed by the mid-point review at Day 40 and the final review between Days 80 and 90.
14. Quick reference
- Every morning
- Daily Pulse, then the Daily Digest. Then Signal Review. Then Exceptions, L1 first.
- Every exception
- Acknowledge first. Then Reject, Assign, escalate, or act in the Inbox.
- Every rejection
- A reason beginning Within tolerance, Duplicate, Data error, Not in scope or Already handled.
- Every escalation
- An urgency level and a reason. The exception stays open.
- Every resolution
- A category, then the final date against the commitment, who was informed, and any cost.
- Every upload
- Check the import results: everything imported cleanly, nothing waiting for a decision, nothing failed.
Video Walkthrough
A recorded tour of the Certin platform.
Paste the embed code from Trupeer, or the address it contains.
If the video does not play, watch it on Trupeer.
Three-Day User Acceptance Testing Plan
Lovehoney road-freight design partnership | Domestic Germany
| Document item | Detail |
|---|---|
| Prepared for | Lovehoney Group |
| Prepared by | Certin Technologies Limited |
| Version | Draft 1.0 |
| Planned duration | Three consecutive working days; extension by mutual agreement if required |
| Operational scope | Domestic Germany road freight, initially using Zencargo and Lovehoney shipment data |
Purpose
This plan defines how Lovehoney and Certin will validate that the configured Certin workflow supports the agreed domestic Germany road-freight process before the controlled live-running phase. It is designed to be focused and low-burden: selected Lovehoney users perform targeted tests, while Certin prepares the environment, supports execution, records defects and coordinates retesting.
UAT outcome
At the end of the three working days, Lovehoney will record one of three decisions: Accepted, Accepted with conditions, or Not accepted. Acceptance concerns the agreed UAT scope only; it does not by itself confirm the wider pilot KPIs or production rollout.
1. Scope and testing principles
In scope
Domestic Germany road shipments managed through the agreed Lovehoney workflow and initial Zencargo operating context.
Shipment identification using Lovehoney internal shipping reference, purchase-order number and freight-forwarder booking reference.
Milestones for booking, expected and actual collection, expected and actual delivery, cancellation and fixed delivery appointments.
Configured commitment-date logic, operational status, exception detection, ownership, alerts, escalation and audit history.
Data presentation and reconciliation across the agreed sample spreadsheet and available read-only operational sources.
Out of scope for this UAT
Validation of long-term forecasting accuracy or the final pilot business case.
Expansion to other lanes, transport modes or freight forwarders unless expressly added by both parties.
Destructive testing, penetration testing, or changes to Lovehoney production systems.
Automated decisions or external communications not explicitly configured and approved for the test environment.
Testing principles
| Principle | Application |
|---|---|
| Representative data | Use anonymised or approved representative shipment records that reproduce the agreed scenarios. |
| Controlled execution | Run tests in the prepared UAT environment; do not alter live operational records unless expressly agreed. |
| Evidence-based results | Each result must reference a screenshot, system record, alert, email or other agreed evidence. |
| No guessed data | Where required data is unavailable, Certin must show “Not available” or an equivalent explicit state. |
| Traceable defects | A failed or blocked test links to a unique defect record and is retested after correction. |
Recommended daily commitment
To keep the exercise manageable, plan approximately 60–90 minutes of focused Lovehoney testing per day, plus a short daily review. Certin remains available throughout the agreed testing window for support and defect triage.
2. Roles, entry criteria and readiness
Roles and responsibilities
| Role | Primary responsibility |
|---|---|
| Lovehoney UAT lead — TBC | Coordinates testers, confirms expected business outcomes and records the final decision. |
| Lovehoney testers — TBC | Execute assigned scenarios, capture actual results and attach evidence. |
| Lovehoney administrator(s) — TBC | Validate access, administrator controls and agreed user management. |
| Certin UAT lead — TBC | Runs the test schedule, supports users, maintains the tracker and facilitates daily reviews. |
| Certin engineering | Prepares the environment, investigates defects, deploys corrections and supports retesting. |
Entry criteria
Representative shipment sample approved and loaded.
Shipment identifiers and source fields mapped.
Lovehoney status values mapped to Certin operational states.
Commitment-date precedence confirmed, including fixed delivery appointments.
Exception, ownership, notification and escalation rules configured for the agreed scenarios.
Test users and administrator access created and verified.
UAT environment smoke-tested by Certin before Day 1.
UAT tracker shared and named testers briefed on evidence capture and defect reporting.
Readiness decision
The Certin UAT lead and Lovehoney UAT lead confirm readiness before Day 1. If a critical entry criterion is incomplete, the start date moves by mutual agreement rather than consuming the three-day testing window.
3. Three-day execution schedule
| Day | Focus | Test scenarios | Lovehoney activity | Daily exit |
|---|---|---|---|---|
| Day 1 | Core workflow | Normal delivery; shipment identifier and source reconciliation | Validate displayed data, milestone sequence, status and audit trail. | Core workflow works or blocking defects are logged. |
| Day 2 | Operational exceptions | Delayed collection; missed connection; changed delivery date; SLA breach | Confirm detection, classification, ownership, alerts and escalation. | Each exception has a recorded result and evidence. |
| Day 3 | Special outcomes and closure | Cancellation; fixed delivery appointment; missing/unavailable data; defect retests | Confirm special rules, retest corrected defects and review acceptance criteria. | Sign-off decision and conditions recorded. |
Daily operating rhythm
| Timing | Activity |
|---|---|
| Start of day — 15 minutes | Confirm test assignments, environment availability and known issues. |
| Testing window — 60–90 minutes | Lovehoney executes scenarios; Certin provides live support and records defects. |
| Triage — as required | Certin classifies defects, confirms owner and gives a target for correction or workaround. |
| End of day — 20 minutes | Review results, blockers, evidence gaps and the next day’s plan. |
Execution method
Tester selects the assigned Test ID in the execution tracker.
Tester confirms preconditions and follows the recorded steps.
Tester compares the actual outcome with the expected result and records Pass, Fail or Blocked.
For Fail or Blocked, the tester or UAT lead creates a linked defect and attaches evidence.
Certin resolves or proposes a workaround; Lovehoney repeats the affected steps and records the retest result.
4. Test catalogue and expected outcomes
| ID | Scenario | Expected business outcome | Priority |
|---|---|---|---|
| TC-01 | Normal delivery | Correct references and milestone dates are shown; status progresses to Delivered; audit history is retained. | Critical |
| TC-02 | Identifier and source reconciliation | Internal reference, PO and Zencargo booking reference resolve to the same shipment; source fields are traceable. | High |
| TC-03 | Delayed collection | Delay is detected against the expected collection date; owner and alert follow the configured rule. | Critical |
| TC-04 | Missed connection | Exception is captured with cause, impact and responsible owner; escalation follows the agreed rule. | High |
| TC-05 | Changed delivery date | New expected date is visible without overwriting history; risk and notifications recalculate as configured. | Critical |
| TC-06 | SLA breach | Overdue undelivered shipment is classified as currently breached and included in the agreed breach cohort. | Critical |
| TC-07 | Cancellation | Shipment is retained as Cancelled, not deleted, and excluded from on-time-delivery and breach denominators. | Critical |
| TC-08 | Fixed delivery appointment | The fixed appointment date takes precedence according to the approved commitment-date hierarchy. | Critical |
| TC-09 | Latest source update | Latest available operational update is shown with source and timestamp; conflicting data is flagged for review. | High |
| TC-10 | Missing required data | No value is invented; the field is explicit as unavailable and any dependent outcome is qualified. | High |
Evidence expectations
Evidence may include a screen capture, shipment record, alert, escalation message, audit-history entry or a link to an agreed test record. Personal or commercially sensitive data should be minimised and handled under the parties’ agreement and applicable access controls.
KPI and rules validated during UAT
The scenarios validate the configured definitions and workflow behaviour—not final performance levels. Particular attention is given to commitment-date precedence, reporting cohort exclusions, status mapping, alert ownership, cancelled shipments, tracking freshness and the distinction between observed outcomes and forecasts.
5. Defect management and retesting
| Severity | Definition | UAT treatment |
|---|---|---|
| Critical / S1 | Blocks a critical workflow, creates material data-integrity or access risk, or produces an incorrect critical operational decision. | Correct and retest before sign-off. |
| High / S2 | Major agreed function is incorrect or unavailable and no reasonable workaround exists. | Resolve before sign-off unless Lovehoney expressly accepts a documented condition. |
| Medium / S3 | Non-blocking issue with a practical workaround or limited operational impact. | Record owner and target date; may remain open by agreement. |
| Low / S4 | Cosmetic or minor usability issue that does not change the operational outcome. | Record for prioritisation; does not prevent acceptance. |
Defect workflow
1. Log the defect against the originating Test ID with summary, evidence, severity and reproduction details.
2. Certin confirms severity, owner and target status during triage.
3. Engineering applies a correction or agreed workaround in the UAT environment.
4. Lovehoney repeats the affected test steps and records Pass or Fail in the retest field.
5. The defect is closed only after a successful retest or an expressly accepted condition.
Extension rule
If a Critical defect cannot be corrected and retested within the three working days, final sign-off is paused and the testing period is extended by mutual agreement. The extension applies only to the affected scenarios and required regression checks unless both parties agree otherwise.
6. Acceptance and sign-off
Minimum acceptance criteria
All Critical scenarios have been executed and passed.
No Critical / S1 defect remains open.
No High / S2 defect blocks an agreed workflow; any accepted High defect has a documented workaround, owner and target date.
Shipment references, milestone dates and the configured commitment basis are displayed correctly for the test data.
Status changes, alerts, ownership and escalation operate according to the agreed rules and retain an audit history.
Cancelled shipments remain visible and are excluded from the configured on-time-delivery and breach cohort.
Unavailable data is shown explicitly; predictive values are clearly labelled as forecasts.
Lovehoney has reviewed the evidence and recorded a formal UAT decision.
Decision options
| Decision | Meaning |
|---|---|
| Accepted | The agreed UAT scope meets the acceptance criteria and may proceed to the next pilot phase. |
| Accepted with conditions | The scope may proceed subject to documented conditions, owners, workarounds and target dates. |
| Not accepted | One or more blocking criteria remain unmet; corrective action and further retesting are required. |
Sign-off record
| Field | Lovehoney | Certin |
|---|---|---|
| Name | ||
| Role | ||
| Decision / acknowledgement | ||
| Conditions, if any | ||
| Date | ||
| Signature |
The accompanying Excel execution tracker is the operational record for test results, defects, retests and acceptance evidence.
The Word file is created from this page at the moment you select the button, so it always matches the current version.
UAT Tracker
The live record of test results, defects, retests and sign-off during the three days of testing. Every tester works in the same Google Sheet.
Tracker link
Enter a link that starts with https://
Editing needs a Google account with access to the sheet. If the view above stays blank, open the tracker in Google Sheets.
Engineering Deliverables · Submission
Lovehoney / Certin Engineering Onboarding and Integration Deliverables
Prepared by: Engineering
Date: 21 September 2026
Test gate: 28 September 2026 EOD
Detection go-live target: 29 September 2026
Purpose and Scope
Engineering deliverables for the Lovehoney onboarding. Scope for this phase is Germany domestic road freight, read-only, running in shadow mode alongside Lovehoney’s existing Excel tracker, portal and email process. Two administrator seats; restricted access for all other users. Cancelled shipments are marked and retained, never deleted. Out-of-scope features are hidden by configuration or feature flag, not removed from the shared product.
Every statement below is marked by evidence status. Where the platform already implements something, it is marked Confirmed and the actual field, route or value is given. Where Lovehoney must supply something, it is marked Required from Lovehoney. Where a fact exists but has not been verified against a live system or document, it is marked To be confirmed. Nothing has been invented to fill a gap.
Evidence status legend
- Confirmed — verified in the Certin implementation or design notes
- Required from Lovehoney
- To be confirmed
- Non-blocking
Question for Lovehoney
One decision is needed to keep the 28 September test gate on track:
- Which carrier-tracking provider should this integration use — Parcel Perform, Zencargo, or both? (Parcel Perform is already built for this pilot; if Zencargo is required as well or instead, we’ll need the organisation access described in Section 4A.)
1. Technical Onboarding Checklist
Section 1
Every data, access and configuration dependency. "Required By" states the stage the item blocks. Owner is the party who must produce it, not the party who consumes it.
Data Dependencies
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Anonymised tracker sample | Excel/CSV export covering normal, delayed, cancelled and fixed-date shipments. Minimum 200 rows, real column structure. | Lovehoney | Configuration | Requested on call | Yes | Already requested. Mapping template in Section 3 cannot be finalised without it. |
| Tracker column definitions | Header text exactly as exported, data type, example value, always-populated flag. | Lovehoney | Configuration | Required | Yes | Mapping is by literal header string. See Section 2. |
| Primary shipment reference | Which column is the permanent unique key, and whether it is stable for the shipment’s whole life. | Lovehoney | Configuration | Requested on call | Yes | Becomes shipments.tracking_number. Rows without it are rejected. |
| Business commitment date | Which column holds Lovehoney’s committed delivery date, how it is set, whether it changes after booking. | Lovehoney | Configuration | Required | Yes | Exceptions assess against this. No field currently holds it — Section 13, item 2. |
| Carrier expected delivery date | The separate column holding the carrier’s own estimate. | Lovehoney | Configuration | Required | Yes | Maps to estimated_delivery. |
| Actual delivery timestamp | Column recording when delivery actually occurred, distinct from either forecast date. | Lovehoney | Configuration | Required | Yes | Without it, on-time measures compare a date against itself. |
| Status vocabulary | Every status value the tracker and carrier feed can emit. | Lovehoney | Configuration | Required | Yes | Unmapped values do not drive SLA logic. Canonical set in Section 2. |
| Date/time format and timezone | Format per column, timezone, CET/CEST handling across the October change. | Lovehoney | Configuration | Required | Yes | Ambiguous day/month ordering corrupts every deadline. |
| Historical shipment data | 12 months if available, 90 days minimum, Germany domestic road. | Lovehoney | Live testing | Required | Yes | Every Day 0 baseline derives from this. Section 11. |
| Cancellation representation | Whether a cancelled shipment is flagged in the tracker or the row is removed. | Lovehoney | Configuration | Required | Yes | If rows are deleted, cancellation is undetectable from the file. Section 13. |
| Fixed-appointment representation | How a fixed delivery appointment is recorded and how it differs from a standard commitment. | Lovehoney | Configuration | Required | Yes | Drives UAT-05. |
Integration Dependencies
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Carrier-data source decision | Whether the carrier feed is Parcel Perform, Zencargo, or both. | Certin + Lovehoney | Configuration | Open | Yes | Parcel Perform is built; Zencargo has no source material. Section 13, item 1. |
| PP API credentials | OAuth2 client_id and client_secret from the PP portal (Integrations > API). | Lovehoney | Configuration | Required | Yes | PP is engaged by Lovehoney directly; Certin has no PP contract. |
| PP webhook Authentication Key | Key from PP portal (Integrations > Webhooks), used for HMAC verification. | Lovehoney | Live testing | Required | Yes | Stored as PARCEL_PERFORM_WEBHOOK_SECRET. |
| PP webhook registration | Registering Certin’s receiver URL in the PP portal. Requires Lovehoney’s Certin organizationId. | Lovehoney | Live testing | Required | Yes | Portal-only; no API-based subscription documented. |
| PP account API version | Whether the Lovehoney account is on 5.0 or 5.2. | Lovehoney / PP KAM | Configuration | To be confirmed | Yes | Changes payload shape. Open question in the design notes. |
| PP carrier onboarding list | Which Lovehoney road carriers PP has actually onboarded. | Lovehoney / PP KAM | Live testing | To be confirmed | Yes | Caps automated status coverage. Coverage question, not code. |
| PP sandbox environment | No separate sandbox is documented; PP live-test runs against the real account. | PP KAM | Live testing | Open | No | Read-only makes production testing defensible. Confirm acceptability. |
| Zencargo API documentation | Public or account documentation covering auth, endpoints, limits, events. | Certin | Configuration | Open | Yes | Engineering obtains this; not a Lovehoney ask. Section 4. |
| Zencargo organisation access | Lovehoney-specific read-only access, tenant identifier, credentials. | Lovehoney | Configuration | Requested on call | Yes | Coordination contact already requested. |
| Reference correspondence | Which carrier-system field carries the Lovehoney shipment reference. | Lovehoney | Configuration | Required | Yes | Without it, tracker rows and carrier records cannot reconcile. |
Access and Credentials
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Administrator details | Name and email for the two administrator seats. | Lovehoney | Configuration | Requested on call | Yes | Provisioned as admin. Section 5. |
| Restricted user list | Name, email and intended function for each remaining user. | Lovehoney | Configuration | Requested on call | Yes | Role mapping depends on Section 13, item 3. |
| Secure credential channel | Agreed mechanism for transferring API secrets. | Both | Configuration | Required | Yes | Not email. Secrets are stored AES-256-GCM encrypted at rest. |
| Network allowlisting | Whether the carrier API restricts callers by IP; if so, permit Certin egress. | Lovehoney | Live testing | To be confirmed | No | Only applies if restriction exists. |
Security and Compliance
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Read-only boundary sign-off | Written approval of the architecture in Section 6. | Lovehoney | Configuration | Required | Yes | Section 6 is written to be attachable to that approval. |
| PII boundary acceptance | Acceptance that no name, email, phone, address or commercial value reaches Certin. | Lovehoney | Configuration | Documented | No | Enforced structurally and proven by test. Section 6. |
| Data residency — carrier side | Where PP hosts Lovehoney’s data before Certin reads it. | Lovehoney + PP | Live testing | To be confirmed | No | Recorded as TBC in the boundary document. Governance item. |
| DPA execution | Any data-processing agreement required before credentials are issued. | Lovehoney | Configuration | To be confirmed | Yes | Confirm whether one is outstanding. |
Configuration
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Germany domestic lane filter | Scope filter so out-of-lane shipments in the same tracker do not enter the workspace. | Certin | Configuration | Needs lane definition | Yes | Requires Lovehoney’s definition of in-scope origin/destination. |
| Per-org connector enablement | organization_settings.parcel_perform_enabled, default false for every org. | Certin | Configuration | Confirmed | No | Enabled today by direct SQL; no admin UI exists yet. |
| SLA contract records | Per client and route: max delivery hours, penalty model, rate, cap, validity dates. | Lovehoney | Configuration | Requested on call | Yes | SLA/transit-time sheet already requested. Schema in Section 2. |
| Severity and routing rules | Which conditions map to which severity, and who is notified at each level. | Lovehoney | Configuration | Required | Yes | Certin severities are L1/L2/L3. |
| Out-of-scope feature hiding | Hide modules not in scope by configuration or feature flag. | Certin | Live testing | Needs scope list | No | Requires Lovehoney confirmation of which modules are in scope. |
| Cancelled-shipment handling | Mark and retain; audit history survives cancellation. | Certin | Live testing | Confirmed | No | Platform soft-deletes; no hard delete on cancellation. |
Business Rules
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Exception definition | What Lovehoney considers an exception on this lane, and at what threshold. | Lovehoney | Configuration | Required | Yes | Certin defaults: at-risk within 6h of deadline, approaching within 24h. |
| At-risk thresholds | Confirmation that 6h/24h suit German domestic road. | Lovehoney | Configuration | To be confirmed | No | Currently fixed platform-wide; would need work to vary. Section 13. |
| Escalation path | Who receives an escalated exception, and at which severity. | Lovehoney | Live testing | Required | Yes | At least one user must hold a role able to receive escalations. |
| Charge rate card | Redelivery fees, detention/waiting rates, and whether demurrage applies on this lane. | Lovehoney | Live testing | Required | No | Without it, exposure KPIs report counts only. Section 10. |
User and Role Setup
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Role mapping decision | Which platform role each Lovehoney user group receives. | Certin + Lovehoney | Configuration | Open | Yes | No genuinely view-only role exists. Section 5 and Section 13, item 3. |
| 2FA policy | Whether 2FA is enforced for the Lovehoney organisation. | Lovehoney | Configuration | To be confirmed | No | Default is off. If on, users are blocked until enrolled. |
Testing Dependencies
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Reserved test shipments | Six references, one per UAT scenario, Lovehoney agrees not to touch. | Lovehoney | Live testing | Required | Yes | Section 7. |
| UAT participants | Named testers and availability in the week to 28 September. | Lovehoney | Live testing | Required | Yes | |
| Scratch Postgres + Redis | Disposable Postgres 17+ with pgvector, and Redis, for the connector e2e suites. | Certin | Live testing | Confirmed | No | Documented setup already exists in the connector README. |
Operational Dependencies
| Requirement | Description | Owner | Required By | Status | Blocking? | Notes |
|---|---|---|---|---|---|---|
| Baseline operating measures | Operator headcount, hours, current manual checking, duplicate entry. | Lovehoney | Live testing | Required | Yes | Several KPIs are unreportable without these. Section 11. |
| Baseline capture running | KPI snapshot capture active against the Lovehoney tenant from Day 0. | Certin | Go-live | Must be verified | Yes | Cannot be backfilled. Section 13. |
| Support and escalation contacts | Named contacts on both sides for the pilot period. | Both | Live testing | Required | No |
2. Data-Intake Specification
Section 2
What Certin requires from Lovehoney’s tracker. Certin field names below are the actual column names in the shipments table. Accepted header aliases are the literal strings the importer already recognises — a matching header maps with no configuration.
2.1 Shipment fields
| Certin field | Description | Required? | Type | Accepted format / header aliases | Identifier? | Validation rule | Example | Source |
|---|---|---|---|---|---|---|---|---|
| tracking_number | Permanent unique shipment reference. | Mandatory | string | Recognised headers: tracking_number, tracking number, tracking no, shipment id, shipment_id, waybill, waybill id, waybill_id, order id, order_id, order ref | Yes — primary | Non-empty. Row rejected if absent, reported as "no tracking/waybill/order identifier found". | LH-DE-100234 | Tracker |
| status | Current shipment state. | Mandatory | enum | status, shipment status, delivery status | No | Normalised to the canonical set in 2.3. Unrecognised values pass through unchanged and do not drive SLA logic. | in_transit | Tracker / carrier |
| client_name | Client the shipment belongs to. | Mandatory | string | client name, customer name, customer, brand | Matching key | Used to resolve the SLA contract by exact normalised match. Spelling variants resolve to different contracts. | Lovehoney Ltd | Tracker |
| carrier_name | Carrier operating the movement. | Mandatory | string | carrier name, carrier, courier, logistics partner | Matching key | Resolves or creates a carriers row. Name variants fragment carrier records. | DHL Freight | Tracker / carrier |
| Business commitment date | Lovehoney’s committed delivery date. Exceptions assess against this. | Mandatory | datetime | No field exists — see Section 13, item 2 | No | Currently unrepresentable. Requires schema work before UAT-05 and UAT-06 can pass. | 2026-09-24T17:0 0+02:00 | Tracker |
| estimated_delive ry | Carrier’s expected delivery date. | Mandatory | datetime | delivery date, estimated delivery, estimated_delivery, eta, delivered on, promised delivery | No | Aliases currently conflate ETA, promised date and actual delivery — see 2.6. | 2026-09-24T14:0 0+02:00 | Carrier |
| actual_delivery | When delivery actually occurred. | Mandatory | datetime | Dedicated column required | No | Currently derived from the ETA column when status is delivered. See 2.6. | 2026-09-24T15:1 2+02:00 | Carrier |
| pickup_date | Collection date. Start of the SLA clock. | Mandatory | datetime | ship date, picked up at, pickup date, dispatch date | No | Used as SLA clock start; falls back to order date, then ingestion time. | 2026-09-22T08:3 0+02:00 | Tracker |
| origin / origin_city | Collection location. | Optional | string | origin, origin city, pickup city, source, from; composite origin city|origin state|origin country | Route matching | Defaults to "Unknown origin" if absent. Used for SLA contract route matching. | Hamburg, DE | Tracker |
| destination / destination_city | Delivery location. | Optional | string | destination, destination city, delivery city, to, ship to | Route matching | Defaults to "Unknown destination" if absent. | München, DE | Tracker |
| order_date (metadata) | Order creation date. | Conditional | datetime | order date, created date, created_at | No | Required when pickup_date is absent — it becomes the SLA clock start. | 2026-09-21 | Tracker |
| exception_type | Reason for delay or exception. | Conditional | string | issue type, delay reason, exception reason, issue, problem | No | Required when a shipment is delayed. Boolean-like values | Customs hold | Tracker |
| (true/false/yes/no) are discarded as meaningless. | ||||||||
| priority | Service level. | Optional | string | service level, priority | No | Normalised: contains "express"/"same" → high; "standard" → standard; else passed through. | Standard | Tracker |
| weight_kg | Shipment weight. | Optional | decimal | weight (kg), weight_kg, weight | No | Absent leaves the stored value unchanged. Unit conversion required if not kg. | 420.5 | Tracker |
| items_count | Piece count. | Optional | integer | quantity, items_count, items count, pieces | No | Absent leaves the stored value unchanged. | 12 | Tracker |
| driver_name | Assigned driver. | Optional | string | driver name, driver_name, driver, assigned driver | No | Promotes a driver record only when a phone number is also present. | — | Tracker |
| driver_phone | Driver contact. | Optional | string | driver phone, driver_phone, phone, mobile, driver mobile | No | Enables operator-initiated driver messaging. | — | Tracker |
| exception_note | Free-text notes. | Optional | text | notes (free text), notes, comment, description | No | Preserved when an incoming sync supplies an empty value. | Awaiting customs clearance | Tracker |
| shipping_cost_eu r | Freight cost. | Optional | decimal | shipping cost (eur), shipping_cost_eur, shipping cost, freight cost | No | Absent leaves the stored value unchanged. | 340.00 | Tracker |
| source_updated_ at | When the source last changed the record. | Strongly recommend ed | datetime | source_updated_at, updated_at, last_updated, modified_at, event_timestamp, last_event_time | Ordering key | Orders writes across sources. Absent, it falls back to ingestion time. | 2026-09-22T09:1 0Z | Both |
Additional optional fields recognised without configuration: sku_code, route_code, warehouse_code, vehicle_type, product_category, distance_km. Each is stored under metadata.
2.2 SLA contract fields
Supplied via the SLA/transit-time sheet, not the shipment tracker. Delivery deadlines are derived from the contract, never from a date in the shipment file.
| Certin field | Description | Required? | Type | Validation / notes |
|---|---|---|---|---|
| client_name | Client the contract covers. | Mandatory | string | Matched against the shipment’s client name by exact normalised string. |
| route_origin / route_destination | Route the terms apply to. | Mandatory | string | Used to select among multiple contracts for one client. |
| max_delivery_hours | Transit time allowed. | Mandatory | decimal(6,2) | Deadline = pickup (or order) date + this value. |
| penalty_per_hour | Hourly penalty rate. | Conditional | decimal(10,2) | Required when the penalty model is per-hour. |
| penalty_per_breach | Flat penalty per breach. | Conditional | decimal(10,2) | Required when the penalty model is per-breach. |
| penalty_cap | Maximum penalty. | Optional | decimal(12,2) | Applied if present. |
| valid_from / valid_until | Contract validity window. | Mandatory / Optional | date | valid_from defaults to current date. Open-ended if valid_until absent. |
| service_tier, priority | Service classification. | Optional | string | Defaults to standard. |
2.3 Canonical status values
Confirmed. Incoming statuses normalise to the set below. Anything unrecognised passes through unchanged and will not drive SLA or exception logic — which is why the full Lovehoney vocabulary is a blocking requirement.
| Canonical value | Accepted input values | SLA treatment |
|---|---|---|
| pending | pending, booked, created | Open. Counts toward active shipments. |
| in_transit | in transit, transit, on route, out for delivery | Open. SLA clock running. |
| delayed | delayed, late, exception | Open. Raises an exception. |
| delivered | delivered, completed | Terminal. On-time assessed against the deadline. |
| cancelled | cancelled, canceled | Terminal. Record retained, never deleted. |
| return | Carrier-feed return | Canonical value added for the pilot. Left to the SLA computation; not folded into any existing bucket. |
| needs_review | Carrier-feed expired, inactive, and any unrecognised value | Safe default. expired always forces an exception. |
Known follow-up on the two new statuses
return and needs_review are recorded in the design notes as not yet present in the analytics status buckets that every reporting consumer reads. Until that is updated, shipments in these two states are not counted in the delivered / failed / active / problem bucket metrics. Flagged rather than assumed resolved — it affects Automated Status Coverage reporting in Section 10.
2.4 Identifier requirements
- Unique — the shipment reference must be unique within the Lovehoney organisation. The database enforces uniqueness on (organization_id, tracking_number).
- Stable and persistent — it must not change across the shipment’s life. A changed reference is indistinguishable from a new shipment and creates a duplicate record.
- Used for matching — every update from every source matches on this value. It is the upsert key.
- Used for deduplication — repeated rows carrying the same reference collapse to one shipment.
- Used to correlate across systems — the tracker row and the carrier record must carry the same value, or they cannot be reconciled. Which carrier field carries it is Required from Lovehoney.
Known identity mismatch in the carrier feed
Parcel Perform’s own documentation states that a tracking number is not unique on its own — true identity is tracking number plus carrier. Certin’s constraint is organisation plus tracking number. The gap is handled by a guard: if an incoming tracking number already exists under a different carrier, the record is not written — it is held in a quarantine table and an alert is raised. Migrating the database key to include carrier remains open target-state work.
2.5 Handling rules
| Condition | Certin behaviour | Status |
|---|---|---|
| Missing identifier | Row rejected, not imported. Reported in the job summary as "no tracking/waybill/order identifier found" with a count. | Confirmed |
| Missing optional value | Existing stored value is preserved. A partial feed does not blank a field another source populated. | Confirmed |
| Duplicate rows in one file | Last occurrence wins. Earlier rows counted and reported as collapsed duplicates. | Confirmed |
| Duplicate across files | Content-hashed at record level; an identical row already ingested is skipped rather than re-projected. | Confirmed |
| Unknown identifier | Treated as a new shipment and inserted. | Confirmed |
| Changed identifier | No detection. Produces a duplicate shipment. Mitigated only by the stability requirement in 2.4. | Open |
| Out-of-order update | An update older than the stored version is skipped and reported as "older than the version already stored". Requires source_updated_at on both sides. | Confirmed |
| Invalid status value | Passed through unchanged; does not drive SLA logic. From the carrier feed, mapped to needs_review instead, and the raw value always preserved. | Confirmed |
| Invalid date value | Treated as absent. The SLA clock falls back: pickup date → order date → ingestion time. | Confirmed |
| Partial record | Imported if the identifier is present. Missing fields fall back to defaults; missing dates degrade SLA accuracy rather than rejecting the row. | Confirmed |
| Carrier collision | Record quarantined, not written; alert raised. Re-polls update the snapshot without re-alerting. | Confirmed |
| Non-shipment sheet | Sheets recognised as non-shipment are skipped and reported with the reason. | Confirmed |
2.6 Date-field conflict — must be resolved before UAT
One date field currently carries three meanings
The importer reads a single date column for estimated_delivery, and its recognised aliases include eta, promised delivery and delivered on together. There is no field for a business commitment date.
Where a shipment is marked delivered, that same column is also taken as the actual delivery timestamp, so on-time performance compares a value against itself. Separately, where an SLA contract matches, the deadline is computed from the contract and any per-shipment date in the file is discarded — which is exactly what a fixed-appointment shipment needs preserved.
Lovehoney’s stated requirement is that carrier ETA and business commitment stay separate, with exceptions assessed against the commitment. That requires three separated fields and a change to deadline derivation. UAT-05 and UAT-06 cannot pass correctly until this is done. Section 13, item 2.
3. Draft Excel-to-Certin Field-Mapping Template
Section 3
Copy directly into Excel. Column A is filled in by Lovehoney with their actual header text; every other column is pre-filled. Rows marked Confirm need Lovehoney input before the mapping is final. Certin field names are the real column names — none invented.
Provisional until the tracker sample arrives
The anonymised tracker sample requested on the call has not yet been received. This template is built from the Certin importer’s recognised aliases, so any Lovehoney header that already matches an alias maps with no configuration. Headers that do not match need an explicit row here.
| Excel column (Lovehoney) | Certin field | Required? | Data type | Transformation / mapping rule | Validation | Example value | Notes |
|---|---|---|---|---|---|---|---|
| <to be supplied> | tracking_number | Mandatory | string | Direct. Auto-maps if the header is one of the recognised aliases in 2.1. | Non-empty; unique in file | LH-DE-100234 | Primary key. Row rejected if blank. |
| <to be supplied> | status | Mandatory | enum | Lookup against the Lovehoney status vocabulary, then normalise per 2.3. | Must resolve to a canonical value | In Transit → in_transit | Confirm full vocabulary. |
| <to be supplied> | client_name | Mandatory | string | Direct, trimmed. Must match the SLA sheet spelling exactly. | Must resolve to a contract | Lovehoney Ltd | Spelling variants break SLA matching. |
| <to be supplied> | carrier_name | Mandatory | string | Direct. Resolves or creates a carrier record. | Must be in the agreed carrier list | DHL Freight | Confirm carrier list. |
| <to be supplied> | business commitment date | Mandatory | datetime | No target field exists. Blocked pending Section 13, item 2. | ISO 8601 with offset | 2026-09-24T17:00+0 2:00 | Confirm column, and blocked on schema work. |
| <to be supplied> | estimated_delivery | Mandatory | datetime | Direct. Carrier ETA only — must not be the same column as commitment or actual delivery. | Valid date; not before pickup | 2026-09-24T14:00+0 2:00 | See the conflict in 2.6. |
| <to be supplied> | actual_delivery | Mandatory | datetime | Direct, populated only when delivered. | Valid date; not before pickup | 2026-09-24T15:12+0 2:00 | Currently derived from the ETA column — see 2.6. |
| <to be supplied> | pickup_date | Mandatory | datetime | Direct. Starts the SLA clock. | Valid date | 2026-09-22T08:30+0 2:00 | Falls back to order date if absent. |
| <to be supplied> | origin | Optional | string | Single column, or composite city|state|country. First part becomes origin_city. | — | Hamburg, DE | Used for SLA route matching. |
| <to be supplied> | destination | Optional | string | As above; first part becomes destination_city. | — | München, DE | Used for SLA route matching. |
| <to be supplied> | exception_type | Conditional | string | Direct. Boolean-like values discarded. | Free text, not true/false | Customs hold | Required for delayed shipments. |
| <to be supplied> | exception_note | Optional | text | Direct. | — | Awaiting clearance | Preserved when incoming value is empty. |
| <to be supplied> | priority | Optional | string | Normalised: express/same → high; standard → standard. | — | Standard | Confirm service levels. |
| <to be supplied> | weight_kg | Optional | decimal | Direct. Convert if the source unit is not kg. | Numeric ≥ 0 | 420.5 | Confirm unit. |
| <to be supplied> | items_count | Optional | integer | Direct, rounded. | Integer ≥ 0 | 12 | |
| <to be supplied> | shipping_cost_eur | Optional | decimal | Direct. | Numeric ≥ 0 | 340.00 | Confirm currency is EUR. |
| <to be supplied> | driver_name | Optional | string | Direct. | — | — | Driver record created only with a phone number. |
| <to be supplied> | driver_phone | Optional | string | Direct, digits normalised. | E.164 preferred | — | Enables driver messaging. |
| <to be supplied> | source_updated_at | Recommende d | datetime | Direct. Orders writes across sources. | ISO 8601 UTC or with offset | 2026-09-22T09:10Z | Absent, falls back to ingestion time. |
| <to be supplied> | sku_code, route_code, warehouse_code, vehicle_type, product_category, distance_km | Optional | mixed | Direct into metadata. | — | — | Recognised without configuration. |
Second tab — status vocabulary mapping
| Lovehoney status value | Certin canonical status | Forces exception? | Notes |
|---|---|---|---|
| <to be supplied> | one of: pending, in_transit, delayed, delivered, cancelled, return, needs_review | Yes / No | One row per distinct value the tracker can emit. Unmapped values will not drive SLA logic. |
4. Zencargo Integration Checklist
Section 4
No Zencargo source material exists
A search of both repositories, the engine design notes and all accessible documentation returns zero Zencargo references. There is no API documentation, no endpoint list, no authentication scheme, no rate limit and no event catalogue available to Engineering.
Per the instruction not to ask Lovehoney for what we can obtain ourselves, obtaining the Zencargo API documentation is Engineering’s own action, not a Lovehoney request. It has not yet been done and is the reason this section cannot be completed in the same detail as the Parcel Perform sub-section below. Nothing here is invented.
What already exists for Lovehoney is a built Parcel Perform connector. 4B documents it as confirmed fact so the reviewer can see what is genuinely ready. Which provider is the carrier-data source is an open decision — Section 13, item 1.
4A. Zencargo — required to complete
Authentication
| Item | Requirement | Status | Owner |
|---|---|---|---|
| Authentication mechanism | OAuth2, API key, bearer token or other. | To be confirmed with Zencargo / Lovehoney | Certin (from docs) |
| Credentials required | Exact credential set and where issued. | To be confirmed | Certin (from docs) |
| Token requirements | Lifetime, refresh mechanism, scope. | To be confirmed | Certin (from docs) |
| Credential ownership | Lovehoney provisions read-only credentials scoped to their organisation. | Required from Lovehoney | Lovehoney |
| Organisation identifier | Lovehoney’s Zencargo tenant/organisation id. | Required from Lovehoney | Lovehoney |
| Environment requirements | Whether a sandbox exists and whether it shares production quota. | To be confirmed | Lovehoney / Zencargo |
| Secret handling | Certin stores integration secrets AES-256-GCM encrypted at rest with a dedicated key. Never plaintext, never in logs. | Confirmed — platform capability | Certin |
API / Endpoints
No Zencargo endpoint paths are documented in any available material. Purposes below state what the integration needs; paths are pending documentation review.
| Endpoint / Resource | Purpose | Method | Data required | Direction | Frequency | Status |
|---|---|---|---|---|---|---|
| Pending documentation | Authenticate and obtain a token | — | Credentials | Outbound read | On expiry | Pending confirmation |
| Pending documentation | List shipments changed since a watermark | GET | Date-range or cursor, organisation scope | Inbound read | Per refresh interval | Pending confirmation |
| Pending documentation | Retrieve full shipment detail including event history | GET | Shipment identifier | Inbound read | Per changed shipment | Pending confirmation |
| Pending documentation | Receive push notification of shipment change | POST (inbound) | Signature/secret for verification | Inbound | Event-driven | Pending confirmation |
Refresh Frequency
Certin’s supported intervals are Confirmed: every 15 minutes, hourly, every 6 hours, daily, or manual. An interval outside this set cannot be committed without development.
- Expected polling frequency — every 15 minutes, subject to Zencargo rate limits.
- Event-driven updates — preferred where available, with polling retained for reconciliation.
- Maximum acceptable data delay — Required from Lovehoney. Drives the Time to Know KPI target.
- Full sync — on initial load and after any watermark loss.
- Incremental sync — watermark-based, taken from fetch start with an overlap window so records created mid-fetch are not skipped.
Rate Limits
| Item | Detail | Status |
|---|---|---|
| Known limits | Requests per second/minute/day, and whether quota is per account or per token. | To be confirmed |
| Expected request volume | Derived from Lovehoney’s German domestic shipment volume, which is not yet known. | Required from Lovehoney |
| Retry behaviour | Certin retries transient failures; watermark advances only on full success, so a failed cycle backfills on the next run. | Confirmed pattern |
| Backoff requirements | Token-bucket governor with exponential backoff, as implemented for the Parcel Perform connector. | Pattern exists |
| Rate-limit handling | Respect a Retry-After header where provided; otherwise exponential backoff. | Depends on Zencargo response semantics |
Required Events
Events relevant to the Lovehoney workflow. Availability in Zencargo is unknown until the documentation is reviewed.
| Event | Why the Lovehoney workflow needs it | Availability |
|---|---|---|
| Shipment created | Establishes the record and starts SLA tracking. | To be confirmed |
| Shipment updated | Primary driver of status freshness and Automated Status Coverage. | To be confirmed |
| Collection scheduled | Sets the expected collection against which a missed collection is detected. | To be confirmed |
| Collection missed | Directly drives UAT-04. | To be confirmed |
| Shipment delayed | Raises an exception and starts the Time to Know clock. | To be confirmed |
| Shipment cancelled | Marks the record. Without it, cancellation is invisible. | To be confirmed |
| Delivery appointment created | Required to represent fixed-appointment deliveries. | To be confirmed |
| Delivery appointment changed | Appointment movement is a commitment change, not an ETA change. | To be confirmed |
| Delivery completed | Supplies the actual delivery timestamp. Required for every on-time measure. | To be confirmed |
| SLA breach | Certin computes this itself from the commitment date; a source-side event is not required. | Computed by Certin |
| Exception raised | Certin raises exceptions itself; a source-side exception is additional signal. | Computed by Certin |
4B. Parcel Perform — implemented, for comparison
Documented here because it is confirmed fact and directly relevant to the same decision. Values are taken from the connector implementation and its design notes.
| Item | Confirmed detail | Status |
|---|---|---|
| Auth mechanism | OAuth2 client-credentials. Token endpoint POST /auth/oauth/token/, Authorization: Basic base64(client_id:client_secret), body grant_type=client_credentials. Functional calls use Authorization: Bearer. | Confirmed |
| Credential source | PP portal → Integrations > API. Provisioned by Lovehoney; Certin has no independent PP contract. | Confirmed |
| Secret handling | AES-256-GCM encrypted at rest under a dedicated key, never reusing another connector’s key. Fails closed if the key is absent. | Confirmed |
| Base URL | Production https://api.parcelperform.com, versioned /v5/ and /v5-2-0/. Sandbox not documented. | Confirmed / sandbox open |
| List endpoint | GET /v5/shipment/list/ — one date-range pair required; poll uses updated_date_from/to. Pagination limit max 100 with a next_page cursor. No results returns HTTP 404, not an empty 200. | Confirmed |
| Details endpoint | GET /v5/shipment/details/?shipment_uuid=…, v5.2 variant /v5-2-0/shipment/details/. Returns full event history. | Confirmed |
| Carrier configuration endpoint | Exact path not confirmed. Carrier identity is resolved from the shipment payload instead, so this is not blocking. | Open, non-blocking |
| Rate limit | 40 requests/second per account → 429 Throttled. A separate 403 Quota exceeded indicates account quota. Shared token-bucket governor implemented, default capacity and refill both 40. | Confirmed |
| Refresh frequency | Poller sweeps every 15 minutes per enabled org, on a queue with exponential-backoff retry. Watermark advances only on full success. Poll window overlaps the previous watermark by 15 minutes; first poll looks back 24 hours. | Confirmed |
| Webhook | Registered in the PP portal (Integrations > Webhooks); no API-based subscription documented. HTTPS POST JSON, must return 200. Retried up to 3× at 5-minute intervals then dropped — the poller backfills that gap, which is why the overlap is 15 minutes. | Confirmed |
| Webhook verification | HMAC-SHA256 over the raw request body using the portal Authentication Key, compared in constant time. Header name and digest encoding are not locked — the guard accepts both known variants and logs which matched. Replays deduplicated by body hash. | Implemented / variants open |
| Webhook receiver URL | POST <backend>/api/v1/parcel-perform/webhook/:organizationId. The org id is a path segment because PP’s payload carries no tenant identifier. Whoever registers it needs Lovehoney’s actual organisation id. | Confirmed |
| Identifiers | shipment_uuid is PP-generated, globally unique and stable — used for detail retrieval and idempotent matching. shipment_id is user-defined and may be null; not used as a key. tracking_number is not unique alone. | Confirmed |
| Write direction | Read-only, enforced structurally: the API client has no POST/PUT/PATCH/DELETE method against any PP resource path. | Confirmed |
| Account API version | Whether Lovehoney’s account is on 5.0 or 5.2 changes the payload shape. | To be confirmed |
5. User Access and Permissions Setup Guide
Section 5
Uses the real Certin permission model. Nine roles exist; each combines a module list with five capability flags. No roles are invented below.
Certin Users
Agreed on the call: two administrators, limited access for all remaining users. Names and emails for both groups were requested and are outstanding. Required from Lovehoney.
| User group | Count | Proposed role | Rationale | Status |
|---|---|---|---|---|
| Lovehoney administrators | 2 | admin | Full module access, team and settings management. Needed to manage users and configuration without Certin involvement. | Names required |
| Lovehoney operators | TBC | member (closest available) | Most restricted role available: dashboard, inbox, exceptions and shipments, with all five capability flags off. | See gap below |
| Certin implementation team | TBC | admin | Configuration and support during the pilot. Removed or downgraded at handover. | Confirm duration |
User Roles
The nine roles, as implemented:
| Role | Modules | Notes |
|---|---|---|
| owner | All 13 modules | Identical capability set to admin. |
| admin | All 13 modules | Proposed for the two Lovehoney administrator seats. |
| operations_manager | All except settings and data ingestion | Can manage team; cannot change settings. Escalation recipient. |
| logistics_director | Oversight set | Analytics without automation control. |
| warehouse_manager | Warehouse set, no fleet | Out of scope for this lane. |
| fleet_manager | Fleet and shipments | Out of scope for this lane. |
| carrier_manager | Carrier performance and SLAs | Possible fit if Lovehoney wants a carrier-performance viewer. |
| dispatcher | Routes and ETAs | Out of scope for this lane. |
| member | Dashboard, inbox, exceptions, shipments | Most restricted. All five capability flags off. |
Permissions
Capability flags are the platform’s real permission axes: team management, settings, analytics, automations, bulk assignment, exception resolution and forecasting. The matrix below maps them onto the requested columns.
| Role | View | Create | Edit | Delete | Configure | Reports | Admin | Notes |
|---|---|---|---|---|---|---|---|---|
| admin | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Two Lovehoney seats. |
| operations_manager | Yes | Yes | Yes | Limited | No | Yes | Team only | Can resolve exceptions and bulk assign. |
| carrier_manager | Yes | Limited | Limited | No | No | No | No | Carrier and SLA focus; no fleet or analytics. |
| member | Yes | Limited | Limited | No | No | No | No | Cannot resolve exceptions, bulk assign, or view analytics or forecasting. |
There is no genuinely view-only role
The deployment is read-only at the integration boundary. That is not the same as read-only for users. member — the most restricted role — still reaches the dashboard, inbox, exceptions and shipments, and can send messages from within a thread. A Lovehoney "restricted" user provisioned as member would be able to act, not only observe.
Two options: add a view-only role, or feature-flag the action surfaces for this workspace and describe that arrangement plainly. This needs a decision before the permissions guide can be issued to Lovehoney — Section 13, item 3.
Environment Access
| Environment | Who | Purpose | Status |
|---|---|---|---|
| Staging | Certin engineering; named Lovehoney UAT participants | UAT execution against synthetic and anonymised data. | Participants required |
| Production | Two Lovehoney admins, restricted users, Certin implementation team | Shadow-mode operation from go-live. | User list required |
Integration Access
Carrier API credentials are held by Certin, encrypted at rest, and are not exposed to any Lovehoney user through the interface. Connector enablement is per-organisation and defaults to off. There is currently no administrative UI or API for enabling the connector or setting its credentials — both are done by direct database operation during onboarding. Confirmed.
Administrative Access
Platform-level administration sits with Certin. Access requests from new users are approved through the platform’s access-request flow; approval creates the user and sends an invitation. Approval requires a role that passes the admin check — a platform super-admin can approve across organisations.
Testing Access
UAT participants need production-equivalent roles in staging so that a permission difference does not invalidate a test result. Reserved test shipment references are listed in Section 7. Required from Lovehoney.
Customer Access
No end-customer or consumer access is in scope for this phase. Lovehoney’s own customers do not receive Certin logins.
2FA
Two-factor enforcement is an organisation setting, off by default. If enabled for Lovehoney, any user who has not enrolled is blocked from the API with an enrolment-required response. Enrol the two administrators immediately if it is switched on. Confirm whether Lovehoney requires it.
6. Technical Data-Flow and Security Summary
Section 6
Architecture
Lovehoney Excel tracker Carrier tracking provider
(manual export / upload) (Parcel Perform — implemented)
| (Zencargo — undecided, Section 13)
| file upload |
| | HTTPS GET (poll, every 15 min)
| | HTTPS POST (provider-initiated webhook)
v v
+-------------------------------------------------------------+
| C E R T I N |
| |
| Ingestion --> Mapper (PII allowlist) --> Projection |
| | |
| v |
| shipments table |
| (+ quarantine on |
| carrier collision) |
| | |
| +--------------+--------------+--------------+ |
| v v v v |
| Exception Dashboard Alerts / Reporting |
| detection + live feed routing + KPI capture |
+-------------------------------------------------------------+
|
| operator-initiated only (see boundary note below)
v
Driver / carrier contact (WhatsApp, email)
No arrow returns to the Lovehoney tracker or the carrier provider.
What Certin reads from
- Lovehoney’s Excel/CSV tracker, by file upload or connected spreadsheet.
- The carrier tracking provider’s read endpoints, plus provider-initiated webhooks.
What Certin receives
Operational and logistics fields only: identifiers, carrier, status and phase, timing, expected delivery window, service and packaging type, item count, dimensions, weight, linked shipments, tags, and a coarse event history with a city or hub label. A proof-of-delivery URL reference may be received; the document itself is never fetched or stored.
PII explicitly dropped and never persisted
Confirmed and test-enforced. Dropped at the mapper before anything reaches storage: notification emails and phone numbers; recipient, sender, to, from and return addresses and every sub-field including names, company and tax id; recipient identification and signature data; customer name and email on orders; line-item product detail; returns detail; customer ratings and feedback; collection-point addresses; invoice and label documents; commercial values including shipment value, shipping cost and cash-on-delivery; and fine-grained event geolocation including latitude and longitude.
The enforcement is structural, not procedural: the mapper is built field-by-field from an allowlist and never spreads or holds a reference to the raw provider payload, so nothing outside the allowlist can reach storage. Dedicated tests feed fixtures containing every dropped field and assert none survives. No name, email, phone, physical address or commercial value reaches Certin’s database.
How data enters Certin
Two paths. Scheduled polling every 15 minutes per enabled organisation, running on a retrying queue, with a watermark that advances only on complete success so an outage backfills on the next cycle. And provider-initiated webhooks, verified by HMAC-SHA256 over the raw body in constant time, deduplicated by body hash, acknowledged fast and processed asynchronously.
Where data is stored
PostgreSQL. Shipment records in the shared shipments table scoped by organisation; raw ingested records in a per-organisation schema; collision-quarantined records in a dedicated table. Retention follows the platform’s existing organisation-level retention configuration; no pilot-specific retention rule exists.
What Certin processes
Status normalisation, SLA deadline computation, exception detection and severity assessment, risk scoring, alert routing, KPI capture and reporting.
What Certin does not modify
Read-only boundary — operational statement
Certin consumes data from the source systems for monitoring, analysis and workflow purposes. Certin does not create, modify, cancel or delete source-system records.
Specifically: Certin does not write back to the carrier provider. It does not create, update or cancel shipments, bookings or appointments in Lovehoney’s systems. It does not modify Lovehoney’s Excel tracker — the tracker is read as an export and the original file is never written to. It does not send instructions to carriers on Lovehoney’s behalf.
This is enforced structurally for the implemented connector: the provider API client has no POST, PUT, PATCH or DELETE method against any provider resource path, so a write call cannot be introduced by accident. Confirmed in the implementation and its data-boundary document.
The one outbound path, stated plainly
Certin can send messages to a driver or carrier contact — WhatsApp or email — initiated deliberately by a Lovehoney operator from within an exception. It is never automatic, and it does not write to Lovehoney’s or the carrier provider’s systems; it is an outbound message to a contact.
This is disclosed here rather than omitted. A claim of an absolute boundary that a security review then contradicts costs more than stating the exception up front. If Lovehoney wants this disabled for the pilot, it can be feature-flagged off — to be confirmed.
No AI exposure for provider-sourced data
Confirmed and test-enforced. Provider-sourced data never reaches an LLM call site. The ingestion path explicitly skips the inference dual-write for this provider, a behavioural test proves it is never invoked for a real ingest, and a structural scan confirms no connector file references an inference call site.
Credentials, encryption and environment separation
| Control | Implementation | Status |
|---|---|---|
| Credential storage | AES-256-GCM encrypted at rest under a dedicated key per connector family; never plaintext, never reusing another connector’s key. Fails closed if the key is absent. | Confirmed |
| Who can access them | Held server-side and never returned through any user-facing API. No Lovehoney user can read them through the interface. | Confirmed |
| Encryption in transit | HTTPS to all provider endpoints; webhook receiver is HTTPS-only. | Confirmed |
| Database TLS | Server-certificate verification against the managed CA where configured. | Confirmed |
| Tenant isolation | Every query is organisation-scoped. Raw ingested records are held in a per-organisation schema. | Confirmed |
| Environment separation | Staging and production are separate deployments with separate databases and credentials. | Confirmed |
| Webhook authentication | HMAC over the raw body, constant-time comparison. Every rejection returns an identical generic 401, giving no oracle for probing organisation ids or which check failed. | Confirmed |
| Auditability | Exception lifecycle actions record actor and timestamp — acknowledged, assigned and resolved, with resolution category and notes. Ingestion jobs record record counts, rejection reasons and errors. Soft deletion retains records with actor and reason. | Confirmed |
| Per-org enablement | Connector gated behind an organisation setting defaulting to off for every organisation. | Confirmed |
| Provider data residency | Where the provider hosts Lovehoney’s data before Certin reads it. | To be confirmed |
7. UAT Plan
Section 7
Execution-ready. Each scenario needs a reserved shipment reference from Lovehoney before execution. Tests run against synthetic and anonymised data first, then in shadow mode. Evidence is attached to the tracker in Section 8.
UAT-05 and UAT-06 are blocked
Both assert against the business commitment date, which the platform cannot currently store separately from the carrier ETA (Section 2.6). They are written here in full so they are ready to run, but they cannot pass until the schema change in Section 13, item 2 is complete.
Core scenarios
| Test ID | Scenario | Preconditions | Test data | Steps | Expected result | Certin behaviour / pass criteria | Evidence |
|---|---|---|---|---|---|---|---|
| UAT-01 | Normal shipment | Workspace configured; SLA contract loaded for the client/route; connector enabled. | One German domestic shipment, pickup date set, commitment date comfortably ahead, status progresses to delivered on time. | 1. Ingest tracker row. 2. Receive carrier status updates. 3. Progress to delivered. | Shipment visible with correct client, carrier, route and deadline. No exception raised. Marked on time. | Deadline computed from contract transit hours. sla_status stays on_track. actual_delivery recorded. Pass: no exception; on-time flag correct; deadline matches the SLA sheet. | Screenshot of shipment detail; job summary. |
| UAT-02 | Delayed shipment | As UAT-01. | Shipment whose status becomes delayed, or whose deadline passes undelivered. | 1. Ingest. 2. Apply a delayed status or let the deadline approach. 3. Observe the exception queue. | Exception raised with the correct severity; shipment appears in the operator queue; alert routed to the configured recipient. | exception_flag set, exception_type populated, sla_status moves to at_risk within 6h of deadline, approaching within 24h. Pass: exception exists with correct severity and reason; alert delivered to the right recipient. | Exception record; alert log; screenshot. |
| UAT-03 | Cancelled shipment | Shipment already ingested and visible. | The same shipment cancelled at source. | 1. Cancel at source. 2. Re-ingest or await the next sync. 3. Inspect the record and its history. | Shipment marked cancelled. Record retained. Audit history intact. No further exceptions raised. | Status normalises to cancelled. No hard delete. Pass: record present and marked cancelled; history readable; no new exceptions. | Before/after screenshots; audit trail. |
| UAT-04 | Missed collection | Shipment with a scheduled collection. | Collection date passes with no collection event. | 1. Ingest with collection scheduled. 2. Let the collection window pass with no event. 3. Observe. | Exception raised for missed collection; shipment does not silently sit in pending. | Depends on a collection-scheduled signal being present in the feed. Detection rule to be confirmed. Pass: exception raised within the agreed window of the missed collection. | Exception record; timeline. |
| UAT-05 | Fixed appointment | As UAT-01. Blocked — Section 13, item 2. | Shipment with a fixed delivery appointment that differs from the contract-derived transit time. | 1. Ingest with a fixed appointment. 2. Confirm the appointment, not the contract calculation, sets the deadline. 3. Move the appointment. 4. Confirm the deadline follows. | Deadline equals the appointment. Moving the appointment moves the deadline. Carrier ETA displayed separately and does not drive assessment. | Currently fails: where a contract matches, the per-shipment date is discarded and the contract calculation wins. Pass: deadline equals the appointment, before and after the change; ETA visible but not used for assessment. | Screenshot showing both dates; deadline value. |
| UAT-06 | SLA breach | As UAT-01. Blocked — Section 13, item 2. | Shipment delivered after the business commitment date but within the carrier’s revised ETA. | 1. Ingest with a commitment date. 2. Let the carrier revise its ETA past the commitment. 3. Deliver after the commitment. 4. Inspect assessment and exposure. | Breach detected against the commitment, not the carrier ETA. Penalty exposure computed per the contract model. | Currently fails: assessment uses the single stored deadline, and a revised ETA can overwrite it. Pass: breach flagged; exposure matches a hand calculation from the SLA sheet. | Exception record; exposure figure; manual calculation. |
Edge cases
| Test ID | Case | Test data | Expected result | Pass criteria |
|---|---|---|---|---|
| UAT-07 | Missing data | Row with no shipment reference. | Row rejected and counted; reported as "no tracking/waybill/order identifier found". The rest of the file imports. | Rejection visible with reason and count. |
| UAT-08 | Duplicate shipment in file | Same reference twice in one file with different statuses. | Last occurrence wins; earlier counted as a collapsed duplicate. | One shipment; duplicate reported. |
| UAT-09 | Duplicate update | Byte-identical webhook delivered twice. | Exactly one record written. | No duplicate row; no duplicate exception. |
| UAT-10 | Late status update | Update carrying an older source timestamp than the stored version. | Update skipped; reported as older than the stored version. Newer data not overwritten. | Stored values unchanged; skip reported. |
| UAT-11 | Invalid status | Status value outside the agreed vocabulary. | From the carrier feed, mapped to needs_review with the raw value preserved. From the tracker, passed through and not driving SLA logic. | Shipment visible; raw value retrievable; not silently dropped. |
| UAT-12 | Delayed integration update | Provider outage spanning more than one poll cycle. | Watermark not advanced; next successful cycle backfills the whole gap. | No shipments missing after recovery. |
| UAT-13 | Missing event | Webhook exhausts its retries and is dropped. | Poller backfills within the overlap window. | Shipment reaches correct state without the webhook. |
| UAT-14 | Incorrect appointment time | Appointment with a timezone-ambiguous or malformed time. | Invalid date treated as absent; deadline falls back. No silent misinterpretation. | Either correct interpretation or a visible fallback; never a wrong deadline shown as correct. |
| UAT-15 | SLA threshold crossing | Shipment crossing 24h then 6h from its deadline. | Status moves on_track → approaching → at_risk → breached. | Each transition observed at the right time. |
| UAT-16 | Recovery after breach | Breached shipment subsequently delivered. | Delivery recorded; breach history retained, not erased. | Both the breach and the delivery are visible. |
| UAT-17 | Data correction | Corrected row re-issued with a newer source timestamp. | Correction applied; fields not present in the correction are preserved. | Corrected field updated; others unchanged. |
| UAT-18 | Reprocessing | Same file uploaded twice. | Identical records skipped by content hash; no duplicate shipments. | Shipment count unchanged. |
| UAT-19 | API failure | Provider returns 5xx. | Retry with backoff; watermark held; failure recorded against the connection. | No data loss; error visible. |
| UAT-20 | Authentication failure | Invalid or revoked credentials. | Sync fails with a clear error against the connection; watermark not advanced. | Error visible and actionable; no silent stall. |
| UAT-21 | Rate-limit response | Provider returns a throttling response. | Backoff and retry within the governor; no dropped records. | All records eventually ingested. |
| UAT-22 | Carrier collision | Same tracking number arriving under a different carrier. | Record quarantined rather than written; alert raised. Re-polls update without re-alerting. | Original untouched; quarantine row and single alert present. |
| UAT-23 | Tampered webhook | Valid body with an invalid signature. | Rejected before anything is written, with a generic 401. | No record written; no information disclosed about the failure reason. |
8. Issue and Defect Tracker
Section 8
In use from the first UAT run, not created afterwards. Columns below are the tracker’s own; copy directly into the shared sheet.
Classification rules
Applied in order — the first that matches wins. This keeps two people from classifying the same issue differently.
| Category | Rule | Typical owner | Example |
|---|---|---|---|
| Product Bug | Certin behaves differently from its documented behaviour, with correct input data and correct configuration. Reproducible in a clean environment. | Certin engineering | Exception raised at the wrong severity given the configured thresholds. |
| Integration Issue | Data fails to arrive, arrives late, or arrives malformed because of the provider connection — auth, endpoints, rate limits, webhooks, sync. | Certin engineering + provider | Webhook signature rejected; poll returns 404 where records are expected. |
| Data Quality | Data arrives as designed but the content is wrong, missing or inconsistent at source. | Lovehoney | Commitment date blank on 12% of rows; carrier name spelled three ways. |
| Configuration Change | Platform behaves correctly for its current configuration, but the configuration does not match what Lovehoney needs. | Certin implementation | At-risk threshold needs to be 12h rather than 6h for this lane. |
| Security | Anything touching credentials, access control, data exposure or the read-only boundary. Raised at highest severity by default. | Certin engineering | A field on the PII drop list appears in stored data. |
| Access | A user cannot reach something they should, or can reach something they should not. | Certin implementation | Restricted user can resolve an exception. |
| UAT Issue | Defect in the test itself — wrong test data, wrong expected result, unavailable precondition. | Whoever wrote the test | Reserved test shipment was modified mid-test. |
Tie-breaks. Wrong data arriving correctly is Data Quality, not an Integration Issue. Correct data arriving wrongly is an Integration Issue, not a Product Bug. A Product Bug is only a Product Bug once input and configuration are both ruled out. Anything touching the read-only boundary or credentials is Security regardless of what else it looks like.
Severity definitions
| Severity | Definition | Response |
|---|---|---|
| S1 | Blocks the end-to-end test, causes data loss, or breaches the read-only or PII boundary. | Same day; blocks the 28 September gate. |
| S2 | A core scenario produces a wrong result but a workaround exists. | Within 2 working days. |
| S3 | Incorrect behaviour in an edge case, or cosmetic issue with operational impact. | Before go-live where possible. |
| S4 | Cosmetic or improvement suggestion. | Backlog. |
Tracker
| ID | Date raised | Category | Description | Env | Severity | Owner | Status | Expected / Actual | Resolution | Retest |
|---|---|---|---|---|---|---|---|---|---|---|
| LH-001 | 2026-09-21 | Product Bug | Business commitment date cannot be stored separately from carrier ETA; delivered shipments take the ETA column as actual delivery. | All | S1 | Certin eng | Open | Expected: three separate dates, assessment against commitment. Actual: one date field serving three purposes. | Schema plus projection change — Section 13, item 2. | Pending |
| LH-002 | 2026-09-21 | Configuration Change | No genuinely view-only role for restricted Lovehoney users. | All | S2 | Certin eng | Open | Expected: restricted users observe only. Actual: restricted users can act. | Add a role or feature-flag action surfaces — Section 13, item 3. | Pending |
| LH-003 | 2026-09-21 | Integration Issue | Carrier-data provider undecided; Zencargo has no source material while Parcel Perform is built. | All | S1 | Certin + Lovehoney | Open | Expected: one agreed provider with a documented integration. Actual: two candidate providers, one undocumented. | Decision required — Section 13, item 1. | Pending |
9. Lovehoney Platform Walkthrough Plan and Recording Script
Section 9
Built around a Lovehoney operator’s actual working day on German domestic road freight, not a feature tour. Target length 10–12 minutes. The recorder follows the script without improvising structure.
Walkthrough plan
| # | Stage | What is shown | Time | Why it matters to Lovehoney |
|---|---|---|---|---|
| 1 | Shipment enters Certin | Tracker upload and the carrier feed arriving, with the import summary showing rows accepted, rejected and why. | 1:00 | Shows the tracker is still theirs — Certin reads it, does not replace it. |
| 2 | Status becomes visible | Dashboard with the shipment visible, its commitment date and carrier ETA side by side. | 1:00 | The two-date distinction they asked for, visible in one place. |
| 3 | Certin identifies an exception | Live feed and exception queue as a shipment moves to at-risk against its commitment. | 1:30 | The moment that replaces someone noticing in a spreadsheet. |
| 4 | Operator sees the exception | Exception queue sorted by severity; the day’s work in one list. | 1:00 | Replaces checking a portal shipment by shipment. |
| 5 | Operator investigates | Exception detail: shipment history, carrier events, SLA position, contract terms. | 1:30 | Everything needed in one place instead of three systems. |
| 6 | Certin provides context | AI assistant answering a question about the exception, with its answer marked internal. | 1:00 | Faster orientation; clearly separated from customer-facing replies. |
| 7 | SLA risk is surfaced | Deadline, hours remaining, penalty exposure under the contract. | 1:00 | Turns a delay into a number worth acting on. |
| 8 | User takes action | Assign, escalate, or contact the carrier from inside the exception. | 1:30 | Action recorded against the shipment rather than lost in an inbox. |
| 9 | Outcome is recorded | Resolution with category and notes; audit trail showing who did what and when. | 1:00 | Creates the evidence trail that feeds the KPIs. |
| 10 | Reporting and KPI visibility | Dashboard KPIs with period-on-period movement. | 1:30 | Connects daily work to the measures in Section 10. |
Recording script
Before recording
Use anonymised Lovehoney-shaped data on German domestic road, never live customer data. Have one shipment already at-risk against its commitment date, and one delivered on time, prepared in advance. Confirm the two-date display is working — if the Section 13, item 2 work is not complete, re-cut stages 2, 7 and the SLA portion of 5, and say so rather than showing a single date as though it were the commitment.
Stage 1 · Shipment enters Certin
show: imports screen, import summary
"This is your existing tracker — the same export you produce today. Certin reads it; nothing writes back to it. When the file lands you get this summary: rows accepted, rows rejected, and the reason for each rejection. Here, four rows had no shipment reference, so they’re listed rather than silently dropped."
Understand: their process does not change, and nothing disappears without being reported.
Stage 2 · Status becomes visible
show: shipment list, then one shipment detail
"Every shipment from the tracker and the carrier feed in one list. On this shipment you can see both dates: your committed delivery date, and the carrier’s current estimate. They’re held separately, and everything Certin assesses is measured against your commitment, not the carrier’s estimate."
Understand: the distinction they specified is built in, not a reporting afterthought.
Stage 3 · Certin identifies an exception
show: live feed, then the exception appearing
"The carrier has just revised its estimate past your commitment date. Certin has raised an exception — no one had to go looking. This is the gap we measure as Time to Know: from the event happening to it being in front of you."
Understand: detection is automatic, and it is the first KPI in the framework.
Stage 4 · Operator sees the exception
show: exception queue sorted by severity
"This is the morning view. Everything needing attention, most serious first. Instead of opening the portal shipment by shipment, you start from the shipments that have a problem."
Understand: the queue replaces manual checking — the Manual-Checking Requirements KPI.
Stage 5 · Operator investigates
show: exception detail, history, SLA panel
"Opening the exception gives you the shipment’s full history, the carrier’s events, where it sits against your commitment, and the contract terms that apply. This is the information you’d currently gather from the tracker, the portal and an email thread."
Understand: one place instead of three — the Duplicate-Entry Hours KPI.
Stage 6 · Certin provides context
show: AI assistant, one question and answer
"You can ask about the shipment directly. Ask what’s driving the risk here — the answer draws on this shipment’s own data. Note the internal marker: this is a working note for your team, not a message to anyone outside it."
Understand: faster orientation, with no risk of an internal note reaching a customer.
Stage 7 · SLA risk is surfaced
show: deadline, hours remaining, exposure figure
"Certin puts a number on it: hours remaining against your commitment, and the exposure under the contract terms if it breaches. That’s what tells you whether this one is worth a phone call."
Understand: prioritisation by cost, not just by lateness.
Stage 8 · User takes action
show: assign, then escalate or contact
"From here you assign it, escalate it, or contact the carrier — without leaving the shipment. Every action is recorded against it, so the next person sees what’s already been done."
Understand: action and context stay together; nothing lives only in someone’s inbox.
Stage 9 · Outcome is recorded
show: resolution with category, then audit trail
"When it’s closed you record what actually happened and categorise it. That category matters — it’s how we measure whether Certin’s assessment was right, and it’s what builds the picture of what’s really going wrong on this lane."
Understand: the resolution step is what makes Assessment Accuracy measurable. If operators skip it, that KPI degrades silently.
Stage 10 · Reporting and KPI visibility
show: dashboard KPIs with movement
"These are the measures in your framework, moving against the previous period. During the pilot Certin runs alongside your existing process — we’re establishing the baseline, not replacing anything yet."
Understand: shadow mode is deliberate, and early numbers are a baseline rather than a verdict.
10. Lovehoney KPI Measurement Framework
Section 10 · customer-facing
Written for Lovehoney stakeholders. Where a measure depends on something Lovehoney must provide, that is stated in the row rather than assumed.
No signed agreement was available
The signed agreement was not accessible when this was prepared. Definitions below are derived from the deliverables request wording and from what the platform can actually measure. Every one must be checked line by line against the agreement before this section is sent to Lovehoney, and any target stated there replaces the placeholder here.
One target does exist in the implementation: automated coverage carries a 90% target marked "to be confirmed" in the connector’s KPI acceptance fixture. It is recorded below as found, not as agreed.
| KPI | Definition | Required data | Calculation method | Frequency | Day 0 baseline | Target / reference | Notes | |
|---|---|---|---|---|---|---|---|---|
| Time to Know | Time from a problem occurring to it being visible to a Lovehoney operator. Clock starts at the carrier event timestamp for the underlying event. Clock stops when Certin raises the exception. | Carrier event timestamp; Certin exception raised timestamp. | Median and 90th percentile of (exception raised − event occurred), all exceptions in period. | Weekly, monthly roll-up | Lovehoney’s current time from event to awareness. Required | To be agreed / established after Day 0 baseline | Report both figures; the median the tail. | |
| Time to Act | Time from an exception becoming visible to an operator acting on it. Clock starts when the exception is raised. Clock stops at the first recorded action — acknowledge, assign or resolve. | Exception raised timestamp; first acknowledged/assigned/resol ved timestamp. | Median of (first action − raised), segmented by severity. | Weekly | Platform-observed from the first full week. Nothing required from Lovehoney. | To be agreed / established after Day 0 baseline | Expect high readings during sha when operators are not yet wor the queue. Label those weeks. | d k |
| Operator Hours | Staff hours spent monitoring shipment status and chasing exceptions on German domestic road freight. | Lovehoney headcount and hours allocated, before and after. | Reported hours per week against the Day 0 figure, as a percentage change. | Monthly | Lovehoney-supplied and mandatory. Not observable by the platform. | To be agreed / established after Day 0 baseline | Must be agreed in writing befor the measure cannot be reported | e |
| Automated Status Coverage | Share of shipments carrying a recent automated status update, with no person having fetched it. | Count of active shipments; count with a checkpoint received in the last 24 hours. | (shipments with a checkpoint in 24h ÷ active shipments) × 100. Already computed by the platform as its visibility score. | Daily, weekly average | Measured on the first day of live data. | 90% — recorded in the implementation as "to be confirmed" | Capped by which Lovehoney car provider has onboarded — an o question. Expect a low first read refresh runs at target frequency. | p |
| Exceptions Detected by Certin vs Manually | Split between exceptions first surfaced by Certin and those first raised by a person. | Exception origin per record — system-generated or operator-created. | Count and percentage by origin. | Weekly | 100% manual by definition. | To be agreed / established after Day 0 baseline | Requires operator-raised except logged in Certin. Anything handl phone or email is invisible and o Certin’s share. Shadow mode is is cleanest. | i w |
| Assessment Accuracy | Share of Certin’s assessments — severity, risk, predicted impact — that operators confirm as correct at closure. A correct assessment is one where the recorded resolution matches what Certin predicted. | Certin’s assessment at raising; the operator’s recorded resolution category at closure. | (confirmed correct ÷ total assessed) × 100, segmented by severity. | Monthly | Not applicable — no prior equivalent exists. | To be agreed / established after Day 0 baseline | Depends on operators recording resolution category. If that step the measure degrades silently — the walkthrough. | i |
| Alert Precision | Share of alerts that represented a real problem needing action. A true positive is an alert closed with a real underlying issue; a false positive is one rejected or closed as no action needed. | Total alerts raised; alerts rejected or closed as no action needed, with reason. | ((raised − false positives) ÷ raised) × 100. | Weekly during UAT and month one, monthly after | Measured from the first week of live alerting. | To be agreed / established after Day 0 baseline | The rejection reason is what ma actionable. Report with recall w possible — precision alone impr raising fewer alerts. | h o |
| Manual-Checking Requirements | Number of shipments per day still needing a person to look somewhere other than Certin — portal, email or carrier — to establish status. | Count of active shipments with no recent automated status; Lovehoney’s count of manual checks. | Daily count of shipments with no checkpoint in 24 hours, cross-checked against operator-reported checks. | Weekly | Lovehoney-supplied: current manual checks per day. | To be agreed / established after Day 0 baseline | The inverse of Automated Statu Report the two together. | s |
| Duplicate-Entry Hours | Staff hours spent re-keying the same shipment information into more than one system — currently the Excel tracker, the portal and email. | Inventory of systems receiving the same data, and hours maintaining each. | Reported hours per week against the Day 0 figure. | Monthly | Lovehoney-supplied and mandatory. | To be agreed / established after Day 0 baseline | Read-only shadow mode cannot reduce this. Set expectations ab should move. | o |
| Demurrage Exposure | Charges arising where goods or equipment are held beyond agreed free time. | Free-time allowance and daily rate; actual charges invoiced. | (days beyond free time × daily rate), summed. | Monthly, aligned to invoicing | 12 months of historical charges. Required | To be agreed / established after Day 0 baseline | Scope check: demurrage is cont port terminology and may not a German domestic road at all. Co before including — an always-ze | a p |
| in a customer framework invites question. | ||||||||
| Detention Exposure | Charges arising where a vehicle or driver is held beyond agreed loading or unloading time. | Free-time allowance per stop and hourly or daily waiting rate; actual charges invoiced; recorded arrival and departure times. | (time beyond free time × rate), summed. | Monthly | 12 months of historical charges. Required | To be agreed / established after Day 0 baseline | More likely than demurrage to b this lane. Depends on arrival an times being present in the feed confirmed. | d — |
| Redelivery Exposure | Charges arising where a delivery fails and a further attempt is required. | Failed-delivery and redelivery fees; count of failed attempts. | (failed attempts × applicable fee), summed. Avoided cost computed over shipments where an operator acted before the failure, reported as a clearly labelled estimate. | Monthly | 12 months of historical charges. Required | To be agreed / established after Day 0 baseline | Most directly relevant of the thr domestic road. Avoided cost is a counterfactual and must be labe estimate. | |
| Predictive Performance | How often a predicted delay or breach actually occurred, and how much warning it gave. | Prediction, its timestamp and stated confidence; the eventual actual outcome. | Precision = correct predictions ÷ all predictions. Recall = predicted problems ÷ all actual problems. Lead time = median (event − prediction). False positives and negatives reported alongside. | Monthly, once volume supports it | Not applicable at go-live. | To be agreed / established after Day 0 baseline | Include only where the capabilit support it. With a single lane at volume this is the measure mos asked about early and least able Agree the volume threshold in a | m t |
11. Day 0 Baseline Requirements
Section 11
A baseline cannot be reconstructed after the fact. Everything below must be captured on or before 29 September, and platform-side capture must be verified as running before the first live data arrives.
| Baseline | Data source | Owner | Measurement period | Sample size | Capture method |
|---|---|---|---|---|---|
| Source data snapshot | Lovehoney Excel tracker | Lovehoney | Point-in-time at Day 0 | All open German domestic shipments | Single export retained unmodified as the reference copy. |
| Current shipment volumes | Historical tracker export | Lovehoney | 12 months, 90 days minimum | Full population | Shipments per week and per month on the lane, from the historical export. |
| Current status coverage | Certin, first day of live data | Certin | First 24 hours, then first full week | All active shipments | Platform visibility score. Expect a low first reading until refresh reaches target frequency. |
| Current exception volumes | Historical export + Lovehoney records | Both | 90 days minimum | Full population | Count of delayed, failed and cancelled shipments; plus Lovehoney’s own count of issues handled outside any system. |
| Current operator effort | Lovehoney declaration | Lovehoney | Typical week | All operators on the lane | Headcount × hours on monitoring and chasing. Written statement, agreed before go-live. |
| Existing manual checks | Lovehoney declaration | Lovehoney | Typical week | — | Count of shipments per day requiring a portal, phone or email check. |
| Existing duplicate entry | Lovehoney declaration | Lovehoney | Typical week | — | Systems receiving the same data, and hours maintaining each. Scope the system list precisely. |
| Existing SLA breaches | Historical export + SLA sheet | Both | 12 months, 90 days minimum | Full population | Recomputed against contract terms. Requires historical commitment dates, not just carrier ETAs. Dependency. |
| Existing demurrage exposure | Lovehoney invoices | Lovehoney | 12 months | All charges | Charges invoiced. Confirm first whether demurrage applies to this lane at all. |
| Existing detention exposure | Lovehoney invoices | Lovehoney | 12 months | All charges | Waiting and detention charges by carrier, with the rate card. |
| Existing redelivery exposure | Lovehoney invoices | Lovehoney | 12 months | All charges | Failed-delivery and redelivery fees, with count of failed attempts. |
| Existing predictive process | Lovehoney declaration | Lovehoney | Point-in-time | — | Whether any forecasting exists today. If none, state so — the baseline is then explicitly "none" rather than blank. |
| Platform snapshot capture | Certin | Certin | From Day 0, hourly | — | Verify periodic KPI snapshot capture is running against the Lovehoney organisation before first live data. Cannot be backfilled. |
12. Consolidated Engineering Requirements from Lovehoney
Section 12
The single request to send. Items already requested on the call are restated as outstanding rather than re-asked. Nothing here asks for anything Engineering can obtain itself.
Required Before Configuration
| Requirement | Why Engineering needs it | Owner | Format / access required | Blocking stage | Status |
|---|---|---|---|---|---|
| Anonymised shipment tracker sample | Validates the schema, identifies the permanent key, exposes date and status formats, and surfaces edge cases synthetic data will not produce. | Lovehoney | .xlsx or .csv, minimum 200 rows, covering normal, delayed, cancelled and fixed-date shipments, real column structure, values may be anonymised. | Configuration | Requested on call — outstanding |
| Tracker column definitions | Mapping is by literal header string. Without exact headers the mapping template cannot be completed. | Lovehoney | Data dictionary: header text exactly as exported, data type, example value, and whether always populated. | Configuration | Required |
| Primary Lovehoney shipment reference | Becomes the upsert key. Rows without it are rejected; an unstable one silently creates duplicates. | Lovehoney | Written confirmation of which column it is, that it is unique, and that it is stable for the shipment’s whole life. | Configuration | Requested on call — outstanding |
| Business commitment date definition | Exceptions are assessed against this date. It drives every detection, the SLA-breach and fixed-appointment scenarios, and every on-time measure. | Lovehoney | Column name, how the value is set, whether it can change after booking, and its relationship to the carrier’s expected date. | Configuration | Required — highest priority |
| Carrier expected delivery date column | Must be stored separately from the commitment date so a carrier’s revised estimate cannot move the assessment baseline. | Lovehoney | Column name, and whether the value arrives via the tracker, the carrier system, or both. | Configuration | Required |
| Actual delivery timestamp column | Required for every on-time measure. Without a distinct column, on-time rate compares a forecast against itself. | Lovehoney | Column name and format; confirmation it is populated only on actual delivery. | Configuration | Required |
| SLA and transit-time sheet | Delivery deadlines are derived from contract terms, never from a date in the shipment file. No contract means no deadline and no breach detection. | Lovehoney | Table per client and route: maximum delivery hours, penalty model (per hour or per breach), rate, any cap, valid-from and valid-until dates. | Configuration | Requested on call — outstanding |
| Status vocabulary and definitions | Values outside the canonical set pass through unchanged and do not drive SLA or exception logic. | Lovehoney | Complete list of every status the tracker and carrier feed can emit, each mapped to one of: pending, in | Configuration | Required |
| transit, delayed, delivered, cancelled, return, needs review. | |||||
| Event definitions | Determines which operational events are available to drive detection, particularly missed collection and appointment changes. | Lovehoney | List of events the tracker or carrier feed produces, with the field that carries each and its timestamp. | Configuration | Required |
| Cancellation representation | If cancelled rows are deleted from the tracker rather than flagged, cancellation cannot be detected from the file at all. | Lovehoney | Written statement: status change, separate flag, or row removal. | Configuration | Required |
| Fixed-appointment representation | A fixed appointment must override the contract-derived deadline rather than being treated as a standard commitment. | Lovehoney | Written statement of how an appointment is recorded, plus the booking reference field if one exists. | Configuration | Required |
| Date, time and timezone conventions | Ambiguous day/month ordering silently corrupts every deadline and every duration measure. | Lovehoney | Written statement: format per date column, timezone each is expressed in, and how CET/CEST is handled across the October change. | Configuration | Required |
| Germany domestic lane definition | Determines the scope filter so out-of-lane shipments in the same tracker do not enter the workspace. | Lovehoney | Written statement of in-scope origin and destination coverage, and whether cross-border movements appear in the same export. | Configuration | Required |
| Carrier master data | Carrier names resolve or create carrier records. Spelling variants fragment a single carrier into several. | Lovehoney | List of carriers used on German domestic road, named exactly as they appear in the tracker, with any known alternate spellings. | Configuration | Required |
| Client naming convention | SLA contracts resolve on an exact normalised client name. Any variation between sources produces different deadlines for the same shipment. | Lovehoney | The canonical spelling, and any variants appearing across the tracker and carrier system. | Configuration | Required |
| Carrier-system organisation access | Certin cannot poll the carrier feed without credentials scoped to Lovehoney’s own account. | Lovehoney | Read-only API credentials for the agreed carrier tracking environment, the organisation or tenant identifier, and the authentication mechanism the account uses — delivered through a secure channel, not email. | Configuration | Coordination contact requested on call — credentials outstanding |
| Reference correspondence | Without it, tracker rows and carrier records cannot be reconciled and the reconciliation stage of the end-to-end test cannot be built. | Lovehoney | Written statement of which carrier-system field carries the Lovehoney shipment reference. | Configuration | Required |
| Exception business rules | Determines what Certin raises, at what severity, and to whom — the severity assessment and routing stages. | Lovehoney | Table of conditions to severity (three levels available), and the notification recipient for each. | Configuration | Required |
| Administrator and user details | Accounts must exist before configuration can be validated or training delivered. | Lovehoney | Name, email and intended function for the two administrators and for each restricted user. | Configuration | Requested on call — outstanding |
| Security approval of the read-only boundary | Credentials should not be issued before the architecture is accepted. | Lovehoney — security or IT owner | Written approval of Section 6, confirmation of acceptable data residency for EU shipment data, and confirmation of whether a data-processing agreement must be executed first. Approver not yet identified. | Configuration | Required |
Required Before Live Testing
| Requirement | Why Engineering needs it | Owner | Format / access required | Blocking stage | Status |
|---|---|---|---|---|---|
| Historical shipment data | Every Day 0 baseline is computed from it. Without history the first weeks report no comparison and the gap cannot be filled later. | Lovehoney | Bulk export, 12 months where available and 90 days minimum, German domestic road, same columns as the live tracker. Must include historical commitment dates and actual delivery timestamps, not only carrier ETAs. | Live testing / baseline | Required |
| Reserved test shipments | UAT scenarios need stable references that will not be altered mid-test. | Lovehoney | Six shipment references — one each for normal, delayed, cancelled, missed collection, fixed appointment and SLA breach — with written agreement not to modify them during UAT. | Live testing | Required |
| Baseline operating measures | Operator Hours, Manual-Checking Requirements and Duplicate-Entry Hours measure a reduction and are unreportable without a starting figure. The platform cannot observe these. | Lovehoney | Written statement: operator headcount on shipment monitoring, hours per shift, how status checking is performed today, and which systems receive the same data more than once. | Live testing / baseline | Required |
| Charge rate card | Exposure KPIs report counts rather than currency without rates. | Lovehoney | Redelivery and failed-delivery fees; driver waiting or detention rates and free-time allowances; and confirmation of whether demurrage applies to German domestic road at all. | Live testing / baseline | Required |
| Historical charge data | Establishes the Day 0 exposure baselines. | Lovehoney | 12 months of invoiced demurrage, detention and redelivery charges on the lane. | Baseline | Required |
| Escalation contacts | Routing has no destination without a recipient holding a role that can receive escalations. | Lovehoney | Named list with email and, where in scope, mobile, mapped to severity level. | Live testing | Required |
| UAT participants and availability | The 28 September gate needs named testers with time booked. | Lovehoney | Named list with availability in the week to 28 September, and the environment each needs access to. | Live testing | Required |
| Carrier-system webhook registration | Push updates cannot be received until the receiver URL is registered in the provider portal, which Certin cannot do on Lovehoney’s behalf. | Lovehoney | Registration performed in the provider portal using the receiver URL and organisation identifier Certin supplies, plus the portal-generated authentication key returned securely. | Live testing | Required |
| Carrier-system test access | Cancellation and failure scenarios are safer to exercise outside production. | Lovehoney | Sandbox or non-production organisation credentials if one exists. If not, written confirmation that read-only production access is acceptable for shadow-mode testing. | Live testing | To be confirmed |
| Provider account API version | Changes the payload shape and therefore the mapper and its test fixtures. | Lovehoney / provider account team | Written confirmation of which API version Lovehoney’s account is on. | Live testing | To be confirmed |
| Carrier onboarding coverage | Directly caps Automated Status Coverage. The KPI cannot be interpreted without knowing the ceiling. | Lovehoney / provider account team | List of which Lovehoney road carriers the tracking provider has onboarded. | Live testing / baseline | To be confirmed |
| Network allowlisting | An IP restriction would block polling entirely and would present as an authentication failure. | Lovehoney | Confirmation of whether the carrier system restricts callers by IP; if so, permit Certin’s egress addresses. | Live testing | To be confirmed |
| 2FA policy | If enforced, any user who has not enrolled is blocked at the API, which presents as a broken login during UAT. | Lovehoney | Confirmation of whether two-factor authentication is required for the Lovehoney organisation. | Live testing | To be confirmed |
Useful but Non-Blocking
| Requirement | Why Engineering needs it | Owner | Format / access required | Blocking stage | Status |
|---|---|---|---|---|---|
| Carrier contact directory | Lets an operator chase a carrier from inside the exception rather than leaving the platform. | Lovehoney | Contact list per carrier: name, email, phone. | None | Non-blocking |
| Existing KPI reports | Lets Certin reconcile its figures against Lovehoney’s and explain divergence before it is raised as a defect. | Lovehoney | Two or three recent sample reports in any format. | None | Non-blocking |
| Historical incident log | Improves predictive accuracy and lets thresholds be tuned to actual failure patterns rather than generic defaults. | Lovehoney | Export or written summary of recurring issues on the lane. | None | Non-blocking |
| Email exception samples | Email is part of the current workflow. Samples show what operators are told today so Certin’s notifications read as recognisable. | Lovehoney | Anonymised samples of typical exception emails. | None | Non-blocking |
| Appointment booking references | Allows fixed-appointment deliveries to be represented precisely rather than as a standard window. | Lovehoney | Field definition and example values. | None | Non-blocking |
| Brand assets | For customer-facing exports and reports. | Lovehoney | Logo files and colour palette. | None | Non-blocking |
| Out-of-scope module list | Lets irrelevant features be hidden by configuration so the workspace reflects the agreed scope. | Lovehoney | Confirmation of which platform areas should be hidden for this phase. | None | Non-blocking |
13. Blockers and Open Dependencies
Section 13
| # | Item | Dependency | Impact | Owner | Required by | Status | Action |
|---|---|---|---|---|---|---|---|
| 1 | Carrier-data provider undecided | The request specifies Zencargo. No Zencargo material exists anywhere. A Parcel Perform connector is built and documented as "for the Lovehoney pilot". | Section 4 cannot be completed for Zencargo. If Zencargo is the answer, the integration is at design stage, not build stage, and 28 September is at risk. If Parcel Perform is the answer, most of the integration is done. | Engineering lead + Lovehoney | Today | Urgent | Confirm which provider is in scope, and whether both are. If Zencargo, obtain the API documentation today and re-plan the timeline. |
| 2 | Commitment date cannot be stored | One date field serves carrier ETA, promised date and actual delivery. No business commitment field exists. Contract-derived deadlines discard per-shipment dates. | Blocks UAT-05 and UAT-06, the SLA-breach and fixed-appointment scenarios, and stages 4 and 5 of the end-to-end chain. Every on-time and breach measure is computed against the wrong value until fixed. | Certin engineering | Today (scope) / 25 Sep (build) | Urgent | Scope and assign today: schema addition, three separated field mappings, commitment-date precedence over the contract calculation. |
| 3 | No view-only role | The most restricted role still reaches four modules and can send messages. | Section 5 cannot be issued to Lovehoney as written. Restricted users would be able to act rather than observe, contradicting the agreed access model. | Certin engineering | 24 Sep | Open | Decide: add a view-only role, or feature-flag the action surfaces for this workspace and describe that arrangement. |
| 4 | Day 0 baseline capture not verified | Periodic KPI snapshot capture must be running against the Lovehoney organisation before the first live data. | If it starts late, the first weeks report no comparison and the gap cannot be backfilled. Affects every trend-based KPI. | Certin engineering | 29 Sep, before first data | Open | Verify capture is active for the organisation as a go-live gate. |
| 5 | Signed agreement not available | Section 10 was written from the deliverables request, not from the agreement. | KPI definitions and any committed targets may differ from what is contractually agreed. The section is customer-facing. | Engineering lead | Before sending Section 10 | Open | Obtain the agreement and reconcile Section 10 line by line before it goes to Lovehoney. |
| 6 | Cancellation may be undetectable | Nothing detects a shipment disappearing from a source file. | If the tracker drops cancelled rows rather than flagging them, UAT-03 fails and cancellations are never seen. | Lovehoney | 24 Sep | Open | Confirm how cancellation appears in the tracker. If rows are deleted, decide between a reconciliation sweep and a documented limitation. |
| 7 | Fixed at-risk thresholds | At-risk and approaching thresholds are fixed platform-wide at 6 and 24 hours. | If German domestic road warrants different windows, this needs development before go-live. | Certin engineering | 25 Sep | To be confirmed | Confirm the thresholds with Lovehoney. Only build configurability if they differ. |
| 8 | New status values not in reporting buckets | return and needs_review are not present in the analytics status buckets every reporting consumer reads. | Shipments in these states are excluded from bucket metrics, understating Automated Status Coverage and problem counts. | Certin engineering | 25 Sep | Open | Add both values to the shared bucket definitions before KPI reporting is relied on. |
| 9 | Cross-source field authority | Where a shipment arrives from both the tracker and the carrier feed, per-field precedence cannot be declared. | Destructive cases are already prevented and out-of-order updates are rejected where both sources carry timestamps. What remains is that the likely intent — tracker owns the commitment date, carrier owns status and ETA — is assumed rather than encoded. | Certin engineering | 25 Sep | Open | Confirm the precedence with Lovehoney and encode it, or sequence the feeds so only one writes each field. |
| 10 | No admin surface for connector setup | Enabling the connector and setting its credentials are direct database operations; no UI or API exists. | Onboarding needs an engineer. Not a blocker for one pilot customer, but it is a single point of dependency during the go-live window. | Certin engineering | 29 Sep | Accepted for pilot | Accept for the pilot; record as roadmap work before a second customer. |
14. Submission Readiness Check
Section 14
| Requested deliverable | Section | Complete? | Qualification |
|---|---|---|---|
| Technical onboarding checklist | Section 1 | Yes | Nine categories; each item marked blocking or not, with the stage it blocks. |
| Data-intake specification | Section 2 | Yes | Complete against the current implementation. The date-field conflict is documented rather than worked around. |
| Excel-to-Certin mapping template | Section 3 | Yes — provisional | Template complete and copyable. Column A cannot be filled until the tracker sample arrives. |
| Zencargo integration checklist | Section 4 | Partial — blocked | Structure complete; all Zencargo specifics pending documentation that does not exist in any available material. Parcel Perform documented in full as the implemented alternative. See Section 13, item 1. |
| User access and permissions guide | Section 5 | Yes | Uses the real nine-role model. The absence of a view-only role is flagged, not papered over. |
| Technical data-flow and security summary | Section 6 | Yes | Read-only boundary stated operationally and confirmed against the implementation. The one outbound path is disclosed. |
| UAT plan | Section 7 | Yes | Six core scenarios and seventeen edge cases, execution-ready. UAT-05 and UAT-06 are written but blocked on Section 13, item 2. |
| Issue and defect tracker | Section 8 | Yes | Ready to use, with classification rules, tie-breaks, severity definitions and three issues already logged. |
| Platform walkthrough and recording script | Section 9 | Yes | Ten stages with timings, and a spoken script per stage. |
| Lovehoney KPI Measurement Framework | Section 10 | Yes — pending agreement check | All thirteen measures covered with definition, required data, calculation, frequency and Day 0 baseline. Targets marked to be agreed because the signed agreement was not available. |
| Day 0 baseline requirements | Section 11 | Yes | Thirteen baselines with source, owner, period, sample size and capture method. |
| Consolidated Engineering Requirements from Lovehoney | Section 12 | Yes | Three tiers exactly as specified. Each item states the format required. Nothing obtainable by Engineering is asked of Lovehoney. |
| Blockers and open dependencies | Section 13 | Yes | Ten items; two marked urgent for today. |
Two items require a decision today
Section 13, item 1 — the carrier-data provider is undecided, and the request names a provider for which no material exists. Section 13, item 2 — the business commitment date cannot currently be stored, which blocks two UAT scenarios and two stages of the end-to-end chain due 28 September.
Prepared 21 September 2026. Sections 4, 10 and 12 carry explicit dependencies on material not available at the time of writing — the Zencargo API documentation, the signed agreement, and the anonymised tracker sample. These are identified in place rather than filled with assumptions.
Open Questions
These are the questions Certin needs Lovehoney to answer, grouped by when each answer is needed. Type each answer in the box under the question, then select Save at the top and send the saved file back to Certin.