Premium · One oral-solids plant, five systems, two years

Batch Release World

Two years of a pharmaceutical plant's records, from process order to QP release

661,497 rows in 65 linked tables from one oral-solids plant, 1 July 2024 to 30 June 2026: SAP-style ERP and quality tables with their real names and fields (AUFK, AFKO, AFRU, MATDOC, MCH1, QALS, QAMR, QAVE, QMEL, JCDS and 25 more), LIMS, MES and eQMS exports, and an OCEL 2.0 object-centric event log and XES log built from them. 1,679 finished batches of 11 packs, packed from 1,175 bulk batches of 8 products.

Why it exists

Every record comes from a simulation of the plant at work, not from a distribution of outcomes. A batch waits because the analyst, the HPLC or the QA reviewer it needs is busy, on leave or off shift; a test fails because of what was done to that batch: the API lot dispensed into it, the press it was compressed on and how worn the press was, the humidity in the suite that day. Seven things went wrong at the plant over the two years, the kind that hide in real extracts, and each is recorded only the way a real plant would record it. The answer key says what happened, when, where it shows, and the query that finds it, so an analysis can be checked rather than argued.

Uses

What it is built for

  • Process mining with a known truth

    object-centric (OCEL 2.0, 9 object types: orders, batches, inspection lots, tests, batch records, deviations and more) or one case per finished batch (XES and CSV). Variants, rework loops, handoffs and bottlenecks, with their causes on record.

  • Batch release KPIs and dashboards

    release lead time, right first time, batch record rework, waiting time per stage, deviation and OOS rates, by product, press, month and person. A mart with one row per finished batch is included, and the queries that rebuild it from the raw tables.

  • Root cause and quality analytics

    link a dissolution result through the batch genealogy to the API lot and its supplier, a weight deviation to the press and its tooling, a slow month to the person who was away.

  • Data integrity and audit-trail review

    electronic signatures and audit trails in LIMS, MES and eQMS in the manner of 21 CFR Part 11 and EU GMP Annex 11, and one analyst's reintegration pattern to find.

  • SAP PP, QM and MM extracts without client data

    status histories (JCDS, JEST), cancelled confirmations (AFRU STOKZ and STZHL), goods-issue reversals (262 against 261), inspection lots of types 01, 03 and 04, usage decisions and quality notifications, for consultants, trainers and anyone building on SAP extracts.

  • Testing AI assistants and text-to-SQL

    every question in the answer key has a number that can be checked, so an assistant that makes numbers up is caught.

  • Teaching

    QA and QC, pharmaceutical engineering, operations and process mining courses, with worked answers.

In the data

What the full files show

Computed from every row of the full dataset when it was packaged, not drawn as a target. The free preview is a slice of the same data.

QA review of manufacturing batch records, by month

0.02.55.0Sep 2024Dec 2024Mar 2025Jun 2025Sep 2025Dec 2025Mar 2026
Median days from production review to QA approval (mes/ebr, query qa_record_turnaround_by_month). One of five reviewers is away from September to November 2025; compare those months with the same months of 2024.

Assay and impurity test turnaround around the HPLC outage

  • before (6 Jan to 9 Mar)1.32.7
  • two down (10 to 30 Mar)3.53.6
  • two down, one lent (31 Mar to 25 Apr)2.22.9
  • after (26 Apr to 29 Jun)1.22.1
  • Assay
  • Related substances
Median days from test start to result, routine release tests on bulk and finished batches (lims/tests, query hplc_outage_turnaround). Two of four release HPLCs broke on 10 March 2025; a stability HPLC was lent three weeks later.

Tablet weight deviations per batch pressed, by press

  • COMP-010.020.04
  • COMP-020.010.02
  • COMP-030.260.04
  • COMP-040.050.01
  • Before the overhaul
  • After
Deviations titled 'Tablet weight outside IPC limits' per batch compressed, before and after COMP-03's overhaul on 12 May 2025 (qms/deviations with mes/ipc_checks, query press_weight_deviations). Its tooling refurbishments had been postponed for production capacity (mes/maintenance_orders).

Manual chromatogram reintegrations per 100 HPLC tests, by analyst

  • alarsen18.2
  • eberg3.7
  • jelamrani3.5
  • hlefebvre3.4
  • fsantos3
  • cbecker2.8
  • rbakker2.4
  • smulder2.3
From the LIMS audit trail (lims/audit_trail, field integration) against each analyst's HPLC tests (query manual_reintegrations). Logins are invented. The answer key says which reintegrations moved a result away from its limit.

Sertraline dissolution beyond stage 1, by the API's particle size

  • under 35 µm12%
  • over 40 µm83%
Share of bulk batches whose dissolution test needed stage 2 or 3, by the quantity-weighted d90 of the API lots in them as measured at goods receipt (lims/tests through the MATDOC genealogy, query sertraline_dissolution_by_api_d90). 95 bulk batches under 35 µm; 18 bulk batches over 40 µm.

Where a finished batch's time goes, stage by stage

  • Order to start12.815.2
  • Manufacture2.54.7
  • Bulk testing to decision4.910
  • Wait to pack9.313.7
  • Packaging0.30.4
  • Packaging record review1.54.4
  • To QP certification0.22.8
  • Median
  • 90th percentile
Median and 90th percentile days in each stage, from bulk order created to QP certification, for every decided finished batch (eventlog/mart_batch_release, query where_the_time_goes). Testing the bulk to its usage decision takes a median 4.9 days and 10.0 at the 90th percentile; the packaging record's QA review 1.5 and 4.4.

Answer key

Seven events, each with its date, its cause and the query that finds it

