v1.3.0 release includes some exciting new functionality and architectural improvements. This core release is to be used in conjunction with a forked country configuration release v1.3.0
New in 1.3
OpenCRVS 1.3 represents a major release of new functional features and technical improvements. The following explains in more detail each major feature that has been included in this release.
Marriage registration - BETA
A new vital event can now be registered. Marriages!
Customise you marriage form to start registered marriages (Farajaland default captures bride and grooms details, place of event details, informant details, witness details and signatures for up two witnesses aswell as the bride and grooms).
As with birth and death. We offer an API search for marriage events and the ability to create a custom marriage certificate.
BETA release
Outstanding marriage related functionality to be built includes:
- Searching for marriage events in the UI
- Marriage performance analytics
- Configurable marriage fees
- Marriage corrections
- Notification of intent to marry form.
Due to this, we are releasing marriage registration in "beta", therefore not for production use. You can configure marriage registration in development environments for proof of concept testing.
Track issuance
Printing certificates off in advance of issuance? Now you can track when they have been issued to the informant.
It is important to track when a legal document such as a brith certificate has been issued to the informant. So if registration offices are bulk printing certificates in advance of collection by the informant. The issuance of these certificates can be tracked and audited. Providing a proof that paper certificates get into the hands of beneficiaries.
A new workqueue. Ready to issue logs all records with a certificate printed off in advance. This feature can bee configured on/off.
Verify a certificate via QR code
Unsure of a paper certificate authenticity? Now you can compare against civil event record, recorded in your Civil Registration database
A unique QR code on the certificate when scanned by an authorised user can view partial record data. This allows them to compare the data recorded on the certificate against the data in the system to validate it's authenticity.
The QR code contains a unique identifier, the "recordId", which via the Record Search API can also be programatically validated by trusted external systems, returning vital event records associated.
Informant signature
Capture a digital signature of the informant to get their consent to submit an event declaration
After a declaration has been completed an informant can review the declaration an then an added their signature. As a digital signature directly into the application or an image of a wet signature can be uploaded.
You can configure the informant signature capture on and off for birth and death events. By default marriage events require the participant and witness signatures.
Email notifications
Choose between SMS or email to send registration status updates to the informant and users
Informants can now receive email notifications when their declaration has been reviewed, sent for approval and registered.
Users can now receive system notification such as two factor authentication codes via email.
The email template is completely customisable so you can choose the messaging and the look and feel.
Data visualisation dashboards
View performance data with interactive data visualisations!
In addition to our performance reports that give you the headline indicator of registration rates, completeness rates etc. You can now choose to view and analyse performance with data visualisations. Powered by the OpenSource Business Intelligence engine Metabase.
De-duplication improved
Easily compare side by side a potential duplicate against existing flagged records
The entire de-duplication user experience has been improved, to be able the user to quickly review potential duplicate records side by side along with supporting documentation.
In real-time a declaration sent for review can be flagged as a potential duplicate (powered by Elastics). So that it can easily assessed as a duplicate or not.
MOSIP Integration v2 - E-Signet
Validating identity by continuing our close collaboration with MOSIP
Our close collaboration with MOSIP continues in this release with integration from our vital event forms directly into the E-Signet digital identity authentication and consent mechanism.
Using MOSIP E-Signet integration, parents and informants can have their IDs validated, and consent to share demographic information to pre-populate the registration form. By combining OpenCRVS and MOSIP
Plus!
More application settings are now configurable
Configurable user roles - can be entirely customised even though they are based on common existing permissions.
Choose what informant notifications you want to send
Choose a background image or colour for your login splash page
Form configuration refactor
Deprecation of the form configuration UI
Responding to country requests to make form configuration more flexible we decided to revert back to a code only approach thus deprecating our form configuration UI.
We have improved the API validation for all of our interoperability endpoints and provided extra parameters to improve the power and flexibility of our APIs.
Dependency upgrades
Many dependencies have been upgraded, improving performance, resilience and resolving dependabot security alerts. Our Node version has been upgraded.
Refactoring the country configuration package
Our country configuration package has been entirely refactored. Highlights include:
Clear directory structure
Configurable infrastructure and deploy scripts for use on any infrastructure without the requirement to fork opencrvs-core
Documentation in the code
More robust API endpoints
Flexible form configuration via TypeScript - abstraction of complex utilities
Rapid database seeding process
Removal of core team internal tools such as cypress tests and data-generator
Performance improvements
Many bugs have been resolved and these are individually listed in the Github release notes. Significant improvements have been made to download speed when assigning a record.
Breaking changes
Breaking changes - core
Migration scripts will automatically upgrade your OpenCRVS v1.2 data to be supported in v1.3. Breaking changes that are not supported by automated migrations, or that require manual steps are listed below.
Your countryconfig repository needs to be migrated to the new directory structure.
Form configuration UI deprecation requires 1.2 users to export their form via JSON and convert to TypeScript using the functions that we provide.
We have upgraded the password hashing mechanism therefore all users will be required to change their password on first login after the ugrade completes.
Breaking changes - country configuration
The country confguration repository opencrvs-farajaland has been entirely refactored. Please contact us at team@opencrvs.org if you need any help rebasing changes in this repository.
You will be required to copy over any changes you made to opencrvs-core infrastructure scripts e.g.: Ansible / deploy.sh into the countryconfig repository. Hopefully you will appreciate that being able to manage all infrastructure scripts inside the countryconfig repository is a more future-proofed solution than forking opencrvs-core
Documentation updates
The following sections in our documentation have been updated due to the requirements of the new features.
If you are migrating from an earlier version and if you are working on behalf of a government that is considering implementing OpenCRVS, we can help you to upgrade.
The following content keys have been added or amended in this release that require translation
"buttons.editRecord": "No, make correction",
"buttons.issue": "Issue",
"buttons.saving": "Saving...",
"buttons.sendForUpdates": "Send for updates",
"certificate.receipt.amountDue": "Fee",
"certificate.receipt.deathService.before": "Death registration before {target} days of date of death",
"certificate.receipt.marriageService.after": "Marriage registration after {target} days of date of marriage",
"certificate.receipt.marriageService.before": "Marriage registration before {target} days of date of marriage",
"certificate.receipt.service": "Service",
"changeEmail.validation.msg": "Must be a valid email address",
"config.application.marriageTabTitle": "Marriage",
"config.application.marriageLegallySpecifiedDialogTitle": "Legally specified time period for marriage registration",
"config.application.marriageDelayedFeeChangeNotification": "Marriage delayed fee updated",
"config.application.marriageOnTimeFeeChangeNotification": "Marriage on time fee updated",
"config.application.marriageRegTargetChangeNotification": "Marriage registration target days updated",
"config.informantNotification.title": "Informant notifications",
"config.informantNotification.subtitle": "Select the notifications to send to the informant to keep them informed of the progress to their declaration. Your system is configured to send {communicationType}.",
"config.informantNotification.inProgressSMS": "Notification sent to Office",
"config.informantNotification.declarationSMS": "Declaration sent for review",
"config.informantNotification.registrationSMS": "Declaration registered",
"config.informantNotification.rejectionSMS": "Declaration rejected",
"config.informantNotification.success": "Informant notifications updated",
"config.userRoles.title": "User roles",
"config.userRoles.subtitle": "Map user roles to each system role so that specific permissions and privileges are correctly assigned. To learn more about the different system roles see ... {link}",
"config.userRoles.systemRoles": "SYSTEM ROLES",
"config.userRoles.systemRoleSuccessMsg": "System role updated successfully",
"config.userRoles.role": "ROLE",
"config.userRoles.roleUpdateInstruction": "Add the roles to be assigned the system role of {systemRole}",
"config.application.vsExportDownloadFailed": "Sorry! Something went wrong",
"config.certificate.template": "Template",
"config.certificate.allowPrinting": "Allow printing in advanced of issuance",
"config.certificate.options": "Options",
"config.certificate.printDescription": "Records printed off in advance of collections will be added to the ready to issue work-queue",
"config.certificate.allowPrintingNotification": "Allow printing in advance of issuance updated",
"config.certTemplate": "Certificate Template",
"config.marriageDefaultTempDesc": "Default marriage certificate template",
"config.marriageTemplate": "Marriage certificate",
"config.listTitle": "Certification",
"config.application.backgroundImageError": "Unable to change image. Please try again.",
"config.application.loginBackgroundLabel": "Login Background",
"config.application.loginImageText": "Upload an image and set how you would like it to display in the background",
"config.application.imageTabTitle": "Image",
"config.application.colourTabTitle": "Colour",
"config.application.colourTabText": "Hex code",
"config.application.backgroundImageChangeNotification": "Background image updated",
"config.application.backgroundImageFileLimitError": "Background image file must be less than 2mb",
"constants.marriage": "Marriage",
"constants.marriages": "Marriages",
"constants.duplicateOf": "Duplicate of",
"constants.matchedTo": "Matched to",
"constants.registeredAt": "Registered at",
"constants.registeredBy": "Registered by",
"constants.emailAddress": "Email Address",
"constants.user.role": "Role",
"constants.user.systemRole": "System Role",
"constants.registrationNumber": "Reg no.",
"constants.issueCertificate": "Issue Certificate",
"constants.collectorDetails": "Collector Details",
"constants.issueToMother": "Issue to informant (Mother)",
"constants.issueToFather": "Issue to informant (Father)",
"constants.issueToGroom": "Issue to informant (Groom)",
"constants.issueToBride": "Issue to informant (Bride)",
"constants.issueToSomeoneElse": "Issue to someone else",
"constants.issueToInformant": "Issue to informant",
"constants.issueConfirmationMessage": "Please confirm that the certificate has been issued to the informant or collector.",
"constants.idCheckWithoutVerify": "Continue without proof of ID?",
"constants.systemrole": "System Role",
"constants.draft": "Draft",
"verifyCertificate.loading": "Verifying certificate",
"verifyCertificate.timeOut": "You been timed out",
"verifyCertificate.successTitle": "Valid QR code",
"verifyCertificate.successMessage": "Compare the partial details of the record below against those against those recorded on the certificate",
"verifyCertificate.errorTitle": "Invalid QR code",
"verifyCertificate.errorMessage": "The certificate is a potential forgery please...",
"verifyCertificate.successUrl": "URL Verification",
"verifyCertificate.fullname": "Full name",
"verifyCertificate.dateOfBirth": "Date of birth",
"verifyCertificate.dateOfDeath": "Date of death",
"verifyCertificate.sex": "Sex",
"verifyCertificate.placeOfBirth": "Place of birth",
"verifyCertificate.placeOfDeath": "Place of death",
"verifyCertificate.registrationCenter": "Registration Center",
"verifyCertificate.registar": "Name of registar",
"verifyCertificate.createdAt": "Date of certification",
"verifyCertificate.brn": "BRN",
"verifyCertificate.drn": "DRN",
"verifyCertificate.toastMessage": "After verifying the certificate, please close the browser window",
"verifyCertificate.sexFemale": "Female",
"verifyCertificate.sexMale": "Male",
"correction.corrector.bride": "Bride",
"correction.corrector.groom": "Groom",
"correction.summary.required": "Required for correction",
"correction.summary.idCheckForCorrection": "Correct without proof of ID?",
"dashboard.noContent": "No content to show. Make sure the following variables are configured in the <strong>client-config.js</strong> provided by your country config package:<br /><ul><li><strong>LEADERBOARDS_DASHBOARD_URL</strong></li><li><strong>REGISTRATIONS_DASHBOARD_URL</strong></li><li><strong>STATISTICS_DASHBOARD_URL</strong></li></ul>",
"dashboard.dashboardTitle": "Dashboard",
"dashboard.leaderboardTitle": "Leaderboards",
"dashboard.statisticTitle": "Statistics",
"custom.field.form.unit": "Unit",
"custom.field.form.unitOptionG": "Gram (G)",
"custom.field.form.unitOptionKg": "Kilogram (Kg)",
"custom.field.form.unitOptionCm": "Centimeter (Cm)",
"custom.field.form.unitOptionM": "Meter (M)",
"custom.field.form.unitOptionEmpty": "None",
"custom.field.form.inputWidth": "Input width",
"config.form.settings.time": "Time input",
"config.form.tools.input.customSelectWithDynamicOptions": "Custom select with dynamic options",
"duplicates.warning": "Potential duplicate of record {trackingId}",
"duplicates.review.header": "Potential {event} duplicate review",
"duplicates.content.title": "Is {name} ({trackingId}) a duplicate?",
"duplicates.content.subtitle": "This record was flagged as a potential duplicate of: {trackingIds}. Please review these by clicking on each tracking ID in the tab section to view a side-by-side comparison below, and confirm if this record is a duplicate",
"duplicates.button.notDuplicate": "Not a duplicate",
"duplicates.button.markAsDuplicate": "Mark as duplicate",
"duplicates.content.notDuplicateConfirmationTitle": "Are you sure {name} ({trackingId}) is not duplicate?",
"duplicates.content.markAsDuplicate": "Mark {trackingId} as duplicate?",
"duplicates.content.duplicateDropdownMessage": "Duplicate of",
"duplicates.content.markAsDuplicateReason": "Please describe your reason",
"duplicates.compare.title": "Review {actualTrackingId} against {duplicateTrackingId}",
"duplicates.compare.supportingDocuments": "Supporting documents",
"duplicates.content.header": "Declaration details",
"form.field.nidNotVerified": "Authenticate",
"form.field.nidVerified": "Authenticated",
"form.field.nidOffline": "National ID authentication is currently not available offline.",
"form.field.nidNotVerifiedReviewSection": "Unauthenticated",
"form.field.label.addressLine1RuralOption": "Village",
"form.field.label.addressLine1UrbanOption": "Residential Area",
"form.field.label.app.certifyRecordTo.mother": "Print and issue to informant (Mother)",
"form.field.label.app.certifyRecordTo.father": "Print and issue to informant (Father)",
"form.field.label.exactDateOfBirthUnknown": "Exact date of birth unknown",
"form.field.label.fileSizeError": "File size must be less than 2MB",
"form.field.label.firstName": "First name(s)",
"form.field.label.firstNameEN": "First name(s)",
"form.field.label.informantRelation.contactPoint": "Contact Point",
"form.field.label.email": "Email",
"form.field.label.registrationName": "Registration Name",
"form.field.label.informantTitle": "Informant's details",
"form.field.label.someoneElseCollector": "Print and issue to someone else",
"form.field.label.ageOfMother": "Age of mother",
"form.field.label.ageOfFather": "Age of father",
"form.field.label.ageOfInformant": "Age of informant",
"form.field.label.ageOfDeceased": "Age of deceased",
"form.preview.group.label.english.name": "Full name",
"form.preview.group.label.father.english.name": "Full name",
"form.preview.group.label.informant.english.name": "Full name",
"form.preview.group.label.mother.english.name": "Full name",
"form.preview.group.label.spouse.english.name": "Full name",
"form.section.deceased.relationship": "Relationship to deceased",
"form.section.information.name": "Information",
"form.section.information.birth.bullet1": "I am going to help you make a declaration of birth.",
"form.section.information.birth.bullet2": "As the legal Informant it is important that all the information provided by you is accurate.",
"form.section.information.birth.bullet3": "Once the declaration is processed you will receive you will receive an SMS to tell you when to visit the office to collect the certificate - Take your ID with you.",
"form.section.information.birth.bullet4": "Make sure you collect the certificate. A birth certificate is critical for this child, especially to make their life easy later on. It will help to access health services, school examinations and government benefits.",
"form.section.information.death.bullet1": "I am going to help you make a declaration of death.",
"form.section.information.death.bullet2": "As the legal Informant it is important that all the information provided by you is accurate.",
"form.section.information.death.bullet3": "Once the declaration is processed you will receive you will receive an SMS to tell you when to visit the office to collect the certificate - Take your ID with you.",
"form.section.information.death.bullet4": "Make sure you collect the certificate. A death certificate is critical to support with inheritance claims and to resolve the affairs of the deceased e.g. closing bank accounts and setting loans.",
"home.header.typeRN": "Registration no.",
"integrations.integratingSystemTypeMosip": "MOSIP",
"integrations.integratingSystemTypeOsia": "OSIA (Coming soon)",
"integrations.integratingSystemTypeOther": "Other",
"integrations.integratingSystemType": "System",
"integrations.integratingSystemTypeAlertMosip": "When \"MOSIP\" National ID type is enabled, all forms require MOSIP E-Signet authentication. The MOSIP Token Seeder and OpenCRVS webhook compatible MOSIP Mediator must be installed. For more information, visit:",
"integrations.integratingSystemTypeAlertOsia": "When \"OSIA\" National ID is enabled, birth use case compatible endpoints will be enabled. For more information, visit:",
"integrations.integratingSystemTypeAlertOther": "When \"Other\" National ID is enabled, the default OpenCRVS National ID webhook mediator must be installed. 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, and respond to OpenCRVS to provide a temporary ID to children, and link vital events to each other. For more information, visit:",
"integrations.clientSecret": "Client secret",
"integrations.shaSecret": "SHA secret",
"integrations.activate.client": "Activate client?",
"integrations.deactivate.client": "Deactivate client?",
"navigation.communications": "Communications",
"navigation.userroles": "User roles",
"navigation.informantNotification": "Informant notifications",
"integrations.deceasedDetails": "Deceased's details",
"form.field.label.informantRelation.groomAndBride": "Groom & Bride",
"form.field.label.informantRelation.groom": "Groom",
"form.field.label.informantRelation.bride": "Bride",
"form.section.groom.name": "Groom",
"form.section.groom.title": "Groom's details",
"form.section.bride.name": "Bride",
"form.section.bride.title": "Bride's details",
"form.section.groom.headOfGroomFamily": "Head of groom's family",
"form.section.bride.headOfBrideFamily": "Head of bride's family",
"form.field.label.ageOfGroom": "Age of groom",
"form.field.label.ageOfBride": "Age of bride",
"form.section.marriageEvent.date": "Date of marriage",
"form.field.label.placeOfMarriage": "Place of marriage",
"form.field.label.typeOfMarriage": "Type of marriage",
"form.field.label.polygamy": "Polygamous",
"form.field.label.monogamy": "Monogamous",
"form.section.witnessOne.title": "Witness 1 details",
"form.section.witnessTwo.title": "Witness 2 details",
"form.section.witness.name": "Witness",
"form.field.label.relationshipToSpouses": "Relationship to spouses",
"form.preview.group.label.witness.one.english.name": "Witness One English name",
"form.preview.group.label.witness.two.english.name": "Witness Two English name",
"form.section.marriageEvent.name": "Marriage event details",
"form.section.marriageEvent.title": "Marriage details",
"form.field.label.marriedLastName": "Married last name (if different)",
"form.field.label.proofOfMarriageNotice": "Notice of intention to marriage",
"form.field.label.lastNameAtBirth": "Last name at birth (if different from above)",
"form.field.label.docTypeMarriageNotice": "Notice of marriage",
"form.field.label.proofOfGroomsID": "Proof of groom's identity",
"form.field.label.proofOfBridesID": "Proof of bride's identity",
"misc.notif.duplicateRecord": "{trackingId} is a potential duplicate. Record is ready for review.",
"misc.notif.offlineError": "Offline. Try again when reconnected",
"misc.confirmPinTitle": "Confirm PIN",
"misc.nidCallback.authenticatingNid": "Authenticating National ID",
"misc.nidCallback.failedToAuthenticateNid": "Failed to authenticate National ID",
"navigation.readyToIssue": "Ready to issue",
"navigation.organisation": "Organisation",
"navigation.analytic": "Analytics",
"navigation.performanceStatistics": "Statistics",
"navigation.leaderboards": "Leaderboards",
"navigation.dashboard": "Dashboard",
"navigation.report": "Report",
"performance.fieldAgents.columnHeader.role": "Role",
"performance.reports.header.applicationSources": "Sources of registrations",
"performance.reports.subHeader.applicationSources": "The number and percentage of declarations started by each system role that has been registered",
"phone.label.changeEmail": "What is your new email?",
"email.label.confirmation": "A verification code has been sent to {email}",
"print.certificate.button.confirmPrint": "Yes, print certificate",
"print.certificate.collector.whoToCollect": "Certify record",
"print.certificate.review.description": "Please confirm that the informant has reviewed that the information on the certificate is correct and that it is ready to print.",
"print.certificate.review.printModalTitle": "Print certificate?",
"print.certificate.review.printAndIssueModalTitle": "Print and issue certificate?",
"print.certificate.review.modal.body.print": "A PDF of the certificate will open in a new tab for you to print. This record will then be moved to your ready to issue work-queue",
"print.certificate.review.modal.body.printAndIssue": "A PDF of the certificate will open in a new tab for you to print and issue",
"print.certificate.review.title": "Ready to certify?",
"print.certificate.section.title": "Certify record",
"print.certificate.noPayment": "No payment required",
"recordAudit.rn": "Registration No.",
"recordAudit.dateOfMarriage": "Date of marriage",
"recordAudit.declaration.markAsDuplicate": "Marked as a duplicate",
"recordAudit.registrationNo": "Registration No",
"recordAudit.noDateOfMarriage": "No date of marriage",
"recordAudit.noPlaceOfMarriage": "No place of marriage",
"recordAudit.placeOfMarriage": "Place of marriage",
"recordAudit.regAction.markedAsDuplicate": "Marked as a duplicate",
"recordAudit.regStatus.issued": "Issued",
"recordAudit.regStatus.markedAsNotDuplicate": "Marked not a duplicate",
"recordAudit.regAction.flaggedAsPotentialDuplicate": "Flagged as potential duplicate",
"recordAudit.contact": "Contact",
"recordAudit.noContact": "No contact details provided",
"regHome.issued": "Issued",
"regHome.outbox.statusIssuing": "Issuing...",
"regHome.outbox.statusWaitingToIssue": "Waiting to issue",
"register.eventInfo.marriage.listItem0": "I am here to complete the marriage registration declaration for you. ",
"register.eventInfo.marriage.listItem1": "Once I complete the declaration, it will be sent to the registration office for review.",
"register.eventInfo.marriage.listItem2": "Wait for an SMS to tell you when to visit the office to collect the certificate - Take your ID with you.",
"register.eventInfo.event.title": "Introduce the {eventType, select, birth{birth} death{death} other{marriage}} registration process to the informant",
"register.eventInfo.birth.title": "Introduce the birth registration process to the informant",
"register.eventInfo.death.title": "Introduce the death registration process to the informant",
"register.eventInfo.marriage.title": "Introduce the marriage registration process to the informant",
"register.form.modal.desc.saveDeclarationConfirm": "All inputted data will be kept secure for future editing. Are you ready to save any changes to this declaration form?",
"register.form.modal.title.saveDeclarationConfirm": "Save & exit?",
"register.form.modal.desc.deleteDeclarationConfirm": "Are you certain you want to delete this draft declaration form? Please note, this action cant be undone.",
"register.form.modal.title.exitWithoutSavingModalForCorrection": "Exit correct record?",
"register.form.modal.desc.exitWithoutSavingModalForCorrection": "Are you sure you want to exit? Any corrections you have made will not be saved.",
"register.form.modal.title.exitWithoutSavingDeclarationConfirm": "Exit without saving changes?",
"register.form.modal.desc.exitWithoutSavingDeclarationConfirm": "You have unsaved changes on your declaration form. Are you sure you want to exit without saving?",
"register.selectInformant.marriageInformantTitle": "Informant's details",
"register.selectInformant.newMarriageRegistration": "New marriage declaration",
"review.actions.description.confirmComplete": "The informant will receive an {deliveryMethod} with a registration number that they can use to collect the certificate.",
"review.actions.description.confirmInComplete": "The informant will receive an {deliveryMethod} with a tracking ID that they can use to provide the additional mandatory information required for registration.",
"review.header.subject.subjectWithoutName": "{eventType, select, birth {Birth} death {Death} other {Marriage}} Declaration",
"review.header.subject.subjectWitName": "{eventType, select, birth {Birth} death {Death} other {Marriage} } declaration for {name}",
"review.inputs.supportingDocuments": "Supporting documents",
"review.rejection.form.instruction": "Please describe the updates required to this record for follow up action.",
"review.rejection.form.reasons.markDuplicate": "Mark as a duplicate",
"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.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": "Sex",
"advancedSearchResult.pill.childDoB": "Child d.o.b",
"advancedSearchResult.pill.fatherDoB": "Father d.o.b",
"advancedSearchResult.pill.motherDoB": "Mother d.o.b",
"advancedSearchResult.pill.deceasedDoB": "Deceased d.o.b",
"advancedSearchResult.pill.informantDoB": "Informant d.o.b",
"advancedSearchResult.table.searchResult": "Search results",
"settings.user.label.nameEN": "Full name",
"system.user.unlock.pinLabel": "Enter your pin",
"wq.noRecords.readyToIssue": "No records ready to issue",
"sysAdHome.sendUsernameReminderInvite": "Send username reminder",
"sysAdHome.sendUsernameReminderInviteSuccess": "Username reminder sent to {name}",
"sysAdHome.sendUsernameReminderInviteError": "Username reminder could not be sent",
"sysAdHome.sendUsernameReminderInviteModalTitle": "Send username reminder?",
"sysAdHome.sendUsernameReminderInviteModalMessage": "The user will receive a username reminder via an {deliveryMethod} sent to {recipient}",
"sysAdHome.resendInvite": "Resend invite",
"sysAdHome.resendInviteError": "Invite could not be sent",
"sysAdHome.resendInviteSuccess": "Invite sent",
"sysAdHome.resentPasswordSuccess": "Temporary password sent to {username}",
"sysAdHome.resentPasswordError": "Temporary password could not be sent",
"sysAdHome.user.resetPasswordModal.message": "The user will receive a temporary password via {deliveryMethod} sent to {recipient}. They will then be prompted to create a new password on successful login",
"system.user.settings.emailAddressUpdated": "Email address updated",
"system.user.duplicateEmailError": "{email} is already used by another user. Please use a different email",
"user.profile.audit.description.issued": "Issued",
"user.profile.auditList.emailAddressChanged": "Email Address changed",
"user.profile.auditList.markedAsDuplicate": "Marked as duplicate",
"user.profile.auditList.markedAsNotDuplicate": "Marked as not duplicate",
"userSetup.type.system": "System",
"validate.complete.declaration.action.description": "The informant will receive an with a registration number that they can use to collect the certificate.",
"review.inputs.informantsSignature": "Signature of informant",
"review.signature.description": "I, the undersigned, hereby declare that the particulars in this form are true and correct to the best of my knowledge.",
"review.signature.input.description": "By signing this document with an electronic signature, I agree that such signature will be valid as handwritten signatures to the extent allowed by the laws of Farajaland.",
"review.inputs.brideSignature": "Signature of Bride",
"review.inputs.groomSignature": "Signature of Groom",
"review.inputs.witnessOneSignature": "Signature of Witness 1",
"review.inputs.witnessTwoSignature": "Signature of Witness 2",
"review.inputs.terms": "We, the undersigned declare under penalty of perjury under the laws of Farajaland that the forgoing information is true and correct to the best of our knowledge and belief. We further declare that no legal objections to the marriage is known and hereby apply for a certificate of marriage",
"review.signature.clear": "Clear",
"review.signature.open": "Sign",
"review.signature.delete": "Delete",
"validations.englishOnlyNameFormat": "Input contains invalid characters. Please use only letters (a-z, A-Z), numbers (0-9), hyphens (-), apostrophes(') and underscores (_)",
"validations.illegalMarriageAge": "Illegal age of marriage",
"performance.registrationsListTable.totalRegistrationsColumn": "Total Registrations"