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.
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:
NguoiThucHienandChiPhi. - With
KetThucpresent, 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/dddates are decided by counting per-row evidence, not by guessing from the first row. A whole column inmm/dd, and a file merged from two sources, each get their own warning.
Level two — is the data plausible:
KetThucbeforeBatDau: 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.
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.
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
| Format | File extension | Common 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:
| Shape | Style contains | Read as |
|---|---|---|
| Ellipse / circle | ellipse | A start or end event |
| Rounded rectangle | rounded=1 | A task |
Diamond with a + | rhombus + a + label | Parallel gateway (AND) |
| Any other diamond | rhombus | Exclusive 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
.bpmnor.drawiofile. - 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.
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:
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:
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
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_MBif 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
loopCardinalityexplicitly 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.