...
Purple requires i18n., gray are for backwards compatibility.
RuleSection
07 Physical Fouls
Property | Type | Description |
---|---|---|
id | uuid | |
seasonId | id | 2024-25 |
officeId | id | Hockey Canada |
name | string | Physical Fouls |
code | text | 7 |
order | number |
...
Property | Type | Description |
---|---|---|
id | uuid | |
seasonId | id | 2024-25 |
officeId | id | Hockey Canada |
name | string | Head Contact |
code | string | 7.6 |
sectionId | id | Physical Fouls |
order | number |
RuleOption
This is a container that represents the options the scorekeeper can select.
...
Property | Type | Description |
---|---|---|
id | uuid | |
seasonId | id | 2024-25 |
officeId | id | Hockey Canada |
ruleId | id | 7.6 Head Contact (07 Physical Fouls) |
parentId | id | Allows overriding a parent option by a lower office |
order | number |
RuleOptionMember
These are the effective infractions upon selecting the option. Order is significant and allows for sequencing penalties as consecutive (e.g., major = 0, GM = 1) or parallel (same order) for start times
...
When creating a penalty, you’re presented with a list of rules and then select an option. That option then results in one or many penalties that are linked to an infraction.
InfractionDuration InfractionType?
Minor, Major, Match, Misconduct, Game Misconduct, Gross Misconduct, Game Ejection
Property
Type
Description
id
uuid
Property | Type | Description |
---|---|---|
id | uuid | |
officeId | id | Hockey Canada |
name | string | Minor |
description | string | |
abbreviation | string | |
lengthduration | number | Minutes |
Infraction
7.6(b) - Head Contact - Minor
Total time for stats | ||
servedBy | string | Determines if the penalty has endTime & servedById None | Offender | Player |
isShorthanded | boolean | Determines if the penalty may be cancelled out with coincidental penalties of same type |
isEjection | boolean | Penalty results in player being ejected for remainder of game |
Type | Characteristics | Minutes | Server Who serves on bench | Shorthanded May be canceled if coincidental | Removed Player is removed from game |
---|---|---|---|---|---|
Hockey | |||||
Minor |
| 2 | Offender | Yes | No |
Major |
| 5 | Player | Yes | No |
Misconduct |
| 10 | Offender | No | No |
Game Misconduct |
| 10 | None | No | Yes |
Game Ejection | Identical to Game Misconduct | 10 | None | No | Yes |
Gross Misconduct |
| 10 | None | No | Yes |
Match |
| 5 | Player | Yes | Yes |
Penalty Shot |
| 0 | None | No | No |
Soccer | |||||
Caution |
| 0 | None | No | No |
Expulsion |
| 0 | None | No | Yes |
Baseball | |||||
Ejection |
| 0 | None | No | Yes |
Infraction
7.6(b) - Head Contact - Minor
Property | Type | Description | ||||
---|---|---|---|---|---|---|
id | uuid | |||||
seasonId | id | 2024-25 | ||||
officeId | id | Hockey Canada | ||||
ruleId | id | 7.6 Head Contact | ||||
durationId | id | Minor | ||||
code | string | 7.6 (b) | ||||
order | number | |||||
parentId | id | Allows overriding a parent infraction by a lower office | ||||
externalId | uuid | For syncing with Spordle ID | ||||
legacyName | string | Used to set | ||||
legacyDuration | string | Used to set | ||||
Behaviour Options | ||||||
severity | enum | Low | Medium | High | Severe | ||||
requiresIncidentReport | boolean | isTimed | boolean | isServable | boolean |
Accumulation Models
When creating a penalty, we need to check for accumulation rules to stack an additional infraction.
Typical examples are 3x Stick Infraction → Game Ejection or 2x Misconduct → Game Ejection.
InfractionAccumulation
This acts as a grouping that defines the count of the member infractions necessary and what the resulting infraction is.
Property | Type | Description |
---|---|---|
id | uuid | |
seasonId | id | 2023-24 |
officeId | id | Hockey Canada |
name | string | Stick Infractions |
count | number | 3 |
infractionId | id | Resulting infraction when accumulation reached 4.8 (b) |
isReplacement | boolean | Whether the accumulation acts as a replacement infraction or not e.g., 2nd yellow → Yellow/Red Card |
InfractionAccumulationMember
These are the list of infractions that are part of the accumulation group. Order is not significant; any member infraction counts towards the accumulation group.
...
Yellow are new properties, red are deprecated.
GamePenalty
Instances of an infraction in a game are called penalties. This is a scoresheet artifact.
Property | Type | Description |
---|---|---|
id | uuid | |
gameId | id | |
teamId | id | |
participantId | id | |
servedById | id | |
isInjured | boolean | Necessary for suspensions |
Time | ||
gameTime | GameTime | Time of infraction |
startTime | GameTime | Time the penalty started to be served |
endTime | GameTime | Time the penalty ceased to be served |
isEnded | boolean | Whether or not the penalty was ended |
Infraction | ||
infractionId | id | |
durationId | id | Technically not really necessary since the durationId is part of the infraction above |
optionId | id | Link penalties part of the same option group when creating instead of trying to reverse them as we currently do |
accumulationId | id | Link penalties that were created by an accumulation rule |
Legacy infraction options (deprecated) | ||
infraction | string | Infraction “id” which is something like “head-contact” in the rulebook |
duration | string | Duration “id” which is something like “minor” in the rulebook |
code | string | Infraction “code” |
Penalties are consisted linked if they have the same participantId
, gameTime
and optionId
or have an accumulationId
that matches.
...