ANSWER_KEY.md, in the full download, says what went wrong at the plant, when, where it shows in which tables and the SQL in queries.sql that finds it, with the numbers that query returns. The plant itself recorded these events only the way a real plant would, in these columns among others:

  • qms/deviations.root_causeThe root cause each investigation recorded: what was actually done to the batch, from worn press tooling to a room door held open, or 'not identified' as real investigations often end.64 values: Root cause not identified; most probable cause documented, Worn tooling (punches, cam track), UV lamp in distribution loop past rated hours…, 4.1% empty
  • qms/deviations.batch_disposition_outcomeWhat the deviation meant for the batch it touched: no impact, or reject.2 values: No impact on disposition, Reject, 29.1% empty
  • qms/oos_investigations.conclusionWhether an out-of-specification result was confirmed, invalidated for a laboratory error found in phase I, or not confirmed.3 values: Confirmed OOS, Invalidated: laboratory error, Not confirmed: probable laboratory error, original result invalidated by QA, 2.2% empty
  • qms/capas.effectiveness_resultWhether a corrective action held when it was checked; one that did not raised a follow-up CAPA.2 values: Effective, Not effective, new CAPA raised, 20.9% empty
  • lims/instrument_events.eventInstrument breakdowns, requalifications and loans: the cause behind a testing queue.4 values: Requalification (OQ/PQ) after repair, Breakdown: detector lamp failed, flow cell cracked on lamp change; flow cell on back-order, Breakdown: binary pump leak, pump head and check valves replaced; parts on back-order…
  • mes/maintenance_orders.statusMaintenance done, or postponed for production capacity.2 values: Completed, Postponed - production capacity
  • lims/audit_trail.reasonWhy a chromatogram was reintegrated, a run invalidated or a result recalculated, in the analyst's words.24 values: System suitability failure (resolution), Baseline drift, integration events adjusted, Noise integrated as peak, removed…
  • mes/room_conditions.rh_pctHourly humidity of each production room, from the building management system.29.2 to 66.8, mean 39.99
  • eventlog/mart_batch_release.right_first_timeWhether the finished batch was released with no deviation or OOS on it or its bulk batch, and both batch records approved at the first QA review.2 values: N, Y, 0.54% empty

How it behaves

Measured on the files you download

Each of these is computed from the delivered rows when the dataset is packaged, not written as a target.

  • 1,670 finished batches have a usage decision. Release takes a median of 2.4 days from goods receipt (P90 5.6), and 20.6 days from the start of bulk manufacture. 45.7% are right first time: released, with no deviation or OOS on the batch or its bulk and both batch records approved at the first QA review.
  • A pack finished on a Thursday or Friday waits for the weekend: median 4.0 days to release, against 1.8 for one finished Monday to Wednesday. That, not the product, is why Metformin 500 mg FCT 60 blister takes 4.0 days and Amlodipine 5 mg tablets 90 bottle 1.6.
  • 536 deviations (180 major, 350 minor, 6 critical), 297 CAPAs and 45 OOS investigations (18 / 3 / 23 invalidated in phase I, not confirmed in phase II, and confirmed). 22% of batch records were returned by QA at least once.
  • While two of the four release HPLCs were broken, assay testing took a median of 3.5 days instead of 1.3; while one of five QA reviewers was on leave, manufacturing record review took 3.8 days against 3.0 in the same months a year earlier.
  • One analyst reintegrated 18 chromatograms per 100 HPLC tests; the next highest 3.7. In 8 cases the reportable result moved, every time away from its limit.

Audit

133 of 133 checks pass

Re-run on the delivered files by an independent script with plain pandas. The results ship in INTEGRITY.json.

  • every key resolves within and across the five systems, every primary key is unique, and every user in a record is a user of that system in the cross-reference;
  • time runs forward: components are issued after the order is released and received after they are issued, packaging starts after the bulk is released, a finished batch is released only after both batch records are approved, its CoA is generated and the QP has certified it; nobody signs on a public holiday, and production stops for the shutdowns;
  • the calculations recompute: assay means from their injections, total impurities from the named peaks at or above the reporting threshold, the USP <711> dissolution stages from the vessel values, the USP <905> acceptance value at each stage, expiry dates on month ends;
  • the rules of a GMP plant hold: no analyst reviews their own test, an OOS retest is done by someone else, no batch record is approved by the person who submitted it, no account acts after its end date, no batch with a confirmed OOS or a reject decision is released, every root cause suits its deviation and leads to its own CAPA;
  • the event logs agree with the tables: the six OCEL 2.0 core tables exist, every link points to an event and an object, usage-decision events match SAP, and the flat log has one trace per finished batch.
