Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 48 Current »

https://spordle.atlassian.net/browse/SPR-614

Requirements

All sports

  • Automatic suspensions are not appealable in any sport

  • If suspended, only eligible to “purge” for the same team, otherwise suspended and cannot purge or play on other teams

  • Suspensions follow into the following season and can by served by any team in the following season

  • Schedule office (e.g., league) is responsible for administering suspensions, not team

  • Suspensions prohibit officials from officiating games (exceptions may be granted by the assigner)

  • Notifications to be sent to the player, team staff, schedule and team offices

Baseball

  • Each branch (BQ) has it’s own rules

    • Suspensions do not apply across branches (BQ suspension does not apply in BA), but a Baseball Canada suspension (e.g., from nationals) can apply to all branches

  • Suspensions

    • All penalties (ejections) result in a 1 game suspension, then accumulate into 3 games, 5 games then indefinite

    • Suspensions accumulate by participant (any team, office within BQ)

  • No expiry time component or indefinite rules from game infractions

Soccer

  • Each branch (SQ) has it’s own rules

    • Suspensions do not apply across offices (suspension in office A allows play in office B)

  • Suspensions

    • Yellow card

      • 3x accumulation results in a 1 game suspension

      • Resets after accumulation

    • Indirect red card

      • Results in a 1 game suspension

      • Affects accumulation of yellow cards

    • Direct red cards

      • Results in a 1 game suspension

      • No accumulation side effects

  • No expiry time component or indefinite rules from game infractions

  • Suspensions only accumulate with the same office and team

Hockey

Minimum guidelines

  • Federation (HC) sets minimum guidelines and each branch (BC) can extend severity

    • Suspensions apply across the entire federation/tenant

    • Suspension rules are based on the schedule office

  • If a BC team plays in an AB tournament, AB suspension guidelines will be used, unless the player fails to purge the suspension prior to returning to BC, then BC guidelines will take effect and could possibly extend the suspension

    • e.g., AB may impose a 1 game suspension while BC imposes 2 games, so a player would be required to serve 2 games upon returning to BC

Accumulation

  • Accumulation based on a set of infractions (accumulation groups)

    • e.g., 7.2(b) will result in a 1 game suspension, and 7.3(b) in a latter game will result in an accumulation sanction due to ‘any 2 majors’.

  • Multiple sanctions may be applied from a single game

    • e.g., in a fight, player may be assessed 7.10 Fighting Major + GM (1 game) + 7.11(a) Instigator (1 game)

    • e.g., 7.2(c) in game one results in 1 game suspension, then 7.8(c) in next game results in 3 games under 7.8(c) + 5 games under AS107 which is pending until after the 3 game has completed

  • Accumulation is per season

    • Head contact accumulation resets prior to minor championships

      • 🚩 Waiting to confirm if we’re isolating the championship office or setting a reset date for this accumulation group

  • Penalty in the last 10 minutes or OT, or an injury, can affect suspension severity

    • These factors do not create multiple suspensions, just a single suspension

  • Team Officials

    • Team officials may be suspended based on penalty accumulation in the same game

      • e.g., A staff member who’s players accumulate 3 majors in a game will be assessed a 1 game suspension, then 3 games the second game that happens, and an indefinite suspension for the third game it happens

    • Head coach is suspended by default unless they’re not present, then it would be an assistant coach or manager unless the referee reports otherwise

      • 🚩 Possibly implement this based on the signatory of the lineup?

Purging

  • Minor / Junior

    • Minor hockey suspensions don’t typically allow purging when transitioning to Junior, but there’s an exception to allow purging if they actually intend to play to help eligibility for next season. This will be handled manually by BC

  • Suspensions have a total required games and expiry date; will be considered completed when the first criteria is reached

    • Expiry has breaks (e.g., winter, summer)

    • Game/expiry ratio is not 1:1 (1/7/15/21/25/30/n*7) and varies by branch. Not defined by HC

    • Game infractions may result in indefinite suspensions with minimum number of game purges

  • Only games that were scheduled at the time of suspension may count towards to the serving of a suspension. Therefore, any game that is added to a team’s schedule after the date of a suspension, cannot be used to purge that suspension.

    • Rule added to avoid working around with an exhibition game mid-week. Did not commit to supporting this on day 1

  • Purging can only be done in the next scheduled game that was created prior to the suspension

    • Lineups of following games cannot be entered until the scheduled end time of the preceding game to prevent a potentially suspended member being added, or a suspended member being added with an excessive purge


