Skip to Content

Schedule CSV Format

For: Event administrators and partners who import schedules or create schedule templates.

Lumieos uses a CSV format to define event schedules — robot game matches, judging sessions, table groups, judging rooms, and queuing zones. The same format is used for both direct event imports (with real team numbers) and reusable templates (with placeholder team numbers).


Quick Start

Here is a minimal 4-team schedule with all supported sections:

robot_game_rounds,3 table_group,Table A1,Table A2 match_list,time,length,Table A1,Table A2 1,9:00,10,1,2 2,9:10,10,3,4 3,9:20,10,2,3 4,9:30,10,4,1 5,9:40,10,1,3 6,9:50,10,2,4 judging_group,CJ|Room 1 judging_group,CJ|Room 2 judging_list,time,length,block,Room 1,Room 2 1,10:00,30,1,1,2 2,10:45,30,2,3,4 queuing_zone,r,Match Queuing,Table A1,Table A2 queuing_zone,s,Judging Queuing,Room 1,Room 2

The rest of this page explains each section in detail.


Configuration Rows

Configuration rows appear at the top of the file and set global schedule parameters.

RowFormatDefaultDescription
robot_game_roundsrobot_game_rounds,<integer>3Number of official (scored) matches per team
robot_game_practice_roundsrobot_game_practice_rounds,<integer>0Number of practice matches per team

Both values must be positive integers. If omitted, defaults are used.

Example:

robot_game_practice_rounds,1 robot_game_rounds,3

Table Groups

Table groups define pairs of robot game tables. Each table_group row creates one pair.

Format: table_group,<table_name_1>,<table_name_2>

Rules:

  • Each group must have exactly two table names
  • Table names must be unique across all groups — no duplicates
  • These names are referenced by the match_list header and queuing_zone rows

Example:

table_group,Red Table R1,Red Table R2 table_group,Blue Table B1,Blue Table B2

This defines 4 tables in 2 groups.


Match List

The match list defines robot game matches. It starts with a header row followed by data rows.

Header Row

Format: match_list,time,length[,<practice_column_name>],<table_1>,<table_2>,...

  • The time and length labels are fixed column headers
  • A practice column appears only if robot_game_practice_rounds is greater than 0 — the column name can be anything (e.g., Practice)
  • Table names must match names defined in table_group rows

Example (with practice):

match_list,time,length,Practice,Red Table R1,Red Table R2,Blue Table B1,Blue Table B2

Example (without practice):

match_list,time,length,Table A1,Table A2

Data Rows

Format: <match_number>,<HH:MM>,<length_minutes>[,<practice_flag>],<team_1>,<team_2>,...

ColumnTypeDescription
Match numberPositive integerSequential match identifier
TimeHH:MMStart time (24-hour format)
LengthPositive integerDuration in minutes
Practice flagp or practiceOnly present when practice column exists. Marks the row as a practice match. Leave empty for official matches.
Team columnsPositive integer or emptyOne column per table. Team number assigned to that table, or empty for no assignment.

Notes:

  • Zero or negative team numbers are treated as placeholders and skipped
  • Empty rows (all team columns empty) represent breaks or buffer time
  • The practice flag column only exists when robot_game_practice_rounds > 0

Example:

1,9:00,10,p,1,2,3,4 2,9:10,10,p,5,6,7,8 3,9:20,5,,,, 4,9:25,10,,1,5,2,6

Rows 1-2 are practice matches. Row 3 is a 5-minute break. Row 4 is an official match.


Judging Groups

Judging groups define rooms where teams are evaluated. Each judging_group row creates one group with one or more rooms.

Format: judging_group,<type>|<name>[,<type>|<name>,...]

Each room entry uses type|name format.

Room Types

TypeDescription
cvCore Values
pjProject
rdRobot Design
cjJudging (combined)
rvReviewing
giaGlobal Innovation Award

Room types are case-insensitive (stored as lowercase).

Rules:

  • Room names must be unique across all judging groups — no duplicates
  • These names are referenced by the judging_list header and queuing_zone rows

Example (one room per group):

judging_group,CJ|Yellow Pod 1 judging_group,CJ|Red Pod 2 judging_group,CJ|Green Pod 3 judging_group,CJ|Blue Pod 4

Example (multiple rooms per group):

judging_group,CV|Core Values Room,PJ|Project Room judging_group,RD|Robot Design Room

Judging List

The judging list defines judging sessions. It starts with a header row followed by data rows.

Header Row

Format: judging_list,time,length,block,<room_1>,<room_2>,...

  • The time, length, and block labels are fixed column headers
  • Room names must match names defined in judging_group rows