All 133 checks
  • ✓ MARA key MATNR is unique (68 checked)
  • ✓ AUFK key AUFNR is unique (3,038 checked)
  • ✓ AFKO key AUFNR is unique (3,038 checked)
  • ✓ AFPO key AUFNR+POSNR is unique (3,038 checked)
  • ✓ AFVC key AUFPL+APLZL is unique (14,861 checked)
  • ✓ AFRU key RUECK+RMZHL is unique (15,226 checked)
  • ✓ MATDOC key MBLNR+MJAHR+ZEILE is unique (32,386 checked)
  • ✓ MCH1 key MATNR+CHARG is unique (4,868 checked)
  • ✓ QALS key PRUEFLOS is unique (6,086 checked)
  • ✓ QAMV key PRUEFLOS+VORGLFNR+MERKNR is unique (14,740 checked)
  • ✓ QAMR key PRUEFLOS+VORGLFNR+MERKNR is unique (14,647 checked)
  • ✓ QAVE (one usage decision per lot) key PRUEFLOS is unique (6,053 checked)
  • ✓ QMEL key QMNUM is unique (393 checked)
  • ✓ JCDS key OBJNR+STAT+CHGNR is unique (56,261 checked)
  • ✓ LIMS tests key test_id is unique (12,486 checked)
  • ✓ eQMS deviations key deviation_id is unique (536 checked)
  • ✓ MES batch records key ebr_id is unique (2,904 checked)
  • ✓ every AFKO order is in AUFK (3,038 checked)
  • ✓ every order material is in MARA (3,038 checked)
  • ✓ every operation belongs to an order's routing (14,861 checked)
  • ✓ every operation's work centre is in CRHD (14,861 checked)
  • ✓ every confirmation's order is in AUFK (15,226 checked)
  • ✓ every confirmation points to an operation of its order (AUFPL+APLZL) (15,226 checked)
  • ✓ every goods movement's order is in AUFK (20,735 checked)
  • ✓ every goods movement's batch is in MCH1 (32,386 checked)
  • ✓ every goods receipt's purchase order is in EKKO (1,967 checked)
  • ✓ every purchase order's vendor is in LFA1 (2,003 checked)
  • ✓ a purchase order is flagged delivered exactly when its goods receipt is posted (2,003 checked)
  • ✓ every batch vendor is in LFA1 (1,960 checked)
  • ✓ every delivered order's batch is in MCH1 (2,904 checked)
  • ✓ every inspection lot's batch is in MCH1 (6,086 checked)
  • ✓ every production inspection lot's order is in AUFK (4,129 checked)
  • ✓ every result (QAMR) has its characteristic (QAMV) (14,647 checked)
  • ✓ every usage decision's lot is in QALS (6,053 checked)
  • ✓ every SAP result traces to its LIMS test (12,326 checked)
  • ✓ every SAP notification mirrors an eQMS deviation (393 checked)
  • ✓ every notification task is an eQMS CAPA (242 checked)
  • ✓ every status change belongs to an order, lot or notification (56,261 checked)
  • ✓ every status code has a text in TJ02T (56,261 checked)
  • ✓ every LIMS sample's lot is in QALS (4,871 checked)
  • ✓ every LIMS test's sample is in samples (12,486 checked)
  • ✓ every LIMS test's lot is in QALS (12,486 checked)
  • ✓ every LIMS result row belongs to a test (54,766 checked)
  • ✓ every release instrument run belongs to a test (9,143 checked)
  • ✓ every run's instrument is in instruments (9,883 checked)
  • ✓ every retest points to its original test (72 checked)
  • ✓ every batch record's order is in AUFK (2,904 checked)
  • ✓ every review round's batch record exists (3,609 checked)
  • ✓ every review comment's batch record exists (933 checked)
  • ✓ every process parameter's order is in AUFK (24,561 checked)
  • ✓ every in-process check's order is in AUFK (26,292 checked)
  • ✓ every deviation-batch link's deviation exists (401 checked)
  • ✓ every deviation-batch link's batch is in MCH1 (401 checked)
  • ✓ every CAPA's source deviation exists (267 checked)
  • ✓ every follow-up CAPA's earlier CAPA exists (30 checked)
  • ✓ every CAPA comes from a deviation or an earlier CAPA (297 checked)
  • ✓ every OOS investigation's test is in LIMS (45 checked)
  • ✓ every phase II OOS has its deviation (27 checked)
  • ✓ every QP certification's batch is in MCH1 (1,657 checked)
  • ✓ every AFRU.ERNAM is an SAP user (15,226 checked)
  • ✓ every MATDOC.USNAM is an SAP user (32,386 checked)
  • ✓ every JCDS.USNAM is an SAP user (56,261 checked)
  • ✓ every QAVE.VNAME is an SAP user (6,053 checked)
  • ✓ every AUFK.ERNAM is an SAP user (3,038 checked)
  • ✓ every QAMR.PRUEFER is an SAP user (14,647 checked)
  • ✓ no SAP activity by a user after the account's validity ended (0 checked)
  • ✓ every end-dated account is locked (8 checked)
  • ✓ every LIMS tests.analyst is a LIMS user in the cross-reference (12,486 checked)
  • ✓ every LIMS tests.reviewed_by is a LIMS user in the cross-reference (12,425 checked)
  • ✓ every LIMS samples.sampled_by is a LIMS user in the cross-reference (4,871 checked)
  • ✓ every LIMS e_signatures.signed_by is a LIMS user in the cross-reference (24,848 checked)
  • ✓ every LIMS audit_trail.changed_by is a LIMS user in the cross-reference (257 checked)
  • ✓ every MES ebr.submitted_by is an MES user in the cross-reference (2,904 checked)
  • ✓ every MES ebr.qa_approved_by is an MES user in the cross-reference (2,886 checked)
  • ✓ every MES e_signatures.signed_by is an MES user in the cross-reference (22,509 checked)
  • ✓ every MES ipc_checks.operator is an MES user in the cross-reference (26,292 checked)
  • ✓ every eQMS deviations.reported_by is an eQMS user in the cross-reference (536 checked)
  • ✓ every eQMS deviations.owner is an eQMS user in the cross-reference (536 checked)
  • ✓ every eQMS deviations.closed_by is an eQMS user in the cross-reference (514 checked)
  • ✓ every eQMS qp_register.qualified_person is an eQMS user in the cross-reference (1,657 checked)
  • ✓ every confirmation ends after it starts and is entered after it ends (15,226 checked)
  • ✓ every cancelled confirmation (STZHL) points to an earlier one flagged STOKZ (169 checked)
  • ✓ every 262 reverses an earlier 261 of the same batch and quantity (SMBLN) (97 checked)
  • ✓ components are issued (261) only after the order is released (2,908 checked)
  • ✓ goods receipt (101) comes after the components were issued (261) (2,904 checked)
  • ✓ goods receipt comes after the last phase ends (2,904 checked)
  • ✓ the release lot (type 04) is created with the goods receipt (within 1 minute) (2,904 checked)
  • ✓ every usage decision comes after all results reached SAP (6,053 checked)
  • ✓ the stock posting (321/350) is saved 5 to 120 seconds after the usage decision (4,828 checked)
  • ✓ every transfer posting has an issuing line and an automatic receiving line (4,828 checked)
  • ✓ orders are technically completed only after delivery (2,881 checked)
  • ✓ orders are closed only after technical completion (2,745 checked)
  • ✓ no closed order is still flagged technically complete (JEST) (2,881 checked)
  • ✓ packaging starts only after the bulk is released (1,670 checked)
  • ✓ a finished batch is released only after both batch records are approved (1,657 checked)
  • ✓ every released finished batch was QP-certified 2 to 25 minutes before its usage decision (1,657 checked)
  • ✓ every released finished batch has a CoA generated before release (1,657 checked)
  • ✓ every deviation open on a batch at release was closed (major, critical, or more testing asked) or impact-assessed (minor) (439 checked)
  • ✓ no batch whose deviation concluded 'reject' was released (13 checked)
  • ✓ no batch with a confirmed OOS result was released (11 checked)
  • ✓ every closed critical deviation on a batch concluded 'reject' (6 checked)
  • ✓ every closed confirmed-OOS deviation records the batch as rejected (23 checked)
  • ✓ no OOS opened on a packaging-component inspection (rejected at incoming instead) (45 checked)
  • ✓ every OOS laboratory error suits the test method (18 checked)
  • ✓ every deviation root cause suits the kind of deviation (455 checked)
  • ✓ each root cause sits on one 6M branch (63 checked)
  • ✓ an undetermined root cause has no 6M branch (514 checked)
  • ✓ each root cause leads to its own CAPA actions (at most a corrective and a preventive) (56 checked)
  • ✓ every CAPA found not effective has a follow-up CAPA (30 checked)
  • ✓ no analyst reviewed their own test (LIMS) (12,425 checked)
  • ✓ every OOS retest was done by a different analyst (72 checked)
  • ✓ no batch record was approved by the person who submitted it (2,886 checked)
  • ✓ every verified batch-record step was verified by a second person (2,450 checked)
  • ✓ no person signs on a public holiday or while the site is closed (50,235 checked)
  • ✓ LIMS signatures fall in laboratory hours (Mon-Fri 06-22, Sat 06-14) (24,848 checked)
  • ✓ eQMS signatures fall on weekdays between 07:00 and 20:00 (2,878 checked)
  • ✓ MES signatures fall in the 24/5 production week (Mon 06:00 to Sat 06:00, plus sign-off minutes) (22,509 checked)
  • ✓ no production phase runs during a shutdown (15,226 checked)
  • ✓ QP certifications happen on weekdays (1,657 checked)
  • ✓ uniformity of dosage units (USP <905>): AV = |M - mean| + k*s recomputes at each stage (k 2.4 for 10 units, 2.0 for 30) (1,226 checked)
  • ✓ dissolution (USP <711>): each stage's mean recomputes, a stage is only entered when the one before fails, pass/fail follows the vessel values (1,369 checked)
  • ✓ impurities below the reporting threshold are reported as '< RT', not as numbers (5,513 checked)
  • ✓ total impurities = sum of the impurities at or above the reporting threshold (1,420 checked)
  • ✓ assay = mean of the four injections, to one decimal (also after a manual reintegration) (1,421 checked)
  • ✓ finished batch expiry falls on a month end (1,679 checked)
  • ✓ the six OCEL 2.0 core tables exist
  • ✓ every event-to-object row points to an event and an object (249,622 checked)
  • ✓ every object-to-object row points to two objects (45,722 checked)
  • ✓ every event type table holds exactly the events of that type (62 checked)
  • ✓ every event is linked to at least one object (123,889 checked)
  • ✓ usage-decision events match SAP usage decisions (6,053 checked)
  • ✓ every event in the flat log is in the OCEL log (119,618 checked)
  • ✓ one trace per finished batch in the flat log (1,679 checked)