Sanction Models

Infractions are the rules, penalties are violations of infractions, sanctions define infraction accumulation and suspensions are the violation of sanctions.

Sanction

Accumulation properties specify when the Sanction is applicable and behaviour properties specify what the resulting Suspension will be defined as.

Any sanctions that happen twice in a season will result in a second

Blue properties to be added with automation.

Property

Type

Description

id

uuid

seasonId

string

2024-25

name

string

With i18n

i18n

jsonb

code

string

Usually the rule number or an accumulation code

officeId

id

parentId

id

Optional - To override parent sanctions

sectionId

id

Physical Fouls

externalId

uuid

For syncing with Spordle ID

Accumulation

positionGroups

enum[]

Optional - Applicable to players or bench staff

accumulationCount

number

Default to 1

SanctionMember

These are the list of rule options that are part of the accumulation group. Order is not significant; any member infraction counts towards the accumulation group.

Property

Type

Description

id

uuid

sanctionId

id

optionId

id

SanctionOffense

Number of match or days require to serve

Property

Type

Description

id

uuid

sanctionId

id

offense

number

1, 2, 3…

Behaviour

durationType

enum

Definite or Indefinite

games

number

Total games required to serve

lastMinutesGames

number

Optional - Total games required to serve when end of game or overtime (will hardcode to last 10 minutes for now)

(undefined → fall back to totalGames)

injuryGames

number

Optional - Total games required to serve when penalty has an injury

(undefined → fall back to totalGames)

days

number

Optional - Number of days to calculate the expiry date

lastMinutesDays

number

Optional - Number of days to calculate the expiry date in the last 10 minutes

injuryDays

number

Optional - Number of days to calculate the expiry date when penalty has an injury

Accumulation

positionGroups

enum[]

Optional - Applicable to players or bench staff

accumulationCount

Default to 1

priority

number

Priority precedence order for accumulations

minCount

number

Minimum number of infractions (>=)

maxCount

number

Maximum number of infractions (<=)

Settings Models

OfficeBreak (V2)

Required to define breaks when calculating the suspension expiry date for the season. Could also be used for the scheduler.

Property

Type

Description

id

uuid

seasonId

enum

type

enum

Sanctions, Scheduling

startDate

date

endDate

date

officeId

id

categoryIds

id[]

Optionally specify which categories it applies to

SanctionRatio

BC Hockey defines a ratio generally, not per game, so it might be better to do the same. When games is undefined, it will serve as the default case and serve as a n:m ratio

Property

Type

Description

id

uuid

seasonId

enum

games

number

Optional - Number of games the accumulation requires

days

number

Number of days

officeId

id

OfficeSettings

Office settings that affect general suspension behaviour

Property

Type

Description

lastMinutesDuration (V2)

number

Number of minutes before the end of the game when endGames of a sanction kicks in.

Hockey Canada defines this as 10 minutes; QC defines this as 5 minutes

suspensionActivation

enum

Suspension Models

Suspension

Property

Type

Description

id

uuid

gameId

id

Game the suspension originated in

participantId

id

Participant that was suspended

teamId

id

Team that the participant is suspended in

penaltyId

id

Penalty that resulted in the suspension

positionGroup

enum

Position that this participant was suspended in. Player, Staff

sanctionId

id

Sanction that was determined by the rulebook sanction rules

sanctionOffenseId

id

Is this necessary?

durationType

enum

Definite or Indefinite. This is required to be the same as the sanction duration

requiredGames

number

Number of games required to complete the suspension.

Optional when Indefinite duration type, but may be set with it