Example:

judging_list,time,length,block,Yellow Pod 1,Red Pod 2,Green Pod 3,Blue Pod 4

Data Rows

Format: <session_number>,<HH:MM>,<length_minutes>,<block_number>,<team_1>,<team_2>,...

ColumnTypeDescription
Session numberPositive integerSequential session identifier
TimeHH:MMStart time (24-hour format)
LengthPositive integerDuration in minutes
BlockIntegerJudging block/timeslot grouping
Team columnsPositive integer or emptyOne column per room. Team number assigned to that room, or empty.

Example:

1,9:30,30,1,1,2,3,4 2,10:15,30,2,5,6,7,8 3,11:00,30,3,9,10,11,12

Queuing Zones

Queuing zones define areas where teams wait before their activities. Each zone references tables or judging rooms.

Format: queuing_zone,<type>,<zone_name>,<location_1>[,<location_2>,...]

TypeDescriptionLocation references
rRobot game queuingTable names from table_group rows
sJudging/session queuingRoom names from judging_group rows

Rules:

  • Each location name must match a previously defined table name (for type r) or room name (for type s)
  • A zone can reference multiple locations

Example:

queuing_zone,r,Robot Game Queuing,Red Table R1,Red Table R2,Blue Table B1,Blue Table B2 queuing_zone,s,Judging Queuing,Yellow Pod 1,Red Pod 2,Green Pod 3,Blue Pod 4

Templates vs. Event Imports

The CSV format is the same for both use cases, with one difference: how team numbers work.

Event Import

When uploading a CSV directly to an event, team numbers must be real team numbers that are registered for that event. The system validates each number against the event’s registration list. Unregistered team numbers produce an error.

Templates

When creating a reusable schedule template, use placeholder team numbers starting at 1 and incrementing sequentially: 1, 2, 3, …, N. The sequence must be continuous with no gaps.

When you apply a template to an event, each placeholder is mapped to a real registered team.

Example: A template for 24 teams uses numbers 1 through 24. When applied to an event, placeholder 1 might become team 59366, placeholder 2 becomes team 60120, and so on.


Troubleshooting

Common errors and how to fix them:

Duplicate table or room names

Row 5: Duplicate table name 'Red Table R1' found.

Every table and room name must be unique across the entire file. Check for copy-paste errors in table_group and judging_group rows.

Invalid time format

Row 12: Match row contains invalid time.

Times must be in HH:MM format (e.g., 9:00, 13:30). Do not include AM/PM or seconds.

Invalid numbers

Row 8: Match row contains invalid match number. Row 14: Session row contains invalid length.

Match numbers, session numbers, lengths, and block numbers must all be integers. Check for accidental text or decimal values.

Table or room not found in header

Row 7, column 4 ('Table X'): Could not find table 'Table X' when processing match header row.

The table or room name in the match_list or judging_list header does not match any name from the table_group or judging_group definitions. Check for typos or extra spaces.

Queuing zone references unknown location

Row 20, column 3 ('Pod X'): Could not find judging room 'Pod X' in queuing zone.

Each location in a queuing_zone row must exactly match a table name (for type r) or room name (for type s) defined earlier in the file.

Unregistered team number (event import)

Row 10, column 'Red Table R1': Team number 99999 is not registered for this event.

When importing directly to an event, every team number must belong to a team that is registered for that event. Verify the team is registered before importing.

Non-continuous team sequence (templates)

Generic team numbers must be a continuous sequence from 1 to 24. Issues: missing: [5, 12]

Template placeholders must form a continuous 1-to-N sequence. If you have 24 teams, every number from 1 to 24 must appear at least once. Check for missing or skipped numbers.

Missing required values

Row 1: robot_game_rounds requires a value.

Configuration rows like robot_game_rounds and robot_game_practice_rounds require an integer value after the comma.


Full Validation Rules

This is a comprehensive list of every validation rule enforced by the parser.

Configuration

RuleError
robot_game_rounds must have a valueRow N: robot_game_rounds requires a value.
Value must be an integerRow N: Robot Game rounds must be an integer.
robot_game_practice_rounds must have a valueRow N: robot_game_practice_rounds requires a value.
Value must be an integerRow N: Robot Game practice rounds must be an integer.

Table Groups

RuleError
Must have at least two table namesRow N: table_group requires at least two table names.
Both names must be non-emptyRow N: table_group requires two non-empty table names.
No duplicate table namesRow N: Duplicate table name 'X' found.

Match List Header