Tables

65 tables, 661,497 rows

Every table in the zip with what it holds, its rows and its columns. The bars are on a log scale, so the small reference tables still show.

  • eventlog/events_by_finished_batchThe flat event log: one case per finished batch, with every event on its orders, lots, tests, batch records and deviations, and on its bulk batch119,618 rows · 10 cols
  • mes/room_conditionsHourly temperature and humidity of a production room, from the building management system87,595 rows · 4 cols
  • sap/JCDSA status change of an order, inspection lot or notification, with who and when. The process mining backbone on the SAP side56,261 rows · 10 cols
  • lims/resultsThe raw values behind a test: each injection, vessel, unit or named impurity54,766 rows · 9 cols
  • sap/JESTCurrent status of each object at the cutoff50,612 rows · 3 cols
  • sap/MATDOCA goods movement line. Reversals (262 against 261) must be netted out32,386 rows · 25 cols
  • mes/ipc_checksAn in-process check during compression or encapsulation26,292 rows · 15 cols
  • lims/e_signaturesLIMS electronic signatures (21 CFR Part 11): performed and reviewed24,848 rows · 8 cols
  • mes/process_parametersA recorded process parameter or check of an operation24,561 rows · 11 cols
  • mes/e_signaturesMES electronic signatures: performed, verified (second operator), reviewed, approved22,509 rows · 8 cols
  • sap/AFRUAn order confirmation. A wrong confirmation is cancelled (original STOKZ = X, cancellation row STZHL = original RMZHL) and entered again: net them out15,226 rows · 23 cols
  • sap/AFVCAn operation (phase) of an order's master recipe14,861 rows · 9 cols
  • sap/AFVVQuantities and actual dates of an operation14,861 rows · 8 cols
  • sap/QAMVAn inspection characteristic of a lot: a test with its limits14,740 rows · 9 cols
  • sap/QAMRA characteristic result, as LIMS sent it to SAP after review14,647 rows · 17 cols
  • lims/testsA test on a sample, with its reportable result. Retests point back with retest_of12,486 rows · 21 cols
  • lims/instrument_runsA run on an instrument: a release test, or a stability sequence competing for the same HPLCs9,883 rows · 9 cols
  • mes/equipment_logAn equipment logbook entry: cleaning before a batch6,341 rows · 7 cols
  • sap/QALSAn inspection lot: what QC has to test before a batch can be used or released6,086 rows · 22 cols
  • sap/QAVEThe usage decision of an inspection lot: release, release for further processing, or reject6,053 rows · 14 cols
  • lims/samplesA sample drawn for an inspection lot4,871 rows · 9 cols
  • sap/MCH1A batch: bought-in lot, bulk batch or finished batch4,868 rows · 10 cols
  • mes/ebr_reviewsA QA review round of a batch record3,609 rows · 7 cols
  • sap/AFKOOrder dates: planned, scheduled and actual3,038 rows · 16 cols
  • sap/AFPOThe order item: material, quantity, batch and goods received3,038 rows · 11 cols
  • sap/AUFKA process order header: one bulk manufacturing order (ZPI1) or packaging order (ZPI2)3,038 rows · 11 cols
  • mes/ebrAn electronic batch record: one per order, manufacturing or packaging2,904 rows · 13 cols
  • qms/e_signaturesEQMS electronic signatures. QP certification needs a second factor2,878 rows · 8 cols
  • sap/EKETDelivery schedule of a purchase order item2,003 rows · 5 cols
  • sap/EKKOA purchase order header. Orders still open at the cutoff are included2,003 rows · 10 cols
  • sap/EKPOA purchase order item2,003 rows · 9 cols
  • eventlog/mart_batch_releaseOne row per finished batch: the milestones and KPIs of its journey from bulk order to release1,679 rows · 29 cols
  • lims/certificatesA certificate of analysis generated for a finished batch1,672 rows · 6 cols
  • qms/qp_registerThe Qualified Person's register: certification of each finished batch for its market1,657 rows · 11 cols
  • mes/ebr_exceptionsAn exception raised by the MES during execution1,358 rows · 7 cols
  • mes/ebr_commentsA QA review comment and its correction933 rows · 9 cols
  • mes/audit_trailMES audit trail: corrections to batch record entries after QA comments931 rows · 9 cols
  • qms/deviationsA deviation, from report to closure536 rows · 28 cols
  • qms/deviation_batchesA batch affected by a deviation401 rows · 3 cols
  • sap/QMELA quality notification (type ZD) mirrored from an eQMS deviation that touches a batch393 rows · 18 cols
  • sap/QMFEThe defect item of a notification393 rows · 7 cols
  • sap/QMURThe root cause of a notification, on the 6M branches377 rows · 8 cols
  • qms/capasA corrective or preventive action. One that is not effective gets a follow-up CAPA (source = CAPA)297 rows · 13 cols
  • lims/audit_trailLIMS audit trail: manual reintegrations, invalidated runs and tests257 rows · 9 cols
  • sap/QMSMA CAPA action on a notification242 rows · 11 cols
  • qms/audit_trailEQMS audit trail: reclassifications and due date extensions241 rows · 9 cols
  • sap/CDHDRA change document header: an order rescheduled, a batch restricted151 rows · 8 cols
  • sap/CDPOSThe field changed by a change document151 rows · 9 cols
  • sap/AGR_USERSA role assigned to a user139 rows · 4 cols
  • sap/USER_ADDRName, department and job of a user. Names are invented134 rows · 5 cols
  • sap/USR02An SAP user account, including people who left before the window (end-dated and locked)134 rows · 7 cols
  • xref/usersOne person and their login in each system. Each system has its own login format, as at a real site120 rows · 8 cols
  • sap/MAKTMaterial description68 rows · 3 cols
  • sap/MARAOne material: active ingredient, excipient, packaging component, bulk tablets or capsules, or a finished pack68 rows · 10 cols
  • sap/MARCPlant settings of a material68 rows · 10 cols
  • mes/maintenance_ordersA maintenance order on a tablet press60 rows · 8 cols
  • qms/oos_investigationsAn out-of-specification investigation, phase I (laboratory) and phase II (full)45 rows · 25 cols
  • lims/instrumentsA laboratory instrument24 rows · 4 cols
  • sap/CRHDA work centre: a piece of process equipment or a packaging line24 rows · 9 cols
  • sap/CRTXWork centre text24 rows · 4 cols
  • sap/TJ02TText of each system status used in JCDS and JEST14 rows · 4 cols
  • sap/LFA1A supplier. Names are invented11 rows · 6 cols
  • lims/instrument_eventsA breakdown, requalification or reassignment of an instrument5 rows · 5 cols
  • sap/QPCTText of each usage decision code4 rows · 6 cols
  • sap/T001WThe plant1 rows · 4 cols

