# Hole Correction Mode

In order for players' score to remain accurate, there is a need for scorers to be able to correct inputs that have already been submitted into the tablets and submitted to the DDE.

Hole correction mode has been developed to support this need. It allows the wholesale correction of both completed and ongoing holes.

Hole correction mode is started and finished with a ModeChange packet.

**ModeChange packet**

| Field Name        | Type    | Description                                                                                                                                                                                                                                                                                                                                                                                                                           |
| ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| seqNum            | integer | The sequence number of the packet.                                                                                                                                                                                                                                                                                                                                                                                                    |
| timestamp         | date    | The timestamp of the event, in UTC                                                                                                                                                                                                                                                                                                                                                                                                    |
| timestampReceived | date    | The server time of the moment that this packet has been processed                                                                                                                                                                                                                                                                                                                                                                     |
| eventElementType  | string  | <p>The type of event, in this case <strong>ModeChange</strong><br><br></p><p>Full list of values include:<br></p><ul><li>TglHammerThrown</li><li>RefereeCalled</li><li>HoleScoreUpdate</li><li>Correction</li><li>ModeChange</li><li>Penalty</li><li>RoundStatusUpdate</li><li>BallDrop</li><li>ProvisionalBallSelected</li><li>HitBall</li><li>AddressingBall</li><li>ApproximateLie</li><li>DetailedLie</li><li>BallHoled</li></ul> |
| teamNo            | integer | The team Id in the case of a team event                                                                                                                                                                                                                                                                                                                                                                                               |
| mode              | string  | The type of mode change. Hole correction mode is started by **BeginHoleCorrection** and ended by **EndHoleCorrection**                                                                                                                                                                                                                                                                                                                |

Following a ModeChange of BeginHoleCorrection, individual holes are then resent as a standard series of stroke events and RoundStatusUpdates. These are always sent from the beginning of a hole, with the seqNum continuing from previous packets. These packets continue up until the point that the correction was initiated - this can be either the entirety of a hole, up to holing or up to the present moment (if the correction has been requested when a hole is ongoing).

Only one hole at a time can be corrected within the mode.

Hole correction mode is ended by a ModeChange of EndHoleCorrection.

See below for an example of a hole being corrected in it's entirety:

```
{
  "eventElementType": "ModeChange",
  "mode": "BeginHoleCorrection",
  "seqNum": 61,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:46:07.862Z",
  "timestampReceived": "2025-01-09T18:00:32.678Z"
}

{
  "courseId": "113",
  "eventElementType": "RoundStatusUpdate",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "roundNo": 1,
  "seqNum": 62,
  "state": "HoleStarted",
  "teamNo": 102,
  "timestamp": "2025-01-09T17:46:07.862Z"
}

{
  "clubTypeCode": "CDR",
  "courseId": "113",
  "eventElementType": "AddressingBall",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "seqNum": 63,
  "strokeNo": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:47:39.381Z"
}

{
  "courseId": "113",
  "eventElementType": "HitBall",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "score": {
    "currentHolePar": 4,
    "currentHoleStrokes": 3,
    "currentRoundScoreToPar": "-1",
    "overallScoreToPar": "-1"
  },
  "seqNum": 64,
  "strokeNo": 1,
  "strokesAssessed": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:47:51.658Z"
}

{
  "ballLie": {
    "blindShot": false,
    "coordinates": {
      "x": 11868.311,
      "y": 10815.146,
      "z": 8.09
    },
    "distanceToPin": 162.382,
    "distanceToPinProb": null,
    "isPredictionUnconfident": false,
    "isWaterProbable": false,
    "obstructions": false,
    "shotDistance": 270.815,
    "strokesToPinProb": {
      "2.9": 13,
      "3.2": 8,
      "3.3": 78
    },
    "surfaceType": "Fairway Bunker",
    "surfaceTypeCode": "OST",
    "zoneProbabilities": [
      {
        "distanceToPinYards": 178.11,
        "probabilityPercent": 79,
        "zoneCode": "OST",
        "zoneType": "Bunker"
      },
      {
        "distanceToPinYards": 154.24,
        "probabilityPercent": 13,
        "zoneCode": "OFW",
        "zoneType": "Fairway"
      },
      {
        "distanceToPinYards": 165.75,
        "probabilityPercent": 8,
        "zoneCode": "ORO",
        "zoneType": "Rough"
      },
      {
        "distanceToPinYards": 158.82,
        "probabilityPercent": 1,
        "zoneCode": "OIR",
        "zoneType": "Intermediate"
      }
    ]
  },
  "courseId": "113",
  "eventElementType": "ApproximateLie",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "seqNum": 65,
  "strokeNo": 1,
  "strokesAssessed": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:48:00.239Z"
}

{
  "ballLie": {
    "blindShot": false,
    "coordinates": {
      "x": 11959.449,
      "y": 10749.377,
      "z": 8.525
    },
    "distanceToPin": 133.807,
    "obstructions": false,
    "shotDistance": 305.054,
    "surfaceType": "Fairway",
    "surfaceTypeCode": "OFW"
  },
  "courseId": "113",
  "eventElementType": "DetailedLie",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "seqNum": 66,
  "strokeNo": 1,
  "strokesAssessed": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:48:16.649Z"
}

{
  "clubTypeCode": "CUK",
  "courseId": "113",
  "eventElementType": "AddressingBall",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "seqNum": 67,
  "strokeNo": 2,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:54:23.525Z"
}

{
  "courseId": "113",
  "eventElementType": "HitBall",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "score": {
    "currentHolePar": 4,
    "currentHoleStrokes": 3,
    "currentRoundScoreToPar": "-1",
    "overallScoreToPar": "-1"
  },
  "seqNum": 68,
  "strokeNo": 2,
  "strokesAssessed": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:54:31.631Z"
}

{
  "ballLie": {
    "blindShot": false,
    "coordinates": {
      "x": 12077.453,
      "y": 10332.251,
      "z": 9.833
    },
    "distanceToPin": 2.972,
    "distanceToPinProb": {
      "13-20": 20,
      "20-30": 2,
      "4-6": 1,
      "6-9": 30,
      "9-13": 46
    },
    "isPredictionUnconfident": false,
    "isWaterProbable": false,
    "obstructions": false,
    "shotDistance": 132.105,
    "strokesToPinProb": {
      "1.2": 1,
      "1.3": 3,
      "1.4": 14,
      "1.5": 22,
      "1.6": 34,
      "1.7": 18,
      "1.8": 8
    },
    "surfaceType": "Green",
    "surfaceTypeCode": "OGR",
    "zoneProbabilities": [
      {
        "distanceToPinYards": 3.63,
        "probabilityPercent": 100,
        "zoneCode": "OGR",
        "zoneType": "Green"
      }
    ]
  },
  "courseId": "113",
  "eventElementType": "ApproximateLie",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "seqNum": 69,
  "strokeNo": 2,
  "strokesAssessed": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:54:39.741Z"
}

{
  "ballLie": {
    "blindShot": false,
    "coordinates": {
      "x": 12077.975,
      "y": 10334.752,
      "z": 9.804
    },
    "distanceToPin": 3.175,
    "obstructions": false,
    "shotDistance": 131.42,
    "surfaceType": "Green",
    "surfaceTypeCode": "OGR"
  },
  "courseId": "113",
  "eventElementType": "DetailedLie",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "seqNum": 70,
  "strokeNo": 2,
  "strokesAssessed": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T17:54:47.902Z"
}

{
  "clubTypeCode": "CUK",
  "courseId": "113",
  "eventElementType": "AddressingBall",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "seqNum": 71,
  "strokeNo": 3,
  "teamNo": 102,
  "timestamp": "2025-01-09T18:00:09.840Z"
}

{
  "courseId": "113",
  "eventElementType": "HitBall",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "score": {
    "currentHolePar": 4,
    "currentHoleStrokes": 3,
    "currentRoundScoreToPar": "-1",
    "overallScoreToPar": "-1"
  },
  "seqNum": 72,
  "strokeNo": 3,
  "strokesAssessed": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T18:00:23.070Z"
}

{
  "courseId": "113",
  "eventElementType": "BallHoled",
  "groupId": 1115953,
  "groupNo": 13,
  "holeNo": 13,
  "holeOrder": 4,
  "player": {
    "country": "USA",
    "displayName": "Keith Mitchell",
    "firstName": "Keith",
    "gender": "male",
    "id": 3961,
    "isAmateur": false,
    "lastName": "Mitchell"
  },
  "playerId": 3961,
  "provisionalIndex": 0,
  "roundNo": 1,
  "score": {
    "currentHolePar": 4,
    "currentHoleStrokes": 3,
    "currentRoundScoreToPar": "-1",
    "overallScoreToPar": "-1"
  },
  "seqNum": 73,
  "strokeNo": 3,
  "strokesAssessed": 1,
  "teamNo": 102,
  "timestamp": "2025-01-09T18:00:32.208Z"
}

{
  "eventElementType": "ModeChange",
  "mode": "EndHoleCorrection",
  "seqNum": 74,
  "teamNo": 102,
  "timestamp": "2025-01-09T18:00:32.208Z",
  "timestampReceived": "2025-01-09T18:00:32.678Z"
}
```