expiry

date

Optional - Date when the suspension will expire if the games requirement isn’t met

status

enum

Pending, Appealed, Active, Completed, Cancelled, Expired

externalId

uuid

For syncing with Spordle ID

Legacy suspension options (deprecated)

code

enum

Deprecated, replaced by sanctionId

Suspension Discipline

Property

Type

Description

id

uuid

suspensionId

id

Suspension

additionalGames

number

Number of additional games to the suspension

durationType

enum

Definite or Indefinite. To allow infinite duration

status

enum

Pending | Active | Inactive

comments

string

Comment section to allow the discipline committee to note changes

reviewedBy

string array

Array of members that reviewed the suspension

reviewedAt

timestamp

The date / time when goes from Pending to Active or Inactive

EffectiveSuspension (View)

Exact same properties as the Suspension + the ones bellow. When fetching suspensions (GET /suspensions) it will return the effective suspensions. On save (POST / PATCH /suspensions), it persists to the Suspension table.

Property

Type

Description

effectiveRequiredGames

number

requiredGames (Suspension) + additionalGames (SuspensionDiscipline) = effectiveRequiredGames

  • If requiredGames (Suspension) is indefinite there additionalGames (SuspensionDiscipline) → requiredGames counts as 0

  • If additionalGames is indefinite → effectiveRequiredGames = null (and effectiveDurationType indefinite)

  • SuspensionDiscipline has to be status = Active, else don’t use additionalGames.

effectiveDurationType

enum

durationType (SuspensionDiscipline), if none → durationType (Suspension)

disciplineAdditionalGames

additionalGames (SuspensionDiscipline)

disciplineDurationType

enum

durationType (SuspensionDiscipline)

Definite or Indefinite. To allow infinite duration


Implementation

Screenshot 2024-09-03 at 9.56.35 AM.png

New Scopes

Scope

Access

Implementation

suspensions:view

Can access the suspension show page or lists

Suspension model: allow suspensions:view instead of scoresheet:view

Any role that currently contains scoresheet:view

suspensions:manage

Can edit suspensions

Suspension model: allow suspensions:manage instead of scoresheet:manage

Any role that currently contains scoresheet:manage

discipline:view

Can see the suspension discipline card on a suspension

Suspension: allow discipline:view

SuspensionDiscipline: discipline:view

discipline:manage

Can edit the suspension discipline on a suspension

Suspension: allow discipline:manage

SuspensionDiscipline: discipline:manage

discipline:trigger

Has access to create a SuspensionDiscipline on a Suspension in pending status (custom endpoint)

Custom endpoint on SuspensionDiscipline model: discipline:trigger

Unhardcoding TODO

  • Handle indefinite and expiry dates

    • SPR-646 - Getting issue details... STATUS

  • Replace code with sanctions

    • SPR-985 - Getting issue details... STATUS

Accumulation TODO

SPR-1202 - Getting issue details... STATUS

  • When the game is completed (or certified, depending on settings), get all sanctions for the schedule office

  • Find matching sanctions based on the sanction members that match the penalties

  • Find all past penalties and suspensions of all suspend-able players in the same season

    • In soccer, limit both to same office

  • Determine the sanction(s) based on the accumulation rules

    • Sanctions with higher priority cancel out lower priority sanctions

    • All sanctions are added unless there is an exclusive sanction

  • Suspension length will be defined as games or lastMinutesGames with injuryGames has additional games.

    • endGames is only applicable when the penalty is in the last 10 minutes (per office settings)

    • injuryGames is only applicable when the penalty is marked as injured

  • When creating the suspension, send a notification to the player, team officials and office admins (except player, will be based on notification setting) SPR-1285 - Getting issue details... STATUS

  • Add ability to deactivate suspensions SPR-1336 - Getting issue details... STATUS

Discipline Committee TODO

SPR-1343 - Getting issue details... STATUS