Explore

Every table, profiled

Each column's type, spread, empties and most common values, measured from the full CSVs. Switch to the first rows to see the data as it sits in the file.

eventlog/events_by_finished_batch.csv

119,618 rows · 10 columns

case_idkey
1,679 distinct values
1,679 distinctno empties
event_idtext
  • “e0000746”
  • “e0000749”
  • “e0001083”
98,981 distinct8 chars on averageno empties
activitycategory
  • Enter test results
    9.8%
  • Start test
    9.8%
  • Review test results
    9.8%
  • Create inspection lot
    4.2%
  • Record usage decision
    4.2%
  • 53 more values · 62%
58 valuesno empties
timestampdate
Jul 2024Jun 2026
2024-07-04 to 2026-06-30no empties
resourcecategory
  • RFC_MES
    7.0%
  • BWAGNER
    4.4%
  • RFC_LIMS
    4.2%
  • SPOPESCU
    4.0%
  • BATCH_CO
    2.7%
  • 111 more values · 78%
116 valuesno empties
rolecategory
  • QC_ANALYST
    17%
  • SYSTEM
    15%
  • OPERATOR
    13%
  • PACK_OPERATOR
    11%
  • QC_REVIEWER
    9.9%
  • 10 more values · 33%
15 valuesno empties
productcategory
  • Metformin 500 mg FCT 60 blister
    12%
  • Metformin 500 mg FCT 100 bottle
    11%
  • Amlodipine 5 mg tablets 30 blister
    9.4%
  • Atorvastatin 20 mg FCT 30 blister
    9.1%
  • Amlodipine 5 mg tablets 90 bottle
    9.0%
  • 6 more values · 49%
