UNPKG

@ministryofjustice/hmpps-prison-permissions-lib

Version:

A library to centralise the process of determining whether a user should have access to create/read/update/delete a prison resource, for example, accessing a prisoner's Prisoner Profile.

1 lines 188 kB
{"version":3,"file":"index.cjs","sources":["../src/types/internal/permissions/PermissionCheckStatus.ts","../src/services/permissions/PermissionsLogger.ts","../src/data/hmppsPrisonerSearch/PrisonerSearchClient.ts","../src/types/public/permissions/domains/sentenceAndOffence/personSentenceCalculation/PersonSentenceCalculationPermissions.ts","../src/types/internal/user/Role.ts","../src/types/public/permissions/prisoner/PrisonerPermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerAdjudications/PrisonerAdjudicationsPermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerAdjudications/PrisonerAdjudicationsPermissionPaths.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerMoney/PrisonerMoneyPermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerMoney/PrisonerMoneyPermissionPaths.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerIncentives/PrisonerIncentivesPermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerIncentives/PrisonerIncentivesPermissionPaths.ts","../src/types/public/permissions/domains/prisonerSpecific/personPrisonCategory/PersonPrisonCategoryPermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/personPrisonCategory/PersonPrisonCategoryPermissionPaths.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerSchedule/PrisonerSchedulePermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerSchedule/PrisonerSchedulePermissionPaths.ts","../src/types/public/permissions/domains/prisonerSpecific/useOfForce/UseOfForcePermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/useOfForce/UseOfForcePermissionPaths.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerAlerts/PrisonerAlertsPermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerAlerts/PrisonerAlertsPermissionPaths.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerSpecificRisks/PrisonerSpecificRisksPermissions.ts","../src/types/public/permissions/domains/prisonerSpecific/prisonerSpecificRisks/PrisonerSpecificRisksPermissionPaths.ts","../src/types/public/permissions/domains/prisonerSpecific/PrisonerSpecificDomainPermissionPaths.ts","../src/types/public/permissions/domains/sentenceAndOffence/personSentenceCalculation/PersonSentenceCalculationPermissionPaths.ts","../src/types/public/permissions/domains/sentenceAndOffence/SentenceAndOffenceDomainPermissionPaths.ts","../src/types/public/permissions/domains/runningAPrison/prisonerVisitsAndVisitors/PrisonerVisitsAndVisitorsPermissions.ts","../src/types/public/permissions/domains/runningAPrison/prisonerVisitsAndVisitors/PrisonerVisitsAndVisitorsPermissionPaths.ts","../src/types/public/permissions/domains/runningAPrison/prisonerBaseLocation/PrisonerBaseLocationPermissions.ts","../src/types/public/permissions/domains/runningAPrison/prisonerBaseLocation/PrisonerBaseLocationPermissionPaths.ts","../src/types/public/permissions/domains/runningAPrison/prisonerMoves/PrisonerMovesPermissions.ts","../src/types/public/permissions/domains/runningAPrison/prisonerMoves/PrisonerMovesPermissionPaths.ts","../src/types/public/permissions/domains/runningAPrison/RunningAPrisonDomainPermissionPaths.ts","../src/types/public/permissions/domains/person/caseNotes/CaseNotesPermissions.ts","../src/types/public/permissions/domains/person/caseNotes/CaseNotesPermissionPaths.ts","../src/types/public/permissions/domains/person/corePersonRecord/CorePersonRecordPermissions.ts","../src/types/public/permissions/domains/person/corePersonRecord/CorePersonRecordPermissionPaths.ts","../src/types/public/permissions/domains/person/personProtectedCharacteristics/PersonProtectedCharacteristicsPermissions.ts","../src/types/public/permissions/domains/person/personProtectedCharacteristics/PersonProtectedCharacteristicsPermissionPaths.ts","../src/types/public/permissions/domains/person/personHealthAndMedication/PersonHealthAndMedicationPermissions.ts","../src/types/public/permissions/domains/person/personHealthAndMedication/PersonHealthAndMedicationPermissionPaths.ts","../src/types/public/permissions/domains/person/personalRelationships/PersonalRelationshipsPermissions.ts","../src/types/public/permissions/domains/person/personalRelationships/PersonalRelationshipsPermissionPaths.ts","../src/types/public/permissions/domains/person/PersonDomainPermissionPaths.ts","../src/types/public/permissions/domains/security/pathfinder/PathfinderPermissions.ts","../src/types/public/permissions/domains/security/pathfinder/PathfinderPermissionPaths.ts","../src/types/public/permissions/domains/security/soc/SOCPermissions.ts","../src/types/public/permissions/domains/security/soc/SOCPermissionPaths.ts","../src/types/public/permissions/domains/security/SecurityDomainPermissionPaths.ts","../src/types/public/permissions/domains/probation/probationDocuments/ProbationDocumentsPermissions.ts","../src/types/public/permissions/domains/probation/probationDocuments/ProbationDocumentsPermissionPaths.ts","../src/types/public/permissions/domains/probation/ProbationDomainPermissionPaths.ts","../src/types/public/permissions/domains/interventions/personInterventions/PersonInterventionsPermissions.ts","../src/types/public/permissions/domains/interventions/personInterventions/PersonInterventionsPermissionPaths.ts","../src/types/public/permissions/domains/interventions/InterventionsDomainPermissionPaths.ts","../src/types/public/permissions/domains/personPlanAndNeeds/personCommunicationNeeds/PersonCommunicationNeedsPermissions.ts","../src/types/public/permissions/domains/personPlanAndNeeds/personCommunicationNeeds/PersonCommunicationNeedsPermissionPaths.ts","../src/types/public/permissions/domains/personPlanAndNeeds/PersonPlanAndNeedsDomainPermissionPaths.ts","../src/types/public/permissions/prisoner/PrisonerPermissionPaths.ts","../src/types/public/permissions/prisoner/PrisonerPermissionsUtils.ts","../src/services/permissions/utils/PermissionUtils.ts","../src/services/permissions/PrisonerPermissionConditions.ts","../src/services/permissions/checks/baseCheck/status/RestrictedPatientStatus.ts","../src/services/permissions/checks/baseCheck/status/ReleasedPrisonerStatus.ts","../src/services/permissions/checks/baseCheck/status/TransferringPrisonerStatus.ts","../src/services/permissions/checks/baseCheck/status/PrisonNotInCaseloadStatus.ts","../src/services/permissions/checks/baseCheck/status/BaseCheckStatus.ts","../src/services/permissions/utils/PermissionCheckUtils.ts","../src/services/permissions/checks/sharedChecks/baseCheckAndUserHasAllRoles/BaseCheckAndUserHasAllRoles.ts","../src/services/permissions/checks/sharedChecks/baseCheckAndUserHasRole/BaseCheckAndUserHasRole.ts","../src/services/permissions/checks/domains/sentenceAndOffence/personSentenceCalculation/sentenceCalculationRead/SentenceCalculationReadCheck.ts","../src/services/permissions/checks/domains/sentenceAndOffence/personSentenceCalculation/sentenceCalculationAdjustmentEdit/SentenceCalculationEditAdjustmentCheck.ts","../src/services/permissions/checks/domains/sentenceAndOffence/personSentenceCalculation/PersonSentenceCalculationCheck.ts","../src/services/permissions/checks/domains/sentenceAndOffence/SentenceAndOffenceCheck.ts","../src/services/permissions/checks/baseCheck/BaseCheck.ts","../src/services/permissions/checks/sharedChecks/inUsersCaseLoad/InUsersCaseLoad.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerMoney/prisonerMoneyRead/PrisonerMoneyReadCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerMoney/PrisonerMoneyCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerAdjudications/prisonerAdjudicationsRead/PrisonerAdjudicationsReadCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerAdjudications/PrisonerAdjudicationsCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerIncentives/incentiveLevelHistoryRead/IncentiveLevelHistoryReadCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerIncentives/PrisonerIncentivesCheck.ts","../src/services/permissions/checks/sharedChecks/baseCheckAndUserHasSomeRolesFrom/BaseCheckAndUserHasSomeRolesFrom.ts","../src/services/permissions/checks/domains/prisonerSpecific/personPrisonCategory/personPrisonCategoryEdit/PersonPrisonCategoryEditCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/personPrisonCategory/PersonPrisonCategoryCheck.ts","../src/services/permissions/checks/sharedChecks/inActiveCaseLoadAndUserHasSomeRolesFrom/InActiveCaseLoadAndUserHasSomeRolesFrom.ts","../src/services/permissions/checks/sharedChecks/inActiveCaseLoad/InActiveCaseLoad.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerSchedule/prisonerAppointmentEdit/PrisonerAppointmentEditCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerSchedule/prisonerActivityEdit/PrisonerActivityEditCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerSchedule/PrisonerScheduleCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/useOfForce/useOfForceEdit/UseOfForceEditCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/useOfForce/UseOfForceCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/personAlerts/prisonerAlertsEdit/PrisonerAlertsEditCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/personAlerts/PrisonerAlertsCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerSpecificRisks/csraRead/CsraAssessmentHistoryReadCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/prisonerSpecificRisks/PrisonerSpecificRisksCheck.ts","../src/services/permissions/checks/domains/prisonerSpecific/PrisonerSpecificCheck.ts","../src/services/permissions/checks/domains/runningAPrison/prisonerVisitsAndVisitors/prisonerVisitsAndVisitorsRead/PrisonerVisitsAndVisitorsReadCheck.ts","../src/services/permissions/checks/domains/runningAPrison/prisonerVisitsAndVisitors/PrisonerVisitsAndVisitorsCheck.ts","../src/services/permissions/checks/domains/runningAPrison/prisonerBaseLocation/moveCell/MoveCellCheck.ts","../src/services/permissions/checks/domains/runningAPrison/prisonerBaseLocation/locationDetailsAndHistoryRead/LocationDetailsAndHistoryReadCheck.ts","../src/services/permissions/checks/domains/runningAPrison/prisonerBaseLocation/PrisonerBaseLocationCheck.ts","../src/services/permissions/checks/domains/runningAPrison/prisonerMoves/PrisonerMovesCheck.ts","../src/services/permissions/checks/domains/runningAPrison/RunningAPrisonCheck.ts","../src/services/permissions/utils/DateUtils.ts","../src/services/permissions/checks/domains/person/caseNotes/CaseNotesReadAndEditCheck.ts","../src/services/permissions/checks/domains/person/caseNotes/sensitiveCaseNotesRead/SensitiveCaseNotesReadCheck.ts","../src/services/permissions/checks/domains/person/caseNotes/sensitiveCaseNotesDelete/SensitiveCaseNotesDeleteCheck.ts","../src/services/permissions/checks/domains/person/caseNotes/sensitiveCaseNotesEdit/SensitiveCaseNotesEditCheck.ts","../src/services/permissions/checks/domains/person/caseNotes/CaseNotesCheck.ts","../src/services/permissions/checks/sharedChecks/prisonerProfileEditCheck/PrisonerProfileEditCheck.ts","../src/services/permissions/checks/sharedChecks/inActiveCaseLoadAndUserHasRole/InActiveCaseLoadAndUserHasRole.ts","../src/services/permissions/checks/sharedChecks/prisonerProfileSensitiveEditCheck/PrisonerProfileSensitiveEditCheck.ts","../src/services/permissions/checks/domains/person/corePersonRecord/photo/PhotoReadCheck.ts","../src/services/permissions/checks/domains/person/corePersonRecord/CorePersonRecordCheck.ts","../src/services/permissions/checks/domains/person/personProtectedCharacteristics/PersonProtectedCharacteristicsCheck.ts","../src/services/permissions/checks/domains/person/personHealthAndMedication/dietRead/DietReadCheck.ts","../src/services/permissions/checks/domains/person/personHealthAndMedication/dietEdit/DietEditCheck.ts","../src/services/permissions/checks/domains/person/personHealthAndMedication/PersonHealthAndMedicationCheck.ts","../src/services/permissions/checks/sharedChecks/inUsersCaseLoadAndUserHasSomeRolesFrom/InUsersCaseLoadAndUserHasSomeRolesFrom.ts","../src/services/permissions/checks/sharedChecks/inUsersCaseLoadAndUserHasRole/InUsersCaseLoadAndUserHasRole.ts","../src/services/permissions/checks/sharedChecks/contactsReadCheck/contactsReadCheck.ts","../src/services/permissions/checks/domains/person/personalRelationships/PersonalRelationshipsCheck.ts","../src/services/permissions/checks/domains/person/PersonCheck.ts","../src/services/permissions/checks/domains/security/pathfinder/pathfinderRead/PathfinderReadCheck.ts","../src/services/permissions/checks/domains/security/pathfinder/pathfinderEdit/PathfinderEditCheck.ts","../src/services/permissions/checks/domains/security/pathfinder/PathfinderCheck.ts","../src/services/permissions/checks/domains/security/soc/socRead/SOCReadCheck.ts","../src/services/permissions/checks/domains/security/soc/socEdit/SOCEditCheck.ts","../src/services/permissions/checks/domains/security/soc/SOCCheck.ts","../src/services/permissions/checks/domains/security/SecurityCheck.ts","../src/services/permissions/checks/domains/probation/probationDocuments/probationDocumentsRead/ProbationDocumentsReadCheck.ts","../src/services/permissions/checks/domains/probation/probationDocuments/ProbationDocumentsCheck.ts","../src/services/permissions/checks/domains/probation/ProbationCheck.ts","../src/services/permissions/checks/domains/interventions/personInterventions/PersonInterventionsCheck.ts","../src/services/permissions/checks/domains/interventions/InterventionsCheck.ts","../src/services/permissions/checks/domains/personPlanAndNeeds/personCommunicationNeeds/PersonCommunicationNeedsCheck.ts","../src/services/permissions/checks/domains/personPlanAndNeeds/PersonPlanAndNeedsCheck.ts","../src/services/permissions/PermissionsService.ts","../src/types/public/errors/PrisonerPermissionError.ts","../src/middleware/PrisonerPermissionsGuard.ts","../src/view/SetupNunjucksPermissions.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport enum PermissionCheckStatus {\n NOT_PERMITTED = 'NOT_PERMITTED', // Generic not permitted status - default\n NOT_IN_CASELOAD = 'NOT_IN_CASELOAD',\n NOT_ACTIVE_CASELOAD = 'NOT_ACTIVE_CASELOAD',\n RESTRICTED_PATIENT = 'RESTRICTED_PATIENT',\n PRISONER_IS_RELEASED = 'PRISONER_IS_RELEASED',\n PRISONER_IS_TRANSFERRING = 'PRISONER_IS_TRANSFERRING',\n EXCEEDS_TIME_RESTRICTION = 'EXCEEDS_TIME_RESTRICTION',\n ROLE_NOT_PRESENT = 'ROLE_NOT_PRESENT',\n NOT_PRISON_USER = 'NOT_PRISON_USER',\n READ_ONLY = 'READ_ONLY',\n OK = 'OK',\n}\n","import { TelemetryClient } from 'applicationinsights'\nimport type Logger from 'bunyan'\nimport { PermissionCheckStatus } from '../../types/internal/permissions/PermissionCheckStatus'\nimport { HmppsUser } from '../../types/internal/user/HmppsUser'\nimport Prisoner from '../../data/hmppsPrisonerSearch/interfaces/Prisoner'\nimport { PrisonerPermission } from '../../types/public/permissions/prisoner/PrisonerPermissions'\n\nexport default class PermissionsLogger {\n constructor(\n private readonly logger: Logger | Console,\n private readonly telemetryClient?: TelemetryClient,\n ) {}\n\n logPermissionCheckStatus(\n user: HmppsUser,\n prisoner: Prisoner,\n permission: PrisonerPermission,\n permissionCheckStatus: PermissionCheckStatus,\n ) {\n if (permissionCheckStatus === PermissionCheckStatus.OK) return\n\n if (this.telemetryClient) {\n this.telemetryClient.trackEvent({\n name: 'prisoner-permission-denied',\n properties: {\n username: user.username,\n prisonerNumber: prisoner.prisonerNumber,\n activeCaseLoad: user.authSource === 'nomis' && user.activeCaseLoadId,\n permissionChecked: permission,\n status: permissionCheckStatus,\n },\n })\n } else {\n this.logger.info(`Prisoner permission denied: ${permission} (${permissionCheckStatus}) for user ${user.username}`)\n }\n }\n\n logPermissionGrantedByDuplicate(\n user: HmppsUser,\n prisoner: Prisoner,\n duplicateRecords: Prisoner[],\n permission: PrisonerPermission,\n ) {\n if (this.telemetryClient) {\n this.telemetryClient.trackEvent({\n name: 'prisoner-permission-requirement-upgraded-by-duplicate',\n properties: {\n username: user.username,\n prisonerNumber: prisoner.prisonerNumber,\n duplicatePrisonerNumbers: duplicateRecords.map(record => record.prisonerNumber).join(','),\n activeCaseLoad: user.authSource === 'nomis' && user.activeCaseLoadId,\n permissionChecked: permission,\n },\n })\n } else {\n this.logger.info(`Required prisoner permission upgraded by duplicate: ${permission} for user ${user.username}`)\n }\n }\n}\n","import { RestClient, ApiConfig, AuthenticationClient, asSystem } from '@ministryofjustice/hmpps-rest-client'\nimport type Logger from 'bunyan'\nimport Prisoner from './interfaces/Prisoner'\n\nexport default class PrisonerSearchClient extends RestClient {\n constructor(logger: Logger | Console, config: ApiConfig, authenticationClient: AuthenticationClient) {\n super('Prisoner Search', config, logger, authenticationClient)\n }\n\n getPrisonerDetails(prisonerNumber: string): Promise<Prisoner> {\n return this.get<Prisoner>({ path: `/prisoner/${prisonerNumber}` }, asSystem())\n }\n}\n","export enum PersonSentenceCalculationPermission {\n read = 'prisoner:person-sentence-calculation:read',\n edit_adjustments = 'prisoner:person-sentence-calculation:adjustments:edit',\n}\n\nexport type PersonSentenceCalculationPermissions = Record<PersonSentenceCalculationPermission, boolean>\n","// eslint-disable-next-line import/prefer-default-export\nexport enum Role {\n ActivityHub = 'ROLE_ACTIVITY_HUB',\n AddSensitiveCaseNotes = 'ROLE_ADD_SENSITIVE_CASE_NOTES',\n AdjustmentsMaintainer = 'ROLE_ADJUSTMENTS_MAINTAINER',\n ApproveCategorisation = 'ROLE_APPROVE_CATEGORISATION',\n CategorisationSecurity = 'ROLE_CATEGORISATION_SECURITY',\n CellMove = 'ROLE_CELL_MOVE',\n ContactsAdministrator = 'ROLE_CONTACTS_ADMINISTRATOR',\n ContactsAuthoriser = 'ROLE_CONTACTS_AUTHORISER',\n CreateCategorisation = 'ROLE_CREATE_CATEGORISATION',\n CreateRecategorisation = 'ROLE_CREATE_RECATEGORISATION',\n DeleteSensitiveCaseNotes = 'ROLE_DELETE_SENSITIVE_CASE_NOTES',\n DietAndAllergiesEdit = 'ROLE_DIET_AND_FOOD_ALLERGIES_EDIT',\n ExternalMovementsTemporaryAbsenceManagement = 'ROLE_EXTERNAL_MOVEMENTS_TAP_RW',\n ExternalMovementsTemporaryAbsenceViewOnly = 'ROLE_EXTERNAL_MOVEMENTS_TAP_RO',\n GlobalSearch = 'ROLE_GLOBAL_SEARCH',\n InactiveBookings = 'ROLE_INACTIVE_BOOKINGS',\n PathfinderApproval = 'ROLE_PF_APPROVAL',\n PathfinderHQ = 'ROLE_PF_HQ',\n PathfinderLocalReader = 'ROLE_PF_LOCAL_READER',\n PathfinderNationalReader = 'ROLE_PF_NATIONAL_READER',\n PathfinderPolice = 'ROLE_PF_POLICE',\n PathfinderPsychologist = 'ROLE_PF_PSYCHOLOGIST',\n PathfinderStdPrison = 'ROLE_PF_STD_PRISON',\n PathfinderStdProbation = 'ROLE_PF_STD_PROBATION',\n PathfinderUser = 'ROLE_PF_USER',\n PomUser = 'ROLE_POM',\n PrisonerProfilePhotoUpload = 'ROLE_PRISONER_PROFILE_PHOTO_UPLOAD',\n PrisonerProfileSensitiveEdit = 'ROLE_PRISONER_PROFILE_SENSITIVE_RW',\n ReceptionUser = 'ROLE_PRISON_RECEPTION',\n ReleaseDatesCalculator = 'ROLE_RELEASE_DATES_CALCULATOR',\n SocCommunity = 'ROLE_SOC_COMMUNITY',\n SocCustody = 'ROLE_SOC_CUSTODY',\n SocDataAnalyst = 'ROLE_SOC_DATA_ANALYST',\n SocDataManager = 'ROLE_SOC_DATA_MANAGER',\n UpdateAlert = 'ROLE_UPDATE_ALERT',\n ViewProbationDocuments = 'ROLE_VIEW_PROBATION_DOCUMENTS',\n ViewSensitiveCaseNotes = 'ROLE_VIEW_SENSITIVE_CASE_NOTES',\n}\n","import {\n SentenceAndOffenceDomainPermission,\n SentenceAndOffenceDomainPermissions,\n} from '../domains/sentenceAndOffence/SentenceAndOffenceDomainPermissions'\nimport {\n PrisonerSpecificDomainPermission,\n PrisonerSpecificDomainPermissions,\n} from '../domains/prisonerSpecific/PrisonerSpecificDomainPermissions'\nimport {\n RunningAPrisonDomainPermission,\n RunningAPrisonDomainPermissions,\n} from '../domains/runningAPrison/RunningAPrisonDomainPermissions'\nimport { PersonDomainPermission, PersonDomainPermissions } from '../domains/person/PersonDomainPermissions'\nimport { SecurityDomainPermission, SecurityDomainPermissions } from '../domains/security/SecurityDomainPermissions'\nimport { ProbationDomainPermissions } from '../domains/probation/ProbationDomainPermissions'\nimport { ProbationDocumentsPermission } from '../domains/probation/probationDocuments/ProbationDocumentsPermissions'\nimport {\n InterventionsDomainPermission,\n InterventionsDomainPermissions,\n} from '../domains/interventions/InterventionsDomainPermissions'\nimport {\n PersonPlanAndNeedsDomainPermission,\n PersonPlanAndNeedsDomainPermissions,\n} from '../domains/personPlanAndNeeds/PersonPlanAndNeedsDomainPermissions'\n\nexport enum PrisonerBasePermission {\n read = 'prisoner:base-record:read',\n}\n\n/**\n * These permissions define what a HMPPS user can do with respect to data held about a prisoner.\n */\nexport interface PrisonerPermissions {\n [PrisonerBasePermission.read]: boolean\n\n domainGroups: {\n interventions: InterventionsDomainPermissions\n person: PersonDomainPermissions\n personPlanAndNeeds: PersonPlanAndNeedsDomainPermissions\n prisonerSpecific: PrisonerSpecificDomainPermissions\n probation: ProbationDomainPermissions\n runningAPrison: RunningAPrisonDomainPermissions\n security: SecurityDomainPermissions\n sentenceAndOffence: SentenceAndOffenceDomainPermissions\n }\n}\n\nexport type PrisonerPermission =\n | PrisonerBasePermission\n | InterventionsDomainPermission\n | PersonDomainPermission\n | PersonPlanAndNeedsDomainPermission\n | PrisonerSpecificDomainPermission\n | ProbationDocumentsPermission\n | RunningAPrisonDomainPermission\n | SecurityDomainPermission\n | SentenceAndOffenceDomainPermission\n","export enum PrisonerAdjudicationsPermission {\n read = 'prisoner:prisoner-adjudications:read',\n}\n\nexport type PrisonerAdjudicationsPermissions = Record<PrisonerAdjudicationsPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PrisonerAdjudicationsPermission } from './PrisonerAdjudicationsPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerAdjudicationsPermissionPaths: Record<\n PrisonerAdjudicationsPermission,\n Path<PrisonerPermissions>\n> = {\n [PrisonerAdjudicationsPermission.read]: `domainGroups.prisonerSpecific.prisonerAdjudications.${PrisonerAdjudicationsPermission.read}`,\n}\n","export enum PrisonerMoneyPermission {\n read = 'prisoner:prisoner-money:read',\n}\n\nexport type PrisonerMoneyPermissions = Record<PrisonerMoneyPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { PrisonerMoneyPermission } from './PrisonerMoneyPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerMoneyPermissionPaths: Record<PrisonerMoneyPermission, Path<PrisonerPermissions>> = {\n [PrisonerMoneyPermission.read]: `domainGroups.prisonerSpecific.prisonerMoney.${PrisonerMoneyPermission.read}`,\n}\n","export enum PrisonerIncentivesPermission {\n read_incentive_level = 'prisoner:incentives:incentive-level:read',\n read_incentive_level_history = 'prisoner:incentives:incentive-level-history:read',\n}\n\nexport type PrisonerIncentivesPermissions = Record<PrisonerIncentivesPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PrisonerIncentivesPermission } from './PrisonerIncentivesPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerIncentivesPermissionPaths: Record<PrisonerIncentivesPermission, Path<PrisonerPermissions>> = {\n [PrisonerIncentivesPermission.read_incentive_level]: `domainGroups.prisonerSpecific.prisonerIncentives.${PrisonerIncentivesPermission.read_incentive_level}`,\n [PrisonerIncentivesPermission.read_incentive_level_history]: `domainGroups.prisonerSpecific.prisonerIncentives.${PrisonerIncentivesPermission.read_incentive_level_history}`,\n}\n","export enum PersonPrisonCategoryPermission {\n read = 'prisoner:person-prison-category:read',\n edit = 'prisoner:person-prison-category:edit',\n}\n\nexport type PersonPrisonCategoryPermissions = Record<PersonPrisonCategoryPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PersonPrisonCategoryPermission } from './PersonPrisonCategoryPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const personPrisonCategoryPermissionPaths: Record<PersonPrisonCategoryPermission, Path<PrisonerPermissions>> = {\n [PersonPrisonCategoryPermission.read]: `domainGroups.prisonerSpecific.personPrisonCategory.${PersonPrisonCategoryPermission.read}`,\n [PersonPrisonCategoryPermission.edit]: `domainGroups.prisonerSpecific.personPrisonCategory.${PersonPrisonCategoryPermission.edit}`,\n}\n","export enum PrisonerSchedulePermission {\n read_schedule = 'prisoner:schedule:read',\n edit_appointment = 'prisoner:appointment:edit',\n edit_activity = 'prisoner:activity:edit',\n}\n\nexport type PrisonerSchedulePermissions = Record<PrisonerSchedulePermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PrisonerSchedulePermission } from './PrisonerSchedulePermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerSchedulePermissionPaths: Record<PrisonerSchedulePermission, Path<PrisonerPermissions>> = {\n [PrisonerSchedulePermission.read_schedule]: `domainGroups.prisonerSpecific.prisonerSchedule.${PrisonerSchedulePermission.read_schedule}`,\n [PrisonerSchedulePermission.edit_appointment]: `domainGroups.prisonerSpecific.prisonerSchedule.${PrisonerSchedulePermission.edit_appointment}`,\n [PrisonerSchedulePermission.edit_activity]: `domainGroups.prisonerSpecific.prisonerSchedule.${PrisonerSchedulePermission.edit_activity}`,\n}\n","export enum UseOfForcePermission {\n edit = 'prisoner:use-of-force:edit',\n}\n\nexport type UseOfForcePermissions = Record<UseOfForcePermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { UseOfForcePermission } from './UseOfForcePermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const useOfForcePermissionPaths: Record<UseOfForcePermission, Path<PrisonerPermissions>> = {\n [UseOfForcePermission.edit]: `domainGroups.prisonerSpecific.useOfForce.${UseOfForcePermission.edit}`,\n}\n","export enum PrisonerAlertsPermission {\n edit = 'prisoner:prisoner-alerts:edit',\n}\n\nexport type PrisonerAlertsPermissions = Record<PrisonerAlertsPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PrisonerAlertsPermission } from './PrisonerAlertsPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerAlertsPermissionPaths: Record<PrisonerAlertsPermission, Path<PrisonerPermissions>> = {\n [PrisonerAlertsPermission.edit]: `domainGroups.prisonerSpecific.prisonerAlerts.${PrisonerAlertsPermission.edit}`,\n}\n","export enum PrisonerSpecificRisksPermission {\n read_csra_rating = 'prisoner:csra-rating:read',\n read_csra_assessment_history = 'prisoner:csra-assessment-history:read',\n}\n\nexport type PrisonerSpecificRisksPermissions = Record<PrisonerSpecificRisksPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { PrisonerSpecificRisksPermission } from './PrisonerSpecificRisksPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerSpecificRisksPermissionPaths: Record<\n PrisonerSpecificRisksPermission,\n Path<PrisonerPermissions>\n> = {\n [PrisonerSpecificRisksPermission.read_csra_rating]: `domainGroups.prisonerSpecific.prisonerSpecificRisks.${PrisonerSpecificRisksPermission.read_csra_rating}`,\n [PrisonerSpecificRisksPermission.read_csra_assessment_history]: `domainGroups.prisonerSpecific.prisonerSpecificRisks.${PrisonerSpecificRisksPermission.read_csra_assessment_history}`,\n}\n","import { PrisonerSpecificDomainPermission } from './PrisonerSpecificDomainPermissions'\nimport { PrisonerPermissions } from '../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../internal/utils/Path'\nimport { prisonerAdjudicationsPermissionPaths } from './prisonerAdjudications/PrisonerAdjudicationsPermissionPaths'\nimport { prisonerMoneyPermissionPaths } from './prisonerMoney/PrisonerMoneyPermissionPaths'\nimport { prisonerIncentivesPermissionPaths } from './prisonerIncentives/PrisonerIncentivesPermissionPaths'\nimport { personPrisonCategoryPermissionPaths } from './personPrisonCategory/PersonPrisonCategoryPermissionPaths'\nimport { prisonerSchedulePermissionPaths } from './prisonerSchedule/PrisonerSchedulePermissionPaths'\nimport { useOfForcePermissionPaths } from './useOfForce/UseOfForcePermissionPaths'\nimport { prisonerAlertsPermissionPaths } from './prisonerAlerts/PrisonerAlertsPermissionPaths'\nimport { prisonerSpecificRisksPermissionPaths } from './prisonerSpecificRisks/PrisonerSpecificRisksPermissionPaths'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerSpecificDomainPermissionPaths: Record<\n PrisonerSpecificDomainPermission,\n Path<PrisonerPermissions>\n> = {\n ...prisonerMoneyPermissionPaths,\n ...prisonerAdjudicationsPermissionPaths,\n ...prisonerIncentivesPermissionPaths,\n ...personPrisonCategoryPermissionPaths,\n ...prisonerSchedulePermissionPaths,\n ...useOfForcePermissionPaths,\n ...prisonerAlertsPermissionPaths,\n ...prisonerSpecificRisksPermissionPaths,\n}\n","import { Path } from '../../../../../internal/utils/Path'\nimport { PersonSentenceCalculationPermission } from './PersonSentenceCalculationPermissions'\nimport { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const personSentenceCalculationPermissionPaths: Record<\n PersonSentenceCalculationPermission,\n Path<PrisonerPermissions>\n> = {\n [PersonSentenceCalculationPermission.read]: `domainGroups.sentenceAndOffence.personSentenceCalculation.${PersonSentenceCalculationPermission.read}`,\n [PersonSentenceCalculationPermission.edit_adjustments]: `domainGroups.sentenceAndOffence.personSentenceCalculation.${PersonSentenceCalculationPermission.edit_adjustments}`,\n}\n","import { SentenceAndOffenceDomainPermission } from './SentenceAndOffenceDomainPermissions'\nimport { Path } from '../../../../internal/utils/Path'\nimport { PrisonerPermissions } from '../../prisoner/PrisonerPermissions'\nimport { personSentenceCalculationPermissionPaths } from './personSentenceCalculation/PersonSentenceCalculationPermissionPaths'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const sentenceAndOffenceDomainPermissionPaths: Record<\n SentenceAndOffenceDomainPermission,\n Path<PrisonerPermissions>\n> = {\n ...personSentenceCalculationPermissionPaths,\n}\n","export enum PrisonerVisitsAndVisitorsPermission {\n read = 'prisoner:prisoner-visits-and-visitors:read',\n}\n\nexport type PrisonerVisitsAndVisitorsPermissions = Record<PrisonerVisitsAndVisitorsPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PrisonerVisitsAndVisitorsPermission } from './PrisonerVisitsAndVisitorsPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerVisitsAndVisitorsPermissionPaths: Record<\n PrisonerVisitsAndVisitorsPermission,\n Path<PrisonerPermissions>\n> = {\n [PrisonerVisitsAndVisitorsPermission.read]: `domainGroups.runningAPrison.prisonerVisitsAndVisitors.${PrisonerVisitsAndVisitorsPermission.read}`,\n}\n","export enum PrisonerBaseLocationPermission {\n read_location_details = 'prisoner:location-details:read',\n read_location_history = 'prisoner:location-history:read',\n move_cell = 'prisoner:location-cell:edit',\n}\n\nexport type PrisonerBaseLocationPermissions = Record<PrisonerBaseLocationPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PrisonerBaseLocationPermission } from './PrisonerBaseLocationPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerBaseLocationPermissionPaths: Record<PrisonerBaseLocationPermission, Path<PrisonerPermissions>> = {\n [PrisonerBaseLocationPermission.read_location_details]: `domainGroups.runningAPrison.prisonerBaseLocation.${PrisonerBaseLocationPermission.read_location_details}`,\n [PrisonerBaseLocationPermission.read_location_history]: `domainGroups.runningAPrison.prisonerBaseLocation.${PrisonerBaseLocationPermission.read_location_history}`,\n [PrisonerBaseLocationPermission.move_cell]: `domainGroups.runningAPrison.prisonerBaseLocation.${PrisonerBaseLocationPermission.move_cell}`,\n}\n","export enum PrisonerMovesPermission {\n read_temporary_absence = 'prisoner:temporary-absence:read',\n edit_temporary_absence = 'prisoner:temporary-absence:edit',\n}\n\nexport type PrisonerMovesPermissions = Record<PrisonerMovesPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PrisonerMovesPermission } from './PrisonerMovesPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const prisonerMovesPermissionPaths: Record<PrisonerMovesPermission, Path<PrisonerPermissions>> = {\n [PrisonerMovesPermission.read_temporary_absence]: `domainGroups.runningAPrison.prisonerMoves.${PrisonerMovesPermission.read_temporary_absence}`,\n [PrisonerMovesPermission.edit_temporary_absence]: `domainGroups.runningAPrison.prisonerMoves.${PrisonerMovesPermission.edit_temporary_absence}`,\n}\n","import { PrisonerPermissions } from '../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../internal/utils/Path'\nimport { RunningAPrisonDomainPermission } from './RunningAPrisonDomainPermissions'\nimport { prisonerVisitsAndVisitorsPermissionPaths } from './prisonerVisitsAndVisitors/PrisonerVisitsAndVisitorsPermissionPaths'\nimport { prisonerBaseLocationPermissionPaths } from './prisonerBaseLocation/PrisonerBaseLocationPermissionPaths'\nimport { prisonerMovesPermissionPaths } from './prisonerMoves/PrisonerMovesPermissionPaths'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const runningAPrisonDomainPermissionPaths: Record<RunningAPrisonDomainPermission, Path<PrisonerPermissions>> = {\n ...prisonerVisitsAndVisitorsPermissionPaths,\n ...prisonerBaseLocationPermissionPaths,\n ...prisonerMovesPermissionPaths,\n}\n","export enum CaseNotesPermission {\n read = 'prisoner:case-notes:read',\n edit = 'prisoner:case-notes:edit',\n read_sensitive = 'prisoner:case-notes:sensitive:read',\n delete_sensitive = 'prisoner:case-notes:sensitive:delete',\n edit_sensitive = 'prisoner:case-notes:sensitive:edit',\n}\n\nexport type CaseNotesPermissions = Record<CaseNotesPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { CaseNotesPermission } from './CaseNotesPermissions'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const caseNotesPermissionPaths: Record<CaseNotesPermission, Path<PrisonerPermissions>> = {\n [CaseNotesPermission.read]: `domainGroups.person.caseNotes.${CaseNotesPermission.read}`,\n [CaseNotesPermission.edit]: `domainGroups.person.caseNotes.${CaseNotesPermission.edit}`,\n [CaseNotesPermission.read_sensitive]: `domainGroups.person.caseNotes.${CaseNotesPermission.read_sensitive}`,\n [CaseNotesPermission.delete_sensitive]: `domainGroups.person.caseNotes.${CaseNotesPermission.delete_sensitive}`,\n [CaseNotesPermission.edit_sensitive]: `domainGroups.person.caseNotes.${CaseNotesPermission.edit_sensitive}`,\n}\n","export enum CorePersonRecordPermission {\n read_physical_characteristics = 'prisoner:physical_characteristics:read',\n edit_physical_characteristics = 'prisoner:physical_characteristics:edit',\n\n read_photo = 'prisoner:photo:read',\n edit_photo = 'prisoner:photo:edit',\n\n read_place_of_birth = 'prisoner:place-of-birth:read',\n edit_place_of_birth = 'prisoner:place-of-birth:edit',\n\n read_military_history = 'prisoner:military-history:read',\n edit_military_history = 'prisoner:military-history:edit',\n\n read_name_and_aliases = 'prisoner:name-and-aliases:read',\n edit_name_and_aliases = 'prisoner:name-and-aliases:edit',\n\n read_date_of_birth = 'prisoner:date-of-birth:read',\n edit_date_of_birth = 'prisoner:date-of-birth:edit',\n\n // (Prisoner's address)\n read_address = 'prisoner:address:read',\n edit_address = 'prisoner:address:edit',\n\n read_nationality = 'prisoner:nationality:read',\n edit_nationality = 'prisoner:nationality:edit',\n\n // (Such as PNC / CRO / NI number...)\n read_identifiers = 'prisoner:identifiers:read',\n edit_identifiers = 'prisoner:identifiers:edit',\n\n read_phone_numbers = 'prisoner:phone-numbers:read',\n edit_phone_numbers = 'prisoner:phone-numbers:edit',\n\n read_email_addresses = 'prisoner:email-addresses:read',\n edit_email_addresses = 'prisoner:email-addresses:edit',\n\n read_distinguishing_marks = 'prisoner:distinguishing-marks:read',\n edit_distinguishing_marks = 'prisoner:distinguishing-marks:edit',\n}\n\nexport type CorePersonRecordPermissions = Record<CorePersonRecordPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { CorePersonRecordPermission } from './CorePersonRecordPermissions'\n\nconst basePath: Path<PrisonerPermissions> = 'domainGroups.person.corePersonRecord'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const corePersonRecordPermissionPaths: Record<CorePersonRecordPermission, Path<PrisonerPermissions>> = {\n [CorePersonRecordPermission.read_physical_characteristics]: `${basePath}.${CorePersonRecordPermission.read_physical_characteristics}`,\n [CorePersonRecordPermission.edit_physical_characteristics]: `${basePath}.${CorePersonRecordPermission.edit_physical_characteristics}`,\n\n [CorePersonRecordPermission.read_photo]: `${basePath}.${CorePersonRecordPermission.read_photo}`,\n [CorePersonRecordPermission.edit_photo]: `${basePath}.${CorePersonRecordPermission.edit_photo}`,\n\n [CorePersonRecordPermission.read_place_of_birth]: `${basePath}.${CorePersonRecordPermission.read_place_of_birth}`,\n [CorePersonRecordPermission.edit_place_of_birth]: `${basePath}.${CorePersonRecordPermission.edit_place_of_birth}`,\n\n [CorePersonRecordPermission.read_military_history]: `${basePath}.${CorePersonRecordPermission.read_military_history}`,\n [CorePersonRecordPermission.edit_military_history]: `${basePath}.${CorePersonRecordPermission.edit_military_history}`,\n\n [CorePersonRecordPermission.read_name_and_aliases]: `${basePath}.${CorePersonRecordPermission.read_name_and_aliases}`,\n [CorePersonRecordPermission.edit_name_and_aliases]: `${basePath}.${CorePersonRecordPermission.edit_name_and_aliases}`,\n\n [CorePersonRecordPermission.read_date_of_birth]: `${basePath}.${CorePersonRecordPermission.read_date_of_birth}`,\n [CorePersonRecordPermission.edit_date_of_birth]: `${basePath}.${CorePersonRecordPermission.edit_date_of_birth}`,\n\n [CorePersonRecordPermission.read_address]: `${basePath}.${CorePersonRecordPermission.read_address}`,\n [CorePersonRecordPermission.edit_address]: `${basePath}.${CorePersonRecordPermission.edit_address}`,\n\n [CorePersonRecordPermission.read_nationality]: `${basePath}.${CorePersonRecordPermission.read_nationality}`,\n [CorePersonRecordPermission.edit_nationality]: `${basePath}.${CorePersonRecordPermission.edit_nationality}`,\n\n [CorePersonRecordPermission.read_identifiers]: `${basePath}.${CorePersonRecordPermission.read_identifiers}`,\n [CorePersonRecordPermission.edit_identifiers]: `${basePath}.${CorePersonRecordPermission.edit_identifiers}`,\n\n [CorePersonRecordPermission.read_phone_numbers]: `${basePath}.${CorePersonRecordPermission.read_phone_numbers}`,\n [CorePersonRecordPermission.edit_phone_numbers]: `${basePath}.${CorePersonRecordPermission.edit_phone_numbers}`,\n\n [CorePersonRecordPermission.read_email_addresses]: `${basePath}.${CorePersonRecordPermission.read_email_addresses}`,\n [CorePersonRecordPermission.edit_email_addresses]: `${basePath}.${CorePersonRecordPermission.edit_email_addresses}`,\n\n [CorePersonRecordPermission.read_distinguishing_marks]: `${basePath}.${CorePersonRecordPermission.read_distinguishing_marks}`,\n [CorePersonRecordPermission.edit_distinguishing_marks]: `${basePath}.${CorePersonRecordPermission.edit_distinguishing_marks}`,\n}\n","export enum PersonProtectedCharacteristicsPermission {\n read_sexual_orientation = 'prisoner:sexual-orientation:read',\n edit_sexual_orientation = 'prisoner:sexual-orientation:edit',\n\n read_religion_and_belief = 'prisoner:religion-and-belief:read',\n edit_religion_and_belief = 'prisoner:religion-and-belief:edit',\n\n read_ethnicity = 'prisoner:ethnicity:read',\n edit_ethnicity = 'prisoner:ethnicity:edit',\n}\n\nexport type PersonProtectedCharacteristicsPermissions = Record<PersonProtectedCharacteristicsPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PersonProtectedCharacteristicsPermission } from './PersonProtectedCharacteristicsPermissions'\n\nconst basePath: Path<PrisonerPermissions> = 'domainGroups.person.personProtectedCharacteristics'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const personProtectedCharacteristicsPermissionPaths: Record<\n PersonProtectedCharacteristicsPermission,\n Path<PrisonerPermissions>\n> = {\n [PersonProtectedCharacteristicsPermission.read_sexual_orientation]: `${basePath}.${PersonProtectedCharacteristicsPermission.read_sexual_orientation}`,\n [PersonProtectedCharacteristicsPermission.edit_sexual_orientation]: `${basePath}.${PersonProtectedCharacteristicsPermission.edit_sexual_orientation}`,\n\n [PersonProtectedCharacteristicsPermission.read_religion_and_belief]: `${basePath}.${PersonProtectedCharacteristicsPermission.read_religion_and_belief}`,\n [PersonProtectedCharacteristicsPermission.edit_religion_and_belief]: `${basePath}.${PersonProtectedCharacteristicsPermission.edit_religion_and_belief}`,\n\n [PersonProtectedCharacteristicsPermission.read_ethnicity]: `${basePath}.${PersonProtectedCharacteristicsPermission.read_ethnicity}`,\n [PersonProtectedCharacteristicsPermission.edit_ethnicity]: `${basePath}.${PersonProtectedCharacteristicsPermission.edit_ethnicity}`,\n}\n","export enum PersonHealthAndMedicationPermission {\n read_pregnancy = 'prisoner:pregnancy:read',\n edit_pregnancy = 'prisoner:pregnancy:edit',\n\n read_diet = 'prisoner:diet:read',\n edit_diet = 'prisoner:diet:edit',\n\n read_smoker = 'prisoner:smoker:read',\n edit_smoker = 'prisoner:smoker:edit',\n}\n\nexport type PersonHealthAndMedicationPermissions = Record<PersonHealthAndMedicationPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PersonHealthAndMedicationPermission } from './PersonHealthAndMedicationPermissions'\n\nconst basePath: Path<PrisonerPermissions> = 'domainGroups.person.personHealthAndMedication'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const personHealthAndMedicationPermissionPaths: Record<\n PersonHealthAndMedicationPermission,\n Path<PrisonerPermissions>\n> = {\n [PersonHealthAndMedicationPermission.read_pregnancy]: `${basePath}.${PersonHealthAndMedicationPermission.read_pregnancy}`,\n [PersonHealthAndMedicationPermission.edit_pregnancy]: `${basePath}.${PersonHealthAndMedicationPermission.edit_pregnancy}`,\n\n [PersonHealthAndMedicationPermission.read_diet]: `${basePath}.${PersonHealthAndMedicationPermission.read_diet}`,\n [PersonHealthAndMedicationPermission.edit_diet]: `${basePath}.${PersonHealthAndMedicationPermission.edit_diet}`,\n\n [PersonHealthAndMedicationPermission.read_smoker]: `${basePath}.${PersonHealthAndMedicationPermission.read_smoker}`,\n [PersonHealthAndMedicationPermission.edit_smoker]: `${basePath}.${PersonHealthAndMedicationPermission.edit_smoker}`,\n}\n","export enum PersonalRelationshipsPermission {\n read_number_of_children = 'prisoner:number-of-children:read',\n edit_number_of_children = 'prisoner:number-of-children:edit',\n\n read_domestic_status = 'prisoner:domestic-status:read',\n edit_domestic_status = 'prisoner:domestic-status:edit',\n\n // Next of kin & emergency contacts (via prisoner profile)\n // This needs a review once both the contacts service and the\n // profile edit have been rolled out wider:\n read_emergency_contacts = 'prisoner:emergency-contacts:read',\n edit_emergency_contacts = 'prisoner:emergency-contacts:edit',\n\n // All social and official contacts:\n read_contacts = 'prisoner:contacts:read',\n edit_contacts = 'prisoner:contacts:edit',\n edit_contact_restrictions = 'prisoner:contact-restrictions:edit',\n edit_contact_visit_approval = 'prisoner:contact-visit-approval:edit',\n}\n\nexport type PersonalRelationshipsPermissions = Record<PersonalRelationshipsPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PersonalRelationshipsPermission } from './PersonalRelationshipsPermissions'\n\nconst basePath: Path<PrisonerPermissions> = 'domainGroups.person.personalRelationships'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const personalRelationshipsPermissionPaths: Record<\n PersonalRelationshipsPermission,\n Path<PrisonerPermissions>\n> = {\n [PersonalRelationshipsPermission.read_number_of_children]: `${basePath}.${PersonalRelationshipsPermission.read_number_of_children}`,\n [PersonalRelationshipsPermission.edit_number_of_children]: `${basePath}.${PersonalRelationshipsPermission.edit_number_of_children}`,\n [PersonalRelationshipsPermission.read_domestic_status]: `${basePath}.${PersonalRelationshipsPermission.read_domestic_status}`,\n [PersonalRelationshipsPermission.edit_domestic_status]: `${basePath}.${PersonalRelationshipsPermission.edit_domestic_status}`,\n [PersonalRelationshipsPermission.read_contacts]: `${basePath}.${PersonalRelationshipsPermission.read_contacts}`,\n [PersonalRelationshipsPermission.edit_contacts]: `${basePath}.${PersonalRelationshipsPermission.edit_contacts}`,\n [PersonalRelationshipsPermission.edit_contact_restrictions]: `${basePath}.${PersonalRelationshipsPermission.edit_contact_restrictions}`,\n [PersonalRelationshipsPermission.edit_contact_visit_approval]: `${basePath}.${PersonalRelationshipsPermission.edit_contact_visit_approval}`,\n [PersonalRelationshipsPermission.read_emergency_contacts]: `${basePath}.${PersonalRelationshipsPermission.read_emergency_contacts}`,\n [PersonalRelationshipsPermission.edit_emergency_contacts]: `${basePath}.${PersonalRelationshipsPermission.edit_emergency_contacts}`,\n}\n","import { PrisonerPermissions } from '../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../internal/utils/Path'\nimport { caseNotesPermissionPaths } from './caseNotes/CaseNotesPermissionPaths'\nimport { PersonDomainPermission } from './PersonDomainPermissions'\nimport { corePersonRecordPermissionPaths } from './corePersonRecord/CorePersonRecordPermissionPaths'\nimport { personProtectedCharacteristicsPermissionPaths } from './personProtectedCharacteristics/PersonProtectedCharacteristicsPermissionPaths'\nimport { personHealthAndMedicationPermissionPaths } from './personHealthAndMedication/PersonHealthAndMedicationPermissionPaths'\nimport { personalRelationshipsPermissionPaths } from './personalRelationships/PersonalRelationshipsPermissionPaths'\n\n// eslint-disable-next-line import/prefer-default-export\nexport const personDomainPermissionPaths: Record<PersonDomainPermission, Path<PrisonerPermissions>> = {\n ...caseNotesPermissionPaths,\n ...corePersonRecordPermissionPaths,\n ...personProtectedCharacteristicsPermissionPaths,\n ...personHealthAndMedicationPermissionPaths,\n ...personalRelationshipsPermissionPaths,\n}\n","export enum PathfinderPermission {\n read = 'prisoner:pathfinder:read',\n edit = 'prisoner:pathfinder:edit',\n}\n\nexport type PathfinderPermissions = Record<PathfinderPermission, boolean>\n","import { PrisonerPermissions } from '../../../prisoner/PrisonerPermissions'\nimport { Path } from '../../../../../internal/utils/Path'\nimport { PathfinderPermi