OpenCRVS Country Configuration - v1.2.0
An example OpenCRVS country configuration. To be used in conjunction with opencrvs-core release v1.2.0
Read the release notes!
Draft: v1.1 to v1.2.* migration notes
Breaking changes - country configuration
The country confguration repository opencrvs-farajaland has been entirely refactored. Please contact us at [email protected] if you need any help rebasing changes in this repository.
Upgrading from v1.1.0 to v1.2.0 requires the upgrade Migration Notes to be followed precisely.
- We removed unnecessary endpoints now that the FHIR Locations REST API is accessible in Core.
- Now that administrative structure is managed using Humdata standards, the csv import scripts and file Structure has changed. Previous database backups will still work with OpenCRVS.
- We have removed some legacy endpoints and changed the directory structure to make the repository easier to understand.
- We have entirely changed the configuration import process to add functionality relevant to Humdata standardisation
- We have added scripts to validate all CSV files to make it much easer to configure OpenCRVS
Our Farajaland backup users have had their usernames changed like this "kennedy.mweene" is now "k.mweene" etc. This is because when any user is edited in the UI, their username changes to this pattern. Our test users were set up incorrectly before. - All database population and backup scripts now take named parameters.
- Many content keys have been created for translation requirements for the new features. These are documented below.
The following content keys have been added that require translation
"buttons.create": "Create",
"buttons.copy": "Copy",
"buttons.copied": "Copied",
"buttons.refresh": "Refresh",
"buttons.exactDateUnknown": "Exact date unknown",
"config.application.birthTabTitleExport": "Births",
"config.application.deathTabTitleExport": "Deaths",
"config.application.export": "Export",
"config.advanced.search": "Advanced Search",
"config.advanced.search.instruction": "Select the options to build an advanced search. A minimum of two search parameters is required.",
"config.application.vitalStatistics": "Month-{month}-Farajaland-{event, select, birth{birth} death{death} other{birth}}-event-statistics.csv {fileSize}",
"config.application.vsexport": "Vital statistics",
"config.application.emptystate": "The previous month's vital statistics data (based on vital event registrations occurring within that month) will become available for you to export as of the 1st of every month. Large CSV files cannot be opened in Excel and should therefore be opened in a statistical program such as {posit}.",
"config.form.tooltip.conditionalForRegistration": "Select if this field is conditional to complete registration",
"config.form.settings.dateRangePickerForFormField": "Date range picker input",
"config.form.tools.feildId": "Field ID",
"config.form.tools.fieldId": "Field ID",
"config.form.tooltip.fieldId": "Use these keys to search for specific field items",
"config.integrations": "Integrations",
"config.form.settings.checkboxGroup": "Checkbox group",
"constants.noResultsOutbox": "No records require processing",
"constants.record": "Record",
"constants.integrations": "Integrations",
"constants.assignRecord": "Assign record",
"constants.skipToMainContent": "Skip to main content",
"correction.reason.reasonForChange": "Reason for correction",
"custom.field.form.conditionalFieldHeader": "Conditional parameters",
"custom.field.form.conditionalField": "Conditional field",
"custom.field.form.conditionalFieldDesc": "Select the field and the conditions on which this field should show",
"custom.field.form.conditionalRegex": "Value RegEx",
"custom.field.form.duplicateField": "Label already exists in this form section. Please create a unique label",
"form.field.showLabel": "Show",
"form.field.hideLabel": "Hide",
"home.header.placeHolderNationalId": "Search for a national ID.",
"home.header.advancedSearch": "Advanced Search",
"home.header.nationalId": "National ID",
"integrations.uniqueKeyDescription": "These unique keys will be required by the client integrating...",
"integrations.createClient": "Create client",
"integrations.eventNotificationDescription": "An event notification client (eg. hospital) can send a partial notification or a full declaration of a birth or death in the HL7 FHIR standard to OpenCRVS for processing. For more information, visit:",
"integrations.webhookDescription": "A Webhook client can subscribe to be notified upon a birth or death registration following W3C WebSub standards. For more information, visit:",
"integrations.recordSearchDescription": "A Record search client can perform an advanced search on OpenCRVS data. For more information, visit:",
"integrations.nationalidAlertDescription": "A National ID client (eg. MOSIP) can react to birth or death webhooks to create or invalidate NID numbers. If using MOSIP, ensure the name of the integration is: \"MOSIP\". For more information, visit:",
"integrations.pageIntroduction": "For each new client that needs to integrate with OpenCRVS you can create unique client IDs. A number of integration use cases are currently supported, based on both API and webhook technologies.",
"integrations.supportingDescription": "Supporting description to help user make a decision and navigate the content",
"integrations.revealKeys": "Reveal Keys",
"integrations.disable": "Disable",
"integrations.enable": "Enable",
"integrations.delete": "Delete",
"integrations.copy": "Copy",
"integrations.name": "Name",
"integrations.nationalIDName": "Name (If using MOSIP, enter: \"MOSIP\")",
"integrations.client.type": "Type",
"integrations.label": "Label",
"integrations.webhookPermissionsDescription": "Select the data you wish to be contained within the webhook payload",
"integrations.webhook.PII": "Include PII data",
"integrations.birth": "Birth",
"integrations.death": "Death",
"integrations.type.eventNotification": "Event notification",
"integrations.type.nationalID": "National ID",
"integrations.childDetails": "Child's details",
"integrations.motherDetails": "Mother's details",
"integrations.documentDetails": "Document details",
"integrations.deathEventDetails": "Death event details",
"integrations.fatherDetails": "Father's details",
"integrations.informantDetails": "Informant's details",
"integrations.registrationDetailsnNoPII": "Registration Details (No PII)",
"integrations.childDetailsNoPII": "Childs Details (No PII)",
"integrations.motherDetailsNoPII": "Mothers Details (No PII)",
"integrations.fatherDetailsNoPII": "Fathers Details (No PII)",
"integrations.informantDetailsNoPII": "Informant Details (No PII)",
"integrations.type.recordSearch": "Record search",
"integrations.type.webhook": "Webhook",
"integrations.otherAlertDescription": "...Please visit",
"integrations.clientId": "Client ID",
"integrations.clientSecret": "Client Secret",
"integrations.shaSecret": "SHA Secret",
"integrations.active": "Active",
"integrations.inactive": "Inactive",
"integrations.loading": "Loading",
"integrations.error": "Something went wrong",
"integrations.activate.client": "Activate Client?",
"integrations.activate.status": "Client activated",
"integrations.deactivate.status": "Client deactivated",
"integrations.deactivate.client": "Deactivate Client?",
"integrations.activatetext": "This will activate the client",
"integrations.deactivatetext": "This will deactivate the client",
"navigation.integrations": "Integrations",
"integrations.pageTitle": "Integrations",
"navigation.integration": "Integrations",
"integrations.type.healthSystem": "Health integration",
"integrations.newIntegrationDescription": "Add a unique name and select the type of client you would like to create",
"integrations.onlyOneNationalId": "Only one National ID integration is allowed.",
"integrations.activate": "Activate",
"integrations.deactivate": "Deactivate",
"integrations.updatePermissionsMsg": "Permissions update successfully",
"integrations.deceasedDetails": "Deceased's Details",
"integrations.deleteSystemText": "This will delete the system",
"integrations.deleteSystemMsg": "System has been deleted successfully",
"form.field.label.locationLevel3": "Location Level 3",
"form.field.label.locationLevel4": "Location Level 4",
"form.field.label.locationLevel5": "Location Level 5",
"misc.notif.onlineUserStatus": "You are back online",
"navigation.outbox": "Outbox",
"navigation.reports": "Vital statistics",
"recordAudit.regAction.assigned": "Assigned",
"recordAudit.regAction.downloaded": "Retrieved",
"recordAudit.regAction.reinstated": "Reinstated to {regStatus, select, validated{ready for review} in_progress{in progress} declared{ready for review} rejected{requires updates} other{}}",
"recordAudit.regAction.requestedCorrection": "Corrected record",
"recordAudit.regAction.unassigned": "Unassigned",
"recordAudit.regAction.viewed": "Viewed",
"recordAudit.regStatus.archived": "Archived",
"recordAudit.regStatus.declared": "Declaration started",
"recordAudit.regStatus.declared.sentNotification": "Sent notification for review",
"recordAudit.regStatus.waitingValidation": "Waiting for validation",
"recordAudit.regStatus.registered": "Registered",
"recordAudit.regStatus.certified": "Certified",
"recordAudit.regStatus.rejected": "Rejected",
"recordAudit.regStatus.updatedDeclaration": "Updated",
"regHome.outbox.statusCertifying": "Certifying...",
"regHome.outbox.statusRejecting": "Sending for updates...",
"regHome.outbox.statusRequestingCorrection": "Correcting...",
"regHome.outbox.statusSendingForApproval": "Sending for approval...",
"regHome.outbox.statusSubmitting": "Sending...",
"regHome.outbox.statusWaitingToCertify": "Waiting to certify",
"regHome.outbox.statusWaitingToReject": "Waiting to send for updates",
"regHome.outbox.statusWaitingToRequestCorrection": "Waiting to correct",
"regHome.outbox.statusWaitingToSubmit": "Waiting to send",
"regHome.outbox.statusWaitingToValidate": "Waiting to send for approval",
"search.bookmarkAdvancedSearchModalTitle": "Save search query?",
"search.bookmarkAdvancedSearchModalBody": "A shortcut will be added to the side bar so you can rerun this search query",
"search.removeBookmarkAdvancedSearchModalTitle": "Remove search query?",
"search.removeBbookmarkAdvancedSearchModalBody": "This advanced search bookmark will be removed from the side bar shortcut",
"search.bookmark.success.notification": "Your advanced search result has been bookmarked successfully",
"search.bookmark.remove.success.notification": "Your advanced search bookmark has been removed successfully",
"search.bookmark.error.notification": "Sorry, something went wrong. Please try again",
"search.bookmark.loading.notification": "Bookmarking your advanced search results...",
"search.bookmark.remove.loading.notification": "Removing your advanced search bookmark...",
"advancedSearch.form.registrationDetails": "Registration details",
"advancedSearch.form.childDetails": "Child details",
"advancedSearch.form.eventDetails": "Event details",
"advancedSearch.form.motherDetails": "Mother details",
"advancedSearch.form.fatherDetails": "Father details",
"advancedSearch.form.placeOfRegistration": "Place of registration",
"advancedSearch.form.placeOfRegistrationHelperText": "Search for a province, district or registration office",
"advancedSearch.form.dateOfRegistration": "Date of registration",
"advancedSearch.form.statusOfRecordLabel": "Status of record",
"advancedSearch.form.deceasedDetails": "Deceased details",
"advancedSearch.form.informantDetails": "Informant details",
"advancedSearch.form.recordStatusAny": "Any status",
"advancedSearch.form.recordStatusInprogress": "In progress",
"advancedSearch.form.recordStatusInReview": "In review",
"advancedSearch.form.recordStatusRequireUpdate": "Requires updates",
"advancedSearch.form.recordStatusRegistered": "Registered",
"advancedSearch.form.recordStatusCertified": "Certified",
"advancedSearch.form.recordStatusAchived": "Archived",
"advancedSearch.accordion.hide": "Hide",
"advancedSearch.accordion.show": "Show",
"advancedSearchResult.pill.event": "Event",
"advancedSearchResult.pill.registationStatus": "Registration Status",
"advancedSearchResult.pill.eventDate": "Event Date",
"advancedSearchResult.pill.regNumber": "Registration Number",
"advancedSearchResult.pill.trackingId": "Tracking Id",
"advancedSearchResult.pill.regDate": "Registration Date",
"advancedSearchResult.pill.eventLocation": "Event Location",
"advancedSearchResult.pill.regLocation": "Location",
"advancedSearchResult.pill.childFirstName": "Child Firstname",
"advancedSearchResult.pill.childLastName": "Child Lastname",
"advancedSearchResult.pill.motherFirstName": "Mother Firstname",
"advancedSearchResult.pill.motherLastName": "Mother Lastname",
"advancedSearchResult.pill.fatherFirstName": "Father Firstname",
"advancedSearchResult.pill.fatherLastName": "Father Lastname",
"advancedSearchResult.pill.deceasedFirstName": "Deceased Firstname",
"advancedSearchResult.pill.deceasedLastName": "Deceased Lastname",
"advancedSearchResult.pill.informantFirstName": "Informant Firstname",
"advancedSearchResult.pill.informantLastName": "Informant Lastname",
"advancedSearchResult.pill.gender": "Gender",
"advancedSearchResult.pill.childDoB": "ChildDOB",
"advancedSearchResult.pill.fatherDoB": "FatherDOB",
"advancedSearchResult.pill.motherDoB": "MotherDOB",
"advancedSearchResult.pill.deceasedDoB": "DeceasedDOB",
"advancedSearchResult.pill.informantDoB": "InformantDOB",
"advancedSearchResult.table.searchResult": "Search Result",
"advancedSearchResult.table.noResult": "No result",
"sysAdHome.sendUsernameReminderSMS": "Send username reminder",
"sysAdHome.sendUsernameReminderSMSSuccess": "Username reminder sent to {name}",
"sysAdHome.sendUsernameReminderSMSError": "Username reminder could not be sent",
"sysAdHome.sendUsernameReminderSMSModalTitle": "Send username reminder?",
"sysAdHome.sendUsernameReminderSMSModalMessage": "The user will receive a username reminder via an SMS sent to {phoneNumber}",
"sysAdHome.resentPasswordSMSSuccess": "Temporary password sent to {username}",
"sysAdHome.resentPasswordSMSError": "Temporary password could not be sent",
"sysAdHome.user.resetpassword.title": "Reset Password",
"sysAdHome.user.resetPasswordModal.title": "Reset password?",
"sysAdHome.user.resetPasswordModal.message": "The user will receive a temporary password via SMS sent to {phoneNumber}. They will then be prompted to create a new password on successful login",
"user.profile.audit.column.eventType": "Event",
"user.profile.audit.column.trackingId": "Record",
"user.profile.audit.column.deviceIPAddress": "Device/IP Address",
"user.profile.audit.description.certified": "Certified",
"user.profile.audit.description.declared": "Declaration started",
"user.profile.audit.description.inProgress": "Sent incomplete",
"user.profile.audit.description.waiting_validation": "Sent declaration for external system validation",
"user.profile.audit.description.registered": "Registered",
"user.profile.audit.description.rejected": "Rejected",
"user.profile.auditList.corrected": "Corrected record",
"user.profile.auditList.assigned": "Assigned",
"user.profile.auditList.unAssigned": "Unassigned",
"user.profile.auditList.archived": "Archived",
"user.profile.auditList.loggedIn": "Logged in",
"user.profile.auditList.loggedOut": "Logged out",
"user.profile.auditList.phoneNumberChanged": "Phone number changed",
"user.profile.auditList.passwordChanged": "Password changed",
"user.profile.auditList.userReactivated": "Reactivated user",
"user.profile.auditList.userDeactivated": "Deactivated user",
"user.profile.auditList.userCreated": "Created user",
"user.profile.auditList.userEdited": "Edited user",
"user.profile.auditList.passwordReset": "Reset password",
"user.profile.auditList.usernameRequested": "Username reminder requested",
"user.profile.auditList.retrieved": "Retrieved",
"user.profile.auditList.viewed": "Viewed",
"user.profile.auditList.sentForApproval": "Sent for approval",
"user.profile.auditList.reInstatedToInProgress": "Reinstated to in progress",
"user.profile.auditList.reInstatedToInReview": "Reinstated to ready for review",
"user.profile.auditList.reInstatedToUpdate": "Reinstated to requires updates",
"user.profile.auditList.usernameReminderByAdmin": "Sent username Reminder",
"user.profile.auditList.passwordResetByAdmin": "Sent password",
"user.profile.sectionTitle.audit": "History",
"user.profile.nid": "National ID",
"validations.validPassportNumber": "The Passport Number can only be alpha numeric and must be {validLength} characters long",
"performance.regRates.select.item.byRegistrar": "By Registrars",
"performance.registrationsListTable.monthColumn": "Month",
"performance.registrationsListTable.locationColumn": "Location",
"performance.registrationsListTable.registrarColumn": "Registrar",
"performance.registrationsListTable.totalRegistrationsColumn": "Total Registrations",
"custom.field.select.heading": "Custom Select",
"config.form.tools.input.customSelect": "Custom Select",
"custom.select.copy.heading": "Copy",
"custom.select.copy.description": "Complete the copy requirements for all available languages",
"custom.select.dataSource.heading": "Data source",
"custom.select.dataSource.description": "Use an existing data source or upload a csv file containing the select options for each language.",
"custom.select.text.validatingCSVFile": "Validating csv file",
"custom.select.text.csvValidatingDescription": "We are uploading your csv file and adding the data to the select if it is formatted correctly.",
"custom.select.text.statusValidating": "Validating .csv",
"custom.select.text.statusValidated": "The csv is valid",
"custom.select.text.statusFailed": "Failed to validate. Please try again",
"custom.select.text.statusAppliedToCustomSelect": "Applied to custom select",
"custom.select.text.statusNoDataFound": "No option was found",
"custom.select.text.statusTranslationMissing": "Translation is missing"
What's Changed
- updated client.json file by @favour234 in #332
- Fixed confirm registration not working locally by @Zangetsu101 in #335
- ocrvs-3332 Removed some unused messages by @sadmananik in #336
- Merge release v1.1.0 by @euanmillar in #347
- Amend the team spec by @Zangetsu101 in #353
- Adding new system client scope by @yeasinhossain-dsi in #338
- ocrvs-3735 Removed unneeded messages by @Zangetsu101 in #344
- Release v1.1.1 by @euanmillar in #363
- Outbox v2 by @tahmidrahman-dsi in #348
- ocrvs-3852 Added new messages for custom form config field conditional parameters by @sadmananik in #355
- ocrvs-3791: change the scripts for restoring and backing up minio data by @rabiulislamanik in #354
- Updated Client.json file with updated messages by @favour234 in #362
- User Audit: Ensure that x-real-* headers are kept as is when registration validation goes through country config by @rikukissa in #352
- Fixed eslint and prettier configurations by @sadmananik in #360
- updated client message info by @CornelMaze in #364
- ocrvs-3927 add field id section on the right side nav in form config by @CornelMaze in #367
- ocrvs-4068-fix Added missing intl messages by @sadmananik in #371
- Setup mediator to update birth record with NID & VIN from MOSIP by @euanmillar in #328
- Merge release v1.1.1 to develop by @euanmillar in #374
- Added new messages and french translations by @favour234 in #375
- Ocrvs -3926 - Change label name to "Has a cause of death been established?" by @modupeadeonojobi in #370
- Run extract translations on
ocrvs-3983-workqueue-a11y
by @naftis in #358 - Ocrvs 3126 - Form radio buttons should be Checkbox's by @modupeadeonojobi in #372
- Advanced search by @CornelMaze in #380
- Changed the id's for the new checkbox fields by @Zangetsu101 in #379
- Ocrvs 4105 frontend by @modupeadeonojobi in #381
- ocrvs-3544 Added assigned, unassigned and retrieved messages by @Zangetsu101 in #368
- [1.0.3] OCRVS-3673: Introduced new feature: Notification by @yeasinhossain-dsi in #327
- Add RUN apk del build-dependencies command to country config service … by @euanmillar in #383
- Upgrade Docker Node by @euanmillar in #384
- ocrvs-4039 Reset user password messages by @sadmananik in #376
- ocrvs-3684 Fetched declaration only before initiating status change by @Zangetsu101 in #356
- ocrvs-n-3640: User Audit new messages by @sadmananik in #345
- ocrvs-4004: Add translations for zero documents when review scroll is disabled by @rabiulislamanik in #386
- ocrvs-4120: Add translations for viewed regAction by @rabiulislamanik in #388
- Feature: Vital Statistics Export by @Zangetsu101 in #365
- Feature: User Audit by @Zangetsu101 in #366
- Feature/user reset password user reminder by @sadmananik in #385
- Hotfix v1.1.2 by @euanmillar in #397
- Ocrvs 3595 - Added Integrations messages by @CornelMaze in #394
- ocrvs-4135: Add translations for dateRangePickerForFormfield by @rabiulislamanik in #393
- ocrvs-4112 - Advanced search form for birth tab by @modupeadeonojobi in #392
- Updated Messages and french translation by @favour234 in #398
- ocrvs-4041 - Update onboarding SMS messages by @modupeadeonojobi in #400
- Add minio keys to the deploy script by @euanmillar in #402
- added messages by @CornelMaze in #406
- ocrvs-4211: Notify user when they reconnect by @sifulovi in #404
- Add minio console user by @euanmillar in #409
- VS-Export - Remove metrics db on clear command run by @sadmananik in #403
- Deprecate minio access key as an env variable by @euanmillar in #410
- Move minio into window config by @euanmillar in #411
- Feature: View Record by @Zangetsu101 in #389
- Added Postman Collection for location API by @euanmillar in #413
- remove duplicate messages & fix typo by @kayumuzzaman in #408
- Added translation for Registration Performance by @yeasinhossain-dsi in #412
- hard coded security questions && answers for test users || backup added #3846 by @KaliGreen in #339
- Updated messages and french translations by @favour234 in #407
- ocrvs-4114: Add advancesearch and advancedsearchresult page translations by @rabiulislamanik in #415
- Use a different mosip token seeder by @euanmillar in #421
- MOSIP Cert fix and set NID validation to 10 digits by @euanmillar in #423
- ocrvs-4117 Advanced Search Bookmark Messages by @sadmananik in #416
- Feature - Advance Search by @sadmananik in #382
- Cypress fixes by @euanmillar in #427
- reinstated title message fixed by @kayumuzzaman in #422
- retrieved & viewed userauditList translatioons by @KaliGreen in #418
- ocrvs-4309-fix Modified some messages id for common content key by @sadmananik in #425
- Validate sensicality of locations in import script by @naftis in #432
- Added new translations related to custom Select by @yeasinhossain-dsi in #430
- Health notifications by @Zangetsu101 in #440
- Feature: Integrations by @favour234 in #390
- Fixed data-generator by @sadmananik in #437
- Bump decode-uri-component from 0.2.0 to 0.2.2 by @dependabot in #428
- team cypress test fix & reset password, username reminder test added by @kayumuzzaman in #426
- change the catchmentAreaIds variable to include the primaryOfficeId … by @KaliGreen in #439
- Ocrvs 4393: Add e2e test for advanced search by @rabiulislamanik in #442
- Integration fixes by @euanmillar in #441
- ocrvs-4307: label changes and missing description by @CornelMaze in #434
- Import statistics with dynamic amount of levels by @naftis in #435
- Feature: Configurable admin levels by @euanmillar in #414
- OCRVS-4433: We need to make sure that default backups do not have run migrations in them by @KaliGreen in #444
- record correction cypress test added by @kayumuzzaman in #429
- Clear influx data properly by @Zangetsu101 in #449
New Contributors
- @CornelMaze made their first contribution in #364
- @naftis made their first contribution in #358
- @sifulovi made their first contribution in #404
- @kayumuzzaman made their first contribution in #408
- @KaliGreen made their first contribution in #339
Full Changelog: v1.1.2...v1.2.0-beta