11 valuesno empties
skunumber
30M30M
mean 30Mmedian 30M30M to 30Mno empties
bulk_batchnumber
22.4M22.6M
mean 22.5Mmedian 22.5M22.4M to 22.6Mno empties
objectscategory
  • order-000001002901;batch-22600065
    <0.1%
  • order-000001000955;batch-22400394
    <0.1%
  • order-000001002543;batch-22500546
    <0.1%
  • order-000001001677;batch-22500190
    <0.1%
  • order-000001003268;batch-22600217
    <0.1%
  • 34809 more values · 100%
34,814 valuesno empties

Keys

Every join resolves

25 foreign keys, 241,926 references checked against the table each one points at. None points at a row that does not exist.

sap/AFKO

  • AUFNRsap/AUFK.AUFNR0 orphans

sap/AFPO

  • AUFNRsap/AUFK.AUFNR0 orphans
  • MATNRsap/MARA.MATNR0 orphans

sap/AFRU

  • AUFNRsap/AUFK.AUFNR0 orphans
  • ARBIDsap/CRHD.OBJID0 orphans

sap/MATDOC

  • AUFNRsap/AUFK.AUFNR0 orphans
  • MATNRsap/MARA.MATNR0 orphans

sap/QALS

  • AUFNRsap/AUFK.AUFNR0 orphans
  • MATNRsap/MARA.MATNR0 orphans

sap/QAVE

  • PRUEFLOSsap/QALS.PRUEFLOS0 orphans

sap/QAMR

  • PRUEFLOSsap/QALS.PRUEFLOS0 orphans
  • ZZLIMS_TESTlims/tests.test_id0 orphans

sap/QMEL

  • ZZQMS_IDqms/deviations.deviation_id0 orphans

sap/QMSM

  • QMNUMsap/QMEL.QMNUM0 orphans
  • ZZCAPA_IDqms/capas.capa_id0 orphans

mes/ebr

  • process_ordersap/AUFK.AUFNR0 orphans

mes/ipc_checks

  • process_ordersap/AUFK.AUFNR0 orphans

lims/samples

  • sap_inspection_lotsap/QALS.PRUEFLOS0 orphans

lims/tests

  • sample_idlims/samples.sample_id0 orphans

lims/results

  • test_idlims/tests.test_id0 orphans

qms/deviation_batches

  • deviation_idqms/deviations.deviation_id0 orphans

qms/oos_investigations

  • lims_testlims/tests.test_id0 orphans
  • deviation_idqms/deviations.deviation_id0 orphans

qms/qp_register

  • batcheventlog/mart_batch_release.batch0 orphans

lims/certificates

  • batcheventlog/mart_batch_release.batch0 orphans

In the zip

What you get

  • CSVs: one file per table in a folder per system (sap, lims, mes, qms, xref), all text, keys with their leading zeros.
  • eventlog/: the OCEL 2.0 object-centric log (SQLite), the XES case log, the flat event log and the release mart.
  • README.md: what each table holds, how the data behaves (measured), what was checked and what to know.
  • DATA_DICTIONARY.md: every table and column, how the systems join, the status codes.
  • ANSWER_KEY.md: what happened at the plant, when, where it shows and the query that finds it.
  • INTEGRITY.json: the 133 audit checks and their results, with audit.py, the script that ran them.
  • queries.sql: worked analyses, each tested against the data in DuckDB.
All 74 files
  • eventlog/batch_release.xes27.9 MB
  • eventlog/events_by_finished_batch.csv19.6 MB
  • eventlog/mart_batch_release.csv611 KB
  • eventlog/ocel2.sqlite49.1 MB
  • lims/audit_trail.csv36 KB
  • lims/certificates.csv124 KB
  • lims/e_signatures.csv2.4 MB
  • lims/instrument_events.csv649 B
  • lims/instrument_runs.csv918 KB
  • lims/instruments.csv1 KB
  • lims/results.csv2.7 MB
  • lims/samples.csv566 KB
  • lims/tests.csv2.4 MB
  • mes/audit_trail.csv147 KB
  • mes/e_signatures.csv2.7 MB
  • mes/ebr.csv476 KB
  • mes/ebr_comments.csv117 KB
  • mes/ebr_exceptions.csv202 KB
  • mes/ebr_reviews.csv313 KB
  • mes/equipment_log.csv647 KB
  • mes/ipc_checks.csv3.2 MB
  • mes/maintenance_orders.csv9 KB
  • mes/process_parameters.csv2.5 MB
  • mes/room_conditions.csv3.0 MB
  • qms/audit_trail.csv39 KB
  • qms/capas.csv66 KB
  • qms/deviation_batches.csv13 KB
  • qms/deviations.csv246 KB
  • qms/e_signatures.csv402 KB
  • qms/oos_investigations.csv15 KB
  • qms/qp_register.csv244 KB
  • sap/AFKO.csv459 KB
  • sap/AFPO.csv225 KB
  • sap/AFRU.csv2.6 MB
  • sap/AFVC.csv957 KB
  • sap/AFVV.csv1.0 MB
  • sap/AGR_USERS.csv6 KB
  • sap/AUFK.csv316 KB
  • sap/CDHDR.csv10 KB
  • sap/CDPOS.csv12 KB
  • sap/CRHD.csv1 KB
  • sap/CRTX.csv1 KB
  • sap/EKET.csv78 KB
  • sap/EKKO.csv145 KB
  • sap/EKPO.csv98 KB
  • sap/JCDS.csv3.7 MB
  • sap/JEST.csv1.2 MB
  • sap/LFA1.csv790 B
  • sap/MAKT.csv3 KB
  • sap/MARA.csv4 KB
  • sap/MARC.csv2 KB
  • sap/MATDOC.csv4.1 MB
  • sap/MCH1.csv352 KB
  • sap/QALS.csv1.1 MB
  • sap/QAMR.csv1.8 MB
  • sap/QAMV.csv912 KB
  • sap/QAVE.csv413 KB
  • sap/QMEL.csv80 KB
  • sap/QMFE.csv35 KB
  • sap/QMSM.csv30 KB
  • sap/QMUR.csv31 KB
  • sap/QPCT.csv238 B
  • sap/T001W.csv58 B
  • sap/TJ02T.csv450 B
  • sap/USER_ADDR.csv9 KB
  • sap/USR02.csv8 KB
  • xref/users.csv13 KB
  • README.md16 KB
  • DATA_DICTIONARY.md67 KB
  • queries.sql30 KB
  • audit.py37 KB
  • INTEGRITY.json29 KB
  • ANSWER_KEY.md34 KB
  • LICENSE.txt4 KB

