diff --git a/app/src/views/AccountMyFormsDref/DownloadImportTemplateButton/DownloadImportTemplateModal/useImportTemplateSchema.ts b/app/src/views/AccountMyFormsDref/DownloadImportTemplateButton/DownloadImportTemplateModal/useImportTemplateSchema.ts index 782036812b..af1f976e6f 100644 --- a/app/src/views/AccountMyFormsDref/DownloadImportTemplateButton/DownloadImportTemplateModal/useImportTemplateSchema.ts +++ b/app/src/views/AccountMyFormsDref/DownloadImportTemplateButton/DownloadImportTemplateModal/useImportTemplateSchema.ts @@ -199,14 +199,6 @@ function useImportTemplateSchema() { validation: 'string', }, - emergency_appeal_planned: { - type: 'select', - label: 'Emergency appeal planned', - optionsKey: '__boolean', - validation: 'boolean', - description: 'Select Yes or No from the drop-down list.', - }, - // EVENT DETAIL did_it_affect_same_area: { @@ -282,6 +274,22 @@ function useImportTemplateSchema() { ), }, + // FIXME: These are not showing up on the file + complete_child_safeguarding_risk: { + type: 'select', + validation: 'boolean', + optionsKey: '__boolean', + label: 'Did you complete the Child Safeguarding Risk Analysis in previous operations?', + description: 'Select Yes or No from the drop-down list.', + }, + + child_safeguarding_risk_level: { + type: 'input', + label: 'Child safeguarding risk level', + validation: 'textArea', + description: 'What was the risk level for child safeguarding risk analysis?', + }, + event_date: { headingBefore: 'Description of the Event', type: 'input', @@ -297,6 +305,27 @@ function useImportTemplateSchema() { description: 'People Affected include all those whose lives and livelihoods have been impacted as a direct result of the event.', }, + estimated_number_of_affected_male: { + type: 'input', + validation: 'number', + label: 'Estimated number of affected male', + description: '', + }, + + estimated_number_of_affected_female: { + type: 'input', + validation: 'number', + label: 'Estimated number of affected female', + description: '', + }, + + estimated_number_of_affected_minors: { + type: 'input', + validation: 'number', + label: 'Estimated number of affected minors', + description: '', + }, + people_in_need: { type: 'input', validation: 'number', @@ -669,6 +698,45 @@ function useImportTemplateSchema() { ), }, + has_anti_fraud_corruption_policy: { + type: 'select', + optionsKey: '__boolean', + validation: 'boolean', + label: 'Does your National Society have anti-fraud and corruption policy?', + description: '', + }, + + has_sexual_abuse_policy: { + type: 'select', + optionsKey: '__boolean', + validation: 'boolean', + label: 'Does your National Society have prevention of sexual exploitation and abuse policy?', + description: '', + }, + + has_child_protection_policy: { + type: 'select', + optionsKey: '__boolean', + validation: 'boolean', + label: 'Does your National Society have child protection/child safeguarding policy?', + description: '', + }, + + has_whistleblower_protection_policy: { + type: 'select', + optionsKey: '__boolean', + validation: 'boolean', + label: 'Does your National Society have whistleblower protection policy?', + description: '', + }, + + has_anti_sexual_harassment_policy: { + type: 'select', + optionsKey: '__boolean', + validation: 'boolean', + label: 'Does your National Society have anti-sexual harassment policy?', + description: '', + }, has_child_safeguarding_risk_analysis_assessment: { type: 'select', optionsKey: '__boolean', @@ -775,6 +843,13 @@ function useImportTemplateSchema() { ), }, + is_volunteer_team_diverse: { + type: 'input', + validation: 'textArea', + label: 'Does your volunteer team reflect the gender, age, and cultural diversity of the people you’re helping? What gaps exist in your volunteer team’s gender, age, or cultural diversity, and how are you addressing them to ensure inclusive and appropriate support?', + description: 'This question is about making sure your team includes the right mix of people to best support those affected. For example, if you’re helping single female heads of households, it’s important to have enough female volunteers to make everyone feel comfortable and understood. Including team members who share the same language or cultural background as the people you’re helping can also make a big difference in building trust and providing effective support.', + }, + is_surge_personnel_deployed: { type: 'select', validation: 'boolean', diff --git a/app/src/views/DrefApplicationExport/i18n.json b/app/src/views/DrefApplicationExport/i18n.json index 3417b09725..7b301b5533 100644 --- a/app/src/views/DrefApplicationExport/i18n.json +++ b/app/src/views/DrefApplicationExport/i18n.json @@ -21,7 +21,7 @@ "monthsSuffix": " months", "operationEndDateLabel": "Operation End Date", "drefPublishedLabel": "DREF Published", - "targetedAreasLabel": "Targeted Areas", + "targetedAreasLabel": "Targeted Regions", "eventDescriptionSectionHeading": "Description of the Event", "approximateDateOfImpactHeading": "Approximate date of impact", "whatWhereWhenSectionHeading": "What happened, where and when?", @@ -38,6 +38,11 @@ "nsOperationLabel": "If yes, please specify which operation", "recurrentEventJustificationLabel": "If you have answered yes to all questions above, justify why the use of DREF for a recurrent event, or how this event should not be considered recurrent", "lessonsLearnedLabel": "Lessons learned", + "completeChildSafeguardingRiskLabel": "Did you complete the Child Safeguarding Risk Analysis in previous operations, what was risk level?", + "childSafeguardingRiskLevelLabel": "What was the risk level for Child Safeguarding Risk Analysis?", + "estimatedAffectedMale": "Estimated male", + "estimatedAffectedFemale": "Estimated female", + "estimatedAffectedMinors": "Estimated minors", "currentNationalSocietyActionsHeading": "Current National Society Actions", "nationalSocietyActionsHeading": "National Society anticipatory actions started", "drefFormNsResponseStarted": "Start date of National Society actions", @@ -67,8 +72,8 @@ "ruralLabel": "Rural", "urbanLabel": "Urban", "peopleWithDisabilitiesLabel": "People with disabilities (estimated)", - "riskAndSecuritySectionHeading": "Risk and Security Considerations", - "riskSecurityHeading": "Please indicate about potential operation risk for this operations and mitigation actions", + "riskAndSecuritySectionHeading": "Risk and Security Considerations (including \"management\")", + "riskSecurityHeading": "Please analyse and indicate potential risks for this operation, its root causes and mitigation actions.", "safetyConcernHeading": "Please indicate any security and safety concerns for this operation", "hasChildRiskCompleted": "Has the child safeguarding risk analysis assessment been completed?", "plannedInterventionSectionHeading": "Planned Intervention", @@ -80,6 +85,12 @@ "priorityActionsHeading": "Priority Actions", "aboutSupportServicesSectionHeading": "About Support Services", "humanResourcesHeading": "How many staff and volunteers will be involved in this operation. Briefly describe their role.", + "isVolunteerTeamDiverseHeading": "Does your volunteer team reflect the gender, age, and cultural diversity of the people you’re helping? What gaps exist in your volunteer team’s gender, age, or cultural diversity, and how are you addressing them to ensure inclusive and appropriate support?", + "hasAntiFraudPolicy": "Does your National Society have anti-fraud and corruption policy?", + "hasSexualAbusePolicy": "Does your National Society have prevention of sexual exploitation and abuse policy?", + "hasChildProtectionPolicy": "Does your National Society have child protection/child safeguarding policy?", + "hasWhistleblowerProtectionPolicy": "Does your National Society have whistleblower protection policy?", + "hasAntiSexualHarassmentPolicy": "Does your National Society have anti-sexual harassment policy?", "surgePersonnelDeployedHeading": "Will surge personnel be deployed? Please provide the role profile needed.", "logisticCapacityHeading": "If there is procurement, will it be done by National Society or IFRC?", "pmerHeading": "How will this operation be monitored?", @@ -92,6 +103,8 @@ "projectManagerContactHeading": "IFRC Project Manager", "focalPointContactHeading": "IFRC focal point for the emergency", "mediaContactHeading": "Media Contact", + "nationalSocietyIntegrityHeading": "National Societies' Integrity Focal Point", + "nationalSocietyHotlineHeading": "National Society Hotline", "imageLogoIFRCAlt": "IFRC", "drefApplicationExportRisk": "Risk", "drefApplicationExportMitigation": "Mitigation action", diff --git a/app/src/views/DrefApplicationExport/index.tsx b/app/src/views/DrefApplicationExport/index.tsx index 0f7b47f752..530118b1b9 100644 --- a/app/src/views/DrefApplicationExport/index.tsx +++ b/app/src/views/DrefApplicationExport/index.tsx @@ -204,6 +204,9 @@ export function Component() { || isDefined(drefResponse?.event_map_file?.file); const lessonsLearnedDefined = isTruthyString(drefResponse?.lessons_learned?.trim()); + const childSafeguardingRiskLevelDefined = isTruthyString( + drefResponse?.child_safeguarding_risk_level?.trim(), + ); const showPreviousOperations = drefResponse?.type_of_dref !== DREF_TYPE_ASSESSMENT && ( isDefined(drefResponse?.did_it_affect_same_area) || isDefined(drefResponse?.did_it_affect_same_population) @@ -270,11 +273,25 @@ export function Component() { && isDefined(drefResponse.risk_security) && drefResponse.risk_security.length > 0; const riskSecurityConcernDefined = isTruthyString(drefResponse?.risk_security_concern?.trim()); + const hasAntiFraudPolicy = isDefined(drefResponse?.has_anti_fraud_corruption_policy); + const hasSexualAbusePolicy = isDefined(drefResponse?.has_sexual_abuse_policy); + const hasChildProtectionPolicy = isDefined(drefResponse?.has_child_protection_policy); + const hasWhistleblowerProtectionPolicy = isDefined( + drefResponse?.has_whistleblower_protection_policy, + ); + const hasAntiSexualHarassmentPolicy = isDefined( + drefResponse?.has_anti_sexual_harassment_policy, + ); const hasChildrenSafeguardingDefined = isDefined( drefResponse?.has_child_safeguarding_risk_analysis_assessment, ); const showRiskAndSecuritySection = riskSecurityDefined || riskSecurityConcernDefined + || hasAntiFraudPolicy + || hasSexualAbusePolicy + || hasChildProtectionPolicy + || hasWhistleblowerProtectionPolicy + || hasAntiSexualHarassmentPolicy || hasChildrenSafeguardingDefined; const plannedInterventionDefined = isDefined(drefResponse) @@ -283,6 +300,9 @@ export function Component() { && isDefined(plannedInterventions); const humanResourceDefined = isTruthyString(drefResponse?.human_resource?.trim()); + const isVolunteerTeamDiverseDefined = isTruthyString( + drefResponse?.is_volunteer_team_diverse?.trim(), + ); const surgePersonnelDeployedDefined = isTruthyString( drefResponse?.surge_personnel_deployed?.trim(), ); @@ -334,11 +354,26 @@ export function Component() { drefResponse?.media_contact_phone_number, ].filter(isTruthyString).join(', '); const mediaContactDefined = isTruthyString(mediaContactText); + const nationalSocietyIntegrityContactText = [ + drefResponse?.national_society_integrity_contact_name, + drefResponse?.national_society_integrity_contact_title, + drefResponse?.national_society_integrity_contact_email, + drefResponse?.national_society_integrity_contact_phone_number, + ].filter(isTruthyString).join(', '); + const nationalSocietyIntegrityContactDefined = isTruthyString( + nationalSocietyIntegrityContactText, + ); + const nationalSocietyHotlineDefined = isTruthyString( + drefResponse?.national_society_hotline_phone_number, + ); + const showContactsSection = nsContactDefined || appealManagerContactDefined || projectManagerContactDefined || focalPointContactDefined - || mediaContactDefined; + || mediaContactDefined + || nationalSocietyIntegrityContactDefined + || nationalSocietyHotlineDefined; return (
@@ -431,6 +466,30 @@ export function Component() { suffix={strings.peopleSuffix} strongValue /> + + + )} + + {childSafeguardingRiskLevelDefined && ( + + )} )} {showNsAction && ( @@ -935,6 +1009,56 @@ export function Component() { {strings.riskAndSecuritySectionHeading} + {hasAntiFraudPolicy && ( + + + + )} + {hasSexualAbusePolicy && ( + + + + )} + {hasChildProtectionPolicy && ( + + + + )} + {hasWhistleblowerProtectionPolicy && ( + + + + )} + {hasAntiSexualHarassmentPolicy && ( + + + + )} {riskSecurityDefined && ( )} + {isVolunteerTeamDiverseDefined && ( + + + {drefResponse?.is_volunteer_team_diverse} + + + )} {surgePersonnelDeployedDefined && ( )} + {nationalSocietyIntegrityContactDefined && ( + + )} + {nationalSocietyHotlineDefined && ( + + )} {strings.drefExportReference} diff --git a/app/src/views/DrefApplicationExport/styles.module.css b/app/src/views/DrefApplicationExport/styles.module.css index b5d8d81adc..7390b4facd 100644 --- a/app/src/views/DrefApplicationExport/styles.module.css +++ b/app/src/views/DrefApplicationExport/styles.module.css @@ -87,6 +87,7 @@ grid-template-columns: 1fr 1fr; .recurrent-event-justification, + .child-safeguarding-risk-level, .lessons-learned { grid-column: span 2; background-color: var(--pdf-element-bg); diff --git a/app/src/views/DrefApplicationForm/Actions/i18n.json b/app/src/views/DrefApplicationForm/Actions/i18n.json index 845bbd444d..c86ead0232 100644 --- a/app/src/views/DrefApplicationForm/Actions/i18n.json +++ b/app/src/views/DrefApplicationForm/Actions/i18n.json @@ -10,6 +10,12 @@ "drefFormDidNationalSocietyStartedImminent": "Did the National Society started any anticipatory actions?", "drefFormDidNationalSocietyStartedSlow": "Has the National Society started any actions?", "drefFormGapsInAssessment": "Any identified gaps/limitations in the assessment", + "drefFormGapsInAssessmentDescriptionHeading": "Consider the following:", + "drefFormGapsInAssessmentDescriptionPoint1": "Unmet needs: are there specific sectors (e.g., shelter, WASH, health) where needs remain unmet or only partially addressed?", + "drefFormGapsInAssessmentDescriptionPoint2": "Resource shortages: highlight any shortages in available resources (e.g., funding, personnel, supplies) that limit the ability to meet the identified needs.", + "drefFormGapsInAssessmentDescriptionPoint3": "Operational challenges: mention any operational constraints that are preventing a full response to the needs (e.g., logistical issues, insufficient capacity).", + "drefFormGapsInAssessmentDescriptionPoint4": "Coordination issues: note any challenges in coordinating with other actors or agencies that have resulted in gaps in service delivery or response coverage.", + "drefFormGapsInAssessmentDescriptionPoint5": "Vulnerable groups: identify any specific vulnerable groups whose needs may not have been fully captured or addressed during the assessment (e.g., displaced persons, elderly, people with disabilities).", "drefFormIcrc": "ICRC", "drefFormIcrcDescription": "Presence or not of ICRC in country, and support directly provided for this emergency response. Other programs and support provided outside of the scope of this emergency should not be indicated here.", "drefFormIfrc": "IFRC", @@ -19,6 +25,7 @@ "ifrcNetworkActionsHeading": "IFRC Network Actions Related To The Current Event", "icrcActionsHeading": "ICRC Actions Related To The Current Event", "drefFormNationalAuthorities": "National authorities", + "drefFormNationalAuthoritiesDescription": "Brief description of actions taken by the national authorities.", "drefFormNationalOtherActors": "Other Actors Actions Related To The Current Event", "drefFormNationalSocietiesActions": "Current National Society Actions", "drefFormNationalSocietiesActionsDescription": "Please indicate a description of the ongoing response with if possible: Branches involved, number of volunteers/staff involved in actions, assets deployed/distributed, number of people reach. Impact/added value of the NS in the response already ongoing.", @@ -29,6 +36,7 @@ "drefFormPartnerNationalSociety": "Participating National Societies", "drefFormPartnerNationalSocietyDescription": "Briefly set out which PNS are present and give details of PNS contributions/roles on the ground and remotely for this specific operation", "drefFormUNorOtherActors": "UN or other actors", + "drefFormUNorOtherActorsDescription": "Brief description of actions taken by the UN or other actors.", "drefFormAddButton": "Add" } } diff --git a/app/src/views/DrefApplicationForm/Actions/index.tsx b/app/src/views/DrefApplicationForm/Actions/index.tsx index 68615ecd44..83587f6161 100644 --- a/app/src/views/DrefApplicationForm/Actions/index.tsx +++ b/app/src/views/DrefApplicationForm/Actions/index.tsx @@ -333,6 +333,7 @@ function Actions(props: Props) {