As a league administrator, I want to be able to go into a suspension and increase the required number of games. I also want to see a list of all the suspensions that required discipline committee actions.

  • SuspensionDiscipline Model SPR-1279 - Getting issue details... STATUS

    • Migration to add table

    • Add new model to API (one-to-one relation with Suspension)

    • Add scopes: suspensions:view, suspensions:manage, discipline:view,discipline:manage,discipline:trigger

      • All roles that have scoresheets:view should now also have suspensions:view

      • All roles that have scoresheets:manage should now also have suspensions:manage

      • Change the current suspension model to have suspensions:view / suspensions:manage instead of scoresheets:view / scoresheets:manage

      • New SuspensionDiscipline table should have discipline:view and discipline:manage scopes. Also, add the discipline:trigger scope.

  • EffectiveSuspension (View) SPR-1348 - Getting issue details... STATUS

  • Adjust purging logic to account for SuspensionDiscipline SPR-1345 - Getting issue details... STATUS

    • Where ever we show the total number of games in the UI (ex. when purging, use effectiveRequiredGames and effectiveDurationType)

    • In backend, use effectiveRequiredGames and effectiveDurationType for purging logic

  • Metabase reports → use EffectiveSuspension → effectiveRequiredGames SPR-1349 - Getting issue details... STATUS

  • Card to display and edit discipline committee information SPR-1346 - Getting issue details... STATUS

    • Add new card for Discipline Suspension (should only be viewable by suspensions:discipline scope roles

    • Add the following fields on the suspension grid:

      • Original required games (can be indefinite)

      • Discipline additional games (can be indefinite)

      • Effective required games (can be indefinite)

  • Required Discipline Committee option on Sanction Offense SPR-1344 - Getting issue details... STATUS

    • Add requireDisciplineCommittee on sanction offense

    • On create of a suspension off a sanction, if requireDisciplineCommittee is true, create a suspension discipline record with a pending status.

  • Notifications for requireDisciplineCommittee suspensions SPR-1350 - Getting issue details... STATUS

    • Will be part of the suspension email we currently send

  • View for suspensions:{} scope roles to see list of Pending SuspensionDiscipline records. Potentially a Suspension Tab / List. SPR-1351 - Getting issue details... STATUS

    • Have ability to filter on Pending suspension discipline for suspensions:discipline scope

  • If suspension discipline goes from Pending to Active and Suspension is Completed. Move suspension from Completed back to Active. (to revise, edge case)

Lineup Status COMPLETE

  • Get all Active suspensions for each player COMPLETE

    • In soccer, exclude suspensions for other offices COMPLETE

  • If the suspension is for another team, it cannot be purged COMPLETE

Assigning COMPLETE

  • If an official has any active suspension, they should be flagged as Suspended COMPLETE

    • SPR-655 - Getting issue details... STATUS

Completion COMPLETE

  • If the suspension type is Indefinite, the suspension can never automatically be completed COMPLETE

    • SPR-646 - Getting issue details... STATUS

  • If there is an expiry date, the suspension is considered Expired once that date passes if it is not yet completed based on the required games COMPLETE

    • This will require a task to run at midnight daily (based on the timezone of the office) COMPLETE

    • SPR-646 - Getting issue details... STATUS

  • A suspension completes once the suspension has the required amount of purges that are completed games COMPLETE

Syncing TODO

  • Will need a two-way sync with ID

    • SPR-664 - Getting issue details... STATUS

  • This will remove the need to query suspensions in member validation

Additional notes JP

  • Once the new module will be completed, this will replace the Game Incident Report and the suspension module inside HCR,. We need to plan a sync process from Play to ID before we go live with that module.

  • The notification process to fill out the form is important. The people that are part of the discipline committee need a notification to let them know they have to fill or review a form. This will replace the actual distribution list in HCR. In an office in ID multiple person can be attached to the discipline committee notification and it’s hierarchical, so we need to build the same concept in Spordle Play

  • Multiple incident in the same game needs to be added to the same report.

  • Extra incident can be added manually ( not linked to a on ice infraction)

  • The pdf report is not mandatory to be sent by email , but needs to be available inside play. Notification can be enough

  • No labels