Before you use it

Things to know

  • The extract holds the process orders created from 1 July 2024; work already under way then is not in it, and staff are on summer leave in August. Start trend lines in September 2024. Bought-in lots received before July 2024 keep their earlier records.
  • Production stops 5 Aug 2024 to 16 Aug 2024, 21 Dec 2024 to 3 Jan 2025, 4 Aug 2025 to 15 Aug 2025, 20 Dec 2025 to 2 Jan 2026; the laboratory and QA keep working.
  • Confirmations must be netted for cancellations (AFRU STOKZ and STZHL) and goods issues for reversals (262 against 261) before counting yields or consumption; the queries do.
  • Raw material lot balances do not reconcile to zero: stock transfers between storage locations (311) are not in the extract.
  • System status texts in TJ02T follow SAP's usual codes and wording but were not checked against a live system.
  • Times are local plant time (Central European, with summer time); the XES log carries the UTC offset.
  • An object shared by several finished batches (a bulk batch, an API lot, a deviation) appears in each of their cases in the flat log and the XES log: the convergence that object-centric logs avoid.
  • People, suppliers, products, codes and the plant are invented; any match with a real person or company is chance. The data comes from a simulator written for this dataset.
  • SAP is a trademark of SAP SE. The tables use SAP's table and field names so the data looks like an SAP extract; Misata is not affiliated with SAP SE or endorsed by it. Not validated for GxP use.

Licence

What you may do with it

The personal licence covers one named person: learning, research, building and testing your own software and evaluating tools, including at work, and publishing results with up to 1,000 rows as examples. Client work, a team, or use in a product, service, course or demo that is sold needs the commercial licence, for up to 10 people at one organisation: write to hello@misata.studio. The free preview is CC BY 4.0.

The personal licence, in full
BATCH RELEASE WORLD: PERSONAL LICENCE
Version 1.0, 5 October 2026

This licence is between you, the person who bought it, and Misata (misata.studio). Misata is
not a company: the licence is granted by its owner as an individual. Contact: hello@misata.studio

"The dataset" means the files in this zip: the CSV tables, the event logs, the SQLite file and
the documentation. The scripts (audit.py, queries.sql) are covered by the last section.

1. WHO MAY USE IT
   One person: the buyer named on the order. If your employer paid, the licence is still for
   one named person. Other people need their own licence, or a team licence.

2. WHAT YOU MAY DO
   a. Use the dataset for learning, research, teaching yourself, building and testing your own
      software, and evaluating tools, including at work, as long as only you handle the files.
   b. Publish results: charts, tables, numbers, models, process maps, papers, blog posts,
      talks and screenshots, and up to 1,000 rows of the dataset as an example in them.
      Please say the data is synthetic and came from Misata's Batch Release World.
   c. Keep copies on your own devices and in private storage you control.
   d. Show the dataset on screen to anyone, for example in a meeting, a class or a recorded
      demo, provided you do not hand them the files.

3. WHAT YOU MAY NOT DO
   a. Give, sell, lend or upload the files, or more than 1,000 rows of them, to anyone else,
      including colleagues, clients and public repositories.
   b. Use the dataset in work you deliver to a client, or in a product, service, course or
      demo that you or your employer sells or charges for. That needs the commercial licence.
   c. Pass off the dataset, or anything that is mostly the dataset, as your own data product.
   d. Present the data as real records of a real company, batch, patient or regulator
      inspection, or use it as evidence about real-world quality or compliance.

4. THE DATA IS SYNTHETIC
   Every person, supplier, batch, product code and event was generated by software. The names
   are invented. Any match with a real person or company is chance. SAP is a trademark of SAP
   SE; the tables use SAP's table and field names so the data looks like an SAP extract.
   Misata is not affiliated with SAP SE or endorsed by it. The same applies to every other
   product or standard named in the documentation.

5. NO WARRANTY
   The dataset is supplied as it is. It was checked by the audit script included in the zip,
   and the results of that audit are in INTEGRITY.json. Beyond that we make no promise that it
   is fit for any purpose, complete, or free of errors. It is not validated for GxP use and
   must not be used to make real decisions about medicines or patients.

6. LIABILITY
   To the extent the law allows, our total liability to you for anything to do with the
   dataset is limited to the price you paid for it. We are not liable for indirect or
   consequential loss, such as lost profit or lost data. Nothing here limits liability that
   the law does not allow to be limited.

7. REFUNDS
   Polar (polar.sh) sells the dataset as merchant of record and handles payment, tax and
   refunds under its own terms. If the files are faulty or not as described, write to us
   within 30 days and we will fix them or ask Polar to refund you.