RuleError
Table names must exist in table_group definitionsRow N, column C ('X'): Could not find table 'X' when processing match header row.

Match Data Rows

RuleError
Match number must be an integerRow N: Match row contains invalid match number.
Time column must be presentRow N: Match row is missing time column.
Time must be in HH:MM formatRow N: Match row contains invalid time.
Length column must be presentRow N: Match row is missing length column.
Length must be an integerRow N: Match row contains invalid length.
Team numbers must be integersRow N, column 'X': Match row contains invalid team number 'Y'.
Teams must be registered (event mode)Row N, column 'X': Team number Y is not registered for this event.

Judging Groups

RuleError
Room entries must be in type|name formatRow N, column C: Judging room must be in 'type|name' format, got 'X'.
No duplicate room namesRow N, column C: Duplicate judging room name 'X' found.

Judging List Header

RuleError
Room names must exist in judging_group definitionsRow N, column C ('X'): Could not find judging room 'X' when processing judging session header row.

Judging Data Rows

RuleError
Session number must be an integerRow N: Session row contains invalid session number.
Time column must be presentRow N: Session row is missing time column.
Time must be in HH:MM formatRow N: Session row contains invalid time.
Length column must be presentRow N: Session row is missing length column.
Length must be an integerRow N: Session row contains invalid length.
Block column must be presentRow N: Session row is missing block column.
Block must be an integerRow N: Session row contains invalid block number.
Team numbers must be integersRow N, column 'X': Session row contains invalid team number 'Y'.
Teams must be registered (event mode)Row N, column 'X': Team number Y is not registered for this event.

Queuing Zones

RuleError
Must have at least a type and nameRow N: queuing_zone requires at least a type and name.
Session-type locations must reference judging roomsRow N, column C ('X'): Could not find judging room 'X' in queuing zone.
Robot-type locations must reference tablesRow N, column C ('X'): Could not find table 'X' in queuing zone.

Template Team Validation

RuleError
Team numbers must form a continuous 1-N sequenceGeneric team numbers must be a continuous sequence from 1 to N. Issues: missing: [...], unexpected: [...]

Full Example

Below is a complete 24-team schedule with all sections. This example uses placeholder team numbers (1-24), making it suitable as a template. For an event import, replace the placeholders with real team numbers.

Download this example as a CSV file

robot_game_practice_rounds,1 robot_game_rounds,3 table_group,Red Table R1,Red Table R2 table_group,Blue Table B1,Blue Table B2 match_list,time,length,Practice,Red Table R1,Red Table R2,Blue Table B1,Blue Table B2 1,9:00,10,p,1,2,3,4 2,9:10,10,p,5,6,7,8 3,9:20,10,p,9,10,11,12 4,9:30,10,p,13,14,15,16 5,9:40,10,p,17,18,19,20 6,9:50,10,p,21,22,23,24 7,10:00,5,,,, 8,10:05,10,,1,5,9,13 9,10:15,10,,17,21,2,6 10,10:25,10,,10,14,18,22 11,10:35,10,,3,7,11,15 12,10:45,10,,19,23,4,8 13,10:55,10,,12,16,20,24 14,11:05,5,,,, 15,11:10,10,,13,1,5,9 16,11:20,10,,21,17,6,2 17,11:30,10,,14,10,22,18 18,11:40,10,,7,3,15,11 19,11:50,10,,23,19,8,4 20,12:00,10,,16,12,24,20 21,12:10,60,,,, 22,13:10,10,,9,13,1,5 23,13:20,10,,2,6,17,21 24,13:30,10,,18,22,10,14 25,13:40,10,,11,15,3,7 26,13:50,10,,4,8,23,19 27,14:00,10,,20,24,12,16 judging_group,CJ|Yellow Pod 1 judging_group,CJ|Red Pod 2 judging_group,CJ|Green Pod 3 judging_group,CJ|Blue Pod 4 judging_list,time,length,block,Yellow Pod 1,Red Pod 2,Green Pod 3,Blue Pod 4 1,9:30,30,1,1,2,3,4 2,10:15,30,2,5,6,7,8 3,11:00,30,3,9,10,11,12 4,13:00,30,4,13,14,15,16 5,13:45,30,5,17,18,19,20 6,14:30,30,6,21,22,23,24 queuing_zone,r,Robot Game Queuing,Red Table R1,Red Table R2,Blue Table B1,Blue Table B2 queuing_zone,s,Judging Queuing,Yellow Pod 1,Red Pod 2,Green Pod 3,Blue Pod 4
Last updated on