Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public class JudicialResultHelper {
"I", "INTERMEDIARY");

public static final String Y = "Y";
public static final String DURATION = "duration";


private JudicialResultHelper() {
Expand Down Expand Up @@ -93,8 +94,11 @@ public static JudicialResultPrompt.Builder populatePromptDefinitionAttributesBas
resultDefinition.getJsonArray("prompts")
.getValuesAs(JsonObject.class)
.stream()
.filter(prompt -> prompt.getString("id").equals(jsPrompt.getId().toString())
&& duration.equals(prompt.getString("duration")))
.filter(prompt -> prompt.getString("id").equals(jsPrompt.getId().toString()))
.filter(prompt -> prompt.containsKey(DURATION))
.filter(prompt -> duration.equals(prompt.getString(DURATION))
||duration.toUpperCase().contains(prompt.getString(DURATION).toUpperCase())
|| prompt.getString(DURATION).toUpperCase().contains(duration.toUpperCase()))
.findFirst();

return populatePrompt(jsPrompt, promptJson);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package uk.gov.moj.cpp.sjp.event.processor.results.converter.judicialresult;

import static java.util.UUID.fromString;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static uk.gov.moj.cpp.sjp.event.processor.results.converter.judicialresult.JPrompt.DDP_DISQUALIFICATION_PERIOD;
import static uk.gov.moj.cpp.sjp.event.processor.utils.FileUtil.getFileContentAsJson;

import uk.gov.justice.core.courts.JudicialResultPrompt;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.UUID;

import javax.json.JsonObject;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class JudicialResultHelperTest {

private static final String RESULT_DEFINITION_FILE = "ddq-result-definition.json";
private static final UUID DISQUALIFICATION_PERIOD_PROMPT_ID = fromString("2bf54447-328c-4c1b-a123-341adbd52172");

private JsonObject resultDefinition;

@BeforeEach
public void setUp() {
resultDefinition = getFileContentAsJson(RESULT_DEFINITION_FILE, new HashMap<>());
}

@Test
public void shouldPopulatePromptDefinitionAttributesForYearsDuration() {
final JudicialResultPrompt.Builder builder = JudicialResultHelper.populatePromptDefinitionAttributesBasedOnDuration(
DDP_DISQUALIFICATION_PERIOD, resultDefinition, "Year(s)");

final JudicialResultPrompt prompt = builder.build();

assertThat(prompt.getJudicialResultPromptTypeId(), is(DISQUALIFICATION_PERIOD_PROMPT_ID));
assertThat(prompt.getLabel(), is("Disqualification period"));
assertThat(prompt.getWelshLabel(), is("Cyfnod gwahardd"));
assertThat(prompt.getPromptReference(), is("disqualificationPeriod"));
assertThat(prompt.getType(), is("INTM"));
assertThat(prompt.getCourtExtract(), is("Y"));
assertThat(prompt.getDurationSequence(), is(1));
assertThat(prompt.getPromptSequence(), is(new BigDecimal(100)));
assertThat(prompt.getIsFinancialImposition(), is(false));
}

@Test
public void shouldPopulatePromptDefinitionAttributesForMonthsDuration() {
final JudicialResultPrompt.Builder builder = JudicialResultHelper.populatePromptDefinitionAttributesBasedOnDuration(
DDP_DISQUALIFICATION_PERIOD, resultDefinition, "MONTH");

final JudicialResultPrompt prompt = builder.build();

assertThat(prompt.getJudicialResultPromptTypeId(), is(DISQUALIFICATION_PERIOD_PROMPT_ID));
assertThat(prompt.getLabel(), is("Disqualification period"));
assertThat(prompt.getWelshLabel(), is("Cyfnod gwahardd"));
assertThat(prompt.getPromptReference(), is("disqualificationPeriod"));
assertThat(prompt.getType(), is("INTM"));
assertThat(prompt.getCourtExtract(), is("Y"));
assertThat(prompt.getDurationSequence(), is(1));
assertThat(prompt.getPromptSequence(), is(new BigDecimal(100)));
assertThat(prompt.getIsFinancialImposition(), is(false));
}

@Test
public void shouldPopulatePromptDefinitionAttributesForDaysDuration() {
final JudicialResultPrompt.Builder builder = JudicialResultHelper.populatePromptDefinitionAttributesBasedOnDuration(
DDP_DISQUALIFICATION_PERIOD, resultDefinition, "Day(s)");

final JudicialResultPrompt prompt = builder.build();

assertThat(prompt.getJudicialResultPromptTypeId(), is(DISQUALIFICATION_PERIOD_PROMPT_ID));
assertThat(prompt.getLabel(), is("Disqualification period"));
assertThat(prompt.getWelshLabel(), is("Cyfnod gwahardd"));
assertThat(prompt.getPromptReference(), is("disqualificationPeriod"));
assertThat(prompt.getType(), is("INTM"));
assertThat(prompt.getCourtExtract(), is("Y"));
assertThat(prompt.getDurationSequence(), is(1));
assertThat(prompt.getPromptSequence(), is(new BigDecimal(100)));
assertThat(prompt.getIsFinancialImposition(), is(false));
}

@Test
public void shouldThrowRuntimeExceptionWhenPromptNotFoundForDuration() {
assertThrows(RuntimeException.class, () ->
JudicialResultHelper.populatePromptDefinitionAttributesBasedOnDuration(
JPrompt.AMOUNT_OF_FINE, resultDefinition, "Year(s)"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
{
"id": "73fe22ca-76bd-4aba-bdea-6dfef8ee03a2",
"version": "2026-07-06T15:43:41.279Z",
"startDate": "2026-07-07",
"label": "Points disqualification",
"shortCode": "DDP",
"level": "O",
"rank": 94000,
"wordGroups": [
{
"wordGroup": [
"DDP"
]
},
{
"wordGroup": [
"disqualification",
"points"
]
}
],
"prompts": [
{
"id": "2bf54447-328c-4c1b-a123-341adbd52172",
"label": "Disqualification period",
"welshLabel": "Cyfnod gwahardd",
"resultPromptRule": "mandatory",
"type": "INTM",
"sequence": 100,
"duration": "Year(s)",
"financial": "N",
"reference": "disqualificationPeriod",
"userGroups": [],
"min": "1",
"max": "999",
"durationSequence": 1,
"welshDuration": "Flynedd",
"courtExtract": "Y",
"jurisdiction": "B",
"hidden": false,
"nameEmail": false,
"associatedWithReferenceData": false
},
{
"id": "2bf54447-328c-4c1b-a123-341adbd52172",
"label": "Disqualification period",
"welshLabel": "Cyfnod gwahardd",
"resultPromptRule": "mandatory",
"type": "INTM",
"sequence": 100,
"duration": "Month(s)",
"financial": "N",
"reference": "disqualificationPeriod",
"userGroups": [],
"min": "1",
"max": "999",
"durationSequence": 1,
"welshDuration": "Mis",
"courtExtract": "Y",
"jurisdiction": "B",
"hidden": false,
"nameEmail": false,
"associatedWithReferenceData": false
},
{
"id": "2bf54447-328c-4c1b-a123-341adbd52172",
"label": "Disqualification period",
"welshLabel": "Cyfnod gwahardd",
"resultPromptRule": "mandatory",
"type": "INTM",
"sequence": 100,
"duration": "Day(s)",
"financial": "N",
"reference": "disqualificationPeriod",
"userGroups": [],
"min": "1",
"max": "999",
"durationSequence": 1,
"welshDuration": "Niwrnod",
"courtExtract": "Y",
"jurisdiction": "B",
"hidden": false,
"nameEmail": false,
"associatedWithReferenceData": false
},
{
"id": "2bf54447-328c-4c1b-a123-341adbd52172",
"label": "Disqualification period",
"welshLabel": "Cyfnod gwahardd",
"resultPromptRule": "mandatory",
"type": "INTM",
"sequence": 100,
"financial": "N",
"reference": "disqualificationPeriod",
"wordGroup": [
"months",
"Years"
],
"userGroups": [],
"min": "1",
"max": "999",
"durationSequence": 1,
"courtExtract": "Y",
"jurisdiction": "B",
"hidden": false,
"nameEmail": false,
"associatedWithReferenceData": false
},
{
"id": "0143f821-7cab-4e53-a00b-2fd1c3dc8204",
"label": "Extension period section 35B (effect of custodial sentence noted)",
"welshLabel": "Cyfnod estyniad adran 35B (effaith dedfryd o garchar wedi’i nodi)",
"resultPromptRule": "optional",
"type": "TXT",
"sequence": 400,
"financial": "N",
"reference": "extensionPeriodSection35BEffectOfCustodialSentenceNoted",
"userGroups": [],
"min": "1",
"max": "100",
"courtExtract": "Y",
"jurisdiction": "B",
"hidden": false,
"nameEmail": false,
"associatedWithReferenceData": false
},
{
"id": "462d5ba8-7a1c-44a0-a732-6c75601bd6af",
"label": "Notional penalty points",
"welshLabel": "Pwyntiau cosb tybiedig",
"resultPromptRule": "mandatory",
"type": "INT",
"sequence": 500,
"financial": "N",
"reference": "notionalPenaltyPoints",
"userGroups": [],
"min": "1",
"max": "999",
"courtExtract": "Y",
"jurisdiction": "B",
"hidden": false,
"nameEmail": false,
"associatedWithReferenceData": false
},
{
"id": "a593ae4a-9d69-45b9-9585-c11aeed28404",
"label": "Defendant driving licence number",
"welshLabel": "Rhif trwydded yrru'r Diffynnydd",
"resultPromptRule": "optional",
"type": "TXT",
"sequence": 600,
"financial": "N",
"reference": "defendantDrivingLicenceNumber",
"userGroups": [
"CPS",
"Defence",
"Judiciary",
"NCES",
"Prosecuting Authorities",
"Probation",
"YOTs"
],
"min": "1",
"max": "16",
"courtExtract": "N",
"jurisdiction": "B",
"hidden": false,
"nameEmail": false,
"cacheable": 2,
"cacheDataPath": "personDefendant.driverNumber",
"associatedWithReferenceData": false
},
{
"id": "81638260-3cd1-41e7-9725-c8e91e23bda1",
"label": "Extension period section 35A (immediate custodial sentence)",
"welshLabel": "Cyfnod estyniad adran 35A (dedfryd o garchar ar unwaith)",
"resultPromptRule": "optional",
"type": "TXT",
"sequence": 300,
"financial": "N",
"reference": "extensionPeriodSection35AImmediateCustodialSentence",
"userGroups": [],
"min": "1",
"max": "100",
"courtExtract": "Y",
"jurisdiction": "B",
"hidden": false,
"nameEmail": false,
"associatedWithReferenceData": false
}
],
"financial": "N",
"unscheduled": false,
"adjournment": "N",
"category": "A",
"urgent": true,
"convicted": "Y",
"d20": true,
"cjsCode": "3072",
"postHearingCustodyStatus": "A",
"terminatesOffenceProceedings": false,
"lifeDuration": false,
"rollUpPrompts": true,
"publishedForNows": false,
"publishedAsAPrompt": false,
"excludedFromResults": false,
"alwaysPublished": false,
"jurisdiction": "B",
"libraCode": "DDP",
"resultWording": "Disqualified for holding or obtaining a driving licence. Disqualification obligatory due to repeat offending. Driving record endorsed. Section 35(1) Road Traffic Offenders Act 1988",
"welshResultWording": "Gwahardd rhag dal neu gael trwydded yrru. Gwaharddiad yn orfodol oherwydd aildroseddu. Cofnod gyrru wedi’i ardystio. Adran 35 (1) Deddf Troseddwyr Traffig Ffyrdd 1988",
"resultDefinitionRules": [
{
"childResultDefinitionId": "429fb553-4fb3-45eb-a700-7e5e69d1ca29",
"ruleType": "mandatory"
},
{
"childResultDefinitionId": "ea1ee5a4-be13-48dc-8411-78f22e01c236",
"ruleType": "optional"
}
],
"canBeSubjectOfBreach": false,
"canBeSubjectOfVariation": true,
"pointsDisqualificationCode": "TT99",
"resultTextTemplate": "Disqualified for holding or obtaining a driving licence for {disqualificationPeriod}.[ %INTD%] Disqualification obligatory due to repeat offending. Driving record endorsed.[ ({notionalPenaltyPoints} penalty points determined).] Section 35(1) Road Traffic Offenders Act 1988.[ This includes an extension period of {extensionPeriodSection35AImmediateCustodialSentence} in accordance with section 35A (immediate custodial sentence).][ This includes an extension period of {extensionPeriodSection35BEffectOfCustodialSentenceNoted} in accordance with section 35B (effect of custodial sentence noted).]",
"sentToCC": false,
"committedToCC": false,
"isDeemedServed": false,
"unpaidWorkExtensionCommunityOrdYro": false,
"isAvailableForCourtExtract": true,
"isBooleanResult": false
}
Loading