Operations API
Lean and OpEx operational modules — Kaizen, Gemba, PDCA, DCM, Shift Handovers, Mood, and Problem Solving.
Operations API
ProBeya provides a comprehensive suite of operational excellence modules that digitalize the behavioral routines and management infrastructure pharma transformation programs depend on. All procedures are scoped to the caller’s organization via orgProcedure for multi-tenant isolation.
Quick Start: Recording a Gemba Observation and Creating a CAPA
Kaizen (Continuous Improvement)
Empowers all team members to submit incremental improvement ideas, tracked through a Kanban-style lifecycle with impact quantification and structured evaluation.
Router: kaizen
Statuses: submitted > under_review > approved > in_progress > implemented | rejected
Categories: safety, quality, cost, delivery, people, environment, productivity, other
Procedures
| Procedure | Type | Description |
|---|---|---|
kaizen.submit | Mutation | Submit a new improvement idea |
kaizen.review | Mutation | Approve or reject an idea (with reviewer tracking) |
kaizen.implement | Mutation | Mark as implemented (with actual impact data) |
kaizen.update | Mutation | Update an existing idea |
kaizen.delete | Mutation | Delete a Kaizen idea |
kaizen.evaluate | Mutation | Submit a structured evaluation (scores + recommendation) |
kaizen.recordResults | Mutation | Record before/after KPI values and actual savings |
kaizen.getById | Query | Get a single idea with full details |
kaizen.list | Query | List ideas with filters (board, status, category) |
kaizen.getStats | Query | Aggregate statistics (counts, impact totals, top categories) |
Example: Submitting a Kaizen Idea
Response:
{
"data": {
"id": "clx9ki010",
"title": "Reduce changeover time on Filling Line 1 by pre-staging components",
"status": "submitted",
"category": "delivery",
"boardId": "clx9bd001",
"submittedById": "clx9us005",
"estimatedImpact": {
"type": "time_savings",
"value": 4.5,
"unit": "hours/week"
},
"createdAt": "2026-04-13T09:00:00.000Z"
}
}
Gemba Walks (Go-and-See)
Structured observation routes for leadership walk-throughs. Gemba walks capture observations at checkpoints and can generate actions directly from findings.
Router: gemba
Observation types: positive (good practice), concern (safety/quality issue), improvement (opportunity)
Procedures
| Procedure | Type | Description |
|---|---|---|
gemba.createWalk | Mutation | Create a walk route template with areas and checkpoints |
gemba.listWalks | Query | List walk routes for a board |
gemba.getWalkById | Query | Get a walk with all its observations |
gemba.addObservation | Mutation | Log an observation during a walk |
gemba.listObservations | Query | List observations for a walk |
gemba.createActionFromObservation | Mutation | Create an action linked to an observation |
Example: Creating a Walk Route
const walk = await trpc.gemba.createWalk.mutate({
boardId: "clx9bd001",
name: "Weekly Quality Walk — Sterile Manufacturing",
areas: [
{
id: "gowning",
areaName: "Gowning Room",
checkpoints: [
"Differential pressure gauges within spec (>15 Pa)",
"Gowning procedure posters up to date",
"Particle counter calibration sticker current",
],
},
{
id: "filling",
areaName: "Filling Suite A",
checkpoints: [
"Environmental monitoring plates placed correctly",
"Equipment logbook entries complete",
"No open deviations on the area board",
],
},
{
id: "packaging",
areaName: "Secondary Packaging",
checkpoints: [
"Line clearance verified",
"Batch labels match production order",
"Reject bin locked and tagged",
],
},
],
});
Response:
{
"data": {
"id": "clx9gw002",
"name": "Weekly Quality Walk — Sterile Manufacturing",
"boardId": "clx9bd001",
"areas": [
{ "id": "gowning", "areaName": "Gowning Room", "checkpoints": ["..."] },
{ "id": "filling", "areaName": "Filling Suite A", "checkpoints": ["..."] },
{ "id": "packaging", "areaName": "Secondary Packaging", "checkpoints": ["..."] }
],
"createdAt": "2026-04-13T07:00:00.000Z"
}
}
PDCA (Plan-Do-Check-Act)
Structured Deming cycle management for continuous improvement projects. Phases progress linearly with no skipping or reversal.
Router: pdca
Phase order: plan > do > check > act > completed
Procedures
| Procedure | Type | Description |
|---|---|---|
pdca.create | Mutation | Create a new PDCA cycle (starts in plan phase) |
pdca.update | Mutation | Update an existing cycle |
pdca.delete | Mutation | Delete a PDCA cycle |
pdca.getById | Query | Get a single cycle with full details |
pdca.list | Query | List cycles with optional phase and board filters |
pdca.advancePhase | Mutation | Move to the next phase |
pdca.linkActions | Mutation | Associate action item IDs with this cycle |
Example: Full PDCA Cycle
// Plan: Define the improvement
const cycle = await trpc.pdca.create.mutate({
boardId: "clx9bd001",
title: "Reduce batch failure rate on Line 2 from 3.2% to <1%",
planDescription: "Root cause analysis identified temperature control as primary factor. Plan: install redundant RTD sensor and tighten PID parameters.",
});
// Do: Implement changes, record results
await trpc.pdca.update.mutate({
id: cycle.id,
doDescription: "Installed redundant RTD sensor on 2026-04-10. PID parameters adjusted: P=2.1, I=0.4, D=0.08. 5 test batches produced.",
});
await trpc.pdca.advancePhase.mutate({ id: cycle.id });
// Check: Verify results
await trpc.pdca.update.mutate({
id: cycle.id,
checkDescription: "Test batches: 0/5 failures. Temperature excursions reduced from 12/week to 0. Statistical confidence 95%.",
});
await trpc.pdca.advancePhase.mutate({ id: cycle.id });
// Act: Standardize the change
await trpc.pdca.update.mutate({
id: cycle.id,
actDescription: "SOP-MFG-042 updated with new PID parameters. Training completed for all operators. Change control CC-2026-0089 approved.",
});
await trpc.pdca.advancePhase.mutate({ id: cycle.id });
// Status is now "completed"
DCM (Daily Capacity Management)
Visual time-grid boards for daily resource and task planning. Resources are assigned tasks within configurable time slots for capacity optimization.
Router: dcm
Procedures
| Procedure | Type | Description |
|---|---|---|
dcm.createBoard | Mutation | Create a new DCM board |
dcm.getBoard | Query | Get a DCM board with resources and tasks |
dcm.updateBoard | Mutation | Update board settings |
dcm.deleteBoard | Mutation | Delete a DCM board |
dcm.listBoards | Query | List DCM boards for a parent board |
dcm.addResource | Mutation | Add a resource to the board |
dcm.updateResource | Mutation | Update resource details |
dcm.removeResource | Mutation | Remove a resource |
dcm.addTask | Mutation | Add a task to a time slot |
dcm.moveTask | Mutation | Move a task to a different slot/resource |
dcm.updateTask | Mutation | Update task details |
dcm.removeTask | Mutation | Remove a task |
dcm.listCatalogTasks | Query | List task catalog entries |
dcm.createCatalogTask | Mutation | Create a reusable task template |
dcm.updateCatalogTask | Mutation | Update a catalog task |
dcm.getUtilization | Query | Get resource utilization analytics |
Shift Handovers
Structured shift-to-shift communication documents with auto-compilation, health scoring (0-100), and analytics. Critical for 24/7 pharma manufacturing operations.
Router: shiftHandovers
Shift types: morning, afternoon, night
Statuses: draft > submitted > acknowledged
Procedures
| Procedure | Type | Description |
|---|---|---|
shiftHandovers.create | Mutation | Create a handover document (status: draft) |
shiftHandovers.update | Mutation | Update a handover (draft only) |
shiftHandovers.submit | Mutation | Lock editing and submit handover |
shiftHandovers.acknowledge | Mutation | Incoming shift acknowledges receipt |
shiftHandovers.list | Query | List handovers for a board |
shiftHandovers.getLatest | Query | Get the most recent handover |
shiftHandovers.refreshCompilation | Mutation | Re-run auto-compilation for a draft |
shiftHandovers.getHealthScoreTrend | Query | Weekly avg health score (12 weeks) |
shiftHandovers.getWorstPerformingShifts | Query | Bottom 5 shifts by health score |
shiftHandovers.getCarryForwardTopItems | Query | Most frequent carry-forward items |
shiftHandovers.getAcknowledgmentTimeDistribution | Query | Ack time histogram |
shiftHandovers.getCompletionRate | Query | Weekly submission/ack rates |
Example: Shift Handover Workflow
// Outgoing shift lead creates the handover
const handover = await trpc.shiftHandovers.create.mutate({
boardId: "clx9bd001",
shiftType: "morning",
shiftDate: "2026-04-13",
items: [
{
category: "production",
priority: "high",
description: "Batch BX-4473 filling in progress — expected completion 16:00. Monitor temperature sensor 3 (drifting).",
},
{
category: "equipment",
priority: "medium",
description: "CIP skid #2 cleaned and ready. Calibration due Thursday.",
},
{
category: "safety",
priority: "low",
description: "No incidents. Emergency shower test passed at 07:30.",
},
],
});
// Submit the handover (locks editing)
await trpc.shiftHandovers.submit.mutate({ id: handover.id });
// Incoming shift lead acknowledges
await trpc.shiftHandovers.acknowledge.mutate({ id: handover.id });
Health score engine: Evaluates handover quality (0-100) based on completeness, timeliness, and content depth. Low-scoring shifts are surfaced in the analytics dashboard.
Mood / Pulse Check
Anonymous or named team sentiment check-ins for AIC/TIER meetings.
Router: mood
Mood levels: 1 (very low) through 5 (excellent)
| Procedure | Type | Description |
|---|---|---|
mood.submit | Mutation | Record a mood entry (1-5 scale) |
mood.getTrend | Query | Get mood trend over a date range |
mood.getDailySummary | Query | Get mood summary for a specific date |
Privacy: Anonymous submissions use SHA-256 hashing (userId + boardId + date) for deduplication without identification. The hash prevents duplicate votes while ensuring individual responses cannot be traced back to users.
await trpc.mood.submit.mutate({
boardId: "clx9bd001",
value: 4,
date: "2026-04-13",
anonymous: true,
});
Problem Solving
Root cause analysis sheets supporting 5 Whys, Ishikawa (fishbone), and WWWHWWH methodologies.
Router: problemSolving
Sheet types: five_whys, ishikawa, wwwhwwh
Statuses: draft > completed > reviewed
Procedures
| Procedure | Type | Description |
|---|---|---|
problemSolving.create | Mutation | Create a new problem-solving sheet |
problemSolving.update | Mutation | Update an existing sheet |
problemSolving.delete | Mutation | Delete a sheet |
problemSolving.getById | Query | Get a sheet with full details |
problemSolving.list | Query | List sheets (by board, action, or type) |
problemSolving.submit | Mutation | Mark as completed (ready for review) |
problemSolving.review | Mutation | Formal sign-off by a reviewer |
Example: 5 Whys Analysis
const sheet = await trpc.problemSolving.create.mutate({
boardId: "clx9bd001",
actionId: "clx9ac002", // Links to the CAPA action
type: "five_whys",
problemStatement: "Batch BX-4471 pH reading 7.8 — exceeds upper spec limit of 7.4",
data: {
whys: [
{ why: "Why was pH out of spec?", answer: "Buffer preparation concentration was incorrect" },
{ why: "Why was buffer concentration incorrect?", answer: "Operator used wrong grade of NaOH" },
{ why: "Why was wrong grade used?", answer: "Two grades stored in same cabinet, similar labels" },
{ why: "Why are they stored together?", answer: "No segregation policy for reagent grades" },
{ why: "Why no segregation policy?", answer: "SOP-WH-012 does not address grade separation" },
],
rootCause: "SOP-WH-012 lacks reagent grade segregation requirements",
correctiveAction: "Update SOP-WH-012 to require grade-specific shelving with color-coded labels",
},
});
// Submit for review
await trpc.problemSolving.submit.mutate({ id: sheet.id });
// QA reviewer signs off
await trpc.problemSolving.review.mutate({
id: sheet.id,
reviewerComment: "Root cause identified and corrective action adequate. Verify implementation by 2026-04-20.",
});
All problem-solving sheets support linking to actions for full traceability from root cause to corrective action to CAPA closure.
Rate Limiting
All operations endpoints share the same rate limits:
| Plan | Requests/min |
|---|---|
| Free | 60 |
| Starter | 120 |
| Pro | 300 |
| Enterprise | 600 |