BPMN Mining
VI EN
Log in Sign up free
Docs / Start

Supported file formats

draw.io, BPMN 2.0, CSV event logs, and the current limits.

Event log (.csv) — building the process from real data

Instead of declaring times from memory, you can upload the log your business system exports. The tool rebuilds the process from that very data: which step comes before which, the real branch rates, the real work time and waiting time.

The four minimum columns
MaHoSo,HoatDong,BatDau,KetThuc
HS-001,Tiếp nhận,2026-03-01 08:00,2026-03-01 08:20
HS-001,Appraisal,2026-03-02 09:00,2026-03-02 10:30
HS-001,Reply,2026-03-02 14:00,2026-03-02 14:10
  • Column names are accepted in both unaccented Vietnamese and English (case_id, activity, timestamp…).
  • Two optional columns: NguoiThucHien and ChiPhi.
  • With KetThuc present, work and waiting can be separated. With only one timestamp column, the entire gap between two events goes into the waiting part — if it does not know, it admits it does not know rather than guessing.

The tool screens the file before building — and says what it finds

A file that can be read can still produce wrong figures. The tool screens on two levels, and everything it finds is shown on screen — nothing is skipped silently.

Level one — is the file usable at all:

  • Missing a required column, or no header row → rejected, listing the columns it did read so you know what to rename.
  • Rows missing a case id, an activity name, or with an unreadable timestamp are dropped — and the number of dropped rows is reported with examples.
  • Ambiguous dd/mm ↔ mm/dd dates are decided by counting per-row evidence, not by guessing from the first row. A whole column in mm/dd, and a file merged from two sources, each get their own warning.

Level two — is the data plausible:

  • KetThuc before BatDau: the work time is counted as 0, so that step's work minutes are lower than reality.
  • Negative cost: also counted as 0.
  • Exactly duplicated rows (same case, activity and timestamp) — they inflate frequency, and frequency is branch probability here.
  • Cases with a single event: they produce no transition at all.
  • Too few cases (under 5): every rate is an example, not a measurement.
  • Gaps over 30 days between consecutive events: the whole gap counts as waiting time, which pulls the average cycle time up sharply.
💡
Download the sample log and compare
The ⬇ Download sample log (.csv) button appears everywhere a file is accepted. The sample holds 24 cases, three variants (straight through · with a rework loop · rejected), two steps whose times overlap so you can watch the parallel-block detector work, and all six columns. It deliberately produces no quality warning — so if your file does raise one, the difference is in the data, not in the tool.
ℹ
The method: a directly-follows graph
If A comes immediately before B within the same case, there is an edge A→B, and the branch probability is the observed frequency. This is the simplest approach in process mining — stated plainly so you know this is not the inductive or alpha algorithm. Rework loops emerge on their own as loop-back edges, and XOR gateways are inserted at branch points to keep the notation correct.

The two supported formats

FormatFile extensionCommon sources
draw.io / mxGraph.drawio, .xml diagrams.net, draw.io desktop, Confluence
BPMN 2.0 (OMG).bpmn, .xml Camunda Modeler, Bizagi, Signavio, bpmn.io

How the tool recognises the shapes

For a draw.io file, the style of the cell decides the kind of step:

ShapeStyle containsRead as
Ellipse / circleellipseA start or end event
Rounded rectanglerounded=1A task
Diamond with a +rhombus + a + labelParallel gateway (AND)
Any other diamondrhombusExclusive gateway (XOR)

Start and end are also inferred from the structure: a step with no incoming flow is a start point, one with no outgoing flow is an end point — even when you have not drawn an ellipse.

Annotations stuck onto the diagram

A BPMN 2.0 file lets you stick a piece of text next to a step — a textAnnotation connected with an association. This is where the analyst records the things no field can hold: “per Circular 39”, “SLA 3 days”, “only applies to cases over 500 million”.

  • A step with an annotation shows a ✎ badge in the Steps table — hover to read it, click Details to edit it. Annotations are written back out when you export a .bpmn or .drawio file.
  • At most 300 characters; anything longer is truncated on reading the file.
  • The association can point either way — every vendor draws it differently.
  • Several annotations on one step are merged, separated by a ·.
  • An annotation not connected to any step (a diagram title, a general legend) is ignored.
ℹ
Annotations do not change the numbers
An annotation is text, not calculation data. Adding or removing an annotation does not change time, cost or the critical path by the slightest amount.

Writing the duration in the label

The units that are recognised, case-insensitive, accented or not:

Time units
giây · s · sec · seconds        →  1/60 min
phút · m · min · minutes        →  1 min
giờ  · h · hr · hours           →  60 min
ngày · d · day · days           →  480 min   (one working day = 8 hours)
tuần · w · week · weeks         →  2.400 min  (5 days)

Decimals are accepted with either a dot or a comma: 1.5 hours and 1,5 hours both give 90 minutes.

Writing the cost in the label

The cost must be in the last segment, after the · and must contain only the amount:

Cost inside a label
Match documents 35 minutes · 120k             →  120.000
Delivery 4 giờ · 900.000 VND                  →  900.000
Appraisal 25 minutes · 1,5 triệu              →  1.500.000
⚠
Why the convention is this strict
Real step names very often contain an amount of money: “Value > 50 million?”. If money were scanned for anywhere in the label, that step would be wrongly assigned a cost of 50 million and every result would be wrong. Requiring it to come after the · makes assigning a cost always a deliberate act.

Probability on a branch

Write the percentage into the flow's label: passed 70%, failed 30%. The tool pulls the percentage out as the probability and keeps the words as the display label. You can also skip this step and fill it in directly in the Flows table after uploading.

Safety limits

  • File size: 2 MB (changeable with MAX_UPLOAD_MB if you self-host).
  • At most 600 steps and 1.500 flows per process.
  • A file containing a DTD or an external entity is rejected — this is how XXE attacks are blocked (a malicious XML file could ask the server to read a system file and slip it into the result).

BPMN elements not yet supported

The calculation engine currently understands tasks, events and gateways. A file with the structures below still loads, but the tool says so plainly, right on the screen, that this part is not computed — better to say it outright than to hand over a normal-looking number that is missing a whole branch.

  • Subprocesses — kept as a single step, the inside is not computed.
  • A non-interrupting boundary event whose branch rejoins the main flow — the tool computes these as the interrupting kind, which is an upper bound. Let that branch finish at its own end point and it computes correctly.
  • A terminate end event — currently computed as an ordinary end point.
  • A multi-instance step with no count declared — declare loopCardinality explicitly and it computes fully.

Fully supported since the recent extension rounds: interrupting boundary events, multi-instance steps, event-based gateways, timer events, OR gateways, and pools · lanes · message flows — where a message flow is loaded but does not carry the case along, and the other participant's work is drawn but not added to this process's numbers.

Extension is on a roadmap, ordered so that whatever is currently producing a wrong number gets fixed first.

Anything unclear or missing?