8. ENDING THE LICENCE
   The licence lasts for ever, unless you break it. If you do, it ends, and you must delete
   your copies. If you buy the commercial licence later, it replaces this one.

9. UPDATES
   If we publish a corrected version of the dataset, you may download it under this licence.

10. SCRIPTS
   audit.py and queries.sql may be used, changed and shared by anyone, under the MIT licence:
   permission is granted, free of charge, to deal in them without restriction, provided this
   notice is kept; they are provided "as is", without warranty of any kind.

11. LAW
   This licence is governed by the laws of India. If a consumer protection law in your country
   gives you rights that this licence cannot take away, you keep them.

Questions

Before you buy

Is this real data?
No. This is synthetic data generated by software. No row describes a real person, company, patient, store, machine or transaction. The patterns are modelled to be realistic and the statistics quoted are measured on these files, but they do not describe any real population or market. Use it for learning, testing, demos, benchmarks and prototyping, not as evidence about the real world. Provided as is, without warranty.
What do I get?
One zip of 21.8 MB: 65 linked tables and 661,497 rows as CSV, an OCEL 2.0 event log (SQLite), an XES event log, worked SQL analyses (queries.sql), a README of what each table holds and how the data behaves, INTEGRITY.json with the 133 audit checks, DATA_DICTIONARY.md with every column, ANSWER_KEY.md with what happened, where it shows and the query that finds it, and audit.py, the script that ran the checks (seed 20240701).
Can I try it before buying?
Yes. The free preview (1.2 MB) is a slice of the same data with the keys intact, plus the README, so you can load it and check it fits before you pay.
How was it checked?
133 of 133 checks pass, re-run on the delivered files by an independent script with plain pandas: every key resolves within and across the five systems, every primary key is unique, and every user in a record is a user of that system in the cross-reference; time runs forward: components are issued after the order is released and received after they are issued, packaging starts after the bulk is released, a finished batch is released only after both batch records are approved, its CoA is generated and the QP has certified it; nobody signs on a public holiday, and production stops for the shutdowns; the calculations recompute: assay means from their injections, total impurities from the named peaks at or above the reporting threshold, the USP <711> dissolution stages from the vessel values, the USP <905> acceptance value at each stage, expiry dates on month ends; the rules of a GMP plant hold: no analyst reviews their own test, an OOS retest is done by someone else, no batch record is approved by the person who submitted it, no account acts after its end date, no batch with a confirmed OOS or a reject decision is released, every root cause suits its deviation and leads to its own CAPA; the event logs agree with the tables: the six OCEL 2.0 core tables exist, every link points to an event and an object, usage-decision events match SAP, and the flat log has one trace per finished batch.
Can I use it commercially?
The personal licence covers one named person: learning, research, building and testing your own software and evaluating tools, including at work, and publishing results with up to 1,000 rows as examples. Client work, a team, or use in a product, service, course or demo that is sold needs the commercial licence, for up to 10 people at one organisation: write to hello@misata.studio. The free preview is CC BY 4.0.
What should I know before using it?
The extract holds the process orders created from 1 July 2024; work already under way then is not in it, and staff are on summer leave in August. Start trend lines in September 2024. Bought-in lots received before July 2024 keep their earlier records. Production stops 5 Aug 2024 to 16 Aug 2024, 21 Dec 2024 to 3 Jan 2025, 4 Aug 2025 to 15 Aug 2025, 20 Dec 2025 to 2 Jan 2026; the laboratory and QA keep working. Confirmations must be netted for cancellations (AFRU STOKZ and STZHL) and goods issues for reversals (262 against 261) before counting yields or consumption; the queries do. Raw material lot balances do not reconcile to zero: stock transfers between storage locations (311) are not in the extract. System status texts in TJ02T follow SAP's usual codes and wording but were not checked against a live system. Times are local plant time (Central European, with summer time); the XES log carries the UTC offset. An object shared by several finished batches (a bulk batch, an API lot, a deviation) appears in each of their cases in the flat log and the XES log: the convergence that object-centric logs avoid. People, suppliers, products, codes and the plant are invented; any match with a real person or company is chance. The data comes from a simulator written for this dataset. SAP is a trademark of SAP SE. The tables use SAP's table and field names so the data looks like an SAP extract; Misata is not affiliated with SAP SE or endorsed by it. Not validated for GxP use.
Can I get a bigger or different version?
Yes, built to order from $1,500: another seed, a longer window, your own products, sites, custom SAP fields, or the events your analysis has to find. Write to hello@misata.studio.

Want it bigger, in another setting, or with your own columns? Have us build it or make it in Studio.

More premium datasets

All 5
  • An X-bar chart with the truth underneath: flatness, characteristic 139

    3 plants, 36 CNC machines, six months

    Six months of control charts with the ground truth underneath

    Answer key

    • active_cause_id
    • true_cause_shift_sigma
    • true_tool_wear_sigma
    • +6 more
    Rows
    515,442
    Tables
    15
    Checks
    101 of 101
    Free previewProfile and preview
  • Vibration through a life that ends in failure

    240 machines at 4 plants, two years

    Two years of sensor readings, failures, repairs and costs for 240 machines

    Answer key

    • failure_mode
    • true_life_days
    • true_failure_at
    • +6 more
    Rows
    179,038
    Tables
    6
    Checks
    67 of 67
    Free previewProfile and preview
  • Weekly sales, at regular price and on promotion

    Grocery chain, 10 stores, fiscal 2024 and 2025

    Two fiscal years of a grocery chain, from the shelf to the receipt

    Answer key

    • baseline_units
    • price_effect
    • promo_lift
    • +7 more
    Rows
    2,790,852
    Tables
    14
    Checks
    117 of 117
    Free previewProfile and preview