From 07942de1a2a97a110e3e5db8035301470fc4695f Mon Sep 17 00:00:00 2001 From: Maciej Szewczyk Date: Thu, 16 Apr 2026 14:12:10 +0200 Subject: [PATCH 01/33] init branch From 983a750210a4a36469fb608e580558c0a58c9005 Mon Sep 17 00:00:00 2001 From: Maciej Szewczyk Date: Thu, 16 Apr 2026 17:36:30 +0200 Subject: [PATCH 02/33] add local variants for names for individuals and people --- .../src/components/grievances/FlagDetails.tsx | 3 ++- .../LookUpDelegate/LookUpDelegateDisplay.tsx | 3 ++- .../LookUpIndividualTableRow.tsx | 4 ++-- .../NeedsAdjudication/NeedsAdjudicationTable.tsx | 3 ++- .../components/payments/IndividualDetails.tsx | 4 ++-- .../people/PeopleBioData/PeopleBioData.tsx | 9 +++++---- .../HouseholdDetails/HouseholdDetails.tsx | 4 ++-- .../IndividualBioData/IndividualBioData.tsx | 9 +++++---- .../RegistrationIndividualBioData.tsx | 9 +++++---- .../RecipientsTable/RecipientsTableRow.tsx | 4 ++-- .../RecipientsTable/RecipientsTableRow.tsx | 4 ++-- .../PaymentsTable/PaymentsTableRow.tsx | 5 +++-- .../PeopleListTable/PeopleListTableRow.tsx | 4 ++-- .../CollectorsTable/CollectorsTable.tsx | 4 ++-- .../HouseholdMembersTable.tsx | 3 ++- .../IndividualsListTableRow.tsx | 4 ++-- .../ImportedIndividualsTableRow.tsx | 4 ++-- .../ImportedPeopleTableRow.tsx | 4 ++-- .../TargetPopulationHouseholdRow.tsx | 3 ++- .../TargetPopulationPeopleRow.tsx | 3 ++- .../src/restgenerated/models/HeadOfHousehold.ts | 4 ++++ .../src/restgenerated/models/HouseholdMember.ts | 4 ++++ .../src/restgenerated/models/Individual.ts | 16 ++++++++++++++++ .../src/restgenerated/models/IndividualDetail.ts | 16 ++++++++++++++++ .../src/restgenerated/models/IndividualList.ts | 4 ++++ .../src/restgenerated/models/IndividualSimple.ts | 4 ++++ src/frontend/src/utils/utils.ts | 11 +++++++++++ 27 files changed, 109 insertions(+), 40 deletions(-) diff --git a/src/frontend/src/components/grievances/FlagDetails.tsx b/src/frontend/src/components/grievances/FlagDetails.tsx index 9a169c9528d..16a63962235 100644 --- a/src/frontend/src/components/grievances/FlagDetails.tsx +++ b/src/frontend/src/components/grievances/FlagDetails.tsx @@ -8,6 +8,7 @@ import { TableRow, Typography, } from '@mui/material'; +import { displayNameWithLocal } from '@utils/utils'; import styled from 'styled-components'; import moment from 'moment'; import { useTranslation } from 'react-i18next'; @@ -132,7 +133,7 @@ export const FlagDetails = ({ - - {details.goldenRecordsIndividual.fullName} + {displayNameWithLocal(details.goldenRecordsIndividual, 'fullName')} diff --git a/src/frontend/src/components/grievances/LookUps/LookUpDelegate/LookUpDelegateDisplay.tsx b/src/frontend/src/components/grievances/LookUps/LookUpDelegate/LookUpDelegateDisplay.tsx index 2c110974397..f2455ef3e35 100644 --- a/src/frontend/src/components/grievances/LookUps/LookUpDelegate/LookUpDelegateDisplay.tsx +++ b/src/frontend/src/components/grievances/LookUps/LookUpDelegate/LookUpDelegateDisplay.tsx @@ -3,6 +3,7 @@ import DeleteIcon from '@mui/icons-material/Delete'; import EditIcon from '@mui/icons-material/Edit'; import { useTranslation } from 'react-i18next'; import { BlueText, DarkGrey, LightGrey, StyledBox } from '../LookUpStyles'; +import { displayNameWithLocal } from '@utils/utils'; import { ReactElement } from 'react'; interface LookUpDelegateDisplayProps { @@ -32,7 +33,7 @@ export const LookUpDelegateDisplay = ({ {t('Delegate')}: {values.selectedDelegate?.unicefId || - values.selectedDelegate?.fullName || + displayNameWithLocal(values.selectedDelegate, 'fullName') || '-'} diff --git a/src/frontend/src/components/grievances/LookUps/LookUpIndividualTable/LookUpIndividualTableRow.tsx b/src/frontend/src/components/grievances/LookUps/LookUpIndividualTable/LookUpIndividualTableRow.tsx index 5378138033f..b94647ec730 100644 --- a/src/frontend/src/components/grievances/LookUps/LookUpIndividualTable/LookUpIndividualTableRow.tsx +++ b/src/frontend/src/components/grievances/LookUps/LookUpIndividualTable/LookUpIndividualTableRow.tsx @@ -5,7 +5,7 @@ import { useBaseUrl } from '@hooks/useBaseUrl'; import { Radio } from '@mui/material'; import TableCell from '@mui/material/TableCell'; import { IndividualList } from '@restgenerated/models/IndividualList'; -import { sexToCapitalize } from '@utils/utils'; +import { displayNameWithLocal, sexToCapitalize } from '@utils/utils'; import { ReactElement } from 'react'; import { useProgramContext } from 'src/programContext'; @@ -54,7 +54,7 @@ export function LookUpIndividualTableRow({ {individual.unicefId || '-'} )} - {individual.fullName} + {displayNameWithLocal(individual, 'fullName')} {!isSocialDctType && ( {individual.household ? individual.household.unicefId : '-'} diff --git a/src/frontend/src/components/grievances/NeedsAdjudication/NeedsAdjudicationTable.tsx b/src/frontend/src/components/grievances/NeedsAdjudication/NeedsAdjudicationTable.tsx index 92d0655e78b..1e3855203e4 100644 --- a/src/frontend/src/components/grievances/NeedsAdjudication/NeedsAdjudicationTable.tsx +++ b/src/frontend/src/components/grievances/NeedsAdjudication/NeedsAdjudicationTable.tsx @@ -1,5 +1,6 @@ import { ChangeEvent } from 'react'; import { BlackLink } from '@core/BlackLink'; +import { displayNameWithLocal } from '@utils/utils'; import { UniversalMoment } from '@core/UniversalMoment'; import PeopleIcon from '@mui/icons-material/People'; import PersonIcon from '@mui/icons-material/Person'; @@ -157,7 +158,7 @@ export const NeedsAdjudicationTable = ({ )} - {possibleDuplicate?.fullName} + {displayNameWithLocal(possibleDuplicate, 'fullName')} {possibleDuplicate?.sex} diff --git a/src/frontend/src/components/payments/IndividualDetails.tsx b/src/frontend/src/components/payments/IndividualDetails.tsx index 3703caf74b1..425e0801b80 100644 --- a/src/frontend/src/components/payments/IndividualDetails.tsx +++ b/src/frontend/src/components/payments/IndividualDetails.tsx @@ -3,7 +3,7 @@ import { Overview } from '@components/payments/Overview'; import { Title } from '@core/Title'; import { Grid, Typography } from '@mui/material'; import { LabelizedField } from '@core/LabelizedField'; -import { getPhoneNoLabel } from '@utils/utils'; +import { displayNameWithLocal, getPhoneNoLabel } from '@utils/utils'; import { useProgramContext } from 'src/programContext'; import { ReactElement } from 'react'; @@ -29,7 +29,7 @@ export const IndividualDetails = ({ individual }): ReactElement => { diff --git a/src/frontend/src/components/people/PeopleBioData/PeopleBioData.tsx b/src/frontend/src/components/people/PeopleBioData/PeopleBioData.tsx index 19a8346a400..87ef73e509a 100644 --- a/src/frontend/src/components/people/PeopleBioData/PeopleBioData.tsx +++ b/src/frontend/src/components/people/PeopleBioData/PeopleBioData.tsx @@ -6,6 +6,7 @@ import { DisabilityEnum } from '@restgenerated/models/DisabilityEnum'; import { IndividualDetail } from '@restgenerated/models/IndividualDetail'; import { choicesToDict, + displayNameWithLocal, formatAge, getPhoneNoLabel, renderBoolean, @@ -285,22 +286,22 @@ export const PeopleBioData = ({ - {individual?.fullName} + {displayNameWithLocal(individual, 'fullName')} - {individual?.givenName} + {displayNameWithLocal(individual, 'givenName')} - {individual?.middleName} + {displayNameWithLocal(individual, 'middleName')} - {individual?.familyName} + {displayNameWithLocal(individual, 'familyName')} diff --git a/src/frontend/src/components/population/HouseholdDetails/HouseholdDetails.tsx b/src/frontend/src/components/population/HouseholdDetails/HouseholdDetails.tsx index 7506240836f..6db7e269045 100644 --- a/src/frontend/src/components/population/HouseholdDetails/HouseholdDetails.tsx +++ b/src/frontend/src/components/population/HouseholdDetails/HouseholdDetails.tsx @@ -5,7 +5,7 @@ import { Title } from '@core/Title'; import { Box, Grid, Theme, Typography } from '@mui/material'; import { GrievanceChoices } from '@restgenerated/models/GrievanceChoices'; import { HouseholdDetail } from '@restgenerated/models/HouseholdDetail'; -import { formatCurrencyWithSymbol } from '@utils/utils'; +import { displayNameWithLocal, formatCurrencyWithSymbol } from '@utils/utils'; import { ReactElement } from 'react'; import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; @@ -72,7 +72,7 @@ export function HouseholdDetails({ - {household?.headOfHousehold?.fullName} + {displayNameWithLocal(household?.headOfHousehold, 'fullName')} diff --git a/src/frontend/src/components/population/IndividualBioData/IndividualBioData.tsx b/src/frontend/src/components/population/IndividualBioData/IndividualBioData.tsx index 6cce1c92f38..d3b90cc1f13 100644 --- a/src/frontend/src/components/population/IndividualBioData/IndividualBioData.tsx +++ b/src/frontend/src/components/population/IndividualBioData/IndividualBioData.tsx @@ -3,6 +3,7 @@ import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; import { choicesToDict, + displayNameWithLocal, formatAge, getPhoneNoLabel, renderBoolean, @@ -203,22 +204,22 @@ export const IndividualBioData = ({ - {individual?.fullName} + {displayNameWithLocal(individual, 'fullName')} - {individual?.givenName} + {displayNameWithLocal(individual, 'givenName')} - {individual?.middleName} + {displayNameWithLocal(individual, 'middleName')} - {individual?.familyName} + {displayNameWithLocal(individual, 'familyName')} diff --git a/src/frontend/src/components/rdi/details/individual/RegistrationIndividualBioData/RegistrationIndividualBioData.tsx b/src/frontend/src/components/rdi/details/individual/RegistrationIndividualBioData/RegistrationIndividualBioData.tsx index 17cd6d7ba86..396b72f9820 100644 --- a/src/frontend/src/components/rdi/details/individual/RegistrationIndividualBioData/RegistrationIndividualBioData.tsx +++ b/src/frontend/src/components/rdi/details/individual/RegistrationIndividualBioData/RegistrationIndividualBioData.tsx @@ -8,6 +8,7 @@ import { IndividualChoices } from '@restgenerated/models/IndividualChoices'; import { IndividualDetail } from '@restgenerated/models/IndividualDetail'; import { choicesToDict, + displayNameWithLocal, formatAge, getPhoneNoLabel, renderBoolean, @@ -101,22 +102,22 @@ export function RegistrationIndividualBioData({ - {individual.fullName} + {displayNameWithLocal(individual, 'fullName')} - {individual.givenName} + {displayNameWithLocal(individual, 'givenName')} - {individual.middleName} + {displayNameWithLocal(individual, 'middleName')} - {individual.familyName} + {displayNameWithLocal(individual, 'familyName')} diff --git a/src/frontend/src/containers/tables/Communication/RecipientsTable/RecipientsTableRow.tsx b/src/frontend/src/containers/tables/Communication/RecipientsTable/RecipientsTableRow.tsx index 064550eeb12..b69e3f71e31 100644 --- a/src/frontend/src/containers/tables/Communication/RecipientsTable/RecipientsTableRow.tsx +++ b/src/frontend/src/containers/tables/Communication/RecipientsTable/RecipientsTableRow.tsx @@ -7,7 +7,7 @@ import { useBaseUrl } from '@hooks/useBaseUrl'; import TableCell from '@mui/material/TableCell'; import { HeadOfHousehold } from '@restgenerated/models/HeadOfHousehold'; import { Recipient } from '@restgenerated/models/Recipient'; -import { householdStatusToColor } from '@utils/utils'; +import { displayNameWithLocal, householdStatusToColor } from '@utils/utils'; import { ReactElement } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -45,7 +45,7 @@ export const RecipientsTableRow = ({ statusToColor={householdStatusToColor} /> - {headOfHousehold.fullName} + {displayNameWithLocal(headOfHousehold, 'fullName')} {household.size} {household.admin2?.name || '-'} {household.residenceStatus} diff --git a/src/frontend/src/containers/tables/Surveys/RecipientsTable/RecipientsTableRow.tsx b/src/frontend/src/containers/tables/Surveys/RecipientsTable/RecipientsTableRow.tsx index 373ab40d9d7..7e050bba2e5 100644 --- a/src/frontend/src/containers/tables/Surveys/RecipientsTable/RecipientsTableRow.tsx +++ b/src/frontend/src/containers/tables/Surveys/RecipientsTable/RecipientsTableRow.tsx @@ -7,7 +7,7 @@ import { useBaseUrl } from '@hooks/useBaseUrl'; import TableCell from '@mui/material/TableCell'; import { HeadOfHousehold } from '@restgenerated/models/HeadOfHousehold'; import { Recipient } from '@restgenerated/models/Recipient'; -import { householdStatusToColor } from '@utils/utils'; +import { displayNameWithLocal, householdStatusToColor } from '@utils/utils'; import { ReactElement } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -46,7 +46,7 @@ export const RecipientsTableRow = ({ statusToColor={householdStatusToColor} /> - {headOfHousehold.fullName} + {displayNameWithLocal(headOfHousehold, 'fullName')} {household.size} {household.admin2?.name || '-'} {household.residenceStatus} diff --git a/src/frontend/src/containers/tables/paymentmodule/PaymentsTable/PaymentsTableRow.tsx b/src/frontend/src/containers/tables/paymentmodule/PaymentsTable/PaymentsTableRow.tsx index ac3c5df3450..fee94a1d805 100644 --- a/src/frontend/src/containers/tables/paymentmodule/PaymentsTable/PaymentsTableRow.tsx +++ b/src/frontend/src/containers/tables/paymentmodule/PaymentsTable/PaymentsTableRow.tsx @@ -8,6 +8,7 @@ import ErrorOutlineRoundedIcon from '@mui/icons-material/ErrorOutlineRounded'; import TableCell from '@mui/material/TableCell'; import { PaymentList } from '@restgenerated/models/PaymentList'; import { + displayNameWithLocal, formatCurrencyWithSymbol, opacityToHex, paymentStatusDisplayMap, @@ -152,10 +153,10 @@ export function PaymentsTableRow({ {canViewDetails ? ( - {payment.peopleIndividual?.fullName} + {displayNameWithLocal(payment.peopleIndividual, 'fullName')} ) : ( - payment.peopleIndividual?.fullName + displayNameWithLocal(payment.peopleIndividual, 'fullName') )} diff --git a/src/frontend/src/containers/tables/people/PeopleListTable/PeopleListTableRow.tsx b/src/frontend/src/containers/tables/people/PeopleListTable/PeopleListTableRow.tsx index 44c104cdf8b..23ccb8c26ad 100644 --- a/src/frontend/src/containers/tables/people/PeopleListTable/PeopleListTableRow.tsx +++ b/src/frontend/src/containers/tables/people/PeopleListTable/PeopleListTableRow.tsx @@ -7,7 +7,7 @@ import { useBaseUrl } from '@hooks/useBaseUrl'; import TableCell from '@mui/material/TableCell'; import { IndividualList } from '@restgenerated/models/IndividualList'; import { RelationshipEnum } from '@restgenerated/models/RelationshipEnum'; -import { individualStatusToColor, sexToCapitalize } from '@utils/utils'; +import { displayNameWithLocal, individualStatusToColor, sexToCapitalize } from '@utils/utils'; import { ReactElement } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; @@ -44,7 +44,7 @@ export const PeopleListTableRow = ({ {individual.unicefId} - {individual.fullName} + {displayNameWithLocal(individual, 'fullName')} {roleChoicesDict[row.role]} - {row.fullName} + {displayNameWithLocal(row, 'fullName')} {renderRelationship()} ); diff --git a/src/frontend/src/containers/tables/population/HouseholdMembersTable/HouseholdMembersTable.tsx b/src/frontend/src/containers/tables/population/HouseholdMembersTable/HouseholdMembersTable.tsx index cfcfe4f4978..f0cde47389c 100644 --- a/src/frontend/src/containers/tables/population/HouseholdMembersTable/HouseholdMembersTable.tsx +++ b/src/frontend/src/containers/tables/population/HouseholdMembersTable/HouseholdMembersTable.tsx @@ -17,6 +17,7 @@ import { useQuery } from '@tanstack/react-query'; import { adjustHeadCells, choicesToDict, + displayNameWithLocal, populationStatusToColor, sexToCapitalize, } from '@utils/utils'; @@ -160,7 +161,7 @@ export const HouseholdMembersTable = ({ )} - {renderTableCellContent(row.fullName)} + {renderTableCellContent(displayNameWithLocal(row, 'fullName'))} {individual.unicefId} - {individual.fullName} + {displayNameWithLocal(individual, 'fullName')} {individual.household ? individual.household.unicefId : ''} diff --git a/src/frontend/src/containers/tables/rdi/ImportedIndividualsTable/ImportedIndividualsTableRow.tsx b/src/frontend/src/containers/tables/rdi/ImportedIndividualsTable/ImportedIndividualsTableRow.tsx index 245e96d8b59..6fae0bedce5 100644 --- a/src/frontend/src/containers/tables/rdi/ImportedIndividualsTable/ImportedIndividualsTableRow.tsx +++ b/src/frontend/src/containers/tables/rdi/ImportedIndividualsTable/ImportedIndividualsTableRow.tsx @@ -5,7 +5,7 @@ import { AnonTableCell } from '@components/core/Table/AnonTableCell'; import { ClickableTableRow } from '@components/core/Table/ClickableTableRow'; import { UniversalMoment } from '@components/core/UniversalMoment'; import { useBaseUrl } from '@hooks/useBaseUrl'; -import { sexToCapitalize } from '@utils/utils'; +import { displayNameWithLocal, sexToCapitalize } from '@utils/utils'; import { ReactElement } from 'react'; import { DedupeBiographicalBiometricResults } from '@components/rdi/details/DedupeBiographicalBiometricResults'; import { IndividualList } from '@restgenerated/models/IndividualList'; @@ -96,7 +96,7 @@ export function ImportedIndividualsTableRow({ {individual.unicefId} - {individual.fullName} + {displayNameWithLocal(individual, 'fullName')} {individual.role} {individual.relationshipDisplay} diff --git a/src/frontend/src/containers/tables/rdi/ImportedPeopleTable/ImportedPeopleTableRow.tsx b/src/frontend/src/containers/tables/rdi/ImportedPeopleTable/ImportedPeopleTableRow.tsx index fc7ae78056a..894d25d3a7e 100644 --- a/src/frontend/src/containers/tables/rdi/ImportedPeopleTable/ImportedPeopleTableRow.tsx +++ b/src/frontend/src/containers/tables/rdi/ImportedPeopleTable/ImportedPeopleTableRow.tsx @@ -5,7 +5,7 @@ import { AnonTableCell } from '@components/core/Table/AnonTableCell'; import { ClickableTableRow } from '@components/core/Table/ClickableTableRow'; import { UniversalMoment } from '@components/core/UniversalMoment'; import { useBaseUrl } from '@hooks/useBaseUrl'; -import { choicesToDict, sexToCapitalize } from '@utils/utils'; +import { choicesToDict, displayNameWithLocal, sexToCapitalize } from '@utils/utils'; import { ReactElement } from 'react'; import { DedupeBiographicalBiometricResults } from '@components/rdi/details/DedupeBiographicalBiometricResults'; import { IndividualList } from '@restgenerated/models/IndividualList'; @@ -81,7 +81,7 @@ export function ImportedPeopleTableRow({ {individual.unicefId} - {individual.fullName} + {displayNameWithLocal(individual, 'fullName')} {roleChoicesDict[individual.role]} {relationshipChoicesDict[individual.relationship]} diff --git a/src/frontend/src/containers/tables/targeting/TargetPopulationHouseholdTable/TargetPopulationHouseholdRow.tsx b/src/frontend/src/containers/tables/targeting/TargetPopulationHouseholdTable/TargetPopulationHouseholdRow.tsx index 943cb181b10..9b9262bf716 100644 --- a/src/frontend/src/containers/tables/targeting/TargetPopulationHouseholdTable/TargetPopulationHouseholdRow.tsx +++ b/src/frontend/src/containers/tables/targeting/TargetPopulationHouseholdTable/TargetPopulationHouseholdRow.tsx @@ -5,6 +5,7 @@ import { BlackLink } from '@components/core/BlackLink'; import { useBaseUrl } from '@hooks/useBaseUrl'; import { ReactElement } from 'react'; import { PendingPayment } from '@restgenerated/models/PendingPayment'; +import { displayNameWithLocal } from '@utils/utils'; interface TargetPopulationHouseholdTableRowProps { payment: PendingPayment; @@ -41,7 +42,7 @@ export function TargetPopulationHouseholdTableRow({ payment.householdUnicefId )} - {payment.headOfHousehold.fullName || '-'} + {displayNameWithLocal(payment.headOfHousehold, 'fullName') || '-'} {payment.householdSize} {payment.householdAdmin2 || '-'} diff --git a/src/frontend/src/containers/tables/targeting/TargetPopulationPeopleTable/TargetPopulationPeopleRow.tsx b/src/frontend/src/containers/tables/targeting/TargetPopulationPeopleTable/TargetPopulationPeopleRow.tsx index 786699bf2f2..3ec707fdbf1 100644 --- a/src/frontend/src/containers/tables/targeting/TargetPopulationPeopleTable/TargetPopulationPeopleRow.tsx +++ b/src/frontend/src/containers/tables/targeting/TargetPopulationPeopleTable/TargetPopulationPeopleRow.tsx @@ -5,6 +5,7 @@ import { BlackLink } from '@components/core/BlackLink'; import { useBaseUrl } from '@hooks/useBaseUrl'; import { ReactElement } from 'react'; import { PendingPayment } from '@restgenerated/models/PendingPayment'; +import { displayNameWithLocal } from '@utils/utils'; interface TargetPopulationPeopleTableRowProps { payment: PendingPayment; @@ -41,7 +42,7 @@ export function TargetPopulationPeopleTableRow({ payment?.headOfHousehold.unicefId )} - {payment?.headOfHousehold?.fullName || '-'} + {displayNameWithLocal(payment?.headOfHousehold, 'fullName') || '-'} {payment?.householdAdmin2 || '-'} {payment?.householdSize != null ? payment.householdSize : '-'} diff --git a/src/frontend/src/restgenerated/models/HeadOfHousehold.ts b/src/frontend/src/restgenerated/models/HeadOfHousehold.ts index 2f0817f5fae..14b8724660c 100644 --- a/src/frontend/src/restgenerated/models/HeadOfHousehold.ts +++ b/src/frontend/src/restgenerated/models/HeadOfHousehold.ts @@ -8,5 +8,9 @@ export type HeadOfHousehold = { * Full Name of the Beneficiary */ fullName: string; + /** + * Full Name of the Beneficiary in local charset + */ + fullNameLocal?: string | null; }; diff --git a/src/frontend/src/restgenerated/models/HouseholdMember.ts b/src/frontend/src/restgenerated/models/HouseholdMember.ts index 99ff9cc6016..40d7233690e 100644 --- a/src/frontend/src/restgenerated/models/HouseholdMember.ts +++ b/src/frontend/src/restgenerated/models/HouseholdMember.ts @@ -12,6 +12,10 @@ export type HouseholdMember = { * Full Name of the Beneficiary */ fullName: string; + /** + * Full Name of the Beneficiary in local charset + */ + fullNameLocal?: string | null; readonly role: string; /** * This represents the MEMBER relationship. can be blank diff --git a/src/frontend/src/restgenerated/models/Individual.ts b/src/frontend/src/restgenerated/models/Individual.ts index 55c46c1c270..ae52c935600 100644 --- a/src/frontend/src/restgenerated/models/Individual.ts +++ b/src/frontend/src/restgenerated/models/Individual.ts @@ -41,18 +41,34 @@ export type Individual = { * Full Name of the Beneficiary */ fullName: string; + /** + * Full Name of the Beneficiary in local charset + */ + fullNameLocal?: string | null; /** * First name of the Beneficiary */ givenName?: string; + /** + * First name of the Beneficiary in local charset + */ + givenNameLocal?: string | null; /** * Middle name of the Beneficiary */ middleName?: string; + /** + * Middle name of the Beneficiary in local charset + */ + middleNameLocal?: string | null; /** * Last name of the Beneficiary */ familyName?: string; + /** + * Last name of the Beneficiary in local charset + */ + familyNameLocal?: string | null; /** * Estimated birth date flag */ diff --git a/src/frontend/src/restgenerated/models/IndividualDetail.ts b/src/frontend/src/restgenerated/models/IndividualDetail.ts index 705aed584a3..1372875a19d 100644 --- a/src/frontend/src/restgenerated/models/IndividualDetail.ts +++ b/src/frontend/src/restgenerated/models/IndividualDetail.ts @@ -30,18 +30,34 @@ export type IndividualDetail = { * Full Name of the Beneficiary */ fullName: string; + /** + * Full Name of the Beneficiary in local charset + */ + fullNameLocal?: string | null; /** * First name of the Beneficiary */ givenName?: string; + /** + * First name of the Beneficiary in local charset + */ + givenNameLocal?: string | null; /** * Middle name of the Beneficiary */ middleName?: string; + /** + * Middle name of the Beneficiary in local charset + */ + middleNameLocal?: string | null; /** * Last name of the Beneficiary */ familyName?: string; + /** + * Last name of the Beneficiary in local charset + */ + familyNameLocal?: string | null; /** * Beneficiary gender * diff --git a/src/frontend/src/restgenerated/models/IndividualList.ts b/src/frontend/src/restgenerated/models/IndividualList.ts index 1ba1c20fbf6..7a58f0cc391 100644 --- a/src/frontend/src/restgenerated/models/IndividualList.ts +++ b/src/frontend/src/restgenerated/models/IndividualList.ts @@ -19,6 +19,10 @@ export type IndividualList = { * Full Name of the Beneficiary */ fullName: string; + /** + * Full Name of the Beneficiary in local charset + */ + fullNameLocal?: string | null; household: IndividualListHousehold; readonly status: string; /** diff --git a/src/frontend/src/restgenerated/models/IndividualSimple.ts b/src/frontend/src/restgenerated/models/IndividualSimple.ts index 7d36e426056..7a68be8d661 100644 --- a/src/frontend/src/restgenerated/models/IndividualSimple.ts +++ b/src/frontend/src/restgenerated/models/IndividualSimple.ts @@ -11,6 +11,10 @@ export type IndividualSimple = { * Full Name of the Beneficiary */ fullName: string; + /** + * Full Name of the Beneficiary in local charset + */ + fullNameLocal?: string | null; household: HouseholdSimple; readonly rolesInHouseholds: Record; /** diff --git a/src/frontend/src/utils/utils.ts b/src/frontend/src/utils/utils.ts index 12841a26cb2..5ec2fb36009 100644 --- a/src/frontend/src/utils/utils.ts +++ b/src/frontend/src/utils/utils.ts @@ -8,6 +8,17 @@ import { useLocation, useNavigate } from 'react-router-dom'; import { theme as themeObj } from '../theme'; import { GRIEVANCE_CATEGORIES, PAYMENT_PLAN_STATES } from './constants'; +export function displayNameWithLocal>( + obj: T | null | undefined, + key: string & keyof T, +): string { + if (!obj) return ''; + const name = obj[key] as string | null | undefined; + if (!name) return ''; + const localName = obj[`${key}Local`] as string | null | undefined; + return localName ? `${name} (${localName})` : name; +} + // Formats a string or array value to Normal Case using lodash's startCase export function formatNormalCaseValue(value: string | string[]): string { if (typeof value === 'string') { From 10881bd5387e1a8b44a95577930d6646e8ffc1dd Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 16 Apr 2026 11:37:38 -0400 Subject: [PATCH 03/33] add new fields --- .../core_fields_attributes.py | 80 +++++++++++++++++++ .../api/serializers/grievance_ticket.py | 8 ++ .../household/api/serializers/household.py | 2 + .../household/api/serializers/individual.py | 8 ++ .../household/migrations/0039_migration.py | 63 +++++++++++++++ src/hope/models/individual.py | 33 ++++++++ 6 files changed, 194 insertions(+) create mode 100644 src/hope/apps/household/migrations/0039_migration.py diff --git a/src/hope/apps/core/field_attributes/core_fields_attributes.py b/src/hope/apps/core/field_attributes/core_fields_attributes.py index 00dcd1aed89..43bc6b18b00 100644 --- a/src/hope/apps/core/field_attributes/core_fields_attributes.py +++ b/src/hope/apps/core/field_attributes/core_fields_attributes.py @@ -460,6 +460,26 @@ Scope.PEOPLE_UPDATE, ], }, + { + "id": "248b358f-ea96-4794-941b-986af9d8ad5e", + "type": TYPE_STRING, + "name": "full_name_local", + "lookup": "full_name_local", + "required": False, + "label": {"English(EN)": "Full name local"}, + "hint": "", + "choices": [], + "associated_with": _INDIVIDUAL, + "xlsx_field": "full_name_local_i_c", + "scope": [ + Scope.GLOBAL, + Scope.TARGETING, + Scope.KOBO_IMPORT, + Scope.INDIVIDUAL_UPDATE, + Scope.XLSX_PEOPLE, + Scope.PEOPLE_UPDATE, + ], + }, { "id": "b1f90314-b8b8-4bcb-9265-9d48d1fce5a4", "type": TYPE_STRING, @@ -480,6 +500,26 @@ Scope.PEOPLE_UPDATE, ], }, + { + "id": "ee311eb5-c0af-4d19-a74e-7ad504260034", + "type": TYPE_STRING, + "name": "given_name_local", + "lookup": "given_name_local", + "required": False, + "label": {"English(EN)": "Given name local"}, + "hint": "", + "choices": [], + "associated_with": _INDIVIDUAL, + "xlsx_field": "given_name_local_i_c", + "scope": [ + Scope.GLOBAL, + Scope.TARGETING, + Scope.KOBO_IMPORT, + Scope.INDIVIDUAL_UPDATE, + Scope.XLSX_PEOPLE, + Scope.PEOPLE_UPDATE, + ], + }, { "id": "6f603107-bd88-4a8d-97cc-748a7238358d", "type": TYPE_STRING, @@ -500,6 +540,26 @@ Scope.PEOPLE_UPDATE, ], }, + { + "id": "f307f3ad-01ed-4465-87bf-b4952c85bdc0", + "type": TYPE_STRING, + "name": "middle_name_local", + "lookup": "middle_name_local", + "required": False, + "label": {"English(EN)": "Middle name(s) local"}, + "hint": "", + "choices": [], + "associated_with": _INDIVIDUAL, + "xlsx_field": "middle_name_local_i_c", + "scope": [ + Scope.GLOBAL, + Scope.TARGETING, + Scope.KOBO_IMPORT, + Scope.INDIVIDUAL_UPDATE, + Scope.XLSX_PEOPLE, + Scope.PEOPLE_UPDATE, + ], + }, { "id": "3f74dd36-bfd2-4c84-bfc7-21f7adbff7f0", "type": TYPE_STRING, @@ -520,6 +580,26 @@ Scope.PEOPLE_UPDATE, ], }, + { + "id": "a88bcf60-4b3e-4bcb-bef5-7c8eb478e5e8", + "type": TYPE_STRING, + "name": "family_name_local", + "lookup": "family_name_local", + "required": False, + "label": {"English(EN)": "Family name local"}, + "hint": "", + "choices": [], + "associated_with": _INDIVIDUAL, + "xlsx_field": "family_name_local_i_c", + "scope": [ + Scope.GLOBAL, + Scope.TARGETING, + Scope.KOBO_IMPORT, + Scope.INDIVIDUAL_UPDATE, + Scope.XLSX_PEOPLE, + Scope.PEOPLE_UPDATE, + ], + }, { "id": "da726870-dfc9-48dc-aba9-b9138b611c74", "type": TYPE_SELECT_ONE, diff --git a/src/hope/apps/grievance/api/serializers/grievance_ticket.py b/src/hope/apps/grievance/api/serializers/grievance_ticket.py index 63a85581ac2..a7217aa83b8 100644 --- a/src/hope/apps/grievance/api/serializers/grievance_ticket.py +++ b/src/hope/apps/grievance/api/serializers/grievance_ticket.py @@ -384,6 +384,10 @@ class AddIndividualDataSerializer(serializers.Serializer): given_name = serializers.CharField(required=False) middle_name = serializers.CharField(required=False) family_name = serializers.CharField(required=False) + full_name_local = serializers.CharField(required=False) + given_name_local = serializers.CharField(required=False) + middle_name_local = serializers.CharField(required=False) + family_name_local = serializers.CharField(required=False) sex = serializers.CharField() birth_date = serializers.DateField() estimated_birth_date = serializers.BooleanField() @@ -424,6 +428,10 @@ class IndividualUpdateDataSerializer(serializers.Serializer): given_name = serializers.CharField(required=False) middle_name = serializers.CharField(required=False) family_name = serializers.CharField(required=False) + full_name_local = serializers.CharField(required=False) + given_name_local = serializers.CharField(required=False) + middle_name_local = serializers.CharField(required=False) + family_name_local = serializers.CharField(required=False) sex = serializers.CharField(required=False) birth_date = serializers.DateField(required=False) estimated_birth_date = serializers.BooleanField(required=False) diff --git a/src/hope/apps/household/api/serializers/household.py b/src/hope/apps/household/api/serializers/household.py index 544d3a4bda0..f472b72c6eb 100644 --- a/src/hope/apps/household/api/serializers/household.py +++ b/src/hope/apps/household/api/serializers/household.py @@ -92,6 +92,7 @@ class Meta: fields = ( "id", "full_name", + "full_name_local", ) @@ -165,6 +166,7 @@ class Meta: "id", "unicef_id", "full_name", + "full_name_local", "role", "relationship", "status", diff --git a/src/hope/apps/household/api/serializers/individual.py b/src/hope/apps/household/api/serializers/individual.py index 0daa9726e28..a0995f2bdc9 100644 --- a/src/hope/apps/household/api/serializers/individual.py +++ b/src/hope/apps/household/api/serializers/individual.py @@ -96,6 +96,7 @@ class Meta: "id", "unicef_id", "full_name", + "full_name_local", ) @@ -142,6 +143,7 @@ class Meta: "id", "unicef_id", "full_name", + "full_name_local", "household", "roles_in_households", "relationship", @@ -260,6 +262,7 @@ class Meta: "id", "unicef_id", "full_name", + "full_name_local", "household", "status", "relationship", @@ -348,6 +351,10 @@ class Meta: "given_name", "middle_name", "family_name", + "full_name_local", + "given_name_local", + "middle_name_local", + "family_name_local", "sex", "age", "birth_date", @@ -467,6 +474,7 @@ class Meta: "unicef_id", "household", "full_name", + "full_name_local", "birth_date", "last_registration_date", "sex", diff --git a/src/hope/apps/household/migrations/0039_migration.py b/src/hope/apps/household/migrations/0039_migration.py new file mode 100644 index 00000000000..124d140eabf --- /dev/null +++ b/src/hope/apps/household/migrations/0039_migration.py @@ -0,0 +1,63 @@ +# Generated by Django 5.2.12 on 2026-04-16 15:10 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("household", "0038_migration"), + ] + + operations = [ + migrations.AddField( + model_name="individual", + name="family_name_local", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Last local name of the Beneficiary", + max_length=150, + null=True, + ), + ), + migrations.AddField( + model_name="individual", + name="full_name_local", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Full Local Name of the Beneficiary", + max_length=500, + null=True, + validators=[django.core.validators.MinLengthValidator(2)], + ), + ), + migrations.AddField( + model_name="individual", + name="given_name_local", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="First local name of the Beneficiary", + max_length=150, + null=True, + ), + ), + migrations.AddField( + model_name="individual", + name="middle_name_local", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Middle local name of the Beneficiary", + max_length=150, + null=True, + ), + ), + ] diff --git a/src/hope/models/individual.py b/src/hope/models/individual.py index 5e84eed082c..55a7e45832b 100644 --- a/src/hope/models/individual.py +++ b/src/hope/models/individual.py @@ -200,6 +200,39 @@ class Individual( family_name = models.CharField( max_length=85, blank=True, db_index=True, help_text="Last name of the Beneficiary", db_collation="und-ci-det" ) + full_name_local = models.CharField( + max_length=500, + validators=[MinLengthValidator(2)], + db_index=True, + help_text="Full Local Name of the Beneficiary", + db_collation="und-ci-det", + blank=True, + null=True, + ) + given_name_local = models.CharField( + max_length=150, + blank=True, + db_index=True, + help_text="First local name of the Beneficiary", + db_collation="und-ci-det", + null=True, + ) + middle_name_local = models.CharField( + max_length=150, + blank=True, + db_index=True, + help_text="Middle local name of the Beneficiary", + db_collation="und-ci-det", + null=True, + ) + family_name_local = models.CharField( + max_length=150, + blank=True, + db_index=True, + help_text="Last local name of the Beneficiary", + db_collation="und-ci-det", + null=True, + ) sex = models.CharField( max_length=255, choices=SEX_CHOICE, From 1840269c33ea2a77668a7a57c79896313a8e7066 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 16 Apr 2026 11:37:52 -0400 Subject: [PATCH 04/33] migrations --- src/hope/apps/household/migrations/0039_migration.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hope/apps/household/migrations/0039_migration.py b/src/hope/apps/household/migrations/0039_migration.py index 124d140eabf..7885ab8f20d 100644 --- a/src/hope/apps/household/migrations/0039_migration.py +++ b/src/hope/apps/household/migrations/0039_migration.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("household", "0038_migration"), ] From 805e27badf793ec169021053e38396c7833a9c4c Mon Sep 17 00:00:00 2001 From: Maciej Szewczyk Date: Thu, 16 Apr 2026 19:42:12 +0200 Subject: [PATCH 05/33] display local names, regenerate types --- .../HouseholdTable/HouseholdTable.test.tsx | 3 +- src/frontend/src/restgenerated/index.ts | 1 - .../restgenerated/models/AddIndividualData.ts | 4 + .../src/restgenerated/models/CurrencyEnum.ts | 335 ------------------ ...plicationEngineSimilarityPairIndividual.ts | 2 +- .../models/GrievanceTicketDetail.ts | 2 +- .../models/GrievanceTicketList.ts | 2 +- .../restgenerated/models/HeadOfHousehold.ts | 2 +- .../src/restgenerated/models/Household.ts | 176 +-------- .../restgenerated/models/HouseholdDetail.ts | 173 +-------- .../src/restgenerated/models/HouseholdList.ts | 171 +-------- .../restgenerated/models/HouseholdMember.ts | 4 +- .../restgenerated/models/HouseholdSimple.ts | 2 +- .../src/restgenerated/models/Individual.ts | 26 +- .../restgenerated/models/IndividualDetail.ts | 28 +- .../restgenerated/models/IndividualList.ts | 4 +- .../restgenerated/models/IndividualSimple.ts | 2 +- .../models/IndividualUpdateData.ts | 4 + .../restgenerated/models/PartnerForProgram.ts | 2 +- .../models/PatchedPaymentPlanCreateUpdate.ts | 3 +- .../src/restgenerated/models/PaymentDetail.ts | 8 +- .../src/restgenerated/models/PaymentList.ts | 8 +- .../src/restgenerated/models/PaymentPlan.ts | 171 +-------- .../models/PaymentPlanCreateUpdate.ts | 3 +- .../restgenerated/models/PaymentPlanDetail.ts | 171 +-------- .../restgenerated/models/PaymentPlanList.ts | 171 +-------- .../models/PaymentVerificationPlanList.ts | 171 +-------- .../src/restgenerated/models/PushPeople.ts | 16 + .../models/TargetPopulationDetail.ts | 173 +-------- 29 files changed, 89 insertions(+), 1749 deletions(-) delete mode 100644 src/frontend/src/restgenerated/models/CurrencyEnum.ts diff --git a/src/frontend/src/containers/tables/population/HouseholdTable/HouseholdTable.test.tsx b/src/frontend/src/containers/tables/population/HouseholdTable/HouseholdTable.test.tsx index 0829a5b8121..bf8bd0c6859 100644 --- a/src/frontend/src/containers/tables/population/HouseholdTable/HouseholdTable.test.tsx +++ b/src/frontend/src/containers/tables/population/HouseholdTable/HouseholdTable.test.tsx @@ -7,7 +7,6 @@ import { HouseholdTable } from './HouseholdTable'; import { RestService } from '@restgenerated/services/RestService'; import { ProgramStatusEnum } from '@restgenerated/models/ProgramStatusEnum'; import { ResidenceStatusEnum } from '@restgenerated/models/ResidenceStatusEnum'; -import { CurrencyEnum } from '@restgenerated/models/CurrencyEnum'; import type { PaginatedHouseholdListList } from '@restgenerated/models/PaginatedHouseholdListList'; // Setup common mocks (useBaseUrl, useProgramContext, react-router-dom, utils, RestService) @@ -36,7 +35,7 @@ describe('HouseholdTable', () => { residenceStatus: ResidenceStatusEnum.HOST, totalCashReceived: '1000.00', totalCashReceivedUsd: '1000.00', - currency: CurrencyEnum.USD, + currency: 'USD', size: 5, status: 'ACTIVE', lastRegistrationDate: '2023-01-15T10:30:00Z', diff --git a/src/frontend/src/restgenerated/index.ts b/src/frontend/src/restgenerated/index.ts index 2206ce25655..6a0f3a8bba2 100644 --- a/src/frontend/src/restgenerated/index.ts +++ b/src/frontend/src/restgenerated/index.ts @@ -64,7 +64,6 @@ export type { CreateGrievanceDocument as CreateGrievanceDocumentCamelCase } from export type { CreateGrievanceTicket as CreateGrievanceTicketCamelCase } from './models/CreateGrievanceTicket'; export type { CreateGrievanceTicketExtras as CreateGrievanceTicketExtrasCamelCase } from './models/CreateGrievanceTicketExtras'; export { CurrenciesEnum as CurrenciesEnumCamelCase } from './models/CurrenciesEnum'; -export { CurrencyEnum as CurrencyEnumCamelCase } from './models/CurrencyEnum'; export type { DataCollectingType as DataCollectingTypeCamelCase } from './models/DataCollectingType'; export { DataCollectingTypeTypeEnum as DataCollectingTypeTypeEnumCamelCase } from './models/DataCollectingTypeTypeEnum'; export { DataSourceEnum as DataSourceEnumCamelCase } from './models/DataSourceEnum'; diff --git a/src/frontend/src/restgenerated/models/AddIndividualData.ts b/src/frontend/src/restgenerated/models/AddIndividualData.ts index 8bda4220863..b970acdff48 100644 --- a/src/frontend/src/restgenerated/models/AddIndividualData.ts +++ b/src/frontend/src/restgenerated/models/AddIndividualData.ts @@ -10,6 +10,10 @@ export type AddIndividualData = { givenName?: string; middleName?: string; familyName?: string; + fullNameLocal?: string; + givenNameLocal?: string; + middleNameLocal?: string; + familyNameLocal?: string; sex: string; birthDate: string; estimatedBirthDate: boolean; diff --git a/src/frontend/src/restgenerated/models/CurrencyEnum.ts b/src/frontend/src/restgenerated/models/CurrencyEnum.ts deleted file mode 100644 index cdf9e5e4b22..00000000000 --- a/src/frontend/src/restgenerated/models/CurrencyEnum.ts +++ /dev/null @@ -1,335 +0,0 @@ -/* generated using openapi-typescript-codegen -- do not edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -/** - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ -export enum CurrencyEnum { - AED = 'AED', - AFN = 'AFN', - ALL = 'ALL', - AMD = 'AMD', - ANG = 'ANG', - AOA = 'AOA', - ARS = 'ARS', - AUD = 'AUD', - AWG = 'AWG', - AZN = 'AZN', - BAM = 'BAM', - BBD = 'BBD', - BDT = 'BDT', - BGN = 'BGN', - BHD = 'BHD', - BIF = 'BIF', - BMD = 'BMD', - BND = 'BND', - BOB = 'BOB', - BOV = 'BOV', - BRL = 'BRL', - BSD = 'BSD', - BTN = 'BTN', - BWP = 'BWP', - BYN = 'BYN', - BZD = 'BZD', - CAD = 'CAD', - CDF = 'CDF', - CHF = 'CHF', - CLP = 'CLP', - CNY = 'CNY', - COP = 'COP', - CRC = 'CRC', - CUC = 'CUC', - CUP = 'CUP', - CVE = 'CVE', - CZK = 'CZK', - DJF = 'DJF', - DKK = 'DKK', - DOP = 'DOP', - DZD = 'DZD', - EGP = 'EGP', - ERN = 'ERN', - ETB = 'ETB', - EUR = 'EUR', - FJD = 'FJD', - FKP = 'FKP', - GBP = 'GBP', - GEL = 'GEL', - GHS = 'GHS', - GIP = 'GIP', - GMD = 'GMD', - GNF = 'GNF', - GTQ = 'GTQ', - GYD = 'GYD', - HKD = 'HKD', - HNL = 'HNL', - HRK = 'HRK', - HTG = 'HTG', - HUF = 'HUF', - IDR = 'IDR', - ILS = 'ILS', - INR = 'INR', - IQD = 'IQD', - IRR = 'IRR', - ISK = 'ISK', - JMD = 'JMD', - JOD = 'JOD', - JPY = 'JPY', - KES = 'KES', - KGS = 'KGS', - KHR = 'KHR', - KMF = 'KMF', - KPW = 'KPW', - KRW = 'KRW', - KWD = 'KWD', - KYD = 'KYD', - KZT = 'KZT', - LAK = 'LAK', - LBP = 'LBP', - LKR = 'LKR', - LRD = 'LRD', - LSL = 'LSL', - LYD = 'LYD', - MAD = 'MAD', - MDL = 'MDL', - MGA = 'MGA', - MKD = 'MKD', - MMK = 'MMK', - MNT = 'MNT', - MOP = 'MOP', - MRU = 'MRU', - MUR = 'MUR', - MVR = 'MVR', - MWK = 'MWK', - MXN = 'MXN', - MYR = 'MYR', - MZN = 'MZN', - NAD = 'NAD', - NGN = 'NGN', - NIO = 'NIO', - NOK = 'NOK', - NPR = 'NPR', - NZD = 'NZD', - OMR = 'OMR', - PAB = 'PAB', - PEN = 'PEN', - PGK = 'PGK', - PHP = 'PHP', - PKR = 'PKR', - PLN = 'PLN', - PYG = 'PYG', - QAR = 'QAR', - RON = 'RON', - RSD = 'RSD', - RUB = 'RUB', - RWF = 'RWF', - SAR = 'SAR', - SBD = 'SBD', - SCR = 'SCR', - SDG = 'SDG', - SEK = 'SEK', - SGD = 'SGD', - SHP = 'SHP', - SLE = 'SLE', - SOS = 'SOS', - SRD = 'SRD', - SSP = 'SSP', - STN = 'STN', - SVC = 'SVC', - SYP = 'SYP', - SYP01 = 'SYP01', - SZL = 'SZL', - THB = 'THB', - TJS = 'TJS', - TMT = 'TMT', - TND = 'TND', - TOP = 'TOP', - TRY = 'TRY', - TTD = 'TTD', - TWD = 'TWD', - TZS = 'TZS', - UAH = 'UAH', - UGX = 'UGX', - USD = 'USD', - UYU = 'UYU', - UYW = 'UYW', - UZS = 'UZS', - VES = 'VES', - VND = 'VND', - VUV = 'VUV', - WST = 'WST', - XAF = 'XAF', - XAG = 'XAG', - XAU = 'XAU', - XCD = 'XCD', - XOF = 'XOF', - XPF = 'XPF', - YER = 'YER', - ZAR = 'ZAR', - ZMW = 'ZMW', - ZWL = 'ZWL', - USDC = 'USDC', -} diff --git a/src/frontend/src/restgenerated/models/DeduplicationEngineSimilarityPairIndividual.ts b/src/frontend/src/restgenerated/models/DeduplicationEngineSimilarityPairIndividual.ts index 73f7dc8a3b8..110975da4c5 100644 --- a/src/frontend/src/restgenerated/models/DeduplicationEngineSimilarityPairIndividual.ts +++ b/src/frontend/src/restgenerated/models/DeduplicationEngineSimilarityPairIndividual.ts @@ -4,7 +4,7 @@ /* eslint-disable */ export type DeduplicationEngineSimilarityPairIndividual = { id: string; - readonly photo: string; + readonly photo: string | null; fullName: string; unicefId: string; similarityScore: number; diff --git a/src/frontend/src/restgenerated/models/GrievanceTicketDetail.ts b/src/frontend/src/restgenerated/models/GrievanceTicketDetail.ts index ab2b886261e..1291873676d 100644 --- a/src/frontend/src/restgenerated/models/GrievanceTicketDetail.ts +++ b/src/frontend/src/restgenerated/models/GrievanceTicketDetail.ts @@ -34,7 +34,7 @@ export type GrievanceTicketDetail = { createdBy: User; readonly updatedAt: string; readonly totalDays: number | null; - readonly targetId: string; + readonly targetId: string | null; readonly relatedTickets: Record; readonly adminUrl: string | null; consent?: boolean; diff --git a/src/frontend/src/restgenerated/models/GrievanceTicketList.ts b/src/frontend/src/restgenerated/models/GrievanceTicketList.ts index 4e2c11b0057..cebdb5d7d3f 100644 --- a/src/frontend/src/restgenerated/models/GrievanceTicketList.ts +++ b/src/frontend/src/restgenerated/models/GrievanceTicketList.ts @@ -30,6 +30,6 @@ export type GrievanceTicketList = { readonly totalDays: number | null; readonly relatedTickets: Record; readonly programs: Record; - readonly targetId: string; + readonly targetId: string | null; }; diff --git a/src/frontend/src/restgenerated/models/HeadOfHousehold.ts b/src/frontend/src/restgenerated/models/HeadOfHousehold.ts index 14b8724660c..c731fc4b6e0 100644 --- a/src/frontend/src/restgenerated/models/HeadOfHousehold.ts +++ b/src/frontend/src/restgenerated/models/HeadOfHousehold.ts @@ -9,7 +9,7 @@ export type HeadOfHousehold = { */ fullName: string; /** - * Full Name of the Beneficiary in local charset + * Full Local Name of the Beneficiary */ fullNameLocal?: string | null; }; diff --git a/src/frontend/src/restgenerated/models/Household.ts b/src/frontend/src/restgenerated/models/Household.ts index f586de47d87..c99cb628a2a 100644 --- a/src/frontend/src/restgenerated/models/Household.ts +++ b/src/frontend/src/restgenerated/models/Household.ts @@ -6,7 +6,6 @@ import type { CollectTypeEnum } from './CollectTypeEnum'; import type { ConsentSharingEnum } from './ConsentSharingEnum'; import type { CountryEnum } from './CountryEnum'; import type { CountryOriginEnum } from './CountryOriginEnum'; -import type { CurrencyEnum } from './CurrencyEnum'; import type { OrgEnumeratorEnum } from './OrgEnumeratorEnum'; import type { RdiMergeStatusEnum } from './RdiMergeStatusEnum'; import type { RegistrationMethodEnum } from './RegistrationMethodEnum'; @@ -199,174 +198,9 @@ export type Household = { */ childHoh?: boolean | null; /** - * Household currency - * - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ - currency?: CurrencyEnum; + * Household currency (legacy, pending removal) + */ + currencyOld?: string; /** * Household unhcr id */ @@ -480,6 +314,10 @@ export type Household = { */ copiedFrom?: string | null; facility?: string | null; + /** + * Household currency + */ + currency?: number | null; /** * This is only used to track collector (primary or secondary) of a household. * They may still be a HOH of this household or any other household. diff --git a/src/frontend/src/restgenerated/models/HouseholdDetail.ts b/src/frontend/src/restgenerated/models/HouseholdDetail.ts index 47edab2d957..3e4aa542543 100644 --- a/src/frontend/src/restgenerated/models/HouseholdDetail.ts +++ b/src/frontend/src/restgenerated/models/HouseholdDetail.ts @@ -4,7 +4,6 @@ /* eslint-disable */ import type { AreaSimple } from './AreaSimple'; import type { ConsentSharingEnum } from './ConsentSharingEnum'; -import type { CurrencyEnum } from './CurrencyEnum'; import type { HeadOfHousehold } from './HeadOfHousehold'; import type { OrgEnumeratorEnum } from './OrgEnumeratorEnum'; import type { RegistrationDataImport } from './RegistrationDataImport'; @@ -32,7 +31,7 @@ export type HouseholdDetail = { readonly adminAreaTitle: string; readonly activeIndividualsCount: number; readonly geopoint: string | null; - readonly importId: string; + readonly importId: string | null; readonly adminUrl: string | null; /** * Household male children count @@ -46,175 +45,7 @@ export type HouseholdDetail = { * Household children disabled count */ childrenDisabledCount?: number | null; - /** - * Household currency - * - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ - currency?: CurrencyEnum; + readonly currency: string | null; /** * Household first registration date [sys] */ diff --git a/src/frontend/src/restgenerated/models/HouseholdList.ts b/src/frontend/src/restgenerated/models/HouseholdList.ts index c618160234a..d7b280462cc 100644 --- a/src/frontend/src/restgenerated/models/HouseholdList.ts +++ b/src/frontend/src/restgenerated/models/HouseholdList.ts @@ -3,7 +3,6 @@ /* tslint:disable */ /* eslint-disable */ import type { AreaSimple } from './AreaSimple'; -import type { CurrencyEnum } from './CurrencyEnum'; export type HouseholdList = { readonly id: string; unicefId?: string | null; @@ -26,175 +25,7 @@ export type HouseholdList = { * Household first registration date [sys] */ firstRegistrationDate: string; - /** - * Household currency - * - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ - currency?: CurrencyEnum; + readonly currency: string | null; hasDuplicates: boolean; sanctionListPossibleMatch: boolean; sanctionListConfirmedMatch: boolean; diff --git a/src/frontend/src/restgenerated/models/HouseholdMember.ts b/src/frontend/src/restgenerated/models/HouseholdMember.ts index 40d7233690e..359563f18af 100644 --- a/src/frontend/src/restgenerated/models/HouseholdMember.ts +++ b/src/frontend/src/restgenerated/models/HouseholdMember.ts @@ -13,10 +13,10 @@ export type HouseholdMember = { */ fullName: string; /** - * Full Name of the Beneficiary in local charset + * Full Local Name of the Beneficiary */ fullNameLocal?: string | null; - readonly role: string; + readonly role: string | null; /** * This represents the MEMBER relationship. can be blank * as well if household is null! diff --git a/src/frontend/src/restgenerated/models/HouseholdSimple.ts b/src/frontend/src/restgenerated/models/HouseholdSimple.ts index 52d9955fa80..f0325eb55b1 100644 --- a/src/frontend/src/restgenerated/models/HouseholdSimple.ts +++ b/src/frontend/src/restgenerated/models/HouseholdSimple.ts @@ -42,7 +42,7 @@ export type HouseholdSimple = { */ village?: string; readonly geopoint: string | null; - readonly importId: string; + readonly importId: string | null; programCode: string; }; diff --git a/src/frontend/src/restgenerated/models/Individual.ts b/src/frontend/src/restgenerated/models/Individual.ts index ae52c935600..cf8842976a7 100644 --- a/src/frontend/src/restgenerated/models/Individual.ts +++ b/src/frontend/src/restgenerated/models/Individual.ts @@ -41,32 +41,32 @@ export type Individual = { * Full Name of the Beneficiary */ fullName: string; - /** - * Full Name of the Beneficiary in local charset - */ - fullNameLocal?: string | null; /** * First name of the Beneficiary */ givenName?: string; - /** - * First name of the Beneficiary in local charset - */ - givenNameLocal?: string | null; /** * Middle name of the Beneficiary */ middleName?: string; - /** - * Middle name of the Beneficiary in local charset - */ - middleNameLocal?: string | null; /** * Last name of the Beneficiary */ familyName?: string; /** - * Last name of the Beneficiary in local charset + * Full Local Name of the Beneficiary + */ + fullNameLocal?: string | null; + /** + * First local name of the Beneficiary + */ + givenNameLocal?: string | null; + /** + * Middle local name of the Beneficiary + */ + middleNameLocal?: string | null; + /** + * Last local name of the Beneficiary */ familyNameLocal?: string | null; /** diff --git a/src/frontend/src/restgenerated/models/IndividualDetail.ts b/src/frontend/src/restgenerated/models/IndividualDetail.ts index 1372875a19d..cfd9df4787f 100644 --- a/src/frontend/src/restgenerated/models/IndividualDetail.ts +++ b/src/frontend/src/restgenerated/models/IndividualDetail.ts @@ -30,32 +30,32 @@ export type IndividualDetail = { * Full Name of the Beneficiary */ fullName: string; - /** - * Full Name of the Beneficiary in local charset - */ - fullNameLocal?: string | null; /** * First name of the Beneficiary */ givenName?: string; - /** - * First name of the Beneficiary in local charset - */ - givenNameLocal?: string | null; /** * Middle name of the Beneficiary */ middleName?: string; - /** - * Middle name of the Beneficiary in local charset - */ - middleNameLocal?: string | null; /** * Last name of the Beneficiary */ familyName?: string; /** - * Last name of the Beneficiary in local charset + * Full Local Name of the Beneficiary + */ + fullNameLocal?: string | null; + /** + * First local name of the Beneficiary + */ + givenNameLocal?: string | null; + /** + * Middle local name of the Beneficiary + */ + middleNameLocal?: string | null; + /** + * Last local name of the Beneficiary */ familyNameLocal?: string | null; /** @@ -127,7 +127,7 @@ export type IndividualDetail = { */ relationship?: RelationshipEnum; registrationDataImport: RegistrationDataImport; - readonly importId: string; + readonly importId: string | null; readonly adminUrl: string | null; /** * Preferred language diff --git a/src/frontend/src/restgenerated/models/IndividualList.ts b/src/frontend/src/restgenerated/models/IndividualList.ts index 7a58f0cc391..83a90da8118 100644 --- a/src/frontend/src/restgenerated/models/IndividualList.ts +++ b/src/frontend/src/restgenerated/models/IndividualList.ts @@ -20,7 +20,7 @@ export type IndividualList = { */ fullName: string; /** - * Full Name of the Beneficiary in local charset + * Full Local Name of the Beneficiary */ fullNameLocal?: string | null; household: IndividualListHousehold; @@ -116,6 +116,6 @@ export type IndividualList = { * Last registration date [sys] */ lastRegistrationDate: string; - readonly role: string; + readonly role: string | null; }; diff --git a/src/frontend/src/restgenerated/models/IndividualSimple.ts b/src/frontend/src/restgenerated/models/IndividualSimple.ts index 7a68be8d661..e80532cd715 100644 --- a/src/frontend/src/restgenerated/models/IndividualSimple.ts +++ b/src/frontend/src/restgenerated/models/IndividualSimple.ts @@ -12,7 +12,7 @@ export type IndividualSimple = { */ fullName: string; /** - * Full Name of the Beneficiary in local charset + * Full Local Name of the Beneficiary */ fullNameLocal?: string | null; household: HouseholdSimple; diff --git a/src/frontend/src/restgenerated/models/IndividualUpdateData.ts b/src/frontend/src/restgenerated/models/IndividualUpdateData.ts index 441e8c3032b..396bc52406a 100644 --- a/src/frontend/src/restgenerated/models/IndividualUpdateData.ts +++ b/src/frontend/src/restgenerated/models/IndividualUpdateData.ts @@ -14,6 +14,10 @@ export type IndividualUpdateData = { givenName?: string; middleName?: string; familyName?: string; + fullNameLocal?: string; + givenNameLocal?: string; + middleNameLocal?: string; + familyNameLocal?: string; sex?: string; birthDate?: string; estimatedBirthDate?: boolean; diff --git a/src/frontend/src/restgenerated/models/PartnerForProgram.ts b/src/frontend/src/restgenerated/models/PartnerForProgram.ts index 4b33050a602..94367cbba5d 100644 --- a/src/frontend/src/restgenerated/models/PartnerForProgram.ts +++ b/src/frontend/src/restgenerated/models/PartnerForProgram.ts @@ -11,6 +11,6 @@ export type PartnerForProgram = { readonly id: number; name: string; readonly areaAccess: string; - readonly areas: Record; + readonly areas: Record | null; }; diff --git a/src/frontend/src/restgenerated/models/PatchedPaymentPlanCreateUpdate.ts b/src/frontend/src/restgenerated/models/PatchedPaymentPlanCreateUpdate.ts index 2434cc43c93..ded27377086 100644 --- a/src/frontend/src/restgenerated/models/PatchedPaymentPlanCreateUpdate.ts +++ b/src/frontend/src/restgenerated/models/PatchedPaymentPlanCreateUpdate.ts @@ -2,13 +2,12 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { CurrencyEnum } from './CurrencyEnum'; export type PatchedPaymentPlanCreateUpdate = { readonly id?: string; targetPopulationId?: string; dispersionStartDate?: string; dispersionEndDate?: string; - currency?: CurrencyEnum; + currency?: string | null; readonly version?: number; }; diff --git a/src/frontend/src/restgenerated/models/PaymentDetail.ts b/src/frontend/src/restgenerated/models/PaymentDetail.ts index 38e41119770..61b620342c3 100644 --- a/src/frontend/src/restgenerated/models/PaymentDetail.ts +++ b/src/frontend/src/restgenerated/models/PaymentDetail.ts @@ -43,11 +43,11 @@ export type PaymentDetail = { deliveryType?: string | null; status?: PaymentStatusEnum; readonly statusDisplay: string; - currency?: string | null; + readonly currency: string | null; readonly fspAuthCode: string; - readonly hohId: string; - readonly hohUnicefId: string; - readonly hohFullName: string; + readonly hohId: any; + readonly hohUnicefId: any; + readonly hohFullName: any; readonly collectorId: string; readonly collectorPhoneNo: string; readonly collectorPhoneNoAlt: string; diff --git a/src/frontend/src/restgenerated/models/PaymentList.ts b/src/frontend/src/restgenerated/models/PaymentList.ts index aeb1dee5859..679ec1135aa 100644 --- a/src/frontend/src/restgenerated/models/PaymentList.ts +++ b/src/frontend/src/restgenerated/models/PaymentList.ts @@ -38,11 +38,11 @@ export type PaymentList = { deliveryType?: string | null; status?: PaymentStatusEnum; readonly statusDisplay: string; - currency?: string | null; + readonly currency: string | null; readonly fspAuthCode: string; - readonly hohId: string; - readonly hohUnicefId: string; - readonly hohFullName: string; + readonly hohId: any; + readonly hohUnicefId: any; + readonly hohFullName: any; readonly collectorId: string; readonly collectorPhoneNo: string; readonly collectorPhoneNoAlt: string; diff --git a/src/frontend/src/restgenerated/models/PaymentPlan.ts b/src/frontend/src/restgenerated/models/PaymentPlan.ts index 607a1317f1e..9092974dc40 100644 --- a/src/frontend/src/restgenerated/models/PaymentPlan.ts +++ b/src/frontend/src/restgenerated/models/PaymentPlan.ts @@ -2,7 +2,6 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { CurrencyEnum } from './CurrencyEnum'; import type { FollowUpPaymentPlan } from './FollowUpPaymentPlan'; import type { PaymentPlanStatusEnum } from './PaymentPlanStatusEnum'; export type PaymentPlan = { @@ -41,175 +40,7 @@ export type PaymentPlan = { * Total Households Count [sys] */ totalHouseholdsCount?: number; - /** - * Currency - * - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ - currency?: CurrencyEnum | null; + readonly currency: string | null; /** * Total Entitled Quantity [sys] */ diff --git a/src/frontend/src/restgenerated/models/PaymentPlanCreateUpdate.ts b/src/frontend/src/restgenerated/models/PaymentPlanCreateUpdate.ts index 0de750f04e5..db5762f7344 100644 --- a/src/frontend/src/restgenerated/models/PaymentPlanCreateUpdate.ts +++ b/src/frontend/src/restgenerated/models/PaymentPlanCreateUpdate.ts @@ -2,13 +2,12 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { CurrencyEnum } from './CurrencyEnum'; export type PaymentPlanCreateUpdate = { readonly id: string; targetPopulationId: string; dispersionStartDate: string; dispersionEndDate: string; - currency: CurrencyEnum; + currency: string | null; readonly version: number; }; diff --git a/src/frontend/src/restgenerated/models/PaymentPlanDetail.ts b/src/frontend/src/restgenerated/models/PaymentPlanDetail.ts index 7f458c3d563..5313cf5c578 100644 --- a/src/frontend/src/restgenerated/models/PaymentPlanDetail.ts +++ b/src/frontend/src/restgenerated/models/PaymentPlanDetail.ts @@ -4,7 +4,6 @@ /* eslint-disable */ import type { ApprovalProcess } from './ApprovalProcess'; import type { BackgroundActionStatusEnum } from './BackgroundActionStatusEnum'; -import type { CurrencyEnum } from './CurrencyEnum'; import type { DeliveryMechanism } from './DeliveryMechanism'; import type { FinancialServiceProvider } from './FinancialServiceProvider'; import type { FollowUpPaymentPlan } from './FollowUpPaymentPlan'; @@ -53,175 +52,7 @@ export type PaymentPlanDetail = { * Total Individuals Count [sys] */ totalIndividualsCount?: number; - /** - * Currency - * - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ - currency?: CurrencyEnum | null; + readonly currency: string | null; /** * Targeting level exclusion IDs */ diff --git a/src/frontend/src/restgenerated/models/PaymentPlanList.ts b/src/frontend/src/restgenerated/models/PaymentPlanList.ts index 73b951a0121..01edd52a1ed 100644 --- a/src/frontend/src/restgenerated/models/PaymentPlanList.ts +++ b/src/frontend/src/restgenerated/models/PaymentPlanList.ts @@ -2,7 +2,6 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { CurrencyEnum } from './CurrencyEnum'; import type { FollowUpPaymentPlan } from './FollowUpPaymentPlan'; import type { PaymentPlanStatusEnum } from './PaymentPlanStatusEnum'; import type { ProgramSmall } from './ProgramSmall'; @@ -45,175 +44,7 @@ export type PaymentPlanList = { * Total Individuals Count [sys] */ totalIndividualsCount?: number; - /** - * Currency - * - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ - currency?: CurrencyEnum | null; + readonly currency: string | null; /** * Targeting level exclusion IDs */ diff --git a/src/frontend/src/restgenerated/models/PaymentVerificationPlanList.ts b/src/frontend/src/restgenerated/models/PaymentVerificationPlanList.ts index 4e40aa56281..22df273d066 100644 --- a/src/frontend/src/restgenerated/models/PaymentVerificationPlanList.ts +++ b/src/frontend/src/restgenerated/models/PaymentVerificationPlanList.ts @@ -2,179 +2,10 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { CurrencyEnum } from './CurrencyEnum'; export type PaymentVerificationPlanList = { readonly id: string; unicefId?: string | null; - /** - * Currency - * - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ - currency?: CurrencyEnum | null; + readonly currency: string | null; /** * Total Delivered Quantity [sys] */ diff --git a/src/frontend/src/restgenerated/models/PushPeople.ts b/src/frontend/src/restgenerated/models/PushPeople.ts index 259811d947a..951eef01837 100644 --- a/src/frontend/src/restgenerated/models/PushPeople.ts +++ b/src/frontend/src/restgenerated/models/PushPeople.ts @@ -78,6 +78,22 @@ export type PushPeople = { * Last name of the Beneficiary */ familyName?: string; + /** + * Full Local Name of the Beneficiary + */ + fullNameLocal?: string | null; + /** + * First local name of the Beneficiary + */ + givenNameLocal?: string | null; + /** + * Middle local name of the Beneficiary + */ + middleNameLocal?: string | null; + /** + * Last local name of the Beneficiary + */ + familyNameLocal?: string | null; /** * Beneficiary gender * diff --git a/src/frontend/src/restgenerated/models/TargetPopulationDetail.ts b/src/frontend/src/restgenerated/models/TargetPopulationDetail.ts index 37969424342..f45ddf74ca2 100644 --- a/src/frontend/src/restgenerated/models/TargetPopulationDetail.ts +++ b/src/frontend/src/restgenerated/models/TargetPopulationDetail.ts @@ -3,7 +3,6 @@ /* tslint:disable */ /* eslint-disable */ import type { BuildStatusEnum } from './BuildStatusEnum'; -import type { CurrencyEnum } from './CurrencyEnum'; import type { DeliveryMechanism } from './DeliveryMechanism'; import type { FinancialServiceProvider } from './FinancialServiceProvider'; import type { FollowUpPaymentPlan } from './FollowUpPaymentPlan'; @@ -52,175 +51,7 @@ export type TargetPopulationDetail = { * Total Individuals Count [sys] */ totalIndividualsCount?: number; - /** - * Currency - * - * * `` - None - * * `AED` - United Arab Emirates dirham - * * `AFN` - Afghan afghani - * * `ALL` - Albanian lek - * * `AMD` - Armenian dram - * * `ANG` - Netherlands Antillean guilder - * * `AOA` - Angolan kwanza - * * `ARS` - Argentine peso - * * `AUD` - Australian dollar - * * `AWG` - Aruban florin - * * `AZN` - Azerbaijani manat - * * `BAM` - Bosnia and Herzegovina convertible mark - * * `BBD` - Barbados dollar - * * `BDT` - Bangladeshi taka - * * `BGN` - Bulgarian lev - * * `BHD` - Bahraini dinar - * * `BIF` - Burundian franc - * * `BMD` - Bermudian dollar - * * `BND` - Brunei dollar - * * `BOB` - Boliviano - * * `BOV` - Bolivian Mvdol (funds code) - * * `BRL` - Brazilian real - * * `BSD` - Bahamian dollar - * * `BTN` - Bhutanese ngultrum - * * `BWP` - Botswana pula - * * `BYN` - Belarusian ruble - * * `BZD` - Belize dollar - * * `CAD` - Canadian dollar - * * `CDF` - Congolese franc - * * `CHF` - Swiss franc - * * `CLP` - Chilean peso - * * `CNY` - Chinese yuan - * * `COP` - Colombian peso - * * `CRC` - Costa Rican colon - * * `CUC` - Cuban convertible peso - * * `CUP` - Cuban peso - * * `CVE` - Cape Verdean escudo - * * `CZK` - Czech koruna - * * `DJF` - Djiboutian franc - * * `DKK` - Danish krone - * * `DOP` - Dominican peso - * * `DZD` - Algerian dinar - * * `EGP` - Egyptian pound - * * `ERN` - Eritrean nakfa - * * `ETB` - Ethiopian birr - * * `EUR` - Euro - * * `FJD` - Fiji dollar - * * `FKP` - Falkland Islands pound - * * `GBP` - Pound sterling - * * `GEL` - Georgian lari - * * `GHS` - Ghanaian cedi - * * `GIP` - Gibraltar pound - * * `GMD` - Gambian dalasi - * * `GNF` - Guinean franc - * * `GTQ` - Guatemalan quetzal - * * `GYD` - Guyanese dollar - * * `HKD` - Hong Kong dollar - * * `HNL` - Honduran lempira - * * `HRK` - Croatian kuna - * * `HTG` - Haitian gourde - * * `HUF` - Hungarian forint - * * `IDR` - Indonesian rupiah - * * `ILS` - Israeli new shekel - * * `INR` - Indian rupee - * * `IQD` - Iraqi dinar - * * `IRR` - Iranian rial - * * `ISK` - Icelandic króna - * * `JMD` - Jamaican dollar - * * `JOD` - Jordanian dinar - * * `JPY` - Japanese yen - * * `KES` - Kenyan shilling - * * `KGS` - Kyrgyzstani som - * * `KHR` - Cambodian riel - * * `KMF` - Comoro franc - * * `KPW` - North Korean won - * * `KRW` - South Korean won - * * `KWD` - Kuwaiti dinar - * * `KYD` - Cayman Islands dollar - * * `KZT` - Kazakhstani tenge - * * `LAK` - Lao kip - * * `LBP` - Lebanese pound - * * `LKR` - Sri Lankan rupee - * * `LRD` - Liberian dollar - * * `LSL` - Lesotho loti - * * `LYD` - Libyan dinar - * * `MAD` - Moroccan dirham - * * `MDL` - Moldovan leu - * * `MGA` - Malagasy ariary - * * `MKD` - Macedonian denar - * * `MMK` - Myanmar kyat - * * `MNT` - Mongolian tögrög - * * `MOP` - Macanese pataca - * * `MRU` - Mauritanian ouguiya - * * `MUR` - Mauritian rupee - * * `MVR` - Maldivian rufiyaa - * * `MWK` - Malawian kwacha - * * `MXN` - Mexican peso - * * `MYR` - Malaysian ringgit - * * `MZN` - Mozambican metical - * * `NAD` - Namibian dollar - * * `NGN` - Nigerian naira - * * `NIO` - Nicaraguan córdoba - * * `NOK` - Norwegian krone - * * `NPR` - Nepalese rupee - * * `NZD` - New Zealand dollar - * * `OMR` - Omani rial - * * `PAB` - Panamanian balboa - * * `PEN` - Peruvian sol - * * `PGK` - Papua New Guinean kina - * * `PHP` - Philippine peso - * * `PKR` - Pakistani rupee - * * `PLN` - Polish złoty - * * `PYG` - Paraguayan guaraní - * * `QAR` - Qatari riyal - * * `RON` - Romanian leu - * * `RSD` - Serbian dinar - * * `RUB` - Russian ruble - * * `RWF` - Rwandan franc - * * `SAR` - Saudi riyal - * * `SBD` - Solomon Islands dollar - * * `SCR` - Seychelles rupee - * * `SDG` - Sudanese pound - * * `SEK` - Swedish krona/kronor - * * `SGD` - Singapore dollar - * * `SHP` - Saint Helena pound - * * `SLE` - Sierra Leonean leone - * * `SOS` - Somali shilling - * * `SRD` - Surinamese dollar - * * `SSP` - South Sudanese pound - * * `STN` - São Tomé and Príncipe dobra - * * `SVC` - Salvadoran colón - * * `SYP` - Syrian pound Old - * * `SYP01` - Syrian pound - * * `SZL` - Swazi lilangeni - * * `THB` - Thai baht - * * `TJS` - Tajikistani somoni - * * `TMT` - Turkmenistan manat - * * `TND` - Tunisian dinar - * * `TOP` - Tongan paʻanga - * * `TRY` - Turkish lira - * * `TTD` - Trinidad and Tobago dollar - * * `TWD` - New Taiwan dollar - * * `TZS` - Tanzanian shilling - * * `UAH` - Ukrainian hryvnia - * * `UGX` - Ugandan shilling - * * `USD` - United States dollar - * * `UYU` - Uruguayan peso - * * `UYW` - Unidad previsional[14] - * * `UZS` - Uzbekistan som - * * `VES` - Venezuelan bolívar soberano - * * `VND` - Vietnamese đồng - * * `VUV` - Vanuatu vatu - * * `WST` - Samoan tala - * * `XAF` - CFA franc BEAC - * * `XAG` - Silver (one troy ounce) - * * `XAU` - Gold (one troy ounce) - * * `XCD` - East Caribbean dollar - * * `XOF` - CFA franc BCEAO - * * `XPF` - CFP franc (franc Pacifique) - * * `YER` - Yemeni rial - * * `ZAR` - South African rand - * * `ZMW` - Zambian kwacha - * * `ZWL` - Zimbabwean dollar - * * `USDC` - USD Coin - */ - currency?: CurrencyEnum | null; + readonly currency: string | null; /** * Targeting level exclusion IDs */ @@ -296,7 +127,7 @@ export type TargetPopulationDetail = { vulnerabilityScoreMax?: string | null; readonly deliveryMechanism: DeliveryMechanism; readonly financialServiceProvider: FinancialServiceProvider; - readonly failedWalletValidationCollectorsIds: Array; + readonly failedWalletValidationCollectorsIds: Array; /** * record revision number */ From 682d289111760f8b5d382188010f0e6137a6a0bc Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Sun, 19 Apr 2026 19:36:31 -0400 Subject: [PATCH 06/33] add validation --- src/hope/apps/household/documents.py | 5 ++ src/hope/apps/household/filters.py | 2 + .../household/migrations/0039_migration.py | 75 ++++++++++++++++++- src/hope/apps/registration_data/validators.py | 36 ++++++++- src/hope/models/individual.py | 37 +++++++-- .../test_file/kobo_submissions.json | 6 +- .../registration_data/test_rdi_kobo_create.py | 16 +++- 7 files changed, 166 insertions(+), 11 deletions(-) diff --git a/src/hope/apps/household/documents.py b/src/hope/apps/household/documents.py index 022f6367145..0033515e984 100644 --- a/src/hope/apps/household/documents.py +++ b/src/hope/apps/household/documents.py @@ -32,6 +32,7 @@ class IndividualDocument(Document): middle_name = fields.TextField(analyzer=phonetic_analyzer) family_name = fields.TextField(fields={"phonetic": fields.TextField(analyzer=phonetic_analyzer)}) full_name = fields.TextField(analyzer=phonetic_analyzer) + full_name_local = fields.TextField(analyzer=phonetic_analyzer) birth_date = fields.DateField() # Before es 8, similarity parameter on DateField failed silently phone_no = fields.KeywordField("phone_no.__str__", similarity="boolean") phone_no_alternative = fields.KeywordField("phone_no_alternative.__str__", similarity="boolean") @@ -120,6 +121,10 @@ class HouseholdDocument(Document): "given_name": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "middle_name": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "family_name": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), + "full_name_local": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), + "given_name_local": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), + "middle_name_local": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), + "family_name_local": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "phone_no_text": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "phone_no_alternative_text": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "documents": fields.ObjectField( diff --git a/src/hope/apps/household/filters.py b/src/hope/apps/household/filters.py index b8cca22fe40..b01a94dad9c 100644 --- a/src/hope/apps/household/filters.py +++ b/src/hope/apps/household/filters.py @@ -387,6 +387,7 @@ def _get_elasticsearch_query_for_individuals(self, search: str, program: Program {"match_phrase_prefix": {"unicef_id": {"query": search}}}, {"match_phrase_prefix": {"household.unicef_id": {"query": search}}}, {"match_phrase_prefix": {"full_name": {"query": search}}}, + {"match_phrase_prefix": {"full_name_local": {"query": search}}}, {"match_phrase_prefix": {"phone_no_text": {"query": search}}}, {"match_phrase_prefix": {"phone_no_alternative_text": {"query": search}}}, {"match_phrase_prefix": {"detail_id": {"query": search}}}, @@ -418,6 +419,7 @@ def _search_db(self, qs: QuerySet[Individual], value: str, program: Program | No Q(unicef_id__icontains=search) | Q(household__unicef_id__icontains=search) | Q(full_name__icontains=search) + | Q(full_name_local__icontains=search) | Q(phone_no_normalized__icontains=search) | Q(phone_no_alt_normalized__icontains=search) | Q(detail_id__icontains=search) diff --git a/src/hope/apps/household/migrations/0039_migration.py b/src/hope/apps/household/migrations/0039_migration.py index 7885ab8f20d..bbbeb52fc36 100644 --- a/src/hope/apps/household/migrations/0039_migration.py +++ b/src/hope/apps/household/migrations/0039_migration.py @@ -1,10 +1,11 @@ -# Generated by Django 5.2.12 on 2026-04-16 15:10 +# Generated by Django 5.2.12 on 2026-04-19 19:50 import django.core.validators from django.db import migrations, models class Migration(migrations.Migration): + dependencies = [ ("household", "0038_migration"), ] @@ -59,4 +60,76 @@ class Migration(migrations.Migration): null=True, ), ), + migrations.AlterField( + model_name="individual", + name="family_name", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Last name of the Beneficiary", + max_length=85, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), + migrations.AlterField( + model_name="individual", + name="full_name", + field=models.CharField( + db_collation="und-ci-det", + db_index=True, + help_text="Full Name of the Beneficiary", + max_length=255, + validators=[ + django.core.validators.MinLengthValidator(2), + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ), + ], + ), + ), + migrations.AlterField( + model_name="individual", + name="given_name", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="First name of the Beneficiary", + max_length=85, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), + migrations.AlterField( + model_name="individual", + name="middle_name", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Middle name of the Beneficiary", + max_length=85, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), ] diff --git a/src/hope/apps/registration_data/validators.py b/src/hope/apps/registration_data/validators.py index de1673632b9..1762d0816d3 100644 --- a/src/hope/apps/registration_data/validators.py +++ b/src/hope/apps/registration_data/validators.py @@ -12,6 +12,7 @@ from dateutil import parser from django.core import validators as django_core_validators +from django.core.exceptions import ValidationError import openpyxl from openpyxl import Workbook, load_workbook from openpyxl.cell import Cell @@ -44,6 +45,7 @@ find_attachment_in_kobo, ) from hope.models import Area, BusinessArea, FlexibleAttribute, KoboImportedSubmission, PeriodicFieldData, Program +from hope.models.individual import ascii_name_validator logger = logging.getLogger(__name__) @@ -325,6 +327,10 @@ def __init__(self, program: Program) -> None: self.facility_admin_area_header = ( "pp_facility_admin_area_h_c" if self.is_social_worker_program else "facility_admin_area_h_c" ) + self.full_name_header = "pp_full_name_i_c" if self.is_social_worker_program else "full_name_i_c" + self.given_name_header = "pp_given_name_i_c" if self.is_social_worker_program else "given_name_i_c" + self.middle_name_header = "pp_middle_name_i_c" if self.is_social_worker_program else "middle_name_i_c" + self.family_name_header = "pp_family_name_i_c" if self.is_social_worker_program else "family_name_i_c" def get_combined_fields(self) -> dict: core_fields = ( @@ -605,6 +611,18 @@ def _validate_row_cells( self._process_document_number(header_value_doc, value, self._documents_numbers, self._identities_numbers) return errors + def _validate_ascii_name(self, value: str, field_name: str, row_number: int, invalid_rows: list) -> None: + try: + ascii_name_validator(value) + except ValidationError as e: + invalid_rows.append( + { + "row_number": row_number, + "header": field_name, + "message": f"{str(e.code)}, {str(e.message)}, Value provided: {value}", + } + ) + def get_cell_value(self, first_row: Any, row: Any, field_name: str) -> Any: headers = [cell.value for cell in first_row] if field_name in headers: @@ -679,11 +697,23 @@ def rows_validator(self, sheet: Worksheet, business_area_slug: str | None = None f"when '{self.facility_name_header}' is provided.", } ) - - if sheet.title == "Individuals": + # validate name fields AB#301335 + if self.sheet_title in ("Individuals", "People"): + for field_name in [ + self.full_name_header, + self.given_name_header, + self.middle_name_header, + self.family_name_header, + ]: + value = self.get_cell_value(first_row, row, field_name) + # skip empty values + if value: + self._validate_ascii_name(value, field_name, row_number, invalid_rows) + + if self.sheet_title == "Individuals": invalid_rows.extend(self._validate_head_of_household()) - if sheet.title in ("Households", "People"): + if self.sheet_title in ("Households", "People"): admin_area_invalid_rows = self.validate_admin_areas(admin_area_code_tuples, business_area_slug) if admin_area_invalid_rows: invalid_rows.extend(admin_area_invalid_rows) diff --git a/src/hope/models/individual.py b/src/hope/models/individual.py index 55a7e45832b..3f1f0834e1d 100644 --- a/src/hope/models/individual.py +++ b/src/hope/models/individual.py @@ -5,7 +5,7 @@ from django.contrib.postgres.indexes import GinIndex from django.contrib.postgres.search import SearchVectorField from django.core.cache import cache -from django.core.validators import MinLengthValidator +from django.core.validators import MinLengthValidator, RegexValidator from django.db import IntegrityError, models from django.db.models import JSONField, Q, QuerySet, UniqueConstraint from django.utils import timezone @@ -62,6 +62,12 @@ UnicefIdentifiedModel, ) +ascii_name_validator = RegexValidator( + regex=r"^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + code="invalid_name", +) + class IndividualCollection(UnicefIdentifiedModel): """Collection of individual representations.""" @@ -186,19 +192,40 @@ class Individual( photo = models.ImageField(blank=True, help_text="Photo") full_name = models.CharField( max_length=255, - validators=[MinLengthValidator(2)], + validators=[MinLengthValidator(2), ascii_name_validator], db_index=True, help_text="Full Name of the Beneficiary", db_collation="und-ci-det", ) given_name = models.CharField( - max_length=85, blank=True, db_index=True, help_text="First name of the Beneficiary", db_collation="und-ci-det" + max_length=85, + blank=True, + db_index=True, + help_text="First name of the Beneficiary", + db_collation="und-ci-det", + validators=[ + ascii_name_validator, + ], ) middle_name = models.CharField( - max_length=85, blank=True, db_index=True, help_text="Middle name of the Beneficiary", db_collation="und-ci-det" + max_length=85, + blank=True, + db_index=True, + help_text="Middle name of the Beneficiary", + db_collation="und-ci-det", + validators=[ + ascii_name_validator, + ], ) family_name = models.CharField( - max_length=85, blank=True, db_index=True, help_text="Last name of the Beneficiary", db_collation="und-ci-det" + max_length=85, + blank=True, + db_index=True, + help_text="Last name of the Beneficiary", + db_collation="und-ci-det", + validators=[ + ascii_name_validator, + ], ) full_name_local = models.CharField( max_length=500, diff --git a/tests/unit/apps/registration_data/test_file/kobo_submissions.json b/tests/unit/apps/registration_data/test_file/kobo_submissions.json index ce212a56a0d..9ecc80fd123 100644 --- a/tests/unit/apps/registration_data/test_file/kobo_submissions.json +++ b/tests/unit/apps/registration_data/test_file/kobo_submissions.json @@ -43,7 +43,11 @@ "individual_questions/bank_info/bank_branch_name_i_c": "Privat 2", "individual_questions/account__mobile__service_provider_i_c": "ABD", "individual_questions/account__mobile__delivery_phone_number_i_c": "+48880110457", - "individual_questions/account__mobile__provider_i_c": "ALFA" + "individual_questions/account__mobile__provider_i_c": "ALFA", + "individual_questions/full_name_local_i_c": "Full_local", + "individual_questions/given_name_local_i_c": "Given_local", + "individual_questions/middle_name_local_i_c": "Middle_local", + "individual_questions/family_name_local_i_c": "Family_local" }, { "individual_questions/role_i_c": "alternate", diff --git a/tests/unit/apps/registration_data/test_rdi_kobo_create.py b/tests/unit/apps/registration_data/test_rdi_kobo_create.py index e1976e0ec39..6d6af7d0e6e 100644 --- a/tests/unit/apps/registration_data/test_rdi_kobo_create.py +++ b/tests/unit/apps/registration_data/test_rdi_kobo_create.py @@ -173,12 +173,26 @@ def test_execute( individuals_obj_data = model_to_dict( individual, - ("country", "sex", "age", "marital_status", "relationship"), + ( + "country", + "sex", + "age", + "marital_status", + "relationship", + "full_name_local", + "given_name_local", + "middle_name_local", + "family_name_local", + ), ) expected_ind = { "relationship": "HEAD", "sex": "MALE", "marital_status": "MARRIED", + "full_name_local": "Full_local", + "given_name_local": "Given_local", + "middle_name_local": "Middle_local", + "family_name_local": "Family_local", } assert individuals_obj_data == expected_ind From b07a1ef3322cbb79b72a484ecb44ec247b026f26 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Sun, 19 Apr 2026 20:26:50 -0400 Subject: [PATCH 07/33] update tests --- .../household/migrations/0039_migration.py | 1 - ...f18ae6b758e8014a24c7fa039e91.response.json | 12 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 29 +- .../business_area.fixture.json | 2 +- .../test_households/household.fixture.json | 80 ++--- .../household_role.fixture.json | 86 +++--- .../test_households/program.fixture.json | 21 +- .../test_households/role.fixture.json | 5 +- .../role_assignment.fixture.json | 21 +- .../test_households/superuser.fixture.json | 6 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 15 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 18 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 53 ---- ...f18ae6b758e8014a24c7fa039e91.response.json | 85 ------ .../business_area.fixture.json | 2 +- .../test_individuals/individual.fixture.json | 46 +-- .../test_individuals/program.fixture.json | 18 +- .../test_individuals/role.fixture.json | 2 +- .../role_assignment.fixture.json | 18 +- .../test_individuals/superuser.fixture.json | 6 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 11 +- .../business_area.fixture.json | 46 --- .../individual.fixture.json | 281 ------------------ .../program.fixture.json | 120 -------- .../test_individuals_global/role.fixture.json | 18 -- .../role_assignment.fixture.json | 114 ------- .../superuser.fixture.json | 45 --- ...f18ae6b758e8014a24c7fa039e91.response.json | 20 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 97 +++--- .../business_area.fixture.json | 2 +- .../household.fixture.json | 61 ++-- .../household_role.fixture.json | 67 +++-- .../payment_plan.fixture.json | 37 +-- .../payment_verification.fixture.json | 125 ++++---- .../payment_verification_summary.fixture.json | 41 +-- .../program.fixture.json | 18 +- .../role.fixture.json | 2 +- .../role_assignment.fixture.json | 18 +- .../superuser.fixture.json | 6 +- .../apps/grievance/test_grievance_detail.py | 7 + .../household/test_household_list_views.py | 14 +- tests/unit/apps/payment/test_serializers.py | 1 + .../test_file/new_reg_data_import.xlsx | Bin 289697 -> 289955 bytes .../registration_data/test_rdi_xlsx_create.py | 4 + .../test_template_file_generator.py | 18 +- 45 files changed, 500 insertions(+), 1199 deletions(-) rename tests/unit/api_contract/_api_checker/test_households/{_api_rest_business-areas_business-area-0_programs_ky0b_households_ => _api_rest_business-areas_business-area-0_programs_n1i2_households_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (80%) rename tests/unit/api_contract/_api_checker/test_households/{_api_rest_business-areas_business-area-0_programs_ky0b_households_78070ee2-dfac-4ae5-a897-ed1d708df869_ => _api_rest_business-areas_business-area-0_programs_n1i2_households_edcafd66-124b-45dc-b8f3-f77e7bc40ca8_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (81%) rename tests/unit/api_contract/_api_checker/test_individuals/{_api_rest_business-areas_business-area-0_programs_zdpm_individuals_ => _api_rest_business-areas_business-area-0_programs_c7eh_individuals_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (82%) rename tests/unit/api_contract/_api_checker/test_individuals/{_api_rest_business-areas_business-area-0_programs_jzh5_individuals_39153afe-db31-418c-bc62-5da4f46a9efc_ => _api_rest_business-areas_business-area-0_programs_c7eh_individuals_c41b9f18-04ec-4f5d-b18d-75a70d10d034_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (82%) delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_jzh5_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_zdpm_individuals_f6f115bc-558f-432f-a41f-a15242631af4_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/business_area.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/individual.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/program.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/role.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/role_assignment.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/superuser.fixture.json rename tests/unit/api_contract/_api_checker/test_verification_records/{_api_rest_business-areas_business-area-0_programs_43mc_payment-verifications_b546a8d8-a5c1-4161-b3fb-6186f0ca192f_verifications_ => _api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (80%) rename tests/unit/api_contract/_api_checker/test_verification_records/{_api_rest_business-areas_business-area-0_programs_43mc_payment-verifications_b546a8d8-a5c1-4161-b3fb-6186f0ca192f_verifications_480e9f86-3a14-4620-b6eb-0cb5eea687fa_ => _api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_03594729-c68e-4d70-8b97-f4cf3633aac2_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (85%) diff --git a/src/hope/apps/household/migrations/0039_migration.py b/src/hope/apps/household/migrations/0039_migration.py index bbbeb52fc36..2a892990e2f 100644 --- a/src/hope/apps/household/migrations/0039_migration.py +++ b/src/hope/apps/household/migrations/0039_migration.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("household", "0038_migration"), ] diff --git a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_ky0b_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 80% rename from tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_ky0b_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index e706e4d0763..392ebad2617 100644 --- a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_ky0b_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -4,7 +4,7 @@ "Content-Type": "application/json", "Vary": "Accept, Cookie, origin", "Allow": "GET, HEAD, OPTIONS", - "ETag": "93c4f9751741e4cf8b79f02509363147", + "ETag": "f8d9831bc559383c49f4ba205e909b62", "Cache-Control": "private, no-cache", "X-Hope-Backend-Version": "None", "X-Content-Type-Options": "nosniff", @@ -13,12 +13,12 @@ "Content-Length": "702" }, "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/ky0b/households/?limit=50&offset=50", + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/n1i2/households/?limit=50&offset=50", "previous": null, "results": [ { - "id": "78070ee2-dfac-4ae5-a897-ed1d708df869", - "unicef_id": "HH-25-0000.0001", + "id": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", + "unicef_id": "HH-25-0000.0346", "head_of_household": "Person 0", "admin1": null, "admin2": null, @@ -33,9 +33,9 @@ "has_duplicates": false, "sanction_list_possible_match": false, "sanction_list_confirmed_match": false, - "program_id": "661715ee-22cd-43d8-83c5-70a2b658357b", + "program_id": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", "program_name": "Program 0", - "program_code": "ky0b" + "program_code": "n1i2" } ] }, diff --git a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_ky0b_households_78070ee2-dfac-4ae5-a897-ed1d708df869_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_edcafd66-124b-45dc-b8f3-f77e7bc40ca8_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 81% rename from tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_ky0b_households_78070ee2-dfac-4ae5-a897-ed1d708df869_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_edcafd66-124b-45dc-b8f3-f77e7bc40ca8_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 85b21e4568b..7bf6fbc0eae 100644 --- a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_ky0b_households_78070ee2-dfac-4ae5-a897-ed1d708df869_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_edcafd66-124b-45dc-b8f3-f77e7bc40ca8_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,14 +8,15 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "2633" + "Content-Length": "2656" }, "data": { - "id": "78070ee2-dfac-4ae5-a897-ed1d708df869", - "unicef_id": "HH-25-0000.0001", + "id": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", + "unicef_id": "HH-25-0000.0346", "head_of_household": { - "id": "df79b7cf-c60a-4048-a6e6-ea9e8e5d7544", - "full_name": "Person 0" + "id": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", + "full_name": "Person 0", + "full_name_local": null }, "admin1": null, "admin2": null, @@ -31,18 +32,18 @@ "sanction_list_confirmed_match": false, "has_duplicates": false, "registration_data_import": { - "id": "8ab760b2-26c4-4f2d-83c3-c3210e2593ba", + "id": "e2d4c6c5-344c-4959-a155-1774ffcef61b", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "09bf0388-d33b-4c29-81c5-0c5b6590f34a", + "id": "e6410d72-1896-4c5d-bf47-b00f90008e55", "first_name": "", "last_name": "", - "email": "user_0@example.com", - "username": "user_0" + "email": "user_1@example.com", + "username": "user_1" }, "data_source": "XLS" }, @@ -51,8 +52,8 @@ "admin_area_title": "", "active_individuals_count": 1, "geopoint": null, - "import_id": "HH-25-0000.0001", - "admin_url": "/api/unicorn/household/household/78070ee2-dfac-4ae5-a897-ed1d708df869/change/", + "import_id": "HH-25-0000.0346", + "admin_url": "/api/unicorn/household/household/edcafd66-124b-45dc-b8f3-f77e7bc40ca8/change/", "male_children_count": null, "female_children_count": null, "children_disabled_count": null, @@ -107,10 +108,10 @@ "consent_sharing": [], "roles_in_household": [ { - "id": "af726d86-6bb6-4780-bdb1-1110187c7b9b", + "id": "544d6ac4-6729-4df7-a6a2-255ecab247f1", "individual": { - "id": "df79b7cf-c60a-4048-a6e6-ea9e8e5d7544", - "unicef_id": "IND-25-0000.0001" + "id": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", + "unicef_id": "IND-25-0000.0665" }, "role": "PRIMARY" } diff --git a/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json index 53651d50d7b..54978e87e87 100644 --- a/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json @@ -2,7 +2,7 @@ "business_area": { "master": { "model": "core.businessarea", - "pk": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", + "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_households/household.fixture.json b/tests/unit/api_contract/_api_checker/test_households/household.fixture.json index a77b6d1005e..bd0992af2f5 100644 --- a/tests/unit/api_contract/_api_checker/test_households/household.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_households/household.fixture.json @@ -2,7 +2,7 @@ "household": { "master": { "model": "household.household", - "pk": "78070ee2-dfac-4ae5-a897-ed1d708df869", + "pk": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -11,11 +11,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "HH-25-0000.0001", + "unicef_id": "HH-25-0000.0346", "internal_data": {}, - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", - "program": "661715ee-22cd-43d8-83c5-70a2b658357b", - "registration_data_import": "8ab760b2-26c4-4f2d-83c3-c3210e2593ba", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", + "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", + "registration_data_import": "e2d4c6c5-344c-4959-a155-1774ffcef61b", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -25,7 +25,8 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "df79b7cf-c60a-4048-a6e6-ea9e8e5d7544", + "head_of_household": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", + "facility": null, "consent_sign": "", "consent": null, "consent_sharing": "", @@ -70,6 +71,7 @@ "currency": null, "unhcr_id": "", "detail_id": null, + "originating_id": null, "start": null, "registration_method": "", "family_id": null, @@ -102,7 +104,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", + "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -143,19 +145,19 @@ }, { "model": "program.program", - "pk": "661715ee-22cd-43d8-83c5-70a2b658357b", + "pk": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "data_collecting_type": 10, - "beneficiary_group": "9d8bf8d5-38fc-4ce6-8ec7-c2f2c047368d", - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", + "data_collecting_type": 330, + "beneficiary_group": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", "name": "Program 0", + "code": "n1i2", "status": "ACTIVE", - "code": "ky0b", "description": "", "start_date": "2025-01-01", "end_date": "2026-01-01", @@ -169,6 +171,7 @@ "administrative_areas_of_implementation": "", "biometric_deduplication_enabled": false, "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, "is_visible": true, "household_count": 0, "individual_count": 0, @@ -180,7 +183,7 @@ }, { "model": "core.datacollectingtype", - "pk": 10, + "pk": 330, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -195,14 +198,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 10 + 330 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "9d8bf8d5-38fc-4ce6-8ec7-c2f2c047368d", + "pk": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -216,7 +219,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "8ab760b2-26c4-4f2d-83c3-c3210e2593ba", + "pk": "e2d4c6c5-344c-4959-a155-1774ffcef61b", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -224,10 +227,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", - "program": "661715ee-22cd-43d8-83c5-70a2b658357b", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", + "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "09bf0388-d33b-4c29-81c5-0c5b6590f34a", + "imported_by": "e6410d72-1896-4c5d-bf47-b00f90008e55", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -253,22 +256,22 @@ }, { "model": "account.user", - "pk": "09bf0388-d33b-4c29-81c5-0c5b6590f34a", + "pk": "e6410d72-1896-4c5d-bf47-b00f90008e55", "fields": { "password": "", "last_login": null, - "is_superuser": true, - "username": "user_0", + "is_superuser": false, + "username": "user_1", "first_name": "", "last_name": "", - "is_staff": true, + "is_staff": false, "is_active": true, "date_joined": "2025-01-01T00:00:00Z", "azure_id": null, - "display_name": "user_0", + "display_name": "user_1", "status": "INVITED", - "partner": 24, - "email": "user_0@example.com", + "partner": 1181, + "email": "user_1@example.com", "custom_fields": {}, "job_title": "", "last_modify_date": "2025-01-01T00:00:00Z", @@ -278,21 +281,21 @@ }, { "model": "account.partner", - "pk": 24, + "pk": 1181, "fields": { - "name": "Partner 0", + "name": "Partner 1", "parent": null, "is_un": false, "lft": 1, "rght": 2, - "tree_id": 2, + "tree_id": 3, "level": 0, "allowed_business_areas": [] } }, { "model": "household.individual", - "pk": "df79b7cf-c60a-4048-a6e6-ea9e8e5d7544", + "pk": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -301,12 +304,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.0001", + "unicef_id": "IND-25-0000.0665", "internal_data": {}, - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", - "program": "661715ee-22cd-43d8-83c5-70a2b658357b", - "registration_data_import": "8ab760b2-26c4-4f2d-83c3-c3210e2593ba", - "household": "78070ee2-dfac-4ae5-a897-ed1d708df869", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", + "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", + "registration_data_import": "e2d4c6c5-344c-4959-a155-1774ffcef61b", + "household": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -315,6 +318,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -366,6 +373,7 @@ "sanction_list_possible_match": false, "sanction_list_confirmed_match": false, "detail_id": null, + "originating_id": null, "program_registration_id": null, "age_at_registration": null, "origin_unicef_id": null, @@ -377,4 +385,4 @@ } ] } -} +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json index f6bf11d4916..c7ab4401dbc 100644 --- a/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json @@ -2,7 +2,7 @@ "household_role": { "master": { "model": "household.individualroleinhousehold", - "pk": "af726d86-6bb6-4780-bdb1-1110187c7b9b", + "pk": "544d6ac4-6729-4df7-a6a2-255ecab247f1", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -10,8 +10,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, - "individual": "df79b7cf-c60a-4048-a6e6-ea9e8e5d7544", - "household": "78070ee2-dfac-4ae5-a897-ed1d708df869", + "individual": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", + "household": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", "role": "PRIMARY", "copied_from": null } @@ -19,7 +19,7 @@ "deps": [ { "model": "household.individual", - "pk": "df79b7cf-c60a-4048-a6e6-ea9e8e5d7544", + "pk": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -28,12 +28,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "unicef_id": "IND-25-0000.0001", + "unicef_id": "IND-25-0000.0665", "internal_data": {}, - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", - "program": "661715ee-22cd-43d8-83c5-70a2b658357b", - "registration_data_import": "8ab760b2-26c4-4f2d-83c3-c3210e2593ba", - "household": "78070ee2-dfac-4ae5-a897-ed1d708df869", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", + "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", + "registration_data_import": "e2d4c6c5-344c-4959-a155-1774ffcef61b", + "household": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -42,6 +42,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -93,6 +97,7 @@ "sanction_list_possible_match": false, "sanction_list_confirmed_match": false, "detail_id": null, + "originating_id": null, "program_registration_id": null, "age_at_registration": null, "origin_unicef_id": null, @@ -104,7 +109,7 @@ }, { "model": "core.businessarea", - "pk": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", + "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -145,19 +150,19 @@ }, { "model": "program.program", - "pk": "661715ee-22cd-43d8-83c5-70a2b658357b", + "pk": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "data_collecting_type": 10, - "beneficiary_group": "9d8bf8d5-38fc-4ce6-8ec7-c2f2c047368d", - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", + "data_collecting_type": 330, + "beneficiary_group": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", "name": "Program 0", + "code": "n1i2", "status": "ACTIVE", - "code": "ky0b", "description": "", "start_date": "2025-01-01", "end_date": "2026-01-01", @@ -171,6 +176,7 @@ "administrative_areas_of_implementation": "", "biometric_deduplication_enabled": false, "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, "is_visible": true, "household_count": 0, "individual_count": 0, @@ -182,7 +188,7 @@ }, { "model": "core.datacollectingtype", - "pk": 10, + "pk": 330, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -197,14 +203,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 10 + 330 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "9d8bf8d5-38fc-4ce6-8ec7-c2f2c047368d", + "pk": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -218,7 +224,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "8ab760b2-26c4-4f2d-83c3-c3210e2593ba", + "pk": "e2d4c6c5-344c-4959-a155-1774ffcef61b", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -226,10 +232,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", - "program": "661715ee-22cd-43d8-83c5-70a2b658357b", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", + "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "09bf0388-d33b-4c29-81c5-0c5b6590f34a", + "imported_by": "e6410d72-1896-4c5d-bf47-b00f90008e55", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -255,22 +261,22 @@ }, { "model": "account.user", - "pk": "09bf0388-d33b-4c29-81c5-0c5b6590f34a", + "pk": "e6410d72-1896-4c5d-bf47-b00f90008e55", "fields": { "password": "", "last_login": null, - "is_superuser": true, - "username": "user_0", + "is_superuser": false, + "username": "user_1", "first_name": "", "last_name": "", - "is_staff": true, + "is_staff": false, "is_active": true, "date_joined": "2025-01-01T00:00:00Z", "azure_id": null, - "display_name": "user_0", + "display_name": "user_1", "status": "INVITED", - "partner": 24, - "email": "user_0@example.com", + "partner": 1181, + "email": "user_1@example.com", "custom_fields": {}, "job_title": "", "last_modify_date": "2025-01-01T00:00:00Z", @@ -280,21 +286,21 @@ }, { "model": "account.partner", - "pk": 24, + "pk": 1181, "fields": { - "name": "Partner 0", + "name": "Partner 1", "parent": null, "is_un": false, "lft": 1, "rght": 2, - "tree_id": 2, + "tree_id": 3, "level": 0, "allowed_business_areas": [] } }, { "model": "household.household", - "pk": "78070ee2-dfac-4ae5-a897-ed1d708df869", + "pk": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -303,11 +309,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "unicef_id": "HH-25-0000.0001", + "unicef_id": "HH-25-0000.0346", "internal_data": {}, - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", - "program": "661715ee-22cd-43d8-83c5-70a2b658357b", - "registration_data_import": "8ab760b2-26c4-4f2d-83c3-c3210e2593ba", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", + "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", + "registration_data_import": "e2d4c6c5-344c-4959-a155-1774ffcef61b", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -317,7 +323,8 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "df79b7cf-c60a-4048-a6e6-ea9e8e5d7544", + "head_of_household": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", + "facility": null, "consent_sign": "", "consent": null, "consent_sharing": "", @@ -362,6 +369,7 @@ "currency": null, "unhcr_id": "", "detail_id": null, + "originating_id": null, "start": null, "registration_method": "", "family_id": null, @@ -393,4 +401,4 @@ } ] } -} +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/program.fixture.json b/tests/unit/api_contract/_api_checker/test_households/program.fixture.json index 71b38219f9d..6cc9b10c9a5 100644 --- a/tests/unit/api_contract/_api_checker/test_households/program.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_households/program.fixture.json @@ -2,19 +2,19 @@ "program": { "master": { "model": "program.program", - "pk": "661715ee-22cd-43d8-83c5-70a2b658357b", + "pk": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "data_collecting_type": 10, - "beneficiary_group": "9d8bf8d5-38fc-4ce6-8ec7-c2f2c047368d", - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", + "data_collecting_type": 330, + "beneficiary_group": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", "name": "Program 0", + "code": "n1i2", "status": "ACTIVE", - "code": "ky0b", "description": "", "start_date": "2025-01-01", "end_date": "2026-01-01", @@ -28,6 +28,7 @@ "administrative_areas_of_implementation": "", "biometric_deduplication_enabled": false, "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, "is_visible": true, "household_count": 0, "individual_count": 0, @@ -40,7 +41,7 @@ "deps": [ { "model": "core.datacollectingtype", - "pk": 10, + "pk": 330, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -55,14 +56,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 10 + 330 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "9d8bf8d5-38fc-4ce6-8ec7-c2f2c047368d", + "pk": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -76,7 +77,7 @@ }, { "model": "core.businessarea", - "pk": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", + "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -117,4 +118,4 @@ } ] } -} +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/role.fixture.json b/tests/unit/api_contract/_api_checker/test_households/role.fixture.json index ac3ca406d28..191f5ba3214 100644 --- a/tests/unit/api_contract/_api_checker/test_households/role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_households/role.fixture.json @@ -2,13 +2,12 @@ "role": { "master": { "model": "account.role", - "pk": "36018669-92ba-4b7b-b2c4-b1cdd5b23d77", + "pk": "dea51bf3-157f-4cf1-9fb3-50e0299055b0", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "name": "Role 0", - - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", "is_visible_on_ui": true, "is_available_for_partner": true } diff --git a/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json index e4933de560f..dd0274af4e6 100644 --- a/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json @@ -2,14 +2,14 @@ "role_assignment": { "master": { "model": "account.roleassignment", - "pk": "892a4c30-9f40-4178-b439-edd90d716f0e", + "pk": "19c7c3d5-ff22-4aba-a23d-c7b2dd4fe454", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", - "business_area": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", - "user": "09bf0388-d33b-4c29-81c5-0c5b6590f34a", + "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", + "user": "0f775742-42ac-41ea-a111-11d129c4bf3c", "partner": null, - "role": "36018669-92ba-4b7b-b2c4-b1cdd5b23d77", + "role": "dea51bf3-157f-4cf1-9fb3-50e0299055b0", "program": null, "expiry_date": null, "group": null @@ -18,7 +18,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "2f4de02c-0254-4343-9b0e-9456d0d40ae9", + "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -59,7 +59,7 @@ }, { "model": "account.user", - "pk": "09bf0388-d33b-4c29-81c5-0c5b6590f34a", + "pk": "0f775742-42ac-41ea-a111-11d129c4bf3c", "fields": { "password": "", "last_login": null, @@ -73,7 +73,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 24, + "partner": 1179, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -84,7 +84,7 @@ }, { "model": "account.partner", - "pk": 24, + "pk": 1179, "fields": { "name": "Partner 0", "parent": null, @@ -98,13 +98,12 @@ }, { "model": "account.role", - "pk": "36018669-92ba-4b7b-b2c4-b1cdd5b23d77", + "pk": "dea51bf3-157f-4cf1-9fb3-50e0299055b0", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "name": "Role 0", - - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", "is_visible_on_ui": true, "is_available_for_partner": true } diff --git a/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json index fc6f134808b..e6f629c41ac 100644 --- a/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json @@ -2,7 +2,7 @@ "superuser": { "master": { "model": "account.user", - "pk": "09bf0388-d33b-4c29-81c5-0c5b6590f34a", + "pk": "0f775742-42ac-41ea-a111-11d129c4bf3c", "fields": { "password": "", "last_login": null, @@ -16,7 +16,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 24, + "partner": 1179, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -28,7 +28,7 @@ "deps": [ { "model": "account.partner", - "pk": 24, + "pk": 1179, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_zdpm_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 82% rename from tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_zdpm_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 77898173851..91a411eb634 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_zdpm_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -4,22 +4,23 @@ "Content-Type": "application/json", "Vary": "Accept, Cookie, origin", "Allow": "GET, HEAD, OPTIONS", - "ETag": "98377b5da1e93c89b2951a0e3072e5d6", + "ETag": "ca839331ce0ed3ea60d281f1574f9080", "Cache-Control": "private, no-cache", "X-Hope-Backend-Version": "None", "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1130" + "Content-Length": "1153" }, "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/zdpm/individuals/?limit=50&offset=50", + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/c7eh/individuals/?limit=50&offset=50", "previous": null, "results": [ { - "id": "f6f115bc-558f-432f-a41f-a15242631af4", - "unicef_id": "IND-25-0000.0506", + "id": "c41b9f18-04ec-4f5d-b18d-75a70d10d034", + "unicef_id": "IND-25-0000.0668", "full_name": "Person 0", + "full_name_local": null, "household": null, "status": "ACTIVE", "relationship": "", @@ -40,9 +41,9 @@ "deduplication_golden_record_results": [], "biometric_deduplication_golden_record_results": [], "program": { - "id": "59873110-4292-489b-a974-5f086675e998", + "id": "248d5486-a703-41b8-92cc-d0a1b5d3b447", "name": "Program 0", - "slug": "zdpm" + "code": "c7eh" }, "last_registration_date": "2025-01-01", "role": null diff --git a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_jzh5_individuals_39153afe-db31-418c-bc62-5da4f46a9efc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_c41b9f18-04ec-4f5d-b18d-75a70d10d034_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 82% rename from tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_jzh5_individuals_39153afe-db31-418c-bc62-5da4f46a9efc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_c41b9f18-04ec-4f5d-b18d-75a70d10d034_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 2cd9b5a04b5..5a14f5b832d 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_jzh5_individuals_39153afe-db31-418c-bc62-5da4f46a9efc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_c41b9f18-04ec-4f5d-b18d-75a70d10d034_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,15 +8,19 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1706" + "Content-Length": "1803" }, "data": { - "id": "39153afe-db31-418c-bc62-5da4f46a9efc", - "unicef_id": "IND-25-0000.0004", + "id": "c41b9f18-04ec-4f5d-b18d-75a70d10d034", + "unicef_id": "IND-25-0000.0668", "full_name": "Person 0", "given_name": "", "middle_name": "", "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, "sex": "MALE", "age": 35, "birth_date": "1990-01-01", @@ -28,14 +32,14 @@ "role": null, "relationship": "", "registration_data_import": { - "id": "b3c644d7-885b-4772-a9b0-6e7beba5093d", + "id": "da576372-198d-401f-a809-ff8bdb0c8df2", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "7ad662d7-ae87-41ee-8164-1fa914ecf1b1", + "id": "ab42e88d-160c-4c89-8b23-5156c24eb0de", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -43,8 +47,8 @@ }, "data_source": "XLS" }, - "import_id": "IND-25-0000.0004", - "admin_url": "/api/unicorn/household/individual/39153afe-db31-418c-bc62-5da4f46a9efc/change/", + "import_id": "IND-25-0000.0668", + "admin_url": "/api/unicorn/household/individual/c41b9f18-04ec-4f5d-b18d-75a70d10d034/change/", "preferred_language": null, "roles_in_households": [], "observed_disability": [ diff --git a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_jzh5_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_jzh5_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index fb04c1b5b48..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_jzh5_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "ETag": "f5cf6c00292d61d5fa037021e4245d00", - "Cache-Control": "private, no-cache", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1130" - }, - "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/jzh5/individuals/?limit=50&offset=50", - "previous": null, - "results": [ - { - "id": "39153afe-db31-418c-bc62-5da4f46a9efc", - "unicef_id": "IND-25-0000.0004", - "full_name": "Person 0", - "household": null, - "status": "ACTIVE", - "relationship": "", - "age": 35, - "sex": "MALE", - "relationship_display": "", - "birth_date": "1990-01-01", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_batch_status_display": "Unique in batch", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status_display": "Not Processed", - "deduplication_batch_results": [], - "biometric_deduplication_batch_results": [], - "deduplication_golden_record_status": "UNIQUE", - "deduplication_golden_record_status_display": "Unique", - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_status_display": "Not Processed", - "deduplication_golden_record_results": [], - "biometric_deduplication_golden_record_results": [], - "program": { - "id": "877ae6ad-31aa-40fc-9c37-3e0c6b6f4904", - "name": "Program 0", - "code": "jzh5" - }, - "last_registration_date": "2025-01-01", - "role": null - } - ] - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_zdpm_individuals_f6f115bc-558f-432f-a41f-a15242631af4_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_zdpm_individuals_f6f115bc-558f-432f-a41f-a15242631af4_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index bc31f8036c8..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_zdpm_individuals_f6f115bc-558f-432f-a41f-a15242631af4_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1609" - }, - "data": { - "id": "f6f115bc-558f-432f-a41f-a15242631af4", - "unicef_id": "IND-25-0000.0506", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "sex": "MALE", - "age": 35, - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "household": null, - "role": null, - "relationship": "", - "registration_data_import": { - "id": "8d0ff570-ccb5-4fd3-9657-493b3e80d400", - "name": "RDI 0", - "status": "MERGED", - "import_date": "2025-01-01T00:00:00Z", - "number_of_individuals": 1, - "number_of_households": 1, - "imported_by": { - "id": "0deca17a-145c-4561-8da3-1ef10a0bc88f", - "first_name": "", - "last_name": "", - "email": "user_1@example.com", - "username": "user_1" - }, - "data_source": "XLS" - }, - "import_id": "IND-25-0000.0506", - "admin_url": "/api/unicorn/household/individual/f6f115bc-558f-432f-a41f-a15242631af4/change/", - "preferred_language": null, - "roles_in_households": [], - "observed_disability": [ - "NONE" - ], - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "disability": "not disabled", - "documents": [], - "identities": [], - "accounts": [], - "email": "", - "phone_no": "", - "phone_no_valid": false, - "phone_no_alternative": "", - "phone_no_alternative_valid": false, - "sanction_list_last_check": null, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "status": "ACTIVE", - "deduplication_golden_record_status": "UNIQUE", - "flex_fields": {}, - "linked_grievances": [], - "photo": null, - "enrolled_in_nutrition_programme": null, - "who_answers_phone": "", - "who_answers_alt_phone": "", - "payment_delivery_phone_no": null, - "identification_key": null, - "identification_key_label": null - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json index c471a6a207f..6e6a6761cbf 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json @@ -2,7 +2,7 @@ "business_area": { "master": { "model": "core.businessarea", - "pk": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", + "pk": "5659ec62-788c-4e0c-9a04-6b1222ee7722", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json index 97c6d9f4b99..adc07253510 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json @@ -2,7 +2,7 @@ "individual": { "master": { "model": "household.individual", - "pk": "39153afe-db31-418c-bc62-5da4f46a9efc", + "pk": "c41b9f18-04ec-4f5d-b18d-75a70d10d034", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -11,11 +11,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.0004", + "unicef_id": "IND-25-0000.0668", "internal_data": {}, - "business_area": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", - "program": "877ae6ad-31aa-40fc-9c37-3e0c6b6f4904", - "registration_data_import": "b3c644d7-885b-4772-a9b0-6e7beba5093d", + "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", + "program": "248d5486-a703-41b8-92cc-d0a1b5d3b447", + "registration_data_import": "da576372-198d-401f-a809-ff8bdb0c8df2", "household": null, "individual_collection": null, "copied_from": null, @@ -25,6 +25,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -89,7 +93,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", + "pk": "5659ec62-788c-4e0c-9a04-6b1222ee7722", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -130,18 +134,18 @@ }, { "model": "program.program", - "pk": "877ae6ad-31aa-40fc-9c37-3e0c6b6f4904", + "pk": "248d5486-a703-41b8-92cc-d0a1b5d3b447", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "data_collecting_type": 2, - "beneficiary_group": "d247f13d-8282-43c4-bfdd-0be4efc9d495", - "business_area": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", + "data_collecting_type": 331, + "beneficiary_group": "f44213e8-ff73-4616-8f63-38035cd7d72c", + "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", "name": "Program 0", - "code": "jzh5", + "code": "c7eh", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -168,7 +172,7 @@ }, { "model": "core.datacollectingtype", - "pk": 2, + "pk": 331, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -183,14 +187,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 2 + 331 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "d247f13d-8282-43c4-bfdd-0be4efc9d495", + "pk": "f44213e8-ff73-4616-8f63-38035cd7d72c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -204,7 +208,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "b3c644d7-885b-4772-a9b0-6e7beba5093d", + "pk": "da576372-198d-401f-a809-ff8bdb0c8df2", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -212,10 +216,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", - "program": "877ae6ad-31aa-40fc-9c37-3e0c6b6f4904", + "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", + "program": "248d5486-a703-41b8-92cc-d0a1b5d3b447", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "7ad662d7-ae87-41ee-8164-1fa914ecf1b1", + "imported_by": "ab42e88d-160c-4c89-8b23-5156c24eb0de", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -241,7 +245,7 @@ }, { "model": "account.user", - "pk": "7ad662d7-ae87-41ee-8164-1fa914ecf1b1", + "pk": "ab42e88d-160c-4c89-8b23-5156c24eb0de", "fields": { "password": "", "last_login": null, @@ -255,7 +259,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 8, + "partner": 1184, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -266,7 +270,7 @@ }, { "model": "account.partner", - "pk": 8, + "pk": 1184, "fields": { "name": "Partner 1", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json index f01b1773514..a831f18674c 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json @@ -2,18 +2,18 @@ "program": { "master": { "model": "program.program", - "pk": "877ae6ad-31aa-40fc-9c37-3e0c6b6f4904", + "pk": "248d5486-a703-41b8-92cc-d0a1b5d3b447", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "data_collecting_type": 2, - "beneficiary_group": "d247f13d-8282-43c4-bfdd-0be4efc9d495", - "business_area": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", + "data_collecting_type": 331, + "beneficiary_group": "f44213e8-ff73-4616-8f63-38035cd7d72c", + "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", "name": "Program 0", - "code": "jzh5", + "code": "c7eh", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -41,7 +41,7 @@ "deps": [ { "model": "core.datacollectingtype", - "pk": 2, + "pk": 331, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -56,14 +56,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 2 + 331 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "d247f13d-8282-43c4-bfdd-0be4efc9d495", + "pk": "f44213e8-ff73-4616-8f63-38035cd7d72c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -77,7 +77,7 @@ }, { "model": "core.businessarea", - "pk": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", + "pk": "5659ec62-788c-4e0c-9a04-6b1222ee7722", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json index 146da1fb52a..04cc954f959 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json @@ -2,7 +2,7 @@ "role": { "master": { "model": "account.role", - "pk": "93ab34d6-b221-4b4f-a938-f13f17d9997b", + "pk": "3dc772e9-542d-4f0d-bee9-fac9a28b5442", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json index 9b680304ddf..1599c23c7fb 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json @@ -2,14 +2,14 @@ "role_assignment": { "master": { "model": "account.roleassignment", - "pk": "fbdbcb61-9bd3-4372-96a8-8dd60a84b18e", + "pk": "0b1b5689-586a-4820-8a77-c6b93a78ad82", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", - "business_area": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", - "user": "90e18a26-c79a-4d9d-a897-e8bcca932d38", + "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", + "user": "95a695c0-4e86-4c42-b5b5-5814d77a6f8e", "partner": null, - "role": "93ab34d6-b221-4b4f-a938-f13f17d9997b", + "role": "3dc772e9-542d-4f0d-bee9-fac9a28b5442", "program": null, "expiry_date": null, "group": null @@ -18,7 +18,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "6a16cc7c-8589-4725-bfbc-04a2f9e7d282", + "pk": "5659ec62-788c-4e0c-9a04-6b1222ee7722", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -59,7 +59,7 @@ }, { "model": "account.user", - "pk": "90e18a26-c79a-4d9d-a897-e8bcca932d38", + "pk": "95a695c0-4e86-4c42-b5b5-5814d77a6f8e", "fields": { "password": "", "last_login": null, @@ -73,7 +73,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 6, + "partner": 1182, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -84,7 +84,7 @@ }, { "model": "account.partner", - "pk": 6, + "pk": 1182, "fields": { "name": "Partner 0", "parent": null, @@ -98,7 +98,7 @@ }, { "model": "account.role", - "pk": "93ab34d6-b221-4b4f-a938-f13f17d9997b", + "pk": "3dc772e9-542d-4f0d-bee9-fac9a28b5442", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json index 8d9899e85c0..da3b3d37ad2 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json @@ -2,7 +2,7 @@ "superuser": { "master": { "model": "account.user", - "pk": "90e18a26-c79a-4d9d-a897-e8bcca932d38", + "pk": "95a695c0-4e86-4c42-b5b5-5814d77a6f8e", "fields": { "password": "", "last_login": null, @@ -16,7 +16,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 6, + "partner": 1182, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -28,7 +28,7 @@ "deps": [ { "model": "account.partner", - "pk": 6, + "pk": 1182, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 248e344d6bc..3d65746e838 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,16 +8,17 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1116" + "Content-Length": "1139" }, "data": { "next": "http://testserver/api/rest/business-areas/business-area-0/individuals/?limit=50&offset=50", "previous": null, "results": [ { - "id": "2950def4-eacc-4680-b0b3-ec97a8687a03", - "unicef_id": "IND-25-0000.0003", + "id": "95391fd5-c41f-4a18-b716-b96eec3bc96d", + "unicef_id": "IND-25-0000.0008", "full_name": "Person 0", + "full_name_local": null, "household": null, "status": "ACTIVE", "relationship": "", @@ -38,9 +39,9 @@ "deduplication_golden_record_results": [], "biometric_deduplication_golden_record_results": [], "program": { - "id": "0bbd1ea4-3885-4d41-911d-3dd1f49c50af", + "id": "75717c42-48fb-43af-8b4a-6bd2206acd88", "name": "Program 0", - "code": "lga1" + "code": "r2sz" }, "last_registration_date": "2025-01-01", "role": null diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/business_area.fixture.json deleted file mode 100644 index a0f335013b4..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/business_area.fixture.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "business_area": { - "master": { - "model": "core.businessarea", - "pk": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/individual.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/individual.fixture.json deleted file mode 100644 index fe2952d8ef4..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/individual.fixture.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "individual": { - "master": { - "model": "household.individual", - "pk": "2950def4-eacc-4680-b0b3-ec97a8687a03", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "unicef_id": "IND-25-0000.0003", - "internal_data": {}, - "business_area": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "program": "0bbd1ea4-3885-4d41-911d-3dd1f49c50af", - "registration_data_import": "9291da0c-f1b4-4481-af67-a36f3a8a8774", - "household": null, - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.program", - "pk": "0bbd1ea4-3885-4d41-911d-3dd1f49c50af", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315201, - "data_collecting_type": 12, - "beneficiary_group": "afe41cf8-2d9a-45fd-82bb-de175e6b41c8", - "business_area": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "name": "Program 0", - "status": "ACTIVE", - "code": "lga1", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 12, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 12 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "afe41cf8-2d9a-45fd-82bb-de175e6b41c8", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "9291da0c-f1b4-4481-af67-a36f3a8a8774", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "program": "0bbd1ea4-3885-4d41-911d-3dd1f49c50af", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "14d54ba9-2b8a-446e-b158-5e8886cf791e", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "14d54ba9-2b8a-446e-b158-5e8886cf791e", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 31, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 31, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/program.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/program.fixture.json deleted file mode 100644 index b41a6b2a1d6..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/program.fixture.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "program": { - "master": { - "model": "program.program", - "pk": "0bbd1ea4-3885-4d41-911d-3dd1f49c50af", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "data_collecting_type": 12, - "beneficiary_group": "afe41cf8-2d9a-45fd-82bb-de175e6b41c8", - "business_area": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "name": "Program 0", - "status": "ACTIVE", - "code": "lga1", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - "deps": [ - { - "model": "core.datacollectingtype", - "pk": 12, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 12 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "afe41cf8-2d9a-45fd-82bb-de175e6b41c8", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "core.businessarea", - "pk": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - } - ] - } -} diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/role.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/role.fixture.json deleted file mode 100644 index 3d57b35774a..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/role.fixture.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "role": { - "master": { - "model": "account.role", - "pk": "0529395b-19a5-4384-8493-5d01acc20d83", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/role_assignment.fixture.json deleted file mode 100644 index ff3679ccf50..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/role_assignment.fixture.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "role_assignment": { - "master": { - "model": "account.roleassignment", - "pk": "378c60c5-2990-42d9-abe9-467e5e8dd22f", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "business_area": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "user": "1a3f81df-a8f1-418c-acfc-21c17277aa7b", - "partner": null, - "role": "0529395b-19a5-4384-8493-5d01acc20d83", - "program": null, - "expiry_date": null, - "group": null - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "5050b33f-4ee0-4692-96c6-aee022a65e4f", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "account.user", - "pk": "1a3f81df-a8f1-418c-acfc-21c17277aa7b", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 29, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 29, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "account.role", - "pk": "0529395b-19a5-4384-8493-5d01acc20d83", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/superuser.fixture.json deleted file mode 100644 index f2df6495244..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/superuser.fixture.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "superuser": { - "master": { - "model": "account.user", - "pk": "1a3f81df-a8f1-418c-acfc-21c17277aa7b", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 29, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - "deps": [ - { - "model": "account.partner", - "pk": 29, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_43mc_payment-verifications_b546a8d8-a5c1-4161-b3fb-6186f0ca192f_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 80% rename from tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_43mc_payment-verifications_b546a8d8-a5c1-4161-b3fb-6186f0ca192f_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index ab2bf7231d4..d7212c25df7 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_43mc_payment-verifications_b546a8d8-a5c1-4161-b3fb-6186f0ca192f_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -11,16 +11,16 @@ "Content-Length": "1665" }, "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/43mc/payment-verifications/b546a8d8-a5c1-4161-b3fb-6186f0ca192f/verifications/?limit=50&offset=50", + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/z-ra/payment-verifications/1613948b-f5a0-4c15-b8d7-f9d8b327ace7/verifications/?limit=50&offset=50", "previous": null, "results": [ { - "id": "480e9f86-3a14-4620-b6eb-0cb5eea687fa", + "id": "03594729-c68e-4d70-8b97-f4cf3633aac2", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "parent_id": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "e543d80f-0f91-4f05-b566-a361430a15fb", - "household_unicef_id": "HH-25-0000.1833", + "household_id": "d21af3c8-33f4-480f-b88b-ce639ac91567", + "household_unicef_id": "HH-25-0000.0348", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -43,17 +43,17 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "collector_id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { - "id": "a75036e1-8ba4-4695-bdf3-2db11502aa71", + "id": "c76b4f09-7216-4533-9b76-1a5231e2a9f8", "received_amount": null, "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-2", + "payment_verification_plan_unicef_id": "PVP-5", "verification_channel": "MANUAL", "admin_url": null, - "version": 1735688653315200, + "version": 1735688653315201, "is_manually_editable": true }, "payment_plan_hard_conflicted": false, @@ -62,7 +62,7 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "43mc", + "program_code": "z-ra", "collector_type_display": "Primary collector" } ] diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_43mc_payment-verifications_b546a8d8-a5c1-4161-b3fb-6186f0ca192f_verifications_480e9f86-3a14-4620-b6eb-0cb5eea687fa_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_03594729-c68e-4d70-8b97-f4cf3633aac2_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 85% rename from tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_43mc_payment-verifications_b546a8d8-a5c1-4161-b3fb-6186f0ca192f_verifications_480e9f86-3a14-4620-b6eb-0cb5eea687fa_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_03594729-c68e-4d70-8b97-f4cf3633aac2_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index ecc47994bc7..616804dccdf 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_43mc_payment-verifications_b546a8d8-a5c1-4161-b3fb-6186f0ca192f_verifications_480e9f86-3a14-4620-b6eb-0cb5eea687fa_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_03594729-c68e-4d70-8b97-f4cf3633aac2_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,15 +8,15 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "11240" + "Content-Length": "11362" }, "data": { - "id": "480e9f86-3a14-4620-b6eb-0cb5eea687fa", + "id": "03594729-c68e-4d70-8b97-f4cf3633aac2", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "parent_id": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "e543d80f-0f91-4f05-b566-a361430a15fb", - "household_unicef_id": "HH-25-0000.1833", + "household_id": "d21af3c8-33f4-480f-b88b-ce639ac91567", + "household_unicef_id": "HH-25-0000.0348", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -39,17 +39,17 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "collector_id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { - "id": "a75036e1-8ba4-4695-bdf3-2db11502aa71", + "id": "c76b4f09-7216-4533-9b76-1a5231e2a9f8", "received_amount": null, "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-1", + "payment_verification_plan_unicef_id": "PVP-4", "verification_channel": "MANUAL", "admin_url": null, - "version": 1735688653315200, + "version": 1735688653315201, "is_manually_editable": true }, "payment_plan_hard_conflicted": false, @@ -58,10 +58,10 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "43mc", + "program_code": "z-ra", "collector_type_display": "Primary collector", "parent": { - "id": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "id": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "unicef_id": "PP-BA0000-25-00000001", "name": null, "status": "FINISHED", @@ -80,8 +80,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "program": { - "id": "b5729d94-7763-4050-a467-64ba11d8e856", - "code": "43mc", + "id": "aa86cc63-26cf-4296-ad56-f50504de3fcf", + "code": "z-ra", "name": "Program 0", "status": "ACTIVE", "screen_beneficiary": false @@ -92,7 +92,7 @@ "start_date": null, "end_date": null, "program_cycle": { - "id": "a1662f42-d9d7-4daa-b7fc-435587099322", + "id": "d05aa093-dae8-4e55-b72f-3a496b43c30d", "title": "Programme Cycle 0" }, "has_payment_list_export_file": false, @@ -103,7 +103,7 @@ "delivery_mechanism": null, "volume_by_delivery_mechanism": [ { - "id": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "id": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "delivery_mechanism": null, "volume": null, "volume_usd": null @@ -184,8 +184,8 @@ "available_funds_commitments": [], "payment_verification_plans": [ { - "id": "bcde8c43-ddff-4360-8690-842ebf44d10c", - "unicef_id": "PVP-1", + "id": "51ca1394-9206-425c-984a-2e8fa2f37521", + "unicef_id": "PVP-4", "status": "PENDING", "status_display": "Pending", "verification_channel": "MANUAL", @@ -209,21 +209,22 @@ "age_filter_max": null, "excluded_admin_areas_filter": null, "rapid_pro_flow_id": "", - "admin_url": "/api/unicorn/payment/paymentverificationplan/bcde8c43-ddff-4360-8690-842ebf44d10c/change/" + "admin_url": "/api/unicorn/payment/paymentverificationplan/51ca1394-9206-425c-984a-2e8fa2f37521/change/" } ], - "admin_url": "/api/unicorn/payment/paymentplan/b546a8d8-a5c1-4161-b3fb-6186f0ca192f/change/", + "admin_url": "/api/unicorn/payment/paymentplan/1613948b-f5a0-4c15-b8d7-f9d8b327ace7/change/", "abort_comment": "", "flat_amount_value": null }, - "admin_url": "/api/unicorn/payment/payment/480e9f86-3a14-4620-b6eb-0cb5eea687fa/change/", + "admin_url": "/api/unicorn/payment/payment/03594729-c68e-4d70-8b97-f4cf3633aac2/change/", "source_payment": null, "household": { - "id": "e543d80f-0f91-4f05-b566-a361430a15fb", - "unicef_id": "HH-25-0000.1833", + "id": "d21af3c8-33f4-480f-b88b-ce639ac91567", + "unicef_id": "HH-25-0000.0348", "head_of_household": { - "id": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", - "full_name": "Person 0" + "id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", + "full_name": "Person 0", + "full_name_local": null }, "admin1": null, "admin2": null, @@ -239,14 +240,14 @@ "sanction_list_confirmed_match": false, "has_duplicates": false, "registration_data_import": { - "id": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", + "id": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "ed34697e-9c3a-498e-aebe-8e7e1c95f5b1", + "id": "3e8bf412-7b9e-472d-9851-9c70a791ac04", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -259,8 +260,8 @@ "admin_area_title": "", "active_individuals_count": 1, "geopoint": null, - "import_id": "HH-25-0000.1833", - "admin_url": "/api/unicorn/household/household/e543d80f-0f91-4f05-b566-a361430a15fb/change/", + "import_id": "HH-25-0000.0348", + "admin_url": "/api/unicorn/household/household/d21af3c8-33f4-480f-b88b-ce639ac91567/change/", "male_children_count": null, "female_children_count": null, "children_disabled_count": null, @@ -319,10 +320,10 @@ "consent_sharing": [], "roles_in_household": [ { - "id": "777bcfd3-4455-4b9e-81c3-9608d8bacd73", + "id": "a33e691c-2cdd-4aaf-a234-73cc0e40935c", "individual": { - "id": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", - "unicef_id": "IND-25-0000.4032" + "id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", + "unicef_id": "IND-25-0000.0670" }, "role": "PRIMARY" } @@ -330,12 +331,16 @@ }, "delivery_mechanism": null, "collector": { - "id": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", - "unicef_id": "IND-25-0000.4032", + "id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", + "unicef_id": "IND-25-0000.0670", "full_name": "Person 0", "given_name": "", "middle_name": "", "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, "sex": "MALE", "age": 35, "birth_date": "1990-01-01", @@ -344,8 +349,8 @@ "work_status": "NOT_PROVIDED", "pregnant": null, "household": { - "id": "e543d80f-0f91-4f05-b566-a361430a15fb", - "unicef_id": "HH-25-0000.1833", + "id": "d21af3c8-33f4-480f-b88b-ce639ac91567", + "unicef_id": "HH-25-0000.0348", "admin1": null, "admin2": null, "admin3": null, @@ -372,20 +377,20 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.1833", - "program_code": "43mc" + "import_id": "HH-25-0000.0348", + "program_code": "z-ra" }, "role": "PRIMARY", "relationship": "", "registration_data_import": { - "id": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", + "id": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "ed34697e-9c3a-498e-aebe-8e7e1c95f5b1", + "id": "3e8bf412-7b9e-472d-9851-9c70a791ac04", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -393,15 +398,15 @@ }, "data_source": "XLS" }, - "import_id": "IND-25-0000.4032", - "admin_url": "/api/unicorn/household/individual/f60d8e1a-6ec3-4309-b322-8aeb983c32fa/change/", + "import_id": "IND-25-0000.0670", + "admin_url": "/api/unicorn/household/individual/f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f/change/", "preferred_language": null, "roles_in_households": [ { - "id": "777bcfd3-4455-4b9e-81c3-9608d8bacd73", + "id": "a33e691c-2cdd-4aaf-a234-73cc0e40935c", "household": { - "id": "e543d80f-0f91-4f05-b566-a361430a15fb", - "unicef_id": "HH-25-0000.1833", + "id": "d21af3c8-33f4-480f-b88b-ce639ac91567", + "unicef_id": "HH-25-0000.0348", "admin1": null, "admin2": null, "admin3": null, @@ -428,8 +433,8 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.1833", - "program_code": "43mc" + "import_id": "HH-25-0000.0348", + "program_code": "z-ra" }, "role": "PRIMARY" } diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json index 52fccc81d93..a5ae0d8509e 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json @@ -2,7 +2,7 @@ "business_area": { "master": { "model": "core.businessarea", - "pk": "534c4d35-007f-4238-81a9-89fd50bd790e", + "pk": "157288c6-ab1d-480f-b368-826957876c61", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json index 166a35e4e25..45af36848c9 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json @@ -2,7 +2,7 @@ "household": { "master": { "model": "household.household", - "pk": "e543d80f-0f91-4f05-b566-a361430a15fb", + "pk": "d21af3c8-33f4-480f-b88b-ce639ac91567", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -11,11 +11,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "HH-25-0000.1833", + "unicef_id": "HH-25-0000.0348", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", - "registration_data_import": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", + "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -25,7 +25,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "head_of_household": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "facility": null, "consent_sign": "", "consent": null, @@ -67,6 +67,7 @@ "fchild_hoh": null, "child_hoh": null, "village": "", + "currency_old": "", "currency": null, "unhcr_id": "", "detail_id": null, @@ -103,7 +104,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "534c4d35-007f-4238-81a9-89fd50bd790e", + "pk": "157288c6-ab1d-480f-b368-826957876c61", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -144,18 +145,18 @@ }, { "model": "program.program", - "pk": "b5729d94-7763-4050-a467-64ba11d8e856", + "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "data_collecting_type": 3399, - "beneficiary_group": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", + "data_collecting_type": 332, + "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", "name": "Program 0", - "code": "43mc", + "code": "z-ra", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -182,7 +183,7 @@ }, { "model": "core.datacollectingtype", - "pk": 3399, + "pk": 332, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -197,14 +198,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 3399 + 332 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", + "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -218,7 +219,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", + "pk": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -226,10 +227,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "ed34697e-9c3a-498e-aebe-8e7e1c95f5b1", + "imported_by": "3e8bf412-7b9e-472d-9851-9c70a791ac04", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -255,7 +256,7 @@ }, { "model": "account.user", - "pk": "ed34697e-9c3a-498e-aebe-8e7e1c95f5b1", + "pk": "3e8bf412-7b9e-472d-9851-9c70a791ac04", "fields": { "password": "", "last_login": null, @@ -269,7 +270,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 8073, + "partner": 1187, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -280,7 +281,7 @@ }, { "model": "account.partner", - "pk": 8073, + "pk": 1187, "fields": { "name": "Partner 1", "parent": null, @@ -294,7 +295,7 @@ }, { "model": "household.individual", - "pk": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "pk": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -303,12 +304,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.4032", + "unicef_id": "IND-25-0000.0670", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", - "registration_data_import": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", - "household": "e543d80f-0f91-4f05-b566-a361430a15fb", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", + "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", + "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -317,6 +318,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json index 9ecbfd0145f..c16ccf71687 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json @@ -2,7 +2,7 @@ "household_role": { "master": { "model": "household.individualroleinhousehold", - "pk": "777bcfd3-4455-4b9e-81c3-9608d8bacd73", + "pk": "a33e691c-2cdd-4aaf-a234-73cc0e40935c", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -10,8 +10,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, - "individual": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", - "household": "e543d80f-0f91-4f05-b566-a361430a15fb", + "individual": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", + "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", "role": "PRIMARY", "copied_from": null } @@ -19,7 +19,7 @@ "deps": [ { "model": "household.individual", - "pk": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "pk": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -28,12 +28,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "unicef_id": "IND-25-0000.4032", + "unicef_id": "IND-25-0000.0670", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", - "registration_data_import": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", - "household": "e543d80f-0f91-4f05-b566-a361430a15fb", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", + "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", + "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -42,6 +42,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -105,7 +109,7 @@ }, { "model": "core.businessarea", - "pk": "534c4d35-007f-4238-81a9-89fd50bd790e", + "pk": "157288c6-ab1d-480f-b368-826957876c61", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -146,18 +150,18 @@ }, { "model": "program.program", - "pk": "b5729d94-7763-4050-a467-64ba11d8e856", + "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "data_collecting_type": 3399, - "beneficiary_group": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", + "data_collecting_type": 332, + "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", "name": "Program 0", - "code": "43mc", + "code": "z-ra", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -184,7 +188,7 @@ }, { "model": "core.datacollectingtype", - "pk": 3399, + "pk": 332, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -199,14 +203,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 3399 + 332 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", + "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -220,7 +224,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", + "pk": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -228,10 +232,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "ed34697e-9c3a-498e-aebe-8e7e1c95f5b1", + "imported_by": "3e8bf412-7b9e-472d-9851-9c70a791ac04", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -257,7 +261,7 @@ }, { "model": "account.user", - "pk": "ed34697e-9c3a-498e-aebe-8e7e1c95f5b1", + "pk": "3e8bf412-7b9e-472d-9851-9c70a791ac04", "fields": { "password": "", "last_login": null, @@ -271,7 +275,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 8073, + "partner": 1187, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -282,7 +286,7 @@ }, { "model": "account.partner", - "pk": 8073, + "pk": 1187, "fields": { "name": "Partner 1", "parent": null, @@ -296,7 +300,7 @@ }, { "model": "household.household", - "pk": "e543d80f-0f91-4f05-b566-a361430a15fb", + "pk": "d21af3c8-33f4-480f-b88b-ce639ac91567", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -305,11 +309,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "unicef_id": "HH-25-0000.1833", + "unicef_id": "HH-25-0000.0348", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", - "registration_data_import": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", + "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -319,7 +323,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "head_of_household": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "facility": null, "consent_sign": "", "consent": null, @@ -361,6 +365,7 @@ "fchild_hoh": null, "child_hoh": null, "village": "", + "currency_old": "", "currency": null, "unhcr_id": "", "detail_id": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json index f66ade38751..4b291ac264b 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json @@ -2,7 +2,7 @@ "payment_plan": { "master": { "model": "payment.paymentplan", - "pk": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "pk": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -10,8 +10,8 @@ "version": 1735688653315201, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program_cycle": "a1662f42-d9d7-4daa-b7fc-435587099322", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program_cycle": "d05aa093-dae8-4e55-b72f-3a496b43c30d", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -21,12 +21,13 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "55666429-0533-4cd1-8379-2472d631390a", + "created_by": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "source_payment_plan": null, "storage_file": null, "name": null, "start_date": null, "end_date": null, + "currency_old": null, "currency": null, "dispersion_start_date": "2025-01-01", "dispersion_end_date": "2025-01-31", @@ -71,7 +72,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "534c4d35-007f-4238-81a9-89fd50bd790e", + "pk": "157288c6-ab1d-480f-b368-826957876c61", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -112,14 +113,14 @@ }, { "model": "program.programcycle", - "pk": "a1662f42-d9d7-4daa-b7fc-435587099322", + "pk": "d05aa093-dae8-4e55-b72f-3a496b43c30d", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -128,18 +129,18 @@ }, { "model": "program.program", - "pk": "b5729d94-7763-4050-a467-64ba11d8e856", + "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "data_collecting_type": 3399, - "beneficiary_group": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", + "data_collecting_type": 332, + "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", "name": "Program 0", - "code": "43mc", + "code": "z-ra", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -166,7 +167,7 @@ }, { "model": "core.datacollectingtype", - "pk": 3399, + "pk": 332, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -181,14 +182,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 3399 + 332 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", + "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -202,7 +203,7 @@ }, { "model": "account.user", - "pk": "55666429-0533-4cd1-8379-2472d631390a", + "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "fields": { "password": "", "last_login": null, @@ -216,7 +217,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 8071, + "partner": 1185, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -227,7 +228,7 @@ }, { "model": "account.partner", - "pk": 8071, + "pk": 1185, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json index f6fab233cdc..fc066967a39 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json @@ -2,13 +2,13 @@ "payment_verification": { "master": { "model": "payment.paymentverification", - "pk": "a75036e1-8ba4-4695-bdf3-2db11502aa71", + "pk": "c76b4f09-7216-4533-9b76-1a5231e2a9f8", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, - "payment": "480e9f86-3a14-4620-b6eb-0cb5eea687fa", - "payment_verification_plan": "bcde8c43-ddff-4360-8690-842ebf44d10c", + "payment": "03594729-c68e-4d70-8b97-f4cf3633aac2", + "payment_verification_plan": "51ca1394-9206-425c-984a-2e8fa2f37521", "status": "PENDING", "status_date": "2025-01-01T00:00:00Z", "received_amount": null, @@ -16,40 +16,32 @@ } }, "deps": [ - { - "model": "core.currency", - "pk": 1, - "fields": { - "code": "PLN", - "name": "Polish Zloty", - "is_crypto": false - } - }, { "model": "payment.payment", - "pk": "480e9f86-3a14-4620-b6eb-0cb5eea687fa", + "pk": "03594729-c68e-4d70-8b97-f4cf3633aac2", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "unicef_id": "RCPT-BA0000-25-0.000.001", - "signature_hash": "08bb59b59e7299508c45ec359421df6fb87791e3", + "signature_hash": "bf13b59bd42bdfef04ddae2e26ffe1e9e608a5cb", "internal_data": {}, - "parent": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "parent": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "parent_split": null, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", "program": null, - "household": "e543d80f-0f91-4f05-b566-a361430a15fb", + "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", "head_of_household": null, "delivery_type": null, "financial_service_provider": null, - "collector": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "collector": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "collector_type": "PRIMARY", "source_payment": null, "is_follow_up": false, "status": "Pending", "status_date": "2025-01-01T00:00:00Z", - "currency": 1, + "currency_old": null, + "currency": 111, "entitlement_quantity": null, "entitlement_quantity_usd": null, "entitlement_date": null, @@ -76,7 +68,7 @@ }, { "model": "payment.paymentplan", - "pk": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "pk": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -84,8 +76,8 @@ "version": 1735688653315203, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program_cycle": "a1662f42-d9d7-4daa-b7fc-435587099322", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program_cycle": "d05aa093-dae8-4e55-b72f-3a496b43c30d", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -95,12 +87,13 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "55666429-0533-4cd1-8379-2472d631390a", + "created_by": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "source_payment_plan": null, "storage_file": null, "name": null, "start_date": null, "end_date": null, + "currency_old": null, "currency": null, "dispersion_start_date": "2025-01-01", "dispersion_end_date": "2025-01-31", @@ -144,7 +137,7 @@ }, { "model": "core.businessarea", - "pk": "534c4d35-007f-4238-81a9-89fd50bd790e", + "pk": "157288c6-ab1d-480f-b368-826957876c61", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -185,14 +178,14 @@ }, { "model": "program.programcycle", - "pk": "a1662f42-d9d7-4daa-b7fc-435587099322", + "pk": "d05aa093-dae8-4e55-b72f-3a496b43c30d", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315202, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -201,18 +194,18 @@ }, { "model": "program.program", - "pk": "b5729d94-7763-4050-a467-64ba11d8e856", + "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315205, - "data_collecting_type": 3399, - "beneficiary_group": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", + "data_collecting_type": 332, + "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", "name": "Program 0", - "code": "43mc", + "code": "z-ra", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -239,7 +232,7 @@ }, { "model": "core.datacollectingtype", - "pk": 3399, + "pk": 332, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -254,14 +247,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 3399 + 332 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", + "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -275,7 +268,7 @@ }, { "model": "account.user", - "pk": "55666429-0533-4cd1-8379-2472d631390a", + "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "fields": { "password": "", "last_login": null, @@ -289,7 +282,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 8071, + "partner": 1185, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -300,7 +293,7 @@ }, { "model": "account.partner", - "pk": 8071, + "pk": 1185, "fields": { "name": "Partner 0", "parent": null, @@ -314,7 +307,7 @@ }, { "model": "household.household", - "pk": "e543d80f-0f91-4f05-b566-a361430a15fb", + "pk": "d21af3c8-33f4-480f-b88b-ce639ac91567", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -323,11 +316,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "unicef_id": "HH-25-0000.1833", + "unicef_id": "HH-25-0000.0348", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", - "registration_data_import": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", + "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -337,7 +330,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "head_of_household": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "facility": null, "consent_sign": "", "consent": null, @@ -379,6 +372,7 @@ "fchild_hoh": null, "child_hoh": null, "village": "", + "currency_old": "", "currency": null, "unhcr_id": "", "detail_id": null, @@ -414,7 +408,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", + "pk": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -422,10 +416,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "ed34697e-9c3a-498e-aebe-8e7e1c95f5b1", + "imported_by": "3e8bf412-7b9e-472d-9851-9c70a791ac04", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -451,7 +445,7 @@ }, { "model": "account.user", - "pk": "ed34697e-9c3a-498e-aebe-8e7e1c95f5b1", + "pk": "3e8bf412-7b9e-472d-9851-9c70a791ac04", "fields": { "password": "", "last_login": null, @@ -465,7 +459,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 8073, + "partner": 1187, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -476,7 +470,7 @@ }, { "model": "account.partner", - "pk": 8073, + "pk": 1187, "fields": { "name": "Partner 1", "parent": null, @@ -490,7 +484,7 @@ }, { "model": "household.individual", - "pk": "f60d8e1a-6ec3-4309-b322-8aeb983c32fa", + "pk": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -499,12 +493,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "IND-25-0000.4032", + "unicef_id": "IND-25-0000.0670", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", - "registration_data_import": "bf7aaf4d-4173-46a6-96c7-5b02867f7f66", - "household": "e543d80f-0f91-4f05-b566-a361430a15fb", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", + "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", + "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -513,6 +507,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -574,15 +572,24 @@ "vector_column": "'0':3 'none':1 'person':2" } }, + { + "model": "core.currency", + "pk": 111, + "fields": { + "code": "PLN", + "name": "Polish z\u0142oty", + "is_crypto": false + } + }, { "model": "payment.paymentverificationplan", - "pk": "bcde8c43-ddff-4360-8690-842ebf44d10c", + "pk": "51ca1394-9206-425c-984a-2e8fa2f37521", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, - "unicef_id": "PVP-255", - "payment_plan": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "unicef_id": "PVP-4", + "payment_plan": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "status": "PENDING", "verification_channel": "MANUAL", "sampling": "FULL_LIST", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json index 60ee783e82d..f87cb3fed33 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json @@ -2,20 +2,20 @@ "payment_verification_summary": { "master": { "model": "payment.paymentverificationsummary", - "pk": "67a6fcf2-1d93-4e95-a314-df3dcaf92f41", + "pk": "9b159a8f-67a6-4473-bb5f-84967d1a8b09", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "status": "PENDING", "activation_date": null, "completion_date": null, - "payment_plan": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f" + "payment_plan": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7" } }, "deps": [ { "model": "payment.paymentplan", - "pk": "b546a8d8-a5c1-4161-b3fb-6186f0ca192f", + "pk": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -23,8 +23,8 @@ "version": 1735688653315202, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "program_cycle": "a1662f42-d9d7-4daa-b7fc-435587099322", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "program_cycle": "d05aa093-dae8-4e55-b72f-3a496b43c30d", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -34,12 +34,13 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "55666429-0533-4cd1-8379-2472d631390a", + "created_by": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "source_payment_plan": null, "storage_file": null, "name": null, "start_date": null, "end_date": null, + "currency_old": null, "currency": null, "dispersion_start_date": "2025-01-01", "dispersion_end_date": "2025-01-31", @@ -83,7 +84,7 @@ }, { "model": "core.businessarea", - "pk": "534c4d35-007f-4238-81a9-89fd50bd790e", + "pk": "157288c6-ab1d-480f-b368-826957876c61", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -124,14 +125,14 @@ }, { "model": "program.programcycle", - "pk": "a1662f42-d9d7-4daa-b7fc-435587099322", + "pk": "d05aa093-dae8-4e55-b72f-3a496b43c30d", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315201, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "b5729d94-7763-4050-a467-64ba11d8e856", + "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -140,18 +141,18 @@ }, { "model": "program.program", - "pk": "b5729d94-7763-4050-a467-64ba11d8e856", + "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "data_collecting_type": 3399, - "beneficiary_group": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", + "data_collecting_type": 332, + "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", "name": "Program 0", - "code": "43mc", + "code": "z-ra", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -178,7 +179,7 @@ }, { "model": "core.datacollectingtype", - "pk": 3399, + "pk": 332, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -193,14 +194,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 3399 + 332 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", + "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -214,7 +215,7 @@ }, { "model": "account.user", - "pk": "55666429-0533-4cd1-8379-2472d631390a", + "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "fields": { "password": "", "last_login": null, @@ -228,7 +229,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 8071, + "partner": 1185, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -239,7 +240,7 @@ }, { "model": "account.partner", - "pk": 8071, + "pk": 1185, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json index 8efc11eb84c..a1681a7fac7 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json @@ -2,18 +2,18 @@ "program": { "master": { "model": "program.program", - "pk": "b5729d94-7763-4050-a467-64ba11d8e856", + "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "data_collecting_type": 3399, - "beneficiary_group": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", + "data_collecting_type": 332, + "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", "name": "Program 0", - "code": "43mc", + "code": "z-ra", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -41,7 +41,7 @@ "deps": [ { "model": "core.datacollectingtype", - "pk": 3399, + "pk": 332, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -56,14 +56,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 3399 + 332 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "8d0ef7c7-7e16-4943-ba67-c0a48678204f", + "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -77,7 +77,7 @@ }, { "model": "core.businessarea", - "pk": "534c4d35-007f-4238-81a9-89fd50bd790e", + "pk": "157288c6-ab1d-480f-b368-826957876c61", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json index 8c9a90c2c16..a779dade5c5 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json @@ -2,7 +2,7 @@ "role": { "master": { "model": "account.role", - "pk": "f80c1db4-a0f0-45ba-8087-e74b584188d5", + "pk": "4b635e48-6eec-4806-9c9b-130a22b0557e", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json index f1e99f08be8..c974e3382e9 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json @@ -2,14 +2,14 @@ "role_assignment": { "master": { "model": "account.roleassignment", - "pk": "0c830d35-82bc-4565-a2d6-bb39778c0336", + "pk": "a762c400-8914-4f3e-9211-6354fc364f88", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", - "business_area": "534c4d35-007f-4238-81a9-89fd50bd790e", - "user": "55666429-0533-4cd1-8379-2472d631390a", + "business_area": "157288c6-ab1d-480f-b368-826957876c61", + "user": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "partner": null, - "role": "f80c1db4-a0f0-45ba-8087-e74b584188d5", + "role": "4b635e48-6eec-4806-9c9b-130a22b0557e", "program": null, "expiry_date": null, "group": null @@ -18,7 +18,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "534c4d35-007f-4238-81a9-89fd50bd790e", + "pk": "157288c6-ab1d-480f-b368-826957876c61", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -59,7 +59,7 @@ }, { "model": "account.user", - "pk": "55666429-0533-4cd1-8379-2472d631390a", + "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "fields": { "password": "", "last_login": null, @@ -73,7 +73,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 8071, + "partner": 1185, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -84,7 +84,7 @@ }, { "model": "account.partner", - "pk": 8071, + "pk": 1185, "fields": { "name": "Partner 0", "parent": null, @@ -98,7 +98,7 @@ }, { "model": "account.role", - "pk": "f80c1db4-a0f0-45ba-8087-e74b584188d5", + "pk": "4b635e48-6eec-4806-9c9b-130a22b0557e", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json index c033f1d888c..5f6baa7b573 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json @@ -2,7 +2,7 @@ "superuser": { "master": { "model": "account.user", - "pk": "55666429-0533-4cd1-8379-2472d631390a", + "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", "fields": { "password": "", "last_login": null, @@ -16,7 +16,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 8071, + "partner": 1185, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -28,7 +28,7 @@ "deps": [ { "model": "account.partner", - "pk": 8071, + "pk": 1185, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/apps/grievance/test_grievance_detail.py b/tests/unit/apps/grievance/test_grievance_detail.py index e6104824ce4..1b7d56c7c14 100644 --- a/tests/unit/apps/grievance/test_grievance_detail.py +++ b/tests/unit/apps/grievance/test_grievance_detail.py @@ -351,6 +351,7 @@ def assert_base_grievance_data( "head_of_household": { "id": str(household.head_of_household.id), "full_name": household.head_of_household.full_name, + "full_name_local": None, }, "active_individuals_count": household.active_individuals.count(), } @@ -429,6 +430,7 @@ def assert_base_grievance_data( "id": str(individual.id), "unicef_id": individual.unicef_id, "full_name": individual.full_name, + "full_name_local": None, "program_code": individual.program.code, "household": { "id": str(individual.household.id), @@ -1339,6 +1341,7 @@ def test_grievance_detail_system_flagging( "id": str(golden_records_individual.id), "unicef_id": golden_records_individual.unicef_id, "full_name": golden_records_individual.full_name, + "full_name_local": None, "birth_date": f"{golden_records_individual.birth_date:%Y-%m-%d}", "last_registration_date": f"{golden_records_individual.last_registration_date:%Y-%m-%d}", "sex": golden_records_individual.sex, @@ -1692,6 +1695,7 @@ def test_grievance_detail_needs_adjudication( "id": str(golden_records_individual.id), "unicef_id": golden_records_individual.unicef_id, "full_name": golden_records_individual.full_name, + "full_name_local": None, "birth_date": f"{golden_records_individual.birth_date:%Y-%m-%d}", "last_registration_date": f"{golden_records_individual.last_registration_date:%Y-%m-%d}", "sex": golden_records_individual.sex, @@ -1771,6 +1775,7 @@ def test_grievance_detail_needs_adjudication( "id": str(individuals2[0].id), "unicef_id": individuals2[0].unicef_id, "full_name": individuals2[0].full_name, + "full_name_local": None, "birth_date": f"{individuals2[0].birth_date:%Y-%m-%d}", "last_registration_date": f"{individuals2[0].last_registration_date:%Y-%m-%d}", "sex": individuals2[0].sex, @@ -1818,6 +1823,7 @@ def test_grievance_detail_needs_adjudication( "id": str(individuals2[0].id), "unicef_id": individuals2[0].unicef_id, "full_name": individuals2[0].full_name, + "full_name_local": None, "birth_date": f"{individuals2[0].birth_date:%Y-%m-%d}", "last_registration_date": f"{individuals2[0].last_registration_date:%Y-%m-%d}", "sex": individuals2[0].sex, @@ -1866,6 +1872,7 @@ def test_grievance_detail_needs_adjudication( "id": str(duplicate.id), "unicef_id": duplicate.unicef_id, "full_name": duplicate.full_name, + "full_name_local": None, "birth_date": f"{duplicate.birth_date:%Y-%m-%d}", "last_registration_date": f"{duplicate.last_registration_date:%Y-%m-%d}", "sex": duplicate.sex, diff --git a/tests/unit/apps/household/test_household_list_views.py b/tests/unit/apps/household/test_household_list_views.py index 5b9293050de..82372499598 100644 --- a/tests/unit/apps/household/test_household_list_views.py +++ b/tests/unit/apps/household/test_household_list_views.py @@ -356,7 +356,7 @@ def test_household_list_caching( etag = response.headers["etag"] assert json.loads(cache.get(etag)[0].decode("utf8")) == response.json() assert len(response.json()["results"]) == 2 - assert len(ctx.captured_queries) == 16 + assert len(ctx.captured_queries) == 17 with CaptureQueriesContext(connection) as ctx: response = household_list_context["api_client"].get(household_list_context["list_url"]) @@ -364,7 +364,7 @@ def test_household_list_caching( assert response.has_header("etag") etag_second_call = response.headers["etag"] assert etag == etag_second_call - assert len(ctx.captured_queries) == 8 + assert len(ctx.captured_queries) == 9 household_list_context["household1"].children_count = 100 version_before_save = get_household_list_program_key(household_list_context["program"].id) @@ -379,7 +379,7 @@ def test_household_list_caching( etag_third_call = response.headers["etag"] assert json.loads(cache.get(etag_third_call)[0].decode("utf8")) == response.json() assert etag_third_call not in [etag, etag_second_call] - assert len(ctx.captured_queries) == 11 + assert len(ctx.captured_queries) == 12 set_admin_area_limits_in_program( household_list_context["partner"], @@ -393,7 +393,7 @@ def test_household_list_caching( etag_changed_areas = response.headers["etag"] assert json.loads(cache.get(etag_changed_areas)[0].decode("utf8")) == response.json() assert etag_changed_areas not in [etag, etag_second_call, etag_third_call] - assert len(ctx.captured_queries) == 11 + assert len(ctx.captured_queries) == 12 version_before_delete = get_household_list_program_key(household_list_context["program"].id) with TestCase.captureOnCommitCallbacks(execute=True): @@ -407,7 +407,7 @@ def test_household_list_caching( etag_fourth_call = response.headers["etag"] assert len(response.json()["results"]) == 1 assert etag_fourth_call not in [etag, etag_second_call, etag_third_call, etag_changed_areas] - assert len(ctx.captured_queries) == 11 + assert len(ctx.captured_queries) == 12 with CaptureQueriesContext(connection) as ctx: response = household_list_context["api_client"].get(household_list_context["list_url"]) @@ -415,7 +415,7 @@ def test_household_list_caching( assert response.has_header("etag") etag_fifth_call = response.headers["etag"] assert etag_fifth_call == etag_fourth_call - assert len(ctx.captured_queries) == 8 + assert len(ctx.captured_queries) == 9 def test_household_all_flex_fields_attributes( @@ -492,6 +492,7 @@ def test_household_all_accountability_communication_message_recipients( "head_of_household": { "id": str(household_list_context["household1"].head_of_household.pk), "full_name": household_list_context["household1"].head_of_household.full_name, + "full_name_local": None, }, "admin2": { "id": str(household_list_context["household1"].admin2.pk), @@ -677,6 +678,7 @@ def test_household_detail_with_permissions( assert data["head_of_household"] == { "id": str(individuals[0].id), "full_name": individuals[0].full_name, + "full_name_local": None, } assert data["admin1"] == { "id": str(household.admin1.id), diff --git a/tests/unit/apps/payment/test_serializers.py b/tests/unit/apps/payment/test_serializers.py index d79a3a67d64..5658de6e8da 100644 --- a/tests/unit/apps/payment/test_serializers.py +++ b/tests/unit/apps/payment/test_serializers.py @@ -227,6 +227,7 @@ def test_pending_payment_serializer_all_data(pending_payment_context: dict[str, assert data["head_of_household"] == { "id": str(payment.head_of_household.id), "full_name": f"{payment.head_of_household.full_name}", + "full_name_local": None, "unicef_id": payment.head_of_household.unicef_id, } assert data["household_size"] == 2 diff --git a/tests/unit/apps/registration_data/test_file/new_reg_data_import.xlsx b/tests/unit/apps/registration_data/test_file/new_reg_data_import.xlsx index 47c1c562171326aee35b0382f42dd3246b3202a6..2d1d4b0a8372b24b7e2f65e2e1461605a73e5b09 100644 GIT binary patch delta 42902 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 +a5XRppO8Y;_g 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 None: assert people_rows[0][10] == "pp_admin3_i_c" assert people_rows[1][10] == "Social Worker resides in which admin3? - SELECT_ONE" - assert people_rows[0][19] == "pp_middle_name_i_c" - assert people_rows[1][19] == "Middle name(s) - STRING" + assert people_rows[0][21] == "pp_middle_name_i_c" + assert people_rows[1][21] == "Middle name(s) - STRING" - assert people_rows[0][39] == "pp_drivers_license_issuer_i_c" - assert people_rows[1][39] == "Issuing country of driver's license - SELECT_ONE" + assert people_rows[0][43] == "pp_drivers_license_issuer_i_c" + assert people_rows[1][43] == "Issuing country of driver's license - SELECT_ONE" - assert people_rows[0][69] == "pp_village_i_c" - assert people_rows[1][69] == "Village - STRING" + assert people_rows[0][73] == "pp_village_i_c" + assert people_rows[1][73] == "Village - STRING" - assert people_rows[0][89] == "pdu_flex_attribute_round_1_collection_date" + assert people_rows[0][93] == "pdu_flex_attribute_round_1_collection_date" - assert people_rows[0][83] == "pp_index_id" - assert people_rows[1][83] == "Index ID - INTEGER - required" + assert people_rows[0][87] == "pp_index_id" + assert people_rows[1][87] == "Index ID - INTEGER - required" From 4c1c815704cb5738b8715e8e9a2ff4692df33cdc Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Mon, 20 Apr 2026 22:52:36 -0400 Subject: [PATCH 08/33] more tests and fixes --- ...zech_republic_flex_registration_service.py | 9 + .../services/generic_registration_service.py | 4 + .../nigeria_people_registration_service.py | 3 + .../sri_lanka_flex_registration_service.py | 1 + .../ukraine_flex_registration_service.py | 9 + tests/unit/api/test_rdi.py | 8 +- tests/unit/api/test_soft.py | 70 +- tests/unit/api/test_upload.py | 32 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 52 -- ...f18ae6b758e8014a24c7fa039e91.response.json | 71 -- ...f18ae6b758e8014a24c7fa039e91.response.json | 488 -------------- .../business_area.fixture.json | 46 -- .../household.fixture.json | 388 ----------- .../household_role.fixture.json | 404 ------------ .../payment_plan.fixture.json | 245 ------- .../payment_verification.fixture.json | 617 ------------------ .../payment_verification_summary.fixture.json | 257 -------- .../program.fixture.json | 121 ---- .../role.fixture.json | 17 - .../role_assignment.fixture.json | 113 ---- .../superuser.fixture.json | 45 -- .../test_generic_registration_service.py | 13 +- .../test_file/error-xlsx.xlsx | Bin 67345 -> 67328 bytes .../test_file/invalid_area.xlsx | Bin 288754 -> 288855 bytes .../test_file/new_reg_data_import.xlsx | Bin 289955 -> 290029 bytes .../test_file/rdi_people_test.xlsx | Bin 102074 -> 102078 bytes .../test_file/rdi_people_test_invalid.xlsx | Bin 101449 -> 101093 bytes 27 files changed, 106 insertions(+), 2907 deletions(-) delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_03594729-c68e-4d70-8b97-f4cf3633aac2_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json diff --git a/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py b/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py index 437add798f1..f3d207fa4cd 100644 --- a/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py +++ b/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py @@ -43,6 +43,8 @@ class CzechRepublicFlexRegistration(BaseRegistrationService): "phone_no": "phone_no_i_c", "given_name": "given_name_i_c", "family_name": "family_name_i_c", + "given_name_local": "given_name_local_i_c", + "family_name_local": "family_name_local_i_c", "relationship": "relationship_i_c", "preferred_language": "preferred_language_i_c", } @@ -176,7 +178,14 @@ def _prepare_individual_data( middle_name = individual_data.get("middle_name") family_name = individual_data.get("family_name") + given_name_local = individual_data.get("given_name_local") + middle_name_local = individual_data.get("middle_name_local") + family_name_local = individual_data.get("family_name_local") + individual_data["full_name"] = " ".join(filter(None, [given_name, middle_name, family_name])) + individual_data["full_name_local"] = " ".join( + filter(None, [given_name_local, middle_name_local, family_name_local]) + ) work_status = individual_dict.get("work_status_i_c") if work_status: diff --git a/src/hope/contrib/aurora/services/generic_registration_service.py b/src/hope/contrib/aurora/services/generic_registration_service.py index 0ba22090854..1dfc14f6131 100644 --- a/src/hope/contrib/aurora/services/generic_registration_service.py +++ b/src/hope/contrib/aurora/services/generic_registration_service.py @@ -75,6 +75,10 @@ class GenericRegistrationService(BaseRegistrationService): "middle_name_i_c": "individual.middle_name", "family_name_i_c": "individual.family_name", "full_name_i_c": "individual.full_name", + "given_name_local_i_c": "individual.given_name_local", + "middle_name_local_i_c": "individual.middle_name_local", + "family_name_local_i_c": "individual.family_name_local", + "full_name_local_i_c": "individual.full_name_local", "birth_date_i_c": "individual.birth_date", "gender_i_c": "individual.sex", "disability_i_c": "individual.disability", diff --git a/src/hope/contrib/aurora/services/nigeria_people_registration_service.py b/src/hope/contrib/aurora/services/nigeria_people_registration_service.py index 595ab185901..ad6fdb96dc7 100644 --- a/src/hope/contrib/aurora/services/nigeria_people_registration_service.py +++ b/src/hope/contrib/aurora/services/nigeria_people_registration_service.py @@ -80,6 +80,9 @@ def create_household_for_rdi_household(self, record: Any, registration_data_impo "given_name_i_c": "individual.given_name", "family_name_i_c": "individual.family_name", "middle_name_i_c": "individual.middle_name", + "given_name_local_i_c": "individual.given_name_local", + "middle_name_local_i_c": "individual.middle_name_local", + "family_name_local_i_c": "individual.family_name_local", "birth_date_i_c": "individual.birth_date", "gender_i_c": "individual.sex", "email_i_c": "individual.email", diff --git a/src/hope/contrib/aurora/services/sri_lanka_flex_registration_service.py b/src/hope/contrib/aurora/services/sri_lanka_flex_registration_service.py index 8033e2e8831..42c41f49a47 100644 --- a/src/hope/contrib/aurora/services/sri_lanka_flex_registration_service.py +++ b/src/hope/contrib/aurora/services/sri_lanka_flex_registration_service.py @@ -32,6 +32,7 @@ class SriLankaRegistrationService(BaseRegistrationService): INDIVIDUAL_MAPPING_DICT = { "full_name": "full_name_i_c", + "full_name_local": "full_name_local_i_c", "birth_date": "birth_date_i_c", "sex": "gender_i_c", "who_answers_phone": "who_answers_phone_i_c", diff --git a/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py b/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py index 741a317c5c9..fd33533de36 100644 --- a/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py +++ b/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py @@ -44,6 +44,9 @@ class UkraineBaseRegistrationService(BaseRegistrationService): "given_name": "given_name_i_c", "family_name": "family_name_i_c", "middle_name": "patronymic", + "given_name_local": "given_name_local_i_c", + "family_name_local": "family_name_local_i_c", + "middle_name_local": "patronymic_local", "birth_date": "birth_date", "sex": "gender_i_c", "relationship": "relationship_i_c", @@ -233,8 +236,14 @@ def _prepare_individual_data( given_name = individual_data.get("given_name") middle_name = individual_data.get("middle_name") family_name = individual_data.get("family_name") + given_name_local = individual_data.get("given_name_local") + middle_name_local = individual_data.get("middle_name_local") + family_name_local = individual_data.get("family_name_local") individual_data["full_name"] = " ".join(filter(None, [given_name, middle_name, family_name])) + individual_data["full_name_local"] = " ".join( + filter(None, [given_name_local, middle_name_local, family_name_local]) + ) return individual_data diff --git a/tests/unit/api/test_rdi.py b/tests/unit/api/test_rdi.py index 4097aa1a7d1..bb10d17e111 100644 --- a/tests/unit/api/test_rdi.py +++ b/tests/unit/api/test_rdi.py @@ -130,7 +130,7 @@ def test_push_creates_household_and_individuals( "members": [ { "relationship": HEAD, - "full_name": "James Head #1", + "full_name": "James Head One", "birth_date": "2000-01-01", "sex": "MALE", "photo": base64_image, @@ -159,7 +159,7 @@ def test_push_creates_household_and_individuals( }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Primary #1", + "full_name": "Mary Primary One", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", @@ -181,8 +181,8 @@ def test_push_creates_household_and_individuals( assert hh.primary_collector is not None assert hh.alternate_collector is None assert hh.program_id == program.id - assert hh.primary_collector.full_name == "Mary Primary #1" - assert hh.head_of_household.full_name == "James Head #1" + assert hh.primary_collector.full_name == "Mary Primary One" + assert hh.head_of_household.full_name == "James Head One" assert hh.head_of_household.photo is not None account_1 = PendingAccount.objects.filter(individual=hh.head_of_household).order_by("number").first() account_2 = PendingAccount.objects.filter(individual=hh.head_of_household).order_by("number").last() diff --git a/tests/unit/api/test_soft.py b/tests/unit/api/test_soft.py index 38992d861db..42f745e49ae 100644 --- a/tests/unit/api/test_soft.py +++ b/tests/unit/api/test_soft.py @@ -88,7 +88,8 @@ def test_push_lax_creates_households_and_reports_errors( "members": [ { "relationship": HEAD, - "full_name": "James Head #1", + "full_name": "James Head One", + "full_name_local": "Local Name #1", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -103,7 +104,7 @@ def test_push_lax_creates_households_and_reports_errors( }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Primary #1", + "full_name": "Mary Primary One", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", @@ -118,7 +119,7 @@ def test_push_lax_creates_households_and_reports_errors( "members": [ { "relationship": HEAD, - "full_name": "James Head #1", + "full_name": "James Head One", "birth_date": "2000-01-01", "sex": "MALE", "role": ROLE_PRIMARY, @@ -140,21 +141,21 @@ def test_push_lax_creates_households_and_reports_errors( "size": 1, "members": [ { - "full_name": "Jhon Primary #1", + "full_name": "Jhon Primary One", "birth_date": "2000-01-01", "role": "", "sex": "FEMALE", }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Alternate #1", + "full_name": "Mary Alternate One", "birth_date": "2000-01-01", "role": ROLE_ALTERNATE, "sex": "MALE", }, { "relationship": HEAD, - "full_name": "James Head #1", + "full_name": "James Head One", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -168,7 +169,7 @@ def test_push_lax_creates_households_and_reports_errors( }, { "relationship": SON_DAUGHTER, - "full_name": "Mary Son #1", + "full_name": "Mary Son One", "birth_date": "2000-01-01", "role": "", "sex": "MALE", @@ -183,7 +184,7 @@ def test_push_lax_creates_households_and_reports_errors( "members": [ { "relationship": HEAD, - "full_name": "John Head #2", + "full_name": "John Head Two", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -198,7 +199,7 @@ def test_push_lax_creates_households_and_reports_errors( }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Primary #2", + "full_name": "Mary Primary Two", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", @@ -242,7 +243,7 @@ def test_push_lax_creates_households_and_reports_errors( "size": 1, "members": [ { - "full_name": "James Head #1", + "full_name": "James Head One", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -257,22 +258,54 @@ def test_push_lax_creates_households_and_reports_errors( }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Primary #1", + "full_name": "Mary Primary One", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", }, ], }, + { + "residence_status": "", + "village": "village555", + "country": "AF", + "admin1": "AF01", + "admin2": None, + "members": [ + { + "relationship": HEAD, + "full_name": "New Test #555", + "birth_date": "2000-01-01", + "sex": "MALE", + "role": "", + "documents": [ + { + "document_number": 10, + "image": base64_encoded_data, + "country": "AF", + "type": birth_cert_key, + } + ], + }, + { + "relationship": NON_BENEFICIARY, + "full_name": "Mary Primary #555", + "birth_date": "2000-01-01", + "role": ROLE_PRIMARY, + "sex": "FEMALE", + }, + ], + "size": 1, + }, ] response = token_api_client.post(url, input_data, format="json") assert response.status_code == status.HTTP_201_CREATED, str(response.json()) data = response.json() - assert len(data["households"]) == 6 - assert data["processed"] == 6 - assert data["errors"] == 2 + assert len(data["households"]) == 7 + assert data["processed"] == 7 + assert data["errors"] == 3 assert data["accepted"] == 4 rdi = RegistrationDataImport.objects.filter(id=data["id"]).first() assert rdi is not None @@ -284,14 +317,15 @@ def test_push_lax_creates_households_and_reports_errors( pk1 = list(data["households"][0].values())[0][0]["pk"] hh = PendingHousehold.objects.get(pk=pk1) assert hh.program_id == program.id - assert hh.head_of_household.full_name == "James Head #1" - assert hh.primary_collector.full_name == "Mary Primary #1" + assert hh.head_of_household.full_name == "James Head One" + assert hh.head_of_household.full_name_local == "Local Name #1" + assert hh.primary_collector.full_name == "Mary Primary One" assert hh.head_of_household.program_id == program.id assert hh.primary_collector.program_id == program.id pk2 = list(data["households"][1].values())[0][0]["pk"] hh = PendingHousehold.objects.get(pk=pk2) assert hh.program_id == program.id - assert hh.head_of_household.full_name == "James Head #1" - assert hh.primary_collector.full_name == "James Head #1" + assert hh.head_of_household.full_name == "James Head One" + assert hh.primary_collector.full_name_local is None assert hh.head_of_household.program_id == program.id assert hh.primary_collector.program_id == program.id diff --git a/tests/unit/api/test_upload.py b/tests/unit/api/test_upload.py index 7cbbce8fdb9..4a88e266dfb 100644 --- a/tests/unit/api/test_upload.py +++ b/tests/unit/api/test_upload.py @@ -272,21 +272,21 @@ def test_upload_multiple_households( "members": [ { "relationship": NON_BENEFICIARY, - "full_name": "Jhon Primary #1", + "full_name": "Jhon Primary One", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Alternate #1", + "full_name": "Mary Alternate One", "birth_date": "2000-01-01", "role": ROLE_ALTERNATE, "sex": "MALE", }, { "relationship": HEAD, - "full_name": "James Head #1", + "full_name": "James Head One", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -300,7 +300,7 @@ def test_upload_multiple_households( }, { "relationship": SON_DAUGHTER, - "full_name": "Mary Son #1", + "full_name": "Mary Son One", "birth_date": "2000-01-01", "role": "", "sex": "MALE", @@ -315,7 +315,7 @@ def test_upload_multiple_households( "members": [ { "relationship": HEAD, - "full_name": "John Head #2", + "full_name": "John Head Two", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -330,7 +330,7 @@ def test_upload_multiple_households( }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Primary #2", + "full_name": "Mary Primary Two", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", @@ -382,8 +382,8 @@ def test_upload_multiple_households( assert hh.head_of_household is not None assert hh.primary_collector is not None assert hh.alternate_collector is not None - assert hh.primary_collector.full_name == "Jhon Primary #1" - assert hh.head_of_household.full_name == "James Head #1" + assert hh.primary_collector.full_name == "Jhon Primary One" + assert hh.head_of_household.full_name == "James Head One" assert data["households"] == 3 assert data["individuals"] == 8 @@ -447,21 +447,21 @@ def test_upload_error_missing_primary_collector( "members": [ { "relationship": NON_BENEFICIARY, - "full_name": "Jhon Primary #1", + "full_name": "Jhon Primary One", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Alternate #1", + "full_name": "Mary Alternate One", "birth_date": "2000-01-01", "role": ROLE_ALTERNATE, "sex": "MALE", }, { "relationship": HEAD, - "full_name": "James Head #1", + "full_name": "James Head One", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -475,7 +475,7 @@ def test_upload_error_missing_primary_collector( }, { "relationship": SON_DAUGHTER, - "full_name": "Mary Son #1", + "full_name": "Mary Son One", "birth_date": "2000-01-01", "role": "", "sex": "MALE", @@ -529,21 +529,21 @@ def test_upload_multiple_validation_errors( "members": [ { "relationship": NON_BENEFICIARY, - "full_name": "Jhon Primary #1", + "full_name": "Jhon Primary One", "birth_date": "2000-01-01", "role": "", "sex": "FEMALE", }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Alternate #1", + "full_name": "Mary Alternate One", "birth_date": "2000-01-01", "role": ROLE_ALTERNATE, "sex": "MALE", }, { "relationship": SON_DAUGHTER, - "full_name": "James Head #1", + "full_name": "James Head One", "birth_date": "2000-01-01", "sex": "MALE", "role": ROLE_ALTERNATE, @@ -557,7 +557,7 @@ def test_upload_multiple_validation_errors( }, { "relationship": SON_DAUGHTER, - "full_name": "Mary Son #1", + "full_name": "Mary Son One", "birth_date": "2000-01-01", "role": "", "sex": "MALE", diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index 3d65746e838..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1139" - }, - "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/individuals/?limit=50&offset=50", - "previous": null, - "results": [ - { - "id": "95391fd5-c41f-4a18-b716-b96eec3bc96d", - "unicef_id": "IND-25-0000.0008", - "full_name": "Person 0", - "full_name_local": null, - "household": null, - "status": "ACTIVE", - "relationship": "", - "age": 35, - "sex": "MALE", - "relationship_display": "", - "birth_date": "1990-01-01", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_batch_status_display": "Unique in batch", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status_display": "Not Processed", - "deduplication_batch_results": [], - "biometric_deduplication_batch_results": [], - "deduplication_golden_record_status": "UNIQUE", - "deduplication_golden_record_status_display": "Unique", - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_status_display": "Not Processed", - "deduplication_golden_record_results": [], - "biometric_deduplication_golden_record_results": [], - "program": { - "id": "75717c42-48fb-43af-8b4a-6bd2206acd88", - "name": "Program 0", - "code": "r2sz" - }, - "last_registration_date": "2025-01-01", - "role": null - } - ] - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index d7212c25df7..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1665" - }, - "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/z-ra/payment-verifications/1613948b-f5a0-4c15-b8d7-f9d8b327ace7/verifications/?limit=50&offset=50", - "previous": null, - "results": [ - { - "id": "03594729-c68e-4d70-8b97-f4cf3633aac2", - "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "household_unicef_id": "HH-25-0000.0348", - "household_size": null, - "household_admin2": "", - "household_status": "ACTIVE", - "hoh_phone_no": "None", - "hoh_phone_no_alternative": "None", - "snapshot_collector_full_name": null, - "snapshot_alternate_collector_full_name": null, - "snapshot_alternate_collector_id": null, - "fsp_name": "", - "entitlement_quantity": null, - "entitlement_quantity_usd": null, - "delivered_quantity": null, - "delivered_quantity_usd": null, - "delivery_date": null, - "delivery_type": null, - "status": "Pending", - "status_display": "Pending", - "currency": "PLN", - "fsp_auth_code": "", - "hoh_id": null, - "hoh_unicef_id": null, - "hoh_full_name": null, - "collector_id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "collector_phone_no": "", - "collector_phone_no_alt": "", - "verification": { - "id": "c76b4f09-7216-4533-9b76-1a5231e2a9f8", - "received_amount": null, - "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-5", - "verification_channel": "MANUAL", - "admin_url": null, - "version": 1735688653315201, - "is_manually_editable": true - }, - "payment_plan_hard_conflicted": false, - "payment_plan_hard_conflicted_data": [], - "payment_plan_soft_conflicted": false, - "payment_plan_soft_conflicted_data": [], - "people_individual": null, - "program_name": "Program 0", - "program_code": "z-ra", - "collector_type_display": "Primary collector" - } - ] - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_03594729-c68e-4d70-8b97-f4cf3633aac2_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_03594729-c68e-4d70-8b97-f4cf3633aac2_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index 616804dccdf..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_z-ra_payment-verifications_1613948b-f5a0-4c15-b8d7-f9d8b327ace7_verifications_03594729-c68e-4d70-8b97-f4cf3633aac2_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, PATCH, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "11362" - }, - "data": { - "id": "03594729-c68e-4d70-8b97-f4cf3633aac2", - "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "household_unicef_id": "HH-25-0000.0348", - "household_size": null, - "household_admin2": "", - "household_status": "ACTIVE", - "hoh_phone_no": "None", - "hoh_phone_no_alternative": "None", - "snapshot_collector_full_name": null, - "snapshot_alternate_collector_full_name": null, - "snapshot_alternate_collector_id": null, - "fsp_name": "", - "entitlement_quantity": null, - "entitlement_quantity_usd": null, - "delivered_quantity": null, - "delivered_quantity_usd": null, - "delivery_date": null, - "delivery_type": null, - "status": "Pending", - "status_display": "Pending", - "currency": "PLN", - "fsp_auth_code": "", - "hoh_id": null, - "hoh_unicef_id": null, - "hoh_full_name": null, - "collector_id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "collector_phone_no": "", - "collector_phone_no_alt": "", - "verification": { - "id": "c76b4f09-7216-4533-9b76-1a5231e2a9f8", - "received_amount": null, - "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-4", - "verification_channel": "MANUAL", - "admin_url": null, - "version": 1735688653315201, - "is_manually_editable": true - }, - "payment_plan_hard_conflicted": false, - "payment_plan_hard_conflicted_data": [], - "payment_plan_soft_conflicted": false, - "payment_plan_soft_conflicted_data": [], - "people_individual": null, - "program_name": "Program 0", - "program_code": "z-ra", - "collector_type_display": "Primary collector", - "parent": { - "id": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "unicef_id": "PP-BA0000-25-00000001", - "name": null, - "status": "FINISHED", - "total_households_count": 0, - "total_individuals_count": 0, - "currency": null, - "excluded_ids": null, - "total_entitled_quantity": null, - "total_delivered_quantity": null, - "total_undelivered_quantity": null, - "dispersion_start_date": "2025-01-01", - "dispersion_end_date": "2025-01-31", - "is_follow_up": false, - "follow_ups": [], - "created_by": " ", - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "program": { - "id": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "code": "z-ra", - "name": "Program 0", - "status": "ACTIVE", - "screen_beneficiary": false - }, - "version": 1735688653315204, - "background_action_status": null, - "background_action_status_display": null, - "start_date": null, - "end_date": null, - "program_cycle": { - "id": "d05aa093-dae8-4e55-b72f-3a496b43c30d", - "title": "Programme Cycle 0" - }, - "has_payment_list_export_file": false, - "has_fsp_delivery_mechanism_xlsx_template": false, - "imported_file_name": "", - "imported_file_date": null, - "payments_conflicts_count": 0, - "delivery_mechanism": null, - "volume_by_delivery_mechanism": [ - { - "id": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "delivery_mechanism": null, - "volume": null, - "volume_usd": null - } - ], - "split_choices": [ - { - "name": "By Admin Area 1", - "value": "BY_ADMIN_AREA1" - }, - { - "name": "By Admin Area 2", - "value": "BY_ADMIN_AREA2" - }, - { - "name": "By Admin Area 3", - "value": "BY_ADMIN_AREA3" - }, - { - "name": "By Collector", - "value": "BY_COLLECTOR" - }, - { - "name": "By Records", - "value": "BY_RECORDS" - }, - { - "name": "No Split", - "value": "NO_SPLIT" - } - ], - "exclusion_reason": null, - "exclude_household_error": null, - "bank_reconciliation_success": 0, - "bank_reconciliation_error": 0, - "can_create_payment_verification_plan": false, - "available_payment_records_count": 0, - "reconciliation_summary": { - "delivered_fully": 0, - "delivered_partially": 0, - "not_delivered": 0, - "unsuccessful": 0, - "pending": 1, - "reconciled": 0, - "number_of_payments": 1 - }, - "excluded_households": [], - "excluded_individuals": [], - "can_create_follow_up": false, - "total_withdrawn_households_count": 0, - "unsuccessful_payments_count": 0, - "can_send_to_payment_gateway": false, - "can_split": false, - "supporting_documents": [], - "total_households_count_with_valid_phone_no": 0, - "is_payment_gateway_and_all_sent_to_fsp": false, - "fsp_communication_channel": "XLSX", - "financial_service_provider": null, - "can_export_xlsx": false, - "can_download_xlsx": false, - "can_send_xlsx_password": false, - "approval_process": [], - "total_entitled_quantity_usd": null, - "total_entitled_quantity_revised_usd": null, - "total_delivered_quantity_usd": null, - "total_undelivered_quantity_usd": null, - "male_children_count": 0, - "female_children_count": 0, - "male_adults_count": 0, - "female_adults_count": 0, - "steficon_rule": null, - "source_payment_plan": null, - "exchange_rate": null, - "custom_exchange_rate": false, - "unore_exchange_rate": null, - "eligible_payments_count": 1, - "funds_commitments": null, - "available_funds_commitments": [], - "payment_verification_plans": [ - { - "id": "51ca1394-9206-425c-984a-2e8fa2f37521", - "unicef_id": "PVP-4", - "status": "PENDING", - "status_display": "Pending", - "verification_channel": "MANUAL", - "sampling": "Full list", - "sex_filter": null, - "activation_date": null, - "completion_date": null, - "sample_size": null, - "responded_count": null, - "received_count": null, - "not_received_count": null, - "received_with_problems_count": null, - "confidence_interval": null, - "margin_of_error": null, - "xlsx_file_exporting": false, - "xlsx_file_imported": false, - "has_xlsx_file": false, - "xlsx_file_was_downloaded": false, - "error": null, - "age_filter_min": null, - "age_filter_max": null, - "excluded_admin_areas_filter": null, - "rapid_pro_flow_id": "", - "admin_url": "/api/unicorn/payment/paymentverificationplan/51ca1394-9206-425c-984a-2e8fa2f37521/change/" - } - ], - "admin_url": "/api/unicorn/payment/paymentplan/1613948b-f5a0-4c15-b8d7-f9d8b327ace7/change/", - "abort_comment": "", - "flat_amount_value": null - }, - "admin_url": "/api/unicorn/payment/payment/03594729-c68e-4d70-8b97-f4cf3633aac2/change/", - "source_payment": null, - "household": { - "id": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "unicef_id": "HH-25-0000.0348", - "head_of_household": { - "id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "full_name": "Person 0", - "full_name_local": null - }, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "program": "Program 0", - "country": "", - "country_origin": "", - "status": "ACTIVE", - "total_cash_received": null, - "total_cash_received_usd": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "has_duplicates": false, - "registration_data_import": { - "id": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "name": "RDI 0", - "status": "MERGED", - "import_date": "2025-01-01T00:00:00Z", - "number_of_individuals": 1, - "number_of_households": 1, - "imported_by": { - "id": "3e8bf412-7b9e-472d-9851-9c70a791ac04", - "first_name": "", - "last_name": "", - "email": "user_1@example.com", - "username": "user_1" - }, - "data_source": "XLS" - }, - "flex_fields": {}, - "linked_grievances": [], - "admin_area_title": "", - "active_individuals_count": 1, - "geopoint": null, - "import_id": "HH-25-0000.0348", - "admin_url": "/api/unicorn/household/household/d21af3c8-33f4-480f-b88b-ce639ac91567/change/", - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "currency": null, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "unhcr_id": "", - "village": "", - "address": "", - "zip_code": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "other_sex_group_count": null, - "start": null, - "deviceid": "", - "fchild_hoh": null, - "child_hoh": null, - "returnee": null, - "size": null, - "residence_status": "None", - "program_registration_id": null, - "delivered_quantities": [ - { - "currency": "USD", - "total_delivered_quantity": "0.00" - }, - { - "currency": "PLN", - "total_delivered_quantity": "0.00" - } - ], - "consent": null, - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "registration_method": "", - "consent_sharing": [], - "roles_in_household": [ - { - "id": "a33e691c-2cdd-4aaf-a234-73cc0e40935c", - "individual": { - "id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "unicef_id": "IND-25-0000.0670" - }, - "role": "PRIMARY" - } - ] - }, - "delivery_mechanism": null, - "collector": { - "id": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "unicef_id": "IND-25-0000.0670", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "age": 35, - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "household": { - "id": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "unicef_id": "HH-25-0000.0348", - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "total_cash_received": null, - "total_cash_received_usd": null, - "delivered_quantities": [ - { - "currency": "USD", - "total_delivered_quantity": "0.00" - }, - { - "currency": "PLN", - "total_delivered_quantity": "0.00" - } - ], - "start": null, - "zip_code": null, - "residence_status": "None", - "country_origin": "", - "country": "", - "address": "", - "village": "", - "geopoint": null, - "import_id": "HH-25-0000.0348", - "program_code": "z-ra" - }, - "role": "PRIMARY", - "relationship": "", - "registration_data_import": { - "id": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "name": "RDI 0", - "status": "MERGED", - "import_date": "2025-01-01T00:00:00Z", - "number_of_individuals": 1, - "number_of_households": 1, - "imported_by": { - "id": "3e8bf412-7b9e-472d-9851-9c70a791ac04", - "first_name": "", - "last_name": "", - "email": "user_1@example.com", - "username": "user_1" - }, - "data_source": "XLS" - }, - "import_id": "IND-25-0000.0670", - "admin_url": "/api/unicorn/household/individual/f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f/change/", - "preferred_language": null, - "roles_in_households": [ - { - "id": "a33e691c-2cdd-4aaf-a234-73cc0e40935c", - "household": { - "id": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "unicef_id": "HH-25-0000.0348", - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "total_cash_received": null, - "total_cash_received_usd": null, - "delivered_quantities": [ - { - "currency": "USD", - "total_delivered_quantity": "0.00" - }, - { - "currency": "PLN", - "total_delivered_quantity": "0.00" - } - ], - "start": null, - "zip_code": null, - "residence_status": "None", - "country_origin": "", - "country": "", - "address": "", - "village": "", - "geopoint": null, - "import_id": "HH-25-0000.0348", - "program_code": "z-ra" - }, - "role": "PRIMARY" - } - ], - "observed_disability": [ - "NONE" - ], - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "disability": "not disabled", - "documents": [], - "identities": [], - "accounts": [], - "email": "", - "phone_no": "", - "phone_no_valid": false, - "phone_no_alternative": "", - "phone_no_alternative_valid": false, - "sanction_list_last_check": null, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "status": "ACTIVE", - "deduplication_golden_record_status": "UNIQUE", - "flex_fields": {}, - "linked_grievances": [], - "photo": null, - "biometric_deduplication_golden_record_status": "Not Processed", - "linked_grievances_biometrics": [], - "enrolled_in_nutrition_programme": null, - "who_answers_phone": "", - "who_answers_alt_phone": "", - "payment_delivery_phone_no": null, - "identification_key": null, - "identification_key_label": null - }, - "reason_for_unsuccessful_payment": null, - "additional_document_number": null, - "additional_document_type": null, - "additional_collector_name": null, - "transaction_reference_id": null, - "snapshot_collector_account_data": null, - "extras": {}, - "sent_to_fsp_date": null - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json deleted file mode 100644 index a5ae0d8509e..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "business_area": { - "master": { - "model": "core.businessarea", - "pk": "157288c6-ab1d-480f-b368-826957876c61", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json deleted file mode 100644 index 45af36848c9..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json +++ /dev/null @@ -1,388 +0,0 @@ -{ - "household": { - "master": { - "model": "household.household", - "pk": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315202, - "unicef_id": "HH-25-0000.0348", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "household_collection": null, - "storage_obj": null, - "copied_from": null, - "country_origin": null, - "country": null, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "head_of_household": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "facility": null, - "consent_sign": "", - "consent": null, - "consent_sharing": "", - "residence_status": "", - "address": "", - "zip_code": null, - "size": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "children_count": null, - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "male_children_disabled_count": null, - "female_children_disabled_count": null, - "other_sex_group_count": null, - "unknown_sex_group_count": null, - "returnee": null, - "fchild_hoh": null, - "child_hoh": null, - "village": "", - "currency_old": "", - "currency": null, - "unhcr_id": "", - "detail_id": null, - "originating_id": null, - "start": null, - "registration_method": "", - "family_id": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "collect_type": "STANDARD", - "program_registration_id": null, - "total_cash_received_usd": null, - "total_cash_received": null, - "flex_fields": {}, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "withdrawn": false, - "withdrawn_date": null, - "longitude": null, - "latitude": null, - "deviceid": "", - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "kobo_submission_uuid": null, - "kobo_submission_time": null, - "enumerator_rec_id": null, - "flex_registrations_record_id": null, - "identification_key": null, - "extra_rdis": [] - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "157288c6-ab1d-480f-b368-826957876c61", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.program", - "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315203, - "data_collecting_type": 332, - "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "name": "Program 0", - "code": "z-ra", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 332, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 332 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "3e8bf412-7b9e-472d-9851-9c70a791ac04", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "3e8bf412-7b9e-472d-9851-9c70a791ac04", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 1187, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1187, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.individual", - "pk": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "unicef_id": "IND-25-0000.0670", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json deleted file mode 100644 index c16ccf71687..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "household_role": { - "master": { - "model": "household.individualroleinhousehold", - "pk": "a33e691c-2cdd-4aaf-a234-73cc0e40935c", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "individual": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "role": "PRIMARY", - "copied_from": null - } - }, - "deps": [ - { - "model": "household.individual", - "pk": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315201, - "unicef_id": "IND-25-0000.0670", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - }, - { - "model": "core.businessarea", - "pk": "157288c6-ab1d-480f-b368-826957876c61", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.program", - "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315204, - "data_collecting_type": 332, - "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "name": "Program 0", - "code": "z-ra", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 332, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 332 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315201, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "3e8bf412-7b9e-472d-9851-9c70a791ac04", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "3e8bf412-7b9e-472d-9851-9c70a791ac04", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 1187, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1187, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.household", - "pk": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315203, - "unicef_id": "HH-25-0000.0348", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "household_collection": null, - "storage_obj": null, - "copied_from": null, - "country_origin": null, - "country": null, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "head_of_household": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "facility": null, - "consent_sign": "", - "consent": null, - "consent_sharing": "", - "residence_status": "", - "address": "", - "zip_code": null, - "size": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "children_count": null, - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "male_children_disabled_count": null, - "female_children_disabled_count": null, - "other_sex_group_count": null, - "unknown_sex_group_count": null, - "returnee": null, - "fchild_hoh": null, - "child_hoh": null, - "village": "", - "currency_old": "", - "currency": null, - "unhcr_id": "", - "detail_id": null, - "originating_id": null, - "start": null, - "registration_method": "", - "family_id": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "collect_type": "STANDARD", - "program_registration_id": null, - "total_cash_received_usd": null, - "total_cash_received": null, - "flex_fields": {}, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "withdrawn": false, - "withdrawn_date": null, - "longitude": null, - "latitude": null, - "deviceid": "", - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "kobo_submission_uuid": null, - "kobo_submission_time": null, - "enumerator_rec_id": null, - "flex_registrations_record_id": null, - "identification_key": null, - "extra_rdis": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json deleted file mode 100644 index 4b291ac264b..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "payment_plan": { - "master": { - "model": "payment.paymentplan", - "pk": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315201, - "unicef_id": "PP-BA0000-25-00000001", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program_cycle": "d05aa093-dae8-4e55-b72f-3a496b43c30d", - "delivery_mechanism": null, - "financial_service_provider": null, - "imported_file": null, - "export_file_entitlement": null, - "export_file_per_fsp": null, - "export_pdf_file_summary": null, - "reconciliation_import_file": null, - "steficon_rule": null, - "steficon_rule_targeting": null, - "created_by": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "source_payment_plan": null, - "storage_file": null, - "name": null, - "start_date": null, - "end_date": null, - "currency_old": null, - "currency": null, - "dispersion_start_date": "2025-01-01", - "dispersion_end_date": "2025-01-31", - "excluded_ids": null, - "exclusion_reason": null, - "vulnerability_score_min": null, - "vulnerability_score_max": null, - "abort_comment": "", - "flat_amount_value": null, - "status": "FINISHED", - "background_action_status": null, - "build_status": null, - "built_at": null, - "exchange_rate": null, - "custom_exchange_rate": false, - "custom_exchange_rate_set_by": null, - "female_children_count": 0, - "male_children_count": 0, - "female_adults_count": 0, - "male_adults_count": 0, - "total_households_count": 0, - "total_individuals_count": 0, - "imported_file_date": null, - "total_entitled_quantity": null, - "total_entitled_quantity_usd": null, - "total_entitled_quantity_revised": null, - "total_entitled_quantity_revised_usd": null, - "total_delivered_quantity": null, - "total_delivered_quantity_usd": null, - "total_undelivered_quantity": null, - "total_undelivered_quantity_usd": null, - "steficon_targeting_applied_date": null, - "steficon_applied_date": null, - "is_follow_up": false, - "exclude_household_error": null, - "status_date": "2025-01-01T00:00:00Z", - "is_cash_assist": false, - "flag_exclude_if_active_adjudication_ticket": false, - "flag_exclude_if_on_sanction_list": false - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "157288c6-ab1d-480f-b368-826957876c61", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.programcycle", - "pk": "d05aa093-dae8-4e55-b72f-3a496b43c30d", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "unicef_id": "PC-BA0000-25-000001", - "title": "Programme Cycle 0", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "status": "ACTIVE", - "start_date": "2025-01-01", - "end_date": null, - "created_by": null - } - }, - { - "model": "program.program", - "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315201, - "data_collecting_type": 332, - "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "name": "Program 0", - "code": "z-ra", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 332, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 332 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "account.user", - "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1185, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1185, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json deleted file mode 100644 index fc066967a39..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json +++ /dev/null @@ -1,617 +0,0 @@ -{ - "payment_verification": { - "master": { - "model": "payment.paymentverification", - "pk": "c76b4f09-7216-4533-9b76-1a5231e2a9f8", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "payment": "03594729-c68e-4d70-8b97-f4cf3633aac2", - "payment_verification_plan": "51ca1394-9206-425c-984a-2e8fa2f37521", - "status": "PENDING", - "status_date": "2025-01-01T00:00:00Z", - "received_amount": null, - "sent_to_rapid_pro": false - } - }, - "deps": [ - { - "model": "payment.payment", - "pk": "03594729-c68e-4d70-8b97-f4cf3633aac2", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "unicef_id": "RCPT-BA0000-25-0.000.001", - "signature_hash": "bf13b59bd42bdfef04ddae2e26ffe1e9e608a5cb", - "internal_data": {}, - "parent": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "parent_split": null, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": null, - "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "head_of_household": null, - "delivery_type": null, - "financial_service_provider": null, - "collector": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "collector_type": "PRIMARY", - "source_payment": null, - "is_follow_up": false, - "status": "Pending", - "status_date": "2025-01-01T00:00:00Z", - "currency_old": null, - "currency": 111, - "entitlement_quantity": null, - "entitlement_quantity_usd": null, - "entitlement_date": null, - "delivered_quantity": null, - "delivered_quantity_usd": null, - "delivery_date": null, - "transaction_reference_id": null, - "transaction_status_blockchain_link": null, - "conflicted": false, - "excluded": false, - "has_valid_wallet": true, - "reason_for_unsuccessful_payment": null, - "order_number": null, - "token_number": null, - "additional_collector_name": null, - "additional_document_type": null, - "additional_document_number": null, - "fsp_auth_code": null, - "extras": {}, - "vulnerability_score": null, - "is_cash_assist": false, - "sent_to_fsp_date": null - } - }, - { - "model": "payment.paymentplan", - "pk": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315203, - "unicef_id": "PP-BA0000-25-00000001", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program_cycle": "d05aa093-dae8-4e55-b72f-3a496b43c30d", - "delivery_mechanism": null, - "financial_service_provider": null, - "imported_file": null, - "export_file_entitlement": null, - "export_file_per_fsp": null, - "export_pdf_file_summary": null, - "reconciliation_import_file": null, - "steficon_rule": null, - "steficon_rule_targeting": null, - "created_by": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "source_payment_plan": null, - "storage_file": null, - "name": null, - "start_date": null, - "end_date": null, - "currency_old": null, - "currency": null, - "dispersion_start_date": "2025-01-01", - "dispersion_end_date": "2025-01-31", - "excluded_ids": null, - "exclusion_reason": null, - "vulnerability_score_min": null, - "vulnerability_score_max": null, - "abort_comment": "", - "flat_amount_value": null, - "status": "FINISHED", - "background_action_status": null, - "build_status": null, - "built_at": null, - "exchange_rate": null, - "custom_exchange_rate": false, - "custom_exchange_rate_set_by": null, - "female_children_count": 0, - "male_children_count": 0, - "female_adults_count": 0, - "male_adults_count": 0, - "total_households_count": 0, - "total_individuals_count": 0, - "imported_file_date": null, - "total_entitled_quantity": null, - "total_entitled_quantity_usd": null, - "total_entitled_quantity_revised": null, - "total_entitled_quantity_revised_usd": null, - "total_delivered_quantity": null, - "total_delivered_quantity_usd": null, - "total_undelivered_quantity": null, - "total_undelivered_quantity_usd": null, - "steficon_targeting_applied_date": null, - "steficon_applied_date": null, - "is_follow_up": false, - "exclude_household_error": null, - "status_date": "2025-01-01T00:00:00Z", - "is_cash_assist": false, - "flag_exclude_if_active_adjudication_ticket": false, - "flag_exclude_if_on_sanction_list": false - } - }, - { - "model": "core.businessarea", - "pk": "157288c6-ab1d-480f-b368-826957876c61", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.programcycle", - "pk": "d05aa093-dae8-4e55-b72f-3a496b43c30d", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315202, - "unicef_id": "PC-BA0000-25-000001", - "title": "Programme Cycle 0", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "status": "ACTIVE", - "start_date": "2025-01-01", - "end_date": null, - "created_by": null - } - }, - { - "model": "program.program", - "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315205, - "data_collecting_type": 332, - "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "name": "Program 0", - "code": "z-ra", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 332, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 332 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "account.user", - "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1185, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1185, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.household", - "pk": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315204, - "unicef_id": "HH-25-0000.0348", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "household_collection": null, - "storage_obj": null, - "copied_from": null, - "country_origin": null, - "country": null, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "head_of_household": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "facility": null, - "consent_sign": "", - "consent": null, - "consent_sharing": "", - "residence_status": "", - "address": "", - "zip_code": null, - "size": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "children_count": null, - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "male_children_disabled_count": null, - "female_children_disabled_count": null, - "other_sex_group_count": null, - "unknown_sex_group_count": null, - "returnee": null, - "fchild_hoh": null, - "child_hoh": null, - "village": "", - "currency_old": "", - "currency": null, - "unhcr_id": "", - "detail_id": null, - "originating_id": null, - "start": null, - "registration_method": "", - "family_id": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "collect_type": "STANDARD", - "program_registration_id": null, - "total_cash_received_usd": null, - "total_cash_received": null, - "flex_fields": {}, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "withdrawn": false, - "withdrawn_date": null, - "longitude": null, - "latitude": null, - "deviceid": "", - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "kobo_submission_uuid": null, - "kobo_submission_time": null, - "enumerator_rec_id": null, - "flex_registrations_record_id": null, - "identification_key": null, - "extra_rdis": [] - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315202, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "3e8bf412-7b9e-472d-9851-9c70a791ac04", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "3e8bf412-7b9e-472d-9851-9c70a791ac04", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 1187, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1187, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.individual", - "pk": "f621f0a8-d6bd-4af2-8fa1-1cf7a0f96a7f", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315202, - "unicef_id": "IND-25-0000.0670", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "registration_data_import": "5c67df94-ec02-4db0-bd1e-9d2e1f8ebbf1", - "household": "d21af3c8-33f4-480f-b88b-ce639ac91567", - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - }, - { - "model": "core.currency", - "pk": 111, - "fields": { - "code": "PLN", - "name": "Polish z\u0142oty", - "is_crypto": false - } - }, - { - "model": "payment.paymentverificationplan", - "pk": "51ca1394-9206-425c-984a-2e8fa2f37521", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "unicef_id": "PVP-4", - "payment_plan": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "status": "PENDING", - "verification_channel": "MANUAL", - "sampling": "FULL_LIST", - "sex_filter": null, - "activation_date": null, - "completion_date": null, - "sample_size": null, - "responded_count": null, - "received_count": null, - "not_received_count": null, - "received_with_problems_count": null, - "confidence_interval": null, - "margin_of_error": null, - "rapid_pro_flow_id": "", - "rapid_pro_flow_start_uuids": "[]", - "xlsx_file_exporting": false, - "xlsx_file_imported": false, - "error": null, - "age_filter": null, - "excluded_admin_areas_filter": null - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json deleted file mode 100644 index f87cb3fed33..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "payment_verification_summary": { - "master": { - "model": "payment.paymentverificationsummary", - "pk": "9b159a8f-67a6-4473-bb5f-84967d1a8b09", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "status": "PENDING", - "activation_date": null, - "completion_date": null, - "payment_plan": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7" - } - }, - "deps": [ - { - "model": "payment.paymentplan", - "pk": "1613948b-f5a0-4c15-b8d7-f9d8b327ace7", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315202, - "unicef_id": "PP-BA0000-25-00000001", - "internal_data": {}, - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "program_cycle": "d05aa093-dae8-4e55-b72f-3a496b43c30d", - "delivery_mechanism": null, - "financial_service_provider": null, - "imported_file": null, - "export_file_entitlement": null, - "export_file_per_fsp": null, - "export_pdf_file_summary": null, - "reconciliation_import_file": null, - "steficon_rule": null, - "steficon_rule_targeting": null, - "created_by": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "source_payment_plan": null, - "storage_file": null, - "name": null, - "start_date": null, - "end_date": null, - "currency_old": null, - "currency": null, - "dispersion_start_date": "2025-01-01", - "dispersion_end_date": "2025-01-31", - "excluded_ids": null, - "exclusion_reason": null, - "vulnerability_score_min": null, - "vulnerability_score_max": null, - "abort_comment": "", - "flat_amount_value": null, - "status": "FINISHED", - "background_action_status": null, - "build_status": null, - "built_at": null, - "exchange_rate": null, - "custom_exchange_rate": false, - "custom_exchange_rate_set_by": null, - "female_children_count": 0, - "male_children_count": 0, - "female_adults_count": 0, - "male_adults_count": 0, - "total_households_count": 0, - "total_individuals_count": 0, - "imported_file_date": null, - "total_entitled_quantity": null, - "total_entitled_quantity_usd": null, - "total_entitled_quantity_revised": null, - "total_entitled_quantity_revised_usd": null, - "total_delivered_quantity": null, - "total_delivered_quantity_usd": null, - "total_undelivered_quantity": null, - "total_undelivered_quantity_usd": null, - "steficon_targeting_applied_date": null, - "steficon_applied_date": null, - "is_follow_up": false, - "exclude_household_error": null, - "status_date": "2025-01-01T00:00:00Z", - "is_cash_assist": false, - "flag_exclude_if_active_adjudication_ticket": false, - "flag_exclude_if_on_sanction_list": false - } - }, - { - "model": "core.businessarea", - "pk": "157288c6-ab1d-480f-b368-826957876c61", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.programcycle", - "pk": "d05aa093-dae8-4e55-b72f-3a496b43c30d", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315201, - "unicef_id": "PC-BA0000-25-000001", - "title": "Programme Cycle 0", - "program": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "status": "ACTIVE", - "start_date": "2025-01-01", - "end_date": null, - "created_by": null - } - }, - { - "model": "program.program", - "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315202, - "data_collecting_type": 332, - "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "name": "Program 0", - "code": "z-ra", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 332, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 332 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "account.user", - "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1185, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1185, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json deleted file mode 100644 index a1681a7fac7..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "program": { - "master": { - "model": "program.program", - "pk": "aa86cc63-26cf-4296-ad56-f50504de3fcf", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "data_collecting_type": 332, - "beneficiary_group": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "name": "Program 0", - "code": "z-ra", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - "deps": [ - { - "model": "core.datacollectingtype", - "pk": 332, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 332 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "293c2abf-a880-4da9-8099-fc6977b3eb71", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "core.businessarea", - "pk": "157288c6-ab1d-480f-b368-826957876c61", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json deleted file mode 100644 index a779dade5c5..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "role": { - "master": { - "model": "account.role", - "pk": "4b635e48-6eec-4806-9c9b-130a22b0557e", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json deleted file mode 100644 index c974e3382e9..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "role_assignment": { - "master": { - "model": "account.roleassignment", - "pk": "a762c400-8914-4f3e-9211-6354fc364f88", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "business_area": "157288c6-ab1d-480f-b368-826957876c61", - "user": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "partner": null, - "role": "4b635e48-6eec-4806-9c9b-130a22b0557e", - "program": null, - "expiry_date": null, - "group": null - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "157288c6-ab1d-480f-b368-826957876c61", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "account.user", - "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1185, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1185, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "account.role", - "pk": "4b635e48-6eec-4806-9c9b-130a22b0557e", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json deleted file mode 100644 index 5f6baa7b573..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "superuser": { - "master": { - "model": "account.user", - "pk": "8f6dec5a-bf07-4933-8803-edbf56ed1e69", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1185, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - "deps": [ - { - "model": "account.partner", - "pk": 1185, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/apps/aurora/test_generic_registration_service.py b/tests/unit/apps/aurora/test_generic_registration_service.py index b62596485de..4b0c928ca16 100644 --- a/tests/unit/apps/aurora/test_generic_registration_service.py +++ b/tests/unit/apps/aurora/test_generic_registration_service.py @@ -160,6 +160,7 @@ def individual_with_bank_account_and_tax_and_disability() -> dict: "bank_account_h_f": "y", "relationship_i_c": "head", "given_name_i_c": "Jan", + "given_name_local_i_c": "Żoniak", "family_name_i_c": "Romaniak", "patronymic": "Roman", "birth_date": "1991-11-18", @@ -180,7 +181,7 @@ def individual_with_bank_account_and_tax() -> dict: "bank_account_h_f": "y", "relationship_i_c": "head", "given_name_i_c": "Wiktor", - "family_name_i_c": "Lamiący", + "family_name_i_c": "Lamiacy", "patronymic": "Stefan", "birth_date": "1991-11-18", "gender_i_c": "male", @@ -195,8 +196,9 @@ def individual_with_no_tax() -> dict: "tax_id_no_i_c": "", "bank_account_h_f": "y", "relationship_i_c": "head", - "given_name_i_c": "Michał", - "family_name_i_c": "Brzęczący", + "given_name_i_c": "Michal", + "given_name_local_i_c": "Michał_local", + "family_name_i_c": "Brzeczacy", "patronymic": "Janusz", "birth_date": "1991-11-18", "gender_i_c": "male", @@ -215,7 +217,7 @@ def individual_without_bank_account() -> dict: "relationship_i_c": "head", "given_name_i_c": "Aleksiej", "family_name_i_c": "Prysznicow", - "patronymic": "Paweł", + "patronymic": "Pawel", "birth_date": "1991-11-18", "gender_i_c": "male", "phone_no_i_c": "+393451212123", @@ -232,7 +234,7 @@ def individual_with_tax_id_which_is_too_long() -> dict: "relationship_i_c": "head", "given_name_i_c": "Aleksiej", "family_name_i_c": "Prysznicow", - "patronymic": "Paweł", + "patronymic": "Pawel", "birth_date": "1991-11-18", "gender_i_c": "male", "phone_no_i_c": "+393451214623", @@ -399,6 +401,7 @@ def test_import_data_to_datahub_household_individual( assert PendingDocument.objects.get(document_number="xyz", type__key="disability_certificate") assert PendingIndividual.objects.get( given_name="Jan", + given_name_local="Żoniak", middle_name="Roman", family_name="Romaniak", relationship="HEAD", diff --git a/tests/unit/apps/registration_data/test_file/error-xlsx.xlsx b/tests/unit/apps/registration_data/test_file/error-xlsx.xlsx index a473b0954b151bdf71073e1fb1680e6f50b61ee2..0280d2aa31a71865ad13ea7a3972d6bbcb046c2b 100644 GIT binary patch delta 5480 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 Mxv*<7{%jxcKSli^fB*mh delta 5508 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 M=D_NN+(beD2Z(AU2mk;8 diff --git a/tests/unit/apps/registration_data/test_file/invalid_area.xlsx b/tests/unit/apps/registration_data/test_file/invalid_area.xlsx index 7ce8785b3ae4027834ce0482bc2dc1b2efb36c90..a0e21e43ec51d67c7e5f1adbe9f96081834340cf 100644 GIT binary patch delta 50732 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 delta 51197 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

    AWVlxq!`Uo9&yW0| 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 delta 41298 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 D&7iX< diff --git a/tests/unit/apps/registration_data/test_file/rdi_people_test.xlsx b/tests/unit/apps/registration_data/test_file/rdi_people_test.xlsx index 589af071d329e12b0b9ca58da0734e533dc6e506..c14b441496862f2a19f8ffea048989ec9d484c23 100644 GIT binary patch delta 14758 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 SC@MWJ4x9$YJL+E)?EeCi1BcE4 delta 14737 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 F{}(-{mGJ-o diff --git a/tests/unit/apps/registration_data/test_file/rdi_people_test_invalid.xlsx b/tests/unit/apps/registration_data/test_file/rdi_people_test_invalid.xlsx index ed08fb052c3cd01d0ac60f7bfebc37dc7c686a46..bab7fbf478ec9a94c58f56fc93e30909f0f92965 100644 GIT binary patch literal 101093 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

    ;#s|oGGANButCJvXZq*#fT2u=xDYNL(S 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⁡a=6H7w!`7g*u4?n<8 zV<>4$da#^(wwKxi<=NZg^~i_Oz-LbWz2+=2v!J5ZQQ{@U6}s-G$zX(jz!BIN(d(jz2pT z^I?0?#6zvX^c4kJUQrM{nuUq5XheEntCVYC56fEBC?_cjAw}{`c;mt6M|{HfVf2Fi zP?<6H%;~ze4Fb#;i8Io~_#1vD$wDP^(5(7@G#O-*UqjygAg{-UDy$uknbfHUDX&2j z3eTYFml#7nDZmEfNF5>U@iB1~oR41YEjBs&3SX+G>ppT94?nhO zu!!M1f2+8jG51l<2{&y z&1^=e@J|L~1NT6Y#4zw(;Pxo-(wn26*X^U3}db)T3YeBJD>wTc_<$=9+(bC{w>pBdej6tV0@o4K`}&6;HE69yRNcNQ)2G zgS@acTt*q#t$)A!oh4OTFKbK(a=&))!=z~?UzsmLGRa$tM(WDpbeFjO@Tt2GVKQvwt2ROe5qtrhLZRTKl?RE`LRiC&fn>Q1 z7Uu#>DS@$Q2X}aJ(o#ju2m2_X8m6z1_2HnK#^27s@gPq`WuMPHl{1cy9^%p(sfcwl_^^fF_z2Bm-yC?Ie4JHK9(7h+vnI- zxu^fgKd!vT4l$|5%8&X5L@!$nBo-od;@ojdaTGPL0tVk$eJ9p{6MlkCP~Zhx#Ub(* z3HX z;_DX{LmeP0n{OPh@dQT>_aC|+CU!JGst;0v#3X&z?(KR%=Z#Ff+5J~(im)r&Q%vlfV5qFL}5z&XbUIy z;fn=!0&nCNY`R~cJo)TnZ&nT*>$NZ4d?Vev88A+e7~VBfDp)meR>{PjmRc$C{A+{= z4O)&Jnqd(yyatH%MPj_(gxGenn#Ys1dqplLe~)geKL;~ffOGkw5e8fhVQ-R8v;>0-ia>n zoBH9qR|LCjY!S7$Q0$YT`HH1bDP5cArIXMgy5Bt)F^eY)eB7X|&Y;2`VjKiOS%p!FlSuf=+TZ94R6mayM=Or{9BYfRSwpc+!*xMV41ZRlII%&4|IF=uV`=vY^LU1H^$Kcy!uLRYP}sv<4L7v-ZR!jWhGRU=();+a2g>(eJe#+8_xXH-$qJ@) zzZEl=nRS859!AZ-=Zimrv=NCW3nh7eE+`{O!Zr$Nok@~G!CWvZpg&JU)zk4+6p8V@ zapn}s<9eYC-Qe0_v4%o*JaNI4RvbN>dlV)R85B&uED{X0;Cw8S5s;QIyfpG=3=kzt z9#5?a>&tzSIbw_+S!iaWA_22rf;>*`vEfGHBK2ve-$XfJ#6>8h4C(%aQ1szbY8z(a z4=5C!V*_MEX&4S`6p`VPByM}6G(UaKFk_hbSQrijg6e*CW9?ta;RVi{7`=F?J|~!b zzVP!Q5JPH6_|M%TwEg$}mgQoT%C#OKa(JYLH?Pq0F0y-|yq7hCV~EAz6B%(#J$mX{ zXdNLU`&Je7?l zt~YL7bvEVgb%F?q9Gyu@(~rL+QlSwExlh&zf8FePnaiNtl*G1bPy6MG%<^nEZZC9I zqu1=127Rm8c-$3@`cyL!q|=fPG*5$cFvrh7OdW*Z@UuYi znKeC;l6FA|Gq4rJ--qWl^X7J_>{|AXyT@xLmZYv*;)0w8MZA==sk`cp7;y)CI!vwVS%;Ve|Z%#$jb`vGJe9b$E#l0y_H+0<9CZq8{lR<3>*US-3Q9AgAx+}f*)r~23VWg;P%_ugj8kM$I>OLa%7DHR6CBNhmM*Nw( zVZ)&`vEWy0i9`0D41esWxT}Q)PXQsT^Oet)%Dy;4JsvY_^y@q<;`lJsHBUD4gGh0X9|br zG3A5zKHsmIZ)2~0TG^S$&>y+8>TAp2{Rz>&-*^WyMqyt|2tuT>P_UfUO*6ZL(2Hgj z^Ov7yO@AJ9eqJ?GnU?JFvE(Bo;?Hj5N=51TrQ9GvU+sugV*U|#n+E@9T}jYO z0UOTYX7=<1I!`eI_H(~lmtZ-uoAw;TN-m$`uz{5eLi!v+`9&R94t0yGYwDF61gK=T6=$)~}+7rl4@hAv3 z`0;4>nC%0-Y6Hw&`xcpbStw;kS0Jm7%w5Nz$W~+*SdN2PDoA#n6w4>F!`X$7Y0}my zR7F1;;#X;+3b7Ak+L(L3Y@2&{@ny56b5BR3f-%dBM_qRL=k{QwyDKko`Y8duddt-A zBP&6E4|o{u^93hz9kU;=9%TQb@qI|T6XEY&l&hn^+Vi1@tbl!h#c4HZn~E}+WoQJ` z7*=t8IE#DWzz~njf^ITHZSWhq9!)Y0|7M+1agz}Y*Nj$JoU78&yYPwKk>`YkH8kq8 z#UqCA_un9so%ST*xQS$AWIpZxEbh1;&hzsdA$49;FdRljKmpvVFhkPj4ntTs>XK&l zoiAAj4&z0xujVo9%61l!9H!0(Ra`y=3fM=u<_k`)c1|`e?{L28RcaJ{`MyJw(8$Dm z$e;enx!@??g=TBs5ti>U_WVP;q@Foi6kVk;?M0y~IJ(S^*ckS#ik=)R=U%dB_`xOI zWK6De{3+ii-QiE4Ls0Ol(_H|qf_>4l&Y7v+QbOpVYTYf*^z~Xc)#w) zJ_U|>IzI%T^kVl_=)+14b&=;s6bb3`q!AW zDxzve5?*-y5V9JcDJ8Zi(TTKoSKUr^#r7&OK>yXG6C&s5{i<~8S!MeT$zEvji{WqMc09MeVqG;TLz=vSn(06nF&66m(uewPZ~1?v_`2n<$N8GyiUW= z=-JyPg0UeP4!+OGd276+uw_!{dyQ&3K1r;~k4@RfMfvON7}Q{YwHxC&t*+{n81JWo zb$nmFW!kAUm3kx_C7XP@ZoQoXvl4h1ZdQ&Nslg+t%j;*}HXmOP;^No%+ z9%Ebd%uap6>MzI;DXfO-uO^ z6sCNzCC$%?WtFLmv^kRc+(ty7$lB?2#G(A*mugtOnlVCik5n7VKD3#tbt_Un9@4zT z;dL8mqDXanUDyzBPQ*H^_2=_LNV)0ljBtlL3#USjk$JU!_SCtAySS%&$DM&|=Cb?r zWyka#t08b9<_XM;u8D*@1q2uC2Od#8tdr33j2pe_H4^xKhle5v^CjPQK70oOonL3d zwiO)e3U#WBA4P19-Ltca9m=tStb1E&*Wt9m{weAkdaT*bFQ;I4#tthLV=?r+L973=7pQMbis$Ye$>RH^{T+kOP6nsjn zf+V&w9xL&jafNYJFjdX|py%XA_O*$M!h0RJ1Nm`JYv79*@+O>cq(EqQfdd`3FNSbD zGNpKeNtXsb>H7ay$9YG?we@{`2oW_RdT)v7Er?F^5;cM_NEk$~R~tF=j7h!y(_$)v(`R)owLsOv-ke(a`qqRdzSUAliqn!!A?!_ zn|Wq5)`w-g3IFtOx85Qg(8m-bh6-cb3j(O*5+kQ>tadf;Bs34PFuCkBSKjn$9lPYu zck=#APKQLI2FBET>_CPGKeMSOz9Ciq`Kvqxc*ZL1?(Tum-9sgBeV0Bgydw|RNu1TO z{}Ul5=2LcX%QffT&6%f?3vBW)F0&EZk%fsMC2ET+Gg2is52j$pr?~Iv9gc=&(%V6! zlYybavew>K^Moi}O1W51al5GkBVi^E$JY}*@lnCxa&|t-6NzAPpzI>PXE-^o*U~rM!%EN*O_VpVR@~kt3`{J>t%No|YqxYej zO0viCGEin6%`$?0={ zKA&F3NO#}5a!Lq2eKlz2C!HiDFbic~ao_65uN~@~pj>BhFE0OiK8&m`HkT@B^|R(_ zHVKwapu|@F2DZs+yk*BZQ;UGWxOXxi)fk&E3+)r!EAEjg?h6iK6c0}mcX?-GKdAd* z4w00!rU^DPMG{LTJ7eQeeb8F-52FZWR*R>oIbJ`AZ@xzIGWqshG)XXiG%+;c3P)c#Jf`N-azFI(gr;pp{AO#VusRmzs(7qL}Gr4G}XW) zRohR@?%BI2Y{%GE;}=4E`9b-LoB3&5APfE4<7TfR7w>ul?YL2m<~OV14-;y{yOG2D z_SZJ;|T;R{IsB{cPB_lFHhvsdJ6~YUTP3-EnmnqvEJvMyu z)@*n`JDLVbHU2f!b*hrRrR}9fza0^uzQ;+%n%cLzx>qlu5HeDf&F$9sk(0Mbf1Ll2 z9jbFrFxeet>(FO;O-(GYDPk09AXSx}+wVwPqId-&eiX+TLzmOCTl}@a1CuTD27*cc zGS)J}X<6=x;H|ZoiX+iV7(5OJTPisv=iVgqa;-34{fYRz-3X3NCF{Ff62m@%9W%;p z+H+7WUo%jz$CMq4IZbTxFMY1r&dp5i)>TPQ>Cp13W7^-mvH(Gz$MHjHxdzUpu~GcWFN&sNCaoHJ@l!4cjTv>I$cV zS^Fo4qiw}w*zrilmdKqsVm>quaE1M(YdMZXWA}txuxK=nu$tdHMr`3Pc02ItPmCh= zC+2ixBo{jiS3J$g#jTa?-sVN)(c0xx_~UoMb5GYs24J`q3~UETM=LO#f?;A+>kleH zS|T~M13E>33fq=NGxRvcj4KmziX{S}AP^${4B zMH2n}Q^5FItsyn+km;1|tUql<{<^Cc0SH8+0RoZ#*PrGS-~#!d#JYT` zwZpgW4SM*GT2srNH2z%gEgaS>Xl7hc;_lL85s$#`?%q(cLAq&1;Sq6)#t35$j)Q}d z6ASti|dko61(e$)o$x5}&PU=}9$6208IbIeutd ziJQcCC_HHQ(uHWZ`bRz^`ynmh_1w_%*4ua`v@el}3NPW}HL!h(E_HvrU{SP^JJV9; z6q_djH)Y;hOvfGkmPfJDoFG;tBia5=r%1SSfOK4kZMr;dhhfoYWn%3GI4oWFo<{ z1#O3nM35#QN(ztA5&jzusSCMAvCUd4_ZSkF?jS?~Q_Q_-e^n38d^vp#sV|*?DWM35 z*-f?u>OKZF)wJ@YLT#DApYfq)--b5J)pl>+PV+2#rfwvLCRUmYq8Zez?hg>+UjNQq zQ>yEad-!xyqa_J}3=FAv!1LB?g+IV$1@*3bkqT=HR&_bezs`b!*NfFj*H;{PPy&tn zm8FRZj~s|zu!-}t<;#kqJj~&4nJ8}yiR;J00-hy#9pA`wdxZ91xqNsk@K!rY zGt~kLxF5qS($0}Gqq@8AA4(q3*6j#u9FkhaBrKlDGvdaE9c@5MC$(JjV78c?YVIR2 zyJzt9b}8W0^-B|6o%uq)-kH~yy)P7tu4RS|c%49dw~5jh*(}9zxUFxgW1m2?b;ONG zQp2=dca|1o-DL}1q-$??b)4bAV|9tX(ut&;(ap;Rmv@H3mv){w665Oi#MZ1@*#0O( zTc{&xVYLr;t0~HYvg%>7i8Iv>(bbSAe?8xMS3mnC2Q0`^X5lm4tFIk+o&2lfgPLW# zxVQFV_&e{4pXz;dvg2<_DGr=Cp%{x+KE=`cZwj$EnbBpcm1P)@8H6+KToUB8Ii4+X zI9>+Q#(F`v!LhlA$94Gz_pB+1mT^#!saSba0eQV+8qrjV*I0vNg04u_41p;&5&A%| ztVS|yJ!pP*@JNz+7E?Ply%xSSpVads<3n`m^`g}<2X328iRbH%_`Q;OTBwJ-hk2&QpUdOe+-C+$|A1buHBb4OD?lLotS z2jYvy_VG!bH=BN^Y1`q0@C1*Nsyu{;o+9Pr5qyH`m|=F&6ke{vHjR|)_eO5?h5c-p z!P83fVFz~|GH(0diHI-Nrjs|JpIzZ()ktjcwQ{01F44&`ih8n8$=%Ix%as(7?lJ(z z^qN1lYwD!6oLaSyh=>f<4#*I|_q$Dtzj)__dF+9j0JL$=3O)z#48)0!;NdF(9s7UA z==_%^#Z$nQEItTCde-|4Tv>ZTT)c&aex1(?2{^`S>VZd?fYEa8jF29_i9xF`f~d0&ieI{7-<-f7`og#KoU0xHLWKm5yb>>Fwl~KK)fpFDMri} zQf^;Fai#Z!exL$@VnWVSKHj{LB5@JrRGwF028b#*5Miz}(S=K&r~K37e+TJr)`k5I ziQKKSr@#aG?2w!b^rXyr;NK|8i>h_@PXxc$D@F_NSD^pje+kY{owIwz-wC{-{}BG& mIi8oEUEY6}Ry@PIXt6iYAp}PFuPI6i5(WbKCK8x9p#K0O&3^vUcH9T@WQ)f$i7d~E`JcmaLT=@IHqPIDgGlGdxeKs><(Q85@D`U(lMcFzn`67`PHWLWL)_4WdC!+ z5X!yM`)jA->xHJA!bfaBRP~5Afp(4`2>4Zh`A#r7Lh$%+yj)}&rKkaX z2c5&iBLjG`aDqH`c6#Q*2XS(?guqW(dGCgu5u zW+gJn0rOOnY%vOt4Uc;VK>jr+B7W2j>lQrtBBKxt=T}mWp(hJxGiCbx8 zLL>*D?)zs@f4{qR(}UWpGBk+z<#VQj>b{`v#hhpzrKsn@A9k{>12l)k16T)QDTx}t za^948(^Y-J-mGin(G(=brSJT;f0XB}^ufSxV_>~VM`W+`r?}O9n9GU!wXyDQq+i3` zC^@lP_%b^e{_gxyR2*Lf;QScyNBURi&7VE{C*M>1dar)HLwfO>cRKUJOtu#(2fCUZ zL7#v0)_(Hk1W~8KDiTEIgBRU=hhd1g78*+Q#5pKcT&t4&<@<={Pq9@i8flCDR2zaC zFFT0ec3eLzkBnTpz`58AdD_Rijx4|ys+ogiBg8GJznmU-K?k17uU$& z2S`TUc=Sb!J#K<(AGL;N%ItQI^ROWShZ0<0XydV${&dtEz_0tTe=4%{+zl_Wiub6P zNr~oZRqgFC?SiHkLJ!}@>E~9HWTt3EX6ja9UsSi9r&2xt!q~J(KsPwyWKjo%pUUNw zSeLa>p)GHw+rOQ$N2(?>c(9{$g|9i#dT(FH(0@{iAx!@*Yh1iYcn@l#`61!hhe!L1^Itp5Uzz{MU8a6m$uaN_>7{SJs^+~7)QS(@a^6nP*MK{C;dK*I+3V>*tGS4(_gi?AB}h{Tqt^4`6PywgH-E*Zjl{z9bFp3D2&S*Nwxl& zq~!htt-{v`XTq$bA8$0+ZXHgsPJXz`Rtc9l`dC3EXmryvP(W=cU~-L+ogm4=lpluT zyx@GFrjE^U%#CaNVfYb!d}C>VXeWleYyLfID?xrMvgSgz zHg3qf-j;XYNn{8bdz=r6{?6sHoxS#hOL%xIdU$v@esSq)W9eYY_fzu!Qx0z!8M-9j zC->VbF?%s>dk%C{Of%;O+uBNBRuNlYpJX>9VI^tdEoamL*A>$7@#+c{q(ig>WNr7O zi)&vF@=a{jmgBuA#*nt56jg_<$ft(yf<5B~4~8))JB*ioqnPIbC0+PM>+!cXUC{%> zszK~gbRi*S)H}kS{&|JrE(uIb<@Ou0gwq{5cfS)Fc`R74e{x5Qdw1=5-ppZ=L^R)R z*3yc+qZ||Se)ks7X9xATxjgj43q@R?KKKsip0YKqiWFac@HOG%DE7;Zfi_Lklpf3VU^A=+i$2b@y@?n*2(@ z<2PJ&FkrFZG%v``#4){o@L?yyzeU8ekxDY%;~P)c%65)dT3E zEyn&3@<;pL%EhIMG8VoqtU81J{PNLw4={{hCf+1{+DCEqce&Qc58m#kFV#!AUPkV5 z(ezo-J;X!WUdxYt%LRTbc zFb9c{EUn@B(xgkbXkU|fYEh8X4h7oEFOAl5+2qo`$cN1hj9uB|{C4A$XOo|8Q{Z4q zl;9$1X^a79-N1+I4m+e|H#ur`i3A)yrKvm}+ZC>aZKr)##nv^+HZ)WV23m9MI7F-; zMy&5E-1vwTS(EQuZ(@WMky2=iCEN>Awt8hBJyhwyRF>fF|5%I8$A^1!|3z84cG?<4 z*=a&(!1L!(FEk`R6})eafuE9`H=US6x_&v);0cCo5!lVG*HE_e6Sw-m6*3%K{Pe{> zNmiJ$QBb_{*f@D+iZfV0Sq!axU~RcYXrf=v%vvk^rc@!$naNndwIE_@lfxJ3^gg=x)XTDn?BkywBmr@Vls^`xOMLpSKi*| zA(4^cqsiQe>BQL?w+IPwGy5@L8VG^6J)O9{T@F|_wa;IA$!qDv=Rm(pGO_*5TP@bQ zm}<^aGqk$jc3lI$7_9t-{a`L)8ll%Xz~8Mz>vnXbah=MjCUF7+tDU|OG99nraF|DgGn}m4%Kp{0rl;-#HGZL;%KeE($#5lK53L{jCc zUjFfR8(!$SmOCxf6)n`~`Cn28Q#U72OOjp)H4mMuYPtN9T8dC6;sa~jRef4`sARJBqUXo zQynHCd_8E>NQIi^OJp;j?>u8p{9Kmz{2g1zo2&1&tA6MU6K8nLO1Zerl47?}m)Mq}Sb`@~XAGg|cA$)x0D$`c0ARl#H(o)7Bip}YXTIe!V7ES$X_;BQ5h%cZ zYp*#LzJL9FGNnk8H0>CH6Vd9pTkHttYJlK#Tyj*$V zCva^1V8bnFdIbyl@FSfdweFPU@3*1Y2P|LvE&{i7;L8K`pT{T{8%s-97rvkW{o}o; zQV;14+>3m-bnl2)@ZFp9du~@-@cQA)6-m^l%ZIJyk{+Y=82d0n-oC*I56NAeDvk_bbOS3?$)Pty8xnB_w`Qqn0B zT|c%(EGE9!DTKrYx8irIw?UDl?}H;|2aDu|Ky~t5WxSek{Jq0&x|!@(XiBtO?(+?c zBIAtYRMn}kT(Q;2c_fpP*IoT(bJ;m9#Bl#csp$!ww$M9?7%}2){=7-&;>yCyF8m`l z6k$Tw4l{1v!CrzX>wK}@7bpKUN!aQIX`-GWT9Z0$GgS?ikpX1c^>M&~ll-7@q#Q zTd;PE`>_`HrGhV5;920ue4&Y*Q++#ko`yH(TnvTOc@O2_v4mYI4mA@}xE`szlQiMu z9$rg9snVLbFCfh&wY!}JUA|`5rF8JFobl6?!-omu-gh>;v}{kMJyePDE+mRE6Vgc@ zvolO2&Szj$voozJ?4SxunMrXKx!1Jg73-`h!I-yE!8TcVu98+m{b_&R?XI_8P7GIw zlL%asZn!pWBBkIKA2~QGL+Ii-0*C0SGl?c)w=cf}xVh*g-Y_2YwF zFLYj-Tq3IQ2d;b>pm)4~Bj_uoiL}IpNDNEyl~_90mw}na)6dv02ddQjTM$g|5!ZZa z!q}XLRP5{}JU8L+xlK)9(Z6oEeD0cr*_;hR`0UEpRUL<}uRdlUp)(H{3~Ua0?CmBV z+oFs<-?i$etaa)p9A{>lrs{;Rm?n8ajk5jRjp)LL5;YSCvxJw)2Y71aA8N2a)vzk` zijVL2Dt}>VTpTpaZzPtj-#4FlQ@w%9`)$b@-p=vE4g>pFRI9b$MA+guz}*5wE8VrT zn~|$@DP(W&r0{7q2)4+j1@ZaZ746CYku;pHNk*C(G^A>|NlI`dIklxKi~F(i+uZx{ z2OYG^wjPyMWHWQQgt4(AtdnLMRk8cTZ^Wf@c1I$bwEWmc+?2OzQ-?<%-#$JHy8&s$ zw0y?4w;Y!U@n>TgZp+7F?-gifIx$UuFMNExA}?Cc#(Vs$B5wo3m3iOKGfy(_JgAs7 zet*XCnJK8!!@&Eh_K&VhLjl^>k7v90$wrVa&v{u>7ei6*P9@}Pu*n0ECAj>f+4ZOpQo zZ#k)#$q<&vEQ)asY#rGc-exL--VkUeH#K$LVJqJHG0D&30oPP|8cmewggN*3eNlf~ zkh~N4YRP`(ANR$(|8z!=Pv~_{zC$j5sL)szbM8vo{RRnG2kg zWi`)nnhk$u#8%bwn39^#SdxyP{voDSNng+KHU*Wo)YKapZXH(U#gW^LvkYSlR0~hs zzHbHj=!ifj15O{McD`IN7_){Ky-kVNij?i;T<#9y&I`_-8fWf)@s;_F0Bb>og!@fI zLg5G6HVu&yij~1&i#&t7?`dC^EoVIH;wszKBwi_MVAZFLQ99ywr+ZT3qj?rso+|1E zpG*?JvNI(lnRCwnN`cY3hejY+OCNsEWvQ1`3rFvariIdcUTH2~O zWB9<6^J7eF((A=EvkSCkRxOWcKgoGAwp@?oH9G^rE%AqGBO#YMc`k&@l6OrNz196O z{kGxa#RncCAFVfg0$;Dp;$Q1HzB4n^JKgSjZbtIU!R_!BXz+My#0e$Yi0h(KX?f34 zSx?LD%n7j7wahBH#K-s!#|&Sr8N6RsagFV5IDqO(s-0_Rs-HVP3{?zL^ij5dCK?(^ z@H%pqz=Y{K^L3`{(I|o2fdaP`FT5drbNS7S!5n_NEPgrK(4bJ+(3T;|$O*)`wn7SoVkgU?hup5WyVrT{t(kG+Jl!z2mqpr*NHyPSf4~XYwwOV^cN9`ZI*W zcVhd$A&a_UZ|+V|Nw6AE?NB}UYA}#TBu?z{ zE#>TtwU^4zd9&zANGR--KAPxhUX#2k%y29DifN|X*;(p09=-O71pz;+oi`-hlHnoG z>eU*og$f*YtCCy6i4#v)lRdF7HZ?wKMVadF&$>NJk`Te}1kI`yZ=>(Gv&8MrlBlz% zr%_=MnF~=lu@&luvf%~c#>Z(7X}fRnZR{&`de-j@F+2#<+?hWvBBg?AMC~B8=hm5z z-0yE6^_ZIc5KqnXN_r%!>2jCt#P!EyH~C;vO`^y{Ysb1CThXEIyREL-E0&K|l)Jm* zhLYfk{1P5@5i8YemdXeTHWxduO>df^y)WJG(n3ty_QiMaW-pZjI%!V$V!{8gsRaDTf-Tn@N7p< zZ=R%vMIyMx)x@gtw+>Uu_MJkT4sZ+5k-TA9q;~<&L|gqtg8lrAqZ0hN(`Q!X=c=hP zK+SOiP^+>B9km(4BfZynkZtuR30MblDyXcVk7}CFs>^PR$cNIs#6*7Qe3Q1%d7d(9D0Dvy4c{PUP1yFlp=gumSi%2l%n+MKk1r0IWx;{+QYq-v)gB z2>2R}^K~82xq@(G{7j0P7_Rry)f;W`}L zj0CD1GX}V7@6W0Uu1W-tsTw;>NG?mQnvUbCpU<{mGZwadx>e1A^qy6j_)g&1B?NZW zgrB}iE}Qmd;U%{}x*=>?n_k0#ME9snY%V$GFGKCq{8k}*`!5R17qGRRA-5DMvMxCj zX%JMOvwbNbZNTUdL##-ZMKDM}^O8_no)HprrGwn!(p`dT{OSwU1Z1DWbmWRMbkz%O zbhNl?C>F!qY~^P^O9@KFdKm7>bY`1qT~sGFNesm8K}_6*DT=iwX0+;q|CaiaiRKBUf|SA0jc+l zJTXFw1X#Vz?A<~;%5V91B%Kp6S>k1ef6Scoj9&Z zii0pexuy(r_0na%IBo+fehPES~)s~m|?qaJ)Zv+QG70yvK5?m6!l?G%GnJBisDv>?GQjPT>h6#rT_2TfbZsw=)eqOI2DN& zXtRi&FAU<@22@B*GSbEHDw1T8+{L2_h>&Vyyb;6EL1;nje9f7_*>ukCwT<>Lrx!(Q zn3Y^*hM{_~jqWhlDFuFbuv}{fM7_*Lf0)~gQZ76@UL)1OfeBkJc5QE*M?F4Q-c?15 zt%k{tRPeQdtV0H|dSb4^FdHo?(QA2GNXC_cI2(BZwi?zNmKwIVnTAnLB3~D&6ElsX zTto&J^%66UqdY{uFTP96G>P&S*c{Dzi7i*zI>8%0yYXk@pF7ar zE#XF|)y@o6hog zE0vDC+Y}!5%ECQeQrT*jBrGv=w9z9RN{@kK)B3Om;;fxzF^ksWC3}J2hn!D#E42)! zz^sV**2I0*BunVgyT0`H?)AAdZw_Cdlqt5}eawMK5|0wn(6Dk)JSi%1!i6X8HedL6 zt4c&+<%=Y?`H%yp7io?OUi4~Kto~CEJ zOJ7%&P7<=AMf54+H_6LOUhKp*Fd*1SQaicz3p-_Y@B5|l>cZZr4y||dl<07qcaEM4 z68`{WDIQ(ikN3Aa2wlMZ{e?cS;N7Gnlzev$-(&{T}TnOb8SF>7!qQo(%4|)hp6RO=sw|m6kFrEi1ra~Ns^aiJI zw}*3K^{mSupqH*MPWCx2VvRmkc#5pq3bc3c%wfcR`3l)|^q{t4ruj`{$r5PJEbe%T zKKKKn;|+u0S>o=+RlgO7%H8OgS04=|hcC+<_~gyi<`#Qkl_zs3YlmGq~&I zu^6Glk_?-<4I6_fkxabLGB;uMYmcun$uER~$`P&t1}Y>O{ZYxsp484a7=oFEcf#*1 z+?Kp50pMf+_5%e^wQOZPZdEZdf5qjva8=Cc`8{2|?_r>tuavq| z!xW>Rzqb{`+9`xRUda`IZsM|cZdEZckLPmSzglZ_P)^c~6G)s`!wD2lTr&m)2q(C3 zLJTLAaKg}dubkv5PI%))I8G$vL;+6J8oQKN!H|N&-q-$C^}wNSKhZy`;WZl}cIK69 zsxhxdicytc?Z)aqz$V@J*bCjKuU#!LJ_`71x8)^mUg?3uYfT>OZA?Qi#+Q+#FrHz1BgaFmLxT~T7Jd1;oII5|F&%9l= z<~GWp(eOKqvzZ|Cu0{pn<~V4ycm$^lv4St>BB0kYqc9r zy_5|~sG$}BtgQq%asdQVUOQrsGAoGNl*5c7~cD0Q(e z*YQO|O~=&E8Gl`bmFrAL-^Zt$YWd0YRRffdrKQmWE@QlgB;G4zTI7I@CYcQ01s(fAt$7y-wo zsh7Z+Mf*kQ^@03c?S0NLirz3gxvC7Kf#O`Vf5p6H{?7*V6k&@R0EzauAKT=u`cXUmObJXMF=AOo%r!3X~1XVHF% zcwjPzcz{;tBJL;}C1t?a4je~s#AwFc`}0tm5=bb`D<#jE$f(OW#wg5K#poeOpYh)w zwleGnD%lMy9Hd{_B5nTT#~JPtVuRKUv7zG%z?~@-fKw$TMyTUT2S*3ZpQp<{>0m}G z;Do6Z!v&n&Krx0fwW1{I|LyToy>i(gj%O17;cJD%fBuLdt7Tk|G((no|F`Va{yz&= zJ&-%z|JzjF*db;8f3vc>4bxGy(=e}Wf}ntpKeqIZ1{`R2DCdWd5slX$KUE%1xIs%jW6kM(R2c`Hnku+n{M zxYPKld;Rl_kFMWcKgAyfQin&;wl!xbA1d_snDrYP$m!YkTAgDg*6SsqNjc&B}~9l-|`7;VI2(#Kp+6vUDmSi3vX zpZk?eVxdH_TO~s~K6@T(dY<0s^zx#El7n;t)F-IU6yIWc!TydWA2Ag5Z;zJFjshD> zuH)go_WQ^4rQkoEFN;!*b&-nKgSU=!pZS#P)|x#;Ga+tI4Dm3w2?f6+x!^(n?0WjS zp2^!uCr3~1E2s0TF0=Oav?{Zk#AoGK8K_;mjoF?BGi-YJMOg23?(aZYCLDy^+oG$6 zYCGqvq9eoinxRXPSijTuko2JmhP|!%ohR0L&=jl?YW%oCPaF-e5^h9G`ce0KO{SEE`E zw9errWG-TcYX3Ib8yY3#InKdpq>W4fD0k4jRHT+grW}PBsc$K^(r=-9SA_QWAD|OkWCLX}&!;o+Qb)nYgqS360oFoE))i zDYg8OIKIp2m~*r@(&#~dJGubEAP+6Zpj>=cT|GxnzL%hO+T}+Hb2$09IPMijt8_z# zdP`qV^twICx>9ym8m?mIQMqrUOOHq zm1?KAX0;Y;wH5l^pC4|UTu)Ma9ZkHc1V2>LuD^B}qXfUyqZ~s{ejlY+}WgX?J zRITg;n!(p2)HdN%8j4ox#gUIPh};P?|-~(_JuoI>~VXu{v9*8pxOIT10}8P z4|WX@rpHZzoL<}$UR0zJxr6uR=vZ>U$;G#-!3{Wsw6eY{xY7ydnkjsmt>rBE_K?C; zqlbfYTwTt+r&WPKEdQ)NCL@4On@g1`r~8}SbVPce+i7kflbiC71C5I^s~%uuw>w$I z+)`G`D!uX-H7AQW93(U+dzB)Wi{vFPS2V>5MVmwn+bBHC za;W#6drZ&I)GXINJ?A`Qc_r4}NZ^efRU-=qjP_y6#OeMK-S=J)M?$x>wU}p)S0a z=)PQ4wq9gPRWhTq6-}9`#$Yv+E><8sDORA1m?*ZIQQ%X^c-YQ7El`eU9 z47``wJQJPR^QogeqmYwR?@fN#q5hlVFk-zod11u*Z;HYs%QNaY?aDKBv|U?XE0=Sw z!ZNZrSId|+cIdg7DZo~8S>JtiWI6r5hAFnH>67IhQvoeWGXS3AEKUJhtp!zpwE z3L%A|T4!MtZ^BG*FbIG*$I0MX3sI@&N_Ly$Onnar=)_t@@@gRM_t`8x)^9FlZAQ^8 zq>#^)#-_w}iMhwQXn3{vIjcTJ5W4_E6(^!x!bj6mmne%Q#QJ#*yxlVlD-PEct86wV zk{kyn%VnlBDy?&BP^H#}H2#H|-)Qar^UgJTggi6Xr zkJqv!i57-h;G!Dy`^a@`;*2r>MKl?fwO=mWKT6%-f5bPI}mygJ|(N@!=C|c#H zogB#bGuN)jzn~*m;MJDDJi7H)QVT>afNQ#iVLI{2tK@ZF&H3!-#dPGz#>+XwzTg*R zT&_a^2m=ggt-H{`8P)@FA{G!+_Bk;0GA=f}xR{m#6$lWdS!*D6Y(VVNQXR(qVC6(e z5_kB@VRL!8N)-cu)u6Z6?T0o(tgVwB!Qx^_SJd3ZL^hHH(I+(R_re`+j%w-?vImb( z1aAnoJD$;5Tg#3F63%M+O-LP}x{`L`+yw^g&c-ehPB^LJsp{xB5xC? z?kv40E$r!-uC4AU-tj$_Esl7~`~c;;6-YJKM%ov!rZqUYl(81zZ%iW7ZePW|cPK*P z%leITMwc^!VLJY0(G(RSQCG4d;V`wxU{;^QPDZOIGH-*&mjAud-EUuZX% z3B1WSLX_tkjJ;dCQiW{Hx*I7+RnYQ25bOS8~-|uf$KhNTsFF zU@;ka%p}N}CEw$g83VL4y<%zk5e*OQv=njkF$q4ooH&~i_>ni*i<&d_Q|4nZu{NoC zIH|genSymP#ehduVQ9}p1BQaxu5T?XFoc$rjM;%lT9zm@mqs?L@o;b?o+>;kL+y21 z0%OJ{+2QN|UV`Y2r4}@lNY#OIf!R(U zJD12Tz|0&RRe720R}lnSmri+PheJaRf^g-XAJCQk5j1kesp6-SAae#KQwBTQUtV^Y zS(f~h6XcWym__}Rmon#O#8qZH*?&zJxYwYIW*Ms5Eu{`Dm0Xqj7;Y986_Q|8~<=~KY#G)^W1mXTKU?@^DA|NEsPIyGASD)mDe1s4l^ga!> zkqfmEfn_%Ob%!lG#g;LbJz7VONAE*D@53S(fY%70+xU}BG%uT?%vr~6&Vh<9f;J4t zZT_eOO~{+k60^+s--ShB_dIi=PCz73C}9KVg$&4q49*D|w8(RP#TC>gp-IyxEG9-E znfup@A<)Q3%2G0!cAcQeUj^5?fT9#C#usgC>(ZMTgAIhi052!@UjplA>>Vapg=E}D zZv66!Z&NmbJ^3d-q7oLx`-NFf^})XuSj$g%>&f%3raQftLEVq9n`g?|S1{vB%l-wf zFY*JdT2{?jCFYq#hvR@LBmK-mliS?LCpfiGz@CAI*OBk6XPI$UhmYHkf%t>Eod%j7 zQ^`mW(m`^aOq<(`f+9uM%NaGKEEt#xNJWA=tV1i9oG-p1maQROkzSx?_6<#uT5zS~ zpSZn?FK{6=MS9^TGjIn8>L6v-C9MwbAdB>ivkJXgXUX=-+PX>#5S#U)OvfSk9d8s7-eFMSTb zw(jm!Zq=b?M;7e}1Ozd`jC_eK7r-RhTb8!79qjI=)X|L99d zXSPf#lg>Zf)=w7v=c3_v4fv=@=-bqfCu2=5+TM>J%*!v((oYdw%JJ6oa1$ z6*F$L&YeAkYF$`ajP{5<8A30YEZ$o`@w@AFbHga=M=WaR?C@kUE=Ei4;ZP%2UesGF zsIJBhR&79nSVy*$Yp6UnZ1){}#NYcSi}!hKwworN4Ndu;1Z7Xq29KI@XR8%NYn=Gj z=miX(YHGJ-*6ys!!Ok#aE3RY>cu*8IUzsZT0*U(SGa zKuN=l&%5rvGxz;n5x$2mD|JgJ$1zqfPFl7nEY3c&JDu5z8urM?%0ZSEE7;0Mw5L^| zl4(!|aM~F)LdVU>cw=t$F4*_o%yc~TY-xFJ1>Cwii#?m&bKOZlJjS%Y;IF3J*l$P7 zLy6jE)3y}K4~}%oZW*IQ-{ai^ zUcqMh|Gj?w>&I0;U&8+R`0F2kS~U{esCt2)Fyu&5E-rPi@{H_3{n~j&I=#o9c(KR4 zwl~-wX%yEB?AJlP=nR5B51v=rh#R4}k; zctm4T;)jC1p}faWT(9$bmsqX(N@#8+Cwa~GeF62Q)tmbK+l!grpD!j?lbpkI+q?Qt zFRTmw)1$&Tv~hXy#BKT=p^p9bOFw z*1HkUfUZbFAv@dk`*%9R2OrS13fu_o^GUL zcd4Lfb5+pe9x=?W$Jwhh9&AXX-vV~O9lL>T3&8*eAfTABM(hdN!^0Pojy*j(g<|Gr zF}#?$bcD2hoVl>u>eQuz%(J~HS4n~=*FH0 zrrQ+d(+WldQ=YD2QPz#9-Yx7Y^vI(TV~R7laitMGh8+-bhF(JLVYjNlXf(p(%n7@P z>8^^z?pB>3XU(vQjZNcgZP?DnPCm>bKNLONTH=RZ0)jb<-XXyrmN#Oy)~um)_UPIm zTQGJAdmeqnu(}7uoF#9cn4+fA8_&|Q=Jmjw#|Y?&7?x@|5wCS@3`>9N-+w$S(?|87*k9a7*hpZq)J!Amdt{Sw$e|*ZYfUb;FazlRfzQ2#&z9YUCeWx*_uKpI58|rut zED5C^M{LbC4`Ui~8eG+V<7M6zxZjuQr$u8*CP}h4kC@Dm32W{zQ0~gsmnT2Z`!WRN zZb3^-iHw^wr<$7$TOcAb{Rye_C{o4VEt%!J^ov6DGoti!gwoeM{kCo>`_6XA=~1IQD&j`aq!-fIg}L!ZJKrO55{%v;l=k-MYL|vWP?)m9GB(s z9IwezsQwgEmEGn$xzgEjdHfoFHn} zkQ?MXX!CmqXmhpc@$#whA>{bb#P~%yALzKUFLYc}_>lWw6Orx0-nrK91DF?o`tjGX-uz`OPms3=U~VRo?#QA~xt-8%n*Bx137g?VISYvLUx37LhNS%RPRtdeP+j_mBEYg@r&DRrUlphRR786Z z|8UX}1GxE&3+FCscpEgb*hcIG3Bl38_1l=tsqs07^=CkUpZ_M>Jq{#R7fFXBuowtO znz;S+xVq!|wvhXMV6Ydzxfkn-q?>6Y#&M_iD@k#-0U3ac*>@oNxD3bxiFHS&&a|oG z)V6+6tU5go1b1J^9hYgxeso8Hxo3X#M+L)?sf%r@PLLeHx~{DdPw=}_3`|qlJpm+E zADN1?W|21v2(g$O#M;-;iarq+_PDkC*$d{){`&u#dROVUHP(NF)Map4#Vzda1roz0 z8u9Na{$)<4-;4l>j6{wjfkggfl*SK)!fATE_J6{dSQD)cg%5d!4-bV7am$4x(Hh6V ze}&-|LH%0tvpx2y-?OrkfQXxcM68dj$64F8NTcEG33r2RIYXSBAWi_Can7D?ak$X@ z-85ju|FmL9=0RdfW zlU!_Tm}zVH8TQ=>And5swub)+Bjl(SudOL{sxB?5DlGx>=ux#e1lRx?{u>O~Qyte0 z9oN?!*4O@OTLK8>1w!GH6|gO9VRs!c*A=huh2%JO-soTk}Yi``}U zq?L;|i@wMKb2zq|sLq^k+{Hl5`<-G`7SqJTG{@aMO zEZbDU-jQt2nF{II-0uP{!zuEs6<)~NT>(Uz{IHHM?UPkC7JmcCV;2g$G?~cUqU(Zf z3lp*OMLW6G%z}t4KqsCSvb+8;dvtu*DE0l4CW~Fc<49mK*aj%)J(u=gp`EP5NIn@H z-as*a7^&Z@UEt{`m~nV?t&Rcz(1IMmOnWH`J%a)4Iz#~SJ>qt!0Yu+L@M)TLWG)&_ zyQSdILxT_Z-7o-U+dJsN1+xy1l7YSn-xq@%OhIG8c}AcF7ot2g`YxbK2dJX$mGg=@ zM_fJ)(wgqB)5KbXA0`?&d22QbabsyU#1^B`e$_KF+**3s`Iy~htLlO5hU!_6lq zVkYx`k`3E23tD(3;XO)*cP?9Iv@cSE!yEhr15(mhLf)xz=iQ0o9}*Rs;v4o zT#LgnWtF+zRPf?+89OK6!_bxT5C_xRsbCHlP(m+JUj4z({DS*BxPr0=9rRR%vkpi9 zaAC~h-IFTwr0JMRg+J_duQFeq4qo(-v19mSFtM3n4o^_RB2k|2FDhl7GKK1iG!KNh z$3PmWj&f_|G>PRI`3-MS_O^pw8!*EgYs5Qo@0fatToB*=Qq7-(k@WK_eU=MZyVHqa=N1M zaRfON*Fn_H95Q?|_y_e59p7CP`=8u+wEmLJyl|2t5I?D-mrgD2-nzax_-4Y?g zNx#kW69%6QqX%+k5R#t+C4XjBn%|ji{e}wBG)&x8k*MKCd50WOcABG}pJ-N;$qKMp(UZGnx(^d+Y6x>H(P=1@ z>{A0IXVj=CuLkGkgAxje^D=e4a0VMs=lZ%elaCU0>xB#ta7p0SS%u^9XpOnuTJT~K z5Vd%E$j{}tS!3R{7HnDaCzSppC$$#5Ife3Es%SfS6bF{>QMV5OLVtlL)43ZS&BFi)1;B6sOlP`;Ka)%MqB-sxQFj0U zCNe;n_dtwaL6ujW-f`BMS8vCNKH2BGb8@fcLo=w7#Od9GI&+$x7}4(sTz5PV8CyY> z6i)99>dZX>?8y-h`_Kle1UbEPt}~y&=^g*n>i|_UIlT+3GZ)zf^iCnlTF?suo|%UW zM4EBJ+?wc7^w%gmh-&t~T( zCb!~0);QX;nS7b3`$NcZ_38RKL$40v>-Fk}`@wkwpacbyyi9_Sh|UsSsZYXoi8BJm zUPI0+!1DM;TFTlOmhx>dxl+mLJ#W2j^?r2&C zv+rWRl4&8)C8RJh%AWjt(F;eEt*J+ebd}1B>_`4wKv1)||Bt;lkE?NO|HpUjlr$lv z)V5W`gGwb*5u!*D=g82YBPx+>87kB+O2@Rt(IlKw<~XJ@q>^EisYxg*b|^A*Dr0=t zTKB!~VefrBo##BC&+GU4{=R?sXIXo#YrfWcuj{^=u}yH>J$v}g%%$Zp3Vcz^s1D!h zzqR?OJ8x~q=!na)qra$Rlvh0oZE!8lj4SV1yRx@A~fr75Dzd9Qlf>6`MRJGkU7FN@yTh=aA&Vi z?w6qQJ;P6}Y;Y~h95FPJH{E01zNIp({nq!@+>*3Cw=BsKa`>+R2Va!enKtxQR>~Db z=yzFqpVoLI2>sG#1;cz;8{2-uGo2ok4Yp^Qnmv`%DC_%=h8z>0h}@&Pbi3E@>}g31 zCU3y`7QY_puPrRTi z?VjOUu}prR|3R+D2zQ682d;b!y zrA*m-2Y-5u_$kwN{+v^_=it2vb9lVK8h8%c(?JPrY_RW5xr#Tz+BIgpxOo4p$-i27 zo0*0ehBrZH6C`}R9#f)~ghcygeV9k-xPw2vD@Pf7rrP-6%H5K^7Zpd35)85+`X>``XUl*A{W=iDE->C!Usz>TiD3knAw;q|}eepwH=NaE(`S>k~T z8IJaoQ!@4spIkZuolDkU9yoj3$=mK{hu_R1leI?1>+qfPw+fEBYvN?h&Db5jGia;e zn7b+IRzAJ!?`PO8-|4@l`DGsz$G#N~1Xnh%@Ss`1baoETBO)(Je-Thlre{M>WF{o3 zdQiUgAU>Tdom*Qv7i8CD)4btOz&C&MCeq4bukhl~hGV|KEv9F;bU{8fv#E40IFx7r zHU7rP=?l)c+&=*{VM7O1<}{qGp^VVR1nz*M1KvVFU7(OCQwaKw7a$*~FwKKooCaGA z@(3qV$dQ!|L(4LAvVfIMJ_qgu*)6?tTS)p`A$@{O50naXz*)@#hz5F&GGD+E! zgKWcs1|zLaxJx}FrvpBELJ3lraKa|xPs6~Oqm4{4(1_sJCkk6ZX1W2gc7Vm&U>FK< zuEx~;V9a;!@fMm5FtPkTPX2^Z&V*)ljJO{rJ|TSu8Y=iF z@ttX%tTimJ6r{hu{^<~KmX%r!51|7V>E`eREk(#sc)$k)Uul`F*uphq=ks*yb&h}`GFj1T;17dZDXip)3u>ORk9 zq7cAGD7-?t+uIY~ISK1OxKpw&23M;y`99sh4Lo6#0WPRW@rVF#guQ`-C4+B+j*hX7 z8j6C(b29GfeP1`}V@AQA%@)2pK{meSzH4}wX)nI?uiK{B z$KqzR`%L@ENg3;hPrf(8O}En@{WFv{cW)gSxHaMaz)9fj3gPd+cQ5ZUjey-m8&v)20m?i$hh$JR0}Yo`3~3owh4;AU25M;1h(-85grD ziQcn7XxNI+Q4^X<@s>vTNaB8>g|xp$F?oveE;r4imy3H4oudd7FD9+q(0RfQn`MTU zpoa;1gE<9?7c9B}%#%{P)9I+q@x9CoGMTgmC_tD9!Ue!sXx_5=V1gXAj! zJ4*l;6^1W3sRMXH6 zTI>w)40{*@V#5+&zV&C|CafduR+M*yHqVj7sQ z#=?I1f{U35580T+(~oAxZZCU)hC$SfVL25s;}K-Q2$~(A<~T)5lWm*-IkjRE8(}bR zh>z+3{w;<12%5-)5B_^=ON$?6CW2&!5L=KQhWPDN$k-gdGjOZLG53Hi#UPL_(OqzP z;3?jMX5KCWuC-%ck8 zQl0o6bju-b*#P*`-EhzZhkbymmWDR;hj7-|nt|k@h~x^QVN*U&B#&|405Am41`s$~ zP%`2sdeO{nIk~bSv!T=l0$-=E5qEN$lb5AsKnhdo6h>|ZNcgTSdaaqsxe4@%9I z6B#xKP%M;Qvy`Nbu2wY6X55JH#EAmQ2gAb5M5fuTWAp#Abcg%K za6yPTNnd|}6b-F_26$RzIL>;9eRSVLQ}^1e{c@r?=y&gwad}gM z>a|-xIj{YCtKn5#rqAHk(w`a^%yHR!@UBzipZ;z&V~)1ZIh>gFlUdH0w)oF$_A7Cg zhevdtlXvt?c;KQ|!Q4%7=44Kf-AbH|ttWfE${cjRc*(JKV4pz>(?Ys)_T4X@b1X4y z4*307^m~WGNt`H8v!HX{DT2J}`=3o3|J>f4)5%1E6P|apH9W8pEZS+_vxSvLj?Y`V zbW@6$t=3lB<8}R6y@G4Ev;8-AI-tPO*f;Za=Aj40ONK{nN%hj|rsl@w=s661=rZGE zV$~u}pAi@K81~w&%(04^b1E@wp;=A^$2z#}kU{}5b~-UDz-(IuM>BZkcI95XXK}TE zikN+*t@Nj+`akpv3U8Y}D)@B=hx5?;{>eP61rcFKl|w>KZ5nyvsWHbPC-F?Mnd@V3 z-Vp`;>euO-M@Oo1y1rR3wAy7xZsPSt9F-9l#N5GdikzJhvj=}D{pk&{P(=pfgexKe3yBswm4{b)TUIg(CD5(3*9dr?Y|~)^2g>m8nsUs>ij%I1m3iL=k3_28zce-BQhU7>XaDHFpX@nZ+%!2O0zR)i)=-s|wKP&AsCV^i zfx@h1Gh%hkZyk(Fer{f-r##|9HD{)$*jzg{xz)T_f8p$++J%XO3x2J#xE1X?(|$@) z(fZ-)!7I;kkLC_8Qc~A$H4oI>ao;@m;a+9VvS%(_zHidexQEZptMnE=b6Ny-a>6&s zOKbTp->t)M6>cks=2cr@et`EprN}cVX;WY16$Kl7gY9ow#)aKC*BUdO8)c&rrBYO` zQPAT1%ynFtV$zR(}=oJ*)9zC2i_@J+6550#waYuYX+(6H7uF4X_CDp56&w$iJ zN4vQ+^GAra3QjTz{|GGn1Q?`>?({GP{PHpv)TU-_}LU(U|viVWJC)5{GKCGuKt^ z{M-~cJSslb%Txi{-D$As=Or^<5sS8EDnxk(a2&V?udb`=@r9U4dGL|;vxnNM$`*07 zM^K)=>&ucEZ^$3xh;ZyfRo0WGQ;#T2seVmGj(0h(g*DzYxw8J?muY(lS2$oF#jc6QLGs^Uc)wGkIQ6`}tJd|P?!Q&raUrDjJIh5%bsMUmoj z)tQ$|Q`7VFjw+uBIaS;r1%Sq-m51|}93~gtqsI|1K|+4LH1#Aob14?``TQk~9-Lqo&PFg3(>|D!bBI&DOR?*ryM#x9$hV6VJVP;e zs45@*m8+_^o^TsJ21k5qGA zO={2XMw?>=X@{h`6)dq)*iIe>WOgAA10xkyF_$C`1GP%kXIQ^ShXL)7O0eQ6g`9dN zM=GYskj_7l7$yCCWzKRv&OOc|lUnPvs44-H2ev}yl6st5fl#|(QmA5ZF)1PQ7+ z---6Otm2YkdWR`!Tx_!Wt)p?XpPLuMg8~TR)w_Iqsh?`}y{tdrs4o$$y>ti6OF9@g zX?fD=*uvZ2tT-Fz`si^~i~Q_wS;sxRZ{CN@?;1s~!;|J~E7ROE#y?s=rTdWuQy zA4I4?`M*GQHSo(}X;Ie+za%ofN$nvp5~|1}oRA29yQ2=QROFSZt{#Fy5)u5Q7X@d| zL-5SWoQd;)lad`p6OOzrim2d4%b4I91rG+1oad76@1nHdl>-fpQrO0hNHc5|wlyf( z5y2Gu`c&rTILxuMxt|Om>_tHe-2iVW{}G*ZkfW)jeTXUFq#Z5=T(^S%D(S>^O={6a z9DWWuv@sS|!vK_<2IaK9q+5et$OiZ+KQ1!`IzBeVSmbxYr**;=P=`R+onfYQ<2p+!S_ zFRUn9Z!={U#16nM^@7Ee0&{n*9nZ}JHDXfR136t2{|Al)a~MYg?-0c&AhChl!x{FG zfXNbh`8TOO26zuu^kyFka#kvOgChZPOThtzy(oPopl8zlauFN}2$~p20-7TFNRZ-I z5JcQ(==%gEcV|^}B#732cOOg}rEr{mB$#WfaJ)h3BKt_Nv`LBH93KfTf&(7C6Fw5K z7G)d>{yv>_;G?Oe(=SuL@JOKMR`6dX9Ulo;i!zP`Kcm(kqRt>{YS*hv%>D2TMaV1{0+B|Yg_pEEk%0N zZf`|tUzO(t|J34Scj-8le}i=p5oAU8{}jZ?4D#YV3<>`iD9C@5!d@cV)NuC!X!o5^ z`(1@w0X;lE);IX3IX70f)x1o9;T$sCtLZMhY<`NjFu7<5dSL*l?%def=C=;VsV+}C z0Wbjw39nj^6y=-F8*tmV6hH}I$~gQtYXUjO>N{G^tMnJnEm}+>0M_cKUiogdx%Ee^ z4T%8g_kLbpdzjZ7w?78_}z2|iVK>BW8(s=~{a`;m)p+NOxf$B#9 z2w0{?-DLv;N5Dv^;%IjEKfY3NbeZZ$HXv~6k?Kc)GMr)^DcFmGGjtYlt7gokQ++Z; z6P@a5is;})%a{%xOd??lRdFluuvOUGptOda{e7C0)_|kOZ1Ok+A3YDHPuS?%&)^9s-INztx=gW1ESKs#>`W|8YI_B-Q z{-!#cdzut>`kYUX`i8_8cbb27Qi$-|+ltTm{*B*xs$VXBuT1wrV7zI?=k_k&9*wy) zr}e{>iW(!EzH3IBzJ6=++n9g7xiO~Gtk-86-zFc5t*q1bVaLtBJxBQUmKv_u z`AhH(^Ait(Drzi$j@%|$Q}cargBbwa{lwVodk%e$Fn$r^8?tE(aiy)OIr4Ml z-Jja+6aFkT&%L^ru++x46^HZv4}as`_%yF~b=y?zP&6+vgpjWwpChsw-)`Tn75n?` zb@}+2n%>HkL>mF}hS)PZrX1BJ|4Sx*3rBLRn#pz8P}82kX5dGo22xysGJu2cE{sPf zB!|`y#9mA1YH)h4Tjh+(6%Ky$K89#razp`0Q4@PV;`GT`J(88fwX0g2Pu7C> zR8Bdu*BNRrB@VTf7s_W+)Fwa;7R~}mf#QjrsDiwS1UTRucitDyAk6Cok8? zXT?9Yw`+VIqaXLj-Bs)EMs@$nQ;g*1yS6l$t?L_@YoxK%*z>*N{2_%$j5PEDt&Ch( z?Qht!ev|jk%{>RYUCS4aDqTEr&Ku|AKB|>@8+Bbm8l5*yoO9c`ZflPx&bciU?#_z- z-Kf)+9=Dwvw(bNYpZi|n#&p%1WVFDtbfwdyC(g4tJT#Iz@zHJP>jn+0jeIp$chyq5 zWVSJGyiwZ1{jau$=504!Hwev2oOu4W^Ie06FeCe~(>JOp_v7)ll%I~PI~!MbMx_Vm zlG&Cx#q!m?%Xt&ac(GNy*h=0s?#D}3ye`w8`A&=I?HbWLIHI?AgoAGFm(tbqLIUj6 z7inb#Y85TfDhkp%sI+GMv)?(xdCF(vN~lG-mwtagElN)-=220=qoRS=X4_}=`G{jDtf zDLM92j@$1W_s$ium{iVNSjNk$;$;CAjX!2x9 zNCp8lvw|aL0cPIUs-cZ%mGfqn@pe`5b^*G_d>n`5-Rn$T#p$^EvvKujRCac~bZ_-M z^Wi+^;7{Eym9HM?uqAE+Cp(JZ?mId(&i+wD8> zZta+xU)`g}JEb?DNNGM%-F)I=bJW?(AKI<{bW$}nh`(91=;rv``hH;a4j6R+qgk7K z{KQKiq*b>o?%hppidxMF%iDeXAAH}H9vwf=k2LX z=><|58?)@!SMe?bJ9k{8^Hex?qsk&JVCJD!S*f%oMvUbl9voq1Q6%H`2Mhmm8aJ}L@+RJ5|HsO=Hg_s^gJD2Ae}wiBssCmy$*$ZKK zv>6c(Tq7O?M?CP3;J^Mela%Y<9(ypW%K%b!D>2>HyP{R!7x1re5rxmr#yvX|7n3;; z>7?lQwvd#zkm|OOi)|q%dQ3r%G_suMR>s>}#oJoR)7%w(2(c3Ps3`DJ(Xy(d_m7GS zr=LJ^uWnkzNY{vw!4V_9BSy~ZvI|K^f05RKK&|Ubw5|tfskjtIlfjJnV^UGforjRF zwL8mRKgVAGxV`?6P6{N|WvAmX)qKWJAGd|%wT1lAV?El|bCFg~pjPD)t;!%R9hb3$ zs59F_Qrkj)IFS$od*Xh1D~=;fq|Umj?tD{ScvIakgPcjCtF!DqbL>5j+j|b_6f%5v zR9CHXUT_&NyNZ`x$ur%hn42=h0lEZ(Km||NUPvWXr{i9njeBt>E-sUkJwR>RvpV;P z)vgh%gCkaZN35RJrFPLtkT!T{;wo7a-@kRzb`M+a8n!w(Y_)gT>IbT4zxC^`yzN`R z1gHAC;q`Ur>g&Sl>wHZ{evWhQGVOcU8yU^-QkvgYH@~~s{O*Lde*1XiP6s15O4y5R z1;1A;ALH13(C%WEon4Nd-Elj+*Gf*`yG~MQ+&e7dC!Y5V-k!OAvj~ zElWe4Qb4}u{j_Jc(8DRkic0)0!kdBF_7gqq(7p*1Z!X;5wDmMSV!h>b>h`U+rSB(Rp8gJ5&q%A%z=`MII9K*j zbt#Nl%@0{K*3MI}!P>}v)&3V-THd+zgIQ;_)$}r+XPJa=Df#ey_n$7;#@%&@`)m|B zA@Y6S{PwGFectx!l;BWWsr9wyRP0=ZMY-F55?D>YQ8&52$|Qc^{&=6mb)|86k1Z(|6%ClYp<= zi&~vDo9#=T<9)(c7%T7H>X^3gy_05TUmNiUXQPtCeZyns3PBEWyZ6y3?$tJZNyPr` zTT_*;yDBy+Z5boT{U#P(y8iZhQvQ(KjPJiG72X{);PF0Vk^UA3L9XHr;bo^3)x`Fw z{#W=z`Yr0TWvn1q`G)YCQ&N2H-2;vJ5uFb9Ozn}7;qI*I(a&buCud7vm1$QOcUp9P zK%68%KcQ%avu5b%(kZhP%ZJU4YD_XP-mbsJQIOmHhOpErC9v+mqGD5r+nrB3Z@p${ z=KGvowo*_-56g# zZ(L))Tz>1p308(T>V7r8ZZ-GH6~PI9>&yI~UzU{dw@U&X6N-9H+PYxZ#tn}h?iLK5 z=5M$|5-=s9XgD5x3kF?m4gnex^s^@mhMaO7@>)5(v$s$$LXx1r#YK>7dgG5<-Tyez z=VkxZof=mfCQAbR5{iDqzn@w-cv|EZ7wa1(4~*l2cIX!m>89r5=rGZ|v+mfT=_Qji zJxpxwY1_1p(KcJ$O#zIJ(@2h4laTR#l4d3NpYM>hX@kt8)z%%^#u)yXckOF}&FA9@ zhvUEYY`+@$wM{2K@=}$~y;kSF+t&8upVnP}FYEF>u~FRMZTbTv)+Z}QL_K+7l>3v* zNN1jnUYI1Lemi%;HmmOUIjvSY`@&OH9vV5#-=?2!FWA?#ec@%jed*7;l>6-4Fq|(R>9B@=&(V}dJ_D-Wd896-zlg9}5z3sN{LPGAeIt9V2%lTpDz4X>fLRzA*t-@-RGjkoG=87atpDi)?Yr3BndTx4N>;D*B!ami}n4_owK zhV73Zu=daZuHaqYCg(mjdP^iBXSQ>PZ?o#=WnBYtOZ}?hC|x#?h`dV zbkR?*M*Hzi`ML)!t*(jd^o*QR(uBF4os}hM=(4!3i`391aouOb>(*d>h3~GLY+RK~ zCv2UlW8>*1d9ctQ)JnYY?74dY_o1QF{7w4VLj{XZS$5TVw|A;2=6m?Klj0JwVcg(N z`c;7DPG7HUKey5q_q5UTkc4<`pPveLj`|*Y8T|Z^p;N}M`q}>?ey(~WO5d2fBKBGj z8_yZUHr*2xY@C%F)wc{3GOyy2Mcd_D<-iC2Oe4_;}Ly| zp~|<=P_?LN#rUm3fMmtR%C`b7M0x_NMdG@{{jLv(I2aTSAEGQ-ufIiGkn1L12K5ttHHu)iyC8QmIiySubra-H6u*c3U*6lk z0ElkAD5KjrO^?ntdw}SQ&0Lis7b-S-eI+4lMbDA}7hg;L9D)NZL|Ou?(ZD46*DV3N zHdaWJ29khKQBlR%t^PnP-M=li1}^6pqrXK%kZVnDqhY*Uq+YJ8rz;6rKrFbvk2ArV zskrVuv7G7%k+@L9_z>SIBU(SZi@**Tb7Bbh24Rg#HlEs&)liRh$_WH(odxF&#h>a| zC`+a<<*T_R_$H_bta;*waQ=%*bCYz_eIrDjR;@@MtG#7mdV`zQ?f8RgF99XtT$>w; zHht72p+iM~1|@5|>)h)jj!qp_k{&GVN zHE7+j`{Pe02VBrzLXWs=H!Vzm<`#MjEI$O;lVU>MJ;wvdFVAax!AT0x5Q{S7gDp#z zn}k1iEbpX<7IM-ao>o{f=8i8A8X|v(aHr^$`#3ibRhu}V1{XlVNLOWxad)nDw(&BO z=tI_90qc3f-Nx&8Z|N#HKTd1|mDs4^R|qW8SYVwXZkTNN!W^jP5MUkn$yV{hk%k9e zZQNZ1tZuuh*nF!9U!SaMoM z-0o~1F^zI|eZhHw*aq4hNr;}ndXc!{aK9HYERux$B7V5B-+{rgyUPF}nNJ)n4vY}( zI4wF=0{B(4IY9H9Fz(L8E;e3+B)bWI0fwjRtZLJzza;cG(Q@cecGx{Pi^_(Ny8{Dl zvjfRlH?Ul1v|KS4u(1KM@sfYwNDSJyegnydQOxdab%7h?RtLu{HNkmP@i~S(RRz`q z#0@F@7Zx-dJn_TT`~$CqyNelY3=y6B!@;dm(I$~*L*Q`dnu3j&io}y4LUN0Ga;+n1RFs&n#jvgr(j zx*k!}WQIfSC~-q0-ycS@V}uo0iyuDV9|(%s4Q=i06Ng?P=AYyHKa1X-ttN;CyHtg9 zZ|r{J;AS!Q&NU?)FKvlB+@w_*3SZ2%>7ykHwHKAOI2g(uQ!(ZWkayG5GAmPaGJ|-(IDSrT@br5CZ_kVSr-c?rar73eQ<$UG304r}o1~Hgzv5;zbdox`Euq zweixDSlNrjO|6;Q{YHcuvbO!4F}F)_gCht?G|8b zj=_|e=^;7Xa%CC&{A>&ZCtgC1#=^)gcW~yUDmt=n^Zzx3_rfrtMeTam|GW6pExFC&5 zgu5BmI#mw$2jp-cLxvgJT-!P{bVo-ax79 zik0(QSp&B1*pRGk*)oRC@x%*&Dd=v;))n)MmT&+^$ciEO$kV$<+X!->0V++$mOuE1n8_t~_;$qSzWnfBt zY1%-T=0ThRN9u$DHy5Tixt*p*tX)s1#&5MP83qKnl;1;F0oC&b8j_2@s-dM8c@c<;^-Y??9Yq2OeV?~&kmVuA~W#<5l`{1 z2E*rC99UR9fhVqDFPO@nmqs1HX@WaCL?&)}{pJ10yA?eIc>qUfEy*G~QE{t-DGYw@ zrxp;wbU063AI?t%;rh+NheQ%%a~fY=I%dHMHvcV$Pt~?mI!T0{z~!;n!z<#eqkW3N z!IH72op=~9yFWu#fL*TXvmCIW_4T=@LwO*NE_nd*u34wK=n z@$O)Mw@B|#hAcaEmE~gq9rDAuCW4TPNi4&I^U#Hu-gd(gH{wP|djQ&#O00hu?ry; z@%o-C*e(WtDJ}JX$O2Fr+wtDeNg1ag(`p9`aN=f~woWiV8R0r~>`@ybl3~7&^HW~6 z1DgqOnU!WD0-t3WdH}zZ(Sr)u0v%HbJ?KR6x49{K9vt57T&MgLI_kAKTy_lnW;yxK zz39*jgY++2##2r=?Co~ZNK$Lyj_m?YjJwq1n{Gdq@0)St0;~F_yZ9XL)5|8ew=rd+ zaPGECJ*zK@Oz8LY{MS=X3Wq6-MvS=pzwszQ)zfR0aEIhUR*1&7F za$fHtxreknx%Rm2*xs6N8EN6` z5gagaFuKc;W`oe4WAV2R4If5%0-ASb0Lzr1x!TZ2e;`e?t3Jz=jG&Y>S*C>Os4G>q z$qhBcHjTzqrZ`rwCvLL9;6-CB=NN#SUpWCUeb|S)*CPK4W58`@9rU5{Y z3^>5bjUXO$8N|PLTT!&ZdqV7PwG+H}L*Y6@1O_5}7meWk9EJrzMfVF)!LuZ_$_Z>T zFkpz{5yGJ1`Y=h5wtE&aAoN3-ne+vSoC91D#ZuCpA3)ygl)KyH3XQRdezY9I#|Wo~ zKze^VML?fl0*tLYog$#wlY2relL`%Tra>%RinNggX$k0#Oi01xT zmA31u^guU9F9$Q_?Q=gztN|xEfEWRk93gu7HP+t_<{r=*IjSV zcpB^0!^+)CJJZ%3X4sGGj(y5_y31{+mAkd}l2z$Tz>4!WxUC16S?YjCw;iviy(E4L zr)_l$4M;DW68bnko6g{Wfq}O=WI1xsMUK2M0>)5CN2djn zP#?q0`pS}_B1;CHwXt&7(HW2AhzW@S*b^EL_$)+b$5oePt%pLy7-~u*pS!pW^SN`6 z#4iEbkGD{#^DJo@3_uK9)E$Hup;Xmn#$Icp=xi4X9MhCY25Fd zMKO^R(J2QDdj+^_XWsz_4my_EHa5b`54xjaaclY+2t+HGzhnSu*zsQ!*c!gMOkjH0 zrXbGMVz8Z=0svIkYxgBNe64kqVGACk7>@3AdzX0V#~I43L6z)L$z?u$*?Z(R8V461 z_hrfCPR!BqnkTnHYz14^pZr&%n4=jGg~SvyAT#Vxjg5|P4j-{(Ek?m(j4=AM2LU57 z+}LZy3gQ6$<7tn<^UYIb;_!pTxk@&U8puW+`jH3g`7wIhg_RQAbKtef8f0BS1yr*u zPyBc_Kj)RO8b$yJ(t+1y`hHyAsk~x#$nV;&DFN2nLsz9QfXNx4dpRpuur@T0BaFLo zc_)ApEmKSA7nr_yz@s;gRRFRsh=u^QZ<*tT>95>EY3$q7H8eGT zk8O!1g?+EKaxc>bkO88+J*@s#!`;C(5@9vKKQHjaOTbx%M!GJ%cL)YRBuvX56w)<< zCvFPo=fDUIkS;TH(Rss=23V80a5JRQ2i(;A6AHjm10WXh3jIu24c-D$!I37IPR)4R z5%f(GOE#5OQ&p=&Fgy$Z@axX*Z$o0(DzK^bu~j_&t)SV}Q2cl!KWA`sbyjDf8Git& zmN>A+F4XPqCeYI`j;`L)S#ZHnyyRCPhVc8dL!`(0qziMoB@UUtcN-h*p>)o*8<5O4 zz8VOrlgArHS7&z?q#8O)-UtzIe}5=@4=^SFv{XmY1;z$<0am<2_+K0QFwUau2Xrts z6gU0K&lwc$_+~WDPXC3WMj(`_+xR2m`KxG=?BR`tuKKsfGCDVZS$eZQ;oP(ve1Y0| zdeMx|2?Hjlbf&;9MEHnb`GM)KK8G7_@6KXR1$AYjCszt>^e7780_WkVcx?C#{{Tl( zRnM`(J;s(o7_799jq_4)J4ME@#n3rvV{X)PD{v8TRyx8{F>T2Szal?X?N!cpb|w(zoCV50{vvy|DT!8;B3C9ZS4&mRofn`(~ojIj?S#Czv=_-a7^jY7y^a~U)%<$Q_Gz=ADy2F%kB%VgE}EwV)egn?M)dLId~1-^aw6SBiXUJ zKr)fy;s;|aE>Jz06c;}lV{ma?mJ1((i;13>htuu>2NOfKFuAyduG}mx+MzDM&zM$> z#ttVO2e26BE?*$t_f!AA%MVMcD0Bb8L?4L7b{334Ui|@H&LL`oj;Vxkqp~x6cP4^6 zyw(F`0s-1 zty1E%Y)h<&$LL!P8j^n9B!P~i>pjQrIgWBUs74EJblfyx&TYp!w;m9&hOfrs{*x!_ zjcU%Z%v`R7?oo*Y&fj*toAweGuMy>=JlFD2We=q=Sk6P1j&&cqXQEP=XE%v1R2EUq z*G;l)f(X?Im4kD8i*mE5bF&q}Jfn1s;vFL0pkj*%*;9?8?Xo*J!}=glC`J^D zGB%;^*qxhm4aJtwBH)#OUH;~-qdG8yKI$ah+!uZ z)l0l)hdtN0VcE*yRdYKOKUP$dr)sCq&12EGPdaO5QgC~9#&cDkl9V=VS-}XvqN0yGU*cc*@ zjoI?pfX*Y$2CH_AU}G0#gT7!xsi5V+H9X`CswN}k2REjx$!G%UYBI#gR7N!!PfRkx zs3r^Jllp*IHd#$Z>q8Z8f~(0$eO!l7mb@|goDJ26rpX^#rcJ9O2^<;Q=u;%r&|eIJ z!ZG4rN-_Zt=o%wLSB8GHA59t1FjzSDwlW2L4^LK!VN&vaf&g0fJ8@|PCd7kh&Tk|% z<_O;np%FneFM`0vP>mV;*BR_zd(($lydVS92UfHV!eeq|FrLH=NUKLgW8mTdO$bKO zB!tl;irq-ajHwKaEijjp73oU)V2(Mpr4Q!NzM(|(IyQt0*cg;ygsd67$6?-=%As}} z2^ZRJLC!ZH0PQ=gw1)MRgt{oS@ zF}Pnx0)I^I$FM>QGKLNfy;(z}X;@V+P!Th#!Gs|TN{zzA7<{XzH=GRiRSV z-+qPmjAv=Gc5J-K9IKK=1G=nA$5rDwq3QeL(~}22jxVJy*?;@m{lioZq6EB4JHf(r zSm=}U-og8SXv{=bU_0oTQ`zd^4TIPu+RU&77t0;0?UjdK>zVc4!^*^3h4Mc~Jb1u-s$=h?^-+~J`sUc_?=wLT+n zGqyzN#S?IX09ej&kN^;T24DA=J`-L92?f5iK(tRrT@Wj4pP?+p|8a0rkAz5D)oMPr z(+rO^0ILlj!djDomf>wWJj4ZX*`I8)hvihKJ8fsV0xq!%>!T%EVK1r#xp!3sfS@4i z#}NDlfH+A@fkd=iSbW&hm^NnZpA2mTI1b8_f1ftu6vfaGf(xY_3IJ9%%R%{%8B6YO z5OjvHdMx*UGDLpXMaLfs5o6et7lnv1tm4R+;}=og08>4n0!{}#m@;|$c2V%W<;8D4 z%?^w;8R!}2gMpsmpu#}Uu*w+d8Fn*JnfBD00Ozn9$R!zi>`h zP@VXd?RXS!Mww1Vvs;K2QIcqiORo z2Z8!fAtzP3!w)piZxh9Q8O2&5w86!O$SLoynU+y3Q!cibdCE793A_>Yh25vtu}eb zBP7B#AkTpc+!63<{Bo@qsxxZ_MSd^B`8B9U?ZXNJGAH?jx934XIt zNc#kC-^=YqOX2N%B%Q&VAc$S%61GmhVw zXfTIQMm6}`%Lr|$gkSZB@qGw>H-PnAq^wE}$RM$?x1XCq46P3I<56TaAZe0+HC9hQ zRYRG=J&NfEEoiuC3vL2c?2XB*XWJh7CB}jXlXro{;W8MKiA=}@ewZd{gCA3qFdgL? ziBRq^O2U_7(uIDs9+@N{4|ogNAxF(%{tYf^jAqc}8KD{2r<|ds5S515AgpA)(HIT@zw@R_zDUK|Vr7#jbl?=L5R6P!E5PXSmRVFrs^Uju zELCL7vAZ9QF;w9ttBMOG!MOl4qD*!bFeqk;7Zd>e9Gp?m1=Yixldz4ptd8WX)YjtC+L=vt2C!^dye8XPl{1I}x^ z!WZe9DJ- zLDo=#)w8N}VX~}3A7sW(O7pc&^F5#D3mqj7p=wFxx(k0ejrjJGJq-b9?A6wiS3UF8 zJLZq?m_tj)MP^B^{z<|9Nl+GjNn&qhSx(8ZgrIzm8A&XI3Y@Y}HK-Risl!a%gz&SX z^gAa~?wqK;a{~B&^(7?!A&u%semISQ%GlG;$C&KZaQ)aUSN~bT{<9#l7(F|hWjQ3r z5+UHYI&Ef|?yf3bn7?g74LIroLI02f)O?4h^{c+q6|6-9WnIg4(;L)*dZ7`#aDgyn z?7ll)UHv=fSVBac#MqQp#0HESpPSYXvZ;&M{I^3S6&tfG*H`JnT%LxLG-D~*N!aS> zNy+r2{Z+a!^QIkw;N|$~{^BglzaAor$@(3#^efXXZBmD)HlnsmRIYonLA_yREIci$ zpn6&7M)ilGv7xr(p&jC4GJ18Y;>T#e`#)fk%H9&CY4-B)G{;`* z%Fu97^A3KvwMrLeU)x{K9?ccSYp#eb3ypoYG8U%BJNL)f-`xGJp=5koomE<0Zdx6T zMWerjp;hVL=u(`deOU7tL9JJh>WvQQI35&W{U0FPP*$nXcW=P7N zkm@@j(8Mr8HqzC9WU&88$OLG3f_lv`eyB-0svAw73OMws0WKJX;7>5&@{jL?K!hZQcod5|mDwuQ?WMg! z(YAIumav3-RsQKt!ww96>F&SU)qi!c|7y6yI#f^k?x5wxEK6!0!s}O;>w1^z?y1s+ znfn6qg|%Iy`tb(!yG`ma!#@V~q>|VHMHzSArQCT}edit21gxav zyG_RW3gCXU9yYdE&5wH})Q5+F!P$3y-Qm|;BGd<^TL9OG1?Cr?HXa2RVb*IkC`1Dv zYVD6-XjvjKnFHUYVIi6a3;yOqG)nT~x9?lZ{xJehe1hB~0UUtM0UY}nKW%}sdQH$i0lu+~z)vWkJRX$H|4dN3)OvWmrdl3&bl%iB}#Dn}=_dgrE z)$sER@R=WjFMBe6|Cfd^C{CG6IEe={P3WJE-Ka)y?F@p~%JT3}h6?gPH79E9LE3x- z>;wQoZ3Ywn=~y98d`w$GXOXKTsBawr`iv0f8DlRp2WQcDOAQ3zAL=v$40Im)=+dRG zW|XA12E-h~4Z%l~NiXjuHjW+_d^sN#^+E%OE0koKZCJZr|229@fhs^#OA;@S9;ewx z^e;iH?ss$aELdxRzH%aYf-|WeW|YZ6IE?6F7UBayGScV>kPLJ-V=jQc{i+3c6ue-Q z4hBEO(h2doPF^~p&;9jKoPKpB_%Ith&;mC>9n7M>jKZI{$R8p)n0;75eA7z&@<(Ih z!nFore5YqZeNYbyb2KClK_VR(V=w^|w<+Y6wiEQJ7m%rdDJaw-t-5j;3B*9hhGz=3 z+~Y)v7eNTjv(kk8V2mXv)cQ<8N&@hf{8wY-%^3tIq668RS4kw&4MP~JU8}C_r;=|p zky1A~$m9Z^Hl((7*mdMlv9PH251#w?z z>B0_h0e;3ZioYBqaIzRGC&1k8vV#10m$WGKMYKOD zb<9bAc~0A&ZfBMepK_-bv{_@+i&2ez81-UQ%O=!VjBGMRbq^vtnz5QpEr*9*s=kS6 zY=l~*S#j~IMJN45fEm8Fp_s!(e&oQ!sZYyjSwQHwMl{iF^)`9K}g!sy3T z$QfL&Ug*bvGmhx$0NFrwYV;!jWCONLE2axlpfNF9jbU3tt;VF;fKapy8?3T4k`35v z3{=+@!|c=0qZvgC!oH-Nml0@MDZ4A# zaqtl4BJbC$q*|ZRFA&fs10fKI0R=|4F!#4ld_KXGb`y}KQp!uK*eJG z4BXbBcmLH8JG!A+a)xld9AW;*4hgi3tpj=e%=XIRUS2;lx@Hu5q7^KJ?9fn}Y+pPI zF9Q$BFl51cCjuN}caWpLz+`v{_4OvRxg7zSv3Ql+&kTIuCDo8{RmX-H*FDmsUK8Iww;?)wsc_PG5y;229B=Sm4XVP9~Azq3q63@axC3ZZZ=Qa0aq3c=AA9 z=N6sybGyB36RWKjTyO+Ys7B3Gp}RNYpLTSJ0L~b#v0l)5o5{lgsZL%U?`PKiTxR6W zd2Ie){_J1aaD1C|Lo;pAEhx4>)z}B-tuWCF@!0!RU!cD=Q~-*>Oj%}+zPdcimmPzz z*NhfNR8C-!)+PdLm zsWx&DoJtrF9SJ@RkEEI@qLyT?K3%@w2aU?;Fh#U4`{_eB0<|G+9IjxxcF=1h$-KT) zL?gSGwRIDm*oIpVk=@I_oR8k&*O}@!1Anf(wxJ|m#JXpL?qv;*R~puOiB!mrK?vP@ z=@RF*zPdcVm+R@2_{(Vn!PVOm)=h2rPm*_69g#Y-eHrl$7ZWJ&isFS`%E1P8&W$4tP~=8&7clspe8K|l*&o9G$TvRSS`&i5j9$5n;v-U0ySj#%O_oO zTSldsI@$LO)T4FH=?DLa0qV$u+LtkE#Q`KDZwNdYQH5qC8A%XdXF)XE+TOV=~%lk%eQ)Gp^60JORzaAQ@?g@V-6WfYn*=uNsrl zX&bVI7GuYrI%pvT%_X zIzW=9^@HU|FdTX_M6{(EeUXc?8h!osG+ccRnIfyXm`$>lVQ7@07KlHCJ&C$9l2d&- zoc?Gzy3yB2HXh4pXhxJWkuLPt({Q0R6bAt+vs-^bC>yE@UXsYga)~`z?c%5&WDHJ! zv>bV~0O1JzNf7FbV^%{mST1&h*)xq%v;{f!1Y(mKf`~F2f~OkIf?bT%jgXLluQRR-6b z{OgIV1~gy3oO!o60R8o7t1WN?HL0b!;+-4H|}jCuT>cxO97^a05lAZF**Q6;5Ti$ ze^ZW}X;fE##x(qCCS$e#W~(y#K8+=TF)&6uAfm7gTtXRQl{XEy?`KRS3d?~1(+#y4 z5EvHh7rJa4lYvXkKu{(HE4Njd><>Sc%C;NpXh$<#DZ%KeWhtle8LlItTjc%6t;*<& z9M$y<|8WZ1`rk|;t2!7q{Lfl~k#)Jap%gCAVhFp#t;)zcWzuVi!ZEg~{MQ?r{r9MU zN`8Jx2w(g?a{i05SE?(2t_&N!;cAq7kNhuhcQ4;iRIp^){((yUopnd#Zl0@~LE)K!*l3jKdXoe16gS?p?PPt- ztH|)3qeM=j{B2c2yM+MFe!ZYr#iQNuk$O5etXfkt%vK~`U^dsHvUpdV%)Aj_CY;uF z1Yc(xi07~5Z!cD|QhE7Ry`wsrJ0? zL2ej>F7LCT!eg%m`^R;l|9E?)Q@PNN=CuDsqSx6W*3Z?l$7^~zrH-YAbg_1nq+kV$ zV!4xQ59f^1TEXA;(t(%54ZEdjEU1{9rj>o1-{`=jMFJ-E^&G*KotG+PiM;XH9hJ)4 z4lEtE&NNw`R}seI_lUwm2hCd!OoH|1DNEQQ?&u_ba5U1EA5gM6FovI(t{9!WFm|7& z-$qT=*kd!j(2}k?t{>6^y&dQ7gFLlt8sKGhbwY7oK(bCrua|&)kM{HlIzyM0tTcP{ ze8TBYpFa%t&yLJ*X029%ls_`Gq?^u$2=^rL%UOu}u{s-a2R`0ZdU4~~0yM?>{J^Ud z>b-x0EA@hgHojy+f7A1CCR7qry5tbu0Nr zz`#9JZbj)Q39VyZI>c59)uHPdm~#d5l%bR92CG;=!&p&({Q^t1LIGTp*^?^reLls! z0$#ureq;q<@w)V46+S>o!OD#evGkU$9>DUTMfDpc!i2R$ANbjSnhJyae^CyK3Hdo% zSH!ivw~!$X+SBn;s+7%P>2$y4;7NEowa`Bz^@SYHZ+L!RS3lN3%pgroh7eOK2w|!Mi3|M;6S5pfvu3XbH;$Ui4vxJKI2s%jiqI(hA|?pxXiAB&s_ zqUArO)B;Uouh5rng=srGzBu|+KNKm@0o1qyFy&JZ4@?~6WmEU{nwU$`?H%s zdtG@6sUe|(^ZA1>cU->fBrd$`1fvw>a-K?p>G_sPbuYkQ4R~Qhub`^aEvF6?pfMcd zfpGsO<+Y{3%FkgWCG86C<@$O5V|8)imr;~uy>=*_uxWJQ2rl#Y*Q-Ix<<&mdQBWiN z<=U_j;A7Zs9_cMM&kqLQ#aslXK}1Lc<|St_ zBl4HGU_KzVv;G|TeB#}ut>=D~hwrvgA(0v@x8m^Ky6<1CpYB691C+ z?jLR-JB=X@quT`UOb+(T;lN4`2c>d2NFk-m;J{gy1N=({Y19Va9XI1>K@mqgw4B9m z${{0JmW+WU83Ldiyg`N>{q2;)y@iY!QNN@~!y7D9c~a?)tpToP3w9*WBQO*!0G6f6 zwyfb`eekPcD9;j6Wf@eA5LCo5Ov@9nuqu4M=-iXu>ev@H2Z80>mZ~$o{4d8eFM`&* zv_TWwf~z!fe1hHq^~YTb`lpW&Q5mZe2-sjXs4t_k3EF_MSXq<9^SB&ck!`z%BqnH~ zbE8AnONXo~;jL}HFe}5jRKZTv`9iHSR~y_rx25~>4?b1U-$ z$|lV946WX@HLTkbVJ8@CLtdsEnRfY*Zf=%7^aRRc(WYINxu4g`B&P6#V{{WtCogk9 zr}G;e(SSdi7U~|qDLbNMIQ$XHIHq34)-ixkUnoT!Q37~h ztp9u=|4j=(a#}}-CK-r(7>Gk{MK;ik8kX{jR6Qe<59I-U{s4~1Q%ZzWa=6JwK$2-( zDplZVFQTYahgY+i2f8Q{n!>Y8=v<8nQKE7TT)hmgPUVUTDi)75{oJ6*eC{JAP8KA& z(6j)#$*-33cZ?DZ8YOC2$zKjNUxu>f* zE5K&iYX?J}cghJUhY_|g1s)&^z+WTk_0@7Tc3U*K26QQ_*mQxoz2P0+e>(Hr!z{RE z6TEXl$3dICs7&$6%dId=hvy5tPtb==AaJ0&AN$v)#6=I9G2%nW^pZeuJl=$y8ru#M zh_#GB9z0ejVkqGdXr)z_<|xz>{(zQxe7gW090>14Yq^o<3x*Cx$}aYl<-BMumWQLI zG-b%@%<=@Nlx{MbGd!=G#E3mmgcCw#Nq@O;9y($Z29I?2P?npMsX}RW8p}}SEJM|H z8LHA*aR?D5tC>bwnkr;zIxI_5HF^FcV=xrVvI{a|xXN-~#Ig=`-2sUQ87A;u^16fV z>JxoO1;GYsW{eCs^-i*S|0*lv#J;k&AduBgafvM3Dl&4{myxnS#;l52K^GBkLM=2T zhdUd(|L)uBTG`3JALPzX=gtmRISDU$HW@zaJ=-=Zds$tXP?i^v0&m42I8`_4xSkLA zbh2>8Ljou2Xm5zj;kYPRY6^E5ity z8@m00I!WV092s}Lbl6oT9DhC_%M4x#LtW{behk9Q=8n#Nse>*^ z0$b4n2v&KYg-0P2|L_KRi*IwyAL8CREUWAb z8>S?b6cCW^4(XB*knWNOQAD~ykZzHZ?h+6YkZw>ykOl#zy9Gf6Y2I_-c>rhToojyI z^t6Rc&n0ej#r%L|e{~|wYrobsxS~#Ge2`9U#^Q$A@H9P(ywMNM3&m1`Gww&>&le=H^>$ zK9?aN|M-6-D*M@O=#RmI|8D$Cj0h8=S$Qat#4gl@AyVw$T0bt&XkdFE{;6oPRDG-nuBBSdt5mI=O zA=|7_6cYdy7-Armvikko@jO;F&$R;6*Y%Tzjq~!y3-ozMfe2?1vznL!u#2g$daEM( z{oZvz%>^9F*-VVma6~_QGUWLCnM(r6$5h}XqYP@;59$;eqh0ym8uN(v6fl2)Hd>OLD6Ce_R zdU4SKSN&g_Y_Tub<7~9cn>M&a|Ih?t%^)Opwqq47i|7M|w(v8k50W%Pe1!y57uY53 zfIW&o0uo05>%)*O7F6Ocs27lhLyibAT--pzd-FuJe{KBo(JT= zwao*XIFdos1>^6pCiu5D$Tjcwt--AY03)FX3J?hY)C7Sn6TnOv z`sBZ~okN=tKaq#5&)JFoU)s)3J8&s39{qdMAFB;U^A)HRbf|x50z(Dtb#}jo_{qPt ziK9=7Ttr1B!~@RmAdsEwU)vy+aA5bo==S%fmTOm+0^C8o0NC@-ejp%p)fIu5J!`t+ zPj3Ix_J=sKS)Yry}cpP48qZF z@Sn%cPGA0@Ei|~yruUAtxAXCw4<({l5@$0P^vl2l_8b-?{Nwb#Ce%25wAxzW(Vr7i zQMFu!N4!lj3YTVJ?y)ng(74I(n89Ys zfm%!e9qbDTX8buA?%5#u=yHQX#+jut{;IFz6==#cIQ2Z<4 z8|s${RPbCp2fNswa>x}E@eeuVoH^ux_{BRzSejpVv$dMUZgrAqu}oM`u(>LbXR{l3NI+lI+E(0amW!hb6xsQ89DHh~JBe-KbC ziM#n$l2L7v5qJ=vgJMQsOujwjuyE$E0Hlx0I+I>L$ta}z{Y3YB(C}erh#t3P05f;9 z6HhaUgY!W=#G;s>qL!cnutX;WX1VelI>e|t76I#40pK0M4syY|G9NZXpIb>YRY^0T zCnul5azvx3k`@7TRsmog*UkyFyp1UbQ87VSEkPJCpX}LA)11+5(_+HAVZsZlJp*Jj z6R3gQ%~%(M`2ky=BgY?u-Gpo*e|Zo*1ukd&UppZ?bAWZ@bE(AoOpuESnkG=eC$XiVQeJF7A!+gl$S4#j^k*OiO=AVy& z$Ff*ZH|B;3GPtC`)dj3x{yCd%NJE$@hu=3;AaKAt_DDx8t5s#lD{iqD-4PomV3{_q z|MVA~{jp*=jb#8%68S`T1So0N>5B5=TLbYV@>UZmXAZE|+^GS8Vk4)576T?y#RLNr zs9+?P#4sC-e+R&`%O)s^>-EK~Py|fHBEW%13=C;Gh||z>i`68NgYHKIsX|?jQv&fm zU>qP?!D!Mt^BEk=fSXAf~5P@ld27qDnO?~p|iNIDkCWThWd2^ z6|CzHorB$R+|9UGhBFbda^TP%Mb)$jShETME6h+3tLh<#t}_Q%h}MK|C6^CEv9Bw` zLpGNyLLdU`fpT6@14tF<;1OJ|u@qu%fMU+2f`AKDCUKzS{Q!Wk4)S{da?}+Ks4vPCL{><4AldDb?scL1 zWzGdPkPIZ2uQ^2o!E({t8HS*<>{X>&7wAYoT__ww{mf{bZ z7-T8_t?i24q22!8BneWqE(}En7|Iz~ehBIU8sHzAz@vEM1K^%lwD^PV1&M((E*1cG zb?tnb29S;OMQa1k_FNvsbE*+UjY1$U1nTeXodK&57d;>GGGhm#5=!oZ;wgZuoDGLG z3H+d?HCZ0iyZ^(Z0C!{Q3gIh$&^sB}rGZ@h2>*;>4G@k1(zPfanr*)WYvOs+8CM6W zSpYNzp!nVs{{JuID;Wf#F4$6b0N(2$5Md7n(*;>bq2D_h*ik_&8=z4AMf^VqV|)_8 zm$-=A|Kx$?E{iAtaeT%iyX0d3dy|OnIraBK80-sZ{9*!>%VQBR_!-j*Af%l`q5yj( zcMSN}*FWh7hC84e``0NEg;f!Vav+#}$q$1p4S4^)Aj3g*1Mbq}(tn?t>f&q%ZFM%> zB?bFT4RBu7Kh*%ox}<`Ee)A`F3!=s!#4qR)f%opesloD3YJhq8U)87vv9jtvr1_Vo z=~?)5WEeCmC{61nnhmN8PK!tS=V)Ng@z?bLGiV7YO#x!iYDhP>C}})Me=c+6lzi zz&a-+usP2`HY%%+!gIjk12Ctc9nUeXiF39Bbimm&{AwJ+e)zL%!Jl0pt^@V3Tp%L^ zYGeAdqv4{{8MWl>bs%V`?+{86#PCl+ z<`|Uj1qo8ncE!-E{1x4x6tF8sXkCF^rT@=P!}1vm_lAO=_PpSnRQUst>RgOWGTF_bHAbV>RGcbzkRF8P5_QE~o= zd{Blw8KatKn=dz>) z?F77I0e!s$>YbNVFsS$!9Iq=;_n+I&ps+s|>4G12zR{k!Fcjvxly>3oZt)MD{=Ogz z7rS#caPwdXB4)wD#Koo?HH1F`ATY#@dFz7Cn%vKN51>~1vfQ4{T+!zQ%fsM)wXyr> zds84oY#EQa#xyvj!mXbh$`Bi39d+oxg-855(-?rM&$DQvn&qI7rh2-|Vsv`QJ>BRH z3Gkh)^Db0+(X*L$tPEflO$hp1#&YIOJiXtU=3p0Ja4jHdbv2k)U+}kB`n`35Jqjc@ zl|aeVx|#4$1uwW?)j+NaP-)IMRu@}kF#0?|wD^NJHV=>-fD(TkxD8@lI52dIpO;SY zfA7S8xyM3Bhc$t*>i>F1*MbgJ630xcd-x^mPuqj1i4ycayNOL;HqwHNYUCaaLGOA{zP zRNVkG(<`!F(7mo$5+IZPZ4rRy{wnVUp$sydKXH3+W8<#u;-Z)EQTS=Vi0podOoVJS zS)7iK?gO9KN$8UZr%(7@R8O~=2YqxiuT_uVns2&AHG$)zs(2f->Y&o}0gkUO1!DC$ z{(KYu{L&QLF|~bdTX19&{E6Rr}v+Bq?+mP3MbeA`7?c#x{u zkfdq#1W`P49%FjE&E6vOi5Nq>XN7uiHz^`1>ooP`hK2BmmCQY>NWXEbn|8)GUs>JW zQ&wyY{^rJ@THRnqN~C%2OMox^F}L>`gOizsR<&68b~H=bm3C)q1#H?GIA(Sc=xYS=r;V?5r&FX>a@e)cxZVH|oZX=RYG70*f4of9b@v~AfX*j-lQ z4q>ZE&vC00TjP_hZJ~W?`(N2#O2Zm68}~KSP8OHKf1tx!+#P5$Sd8m||8Bsq<~E+W zTQxB{_i2=JqHKaSW!+MOJ<`e!c)F%hUWC4lStV>tp3h2-&*S87g8}>RX36zN z>{ai^1C;MP!H(0Phv8epF4=&3&q)obcP8_MyZ_ zkn9V?^ln>6B;i3M0Y}6m`bfs>{ltTD1)soO4nQcS{oRsUj6Jb8dkLwE8x8tGI3b6UlFGX9Qc}=V~?xKJb7BaCYIs zr_I)l&-YI>4LnbG3{GZ$8=TI?o&MZ$KHcm7ak5$JdGIrd^u%81q&e*bXVF=hc=wCJ z^V9Vorw((yCnsY+Jb4e=Jom>~4Nea_oju_^_R>xl$E+Jq8$GwS(@yT59>)DR-8)P> zUQ7Z;JDxh(jPu-X^E^2e#u7d{J?iF}I-RII-EFK&J2~)tzP>cGm!LTw{psTd%=0i^Z1x&>SROsWaLNV@y6kghLgoZ;lq)%6XVl0 zXJL=G2A+pSjfb^U9{UrX$8oGv$1B*!zn-2Rw1w}-HSXUfx1`A)TXU?QbAie@I>ALkR3$g5JdUzhWwIY`-3SRfUY0cA zwXNG*ue8nzro4+)k8*1um-P$TFL61~fYQo-is+^=B6{OqcO3>Cg-O?Y`v%YVo2A_M zoA){+vnV>zX@Y5wziGc{e>KJA!xme?g$CcdN;4UMd;inh;9%p{hu=GJ%x~@ux`f_B zirp+2<-uOj?j%djb*wM$C^WxTOew~Q-xwFgTLL%rswU!{6r)60EPM2D6D~Hx3pR>s z%#5G~Rb@5jsThh^!w<9{(j(t>61P~a{BGAW34p=8_Xs^vjPkkRNG{o6d>5$v2?a zzPTMve%z>dN;T|jta1c&9)k!;~Mp{nh-El&A zgEvwRKg$x$@?vehu}q`j+TL=0m@=~}gghi?*$R{PW@u3G+iS`4D%x1)I|;c*4>#ge zHsYGcStXZ4=Ei$Xxe%^n$j=HyZR(FK>(I?n{i3$;cuhi`laNP;uIl9W7%rWBkAUO4-n9Nc z(u|{sH%cW|v7v?o%UPnOV=nv03d~H*DRx-g{IQSctzSDXW@kxBp34Yev7A3^ z??x&*QugdxNPIjfc;4laBl#fDtmg6LZ(^^W$%!A|r}leJ^nQFF+1kMjmXC{NaC%2u zTuu6P`122m+KpXj8V@1NsYu>2mB@^Iq5j|$%HjQnxuN~ZtfBoAW8g34(0*X3DtBMr z&BuHyrsltb8z1WH?z6Oiy$|1si#Vi)Hb%ozMk>8+(|wTUkgfYmpBKBql{54DtM%#D zkEL)ge_KdvM`fj0wCt60eBi})+;{zuRy?Or?UwZQ$RF9*p!OuSlC=oiv0&#e;aIN& zdBG{x<8r~#oa=W#A3Inishh+wZ>TV_GqZrO`}_ZZN!5+P=Z5m(tFrp~}^N z_fx@~3&V?7md!^*JkIS8x8zS;yM-1tqsixEtpa5NNjLN!NiXwl#gZ{&2e;*Y{JV;tZu2!JqRChh6UGu3-Lhl!X-pAn#3GCyzi&b08We>v^ZbV7 zjZcwOwVfUt+oJH~*}F*=k`%a9B=e<4wmZue1Fkyq!+X6I`iuX-f4 zY-AT3sIBgZv`z$&Z> zef=8#r>?Q7P2I>AqE@EeKkO|`;Imf^UTibCrWC2=noaL!-p*sGvX<;ApDoE1($_H$ z8FmpX-*vJiceA5CHhGkd%GcXJdS`TA2z|0a|8=d#OlVdqzDi8r-r7L+@!XO6;cKJY zgFkdXGCou-a#lC~bd*q1m7hqnZnK`1Bv>8W_U@%+R;&3qKL+JiXtw)0K}E&42Dcl= z`t21oKKzvx#fc0#Wtr^Vzue0DJhWPdgPLUL3kvcJb~I(}r+)Nv?>~bb)85T2ELdmX zSf4m@o1nN$YCD>awos8{5mCXNne;SsSbP7NWNxmMy`ntiYn1`~Z&JF!GGgDIy4Zs5 z>b&0t85;SGUt7=^>pd(rb%gRCnj0s6VS<%2|50;fvV){i7J<#Bm!0|+=Y%+b@j*V$ z*l1;`I!)ov=y<~d+@qs!X^%L=`d%8)jlG&|LQ|=iYD?ry47P5G#oJ5c>oVNDlevUh8GZ|~gIt+Aw#();{r zwv@XT*tDfdXm-cS0<8uh;X*gR1#L^*XS`Qb}iXIBNW(ylLcy@H=PbBovJm5-jK z+zf17eB9cf8~53)$_uaBR^StdY_7L*b)1m`3A0k8&RJJsd(!=$J(0Ef z@gd@Jsy&(~?WbV|XUWw8<_3fJ=$TdpCjx%oQ;n_HetUS=;suSFO<*;+g%y`KOo-Mk z<>5WEty|*N$seQC&Bc9v6qI5@Kj!OH6MH=CRC9Rfw^7zI&gz=0HKz|N*!})@@JzP+ zIOEGWnYR;>g563^<=NVbshgJhrBN;35zH|x#thL#(MD|Gtb^|3QA)0=V*TvQ=` z6uvyZ(OK5^lDZZ1e@PC2hC_3-ZK;?Dp2Ov1x-C@YipgVdY!sv+>J#aB>X-A zH{Zd*$)zQru6g)D=@)kt1{|3#dKK1NSnpiA;69cgsAqlhRq|y-3?UxfW$L^0Zt->S ztryR~A^Mtx&YTYSuSn1A{rdh+N${u;3Gf@D?{yIyzAvS}KhR5PUs@7i#nwbgOf|=% zkE5XyrM)Z5vr|P-I;pGqEg|?z&ml(T7x9vPsmURvz|TWlz%LeWtu1PPHP9pVbU)cx zU0nFudH?wJv!T00xSdaSoWGaOb;r=7Uj%Lm^ z&2hV*!XN2_wTi;#h<-tbQcrh-z^FI+?ssmp(cW9ftjDg%z>i6GW3rk(=EmH)J=*hB zN6t}llknXpGWw)CmDn%ub!xA#E1@iAzK5<_r!MVQopOP`d9N|BIn1{b3P>sD$WYoqVE# z@s`p6m7e|O=L*q_^Wvi`di_{o5zH?fm;y(O^;R4i%SG`VettN4C$~m1jqTV^7`96` zM1~Y$j^g)Xua1Wk@l!~P*6y-d--2MRU<|=lteSZLEfwZFdR4?OY!iSrU}(PYVv{ZPu2L?xrWhQZXjA@q{(Xfp|n|G zz%0s9lfZu+g;BjLqd!k9`Ac-kTrUjI)o?w-=@tciN%G!cnmzMx!A<|` z)OootIP$a11(|)#PI50aoUCP)4 z8}CfSoj7|}YfTsr1aZR0DTGNkeZ+9{+oct~ZziqDQymLXBOHSGXyoyM3GF3H_b-ra=b zHOnw+1U>@F4C57feSX`m`t;6xvmII0Y^psKHVd&l6!OkC1wRLa-g)a%8Ee`$m+CI% zmHQODRnC6FZnNL6moBH*@Rkv;E<{1u2##+u;o;9jRFdbo$WnJ?axK)d@#M;q%u5n7zJHrC*T+orA&Xyf zszKtHNA121rC4VY{@$jRUBH5?Isqt9$59>OBp_vUiS= zBpRxezPYVZo37?*Qoc;Oo6%ZCB6CDgg|j{T0?oyqqQA)keGIq}g*rr4Ms32iyCkaX zyCDna!u#!dXSuib+ZgQ8WL3+lE()X{(BX`$ju8Enl48=e^0zhU$=*azVrS_j4y&GC zul`;-Qx#4A%_)wnVwu&q50QHJfr0j{au@M@wRud!ODk#5R%X@>LDM{?&}&nU1vEv% zS_3DK`UoowwDWB$T>a22$8FO%cyLA+NF+nN#WLNyO-h*CnwByP-6t2~l`#e6s;w}d zEttJLN?G5A{h$k5rxPZr?ZR|S7dzhe#cG(><2zNmz!=FL`cZ|3$Vbm;$&K%==NIjh zH=$Ir@-JL(D{Yk%$7Zn?7(%Sdy3aK7YIU3wYxcTLM$bBC`sk|n8h^?vm&ig)rSig^ zqUyVFOH7oKX)^6tEW}nHu!D!Qg{kD~9PS&~&Wq;~`+QzUy^jz4*n5%vwEzp;7D1^m z)eG4j)`NbmzPAln%x>QPXjK1JRwpqFwmIHoIsUrlYIR^Ec9qlSheK^~8(Edxq|FKTN9o*2^`=sy8bLMr^R%% zW=h(-EMSAUjph!?3#}$uD-GU_mw`8G1^p6dy(_poh@uqDDnBD}Bj`jGUht%UHQ zD(-eNhppPdzn*GMc0MD7 z!mo>?@p4CX7@!z_^=u6-5uGNFp!KbPWR>tS$5nlxv@T8pnLawyEdvs~`ru#b#! z$d~0- z@XeD43_ecs#~rygWXSP)Il`OHUrPpFuCqzosWlJC!gNAJ-IVzWQqW`H7V@ zH@alqOo(URtYjA4b`^7*KCGpki@292 z%`R&@F0q4N+)BH`MSj+h?rrsuou3_=qoV1LQ`NVlo$xkIhtgxkhAAQ+A_-F2rD`fJ z1}#VQp%>`itYvh6Cf=i@=a@Jaf|8>V+t`jhx*xx1FZ|%(VEBadjR+Nu(zpPSh>F{Z#&{xHn7f>jZim z>dqWS(g*8U`d0BH$GPWtD?>>$gbHnU2YH$tV@9ZVs1#hfR&u&uugkmE-J^ZOPl4cV zcWa;_h6E3#l56->0AIR(E^<&{A+*)y^Q{hIJPy*+p>0F{-ob@Dy{6$i@REB-3;e?0 zybZtcjn&97C(QU7G}FbY}zeA5_p@oFx9Hh3Eli@!aW^Xo+V7qr3h>$H7bYw^dh3+ zfzR7D>$K_Xw1NQ(x$^WrIX3u4W1q9`Bf&QtS&pKlj-bG#HIIH|vXq1UE{nc)otTB2 zQVS+!;eFxHCJ~-A(%WM1tsXwVQPb$<)qL=fB)>ZK?agJ_z^6ws_gOPbO{u3n-AMV^ z*IB<=5e?(b44?|f>!A}~SHyTaYVe_&*Fwse72{xKmesqU)rj(8gGs$N${gDO0*Sn@ zOga*glNfhs{2IFN{_Oi&i@8`BZm-a`fTeV7?}aVhmNz*>L9Pakb0-0am|^^r{+asEc%*2*$?tT zb$iL0;e1*4ZT%#xlqRbbI2B=I_8-#}qDli9QbzFvnK!9sm0l_3i3mv4`zRR{O)9-^ zszh#O^?Jo7{aY0aoy5oNg_;Ro4;i7T(p0LzM}~EDGXg)4cwTzO=bBzBI3i;1IGx-F zEm*frk=^e*x&*x;Y9@HVo0Z1f$QKRZnc%`5d?usx7uqxzR*Pzc}jg2E2grDvU9GW4`9_}lK zS8DEFHntj)&&`toHj*mu7p4(<%y*-zGx+_~0)skae@zk+N*C5fyJlM_v8r9HJdS;Ox-*j=Fto1&uVjI;^oEL&H)J^;M zI|F%$h%%2w5-l(Z7v}L9Xbsy*zt;2nS73Uj%F@aVth>Wi@_4PzxwET}g@q_}BQmRQ z_~AU6y>Xu+O*Hs2B30r!VDo$F=kP5X@y_!bDCA6ucX9oSyCkH>uKtlYRogDA>a7wIUxYTA2qhBJfVxp6pJ$#GCf1g9hC-KhhUlB}w zeaIygIFC%X{OwoT0va29k9LTu>`;+>7x_tq2h0bm8AL?^Ba|oS@}sQ?<|<+HFK`ZY zew(M)#m+UAkBBA34kTW^lYINe8iMu%!w`gw_mkQye64KgD!#Z*m?HW2(tf7DD8C^` zAisoZ#vhnG*vYBPiG-{@v@t+vv?F0MCW?k4nm@`jonWcqHHOMd`bC*Oyuhg9t3pN@ zypp^tS%DFIws*g_uQE?~M$NOAc^Ea)6(4)25rsR+*E)lZW5)!l#wQp05C0y@?%;Hj>4VRlb$x~vR_Fq$QeZi*wS9Y{FRr?2I#}e~ z_wae3M*N7^g3T;l^KN<)mb_QS5rYmLt<4vBQ*|c2QIv%2Yno563VWVBdUSLvU0V0U zqsS=s9XJPPvNz;91e66qqe1EF#fiKho9HN%w8WJ%f8wB!jJ-i_Q<9iwj#lX4#WuDl zzL&IysTA7nhdb>@PS>wA7oAXm&8tJ}MT66+*2yHghAtXRcXLiMOFJgrOx=gGFkzyU zqD&(s$n>$=3ySZUUK%mx$z61h{L+WgnKe9UoH1q&W+;ip6=*`k(m7|vV)1crt@0vk z%QqEo$=*_sQ94}eOQfxn;0-6pT#1GVisjZ4K!m=ydP#nuN1n_r!Afs zn4EJ1$sY~#7yYt^mq#Pq^*T$zl?Yilx_Zo{8v!QSa{1=G{VgrkO_!< zgeVzE#5xH@*4U#@nm@;;!z^#xpq=NR1UkP?D>5z9;8 z{MrS{+qREH42hW(IYl#}#H|VwrVLA5HS*f=jrWOgZ|~QJhq49qtD##`S(&)vP4kk` z^;;Y*N$`%s$cWFl`Y6mGY~3Lnc@^+hHbR)fl=4|u6RS-hCMR_Q%F^d=yuN~@B7`QN zBddhG?;ZJ(BIed)w#dG8ggbtWEaSj`C^|-KW%5f@lix?bT}p?0fx1AX1dh9>hLXr| zK}k?_W}S1Rd4e$v4Zs zpP^1QyLa2>=E@ycYkWNvc773Fd-3G>YF=M^+gL?aKLHF;F8Q0cO)x?kV1|^n6yI5t zHe{HEr^mhKuT5a1SgS*}+@(mruIjDpg(ZeikK=J$m|NutRc5P{S)3ZbMzl}1nDgd4 z1U)=tS82E|x;!Ne2Hfq^aGMjX4iP&+6=S*NIfPGqE~ybNtcxA-&eu#Qabctv5d-_5 zAy@|Q^W*HJkLHv8?!f)R^ke~{21!wgtB_3^=UNpOX0&OElmO>%tTJjrN=0%Ee$kYz z?_J|w@JfF0h6A6a%HNpK+xBgRq%%hi+8{fl`&3BvE2K2EbWVz*w~f*AnBWb{z;aS= zSw4mH=-Ytni>3UomcaUv2oJ$>MJXtZExhg1T`j-+0$wK3Vs~OH`X7a*)7bkVqc!sT z$uRre46W2Y9Jt;Wrvbys?^39@F}%;eagFbem)UIY>tt-xhiM|27+Rm&P&kh;<*T|> zP7HZh@dx6W?NHUNVdUwXJ`C$n+4=`>lipjp#`wo+7N5dk6^?gmUW{*H2=NQ-Rm0N*u~2!LDeH&$ zML$(awfT!-*nR!FPapBvyC${dYsS=d5gqCIuFwX1UWw!!27)K_W&Qo>=8FF49RWF# z65lA_)BSQBZQ4|i$3}Y^OGvqnV|HqYPx8h1R#I6s#XEFSfdMK6w=(mdr|>(Wi@ILl zF+>IUwNC02lOC)1boybup;)JHXDa5PbMA%dejwM*&CXPhtmh9is?2!TnL!q~BIfay zWs!U}+7eqfnZ|(~F+9L&?fU#P9wVct69wBHuA|~@LfX-5WP4@avZ&`$au0>ox?mjS zm3=1l5Z0+89~_n$n%(g+1Drkj5R+tEL`lB9!!BDfz0E&u_-3M3oSsB}W!6Gc9wrT* zjj5&^{I5c8*|!L2gb3?q_tUxf=U(0Q3;u;%L-U%y^avrIJP1WSN46P;hW{{@n8UZ4 z3uY9TBr+aV)%0_6Itp^AZx8~q+&l3sD^3Ue1+l(DHYBzen=J%hISBmZ^f=p+85$-p z!lrS&tM$TK56a+)YA87!I(HQOOeC@7mVYY8f641>gHPAnGHtm-uh+NTouOyx6Bq~Fwx1)}8=A;Zp{jn7bO`IA z*~)E3rU7DZsaPAE?bm&F%X+(9)pwuzn2s zhNVVI!Sy^HMzYXLIyS(KwCRW*VLgN?N8d|>)@Qfeo-8Ep12z}(TgOD+Ee;mX>)H5T zCXe`C*Qm4}5zrj^j9hPO3GW(ZY%15B=V_?UqvP1Vp{k2H7?Dk`Husa^UYsVnUZ-@O zqtG2HaohmxCn>6^F>DCyQJ)C|MHi8U0~V+6G!FOlY^Ztp5Qu!4S6Ch9S6xNWaCjwl zUvOkl!>=6IzI_AL+(&^6;h3R5_KOsLyz|TSL^|#Rx@hS)jx7hFPfB2zZ4lh=tNBHR zq$jo?M%*r;c3FfKZ5$Y5`0{(Y4|lrHpH$5xGF4O+9(9~SJFVodH(?rUAlcphr#1En zwauET`qOrit=wUTWB3kaCcP7meYvd}@UyZVJ-TRpDu{jF$pn+n5ua^qp?jdbxCcXw zP{CHn{k#`$IlzNv*|(p&H@)IBVN6%3<+W$LKIpI16N`;n2vC8Gl7~NYmoC$$3soTc zSF4{l$9a(X2VWYRJa3}yqkRs?@*w$LxNEGT7p`bv&FyFD)*3;fvpeVv`VoEjJ#4sW zqQZ@vu@IE)?*);B-^7|g()r3+EzNj>Q6Gn#n#`JNCx=|0h4|;jC zX7AE)DJARD0*yEZ`;(HtD3Pi*SEi8I+(_Xrmm=031J}q za2DyCS&U{Je1a7%6}$Kbex4VZ-+?Ol8qbZwl#lNAh(S$lOyQ`jU9@imI;gyHjDFJk znBA=Ir%6}E73E3@9wNENh$I?p5-Z^v6#Pi_8lDjr%RMgpBS*R0smDNiKp`>An}37t zDWM2gB;PwNpM6~9w@*u`BBCfz-EbA{O-mlbTJzjXlJV~d|J=pR6Dx`Zn=VG%#~NC= z9XU;KhttD5t}1-Q@Wb6_e!Gv-V}3EIH^8{FM9_Uv3{i5s*Ow8++th=;^AY}zggAE6 zBeCUi@jj!?2m`gr-MJ>sD~VqvEqBF#gXp{MBe*Plo`iDbag zUq9OAdgUMf$K~nd1UZ$v-uV2BdTMQJl=0tL}Rw*|03J|jvcOsr9?|Of~k8ogHu169pl}n_L zu!LgRxhMGp7CiG8#nQ()_;Lc*`Uu^fIyvC5-_j$yGUnL2t{TV7l~S(0H-K?v{PlUv zQ9*bf6~CVD+?Cl`j#N+6Ldq4?)t zPsyeoY?o6SI-1AHVdJiOO`>>~&SY$aq&tuHxLB(=g|I!YM3ySk@k|+1_8GB5c8zOg zRh+qn&?k_f=kKKJLaW4Gz#Ui77Um0R*C<_lRc)ylVBjh`VQ zhoS}jL}7>v%289sX?i^9O-jWcGKu$j5XZd>f4hg>dTvBt({!EKgFNDMN^i2EsT>^&(fG~_m1@LCbMSGe(Q*(hkr&x zvVm|Jw$HA^hb)sM+P-%sq>Q(DDN?CB%J;F2AD@t^X*C*3;%sMoq*lFnvjM339jvnq`x?~Y1+dF*<68gFI;`&IKv z_N_Mq>bGT1_WJoeX&y}Btyr!IdX_IHce&1VN@<@k+0L6(QT^nPQ}O zbL%lPe5}dmho4X>$Mo8fSxhH9_9ablcV6L$4n~Y5pY6Nqo(4nN_jYaiJ9!P7b7aBx z`}cQB&x)fektWUms_l64`g=~V$wB;%`u^>rZjF#Kq!6;1aP*-) zfrsTvtr;Zh1Esk~Tj(cJ&zPOm-uJ1$RBumIBfMjxA-gAA%yp8es8`=Rm$TE!& zMcA_){&(f%>b5RXQ|T{X>H~f26BdQEsmNCi6!)86Ji2xGz}&Z1;d#au?ZDz5o|s2> z8}DE*U0~IXP#Wtx4_S4@l+g`tMOW-ONe!tyDTHP6%O13YWnTa**tT#jBcTZPZ7O$?Wy< z`-XPN|M2#h#O#yRF10lmIiuRDx7+5V7TXAAx17r2hys)zA7&Bw`yiw)bY|o7*|Chg z=G><=lFvd^rhes^J+k2FH!BvFICS*(`g_&m)PtTe_Gy2`UzTDOiI}xVd$iA45}R)| zqJ6}suWh+8|B7{|ldMcW-;kBXE%_c(SIxB_BYL~m`^xrd!+hN^BeY)LWo8!WXXUoR zE#t=$NA!iaJgwi~BNSxA&fVjzWI_D!2E7U9#}AF%9{KKW)%J$+`G*ZdjWePNj|4tX z2c#+JtQPpuW;((Ta<~hcH1};qSMm}*%}y2LXej>m#3G||ckR=3;7=EY~BFJ+U=}e zSHD>8HuVBv-!r{F#lP>2FdD&p4eQ29re0vaHF0Ew>*GD;h_0LEvua1(E@CmAl>)lX znOkL{AMt5a-}-&E3pH&~A@Ka{*XT1|J>yH$_<2ZAz`$Ag8YAUgka7=B8s3TS6Iz$S zj?lu^s5{4x#*3OKNcGtD+xEwDJLAlEZ`W(Mdf)6{U+-zY6DMBSOa%f7Ihae1X@n>T1kbLuIu&uiR39~Q$ht6% z+rp&UKVfL}u(_)jru-p|XNi@f;rVgOCt2I$^r`8huh#k&fgvTHABQ}R^gY#F{0@`( ze#0Nfhwtn;H{!J%74LH|zkC)av;%x%x}{C{AzdX}YMk6Huhb~qwCJJ^_*CY#0=?pw zQ|MLsV|7+3lrV_n^~RHKy<07)h2NehJ(;pcefbg1<(;nZ9GZXtlP^+?u-gOvCn*@! z)<0JYtOUoJuNTP*rzA6O1P&oO??oiURl~IC99w@#(wO^UR+M(|f9g2zs3x|q4+o_x zi1aET1O=oCC`|}hKtPH}Ku|iN_Ye`J3QCcH(u*KokRn|`I#GHH8VDs6DJs2%5(p){ zAtoc1>pMB0gGk?sU-bL+@?HODeK^|QP`VtChP{|Ny+hO!cqpt}_ zQ8em4M|jSsE9kGKFa+ZE6q~_m;fOcRWHga>%=?DELr9hczx{TI=0r?xWc%whdUey6 z4hMWon>-O3ld)n=XN!sVRthACilpj)x;%_jht=%P&!+sqBut$P48So&$`v-Z{Fs}5 zeKD_)w?IcbGRR1>miuXFG#cJ1S0T9&C3kn%8GdGw-9y%UH&O-}x3h<0TvM7?c1-%F zDt@+Afb>-2ae#tdD^d*#7DvZT`pArl8$$@`Zkx!JVT-iw^eeBJig`ZWn=*nCM2mf{ zDWFmd+J@vAJ}p(k#@;P?{NQd~ULc%ee&6oR&_$K{#L8&}BF1wdtg|(O zb%zaSsd?54hQqmFnH?cMYwA#q;u=_bLw2E0`vht9aNFoGgC2LqJQJ7IJ9yF$M@-!~ zCGpkv>Ezw0wDY6l3BEXL)x~;4+iO1-rIJFs{9nG^iX8sH681T=hdi(;>za8I*FM2? z=vzoM+Ex2z8T35N`dVVm=;Wd%LTgB*QmP+;TEWk$HN3f7F9q4P`YUJQ#)%P}9d=#- zb6=~Wh^|yfShpGbD0758uJL+m}~zkn1#lJfBvQsItUY z+o4s)`5s};Dlb}c@!=6=Ijv<$1zZh_BblT52=#6GTjpRByC`IVR7vuS0-c&s?gT2d zr))`PK%V_Z$C%V^$PB{Apzh1ERl#W86pn&sYo!SBQ@6UyxbZJnQ^ciZ&KLxxf>RK6 zn5N>EPer+GZ64i97ZHCQ^9vxK|gs* z^Q&7QNa^Oyclh~|O?od3%s|28^G>d1cF;jfmzj%)v#O5K`E1p-R3GH&5)yM~iYDtG3bZc@JmBlIz@Pnwsk zvF$vZkaF%f3K?S9*BNO)9egvyjE4~>p7WJOwrKat`X?we-#hp7^TB;Dz?>&%9`_dx ztw0qllnrB73xVfy!Kk!o)apj+ zrUYY@NxXfbMzLB=;Sx3#6>OGkna*bBRYOI1e45Sx*yDQwi-v~(2eVG9`3H`Uul)LX z6rE-wg<>&_V%a*+Yu^s+d#OFJKTs7)!JwvGK&du{TRm6F8WrAo+NFf2@} zPbm+0q&$C*0UR0HsW3HWZ* z&QIRMb=2WRU=duD1@02Drc%1RTZNK1T!FMIkgZ-cObuRVv}8PYhliM@qrvU*@Bz;n zpBK_(7awynNrYXzkCu6`eJ)5ES^G$h6s*U9VSp2ST>956x^7h`7j=m5MO4ywp<3Ky zPln<2(Q@c`n<&jzs%y+&>BsDg!BDHQA_mF`wNBCy5BqrIH$xRA3p?2m0 z>Wc{?A@E=t;B9{P00ssw8v3YKg`A*Q&%9)6<4a z6^hoQN$I^yk8(=xK9yo(Jmpbvu!W{zDXLIG2p0BKzwDMLHolGvy}_!sYION(hF-kKb*N{ow6}6^`DHRprAb%M7G-+dU zCu)t!3Pa1eZ686>t2C&TS~0qxNP<=^)N_KyXTaUBa4atq`VucrU0`T?AnOs_#U8`h z!LHdEdNFE$*CX9s799V>(WW5~o0048qUeeUj+z!aD>UQ1*8+THBlG2%mYTd#{>RJ( z6jxc1okMGWf8;ff8`=(>Yd-GQBJC&A>haWBFFlAdsS+(In42;x99fr9)ckU}%)Da~8eF+N<@ z6%tw$H96HoYq`%C?@wQK8Ht7#H#LWe+Q4bz$V*m}@XYU+h!!?Uif=WQb@Aa2MufXp zYqSDCVP3c739VguM~hDOYXeVaC`HVr6x^!-H$yuPnQ4R+C@!2d5)gsOEq6~o z{3^5Cns7S1sr>Vs4&)o*J3N?3mlLxnjJt_e)>E>ZYZFnSW?G z${wYo_e_h}(KA`iK=n`L1cp0M7ryV0#@D5O=dIuf41Da>`Q8GwH%6}GdBfnxtbKb) zbSF1b*jSsx*!S{+Lr-4IvhO(#jRRM`_oY1J_8&45 z9#_pNydx_?a7@UXwz!&_{*2sE*d&FhHgpunM~{ms4E|(;)Wo=S$BGl{BZq0nTzWy%aV3|pw+hDQTvEFpI#=a8B2qQLbhSzbt8J*=t)HCHW#;Go{u0UUjcU zBjF|^5SxFlxxF-?4!%$Vv#8dq9!9sO98`2pq8wa9!BxAdM2 z1hSw3ftY}`=)ny)S1*{Wm$`wDI}C36zp7@@iKeJ2-?~PFE*7e=(iyHhyZ; z(8l_3bkX+Nv*&)g!KWuiuFukiCt5bOH@Ad+RRs<=d&~KzzFRh3Ia~bdtEf{-(U<4) zZwJM=ZRKTNE)H6s9o9~OU8Bh9OHcu;1~|?=mpxM};(~~MIzTB@P7%Ze)1PR-UTRc* zE*)-*t!5J`6<4*jjsN(VL`rUEwPTtTV|G6I2D3(V?n4w)kDb+=oSJD&RM;UuvGsS&Xa8pzqkA}W=?jlkk z&OXauV|ND?;X{zEm`x1oEUzrv^moE_zcJJBn9qTGd|UMWI}1#DT4X1bfr0(MI_c~* zXyGVurg#DbI(@Vh8aOleggL_{#DDGo6q27GWT^#i;R0q0!x14naK*;WTF=wX9WG(* z<_Y^XYyOmPN5@M<0kR>$j#go_0G|9Sw{&+uPOV2(sUZzC0|)MY0e*MY;a6yvok%$-25g@BYj zO1Tb<%YS3>J4Na^U(#uyNo76`;DNw+>V<^(cQJ|n?Y1UI9knoK^DSF(;Qe=*! z>~DuOmN0@q5dnWvN-rEsxpExkP)S&H9Ed6yh_Jws=;q7+N%?2Q{|?gMtYgRfNi}&| z4LunMv2p5;K#wZ?3H%#%^*FbV{+Qr*zrJab{R;H|`%S^0sdMyw@pnQ*@IQoq-yZ*z i9$nslm$E!3J8rSp)1m-o_^%W_3z7f=NgfU)4(LBTQzyLu From ebdddf17926eae6fcf11c7eac8e45df98a565d69 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Tue, 21 Apr 2026 09:04:16 -0400 Subject: [PATCH 09/33] migration files --- .../household/migrations/0040_migration.py | 135 ++++ ...f18ae6b758e8014a24c7fa039e91.response.json | 52 ++ ...f18ae6b758e8014a24c7fa039e91.response.json | 71 ++ ...f18ae6b758e8014a24c7fa039e91.response.json | 488 ++++++++++++++ .../business_area.fixture.json | 46 ++ .../household.fixture.json | 388 +++++++++++ .../household_role.fixture.json | 404 ++++++++++++ .../payment_plan.fixture.json | 245 +++++++ .../payment_verification.fixture.json | 617 ++++++++++++++++++ .../payment_verification_summary.fixture.json | 257 ++++++++ .../program.fixture.json | 121 ++++ .../role.fixture.json | 17 + .../role_assignment.fixture.json | 113 ++++ .../superuser.fixture.json | 45 ++ 14 files changed, 2999 insertions(+) create mode 100644 src/hope/apps/household/migrations/0040_migration.py create mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_c4446414-01e1-420f-879b-4264a5bd7a32_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json diff --git a/src/hope/apps/household/migrations/0040_migration.py b/src/hope/apps/household/migrations/0040_migration.py new file mode 100644 index 00000000000..69112b888f8 --- /dev/null +++ b/src/hope/apps/household/migrations/0040_migration.py @@ -0,0 +1,135 @@ +# Generated by Django 5.2.12 on 2026-04-20 14:57 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("household", "0039_migration"), + ] + + operations = [ + migrations.AddField( + model_name="individual", + name="family_name_local", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Last local name of the Beneficiary", + max_length=150, + null=True, + ), + ), + migrations.AddField( + model_name="individual", + name="full_name_local", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Full Local Name of the Beneficiary", + max_length=500, + null=True, + validators=[django.core.validators.MinLengthValidator(2)], + ), + ), + migrations.AddField( + model_name="individual", + name="given_name_local", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="First local name of the Beneficiary", + max_length=150, + null=True, + ), + ), + migrations.AddField( + model_name="individual", + name="middle_name_local", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Middle local name of the Beneficiary", + max_length=150, + null=True, + ), + ), + migrations.AlterField( + model_name="individual", + name="family_name", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Last name of the Beneficiary", + max_length=85, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), + migrations.AlterField( + model_name="individual", + name="full_name", + field=models.CharField( + db_collation="und-ci-det", + db_index=True, + help_text="Full Name of the Beneficiary", + max_length=255, + validators=[ + django.core.validators.MinLengthValidator(2), + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ), + ], + ), + ), + migrations.AlterField( + model_name="individual", + name="given_name", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="First name of the Beneficiary", + max_length=85, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), + migrations.AlterField( + model_name="individual", + name="middle_name", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Middle name of the Beneficiary", + max_length=85, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), + ] diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..3d65746e838 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,52 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, HEAD, OPTIONS", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "1139" + }, + "data": { + "next": "http://testserver/api/rest/business-areas/business-area-0/individuals/?limit=50&offset=50", + "previous": null, + "results": [ + { + "id": "95391fd5-c41f-4a18-b716-b96eec3bc96d", + "unicef_id": "IND-25-0000.0008", + "full_name": "Person 0", + "full_name_local": null, + "household": null, + "status": "ACTIVE", + "relationship": "", + "age": 35, + "sex": "MALE", + "relationship_display": "", + "birth_date": "1990-01-01", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_batch_status_display": "Unique in batch", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status_display": "Not Processed", + "deduplication_batch_results": [], + "biometric_deduplication_batch_results": [], + "deduplication_golden_record_status": "UNIQUE", + "deduplication_golden_record_status_display": "Unique", + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_status_display": "Not Processed", + "deduplication_golden_record_results": [], + "biometric_deduplication_golden_record_results": [], + "program": { + "id": "75717c42-48fb-43af-8b4a-6bd2206acd88", + "name": "Program 0", + "code": "r2sz" + }, + "last_registration_date": "2025-01-01", + "role": null + } + ] + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..c6468e546a0 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,71 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, HEAD, OPTIONS", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "1665" + }, + "data": { + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/k4s3/payment-verifications/20ef167b-8437-4033-b9eb-c2d2deb0d761/verifications/?limit=50&offset=50", + "previous": null, + "results": [ + { + "id": "c4446414-01e1-420f-879b-4264a5bd7a32", + "unicef_id": "RCPT-BA0000-25-0.000.001", + "parent_id": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "parent_unicef_id": "PP-BA0000-25-00000001", + "household_id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "household_unicef_id": "HH-25-0000.0001", + "household_size": null, + "household_admin2": "", + "household_status": "ACTIVE", + "hoh_phone_no": "None", + "hoh_phone_no_alternative": "None", + "snapshot_collector_full_name": null, + "snapshot_alternate_collector_full_name": null, + "snapshot_alternate_collector_id": null, + "fsp_name": "", + "entitlement_quantity": null, + "entitlement_quantity_usd": null, + "delivered_quantity": null, + "delivered_quantity_usd": null, + "delivery_date": null, + "delivery_type": null, + "status": "Pending", + "status_display": "Pending", + "currency": "PLN", + "fsp_auth_code": "", + "hoh_id": null, + "hoh_unicef_id": null, + "hoh_full_name": null, + "collector_id": "7e849550-2c8d-4be6-a458-566798967acf", + "collector_phone_no": "", + "collector_phone_no_alt": "", + "verification": { + "id": "caad1e0a-2670-457f-87f6-01b59084bde6", + "received_amount": null, + "status": "PENDING", + "payment_verification_plan_unicef_id": "PVP-1", + "verification_channel": "MANUAL", + "admin_url": null, + "version": 1735688653315201, + "is_manually_editable": true + }, + "payment_plan_hard_conflicted": false, + "payment_plan_hard_conflicted_data": [], + "payment_plan_soft_conflicted": false, + "payment_plan_soft_conflicted_data": [], + "people_individual": null, + "program_name": "Program 0", + "program_code": "k4s3", + "collector_type_display": "Primary collector" + } + ] + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_c4446414-01e1-420f-879b-4264a5bd7a32_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_c4446414-01e1-420f-879b-4264a5bd7a32_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..2ec2936b669 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_c4446414-01e1-420f-879b-4264a5bd7a32_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,488 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, PATCH, HEAD, OPTIONS", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "11362" + }, + "data": { + "id": "c4446414-01e1-420f-879b-4264a5bd7a32", + "unicef_id": "RCPT-BA0000-25-0.000.001", + "parent_id": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "parent_unicef_id": "PP-BA0000-25-00000001", + "household_id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "household_unicef_id": "HH-25-0000.0001", + "household_size": null, + "household_admin2": "", + "household_status": "ACTIVE", + "hoh_phone_no": "None", + "hoh_phone_no_alternative": "None", + "snapshot_collector_full_name": null, + "snapshot_alternate_collector_full_name": null, + "snapshot_alternate_collector_id": null, + "fsp_name": "", + "entitlement_quantity": null, + "entitlement_quantity_usd": null, + "delivered_quantity": null, + "delivered_quantity_usd": null, + "delivery_date": null, + "delivery_type": null, + "status": "Pending", + "status_display": "Pending", + "currency": "PLN", + "fsp_auth_code": "", + "hoh_id": null, + "hoh_unicef_id": null, + "hoh_full_name": null, + "collector_id": "7e849550-2c8d-4be6-a458-566798967acf", + "collector_phone_no": "", + "collector_phone_no_alt": "", + "verification": { + "id": "caad1e0a-2670-457f-87f6-01b59084bde6", + "received_amount": null, + "status": "PENDING", + "payment_verification_plan_unicef_id": "PVP-2", + "verification_channel": "MANUAL", + "admin_url": null, + "version": 1735688653315201, + "is_manually_editable": true + }, + "payment_plan_hard_conflicted": false, + "payment_plan_hard_conflicted_data": [], + "payment_plan_soft_conflicted": false, + "payment_plan_soft_conflicted_data": [], + "people_individual": null, + "program_name": "Program 0", + "program_code": "k4s3", + "collector_type_display": "Primary collector", + "parent": { + "id": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "unicef_id": "PP-BA0000-25-00000001", + "name": null, + "status": "FINISHED", + "total_households_count": 0, + "total_individuals_count": 0, + "currency": null, + "excluded_ids": null, + "total_entitled_quantity": null, + "total_delivered_quantity": null, + "total_undelivered_quantity": null, + "dispersion_start_date": "2025-01-01", + "dispersion_end_date": "2025-01-31", + "is_follow_up": false, + "follow_ups": [], + "created_by": " ", + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "program": { + "id": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "code": "k4s3", + "name": "Program 0", + "status": "ACTIVE", + "screen_beneficiary": false + }, + "version": 1735688653315204, + "background_action_status": null, + "background_action_status_display": null, + "start_date": null, + "end_date": null, + "program_cycle": { + "id": "5dce5825-12bc-401e-9883-5c109be49cd2", + "title": "Programme Cycle 0" + }, + "has_payment_list_export_file": false, + "has_fsp_delivery_mechanism_xlsx_template": false, + "imported_file_name": "", + "imported_file_date": null, + "payments_conflicts_count": 0, + "delivery_mechanism": null, + "volume_by_delivery_mechanism": [ + { + "id": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "delivery_mechanism": null, + "volume": null, + "volume_usd": null + } + ], + "split_choices": [ + { + "name": "By Admin Area 1", + "value": "BY_ADMIN_AREA1" + }, + { + "name": "By Admin Area 2", + "value": "BY_ADMIN_AREA2" + }, + { + "name": "By Admin Area 3", + "value": "BY_ADMIN_AREA3" + }, + { + "name": "By Collector", + "value": "BY_COLLECTOR" + }, + { + "name": "By Records", + "value": "BY_RECORDS" + }, + { + "name": "No Split", + "value": "NO_SPLIT" + } + ], + "exclusion_reason": null, + "exclude_household_error": null, + "bank_reconciliation_success": 0, + "bank_reconciliation_error": 0, + "can_create_payment_verification_plan": false, + "available_payment_records_count": 0, + "reconciliation_summary": { + "delivered_fully": 0, + "delivered_partially": 0, + "not_delivered": 0, + "unsuccessful": 0, + "pending": 1, + "reconciled": 0, + "number_of_payments": 1 + }, + "excluded_households": [], + "excluded_individuals": [], + "can_create_follow_up": false, + "total_withdrawn_households_count": 0, + "unsuccessful_payments_count": 0, + "can_send_to_payment_gateway": false, + "can_split": false, + "supporting_documents": [], + "total_households_count_with_valid_phone_no": 0, + "is_payment_gateway_and_all_sent_to_fsp": false, + "fsp_communication_channel": "XLSX", + "financial_service_provider": null, + "can_export_xlsx": false, + "can_download_xlsx": false, + "can_send_xlsx_password": false, + "approval_process": [], + "total_entitled_quantity_usd": null, + "total_entitled_quantity_revised_usd": null, + "total_delivered_quantity_usd": null, + "total_undelivered_quantity_usd": null, + "male_children_count": 0, + "female_children_count": 0, + "male_adults_count": 0, + "female_adults_count": 0, + "steficon_rule": null, + "source_payment_plan": null, + "exchange_rate": null, + "custom_exchange_rate": false, + "unore_exchange_rate": null, + "eligible_payments_count": 1, + "funds_commitments": null, + "available_funds_commitments": [], + "payment_verification_plans": [ + { + "id": "86a963dd-bae6-4e0a-946a-21bd480d2c93", + "unicef_id": "PVP-2", + "status": "PENDING", + "status_display": "Pending", + "verification_channel": "MANUAL", + "sampling": "Full list", + "sex_filter": null, + "activation_date": null, + "completion_date": null, + "sample_size": null, + "responded_count": null, + "received_count": null, + "not_received_count": null, + "received_with_problems_count": null, + "confidence_interval": null, + "margin_of_error": null, + "xlsx_file_exporting": false, + "xlsx_file_imported": false, + "has_xlsx_file": false, + "xlsx_file_was_downloaded": false, + "error": null, + "age_filter_min": null, + "age_filter_max": null, + "excluded_admin_areas_filter": null, + "rapid_pro_flow_id": "", + "admin_url": "/api/unicorn/payment/paymentverificationplan/86a963dd-bae6-4e0a-946a-21bd480d2c93/change/" + } + ], + "admin_url": "/api/unicorn/payment/paymentplan/20ef167b-8437-4033-b9eb-c2d2deb0d761/change/", + "abort_comment": "", + "flat_amount_value": null + }, + "admin_url": "/api/unicorn/payment/payment/c4446414-01e1-420f-879b-4264a5bd7a32/change/", + "source_payment": null, + "household": { + "id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "unicef_id": "HH-25-0000.0001", + "head_of_household": { + "id": "7e849550-2c8d-4be6-a458-566798967acf", + "full_name": "Person 0", + "full_name_local": null + }, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "program": "Program 0", + "country": "", + "country_origin": "", + "status": "ACTIVE", + "total_cash_received": null, + "total_cash_received_usd": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "has_duplicates": false, + "registration_data_import": { + "id": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "name": "RDI 0", + "status": "MERGED", + "import_date": "2025-01-01T00:00:00Z", + "number_of_individuals": 1, + "number_of_households": 1, + "imported_by": { + "id": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", + "first_name": "", + "last_name": "", + "email": "user_1@example.com", + "username": "user_1" + }, + "data_source": "XLS" + }, + "flex_fields": {}, + "linked_grievances": [], + "admin_area_title": "", + "active_individuals_count": 1, + "geopoint": null, + "import_id": "HH-25-0000.0001", + "admin_url": "/api/unicorn/household/household/b5c8aefa-43e7-46e6-ba43-50031b4f3204/change/", + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "currency": null, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "unhcr_id": "", + "village": "", + "address": "", + "zip_code": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "other_sex_group_count": null, + "start": null, + "deviceid": "", + "fchild_hoh": null, + "child_hoh": null, + "returnee": null, + "size": null, + "residence_status": "None", + "program_registration_id": null, + "delivered_quantities": [ + { + "currency": "USD", + "total_delivered_quantity": "0.00" + }, + { + "currency": "PLN", + "total_delivered_quantity": "0.00" + } + ], + "consent": null, + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "registration_method": "", + "consent_sharing": [], + "roles_in_household": [ + { + "id": "a2553786-3a3c-42e8-b6e3-ff0b6ab6d113", + "individual": { + "id": "7e849550-2c8d-4be6-a458-566798967acf", + "unicef_id": "IND-25-0000.0001" + }, + "role": "PRIMARY" + } + ] + }, + "delivery_mechanism": null, + "collector": { + "id": "7e849550-2c8d-4be6-a458-566798967acf", + "unicef_id": "IND-25-0000.0001", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, + "sex": "MALE", + "age": 35, + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "household": { + "id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "unicef_id": "HH-25-0000.0001", + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "total_cash_received": null, + "total_cash_received_usd": null, + "delivered_quantities": [ + { + "currency": "USD", + "total_delivered_quantity": "0.00" + }, + { + "currency": "PLN", + "total_delivered_quantity": "0.00" + } + ], + "start": null, + "zip_code": null, + "residence_status": "None", + "country_origin": "", + "country": "", + "address": "", + "village": "", + "geopoint": null, + "import_id": "HH-25-0000.0001", + "program_code": "k4s3" + }, + "role": "PRIMARY", + "relationship": "", + "registration_data_import": { + "id": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "name": "RDI 0", + "status": "MERGED", + "import_date": "2025-01-01T00:00:00Z", + "number_of_individuals": 1, + "number_of_households": 1, + "imported_by": { + "id": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", + "first_name": "", + "last_name": "", + "email": "user_1@example.com", + "username": "user_1" + }, + "data_source": "XLS" + }, + "import_id": "IND-25-0000.0001", + "admin_url": "/api/unicorn/household/individual/7e849550-2c8d-4be6-a458-566798967acf/change/", + "preferred_language": null, + "roles_in_households": [ + { + "id": "a2553786-3a3c-42e8-b6e3-ff0b6ab6d113", + "household": { + "id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "unicef_id": "HH-25-0000.0001", + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "total_cash_received": null, + "total_cash_received_usd": null, + "delivered_quantities": [ + { + "currency": "USD", + "total_delivered_quantity": "0.00" + }, + { + "currency": "PLN", + "total_delivered_quantity": "0.00" + } + ], + "start": null, + "zip_code": null, + "residence_status": "None", + "country_origin": "", + "country": "", + "address": "", + "village": "", + "geopoint": null, + "import_id": "HH-25-0000.0001", + "program_code": "k4s3" + }, + "role": "PRIMARY" + } + ], + "observed_disability": [ + "NONE" + ], + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "disability": "not disabled", + "documents": [], + "identities": [], + "accounts": [], + "email": "", + "phone_no": "", + "phone_no_valid": false, + "phone_no_alternative": "", + "phone_no_alternative_valid": false, + "sanction_list_last_check": null, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "status": "ACTIVE", + "deduplication_golden_record_status": "UNIQUE", + "flex_fields": {}, + "linked_grievances": [], + "photo": null, + "biometric_deduplication_golden_record_status": "Not Processed", + "linked_grievances_biometrics": [], + "enrolled_in_nutrition_programme": null, + "who_answers_phone": "", + "who_answers_alt_phone": "", + "payment_delivery_phone_no": null, + "identification_key": null, + "identification_key_label": null + }, + "reason_for_unsuccessful_payment": null, + "additional_document_number": null, + "additional_document_type": null, + "additional_collector_name": null, + "transaction_reference_id": null, + "snapshot_collector_account_data": null, + "extras": {}, + "sent_to_fsp_date": null + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json new file mode 100644 index 00000000000..90652ab7342 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json @@ -0,0 +1,46 @@ +{ + "business_area": { + "master": { + "model": "core.businessarea", + "pk": "1398facd-cd19-44db-8026-84d32d494ad4", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json new file mode 100644 index 00000000000..c65928636b6 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json @@ -0,0 +1,388 @@ +{ + "household": { + "master": { + "model": "household.household", + "pk": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315202, + "unicef_id": "HH-25-0000.0001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "household_collection": null, + "storage_obj": null, + "copied_from": null, + "country_origin": null, + "country": null, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "head_of_household": "7e849550-2c8d-4be6-a458-566798967acf", + "facility": null, + "consent_sign": "", + "consent": null, + "consent_sharing": "", + "residence_status": "", + "address": "", + "zip_code": null, + "size": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "children_count": null, + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "male_children_disabled_count": null, + "female_children_disabled_count": null, + "other_sex_group_count": null, + "unknown_sex_group_count": null, + "returnee": null, + "fchild_hoh": null, + "child_hoh": null, + "village": "", + "currency_old": "", + "currency": null, + "unhcr_id": "", + "detail_id": null, + "originating_id": null, + "start": null, + "registration_method": "", + "family_id": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "collect_type": "STANDARD", + "program_registration_id": null, + "total_cash_received_usd": null, + "total_cash_received": null, + "flex_fields": {}, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "withdrawn": false, + "withdrawn_date": null, + "longitude": null, + "latitude": null, + "deviceid": "", + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "kobo_submission_uuid": null, + "kobo_submission_time": null, + "enumerator_rec_id": null, + "flex_registrations_record_id": null, + "identification_key": null, + "extra_rdis": [] + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "1398facd-cd19-44db-8026-84d32d494ad4", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.program", + "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315203, + "data_collecting_type": 1, + "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "name": "Program 0", + "code": "k4s3", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 1, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 1 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 5, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 5, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.individual", + "pk": "7e849550-2c8d-4be6-a458-566798967acf", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "unicef_id": "IND-25-0000.0001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json new file mode 100644 index 00000000000..89b7b6e68f5 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json @@ -0,0 +1,404 @@ +{ + "household_role": { + "master": { + "model": "household.individualroleinhousehold", + "pk": "a2553786-3a3c-42e8-b6e3-ff0b6ab6d113", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "individual": "7e849550-2c8d-4be6-a458-566798967acf", + "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "role": "PRIMARY", + "copied_from": null + } + }, + "deps": [ + { + "model": "household.individual", + "pk": "7e849550-2c8d-4be6-a458-566798967acf", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315201, + "unicef_id": "IND-25-0000.0001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + }, + { + "model": "core.businessarea", + "pk": "1398facd-cd19-44db-8026-84d32d494ad4", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.program", + "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315204, + "data_collecting_type": 1, + "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "name": "Program 0", + "code": "k4s3", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 1, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 1 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315201, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 5, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 5, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.household", + "pk": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315203, + "unicef_id": "HH-25-0000.0001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "household_collection": null, + "storage_obj": null, + "copied_from": null, + "country_origin": null, + "country": null, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "head_of_household": "7e849550-2c8d-4be6-a458-566798967acf", + "facility": null, + "consent_sign": "", + "consent": null, + "consent_sharing": "", + "residence_status": "", + "address": "", + "zip_code": null, + "size": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "children_count": null, + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "male_children_disabled_count": null, + "female_children_disabled_count": null, + "other_sex_group_count": null, + "unknown_sex_group_count": null, + "returnee": null, + "fchild_hoh": null, + "child_hoh": null, + "village": "", + "currency_old": "", + "currency": null, + "unhcr_id": "", + "detail_id": null, + "originating_id": null, + "start": null, + "registration_method": "", + "family_id": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "collect_type": "STANDARD", + "program_registration_id": null, + "total_cash_received_usd": null, + "total_cash_received": null, + "flex_fields": {}, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "withdrawn": false, + "withdrawn_date": null, + "longitude": null, + "latitude": null, + "deviceid": "", + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "kobo_submission_uuid": null, + "kobo_submission_time": null, + "enumerator_rec_id": null, + "flex_registrations_record_id": null, + "identification_key": null, + "extra_rdis": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json new file mode 100644 index 00000000000..a606e8fec46 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json @@ -0,0 +1,245 @@ +{ + "payment_plan": { + "master": { + "model": "payment.paymentplan", + "pk": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315201, + "unicef_id": "PP-BA0000-25-00000001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program_cycle": "5dce5825-12bc-401e-9883-5c109be49cd2", + "delivery_mechanism": null, + "financial_service_provider": null, + "imported_file": null, + "export_file_entitlement": null, + "export_file_per_fsp": null, + "export_pdf_file_summary": null, + "reconciliation_import_file": null, + "steficon_rule": null, + "steficon_rule_targeting": null, + "created_by": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "source_payment_plan": null, + "storage_file": null, + "name": null, + "start_date": null, + "end_date": null, + "currency_old": null, + "currency": null, + "dispersion_start_date": "2025-01-01", + "dispersion_end_date": "2025-01-31", + "excluded_ids": null, + "exclusion_reason": null, + "vulnerability_score_min": null, + "vulnerability_score_max": null, + "abort_comment": "", + "flat_amount_value": null, + "status": "FINISHED", + "background_action_status": null, + "build_status": null, + "built_at": null, + "exchange_rate": null, + "custom_exchange_rate": false, + "custom_exchange_rate_set_by": null, + "female_children_count": 0, + "male_children_count": 0, + "female_adults_count": 0, + "male_adults_count": 0, + "total_households_count": 0, + "total_individuals_count": 0, + "imported_file_date": null, + "total_entitled_quantity": null, + "total_entitled_quantity_usd": null, + "total_entitled_quantity_revised": null, + "total_entitled_quantity_revised_usd": null, + "total_delivered_quantity": null, + "total_delivered_quantity_usd": null, + "total_undelivered_quantity": null, + "total_undelivered_quantity_usd": null, + "steficon_targeting_applied_date": null, + "steficon_applied_date": null, + "is_follow_up": false, + "exclude_household_error": null, + "status_date": "2025-01-01T00:00:00Z", + "is_cash_assist": false, + "flag_exclude_if_active_adjudication_ticket": false, + "flag_exclude_if_on_sanction_list": false + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "1398facd-cd19-44db-8026-84d32d494ad4", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.programcycle", + "pk": "5dce5825-12bc-401e-9883-5c109be49cd2", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "unicef_id": "PC-BA0000-25-000001", + "title": "Programme Cycle 0", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "status": "ACTIVE", + "start_date": "2025-01-01", + "end_date": null, + "created_by": null + } + }, + { + "model": "program.program", + "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315201, + "data_collecting_type": 1, + "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "name": "Program 0", + "code": "k4s3", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 1, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 1 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "account.user", + "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 3, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 3, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json new file mode 100644 index 00000000000..c4560bc194a --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json @@ -0,0 +1,617 @@ +{ + "payment_verification": { + "master": { + "model": "payment.paymentverification", + "pk": "caad1e0a-2670-457f-87f6-01b59084bde6", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "payment": "c4446414-01e1-420f-879b-4264a5bd7a32", + "payment_verification_plan": "86a963dd-bae6-4e0a-946a-21bd480d2c93", + "status": "PENDING", + "status_date": "2025-01-01T00:00:00Z", + "received_amount": null, + "sent_to_rapid_pro": false + } + }, + "deps": [ + { + "model": "payment.payment", + "pk": "c4446414-01e1-420f-879b-4264a5bd7a32", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "unicef_id": "RCPT-BA0000-25-0.000.001", + "signature_hash": "1aa0ca0ed5a8c2481ef01a7c11db83dd4bac3517", + "internal_data": {}, + "parent": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "parent_split": null, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": null, + "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "head_of_household": null, + "delivery_type": null, + "financial_service_provider": null, + "collector": "7e849550-2c8d-4be6-a458-566798967acf", + "collector_type": "PRIMARY", + "source_payment": null, + "is_follow_up": false, + "status": "Pending", + "status_date": "2025-01-01T00:00:00Z", + "currency_old": null, + "currency": 111, + "entitlement_quantity": null, + "entitlement_quantity_usd": null, + "entitlement_date": null, + "delivered_quantity": null, + "delivered_quantity_usd": null, + "delivery_date": null, + "transaction_reference_id": null, + "transaction_status_blockchain_link": null, + "conflicted": false, + "excluded": false, + "has_valid_wallet": true, + "reason_for_unsuccessful_payment": null, + "order_number": null, + "token_number": null, + "additional_collector_name": null, + "additional_document_type": null, + "additional_document_number": null, + "fsp_auth_code": null, + "extras": {}, + "vulnerability_score": null, + "is_cash_assist": false, + "sent_to_fsp_date": null + } + }, + { + "model": "payment.paymentplan", + "pk": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315203, + "unicef_id": "PP-BA0000-25-00000001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program_cycle": "5dce5825-12bc-401e-9883-5c109be49cd2", + "delivery_mechanism": null, + "financial_service_provider": null, + "imported_file": null, + "export_file_entitlement": null, + "export_file_per_fsp": null, + "export_pdf_file_summary": null, + "reconciliation_import_file": null, + "steficon_rule": null, + "steficon_rule_targeting": null, + "created_by": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "source_payment_plan": null, + "storage_file": null, + "name": null, + "start_date": null, + "end_date": null, + "currency_old": null, + "currency": null, + "dispersion_start_date": "2025-01-01", + "dispersion_end_date": "2025-01-31", + "excluded_ids": null, + "exclusion_reason": null, + "vulnerability_score_min": null, + "vulnerability_score_max": null, + "abort_comment": "", + "flat_amount_value": null, + "status": "FINISHED", + "background_action_status": null, + "build_status": null, + "built_at": null, + "exchange_rate": null, + "custom_exchange_rate": false, + "custom_exchange_rate_set_by": null, + "female_children_count": 0, + "male_children_count": 0, + "female_adults_count": 0, + "male_adults_count": 0, + "total_households_count": 0, + "total_individuals_count": 0, + "imported_file_date": null, + "total_entitled_quantity": null, + "total_entitled_quantity_usd": null, + "total_entitled_quantity_revised": null, + "total_entitled_quantity_revised_usd": null, + "total_delivered_quantity": null, + "total_delivered_quantity_usd": null, + "total_undelivered_quantity": null, + "total_undelivered_quantity_usd": null, + "steficon_targeting_applied_date": null, + "steficon_applied_date": null, + "is_follow_up": false, + "exclude_household_error": null, + "status_date": "2025-01-01T00:00:00Z", + "is_cash_assist": false, + "flag_exclude_if_active_adjudication_ticket": false, + "flag_exclude_if_on_sanction_list": false + } + }, + { + "model": "core.businessarea", + "pk": "1398facd-cd19-44db-8026-84d32d494ad4", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.programcycle", + "pk": "5dce5825-12bc-401e-9883-5c109be49cd2", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315202, + "unicef_id": "PC-BA0000-25-000001", + "title": "Programme Cycle 0", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "status": "ACTIVE", + "start_date": "2025-01-01", + "end_date": null, + "created_by": null + } + }, + { + "model": "program.program", + "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315205, + "data_collecting_type": 1, + "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "name": "Program 0", + "code": "k4s3", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 1, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 1 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "account.user", + "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 3, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 3, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.household", + "pk": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315204, + "unicef_id": "HH-25-0000.0001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "household_collection": null, + "storage_obj": null, + "copied_from": null, + "country_origin": null, + "country": null, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "head_of_household": "7e849550-2c8d-4be6-a458-566798967acf", + "facility": null, + "consent_sign": "", + "consent": null, + "consent_sharing": "", + "residence_status": "", + "address": "", + "zip_code": null, + "size": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "children_count": null, + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "male_children_disabled_count": null, + "female_children_disabled_count": null, + "other_sex_group_count": null, + "unknown_sex_group_count": null, + "returnee": null, + "fchild_hoh": null, + "child_hoh": null, + "village": "", + "currency_old": "", + "currency": null, + "unhcr_id": "", + "detail_id": null, + "originating_id": null, + "start": null, + "registration_method": "", + "family_id": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "collect_type": "STANDARD", + "program_registration_id": null, + "total_cash_received_usd": null, + "total_cash_received": null, + "flex_fields": {}, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "withdrawn": false, + "withdrawn_date": null, + "longitude": null, + "latitude": null, + "deviceid": "", + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "kobo_submission_uuid": null, + "kobo_submission_time": null, + "enumerator_rec_id": null, + "flex_registrations_record_id": null, + "identification_key": null, + "extra_rdis": [] + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315202, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 5, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 5, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.individual", + "pk": "7e849550-2c8d-4be6-a458-566798967acf", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315202, + "unicef_id": "IND-25-0000.0001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", + "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_local": null, + "given_name_local": null, + "middle_name_local": null, + "family_name_local": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + }, + { + "model": "core.currency", + "pk": 111, + "fields": { + "code": "PLN", + "name": "Polish z\u0142oty", + "is_crypto": false + } + }, + { + "model": "payment.paymentverificationplan", + "pk": "86a963dd-bae6-4e0a-946a-21bd480d2c93", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "unicef_id": "PVP-1", + "payment_plan": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "status": "PENDING", + "verification_channel": "MANUAL", + "sampling": "FULL_LIST", + "sex_filter": null, + "activation_date": null, + "completion_date": null, + "sample_size": null, + "responded_count": null, + "received_count": null, + "not_received_count": null, + "received_with_problems_count": null, + "confidence_interval": null, + "margin_of_error": null, + "rapid_pro_flow_id": "", + "rapid_pro_flow_start_uuids": "[]", + "xlsx_file_exporting": false, + "xlsx_file_imported": false, + "error": null, + "age_filter": null, + "excluded_admin_areas_filter": null + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json new file mode 100644 index 00000000000..c5ccceaee64 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json @@ -0,0 +1,257 @@ +{ + "payment_verification_summary": { + "master": { + "model": "payment.paymentverificationsummary", + "pk": "7814916d-99d3-4ed4-83b0-893cf25258e6", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "status": "PENDING", + "activation_date": null, + "completion_date": null, + "payment_plan": "20ef167b-8437-4033-b9eb-c2d2deb0d761" + } + }, + "deps": [ + { + "model": "payment.paymentplan", + "pk": "20ef167b-8437-4033-b9eb-c2d2deb0d761", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315202, + "unicef_id": "PP-BA0000-25-00000001", + "internal_data": {}, + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "program_cycle": "5dce5825-12bc-401e-9883-5c109be49cd2", + "delivery_mechanism": null, + "financial_service_provider": null, + "imported_file": null, + "export_file_entitlement": null, + "export_file_per_fsp": null, + "export_pdf_file_summary": null, + "reconciliation_import_file": null, + "steficon_rule": null, + "steficon_rule_targeting": null, + "created_by": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "source_payment_plan": null, + "storage_file": null, + "name": null, + "start_date": null, + "end_date": null, + "currency_old": null, + "currency": null, + "dispersion_start_date": "2025-01-01", + "dispersion_end_date": "2025-01-31", + "excluded_ids": null, + "exclusion_reason": null, + "vulnerability_score_min": null, + "vulnerability_score_max": null, + "abort_comment": "", + "flat_amount_value": null, + "status": "FINISHED", + "background_action_status": null, + "build_status": null, + "built_at": null, + "exchange_rate": null, + "custom_exchange_rate": false, + "custom_exchange_rate_set_by": null, + "female_children_count": 0, + "male_children_count": 0, + "female_adults_count": 0, + "male_adults_count": 0, + "total_households_count": 0, + "total_individuals_count": 0, + "imported_file_date": null, + "total_entitled_quantity": null, + "total_entitled_quantity_usd": null, + "total_entitled_quantity_revised": null, + "total_entitled_quantity_revised_usd": null, + "total_delivered_quantity": null, + "total_delivered_quantity_usd": null, + "total_undelivered_quantity": null, + "total_undelivered_quantity_usd": null, + "steficon_targeting_applied_date": null, + "steficon_applied_date": null, + "is_follow_up": false, + "exclude_household_error": null, + "status_date": "2025-01-01T00:00:00Z", + "is_cash_assist": false, + "flag_exclude_if_active_adjudication_ticket": false, + "flag_exclude_if_on_sanction_list": false + } + }, + { + "model": "core.businessarea", + "pk": "1398facd-cd19-44db-8026-84d32d494ad4", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.programcycle", + "pk": "5dce5825-12bc-401e-9883-5c109be49cd2", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315201, + "unicef_id": "PC-BA0000-25-000001", + "title": "Programme Cycle 0", + "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "status": "ACTIVE", + "start_date": "2025-01-01", + "end_date": null, + "created_by": null + } + }, + { + "model": "program.program", + "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315202, + "data_collecting_type": 1, + "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "name": "Program 0", + "code": "k4s3", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 1, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 1 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "account.user", + "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 3, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 3, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json new file mode 100644 index 00000000000..00dabcb6124 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json @@ -0,0 +1,121 @@ +{ + "program": { + "master": { + "model": "program.program", + "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "data_collecting_type": 1, + "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "name": "Program 0", + "code": "k4s3", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + "deps": [ + { + "model": "core.datacollectingtype", + "pk": 1, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 1 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "core.businessarea", + "pk": "1398facd-cd19-44db-8026-84d32d494ad4", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json new file mode 100644 index 00000000000..ef3f8fbd0af --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json @@ -0,0 +1,17 @@ +{ + "role": { + "master": { + "model": "account.role", + "pk": "d2d2362a-e518-4317-a580-e975514f887c", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json new file mode 100644 index 00000000000..247de40971f --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json @@ -0,0 +1,113 @@ +{ + "role_assignment": { + "master": { + "model": "account.roleassignment", + "pk": "8c5ba434-abaa-4eb1-928f-a3288db28777", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", + "user": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "partner": null, + "role": "d2d2362a-e518-4317-a580-e975514f887c", + "program": null, + "expiry_date": null, + "group": null + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "1398facd-cd19-44db-8026-84d32d494ad4", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "account.user", + "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 3, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 3, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "account.role", + "pk": "d2d2362a-e518-4317-a580-e975514f887c", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json new file mode 100644 index 00000000000..afd34a07c2c --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json @@ -0,0 +1,45 @@ +{ + "superuser": { + "master": { + "model": "account.user", + "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 3, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + "deps": [ + { + "model": "account.partner", + "pk": 3, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file From bb3ca09addabf5641e32ef2fc1a97f4496290332 Mon Sep 17 00:00:00 2001 From: Maciej Szewczyk Date: Tue, 21 Apr 2026 17:21:12 +0200 Subject: [PATCH 10/33] displayName with latin --- .../src/components/grievances/FlagDetails.tsx | 4 +-- .../LookUpDelegate/LookUpDelegateDisplay.tsx | 4 +-- .../LookUpIndividualTableRow.tsx | 4 +-- .../NeedsAdjudicationTable.tsx | 4 +-- .../components/payments/IndividualDetails.tsx | 4 +-- .../people/PeopleBioData/PeopleBioData.tsx | 10 +++---- .../HouseholdDetails/HouseholdDetails.tsx | 4 +-- .../IndividualBioData/IndividualBioData.tsx | 10 +++---- .../RegistrationIndividualBioData.tsx | 10 +++---- .../RecipientsTable/RecipientsTableRow.tsx | 4 +-- .../RecipientsTable/RecipientsTableRow.tsx | 4 +-- .../PaymentsTable/PaymentsTableRow.tsx | 6 ++-- .../PeopleListTable/PeopleListTableRow.tsx | 4 +-- .../CollectorsTable/CollectorsTable.tsx | 4 +-- .../HouseholdMembersTable.tsx | 4 +-- .../IndividualsListTableRow.tsx | 4 +-- .../ImportedIndividualsTableRow.tsx | 4 +-- .../ImportedPeopleTableRow.tsx | 4 +-- .../TargetPopulationHouseholdRow.tsx | 4 +-- .../TargetPopulationPeopleRow.tsx | 4 +-- .../src/utils/{utils.ts => utils.tsx} | 29 +++++++++++++++---- 21 files changed, 73 insertions(+), 56 deletions(-) rename src/frontend/src/utils/{utils.ts => utils.tsx} (98%) diff --git a/src/frontend/src/components/grievances/FlagDetails.tsx b/src/frontend/src/components/grievances/FlagDetails.tsx index 16a63962235..ffecd38ed2d 100644 --- a/src/frontend/src/components/grievances/FlagDetails.tsx +++ b/src/frontend/src/components/grievances/FlagDetails.tsx @@ -8,7 +8,7 @@ import { TableRow, Typography, } from '@mui/material'; -import { displayNameWithLocal } from '@utils/utils'; +import { displayNameWithLatin } from '@utils/utils'; import styled from 'styled-components'; import moment from 'moment'; import { useTranslation } from 'react-i18next'; @@ -133,7 +133,7 @@ export const FlagDetails = ({ - - {displayNameWithLocal(details.goldenRecordsIndividual, 'fullName')} + {displayNameWithLatin(details.goldenRecordsIndividual, 'fullName')} diff --git a/src/frontend/src/components/grievances/LookUps/LookUpDelegate/LookUpDelegateDisplay.tsx b/src/frontend/src/components/grievances/LookUps/LookUpDelegate/LookUpDelegateDisplay.tsx index f2455ef3e35..53ad7ac8ecb 100644 --- a/src/frontend/src/components/grievances/LookUps/LookUpDelegate/LookUpDelegateDisplay.tsx +++ b/src/frontend/src/components/grievances/LookUps/LookUpDelegate/LookUpDelegateDisplay.tsx @@ -3,7 +3,7 @@ import DeleteIcon from '@mui/icons-material/Delete'; import EditIcon from '@mui/icons-material/Edit'; import { useTranslation } from 'react-i18next'; import { BlueText, DarkGrey, LightGrey, StyledBox } from '../LookUpStyles'; -import { displayNameWithLocal } from '@utils/utils'; +import { displayNameWithLatin } from '@utils/utils'; import { ReactElement } from 'react'; interface LookUpDelegateDisplayProps { @@ -33,7 +33,7 @@ export const LookUpDelegateDisplay = ({ {t('Delegate')}: {values.selectedDelegate?.unicefId || - displayNameWithLocal(values.selectedDelegate, 'fullName') || + displayNameWithLatin(values.selectedDelegate, 'fullName') || '-'} diff --git a/src/frontend/src/components/grievances/LookUps/LookUpIndividualTable/LookUpIndividualTableRow.tsx b/src/frontend/src/components/grievances/LookUps/LookUpIndividualTable/LookUpIndividualTableRow.tsx index b94647ec730..c9faa9223be 100644 --- a/src/frontend/src/components/grievances/LookUps/LookUpIndividualTable/LookUpIndividualTableRow.tsx +++ b/src/frontend/src/components/grievances/LookUps/LookUpIndividualTable/LookUpIndividualTableRow.tsx @@ -5,7 +5,7 @@ import { useBaseUrl } from '@hooks/useBaseUrl'; import { Radio } from '@mui/material'; import TableCell from '@mui/material/TableCell'; import { IndividualList } from '@restgenerated/models/IndividualList'; -import { displayNameWithLocal, sexToCapitalize } from '@utils/utils'; +import { displayNameWithLatin, sexToCapitalize } from '@utils/utils'; import { ReactElement } from 'react'; import { useProgramContext } from 'src/programContext'; @@ -54,7 +54,7 @@ export function LookUpIndividualTableRow({ {individual.unicefId || '-'} )} - {displayNameWithLocal(individual, 'fullName')} + {displayNameWithLatin(individual, 'fullName')} {!isSocialDctType && ( {individual.household ? individual.household.unicefId : '-'} diff --git a/src/frontend/src/components/grievances/NeedsAdjudication/NeedsAdjudicationTable.tsx b/src/frontend/src/components/grievances/NeedsAdjudication/NeedsAdjudicationTable.tsx index 1e3855203e4..83ed1e490cd 100644 --- a/src/frontend/src/components/grievances/NeedsAdjudication/NeedsAdjudicationTable.tsx +++ b/src/frontend/src/components/grievances/NeedsAdjudication/NeedsAdjudicationTable.tsx @@ -1,6 +1,6 @@ import { ChangeEvent } from 'react'; import { BlackLink } from '@core/BlackLink'; -import { displayNameWithLocal } from '@utils/utils'; +import { displayNameWithLatin } from '@utils/utils'; import { UniversalMoment } from '@core/UniversalMoment'; import PeopleIcon from '@mui/icons-material/People'; import PersonIcon from '@mui/icons-material/Person'; @@ -158,7 +158,7 @@ export const NeedsAdjudicationTable = ({ )} - {displayNameWithLocal(possibleDuplicate, 'fullName')} + {displayNameWithLatin(possibleDuplicate, 'fullName')} {possibleDuplicate?.sex} diff --git a/src/frontend/src/components/payments/IndividualDetails.tsx b/src/frontend/src/components/payments/IndividualDetails.tsx index 425e0801b80..36aee283b0c 100644 --- a/src/frontend/src/components/payments/IndividualDetails.tsx +++ b/src/frontend/src/components/payments/IndividualDetails.tsx @@ -3,7 +3,7 @@ import { Overview } from '@components/payments/Overview'; import { Title } from '@core/Title'; import { Grid, Typography } from '@mui/material'; import { LabelizedField } from '@core/LabelizedField'; -import { displayNameWithLocal, getPhoneNoLabel } from '@utils/utils'; +import { displayNameWithLatin, getPhoneNoLabel } from '@utils/utils'; import { useProgramContext } from 'src/programContext'; import { ReactElement } from 'react'; @@ -29,7 +29,7 @@ export const IndividualDetails = ({ individual }): ReactElement => { diff --git a/src/frontend/src/components/people/PeopleBioData/PeopleBioData.tsx b/src/frontend/src/components/people/PeopleBioData/PeopleBioData.tsx index 87ef73e509a..4d7da3cdd15 100644 --- a/src/frontend/src/components/people/PeopleBioData/PeopleBioData.tsx +++ b/src/frontend/src/components/people/PeopleBioData/PeopleBioData.tsx @@ -6,7 +6,7 @@ import { DisabilityEnum } from '@restgenerated/models/DisabilityEnum'; import { IndividualDetail } from '@restgenerated/models/IndividualDetail'; import { choicesToDict, - displayNameWithLocal, + displayNameWithLatin, formatAge, getPhoneNoLabel, renderBoolean, @@ -286,22 +286,22 @@ export const PeopleBioData = ({ - {displayNameWithLocal(individual, 'fullName')} + {displayNameWithLatin(individual, 'fullName')} - {displayNameWithLocal(individual, 'givenName')} + {displayNameWithLatin(individual, 'givenName')} - {displayNameWithLocal(individual, 'middleName')} + {displayNameWithLatin(individual, 'middleName')} - {displayNameWithLocal(individual, 'familyName')} + {displayNameWithLatin(individual, 'familyName')} diff --git a/src/frontend/src/components/population/HouseholdDetails/HouseholdDetails.tsx b/src/frontend/src/components/population/HouseholdDetails/HouseholdDetails.tsx index 6db7e269045..eeececc6965 100644 --- a/src/frontend/src/components/population/HouseholdDetails/HouseholdDetails.tsx +++ b/src/frontend/src/components/population/HouseholdDetails/HouseholdDetails.tsx @@ -5,7 +5,7 @@ import { Title } from '@core/Title'; import { Box, Grid, Theme, Typography } from '@mui/material'; import { GrievanceChoices } from '@restgenerated/models/GrievanceChoices'; import { HouseholdDetail } from '@restgenerated/models/HouseholdDetail'; -import { displayNameWithLocal, formatCurrencyWithSymbol } from '@utils/utils'; +import { displayNameWithLatin, formatCurrencyWithSymbol } from '@utils/utils'; import { ReactElement } from 'react'; import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; @@ -72,7 +72,7 @@ export function HouseholdDetails({ - {displayNameWithLocal(household?.headOfHousehold, 'fullName')} + {displayNameWithLatin(household?.headOfHousehold, 'fullName')} diff --git a/src/frontend/src/components/population/IndividualBioData/IndividualBioData.tsx b/src/frontend/src/components/population/IndividualBioData/IndividualBioData.tsx index d3b90cc1f13..6b431ce8dc3 100644 --- a/src/frontend/src/components/population/IndividualBioData/IndividualBioData.tsx +++ b/src/frontend/src/components/population/IndividualBioData/IndividualBioData.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; import { choicesToDict, - displayNameWithLocal, + displayNameWithLatin, formatAge, getPhoneNoLabel, renderBoolean, @@ -204,22 +204,22 @@ export const IndividualBioData = ({ - {displayNameWithLocal(individual, 'fullName')} + {displayNameWithLatin(individual, 'fullName')} - {displayNameWithLocal(individual, 'givenName')} + {displayNameWithLatin(individual, 'givenName')} - {displayNameWithLocal(individual, 'middleName')} + {displayNameWithLatin(individual, 'middleName')} - {displayNameWithLocal(individual, 'familyName')} + {displayNameWithLatin(individual, 'familyName')} diff --git a/src/frontend/src/components/rdi/details/individual/RegistrationIndividualBioData/RegistrationIndividualBioData.tsx b/src/frontend/src/components/rdi/details/individual/RegistrationIndividualBioData/RegistrationIndividualBioData.tsx index 396b72f9820..cf176ec3d40 100644 --- a/src/frontend/src/components/rdi/details/individual/RegistrationIndividualBioData/RegistrationIndividualBioData.tsx +++ b/src/frontend/src/components/rdi/details/individual/RegistrationIndividualBioData/RegistrationIndividualBioData.tsx @@ -8,7 +8,7 @@ import { IndividualChoices } from '@restgenerated/models/IndividualChoices'; import { IndividualDetail } from '@restgenerated/models/IndividualDetail'; import { choicesToDict, - displayNameWithLocal, + displayNameWithLatin, formatAge, getPhoneNoLabel, renderBoolean, @@ -102,22 +102,22 @@ export function RegistrationIndividualBioData({ - {displayNameWithLocal(individual, 'fullName')} + {displayNameWithLatin(individual, 'fullName')} - {displayNameWithLocal(individual, 'givenName')} + {displayNameWithLatin(individual, 'givenName')} - {displayNameWithLocal(individual, 'middleName')} + {displayNameWithLatin(individual, 'middleName')} - {displayNameWithLocal(individual, 'familyName')} + {displayNameWithLatin(individual, 'familyName')} diff --git a/src/frontend/src/containers/tables/Communication/RecipientsTable/RecipientsTableRow.tsx b/src/frontend/src/containers/tables/Communication/RecipientsTable/RecipientsTableRow.tsx index b69e3f71e31..cef5cc9c124 100644 --- a/src/frontend/src/containers/tables/Communication/RecipientsTable/RecipientsTableRow.tsx +++ b/src/frontend/src/containers/tables/Communication/RecipientsTable/RecipientsTableRow.tsx @@ -7,7 +7,7 @@ import { useBaseUrl } from '@hooks/useBaseUrl'; import TableCell from '@mui/material/TableCell'; import { HeadOfHousehold } from '@restgenerated/models/HeadOfHousehold'; import { Recipient } from '@restgenerated/models/Recipient'; -import { displayNameWithLocal, householdStatusToColor } from '@utils/utils'; +import { displayNameWithLatin, householdStatusToColor } from '@utils/utils'; import { ReactElement } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -45,7 +45,7 @@ export const RecipientsTableRow = ({ statusToColor={householdStatusToColor} /> - {displayNameWithLocal(headOfHousehold, 'fullName')} + {displayNameWithLatin(headOfHousehold, 'fullName')} {household.size} {household.admin2?.name || '-'} {household.residenceStatus} diff --git a/src/frontend/src/containers/tables/Surveys/RecipientsTable/RecipientsTableRow.tsx b/src/frontend/src/containers/tables/Surveys/RecipientsTable/RecipientsTableRow.tsx index 7e050bba2e5..7353088b2c9 100644 --- a/src/frontend/src/containers/tables/Surveys/RecipientsTable/RecipientsTableRow.tsx +++ b/src/frontend/src/containers/tables/Surveys/RecipientsTable/RecipientsTableRow.tsx @@ -7,7 +7,7 @@ import { useBaseUrl } from '@hooks/useBaseUrl'; import TableCell from '@mui/material/TableCell'; import { HeadOfHousehold } from '@restgenerated/models/HeadOfHousehold'; import { Recipient } from '@restgenerated/models/Recipient'; -import { displayNameWithLocal, householdStatusToColor } from '@utils/utils'; +import { displayNameWithLatin, householdStatusToColor } from '@utils/utils'; import { ReactElement } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -46,7 +46,7 @@ export const RecipientsTableRow = ({ statusToColor={householdStatusToColor} /> - {displayNameWithLocal(headOfHousehold, 'fullName')} + {displayNameWithLatin(headOfHousehold, 'fullName')} {household.size} {household.admin2?.name || '-'} {household.residenceStatus} diff --git a/src/frontend/src/containers/tables/paymentmodule/PaymentsTable/PaymentsTableRow.tsx b/src/frontend/src/containers/tables/paymentmodule/PaymentsTable/PaymentsTableRow.tsx index fee94a1d805..b42545b5e57 100644 --- a/src/frontend/src/containers/tables/paymentmodule/PaymentsTable/PaymentsTableRow.tsx +++ b/src/frontend/src/containers/tables/paymentmodule/PaymentsTable/PaymentsTableRow.tsx @@ -8,7 +8,7 @@ import ErrorOutlineRoundedIcon from '@mui/icons-material/ErrorOutlineRounded'; import TableCell from '@mui/material/TableCell'; import { PaymentList } from '@restgenerated/models/PaymentList'; import { - displayNameWithLocal, + displayNameWithLatin, formatCurrencyWithSymbol, opacityToHex, paymentStatusDisplayMap, @@ -153,10 +153,10 @@ export function PaymentsTableRow({ {canViewDetails ? ( - {displayNameWithLocal(payment.peopleIndividual, 'fullName')} + {displayNameWithLatin(payment.peopleIndividual, 'fullName')} ) : ( - displayNameWithLocal(payment.peopleIndividual, 'fullName') + displayNameWithLatin(payment.peopleIndividual, 'fullName') )} diff --git a/src/frontend/src/containers/tables/people/PeopleListTable/PeopleListTableRow.tsx b/src/frontend/src/containers/tables/people/PeopleListTable/PeopleListTableRow.tsx index 23ccb8c26ad..5aa21c79d56 100644 --- a/src/frontend/src/containers/tables/people/PeopleListTable/PeopleListTableRow.tsx +++ b/src/frontend/src/containers/tables/people/PeopleListTable/PeopleListTableRow.tsx @@ -7,7 +7,7 @@ import { useBaseUrl } from '@hooks/useBaseUrl'; import TableCell from '@mui/material/TableCell'; import { IndividualList } from '@restgenerated/models/IndividualList'; import { RelationshipEnum } from '@restgenerated/models/RelationshipEnum'; -import { displayNameWithLocal, individualStatusToColor, sexToCapitalize } from '@utils/utils'; +import { displayNameWithLatin, individualStatusToColor, sexToCapitalize } from '@utils/utils'; import { ReactElement } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; @@ -44,7 +44,7 @@ export const PeopleListTableRow = ({ {individual.unicefId} - {displayNameWithLocal(individual, 'fullName')} + {displayNameWithLatin(individual, 'fullName')} {roleChoicesDict[row.role]} - {displayNameWithLocal(row, 'fullName')} + {displayNameWithLatin(row, 'fullName')} {renderRelationship()} ); diff --git a/src/frontend/src/containers/tables/population/HouseholdMembersTable/HouseholdMembersTable.tsx b/src/frontend/src/containers/tables/population/HouseholdMembersTable/HouseholdMembersTable.tsx index f0cde47389c..5fa3db49404 100644 --- a/src/frontend/src/containers/tables/population/HouseholdMembersTable/HouseholdMembersTable.tsx +++ b/src/frontend/src/containers/tables/population/HouseholdMembersTable/HouseholdMembersTable.tsx @@ -17,7 +17,7 @@ import { useQuery } from '@tanstack/react-query'; import { adjustHeadCells, choicesToDict, - displayNameWithLocal, + displayNameWithLatin, populationStatusToColor, sexToCapitalize, } from '@utils/utils'; @@ -161,7 +161,7 @@ export const HouseholdMembersTable = ({ )} - {renderTableCellContent(displayNameWithLocal(row, 'fullName'))} + {renderTableCellContent(displayNameWithLatin(row, 'fullName'))} {individual.unicefId} - {displayNameWithLocal(individual, 'fullName')} + {displayNameWithLatin(individual, 'fullName')} {individual.household ? individual.household.unicefId : ''} diff --git a/src/frontend/src/containers/tables/rdi/ImportedIndividualsTable/ImportedIndividualsTableRow.tsx b/src/frontend/src/containers/tables/rdi/ImportedIndividualsTable/ImportedIndividualsTableRow.tsx index 6fae0bedce5..9cfffa36749 100644 --- a/src/frontend/src/containers/tables/rdi/ImportedIndividualsTable/ImportedIndividualsTableRow.tsx +++ b/src/frontend/src/containers/tables/rdi/ImportedIndividualsTable/ImportedIndividualsTableRow.tsx @@ -5,7 +5,7 @@ import { AnonTableCell } from '@components/core/Table/AnonTableCell'; import { ClickableTableRow } from '@components/core/Table/ClickableTableRow'; import { UniversalMoment } from '@components/core/UniversalMoment'; import { useBaseUrl } from '@hooks/useBaseUrl'; -import { displayNameWithLocal, sexToCapitalize } from '@utils/utils'; +import { displayNameWithLatin, sexToCapitalize } from '@utils/utils'; import { ReactElement } from 'react'; import { DedupeBiographicalBiometricResults } from '@components/rdi/details/DedupeBiographicalBiometricResults'; import { IndividualList } from '@restgenerated/models/IndividualList'; @@ -96,7 +96,7 @@ export function ImportedIndividualsTableRow({ {individual.unicefId} - {displayNameWithLocal(individual, 'fullName')} + {displayNameWithLatin(individual, 'fullName')} {individual.role} {individual.relationshipDisplay} diff --git a/src/frontend/src/containers/tables/rdi/ImportedPeopleTable/ImportedPeopleTableRow.tsx b/src/frontend/src/containers/tables/rdi/ImportedPeopleTable/ImportedPeopleTableRow.tsx index 894d25d3a7e..999dd542c61 100644 --- a/src/frontend/src/containers/tables/rdi/ImportedPeopleTable/ImportedPeopleTableRow.tsx +++ b/src/frontend/src/containers/tables/rdi/ImportedPeopleTable/ImportedPeopleTableRow.tsx @@ -5,7 +5,7 @@ import { AnonTableCell } from '@components/core/Table/AnonTableCell'; import { ClickableTableRow } from '@components/core/Table/ClickableTableRow'; import { UniversalMoment } from '@components/core/UniversalMoment'; import { useBaseUrl } from '@hooks/useBaseUrl'; -import { choicesToDict, displayNameWithLocal, sexToCapitalize } from '@utils/utils'; +import { choicesToDict, displayNameWithLatin, sexToCapitalize } from '@utils/utils'; import { ReactElement } from 'react'; import { DedupeBiographicalBiometricResults } from '@components/rdi/details/DedupeBiographicalBiometricResults'; import { IndividualList } from '@restgenerated/models/IndividualList'; @@ -81,7 +81,7 @@ export function ImportedPeopleTableRow({ {individual.unicefId} - {displayNameWithLocal(individual, 'fullName')} + {displayNameWithLatin(individual, 'fullName')} {roleChoicesDict[individual.role]} {relationshipChoicesDict[individual.relationship]} diff --git a/src/frontend/src/containers/tables/targeting/TargetPopulationHouseholdTable/TargetPopulationHouseholdRow.tsx b/src/frontend/src/containers/tables/targeting/TargetPopulationHouseholdTable/TargetPopulationHouseholdRow.tsx index 9b9262bf716..26db4e9aba7 100644 --- a/src/frontend/src/containers/tables/targeting/TargetPopulationHouseholdTable/TargetPopulationHouseholdRow.tsx +++ b/src/frontend/src/containers/tables/targeting/TargetPopulationHouseholdTable/TargetPopulationHouseholdRow.tsx @@ -5,7 +5,7 @@ import { BlackLink } from '@components/core/BlackLink'; import { useBaseUrl } from '@hooks/useBaseUrl'; import { ReactElement } from 'react'; import { PendingPayment } from '@restgenerated/models/PendingPayment'; -import { displayNameWithLocal } from '@utils/utils'; +import { displayNameWithLatin } from '@utils/utils'; interface TargetPopulationHouseholdTableRowProps { payment: PendingPayment; @@ -42,7 +42,7 @@ export function TargetPopulationHouseholdTableRow({ payment.householdUnicefId )} - {displayNameWithLocal(payment.headOfHousehold, 'fullName') || '-'} + {displayNameWithLatin(payment.headOfHousehold, 'fullName') || '-'} {payment.householdSize} {payment.householdAdmin2 || '-'} diff --git a/src/frontend/src/containers/tables/targeting/TargetPopulationPeopleTable/TargetPopulationPeopleRow.tsx b/src/frontend/src/containers/tables/targeting/TargetPopulationPeopleTable/TargetPopulationPeopleRow.tsx index 3ec707fdbf1..0dc0df39c55 100644 --- a/src/frontend/src/containers/tables/targeting/TargetPopulationPeopleTable/TargetPopulationPeopleRow.tsx +++ b/src/frontend/src/containers/tables/targeting/TargetPopulationPeopleTable/TargetPopulationPeopleRow.tsx @@ -5,7 +5,7 @@ import { BlackLink } from '@components/core/BlackLink'; import { useBaseUrl } from '@hooks/useBaseUrl'; import { ReactElement } from 'react'; import { PendingPayment } from '@restgenerated/models/PendingPayment'; -import { displayNameWithLocal } from '@utils/utils'; +import { displayNameWithLatin } from '@utils/utils'; interface TargetPopulationPeopleTableRowProps { payment: PendingPayment; @@ -42,7 +42,7 @@ export function TargetPopulationPeopleTableRow({ payment?.headOfHousehold.unicefId )} - {displayNameWithLocal(payment?.headOfHousehold, 'fullName') || '-'} + {displayNameWithLatin(payment?.headOfHousehold, 'fullName') || '-'} {payment?.householdAdmin2 || '-'} {payment?.householdSize != null ? payment.householdSize : '-'} diff --git a/src/frontend/src/utils/utils.ts b/src/frontend/src/utils/utils.tsx similarity index 98% rename from src/frontend/src/utils/utils.ts rename to src/frontend/src/utils/utils.tsx index 5ec2fb36009..59b992916b0 100644 --- a/src/frontend/src/utils/utils.ts +++ b/src/frontend/src/utils/utils.tsx @@ -2,21 +2,38 @@ import { HeadCell } from '@core/Table/EnhancedTableHead'; import { BackgroundActionStatusEnum } from '@restgenerated/models/BackgroundActionStatusEnum'; import { PaymentPlanStatusEnum as PaymentPlanStatus } from '@restgenerated/models/PaymentPlanStatusEnum'; import { ProgramStatusEnum } from '@restgenerated/models/ProgramStatusEnum'; +import { Box, Typography } from '@mui/material'; import _, { camelCase, startCase } from 'lodash'; import moment from 'moment'; +import { ReactNode } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { theme as themeObj } from '../theme'; import { GRIEVANCE_CATEGORIES, PAYMENT_PLAN_STATES } from './constants'; -export function displayNameWithLocal>( +export function displayNameWithLatin>( obj: T | null | undefined, key: string & keyof T, -): string { - if (!obj) return ''; +): ReactNode { + if (!obj) return null; const name = obj[key] as string | null | undefined; - if (!name) return ''; - const localName = obj[`${key}Local`] as string | null | undefined; - return localName ? `${name} (${localName})` : name; + if (!name) return null; + const latinName = obj[`${key}Latin`] as string | null | undefined; + if (!latinName) return name; + return ( + + {name} + + {latinName} + + + ); } // Formats a string or array value to Normal Case using lodash's startCase From 96dff1e253f119d638340d44de82437360c2e4d7 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Tue, 21 Apr 2026 17:32:16 -0400 Subject: [PATCH 11/33] update to _latin --- .../core_fields_attributes.py | 24 ++-- .../api/serializers/grievance_ticket.py | 16 +-- .../household/api/serializers/household.py | 4 +- .../household/api/serializers/individual.py | 16 +-- src/hope/apps/household/documents.py | 10 +- src/hope/apps/household/filters.py | 4 +- .../household/migrations/0040_migration.py | 135 ------------------ ...zech_republic_flex_registration_service.py | 14 +- .../services/generic_registration_service.py | 8 +- .../nigeria_people_registration_service.py | 6 +- .../sri_lanka_flex_registration_service.py | 2 +- .../ukraine_flex_registration_service.py | 16 +-- src/hope/models/individual.py | 44 +++--- tests/unit/api/test_soft.py | 6 +- .../test_generic_registration_service.py | 6 +- .../apps/grievance/test_grievance_detail.py | 14 +- .../household/test_household_list_views.py | 4 +- tests/unit/apps/payment/test_serializers.py | 2 +- .../registration_data/test_rdi_kobo_create.py | 16 +-- .../registration_data/test_rdi_xlsx_create.py | 8 +- 20 files changed, 113 insertions(+), 242 deletions(-) delete mode 100644 src/hope/apps/household/migrations/0040_migration.py diff --git a/src/hope/apps/core/field_attributes/core_fields_attributes.py b/src/hope/apps/core/field_attributes/core_fields_attributes.py index 43bc6b18b00..40e85f2be26 100644 --- a/src/hope/apps/core/field_attributes/core_fields_attributes.py +++ b/src/hope/apps/core/field_attributes/core_fields_attributes.py @@ -463,14 +463,14 @@ { "id": "248b358f-ea96-4794-941b-986af9d8ad5e", "type": TYPE_STRING, - "name": "full_name_local", - "lookup": "full_name_local", + "name": "full_name_latin", + "lookup": "full_name_latin", "required": False, "label": {"English(EN)": "Full name local"}, "hint": "", "choices": [], "associated_with": _INDIVIDUAL, - "xlsx_field": "full_name_local_i_c", + "xlsx_field": "full_name_latin_i_c", "scope": [ Scope.GLOBAL, Scope.TARGETING, @@ -503,14 +503,14 @@ { "id": "ee311eb5-c0af-4d19-a74e-7ad504260034", "type": TYPE_STRING, - "name": "given_name_local", - "lookup": "given_name_local", + "name": "given_name_latin", + "lookup": "given_name_latin", "required": False, "label": {"English(EN)": "Given name local"}, "hint": "", "choices": [], "associated_with": _INDIVIDUAL, - "xlsx_field": "given_name_local_i_c", + "xlsx_field": "given_name_latin_i_c", "scope": [ Scope.GLOBAL, Scope.TARGETING, @@ -543,14 +543,14 @@ { "id": "f307f3ad-01ed-4465-87bf-b4952c85bdc0", "type": TYPE_STRING, - "name": "middle_name_local", - "lookup": "middle_name_local", + "name": "middle_name_latin", + "lookup": "middle_name_latin", "required": False, "label": {"English(EN)": "Middle name(s) local"}, "hint": "", "choices": [], "associated_with": _INDIVIDUAL, - "xlsx_field": "middle_name_local_i_c", + "xlsx_field": "middle_name_latin_i_c", "scope": [ Scope.GLOBAL, Scope.TARGETING, @@ -583,14 +583,14 @@ { "id": "a88bcf60-4b3e-4bcb-bef5-7c8eb478e5e8", "type": TYPE_STRING, - "name": "family_name_local", - "lookup": "family_name_local", + "name": "family_name_latin", + "lookup": "family_name_latin", "required": False, "label": {"English(EN)": "Family name local"}, "hint": "", "choices": [], "associated_with": _INDIVIDUAL, - "xlsx_field": "family_name_local_i_c", + "xlsx_field": "family_name_latin_i_c", "scope": [ Scope.GLOBAL, Scope.TARGETING, diff --git a/src/hope/apps/grievance/api/serializers/grievance_ticket.py b/src/hope/apps/grievance/api/serializers/grievance_ticket.py index a7217aa83b8..851af87b3db 100644 --- a/src/hope/apps/grievance/api/serializers/grievance_ticket.py +++ b/src/hope/apps/grievance/api/serializers/grievance_ticket.py @@ -384,10 +384,10 @@ class AddIndividualDataSerializer(serializers.Serializer): given_name = serializers.CharField(required=False) middle_name = serializers.CharField(required=False) family_name = serializers.CharField(required=False) - full_name_local = serializers.CharField(required=False) - given_name_local = serializers.CharField(required=False) - middle_name_local = serializers.CharField(required=False) - family_name_local = serializers.CharField(required=False) + full_name_latin = serializers.CharField(required=False) + given_name_latin = serializers.CharField(required=False) + middle_name_latin = serializers.CharField(required=False) + family_name_latin = serializers.CharField(required=False) sex = serializers.CharField() birth_date = serializers.DateField() estimated_birth_date = serializers.BooleanField() @@ -428,10 +428,10 @@ class IndividualUpdateDataSerializer(serializers.Serializer): given_name = serializers.CharField(required=False) middle_name = serializers.CharField(required=False) family_name = serializers.CharField(required=False) - full_name_local = serializers.CharField(required=False) - given_name_local = serializers.CharField(required=False) - middle_name_local = serializers.CharField(required=False) - family_name_local = serializers.CharField(required=False) + full_name_latin = serializers.CharField(required=False) + given_name_latin = serializers.CharField(required=False) + middle_name_latin = serializers.CharField(required=False) + family_name_latin = serializers.CharField(required=False) sex = serializers.CharField(required=False) birth_date = serializers.DateField(required=False) estimated_birth_date = serializers.BooleanField(required=False) diff --git a/src/hope/apps/household/api/serializers/household.py b/src/hope/apps/household/api/serializers/household.py index f472b72c6eb..9e331341b26 100644 --- a/src/hope/apps/household/api/serializers/household.py +++ b/src/hope/apps/household/api/serializers/household.py @@ -92,7 +92,7 @@ class Meta: fields = ( "id", "full_name", - "full_name_local", + "full_name_latin", ) @@ -166,7 +166,7 @@ class Meta: "id", "unicef_id", "full_name", - "full_name_local", + "full_name_latin", "role", "relationship", "status", diff --git a/src/hope/apps/household/api/serializers/individual.py b/src/hope/apps/household/api/serializers/individual.py index a0995f2bdc9..ec819343f7b 100644 --- a/src/hope/apps/household/api/serializers/individual.py +++ b/src/hope/apps/household/api/serializers/individual.py @@ -96,7 +96,7 @@ class Meta: "id", "unicef_id", "full_name", - "full_name_local", + "full_name_latin", ) @@ -143,7 +143,7 @@ class Meta: "id", "unicef_id", "full_name", - "full_name_local", + "full_name_latin", "household", "roles_in_households", "relationship", @@ -262,7 +262,7 @@ class Meta: "id", "unicef_id", "full_name", - "full_name_local", + "full_name_latin", "household", "status", "relationship", @@ -351,10 +351,10 @@ class Meta: "given_name", "middle_name", "family_name", - "full_name_local", - "given_name_local", - "middle_name_local", - "family_name_local", + "full_name_latin", + "given_name_latin", + "middle_name_latin", + "family_name_latin", "sex", "age", "birth_date", @@ -474,7 +474,7 @@ class Meta: "unicef_id", "household", "full_name", - "full_name_local", + "full_name_latin", "birth_date", "last_registration_date", "sex", diff --git a/src/hope/apps/household/documents.py b/src/hope/apps/household/documents.py index 0033515e984..1b2bbcbf1f1 100644 --- a/src/hope/apps/household/documents.py +++ b/src/hope/apps/household/documents.py @@ -32,7 +32,7 @@ class IndividualDocument(Document): middle_name = fields.TextField(analyzer=phonetic_analyzer) family_name = fields.TextField(fields={"phonetic": fields.TextField(analyzer=phonetic_analyzer)}) full_name = fields.TextField(analyzer=phonetic_analyzer) - full_name_local = fields.TextField(analyzer=phonetic_analyzer) + full_name_latin = fields.TextField(analyzer=phonetic_analyzer) birth_date = fields.DateField() # Before es 8, similarity parameter on DateField failed silently phone_no = fields.KeywordField("phone_no.__str__", similarity="boolean") phone_no_alternative = fields.KeywordField("phone_no_alternative.__str__", similarity="boolean") @@ -121,10 +121,10 @@ class HouseholdDocument(Document): "given_name": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "middle_name": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "family_name": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), - "full_name_local": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), - "given_name_local": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), - "middle_name_local": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), - "family_name_local": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), + "full_name_latin": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), + "given_name_latin": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), + "middle_name_latin": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), + "family_name_latin": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "phone_no_text": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "phone_no_alternative_text": fields.TextField(index_prefixes={"min_chars": 1, "max_chars": 10}), "documents": fields.ObjectField( diff --git a/src/hope/apps/household/filters.py b/src/hope/apps/household/filters.py index b01a94dad9c..497cb250acd 100644 --- a/src/hope/apps/household/filters.py +++ b/src/hope/apps/household/filters.py @@ -387,7 +387,7 @@ def _get_elasticsearch_query_for_individuals(self, search: str, program: Program {"match_phrase_prefix": {"unicef_id": {"query": search}}}, {"match_phrase_prefix": {"household.unicef_id": {"query": search}}}, {"match_phrase_prefix": {"full_name": {"query": search}}}, - {"match_phrase_prefix": {"full_name_local": {"query": search}}}, + {"match_phrase_prefix": {"full_name_latin": {"query": search}}}, {"match_phrase_prefix": {"phone_no_text": {"query": search}}}, {"match_phrase_prefix": {"phone_no_alternative_text": {"query": search}}}, {"match_phrase_prefix": {"detail_id": {"query": search}}}, @@ -419,7 +419,7 @@ def _search_db(self, qs: QuerySet[Individual], value: str, program: Program | No Q(unicef_id__icontains=search) | Q(household__unicef_id__icontains=search) | Q(full_name__icontains=search) - | Q(full_name_local__icontains=search) + | Q(full_name_latin__icontains=search) | Q(phone_no_normalized__icontains=search) | Q(phone_no_alt_normalized__icontains=search) | Q(detail_id__icontains=search) diff --git a/src/hope/apps/household/migrations/0040_migration.py b/src/hope/apps/household/migrations/0040_migration.py deleted file mode 100644 index 69112b888f8..00000000000 --- a/src/hope/apps/household/migrations/0040_migration.py +++ /dev/null @@ -1,135 +0,0 @@ -# Generated by Django 5.2.12 on 2026-04-20 14:57 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("household", "0039_migration"), - ] - - operations = [ - migrations.AddField( - model_name="individual", - name="family_name_local", - field=models.CharField( - blank=True, - db_collation="und-ci-det", - db_index=True, - help_text="Last local name of the Beneficiary", - max_length=150, - null=True, - ), - ), - migrations.AddField( - model_name="individual", - name="full_name_local", - field=models.CharField( - blank=True, - db_collation="und-ci-det", - db_index=True, - help_text="Full Local Name of the Beneficiary", - max_length=500, - null=True, - validators=[django.core.validators.MinLengthValidator(2)], - ), - ), - migrations.AddField( - model_name="individual", - name="given_name_local", - field=models.CharField( - blank=True, - db_collation="und-ci-det", - db_index=True, - help_text="First local name of the Beneficiary", - max_length=150, - null=True, - ), - ), - migrations.AddField( - model_name="individual", - name="middle_name_local", - field=models.CharField( - blank=True, - db_collation="und-ci-det", - db_index=True, - help_text="Middle local name of the Beneficiary", - max_length=150, - null=True, - ), - ), - migrations.AlterField( - model_name="individual", - name="family_name", - field=models.CharField( - blank=True, - db_collation="und-ci-det", - db_index=True, - help_text="Last name of the Beneficiary", - max_length=85, - validators=[ - django.core.validators.RegexValidator( - code="invalid_name", - message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", - regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", - ) - ], - ), - ), - migrations.AlterField( - model_name="individual", - name="full_name", - field=models.CharField( - db_collation="und-ci-det", - db_index=True, - help_text="Full Name of the Beneficiary", - max_length=255, - validators=[ - django.core.validators.MinLengthValidator(2), - django.core.validators.RegexValidator( - code="invalid_name", - message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", - regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", - ), - ], - ), - ), - migrations.AlterField( - model_name="individual", - name="given_name", - field=models.CharField( - blank=True, - db_collation="und-ci-det", - db_index=True, - help_text="First name of the Beneficiary", - max_length=85, - validators=[ - django.core.validators.RegexValidator( - code="invalid_name", - message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", - regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", - ) - ], - ), - ), - migrations.AlterField( - model_name="individual", - name="middle_name", - field=models.CharField( - blank=True, - db_collation="und-ci-det", - db_index=True, - help_text="Middle name of the Beneficiary", - max_length=85, - validators=[ - django.core.validators.RegexValidator( - code="invalid_name", - message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", - regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", - ) - ], - ), - ), - ] diff --git a/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py b/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py index f3d207fa4cd..1d0e9a4d9b4 100644 --- a/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py +++ b/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py @@ -43,8 +43,8 @@ class CzechRepublicFlexRegistration(BaseRegistrationService): "phone_no": "phone_no_i_c", "given_name": "given_name_i_c", "family_name": "family_name_i_c", - "given_name_local": "given_name_local_i_c", - "family_name_local": "family_name_local_i_c", + "given_name_latin": "given_name_latin_i_c", + "family_name_latin": "family_name_latin_i_c", "relationship": "relationship_i_c", "preferred_language": "preferred_language_i_c", } @@ -178,13 +178,13 @@ def _prepare_individual_data( middle_name = individual_data.get("middle_name") family_name = individual_data.get("family_name") - given_name_local = individual_data.get("given_name_local") - middle_name_local = individual_data.get("middle_name_local") - family_name_local = individual_data.get("family_name_local") + given_name_latin = individual_data.get("given_name_latin") + middle_name_latin = individual_data.get("middle_name_latin") + family_name_latin = individual_data.get("family_name_latin") individual_data["full_name"] = " ".join(filter(None, [given_name, middle_name, family_name])) - individual_data["full_name_local"] = " ".join( - filter(None, [given_name_local, middle_name_local, family_name_local]) + individual_data["full_name_latin"] = " ".join( + filter(None, [given_name_latin, middle_name_latin, family_name_latin]) ) work_status = individual_dict.get("work_status_i_c") diff --git a/src/hope/contrib/aurora/services/generic_registration_service.py b/src/hope/contrib/aurora/services/generic_registration_service.py index 1dfc14f6131..80e1b59b75e 100644 --- a/src/hope/contrib/aurora/services/generic_registration_service.py +++ b/src/hope/contrib/aurora/services/generic_registration_service.py @@ -75,10 +75,10 @@ class GenericRegistrationService(BaseRegistrationService): "middle_name_i_c": "individual.middle_name", "family_name_i_c": "individual.family_name", "full_name_i_c": "individual.full_name", - "given_name_local_i_c": "individual.given_name_local", - "middle_name_local_i_c": "individual.middle_name_local", - "family_name_local_i_c": "individual.family_name_local", - "full_name_local_i_c": "individual.full_name_local", + "given_name_latin_i_c": "individual.given_name_latin", + "middle_name_latin_i_c": "individual.middle_name_latin", + "family_name_latin_i_c": "individual.family_name_latin", + "full_name_latin_i_c": "individual.full_name_latin", "birth_date_i_c": "individual.birth_date", "gender_i_c": "individual.sex", "disability_i_c": "individual.disability", diff --git a/src/hope/contrib/aurora/services/nigeria_people_registration_service.py b/src/hope/contrib/aurora/services/nigeria_people_registration_service.py index ad6fdb96dc7..3aa8b7dece6 100644 --- a/src/hope/contrib/aurora/services/nigeria_people_registration_service.py +++ b/src/hope/contrib/aurora/services/nigeria_people_registration_service.py @@ -80,9 +80,9 @@ def create_household_for_rdi_household(self, record: Any, registration_data_impo "given_name_i_c": "individual.given_name", "family_name_i_c": "individual.family_name", "middle_name_i_c": "individual.middle_name", - "given_name_local_i_c": "individual.given_name_local", - "middle_name_local_i_c": "individual.middle_name_local", - "family_name_local_i_c": "individual.family_name_local", + "given_name_latin_i_c": "individual.given_name_latin", + "middle_name_latin_i_c": "individual.middle_name_latin", + "family_name_latin_i_c": "individual.family_name_latin", "birth_date_i_c": "individual.birth_date", "gender_i_c": "individual.sex", "email_i_c": "individual.email", diff --git a/src/hope/contrib/aurora/services/sri_lanka_flex_registration_service.py b/src/hope/contrib/aurora/services/sri_lanka_flex_registration_service.py index 42c41f49a47..47ebbc901fd 100644 --- a/src/hope/contrib/aurora/services/sri_lanka_flex_registration_service.py +++ b/src/hope/contrib/aurora/services/sri_lanka_flex_registration_service.py @@ -32,7 +32,7 @@ class SriLankaRegistrationService(BaseRegistrationService): INDIVIDUAL_MAPPING_DICT = { "full_name": "full_name_i_c", - "full_name_local": "full_name_local_i_c", + "full_name_latin": "full_name_latin_i_c", "birth_date": "birth_date_i_c", "sex": "gender_i_c", "who_answers_phone": "who_answers_phone_i_c", diff --git a/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py b/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py index fd33533de36..8921f24fc88 100644 --- a/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py +++ b/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py @@ -44,9 +44,9 @@ class UkraineBaseRegistrationService(BaseRegistrationService): "given_name": "given_name_i_c", "family_name": "family_name_i_c", "middle_name": "patronymic", - "given_name_local": "given_name_local_i_c", - "family_name_local": "family_name_local_i_c", - "middle_name_local": "patronymic_local", + "given_name_latin": "given_name_latin_i_c", + "family_name_latin": "family_name_latin_i_c", + "middle_name_latin": "patronymic_local", "birth_date": "birth_date", "sex": "gender_i_c", "relationship": "relationship_i_c", @@ -236,13 +236,13 @@ def _prepare_individual_data( given_name = individual_data.get("given_name") middle_name = individual_data.get("middle_name") family_name = individual_data.get("family_name") - given_name_local = individual_data.get("given_name_local") - middle_name_local = individual_data.get("middle_name_local") - family_name_local = individual_data.get("family_name_local") + given_name_latin = individual_data.get("given_name_latin") + middle_name_latin = individual_data.get("middle_name_latin") + family_name_latin = individual_data.get("family_name_latin") individual_data["full_name"] = " ".join(filter(None, [given_name, middle_name, family_name])) - individual_data["full_name_local"] = " ".join( - filter(None, [given_name_local, middle_name_local, family_name_local]) + individual_data["full_name_latin"] = " ".join( + filter(None, [given_name_latin, middle_name_latin, family_name_latin]) ) return individual_data diff --git a/src/hope/models/individual.py b/src/hope/models/individual.py index 75217cb71e3..6e96340a2de 100644 --- a/src/hope/models/individual.py +++ b/src/hope/models/individual.py @@ -105,6 +105,10 @@ class Individual( "given_name", "middle_name", "family_name", + "full_name_latin", + "given_name_latin", + "middle_name_latin", + "family_name_latin", "sex", "birth_date", "estimated_birth_date", @@ -192,7 +196,9 @@ class Individual( photo = models.ImageField(blank=True, help_text="Photo") full_name = models.CharField( max_length=255, - validators=[MinLengthValidator(2), ascii_name_validator], + validators=[ + MinLengthValidator(2), + ], db_index=True, help_text="Full Name of the Beneficiary", db_collation="und-ci-det", @@ -203,9 +209,6 @@ class Individual( db_index=True, help_text="First name of the Beneficiary", db_collation="und-ci-det", - validators=[ - ascii_name_validator, - ], ) middle_name = models.CharField( max_length=85, @@ -213,9 +216,6 @@ class Individual( db_index=True, help_text="Middle name of the Beneficiary", db_collation="und-ci-det", - validators=[ - ascii_name_validator, - ], ) family_name = models.CharField( max_length=85, @@ -223,42 +223,48 @@ class Individual( db_index=True, help_text="Last name of the Beneficiary", db_collation="und-ci-det", - validators=[ - ascii_name_validator, - ], ) - full_name_local = models.CharField( + full_name_latin = models.CharField( max_length=500, - validators=[MinLengthValidator(2)], + validators=[MinLengthValidator(2), ascii_name_validator], db_index=True, - help_text="Full Local Name of the Beneficiary", + help_text="Full name of the Beneficiary Latin", db_collation="und-ci-det", blank=True, null=True, ) - given_name_local = models.CharField( + given_name_latin = models.CharField( max_length=150, blank=True, db_index=True, - help_text="First local name of the Beneficiary", + help_text="First name of the Beneficiary Latin", db_collation="und-ci-det", null=True, + validators=[ + ascii_name_validator, + ], ) - middle_name_local = models.CharField( + middle_name_latin = models.CharField( max_length=150, blank=True, db_index=True, - help_text="Middle local name of the Beneficiary", + help_text="Middle name of the Beneficiary Latin", db_collation="und-ci-det", null=True, + validators=[ + ascii_name_validator, + ], ) - family_name_local = models.CharField( + family_name_latin = models.CharField( max_length=150, blank=True, db_index=True, - help_text="Last local name of the Beneficiary", + help_text="Last name of the Beneficiary Latin", db_collation="und-ci-det", null=True, + validators=[ + ascii_name_validator, + ], ) sex = models.CharField( max_length=255, diff --git a/tests/unit/api/test_soft.py b/tests/unit/api/test_soft.py index 42f745e49ae..96770a3c229 100644 --- a/tests/unit/api/test_soft.py +++ b/tests/unit/api/test_soft.py @@ -89,7 +89,7 @@ def test_push_lax_creates_households_and_reports_errors( { "relationship": HEAD, "full_name": "James Head One", - "full_name_local": "Local Name #1", + "full_name_latin": "Local Name #1", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -318,7 +318,7 @@ def test_push_lax_creates_households_and_reports_errors( hh = PendingHousehold.objects.get(pk=pk1) assert hh.program_id == program.id assert hh.head_of_household.full_name == "James Head One" - assert hh.head_of_household.full_name_local == "Local Name #1" + assert hh.head_of_household.full_name_latin == "Local Name #1" assert hh.primary_collector.full_name == "Mary Primary One" assert hh.head_of_household.program_id == program.id assert hh.primary_collector.program_id == program.id @@ -326,6 +326,6 @@ def test_push_lax_creates_households_and_reports_errors( hh = PendingHousehold.objects.get(pk=pk2) assert hh.program_id == program.id assert hh.head_of_household.full_name == "James Head One" - assert hh.primary_collector.full_name_local is None + assert hh.primary_collector.full_name_latin is None assert hh.head_of_household.program_id == program.id assert hh.primary_collector.program_id == program.id diff --git a/tests/unit/apps/aurora/test_generic_registration_service.py b/tests/unit/apps/aurora/test_generic_registration_service.py index 4b0c928ca16..9f836c85f35 100644 --- a/tests/unit/apps/aurora/test_generic_registration_service.py +++ b/tests/unit/apps/aurora/test_generic_registration_service.py @@ -160,7 +160,7 @@ def individual_with_bank_account_and_tax_and_disability() -> dict: "bank_account_h_f": "y", "relationship_i_c": "head", "given_name_i_c": "Jan", - "given_name_local_i_c": "Żoniak", + "given_name_latin_i_c": "Żoniak", "family_name_i_c": "Romaniak", "patronymic": "Roman", "birth_date": "1991-11-18", @@ -197,7 +197,7 @@ def individual_with_no_tax() -> dict: "bank_account_h_f": "y", "relationship_i_c": "head", "given_name_i_c": "Michal", - "given_name_local_i_c": "Michał_local", + "given_name_latin_i_c": "Michał_local", "family_name_i_c": "Brzeczacy", "patronymic": "Janusz", "birth_date": "1991-11-18", @@ -401,7 +401,7 @@ def test_import_data_to_datahub_household_individual( assert PendingDocument.objects.get(document_number="xyz", type__key="disability_certificate") assert PendingIndividual.objects.get( given_name="Jan", - given_name_local="Żoniak", + given_name_latin="Żoniak", middle_name="Roman", family_name="Romaniak", relationship="HEAD", diff --git a/tests/unit/apps/grievance/test_grievance_detail.py b/tests/unit/apps/grievance/test_grievance_detail.py index 1b7d56c7c14..dc26a102005 100644 --- a/tests/unit/apps/grievance/test_grievance_detail.py +++ b/tests/unit/apps/grievance/test_grievance_detail.py @@ -351,7 +351,7 @@ def assert_base_grievance_data( "head_of_household": { "id": str(household.head_of_household.id), "full_name": household.head_of_household.full_name, - "full_name_local": None, + "full_name_latin": None, }, "active_individuals_count": household.active_individuals.count(), } @@ -430,7 +430,7 @@ def assert_base_grievance_data( "id": str(individual.id), "unicef_id": individual.unicef_id, "full_name": individual.full_name, - "full_name_local": None, + "full_name_latin": None, "program_code": individual.program.code, "household": { "id": str(individual.household.id), @@ -1341,7 +1341,7 @@ def test_grievance_detail_system_flagging( "id": str(golden_records_individual.id), "unicef_id": golden_records_individual.unicef_id, "full_name": golden_records_individual.full_name, - "full_name_local": None, + "full_name_latin": None, "birth_date": f"{golden_records_individual.birth_date:%Y-%m-%d}", "last_registration_date": f"{golden_records_individual.last_registration_date:%Y-%m-%d}", "sex": golden_records_individual.sex, @@ -1695,7 +1695,7 @@ def test_grievance_detail_needs_adjudication( "id": str(golden_records_individual.id), "unicef_id": golden_records_individual.unicef_id, "full_name": golden_records_individual.full_name, - "full_name_local": None, + "full_name_latin": None, "birth_date": f"{golden_records_individual.birth_date:%Y-%m-%d}", "last_registration_date": f"{golden_records_individual.last_registration_date:%Y-%m-%d}", "sex": golden_records_individual.sex, @@ -1775,7 +1775,7 @@ def test_grievance_detail_needs_adjudication( "id": str(individuals2[0].id), "unicef_id": individuals2[0].unicef_id, "full_name": individuals2[0].full_name, - "full_name_local": None, + "full_name_latin": None, "birth_date": f"{individuals2[0].birth_date:%Y-%m-%d}", "last_registration_date": f"{individuals2[0].last_registration_date:%Y-%m-%d}", "sex": individuals2[0].sex, @@ -1823,7 +1823,7 @@ def test_grievance_detail_needs_adjudication( "id": str(individuals2[0].id), "unicef_id": individuals2[0].unicef_id, "full_name": individuals2[0].full_name, - "full_name_local": None, + "full_name_latin": None, "birth_date": f"{individuals2[0].birth_date:%Y-%m-%d}", "last_registration_date": f"{individuals2[0].last_registration_date:%Y-%m-%d}", "sex": individuals2[0].sex, @@ -1872,7 +1872,7 @@ def test_grievance_detail_needs_adjudication( "id": str(duplicate.id), "unicef_id": duplicate.unicef_id, "full_name": duplicate.full_name, - "full_name_local": None, + "full_name_latin": None, "birth_date": f"{duplicate.birth_date:%Y-%m-%d}", "last_registration_date": f"{duplicate.last_registration_date:%Y-%m-%d}", "sex": duplicate.sex, diff --git a/tests/unit/apps/household/test_household_list_views.py b/tests/unit/apps/household/test_household_list_views.py index 82372499598..b9bdc7457ca 100644 --- a/tests/unit/apps/household/test_household_list_views.py +++ b/tests/unit/apps/household/test_household_list_views.py @@ -492,7 +492,7 @@ def test_household_all_accountability_communication_message_recipients( "head_of_household": { "id": str(household_list_context["household1"].head_of_household.pk), "full_name": household_list_context["household1"].head_of_household.full_name, - "full_name_local": None, + "full_name_latin": None, }, "admin2": { "id": str(household_list_context["household1"].admin2.pk), @@ -678,7 +678,7 @@ def test_household_detail_with_permissions( assert data["head_of_household"] == { "id": str(individuals[0].id), "full_name": individuals[0].full_name, - "full_name_local": None, + "full_name_latin": None, } assert data["admin1"] == { "id": str(household.admin1.id), diff --git a/tests/unit/apps/payment/test_serializers.py b/tests/unit/apps/payment/test_serializers.py index 5658de6e8da..cbf0f674328 100644 --- a/tests/unit/apps/payment/test_serializers.py +++ b/tests/unit/apps/payment/test_serializers.py @@ -227,7 +227,7 @@ def test_pending_payment_serializer_all_data(pending_payment_context: dict[str, assert data["head_of_household"] == { "id": str(payment.head_of_household.id), "full_name": f"{payment.head_of_household.full_name}", - "full_name_local": None, + "full_name_latin": None, "unicef_id": payment.head_of_household.unicef_id, } assert data["household_size"] == 2 diff --git a/tests/unit/apps/registration_data/test_rdi_kobo_create.py b/tests/unit/apps/registration_data/test_rdi_kobo_create.py index 6d6af7d0e6e..e7d8d51b66f 100644 --- a/tests/unit/apps/registration_data/test_rdi_kobo_create.py +++ b/tests/unit/apps/registration_data/test_rdi_kobo_create.py @@ -179,20 +179,20 @@ def test_execute( "age", "marital_status", "relationship", - "full_name_local", - "given_name_local", - "middle_name_local", - "family_name_local", + "full_name_latin", + "given_name_latin", + "middle_name_latin", + "family_name_latin", ), ) expected_ind = { "relationship": "HEAD", "sex": "MALE", "marital_status": "MARRIED", - "full_name_local": "Full_local", - "given_name_local": "Given_local", - "middle_name_local": "Middle_local", - "family_name_local": "Family_local", + "full_name_latin": "Full_local", + "given_name_latin": "Given_local", + "middle_name_latin": "Middle_local", + "family_name_latin": "Family_local", } assert individuals_obj_data == expected_ind diff --git a/tests/unit/apps/registration_data/test_rdi_xlsx_create.py b/tests/unit/apps/registration_data/test_rdi_xlsx_create.py index a61dbbf3d9b..1b152709d4f 100644 --- a/tests/unit/apps/registration_data/test_rdi_xlsx_create.py +++ b/tests/unit/apps/registration_data/test_rdi_xlsx_create.py @@ -290,10 +290,10 @@ def test_execute( "birth_date": date(1963, 2, 3), "marital_status": "MARRIED", "email": "fake_email_123@mail.com", - "full_name_local": "Full_local", - "given_name_local": "Given_local", - "middle_name_local": "Middle_local", - "family_name_local": "Family_local", + "full_name_latin": "Full_local", + "given_name_latin": "Given_local", + "middle_name_latin": "Middle_local", + "family_name_latin": "Family_local", } matching_individuals = PendingIndividual.objects.filter(**individual_data) assert matching_individuals.count() == 1 From ada3078c7728e7778a776048d4f9c4513be0965a Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Tue, 21 Apr 2026 17:33:17 -0400 Subject: [PATCH 12/33] new migrations --- .../household/migrations/0040_migration.py | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/hope/apps/household/migrations/0040_migration.py diff --git a/src/hope/apps/household/migrations/0040_migration.py b/src/hope/apps/household/migrations/0040_migration.py new file mode 100644 index 00000000000..6b83b12bcfa --- /dev/null +++ b/src/hope/apps/household/migrations/0040_migration.py @@ -0,0 +1,90 @@ +# Generated by Django 5.2.12 on 2026-04-21 21:19 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("household", "0039_migration"), + ] + + operations = [ + migrations.AddField( + model_name="individual", + name="family_name_latin", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Last name of the Beneficiary Latin", + max_length=150, + null=True, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), + migrations.AddField( + model_name="individual", + name="full_name_latin", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Full name of the Beneficiary Latin", + max_length=500, + null=True, + validators=[ + django.core.validators.MinLengthValidator(2), + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ), + ], + ), + ), + migrations.AddField( + model_name="individual", + name="given_name_latin", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="First name of the Beneficiary Latin", + max_length=150, + null=True, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), + migrations.AddField( + model_name="individual", + name="middle_name_latin", + field=models.CharField( + blank=True, + db_collation="und-ci-det", + db_index=True, + help_text="Middle name of the Beneficiary Latin", + max_length=150, + null=True, + validators=[ + django.core.validators.RegexValidator( + code="invalid_name", + message="Only ASCII letters, spaces, hyphens, and apostrophes are allowed.", + regex="^[A-Za-z]+(?:[ '-][A-Za-z]+)*$", + ) + ], + ), + ), + ] From 4c230167d33e34dd639437f5292ac032f09eb4a2 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Tue, 21 Apr 2026 19:32:12 -0400 Subject: [PATCH 13/33] update tests --- tests/unit/api/test_soft.py | 33 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 43 -- ...f18ae6b758e8014a24c7fa039e91.response.json | 121 ---- .../business_area.fixture.json | 46 -- .../test_households/household.fixture.json | 388 ----------- .../household_role.fixture.json | 404 ------------ .../test_households/program.fixture.json | 121 ---- .../test_households/role.fixture.json | 17 - .../role_assignment.fixture.json | 113 ---- .../test_households/superuser.fixture.json | 45 -- ...f18ae6b758e8014a24c7fa039e91.response.json | 54 -- ...f18ae6b758e8014a24c7fa039e91.response.json | 91 --- .../business_area.fixture.json | 46 -- .../test_individuals/individual.fixture.json | 287 -------- .../test_individuals/program.fixture.json | 121 ---- .../test_individuals/role.fixture.json | 17 - .../role_assignment.fixture.json | 113 ---- .../test_individuals/superuser.fixture.json | 45 -- ...f18ae6b758e8014a24c7fa039e91.response.json | 52 -- ...f18ae6b758e8014a24c7fa039e91.response.json | 71 -- ...f18ae6b758e8014a24c7fa039e91.response.json | 488 -------------- .../business_area.fixture.json | 46 -- .../household.fixture.json | 388 ----------- .../household_role.fixture.json | 404 ------------ .../payment_plan.fixture.json | 245 ------- .../payment_verification.fixture.json | 617 ------------------ .../payment_verification_summary.fixture.json | 257 -------- .../program.fixture.json | 121 ---- .../role.fixture.json | 17 - .../role_assignment.fixture.json | 113 ---- .../superuser.fixture.json | 45 -- .../test_generic_registration_service.py | 12 +- .../grievance/test_grievance_list_global.py | 4 +- .../test_rdi_people_create.py | 16 +- 34 files changed, 33 insertions(+), 4968 deletions(-) delete mode 100644 tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_edcafd66-124b-45dc-b8f3-f77e7bc40ca8_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_households/household.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_households/program.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_households/role.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_c41b9f18-04ec-4f5d-b18d-75a70d10d034_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_c4446414-01e1-420f-879b-4264a5bd7a32_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json delete mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json diff --git a/tests/unit/api/test_soft.py b/tests/unit/api/test_soft.py index 96770a3c229..bdfc61f8038 100644 --- a/tests/unit/api/test_soft.py +++ b/tests/unit/api/test_soft.py @@ -88,8 +88,8 @@ def test_push_lax_creates_households_and_reports_errors( "members": [ { "relationship": HEAD, - "full_name": "James Head One", - "full_name_latin": "Local Name #1", + "full_name": "James Head #1", + "full_name_latin": "James Head One", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -104,7 +104,7 @@ def test_push_lax_creates_households_and_reports_errors( }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Primary One", + "full_name": "Mary Primary #1", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", @@ -119,7 +119,7 @@ def test_push_lax_creates_households_and_reports_errors( "members": [ { "relationship": HEAD, - "full_name": "James Head One", + "full_name": "James Head #1", "birth_date": "2000-01-01", "sex": "MALE", "role": ROLE_PRIMARY, @@ -141,21 +141,21 @@ def test_push_lax_creates_households_and_reports_errors( "size": 1, "members": [ { - "full_name": "Jhon Primary One", + "full_name": "Jhon Primary #1", "birth_date": "2000-01-01", "role": "", "sex": "FEMALE", }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Alternate One", + "full_name": "Mary Alternate #1", "birth_date": "2000-01-01", "role": ROLE_ALTERNATE, "sex": "MALE", }, { "relationship": HEAD, - "full_name": "James Head One", + "full_name": "James Head #1", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -169,7 +169,7 @@ def test_push_lax_creates_households_and_reports_errors( }, { "relationship": SON_DAUGHTER, - "full_name": "Mary Son One", + "full_name": "Mary Son #1", "birth_date": "2000-01-01", "role": "", "sex": "MALE", @@ -184,7 +184,7 @@ def test_push_lax_creates_households_and_reports_errors( "members": [ { "relationship": HEAD, - "full_name": "John Head Two", + "full_name": "John Head #2", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -199,7 +199,7 @@ def test_push_lax_creates_households_and_reports_errors( }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Primary Two", + "full_name": "Mary Primary #2", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", @@ -243,7 +243,7 @@ def test_push_lax_creates_households_and_reports_errors( "size": 1, "members": [ { - "full_name": "James Head One", + "full_name": "James Head #1", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -258,7 +258,7 @@ def test_push_lax_creates_households_and_reports_errors( }, { "relationship": NON_BENEFICIARY, - "full_name": "Mary Primary One", + "full_name": "Mary Primary #1", "birth_date": "2000-01-01", "role": ROLE_PRIMARY, "sex": "FEMALE", @@ -275,6 +275,7 @@ def test_push_lax_creates_households_and_reports_errors( { "relationship": HEAD, "full_name": "New Test #555", + "full_name_latin": "New Test #555", "birth_date": "2000-01-01", "sex": "MALE", "role": "", @@ -317,15 +318,15 @@ def test_push_lax_creates_households_and_reports_errors( pk1 = list(data["households"][0].values())[0][0]["pk"] hh = PendingHousehold.objects.get(pk=pk1) assert hh.program_id == program.id - assert hh.head_of_household.full_name == "James Head One" - assert hh.head_of_household.full_name_latin == "Local Name #1" - assert hh.primary_collector.full_name == "Mary Primary One" + assert hh.head_of_household.full_name == "James Head #1" + assert hh.head_of_household.full_name_latin == "James Head One" + assert hh.primary_collector.full_name == "Mary Primary #1" assert hh.head_of_household.program_id == program.id assert hh.primary_collector.program_id == program.id pk2 = list(data["households"][1].values())[0][0]["pk"] hh = PendingHousehold.objects.get(pk=pk2) assert hh.program_id == program.id - assert hh.head_of_household.full_name == "James Head One" + assert hh.head_of_household.full_name == "James Head #1" assert hh.primary_collector.full_name_latin is None assert hh.head_of_household.program_id == program.id assert hh.primary_collector.program_id == program.id diff --git a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index 392ebad2617..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "ETag": "f8d9831bc559383c49f4ba205e909b62", - "Cache-Control": "private, no-cache", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "702" - }, - "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/n1i2/households/?limit=50&offset=50", - "previous": null, - "results": [ - { - "id": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", - "unicef_id": "HH-25-0000.0346", - "head_of_household": "Person 0", - "admin1": null, - "admin2": null, - "status": "ACTIVE", - "size": null, - "residence_status": "None", - "total_cash_received": null, - "total_cash_received_usd": null, - "last_registration_date": "2025-01-01T00:00:00Z", - "first_registration_date": "2025-01-01T00:00:00Z", - "currency": null, - "has_duplicates": false, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "program_id": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "program_name": "Program 0", - "program_code": "n1i2" - } - ] - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_edcafd66-124b-45dc-b8f3-f77e7bc40ca8_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_edcafd66-124b-45dc-b8f3-f77e7bc40ca8_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index 7bf6fbc0eae..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_n1i2_households_edcafd66-124b-45dc-b8f3-f77e7bc40ca8_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "2656" - }, - "data": { - "id": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", - "unicef_id": "HH-25-0000.0346", - "head_of_household": { - "id": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", - "full_name": "Person 0", - "full_name_local": null - }, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "program": "Program 0", - "country": "", - "country_origin": "", - "status": "ACTIVE", - "total_cash_received": null, - "total_cash_received_usd": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "has_duplicates": false, - "registration_data_import": { - "id": "e2d4c6c5-344c-4959-a155-1774ffcef61b", - "name": "RDI 0", - "status": "MERGED", - "import_date": "2025-01-01T00:00:00Z", - "number_of_individuals": 1, - "number_of_households": 1, - "imported_by": { - "id": "e6410d72-1896-4c5d-bf47-b00f90008e55", - "first_name": "", - "last_name": "", - "email": "user_1@example.com", - "username": "user_1" - }, - "data_source": "XLS" - }, - "flex_fields": {}, - "linked_grievances": [], - "admin_area_title": "", - "active_individuals_count": 1, - "geopoint": null, - "import_id": "HH-25-0000.0346", - "admin_url": "/api/unicorn/household/household/edcafd66-124b-45dc-b8f3-f77e7bc40ca8/change/", - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "currency": null, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "unhcr_id": "", - "village": "", - "address": "", - "zip_code": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "other_sex_group_count": null, - "start": null, - "deviceid": "", - "fchild_hoh": null, - "child_hoh": null, - "returnee": null, - "size": null, - "residence_status": "None", - "program_registration_id": null, - "delivered_quantities": [ - { - "currency": "USD", - "total_delivered_quantity": "0.00" - } - ], - "consent": null, - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "registration_method": "", - "consent_sharing": [], - "roles_in_household": [ - { - "id": "544d6ac4-6729-4df7-a6a2-255ecab247f1", - "individual": { - "id": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", - "unicef_id": "IND-25-0000.0665" - }, - "role": "PRIMARY" - } - ] - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json deleted file mode 100644 index 54978e87e87..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "business_area": { - "master": { - "model": "core.businessarea", - "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/household.fixture.json b/tests/unit/api_contract/_api_checker/test_households/household.fixture.json deleted file mode 100644 index bd0992af2f5..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/household.fixture.json +++ /dev/null @@ -1,388 +0,0 @@ -{ - "household": { - "master": { - "model": "household.household", - "pk": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315202, - "unicef_id": "HH-25-0000.0346", - "internal_data": {}, - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "registration_data_import": "e2d4c6c5-344c-4959-a155-1774ffcef61b", - "household_collection": null, - "storage_obj": null, - "copied_from": null, - "country_origin": null, - "country": null, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "head_of_household": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", - "facility": null, - "consent_sign": "", - "consent": null, - "consent_sharing": "", - "residence_status": "", - "address": "", - "zip_code": null, - "size": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "children_count": null, - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "male_children_disabled_count": null, - "female_children_disabled_count": null, - "other_sex_group_count": null, - "unknown_sex_group_count": null, - "returnee": null, - "fchild_hoh": null, - "child_hoh": null, - "village": "", - "currency_old": "", - "currency": null, - "unhcr_id": "", - "detail_id": null, - "originating_id": null, - "start": null, - "registration_method": "", - "family_id": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "collect_type": "STANDARD", - "program_registration_id": null, - "total_cash_received_usd": null, - "total_cash_received": null, - "flex_fields": {}, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "withdrawn": false, - "withdrawn_date": null, - "longitude": null, - "latitude": null, - "deviceid": "", - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "kobo_submission_uuid": null, - "kobo_submission_time": null, - "enumerator_rec_id": null, - "flex_registrations_record_id": null, - "identification_key": null, - "extra_rdis": [] - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.program", - "pk": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315201, - "data_collecting_type": 330, - "beneficiary_group": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "name": "Program 0", - "code": "n1i2", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 330, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 330 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "e2d4c6c5-344c-4959-a155-1774ffcef61b", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "e6410d72-1896-4c5d-bf47-b00f90008e55", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "e6410d72-1896-4c5d-bf47-b00f90008e55", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 1181, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1181, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.individual", - "pk": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "unicef_id": "IND-25-0000.0665", - "internal_data": {}, - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "registration_data_import": "e2d4c6c5-344c-4959-a155-1774ffcef61b", - "household": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json deleted file mode 100644 index c7ab4401dbc..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "household_role": { - "master": { - "model": "household.individualroleinhousehold", - "pk": "544d6ac4-6729-4df7-a6a2-255ecab247f1", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "individual": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", - "household": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", - "role": "PRIMARY", - "copied_from": null - } - }, - "deps": [ - { - "model": "household.individual", - "pk": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315201, - "unicef_id": "IND-25-0000.0665", - "internal_data": {}, - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "registration_data_import": "e2d4c6c5-344c-4959-a155-1774ffcef61b", - "household": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - }, - { - "model": "core.businessarea", - "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.program", - "pk": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315202, - "data_collecting_type": 330, - "beneficiary_group": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "name": "Program 0", - "code": "n1i2", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 330, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 330 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "e2d4c6c5-344c-4959-a155-1774ffcef61b", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315201, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "e6410d72-1896-4c5d-bf47-b00f90008e55", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "e6410d72-1896-4c5d-bf47-b00f90008e55", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 1181, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1181, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.household", - "pk": "edcafd66-124b-45dc-b8f3-f77e7bc40ca8", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315203, - "unicef_id": "HH-25-0000.0346", - "internal_data": {}, - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "program": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "registration_data_import": "e2d4c6c5-344c-4959-a155-1774ffcef61b", - "household_collection": null, - "storage_obj": null, - "copied_from": null, - "country_origin": null, - "country": null, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "head_of_household": "687fc23d-3880-4fde-b347-d13d6cfb2f4a", - "facility": null, - "consent_sign": "", - "consent": null, - "consent_sharing": "", - "residence_status": "", - "address": "", - "zip_code": null, - "size": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "children_count": null, - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "male_children_disabled_count": null, - "female_children_disabled_count": null, - "other_sex_group_count": null, - "unknown_sex_group_count": null, - "returnee": null, - "fchild_hoh": null, - "child_hoh": null, - "village": "", - "currency_old": "", - "currency": null, - "unhcr_id": "", - "detail_id": null, - "originating_id": null, - "start": null, - "registration_method": "", - "family_id": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "collect_type": "STANDARD", - "program_registration_id": null, - "total_cash_received_usd": null, - "total_cash_received": null, - "flex_fields": {}, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "withdrawn": false, - "withdrawn_date": null, - "longitude": null, - "latitude": null, - "deviceid": "", - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "kobo_submission_uuid": null, - "kobo_submission_time": null, - "enumerator_rec_id": null, - "flex_registrations_record_id": null, - "identification_key": null, - "extra_rdis": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/program.fixture.json b/tests/unit/api_contract/_api_checker/test_households/program.fixture.json deleted file mode 100644 index 6cc9b10c9a5..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/program.fixture.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "program": { - "master": { - "model": "program.program", - "pk": "5d853250-c552-4f4d-baac-1cfb1ca2bd30", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "data_collecting_type": 330, - "beneficiary_group": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "name": "Program 0", - "code": "n1i2", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - "deps": [ - { - "model": "core.datacollectingtype", - "pk": 330, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 330 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "84e2f715-dca4-4625-bbbe-44b384aeb0d2", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "core.businessarea", - "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/role.fixture.json b/tests/unit/api_contract/_api_checker/test_households/role.fixture.json deleted file mode 100644 index 191f5ba3214..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/role.fixture.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "role": { - "master": { - "model": "account.role", - "pk": "dea51bf3-157f-4cf1-9fb3-50e0299055b0", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json deleted file mode 100644 index dd0274af4e6..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "role_assignment": { - "master": { - "model": "account.roleassignment", - "pk": "19c7c3d5-ff22-4aba-a23d-c7b2dd4fe454", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "business_area": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "user": "0f775742-42ac-41ea-a111-11d129c4bf3c", - "partner": null, - "role": "dea51bf3-157f-4cf1-9fb3-50e0299055b0", - "program": null, - "expiry_date": null, - "group": null - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "e8659e32-1a0f-4f96-98ab-6b18477932b8", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "account.user", - "pk": "0f775742-42ac-41ea-a111-11d129c4bf3c", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1179, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1179, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "account.role", - "pk": "dea51bf3-157f-4cf1-9fb3-50e0299055b0", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json deleted file mode 100644 index e6f629c41ac..00000000000 --- a/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "superuser": { - "master": { - "model": "account.user", - "pk": "0f775742-42ac-41ea-a111-11d129c4bf3c", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1179, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - "deps": [ - { - "model": "account.partner", - "pk": 1179, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index 91a411eb634..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "ETag": "ca839331ce0ed3ea60d281f1574f9080", - "Cache-Control": "private, no-cache", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1153" - }, - "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/c7eh/individuals/?limit=50&offset=50", - "previous": null, - "results": [ - { - "id": "c41b9f18-04ec-4f5d-b18d-75a70d10d034", - "unicef_id": "IND-25-0000.0668", - "full_name": "Person 0", - "full_name_local": null, - "household": null, - "status": "ACTIVE", - "relationship": "", - "age": 35, - "sex": "MALE", - "relationship_display": "", - "birth_date": "1990-01-01", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_batch_status_display": "Unique in batch", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status_display": "Not Processed", - "deduplication_batch_results": [], - "biometric_deduplication_batch_results": [], - "deduplication_golden_record_status": "UNIQUE", - "deduplication_golden_record_status_display": "Unique", - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_status_display": "Not Processed", - "deduplication_golden_record_results": [], - "biometric_deduplication_golden_record_results": [], - "program": { - "id": "248d5486-a703-41b8-92cc-d0a1b5d3b447", - "name": "Program 0", - "code": "c7eh" - }, - "last_registration_date": "2025-01-01", - "role": null - } - ] - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_c41b9f18-04ec-4f5d-b18d-75a70d10d034_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_c41b9f18-04ec-4f5d-b18d-75a70d10d034_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index 5a14f5b832d..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_c7eh_individuals_c41b9f18-04ec-4f5d-b18d-75a70d10d034_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1803" - }, - "data": { - "id": "c41b9f18-04ec-4f5d-b18d-75a70d10d034", - "unicef_id": "IND-25-0000.0668", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "age": 35, - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "household": null, - "role": null, - "relationship": "", - "registration_data_import": { - "id": "da576372-198d-401f-a809-ff8bdb0c8df2", - "name": "RDI 0", - "status": "MERGED", - "import_date": "2025-01-01T00:00:00Z", - "number_of_individuals": 1, - "number_of_households": 1, - "imported_by": { - "id": "ab42e88d-160c-4c89-8b23-5156c24eb0de", - "first_name": "", - "last_name": "", - "email": "user_1@example.com", - "username": "user_1" - }, - "data_source": "XLS" - }, - "import_id": "IND-25-0000.0668", - "admin_url": "/api/unicorn/household/individual/c41b9f18-04ec-4f5d-b18d-75a70d10d034/change/", - "preferred_language": null, - "roles_in_households": [], - "observed_disability": [ - "NONE" - ], - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "disability": "not disabled", - "documents": [], - "identities": [], - "accounts": [], - "email": "", - "phone_no": "", - "phone_no_valid": false, - "phone_no_alternative": "", - "phone_no_alternative_valid": false, - "sanction_list_last_check": null, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "status": "ACTIVE", - "deduplication_golden_record_status": "UNIQUE", - "flex_fields": {}, - "linked_grievances": [], - "photo": null, - "biometric_deduplication_golden_record_status": "Not Processed", - "linked_grievances_biometrics": [], - "enrolled_in_nutrition_programme": null, - "who_answers_phone": "", - "who_answers_alt_phone": "", - "payment_delivery_phone_no": null, - "identification_key": null, - "identification_key_label": null - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json deleted file mode 100644 index 6e6a6761cbf..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "business_area": { - "master": { - "model": "core.businessarea", - "pk": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json deleted file mode 100644 index adc07253510..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "individual": { - "master": { - "model": "household.individual", - "pk": "c41b9f18-04ec-4f5d-b18d-75a70d10d034", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "unicef_id": "IND-25-0000.0668", - "internal_data": {}, - "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "program": "248d5486-a703-41b8-92cc-d0a1b5d3b447", - "registration_data_import": "da576372-198d-401f-a809-ff8bdb0c8df2", - "household": null, - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.program", - "pk": "248d5486-a703-41b8-92cc-d0a1b5d3b447", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315201, - "data_collecting_type": 331, - "beneficiary_group": "f44213e8-ff73-4616-8f63-38035cd7d72c", - "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "name": "Program 0", - "code": "c7eh", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 331, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 331 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "f44213e8-ff73-4616-8f63-38035cd7d72c", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "da576372-198d-401f-a809-ff8bdb0c8df2", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "program": "248d5486-a703-41b8-92cc-d0a1b5d3b447", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "ab42e88d-160c-4c89-8b23-5156c24eb0de", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "ab42e88d-160c-4c89-8b23-5156c24eb0de", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 1184, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1184, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json deleted file mode 100644 index a831f18674c..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "program": { - "master": { - "model": "program.program", - "pk": "248d5486-a703-41b8-92cc-d0a1b5d3b447", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "data_collecting_type": 331, - "beneficiary_group": "f44213e8-ff73-4616-8f63-38035cd7d72c", - "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "name": "Program 0", - "code": "c7eh", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - "deps": [ - { - "model": "core.datacollectingtype", - "pk": 331, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 331 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "f44213e8-ff73-4616-8f63-38035cd7d72c", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "core.businessarea", - "pk": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json deleted file mode 100644 index 04cc954f959..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "role": { - "master": { - "model": "account.role", - "pk": "3dc772e9-542d-4f0d-bee9-fac9a28b5442", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json deleted file mode 100644 index 1599c23c7fb..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "role_assignment": { - "master": { - "model": "account.roleassignment", - "pk": "0b1b5689-586a-4820-8a77-c6b93a78ad82", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "business_area": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "user": "95a695c0-4e86-4c42-b5b5-5814d77a6f8e", - "partner": null, - "role": "3dc772e9-542d-4f0d-bee9-fac9a28b5442", - "program": null, - "expiry_date": null, - "group": null - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "5659ec62-788c-4e0c-9a04-6b1222ee7722", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "account.user", - "pk": "95a695c0-4e86-4c42-b5b5-5814d77a6f8e", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1182, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 1182, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "account.role", - "pk": "3dc772e9-542d-4f0d-bee9-fac9a28b5442", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json deleted file mode 100644 index da3b3d37ad2..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "superuser": { - "master": { - "model": "account.user", - "pk": "95a695c0-4e86-4c42-b5b5-5814d77a6f8e", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 1182, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - "deps": [ - { - "model": "account.partner", - "pk": 1182, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index 3d65746e838..00000000000 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1139" - }, - "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/individuals/?limit=50&offset=50", - "previous": null, - "results": [ - { - "id": "95391fd5-c41f-4a18-b716-b96eec3bc96d", - "unicef_id": "IND-25-0000.0008", - "full_name": "Person 0", - "full_name_local": null, - "household": null, - "status": "ACTIVE", - "relationship": "", - "age": 35, - "sex": "MALE", - "relationship_display": "", - "birth_date": "1990-01-01", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_batch_status_display": "Unique in batch", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status_display": "Not Processed", - "deduplication_batch_results": [], - "biometric_deduplication_batch_results": [], - "deduplication_golden_record_status": "UNIQUE", - "deduplication_golden_record_status_display": "Unique", - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_status_display": "Not Processed", - "deduplication_golden_record_results": [], - "biometric_deduplication_golden_record_results": [], - "program": { - "id": "75717c42-48fb-43af-8b4a-6bd2206acd88", - "name": "Program 0", - "code": "r2sz" - }, - "last_registration_date": "2025-01-01", - "role": null - } - ] - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index c6468e546a0..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1665" - }, - "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/k4s3/payment-verifications/20ef167b-8437-4033-b9eb-c2d2deb0d761/verifications/?limit=50&offset=50", - "previous": null, - "results": [ - { - "id": "c4446414-01e1-420f-879b-4264a5bd7a32", - "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "household_unicef_id": "HH-25-0000.0001", - "household_size": null, - "household_admin2": "", - "household_status": "ACTIVE", - "hoh_phone_no": "None", - "hoh_phone_no_alternative": "None", - "snapshot_collector_full_name": null, - "snapshot_alternate_collector_full_name": null, - "snapshot_alternate_collector_id": null, - "fsp_name": "", - "entitlement_quantity": null, - "entitlement_quantity_usd": null, - "delivered_quantity": null, - "delivered_quantity_usd": null, - "delivery_date": null, - "delivery_type": null, - "status": "Pending", - "status_display": "Pending", - "currency": "PLN", - "fsp_auth_code": "", - "hoh_id": null, - "hoh_unicef_id": null, - "hoh_full_name": null, - "collector_id": "7e849550-2c8d-4be6-a458-566798967acf", - "collector_phone_no": "", - "collector_phone_no_alt": "", - "verification": { - "id": "caad1e0a-2670-457f-87f6-01b59084bde6", - "received_amount": null, - "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-1", - "verification_channel": "MANUAL", - "admin_url": null, - "version": 1735688653315201, - "is_manually_editable": true - }, - "payment_plan_hard_conflicted": false, - "payment_plan_hard_conflicted_data": [], - "payment_plan_soft_conflicted": false, - "payment_plan_soft_conflicted_data": [], - "people_individual": null, - "program_name": "Program 0", - "program_code": "k4s3", - "collector_type_display": "Primary collector" - } - ] - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_c4446414-01e1-420f-879b-4264a5bd7a32_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_c4446414-01e1-420f-879b-4264a5bd7a32_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json deleted file mode 100644 index 2ec2936b669..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_k4s3_payment-verifications_20ef167b-8437-4033-b9eb-c2d2deb0d761_verifications_c4446414-01e1-420f-879b-4264a5bd7a32_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "status_code": 200, - "headers": { - "Content-Type": "application/json", - "Vary": "Accept, Cookie, origin", - "Allow": "GET, PATCH, HEAD, OPTIONS", - "X-Hope-Backend-Version": "None", - "X-Content-Type-Options": "nosniff", - "Referrer-Policy": "same-origin", - "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "11362" - }, - "data": { - "id": "c4446414-01e1-420f-879b-4264a5bd7a32", - "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "household_unicef_id": "HH-25-0000.0001", - "household_size": null, - "household_admin2": "", - "household_status": "ACTIVE", - "hoh_phone_no": "None", - "hoh_phone_no_alternative": "None", - "snapshot_collector_full_name": null, - "snapshot_alternate_collector_full_name": null, - "snapshot_alternate_collector_id": null, - "fsp_name": "", - "entitlement_quantity": null, - "entitlement_quantity_usd": null, - "delivered_quantity": null, - "delivered_quantity_usd": null, - "delivery_date": null, - "delivery_type": null, - "status": "Pending", - "status_display": "Pending", - "currency": "PLN", - "fsp_auth_code": "", - "hoh_id": null, - "hoh_unicef_id": null, - "hoh_full_name": null, - "collector_id": "7e849550-2c8d-4be6-a458-566798967acf", - "collector_phone_no": "", - "collector_phone_no_alt": "", - "verification": { - "id": "caad1e0a-2670-457f-87f6-01b59084bde6", - "received_amount": null, - "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-2", - "verification_channel": "MANUAL", - "admin_url": null, - "version": 1735688653315201, - "is_manually_editable": true - }, - "payment_plan_hard_conflicted": false, - "payment_plan_hard_conflicted_data": [], - "payment_plan_soft_conflicted": false, - "payment_plan_soft_conflicted_data": [], - "people_individual": null, - "program_name": "Program 0", - "program_code": "k4s3", - "collector_type_display": "Primary collector", - "parent": { - "id": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "unicef_id": "PP-BA0000-25-00000001", - "name": null, - "status": "FINISHED", - "total_households_count": 0, - "total_individuals_count": 0, - "currency": null, - "excluded_ids": null, - "total_entitled_quantity": null, - "total_delivered_quantity": null, - "total_undelivered_quantity": null, - "dispersion_start_date": "2025-01-01", - "dispersion_end_date": "2025-01-31", - "is_follow_up": false, - "follow_ups": [], - "created_by": " ", - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "program": { - "id": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "code": "k4s3", - "name": "Program 0", - "status": "ACTIVE", - "screen_beneficiary": false - }, - "version": 1735688653315204, - "background_action_status": null, - "background_action_status_display": null, - "start_date": null, - "end_date": null, - "program_cycle": { - "id": "5dce5825-12bc-401e-9883-5c109be49cd2", - "title": "Programme Cycle 0" - }, - "has_payment_list_export_file": false, - "has_fsp_delivery_mechanism_xlsx_template": false, - "imported_file_name": "", - "imported_file_date": null, - "payments_conflicts_count": 0, - "delivery_mechanism": null, - "volume_by_delivery_mechanism": [ - { - "id": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "delivery_mechanism": null, - "volume": null, - "volume_usd": null - } - ], - "split_choices": [ - { - "name": "By Admin Area 1", - "value": "BY_ADMIN_AREA1" - }, - { - "name": "By Admin Area 2", - "value": "BY_ADMIN_AREA2" - }, - { - "name": "By Admin Area 3", - "value": "BY_ADMIN_AREA3" - }, - { - "name": "By Collector", - "value": "BY_COLLECTOR" - }, - { - "name": "By Records", - "value": "BY_RECORDS" - }, - { - "name": "No Split", - "value": "NO_SPLIT" - } - ], - "exclusion_reason": null, - "exclude_household_error": null, - "bank_reconciliation_success": 0, - "bank_reconciliation_error": 0, - "can_create_payment_verification_plan": false, - "available_payment_records_count": 0, - "reconciliation_summary": { - "delivered_fully": 0, - "delivered_partially": 0, - "not_delivered": 0, - "unsuccessful": 0, - "pending": 1, - "reconciled": 0, - "number_of_payments": 1 - }, - "excluded_households": [], - "excluded_individuals": [], - "can_create_follow_up": false, - "total_withdrawn_households_count": 0, - "unsuccessful_payments_count": 0, - "can_send_to_payment_gateway": false, - "can_split": false, - "supporting_documents": [], - "total_households_count_with_valid_phone_no": 0, - "is_payment_gateway_and_all_sent_to_fsp": false, - "fsp_communication_channel": "XLSX", - "financial_service_provider": null, - "can_export_xlsx": false, - "can_download_xlsx": false, - "can_send_xlsx_password": false, - "approval_process": [], - "total_entitled_quantity_usd": null, - "total_entitled_quantity_revised_usd": null, - "total_delivered_quantity_usd": null, - "total_undelivered_quantity_usd": null, - "male_children_count": 0, - "female_children_count": 0, - "male_adults_count": 0, - "female_adults_count": 0, - "steficon_rule": null, - "source_payment_plan": null, - "exchange_rate": null, - "custom_exchange_rate": false, - "unore_exchange_rate": null, - "eligible_payments_count": 1, - "funds_commitments": null, - "available_funds_commitments": [], - "payment_verification_plans": [ - { - "id": "86a963dd-bae6-4e0a-946a-21bd480d2c93", - "unicef_id": "PVP-2", - "status": "PENDING", - "status_display": "Pending", - "verification_channel": "MANUAL", - "sampling": "Full list", - "sex_filter": null, - "activation_date": null, - "completion_date": null, - "sample_size": null, - "responded_count": null, - "received_count": null, - "not_received_count": null, - "received_with_problems_count": null, - "confidence_interval": null, - "margin_of_error": null, - "xlsx_file_exporting": false, - "xlsx_file_imported": false, - "has_xlsx_file": false, - "xlsx_file_was_downloaded": false, - "error": null, - "age_filter_min": null, - "age_filter_max": null, - "excluded_admin_areas_filter": null, - "rapid_pro_flow_id": "", - "admin_url": "/api/unicorn/payment/paymentverificationplan/86a963dd-bae6-4e0a-946a-21bd480d2c93/change/" - } - ], - "admin_url": "/api/unicorn/payment/paymentplan/20ef167b-8437-4033-b9eb-c2d2deb0d761/change/", - "abort_comment": "", - "flat_amount_value": null - }, - "admin_url": "/api/unicorn/payment/payment/c4446414-01e1-420f-879b-4264a5bd7a32/change/", - "source_payment": null, - "household": { - "id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "unicef_id": "HH-25-0000.0001", - "head_of_household": { - "id": "7e849550-2c8d-4be6-a458-566798967acf", - "full_name": "Person 0", - "full_name_local": null - }, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "program": "Program 0", - "country": "", - "country_origin": "", - "status": "ACTIVE", - "total_cash_received": null, - "total_cash_received_usd": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "has_duplicates": false, - "registration_data_import": { - "id": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "name": "RDI 0", - "status": "MERGED", - "import_date": "2025-01-01T00:00:00Z", - "number_of_individuals": 1, - "number_of_households": 1, - "imported_by": { - "id": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", - "first_name": "", - "last_name": "", - "email": "user_1@example.com", - "username": "user_1" - }, - "data_source": "XLS" - }, - "flex_fields": {}, - "linked_grievances": [], - "admin_area_title": "", - "active_individuals_count": 1, - "geopoint": null, - "import_id": "HH-25-0000.0001", - "admin_url": "/api/unicorn/household/household/b5c8aefa-43e7-46e6-ba43-50031b4f3204/change/", - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "currency": null, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "unhcr_id": "", - "village": "", - "address": "", - "zip_code": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "other_sex_group_count": null, - "start": null, - "deviceid": "", - "fchild_hoh": null, - "child_hoh": null, - "returnee": null, - "size": null, - "residence_status": "None", - "program_registration_id": null, - "delivered_quantities": [ - { - "currency": "USD", - "total_delivered_quantity": "0.00" - }, - { - "currency": "PLN", - "total_delivered_quantity": "0.00" - } - ], - "consent": null, - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "registration_method": "", - "consent_sharing": [], - "roles_in_household": [ - { - "id": "a2553786-3a3c-42e8-b6e3-ff0b6ab6d113", - "individual": { - "id": "7e849550-2c8d-4be6-a458-566798967acf", - "unicef_id": "IND-25-0000.0001" - }, - "role": "PRIMARY" - } - ] - }, - "delivery_mechanism": null, - "collector": { - "id": "7e849550-2c8d-4be6-a458-566798967acf", - "unicef_id": "IND-25-0000.0001", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "age": 35, - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "household": { - "id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "unicef_id": "HH-25-0000.0001", - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "total_cash_received": null, - "total_cash_received_usd": null, - "delivered_quantities": [ - { - "currency": "USD", - "total_delivered_quantity": "0.00" - }, - { - "currency": "PLN", - "total_delivered_quantity": "0.00" - } - ], - "start": null, - "zip_code": null, - "residence_status": "None", - "country_origin": "", - "country": "", - "address": "", - "village": "", - "geopoint": null, - "import_id": "HH-25-0000.0001", - "program_code": "k4s3" - }, - "role": "PRIMARY", - "relationship": "", - "registration_data_import": { - "id": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "name": "RDI 0", - "status": "MERGED", - "import_date": "2025-01-01T00:00:00Z", - "number_of_individuals": 1, - "number_of_households": 1, - "imported_by": { - "id": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", - "first_name": "", - "last_name": "", - "email": "user_1@example.com", - "username": "user_1" - }, - "data_source": "XLS" - }, - "import_id": "IND-25-0000.0001", - "admin_url": "/api/unicorn/household/individual/7e849550-2c8d-4be6-a458-566798967acf/change/", - "preferred_language": null, - "roles_in_households": [ - { - "id": "a2553786-3a3c-42e8-b6e3-ff0b6ab6d113", - "household": { - "id": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "unicef_id": "HH-25-0000.0001", - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "total_cash_received": null, - "total_cash_received_usd": null, - "delivered_quantities": [ - { - "currency": "USD", - "total_delivered_quantity": "0.00" - }, - { - "currency": "PLN", - "total_delivered_quantity": "0.00" - } - ], - "start": null, - "zip_code": null, - "residence_status": "None", - "country_origin": "", - "country": "", - "address": "", - "village": "", - "geopoint": null, - "import_id": "HH-25-0000.0001", - "program_code": "k4s3" - }, - "role": "PRIMARY" - } - ], - "observed_disability": [ - "NONE" - ], - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "disability": "not disabled", - "documents": [], - "identities": [], - "accounts": [], - "email": "", - "phone_no": "", - "phone_no_valid": false, - "phone_no_alternative": "", - "phone_no_alternative_valid": false, - "sanction_list_last_check": null, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "status": "ACTIVE", - "deduplication_golden_record_status": "UNIQUE", - "flex_fields": {}, - "linked_grievances": [], - "photo": null, - "biometric_deduplication_golden_record_status": "Not Processed", - "linked_grievances_biometrics": [], - "enrolled_in_nutrition_programme": null, - "who_answers_phone": "", - "who_answers_alt_phone": "", - "payment_delivery_phone_no": null, - "identification_key": null, - "identification_key_label": null - }, - "reason_for_unsuccessful_payment": null, - "additional_document_number": null, - "additional_document_type": null, - "additional_collector_name": null, - "transaction_reference_id": null, - "snapshot_collector_account_data": null, - "extras": {}, - "sent_to_fsp_date": null - }, - "content_type": "application/json" -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json deleted file mode 100644 index 90652ab7342..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "business_area": { - "master": { - "model": "core.businessarea", - "pk": "1398facd-cd19-44db-8026-84d32d494ad4", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json deleted file mode 100644 index c65928636b6..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json +++ /dev/null @@ -1,388 +0,0 @@ -{ - "household": { - "master": { - "model": "household.household", - "pk": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315202, - "unicef_id": "HH-25-0000.0001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "household_collection": null, - "storage_obj": null, - "copied_from": null, - "country_origin": null, - "country": null, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "head_of_household": "7e849550-2c8d-4be6-a458-566798967acf", - "facility": null, - "consent_sign": "", - "consent": null, - "consent_sharing": "", - "residence_status": "", - "address": "", - "zip_code": null, - "size": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "children_count": null, - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "male_children_disabled_count": null, - "female_children_disabled_count": null, - "other_sex_group_count": null, - "unknown_sex_group_count": null, - "returnee": null, - "fchild_hoh": null, - "child_hoh": null, - "village": "", - "currency_old": "", - "currency": null, - "unhcr_id": "", - "detail_id": null, - "originating_id": null, - "start": null, - "registration_method": "", - "family_id": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "collect_type": "STANDARD", - "program_registration_id": null, - "total_cash_received_usd": null, - "total_cash_received": null, - "flex_fields": {}, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "withdrawn": false, - "withdrawn_date": null, - "longitude": null, - "latitude": null, - "deviceid": "", - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "kobo_submission_uuid": null, - "kobo_submission_time": null, - "enumerator_rec_id": null, - "flex_registrations_record_id": null, - "identification_key": null, - "extra_rdis": [] - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "1398facd-cd19-44db-8026-84d32d494ad4", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.program", - "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315203, - "data_collecting_type": 1, - "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "name": "Program 0", - "code": "k4s3", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 1, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 1 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 5, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 5, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.individual", - "pk": "7e849550-2c8d-4be6-a458-566798967acf", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "unicef_id": "IND-25-0000.0001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json deleted file mode 100644 index 89b7b6e68f5..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "household_role": { - "master": { - "model": "household.individualroleinhousehold", - "pk": "a2553786-3a3c-42e8-b6e3-ff0b6ab6d113", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "individual": "7e849550-2c8d-4be6-a458-566798967acf", - "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "role": "PRIMARY", - "copied_from": null - } - }, - "deps": [ - { - "model": "household.individual", - "pk": "7e849550-2c8d-4be6-a458-566798967acf", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315201, - "unicef_id": "IND-25-0000.0001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - }, - { - "model": "core.businessarea", - "pk": "1398facd-cd19-44db-8026-84d32d494ad4", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.program", - "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315204, - "data_collecting_type": 1, - "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "name": "Program 0", - "code": "k4s3", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 1, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 1 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315201, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 5, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 5, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.household", - "pk": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315203, - "unicef_id": "HH-25-0000.0001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "household_collection": null, - "storage_obj": null, - "copied_from": null, - "country_origin": null, - "country": null, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "head_of_household": "7e849550-2c8d-4be6-a458-566798967acf", - "facility": null, - "consent_sign": "", - "consent": null, - "consent_sharing": "", - "residence_status": "", - "address": "", - "zip_code": null, - "size": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "children_count": null, - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "male_children_disabled_count": null, - "female_children_disabled_count": null, - "other_sex_group_count": null, - "unknown_sex_group_count": null, - "returnee": null, - "fchild_hoh": null, - "child_hoh": null, - "village": "", - "currency_old": "", - "currency": null, - "unhcr_id": "", - "detail_id": null, - "originating_id": null, - "start": null, - "registration_method": "", - "family_id": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "collect_type": "STANDARD", - "program_registration_id": null, - "total_cash_received_usd": null, - "total_cash_received": null, - "flex_fields": {}, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "withdrawn": false, - "withdrawn_date": null, - "longitude": null, - "latitude": null, - "deviceid": "", - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "kobo_submission_uuid": null, - "kobo_submission_time": null, - "enumerator_rec_id": null, - "flex_registrations_record_id": null, - "identification_key": null, - "extra_rdis": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json deleted file mode 100644 index a606e8fec46..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "payment_plan": { - "master": { - "model": "payment.paymentplan", - "pk": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315201, - "unicef_id": "PP-BA0000-25-00000001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program_cycle": "5dce5825-12bc-401e-9883-5c109be49cd2", - "delivery_mechanism": null, - "financial_service_provider": null, - "imported_file": null, - "export_file_entitlement": null, - "export_file_per_fsp": null, - "export_pdf_file_summary": null, - "reconciliation_import_file": null, - "steficon_rule": null, - "steficon_rule_targeting": null, - "created_by": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "source_payment_plan": null, - "storage_file": null, - "name": null, - "start_date": null, - "end_date": null, - "currency_old": null, - "currency": null, - "dispersion_start_date": "2025-01-01", - "dispersion_end_date": "2025-01-31", - "excluded_ids": null, - "exclusion_reason": null, - "vulnerability_score_min": null, - "vulnerability_score_max": null, - "abort_comment": "", - "flat_amount_value": null, - "status": "FINISHED", - "background_action_status": null, - "build_status": null, - "built_at": null, - "exchange_rate": null, - "custom_exchange_rate": false, - "custom_exchange_rate_set_by": null, - "female_children_count": 0, - "male_children_count": 0, - "female_adults_count": 0, - "male_adults_count": 0, - "total_households_count": 0, - "total_individuals_count": 0, - "imported_file_date": null, - "total_entitled_quantity": null, - "total_entitled_quantity_usd": null, - "total_entitled_quantity_revised": null, - "total_entitled_quantity_revised_usd": null, - "total_delivered_quantity": null, - "total_delivered_quantity_usd": null, - "total_undelivered_quantity": null, - "total_undelivered_quantity_usd": null, - "steficon_targeting_applied_date": null, - "steficon_applied_date": null, - "is_follow_up": false, - "exclude_household_error": null, - "status_date": "2025-01-01T00:00:00Z", - "is_cash_assist": false, - "flag_exclude_if_active_adjudication_ticket": false, - "flag_exclude_if_on_sanction_list": false - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "1398facd-cd19-44db-8026-84d32d494ad4", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.programcycle", - "pk": "5dce5825-12bc-401e-9883-5c109be49cd2", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "unicef_id": "PC-BA0000-25-000001", - "title": "Programme Cycle 0", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "status": "ACTIVE", - "start_date": "2025-01-01", - "end_date": null, - "created_by": null - } - }, - { - "model": "program.program", - "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315201, - "data_collecting_type": 1, - "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "name": "Program 0", - "code": "k4s3", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 1, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 1 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "account.user", - "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 3, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 3, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json deleted file mode 100644 index c4560bc194a..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json +++ /dev/null @@ -1,617 +0,0 @@ -{ - "payment_verification": { - "master": { - "model": "payment.paymentverification", - "pk": "caad1e0a-2670-457f-87f6-01b59084bde6", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "payment": "c4446414-01e1-420f-879b-4264a5bd7a32", - "payment_verification_plan": "86a963dd-bae6-4e0a-946a-21bd480d2c93", - "status": "PENDING", - "status_date": "2025-01-01T00:00:00Z", - "received_amount": null, - "sent_to_rapid_pro": false - } - }, - "deps": [ - { - "model": "payment.payment", - "pk": "c4446414-01e1-420f-879b-4264a5bd7a32", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "unicef_id": "RCPT-BA0000-25-0.000.001", - "signature_hash": "1aa0ca0ed5a8c2481ef01a7c11db83dd4bac3517", - "internal_data": {}, - "parent": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "parent_split": null, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": null, - "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "head_of_household": null, - "delivery_type": null, - "financial_service_provider": null, - "collector": "7e849550-2c8d-4be6-a458-566798967acf", - "collector_type": "PRIMARY", - "source_payment": null, - "is_follow_up": false, - "status": "Pending", - "status_date": "2025-01-01T00:00:00Z", - "currency_old": null, - "currency": 111, - "entitlement_quantity": null, - "entitlement_quantity_usd": null, - "entitlement_date": null, - "delivered_quantity": null, - "delivered_quantity_usd": null, - "delivery_date": null, - "transaction_reference_id": null, - "transaction_status_blockchain_link": null, - "conflicted": false, - "excluded": false, - "has_valid_wallet": true, - "reason_for_unsuccessful_payment": null, - "order_number": null, - "token_number": null, - "additional_collector_name": null, - "additional_document_type": null, - "additional_document_number": null, - "fsp_auth_code": null, - "extras": {}, - "vulnerability_score": null, - "is_cash_assist": false, - "sent_to_fsp_date": null - } - }, - { - "model": "payment.paymentplan", - "pk": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315203, - "unicef_id": "PP-BA0000-25-00000001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program_cycle": "5dce5825-12bc-401e-9883-5c109be49cd2", - "delivery_mechanism": null, - "financial_service_provider": null, - "imported_file": null, - "export_file_entitlement": null, - "export_file_per_fsp": null, - "export_pdf_file_summary": null, - "reconciliation_import_file": null, - "steficon_rule": null, - "steficon_rule_targeting": null, - "created_by": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "source_payment_plan": null, - "storage_file": null, - "name": null, - "start_date": null, - "end_date": null, - "currency_old": null, - "currency": null, - "dispersion_start_date": "2025-01-01", - "dispersion_end_date": "2025-01-31", - "excluded_ids": null, - "exclusion_reason": null, - "vulnerability_score_min": null, - "vulnerability_score_max": null, - "abort_comment": "", - "flat_amount_value": null, - "status": "FINISHED", - "background_action_status": null, - "build_status": null, - "built_at": null, - "exchange_rate": null, - "custom_exchange_rate": false, - "custom_exchange_rate_set_by": null, - "female_children_count": 0, - "male_children_count": 0, - "female_adults_count": 0, - "male_adults_count": 0, - "total_households_count": 0, - "total_individuals_count": 0, - "imported_file_date": null, - "total_entitled_quantity": null, - "total_entitled_quantity_usd": null, - "total_entitled_quantity_revised": null, - "total_entitled_quantity_revised_usd": null, - "total_delivered_quantity": null, - "total_delivered_quantity_usd": null, - "total_undelivered_quantity": null, - "total_undelivered_quantity_usd": null, - "steficon_targeting_applied_date": null, - "steficon_applied_date": null, - "is_follow_up": false, - "exclude_household_error": null, - "status_date": "2025-01-01T00:00:00Z", - "is_cash_assist": false, - "flag_exclude_if_active_adjudication_ticket": false, - "flag_exclude_if_on_sanction_list": false - } - }, - { - "model": "core.businessarea", - "pk": "1398facd-cd19-44db-8026-84d32d494ad4", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.programcycle", - "pk": "5dce5825-12bc-401e-9883-5c109be49cd2", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315202, - "unicef_id": "PC-BA0000-25-000001", - "title": "Programme Cycle 0", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "status": "ACTIVE", - "start_date": "2025-01-01", - "end_date": null, - "created_by": null - } - }, - { - "model": "program.program", - "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315205, - "data_collecting_type": 1, - "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "name": "Program 0", - "code": "k4s3", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 1, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 1 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "account.user", - "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 3, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 3, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.household", - "pk": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315204, - "unicef_id": "HH-25-0000.0001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "household_collection": null, - "storage_obj": null, - "copied_from": null, - "country_origin": null, - "country": null, - "admin1": null, - "admin2": null, - "admin3": null, - "admin4": null, - "head_of_household": "7e849550-2c8d-4be6-a458-566798967acf", - "facility": null, - "consent_sign": "", - "consent": null, - "consent_sharing": "", - "residence_status": "", - "address": "", - "zip_code": null, - "size": null, - "female_age_group_0_5_count": null, - "female_age_group_6_11_count": null, - "female_age_group_12_17_count": null, - "female_age_group_18_59_count": null, - "female_age_group_60_count": null, - "pregnant_count": null, - "male_age_group_0_5_count": null, - "male_age_group_6_11_count": null, - "male_age_group_12_17_count": null, - "male_age_group_18_59_count": null, - "male_age_group_60_count": null, - "female_age_group_0_5_disabled_count": null, - "female_age_group_6_11_disabled_count": null, - "female_age_group_12_17_disabled_count": null, - "female_age_group_18_59_disabled_count": null, - "female_age_group_60_disabled_count": null, - "male_age_group_0_5_disabled_count": null, - "male_age_group_6_11_disabled_count": null, - "male_age_group_12_17_disabled_count": null, - "male_age_group_18_59_disabled_count": null, - "male_age_group_60_disabled_count": null, - "children_count": null, - "male_children_count": null, - "female_children_count": null, - "children_disabled_count": null, - "male_children_disabled_count": null, - "female_children_disabled_count": null, - "other_sex_group_count": null, - "unknown_sex_group_count": null, - "returnee": null, - "fchild_hoh": null, - "child_hoh": null, - "village": "", - "currency_old": "", - "currency": null, - "unhcr_id": "", - "detail_id": null, - "originating_id": null, - "start": null, - "registration_method": "", - "family_id": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "collect_type": "STANDARD", - "program_registration_id": null, - "total_cash_received_usd": null, - "total_cash_received": null, - "flex_fields": {}, - "first_registration_date": "2025-01-01T00:00:00Z", - "last_registration_date": "2025-01-01T00:00:00Z", - "withdrawn": false, - "withdrawn_date": null, - "longitude": null, - "latitude": null, - "deviceid": "", - "name_enumerator": "", - "org_enumerator": "", - "org_name_enumerator": "", - "kobo_submission_uuid": null, - "kobo_submission_time": null, - "enumerator_rec_id": null, - "flex_registrations_record_id": null, - "identification_key": null, - "extra_rdis": [] - } - }, - { - "model": "registration_data.registrationdataimport", - "pk": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315202, - "name": "RDI 0", - "status": "MERGED", - "deduplication_engine_status": null, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "import_date": "2025-01-01T00:00:00Z", - "imported_by": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", - "data_source": "XLS", - "import_data": null, - "import_from_ids": null, - "exclude_external_collectors": false, - "pull_pictures": true, - "screen_beneficiary": false, - "excluded": false, - "erased": false, - "refuse_reason": null, - "error_message": "", - "sentry_id": "", - "number_of_individuals": 1, - "number_of_households": 1, - "batch_duplicates": 0, - "batch_possible_duplicates": 0, - "batch_unique": 0, - "golden_record_duplicates": 0, - "golden_record_possible_duplicates": 0, - "golden_record_unique": 0, - "dedup_engine_batch_duplicates": 0, - "dedup_engine_golden_record_duplicates": 0 - } - }, - { - "model": "account.user", - "pk": "4ee2ca5d-2f9c-4ba5-ba4c-0d3a47bfcad7", - "fields": { - "password": "", - "last_login": null, - "is_superuser": false, - "username": "user_1", - "first_name": "", - "last_name": "", - "is_staff": false, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_1", - "status": "INVITED", - "partner": 5, - "email": "user_1@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 5, - "fields": { - "name": "Partner 1", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 3, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "household.individual", - "pk": "7e849550-2c8d-4be6-a458-566798967acf", - "fields": { - "rdi_merge_status": "MERGED", - "is_removed": false, - "removed_date": null, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315202, - "unicef_id": "IND-25-0000.0001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "registration_data_import": "440d9f93-58de-46a3-a44d-5899a16c9d4d", - "household": "b5c8aefa-43e7-46e6-ba43-50031b4f3204", - "individual_collection": null, - "copied_from": null, - "individual_id": "", - "photo": "", - "full_name": "Person 0", - "given_name": "", - "middle_name": "", - "family_name": "", - "full_name_local": null, - "given_name_local": null, - "middle_name_local": null, - "family_name_local": null, - "sex": "MALE", - "birth_date": "1990-01-01", - "estimated_birth_date": false, - "marital_status": "", - "phone_no": "", - "phone_no_alternative": "", - "email": "", - "payment_delivery_phone_no": null, - "relationship": "", - "work_status": "NOT_PROVIDED", - "pregnant": null, - "fchild_hoh": false, - "child_hoh": false, - "disability": "not disabled", - "observed_disability": "NONE", - "disability_certificate_picture": "", - "seeing_disability": "", - "hearing_disability": "", - "physical_disability": "", - "memory_disability": "", - "selfcare_disability": "", - "comms_disability": "", - "who_answers_phone": "", - "who_answers_alt_phone": "", - "preferred_language": null, - "relationship_confirmed": false, - "wallet_name": "", - "blockchain_name": "", - "wallet_address": "", - "duplicate": false, - "duplicate_date": null, - "withdrawn": false, - "withdrawn_date": null, - "flex_fields": {}, - "phone_no_valid": false, - "phone_no_alternative_valid": false, - "first_registration_date": "2025-01-01", - "last_registration_date": "2025-01-01", - "enrolled_in_nutrition_programme": null, - "deduplication_golden_record_status": "UNIQUE", - "deduplication_batch_status": "UNIQUE_IN_BATCH", - "deduplication_golden_record_results": {}, - "deduplication_batch_results": {}, - "biometric_deduplication_golden_record_status": "NOT_PROCESSED", - "biometric_deduplication_batch_status": "NOT_PROCESSED", - "biometric_deduplication_golden_record_results": [], - "biometric_deduplication_batch_results": [], - "imported_individual_id": null, - "sanction_list_possible_match": false, - "sanction_list_confirmed_match": false, - "detail_id": null, - "originating_id": null, - "program_registration_id": null, - "age_at_registration": null, - "origin_unicef_id": null, - "is_migration_handled": false, - "migrated_at": null, - "identification_key": null, - "vector_column": "'0':3 'none':1 'person':2" - } - }, - { - "model": "core.currency", - "pk": 111, - "fields": { - "code": "PLN", - "name": "Polish z\u0142oty", - "is_crypto": false - } - }, - { - "model": "payment.paymentverificationplan", - "pk": "86a963dd-bae6-4e0a-946a-21bd480d2c93", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315200, - "unicef_id": "PVP-1", - "payment_plan": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "status": "PENDING", - "verification_channel": "MANUAL", - "sampling": "FULL_LIST", - "sex_filter": null, - "activation_date": null, - "completion_date": null, - "sample_size": null, - "responded_count": null, - "received_count": null, - "not_received_count": null, - "received_with_problems_count": null, - "confidence_interval": null, - "margin_of_error": null, - "rapid_pro_flow_id": "", - "rapid_pro_flow_start_uuids": "[]", - "xlsx_file_exporting": false, - "xlsx_file_imported": false, - "error": null, - "age_filter": null, - "excluded_admin_areas_filter": null - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json deleted file mode 100644 index c5ccceaee64..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "payment_verification_summary": { - "master": { - "model": "payment.paymentverificationsummary", - "pk": "7814916d-99d3-4ed4-83b0-893cf25258e6", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "status": "PENDING", - "activation_date": null, - "completion_date": null, - "payment_plan": "20ef167b-8437-4033-b9eb-c2d2deb0d761" - } - }, - "deps": [ - { - "model": "payment.paymentplan", - "pk": "20ef167b-8437-4033-b9eb-c2d2deb0d761", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315202, - "unicef_id": "PP-BA0000-25-00000001", - "internal_data": {}, - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "program_cycle": "5dce5825-12bc-401e-9883-5c109be49cd2", - "delivery_mechanism": null, - "financial_service_provider": null, - "imported_file": null, - "export_file_entitlement": null, - "export_file_per_fsp": null, - "export_pdf_file_summary": null, - "reconciliation_import_file": null, - "steficon_rule": null, - "steficon_rule_targeting": null, - "created_by": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "source_payment_plan": null, - "storage_file": null, - "name": null, - "start_date": null, - "end_date": null, - "currency_old": null, - "currency": null, - "dispersion_start_date": "2025-01-01", - "dispersion_end_date": "2025-01-31", - "excluded_ids": null, - "exclusion_reason": null, - "vulnerability_score_min": null, - "vulnerability_score_max": null, - "abort_comment": "", - "flat_amount_value": null, - "status": "FINISHED", - "background_action_status": null, - "build_status": null, - "built_at": null, - "exchange_rate": null, - "custom_exchange_rate": false, - "custom_exchange_rate_set_by": null, - "female_children_count": 0, - "male_children_count": 0, - "female_adults_count": 0, - "male_adults_count": 0, - "total_households_count": 0, - "total_individuals_count": 0, - "imported_file_date": null, - "total_entitled_quantity": null, - "total_entitled_quantity_usd": null, - "total_entitled_quantity_revised": null, - "total_entitled_quantity_revised_usd": null, - "total_delivered_quantity": null, - "total_delivered_quantity_usd": null, - "total_undelivered_quantity": null, - "total_undelivered_quantity_usd": null, - "steficon_targeting_applied_date": null, - "steficon_applied_date": null, - "is_follow_up": false, - "exclude_household_error": null, - "status_date": "2025-01-01T00:00:00Z", - "is_cash_assist": false, - "flag_exclude_if_active_adjudication_ticket": false, - "flag_exclude_if_on_sanction_list": false - } - }, - { - "model": "core.businessarea", - "pk": "1398facd-cd19-44db-8026-84d32d494ad4", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "program.programcycle", - "pk": "5dce5825-12bc-401e-9883-5c109be49cd2", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "version": 1735688653315201, - "unicef_id": "PC-BA0000-25-000001", - "title": "Programme Cycle 0", - "program": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "status": "ACTIVE", - "start_date": "2025-01-01", - "end_date": null, - "created_by": null - } - }, - { - "model": "program.program", - "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315202, - "data_collecting_type": 1, - "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "name": "Program 0", - "code": "k4s3", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - { - "model": "core.datacollectingtype", - "pk": 1, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 1 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "account.user", - "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 3, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 3, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json deleted file mode 100644 index 00dabcb6124..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "program": { - "master": { - "model": "program.program", - "pk": "63d2faa6-7d17-448a-8f46-1d4ec3d29880", - "fields": { - "is_removed": false, - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "last_sync_at": null, - "version": 1735688653315200, - "data_collecting_type": 1, - "beneficiary_group": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "name": "Program 0", - "code": "k4s3", - "status": "ACTIVE", - "description": "", - "start_date": "2025-01-01", - "end_date": "2026-01-01", - "sector": "MULTI_PURPOSE", - "budget": "1000000.00", - "frequency_of_payments": "ONE_OFF", - "scope": null, - "partner_access": "SELECTED_PARTNERS_ACCESS", - "cash_plus": false, - "population_goal": 1000, - "administrative_areas_of_implementation": "", - "biometric_deduplication_enabled": false, - "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", - "identification_key_individual_label": null, - "is_visible": true, - "household_count": 0, - "individual_count": 0, - "reconciliation_window_in_days": 0, - "send_reconciliation_window_expiry_notifications": false, - "admin_areas": [], - "sanction_lists": [] - } - }, - "deps": [ - { - "model": "core.datacollectingtype", - "pk": 1, - "fields": { - "created": "2025-01-01T00:00:00Z", - "modified": "2025-01-01T00:00:00Z", - "code": "dct_0", - "label": "DCT 0", - "type": "STANDARD", - "description": "", - "active": true, - "deprecated": false, - "individual_filters_available": false, - "household_filters_available": true, - "recalculate_composition": false, - "weight": 0, - "compatible_types": [ - 1 - ], - "limit_to": [] - } - }, - { - "model": "program.beneficiarygroup", - "pk": "9f07c50c-17cd-4b04-99f8-efc1c0cf1fc9", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Group 0", - "group_label": "Household", - "group_label_plural": "Households", - "member_label": "Individual", - "member_label_plural": "Individuals", - "master_detail": true - } - }, - { - "model": "core.businessarea", - "pk": "1398facd-cd19-44db-8026-84d32d494ad4", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json deleted file mode 100644 index ef3f8fbd0af..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "role": { - "master": { - "model": "account.role", - "pk": "d2d2362a-e518-4317-a580-e975514f887c", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - }, - "deps": [] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json deleted file mode 100644 index 247de40971f..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "role_assignment": { - "master": { - "model": "account.roleassignment", - "pk": "8c5ba434-abaa-4eb1-928f-a3288db28777", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "business_area": "1398facd-cd19-44db-8026-84d32d494ad4", - "user": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "partner": null, - "role": "d2d2362a-e518-4317-a580-e975514f887c", - "program": null, - "expiry_date": null, - "group": null - } - }, - "deps": [ - { - "model": "core.businessarea", - "pk": "1398facd-cd19-44db-8026-84d32d494ad4", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "code": "BA0000", - "slug": "business-area-0", - "name": "Business Area 0", - "long_name": "Business Area 0 Long Name", - "parent": null, - "office_country": null, - "is_split": false, - "region_code": "64", - "region_name": "TEST", - "has_data_sharing_agreement": false, - "is_accountability_applicable": false, - "rdi_import_xlsx_disabled": false, - "active": true, - "enable_email_notification": true, - "kobo_username": null, - "kobo_token": null, - "kobo_url": null, - "rapid_pro_host": null, - "rapid_pro_payment_verification_token": null, - "rapid_pro_messages_token": null, - "rapid_pro_survey_token": null, - "postpone_deduplication": false, - "deduplication_duplicate_score": 6.0, - "deduplication_possible_duplicate_score": 6.0, - "deduplication_batch_duplicates_percentage": 50, - "deduplication_batch_duplicates_allowed": 5, - "deduplication_golden_record_duplicates_percentage": 50, - "deduplication_golden_record_duplicates_allowed": 5, - "deduplication_ignore_withdraw": false, - "biometric_deduplication_threshold": 0.0, - "custom_fields": {}, - "countries": [], - "payment_countries": [] - } - }, - { - "model": "account.user", - "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 3, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - { - "model": "account.partner", - "pk": 3, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - }, - { - "model": "account.role", - "pk": "d2d2362a-e518-4317-a580-e975514f887c", - "fields": { - "created_at": "2025-01-01T00:00:00Z", - "updated_at": "2025-01-01T00:00:00Z", - "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", - "is_visible_on_ui": true, - "is_available_for_partner": true - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json deleted file mode 100644 index afd34a07c2c..00000000000 --- a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "superuser": { - "master": { - "model": "account.user", - "pk": "88e6439f-8bd5-4dc9-8cbe-6d376d275560", - "fields": { - "password": "", - "last_login": null, - "is_superuser": true, - "username": "user_0", - "first_name": "", - "last_name": "", - "is_staff": true, - "is_active": true, - "date_joined": "2025-01-01T00:00:00Z", - "azure_id": null, - "display_name": "user_0", - "status": "INVITED", - "partner": 3, - "email": "user_0@example.com", - "custom_fields": {}, - "job_title": "", - "last_modify_date": "2025-01-01T00:00:00Z", - "groups": [], - "user_permissions": [] - } - }, - "deps": [ - { - "model": "account.partner", - "pk": 3, - "fields": { - "name": "Partner 0", - "parent": null, - "is_un": false, - "lft": 1, - "rght": 2, - "tree_id": 2, - "level": 0, - "allowed_business_areas": [] - } - } - ] - } -} \ No newline at end of file diff --git a/tests/unit/apps/aurora/test_generic_registration_service.py b/tests/unit/apps/aurora/test_generic_registration_service.py index 9f836c85f35..cba866603b7 100644 --- a/tests/unit/apps/aurora/test_generic_registration_service.py +++ b/tests/unit/apps/aurora/test_generic_registration_service.py @@ -160,8 +160,8 @@ def individual_with_bank_account_and_tax_and_disability() -> dict: "bank_account_h_f": "y", "relationship_i_c": "head", "given_name_i_c": "Jan", - "given_name_latin_i_c": "Żoniak", - "family_name_i_c": "Romaniak", + "given_name_latin_i_c": "Joniak", + "family_name_i_c": "Romaniąk", "patronymic": "Roman", "birth_date": "1991-11-18", "gender_i_c": "male", @@ -196,8 +196,8 @@ def individual_with_no_tax() -> dict: "tax_id_no_i_c": "", "bank_account_h_f": "y", "relationship_i_c": "head", - "given_name_i_c": "Michal", - "given_name_latin_i_c": "Michał_local", + "given_name_i_c": "Michał", + "given_name_latin_i_c": "Michal", "family_name_i_c": "Brzeczacy", "patronymic": "Janusz", "birth_date": "1991-11-18", @@ -401,9 +401,9 @@ def test_import_data_to_datahub_household_individual( assert PendingDocument.objects.get(document_number="xyz", type__key="disability_certificate") assert PendingIndividual.objects.get( given_name="Jan", - given_name_latin="Żoniak", + given_name_latin="Joniak", middle_name="Roman", - family_name="Romaniak", + family_name="Romaniąk", relationship="HEAD", sex="MALE", email="email123@mail.com", diff --git a/tests/unit/apps/grievance/test_grievance_list_global.py b/tests/unit/apps/grievance/test_grievance_list_global.py index 46f4bf2ce4e..678cafa3e24 100644 --- a/tests/unit/apps/grievance/test_grievance_list_global.py +++ b/tests/unit/apps/grievance/test_grievance_list_global.py @@ -890,7 +890,7 @@ def test_all_edit_people_fields_attributes( data = response.json() assert isinstance(data, list) - assert len(data) == 43 + assert len(data) == 47 first_field = data[0] assert "id" in first_field @@ -933,7 +933,7 @@ def test_all_add_individuals_fields_attributes( data = response.json() assert isinstance(data, list) - assert len(data) == 30 + assert len(data) == 34 first_field = data[0] assert "id" in first_field diff --git a/tests/unit/apps/registration_data/test_rdi_people_create.py b/tests/unit/apps/registration_data/test_rdi_people_create.py index 0e292d6b92a..2a2508c24bf 100644 --- a/tests/unit/apps/registration_data/test_rdi_people_create.py +++ b/tests/unit/apps/registration_data/test_rdi_people_create.py @@ -237,10 +237,10 @@ def test_execute( assert PendingIndividual.objects.count() == 5 individual_data = { - "full_name": "Derek Index4", + "full_name": "Derek IndexFour", "given_name": "Derek", "middle_name": "", - "family_name": "Index4", + "family_name": "IndexFour", "sex": "MALE", "relationship": "HEAD", "birth_date": date(2000, 8, 22), @@ -267,12 +267,12 @@ def test_execute( assert roles.count() == 2 primary_role = roles.get(role=ROLE_PRIMARY) assert primary_role.role == ROLE_PRIMARY - assert primary_role.individual.full_name == "Derek Index4" + assert primary_role.individual.full_name == "Derek IndexFour" alternate_role = roles.get(role=ROLE_ALTERNATE) assert alternate_role.role == ROLE_ALTERNATE - assert alternate_role.individual.full_name == "Collector ForJanIndex_3" + assert alternate_role.individual.full_name == "Collector ForJanIndexThree" assert alternate_role.individual.flex_fields["custom_field_i_f"] == 2.99 - ind_2 = PendingIndividual.objects.get(full_name="Jan Index3") + ind_2 = PendingIndividual.objects.get(full_name="Jan IndexThree") hh_2 = ind_2.household assert hh_2.facility.name == "NEW SCHOOL 23" @@ -286,9 +286,9 @@ def test_execute( assert worker.household is None assert PendingAccount.objects.count() == 3 - dmd1 = PendingAccount.objects.get(individual__full_name="Collector ForJanIndex_3") - dmd2 = PendingAccount.objects.get(individual__full_name="WorkerCollector ForDerekIndex_4") - dmd3 = PendingAccount.objects.get(individual__full_name="Jan Index3") + dmd1 = PendingAccount.objects.get(individual__full_name="Collector ForJanIndexThree") + dmd2 = PendingAccount.objects.get(individual__full_name="WorkerCollector ForDerekIndexFour") + dmd3 = PendingAccount.objects.get(individual__full_name="Jan IndexThree") assert dmd1.rdi_merge_status == MergeStatusModel.PENDING assert dmd2.rdi_merge_status == MergeStatusModel.PENDING assert dmd3.rdi_merge_status == MergeStatusModel.PENDING From 6f98f3810ef50a0da4db0bf0019aeb1556bf2f3a Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Tue, 21 Apr 2026 19:34:00 -0400 Subject: [PATCH 14/33] api contract fixtures --- ...f18ae6b758e8014a24c7fa039e91.response.json | 43 ++ ...f18ae6b758e8014a24c7fa039e91.response.json | 121 ++++ .../business_area.fixture.json | 46 ++ .../test_households/household.fixture.json | 388 +++++++++++ .../household_role.fixture.json | 404 ++++++++++++ .../test_households/program.fixture.json | 121 ++++ .../test_households/role.fixture.json | 17 + .../role_assignment.fixture.json | 113 ++++ .../test_households/superuser.fixture.json | 45 ++ ...f18ae6b758e8014a24c7fa039e91.response.json | 54 ++ ...f18ae6b758e8014a24c7fa039e91.response.json | 91 +++ .../business_area.fixture.json | 46 ++ .../test_individuals/individual.fixture.json | 287 ++++++++ .../test_individuals/program.fixture.json | 121 ++++ .../test_individuals/role.fixture.json | 17 + .../role_assignment.fixture.json | 113 ++++ .../test_individuals/superuser.fixture.json | 45 ++ ...f18ae6b758e8014a24c7fa039e91.response.json | 52 ++ ...f18ae6b758e8014a24c7fa039e91.response.json | 71 ++ ...f18ae6b758e8014a24c7fa039e91.response.json | 488 ++++++++++++++ .../business_area.fixture.json | 46 ++ .../household.fixture.json | 388 +++++++++++ .../household_role.fixture.json | 404 ++++++++++++ .../payment_plan.fixture.json | 245 +++++++ .../payment_verification.fixture.json | 617 ++++++++++++++++++ .../payment_verification_summary.fixture.json | 257 ++++++++ .../program.fixture.json | 121 ++++ .../role.fixture.json | 17 + .../role_assignment.fixture.json | 113 ++++ .../superuser.fixture.json | 45 ++ 30 files changed, 4936 insertions(+) create mode 100644 tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_kpci_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_kpci_households_16ecd2da-9299-4ff6-a964-8a51e57daaa3_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_households/household.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_households/program.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_households/role.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_54le_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_54le_individuals_54ae7175-bbc2-4878-a37f-989aaa24e628_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_8ac8a49c-c376-4140-ab5d-bbf682e93dcc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json diff --git a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_kpci_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_kpci_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..c0bea99dbf0 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_kpci_households_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,43 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, HEAD, OPTIONS", + "ETag": "bc97fd478927dd36328c00f9fa5ac6d4", + "Cache-Control": "private, no-cache", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "702" + }, + "data": { + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/kpci/households/?limit=50&offset=50", + "previous": null, + "results": [ + { + "id": "16ecd2da-9299-4ff6-a964-8a51e57daaa3", + "unicef_id": "HH-25-0000.0226", + "head_of_household": "Person 0", + "admin1": null, + "admin2": null, + "status": "ACTIVE", + "size": null, + "residence_status": "None", + "total_cash_received": null, + "total_cash_received_usd": null, + "last_registration_date": "2025-01-01T00:00:00Z", + "first_registration_date": "2025-01-01T00:00:00Z", + "currency": null, + "has_duplicates": false, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "program_id": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "program_name": "Program 0", + "program_code": "kpci" + } + ] + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_kpci_households_16ecd2da-9299-4ff6-a964-8a51e57daaa3_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_kpci_households_16ecd2da-9299-4ff6-a964-8a51e57daaa3_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..0e629340422 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/_api_rest_business-areas_business-area-0_programs_kpci_households_16ecd2da-9299-4ff6-a964-8a51e57daaa3_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,121 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, HEAD, OPTIONS", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "2656" + }, + "data": { + "id": "16ecd2da-9299-4ff6-a964-8a51e57daaa3", + "unicef_id": "HH-25-0000.0226", + "head_of_household": { + "id": "292adb53-58f7-4581-b462-4810d3055383", + "full_name": "Person 0", + "full_name_latin": null + }, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "program": "Program 0", + "country": "", + "country_origin": "", + "status": "ACTIVE", + "total_cash_received": null, + "total_cash_received_usd": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "has_duplicates": false, + "registration_data_import": { + "id": "004815e8-bf32-4ecc-bdd8-7ce2f9d7aaca", + "name": "RDI 0", + "status": "MERGED", + "import_date": "2025-01-01T00:00:00Z", + "number_of_individuals": 1, + "number_of_households": 1, + "imported_by": { + "id": "1a28be92-e853-43dd-876c-6d74c2459514", + "first_name": "", + "last_name": "", + "email": "user_1@example.com", + "username": "user_1" + }, + "data_source": "XLS" + }, + "flex_fields": {}, + "linked_grievances": [], + "admin_area_title": "", + "active_individuals_count": 1, + "geopoint": null, + "import_id": "HH-25-0000.0226", + "admin_url": "/api/unicorn/household/household/16ecd2da-9299-4ff6-a964-8a51e57daaa3/change/", + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "currency": null, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "unhcr_id": "", + "village": "", + "address": "", + "zip_code": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "other_sex_group_count": null, + "start": null, + "deviceid": "", + "fchild_hoh": null, + "child_hoh": null, + "returnee": null, + "size": null, + "residence_status": "None", + "program_registration_id": null, + "delivered_quantities": [ + { + "currency": "USD", + "total_delivered_quantity": "0.00" + } + ], + "consent": null, + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "registration_method": "", + "consent_sharing": [], + "roles_in_household": [ + { + "id": "71a54e77-0ebe-427c-8653-f50f069a522f", + "individual": { + "id": "292adb53-58f7-4581-b462-4810d3055383", + "unicef_id": "IND-25-0000.0322" + }, + "role": "PRIMARY" + } + ] + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json new file mode 100644 index 00000000000..1ac9c11bc5a --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/business_area.fixture.json @@ -0,0 +1,46 @@ +{ + "business_area": { + "master": { + "model": "core.businessarea", + "pk": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/household.fixture.json b/tests/unit/api_contract/_api_checker/test_households/household.fixture.json new file mode 100644 index 00000000000..8130c2d0de8 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/household.fixture.json @@ -0,0 +1,388 @@ +{ + "household": { + "master": { + "model": "household.household", + "pk": "16ecd2da-9299-4ff6-a964-8a51e57daaa3", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315202, + "unicef_id": "HH-25-0000.0226", + "internal_data": {}, + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "program": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "registration_data_import": "004815e8-bf32-4ecc-bdd8-7ce2f9d7aaca", + "household_collection": null, + "storage_obj": null, + "copied_from": null, + "country_origin": null, + "country": null, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "head_of_household": "292adb53-58f7-4581-b462-4810d3055383", + "facility": null, + "consent_sign": "", + "consent": null, + "consent_sharing": "", + "residence_status": "", + "address": "", + "zip_code": null, + "size": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "children_count": null, + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "male_children_disabled_count": null, + "female_children_disabled_count": null, + "other_sex_group_count": null, + "unknown_sex_group_count": null, + "returnee": null, + "fchild_hoh": null, + "child_hoh": null, + "village": "", + "currency_old": "", + "currency": null, + "unhcr_id": "", + "detail_id": null, + "originating_id": null, + "start": null, + "registration_method": "", + "family_id": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "collect_type": "STANDARD", + "program_registration_id": null, + "total_cash_received_usd": null, + "total_cash_received": null, + "flex_fields": {}, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "withdrawn": false, + "withdrawn_date": null, + "longitude": null, + "latitude": null, + "deviceid": "", + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "kobo_submission_uuid": null, + "kobo_submission_time": null, + "enumerator_rec_id": null, + "flex_registrations_record_id": null, + "identification_key": null, + "extra_rdis": [] + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.program", + "pk": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315201, + "data_collecting_type": 198, + "beneficiary_group": "42c4b886-9270-4565-988e-679f362aa91a", + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "name": "Program 0", + "code": "kpci", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 198, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 198 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "42c4b886-9270-4565-988e-679f362aa91a", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "004815e8-bf32-4ecc-bdd8-7ce2f9d7aaca", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "program": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "1a28be92-e853-43dd-876c-6d74c2459514", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "1a28be92-e853-43dd-876c-6d74c2459514", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 462, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 462, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.individual", + "pk": "292adb53-58f7-4581-b462-4810d3055383", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "unicef_id": "IND-25-0000.0322", + "internal_data": {}, + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "program": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "registration_data_import": "004815e8-bf32-4ecc-bdd8-7ce2f9d7aaca", + "household": "16ecd2da-9299-4ff6-a964-8a51e57daaa3", + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json new file mode 100644 index 00000000000..2c3035bc11e --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/household_role.fixture.json @@ -0,0 +1,404 @@ +{ + "household_role": { + "master": { + "model": "household.individualroleinhousehold", + "pk": "71a54e77-0ebe-427c-8653-f50f069a522f", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "individual": "292adb53-58f7-4581-b462-4810d3055383", + "household": "16ecd2da-9299-4ff6-a964-8a51e57daaa3", + "role": "PRIMARY", + "copied_from": null + } + }, + "deps": [ + { + "model": "household.individual", + "pk": "292adb53-58f7-4581-b462-4810d3055383", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315201, + "unicef_id": "IND-25-0000.0322", + "internal_data": {}, + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "program": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "registration_data_import": "004815e8-bf32-4ecc-bdd8-7ce2f9d7aaca", + "household": "16ecd2da-9299-4ff6-a964-8a51e57daaa3", + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + }, + { + "model": "core.businessarea", + "pk": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.program", + "pk": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315202, + "data_collecting_type": 198, + "beneficiary_group": "42c4b886-9270-4565-988e-679f362aa91a", + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "name": "Program 0", + "code": "kpci", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 198, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 198 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "42c4b886-9270-4565-988e-679f362aa91a", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "004815e8-bf32-4ecc-bdd8-7ce2f9d7aaca", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315201, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "program": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "1a28be92-e853-43dd-876c-6d74c2459514", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "1a28be92-e853-43dd-876c-6d74c2459514", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 462, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 462, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.household", + "pk": "16ecd2da-9299-4ff6-a964-8a51e57daaa3", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315203, + "unicef_id": "HH-25-0000.0226", + "internal_data": {}, + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "program": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "registration_data_import": "004815e8-bf32-4ecc-bdd8-7ce2f9d7aaca", + "household_collection": null, + "storage_obj": null, + "copied_from": null, + "country_origin": null, + "country": null, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "head_of_household": "292adb53-58f7-4581-b462-4810d3055383", + "facility": null, + "consent_sign": "", + "consent": null, + "consent_sharing": "", + "residence_status": "", + "address": "", + "zip_code": null, + "size": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "children_count": null, + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "male_children_disabled_count": null, + "female_children_disabled_count": null, + "other_sex_group_count": null, + "unknown_sex_group_count": null, + "returnee": null, + "fchild_hoh": null, + "child_hoh": null, + "village": "", + "currency_old": "", + "currency": null, + "unhcr_id": "", + "detail_id": null, + "originating_id": null, + "start": null, + "registration_method": "", + "family_id": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "collect_type": "STANDARD", + "program_registration_id": null, + "total_cash_received_usd": null, + "total_cash_received": null, + "flex_fields": {}, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "withdrawn": false, + "withdrawn_date": null, + "longitude": null, + "latitude": null, + "deviceid": "", + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "kobo_submission_uuid": null, + "kobo_submission_time": null, + "enumerator_rec_id": null, + "flex_registrations_record_id": null, + "identification_key": null, + "extra_rdis": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/program.fixture.json b/tests/unit/api_contract/_api_checker/test_households/program.fixture.json new file mode 100644 index 00000000000..73feb2b010c --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/program.fixture.json @@ -0,0 +1,121 @@ +{ + "program": { + "master": { + "model": "program.program", + "pk": "99a99d1e-d46c-4ca6-8a5b-3c79ae47804a", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "data_collecting_type": 198, + "beneficiary_group": "42c4b886-9270-4565-988e-679f362aa91a", + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "name": "Program 0", + "code": "kpci", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + "deps": [ + { + "model": "core.datacollectingtype", + "pk": 198, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 198 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "42c4b886-9270-4565-988e-679f362aa91a", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "core.businessarea", + "pk": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/role.fixture.json b/tests/unit/api_contract/_api_checker/test_households/role.fixture.json new file mode 100644 index 00000000000..4461c3a3f28 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/role.fixture.json @@ -0,0 +1,17 @@ +{ + "role": { + "master": { + "model": "account.role", + "pk": "78e8d234-5550-43b8-a3fb-167b4f2002bf", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json new file mode 100644 index 00000000000..6322ab0e620 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/role_assignment.fixture.json @@ -0,0 +1,113 @@ +{ + "role_assignment": { + "master": { + "model": "account.roleassignment", + "pk": "479c5ee1-dd3e-4789-a3fc-8556125d13fa", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "business_area": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "user": "59798a82-6210-4e99-9f38-7c8f23563d9c", + "partner": null, + "role": "78e8d234-5550-43b8-a3fb-167b4f2002bf", + "program": null, + "expiry_date": null, + "group": null + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "c5bfacdd-cd0f-4f63-8a98-26b27eacd3e8", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "account.user", + "pk": "59798a82-6210-4e99-9f38-7c8f23563d9c", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 460, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 460, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "account.role", + "pk": "78e8d234-5550-43b8-a3fb-167b4f2002bf", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json new file mode 100644 index 00000000000..d6ed4888f96 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_households/superuser.fixture.json @@ -0,0 +1,45 @@ +{ + "superuser": { + "master": { + "model": "account.user", + "pk": "59798a82-6210-4e99-9f38-7c8f23563d9c", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 460, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + "deps": [ + { + "model": "account.partner", + "pk": 460, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_54le_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_54le_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..ab7f723c7d9 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_54le_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,54 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, HEAD, OPTIONS", + "ETag": "77705015795384526ff404b0c4fe110a", + "Cache-Control": "private, no-cache", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "1153" + }, + "data": { + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/54le/individuals/?limit=50&offset=50", + "previous": null, + "results": [ + { + "id": "54ae7175-bbc2-4878-a37f-989aaa24e628", + "unicef_id": "IND-25-0000.0326", + "full_name": "Person 0", + "full_name_latin": null, + "household": null, + "status": "ACTIVE", + "relationship": "", + "age": 35, + "sex": "MALE", + "relationship_display": "", + "birth_date": "1990-01-01", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_batch_status_display": "Unique in batch", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status_display": "Not Processed", + "deduplication_batch_results": [], + "biometric_deduplication_batch_results": [], + "deduplication_golden_record_status": "UNIQUE", + "deduplication_golden_record_status_display": "Unique", + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_status_display": "Not Processed", + "deduplication_golden_record_results": [], + "biometric_deduplication_golden_record_results": [], + "program": { + "id": "dd03ebf1-02b0-4354-95d6-c71cc963a7d8", + "name": "Program 0", + "code": "54le" + }, + "last_registration_date": "2025-01-01", + "role": null + } + ] + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_54le_individuals_54ae7175-bbc2-4878-a37f-989aaa24e628_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_54le_individuals_54ae7175-bbc2-4878-a37f-989aaa24e628_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..a949e05b2a2 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals/_api_rest_business-areas_business-area-0_programs_54le_individuals_54ae7175-bbc2-4878-a37f-989aaa24e628_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,91 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, HEAD, OPTIONS", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "1803" + }, + "data": { + "id": "54ae7175-bbc2-4878-a37f-989aaa24e628", + "unicef_id": "IND-25-0000.0326", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "age": 35, + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "household": null, + "role": null, + "relationship": "", + "registration_data_import": { + "id": "fb1e72cc-9626-4df4-b750-38332e284ade", + "name": "RDI 0", + "status": "MERGED", + "import_date": "2025-01-01T00:00:00Z", + "number_of_individuals": 1, + "number_of_households": 1, + "imported_by": { + "id": "be90fdf6-6577-4133-9eaa-dcb59c5ec112", + "first_name": "", + "last_name": "", + "email": "user_1@example.com", + "username": "user_1" + }, + "data_source": "XLS" + }, + "import_id": "IND-25-0000.0326", + "admin_url": "/api/unicorn/household/individual/54ae7175-bbc2-4878-a37f-989aaa24e628/change/", + "preferred_language": null, + "roles_in_households": [], + "observed_disability": [ + "NONE" + ], + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "disability": "not disabled", + "documents": [], + "identities": [], + "accounts": [], + "email": "", + "phone_no": "", + "phone_no_valid": false, + "phone_no_alternative": "", + "phone_no_alternative_valid": false, + "sanction_list_last_check": null, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "status": "ACTIVE", + "deduplication_golden_record_status": "UNIQUE", + "flex_fields": {}, + "linked_grievances": [], + "photo": null, + "biometric_deduplication_golden_record_status": "Not Processed", + "linked_grievances_biometrics": [], + "enrolled_in_nutrition_programme": null, + "who_answers_phone": "", + "who_answers_alt_phone": "", + "payment_delivery_phone_no": null, + "identification_key": null, + "identification_key_label": null + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json new file mode 100644 index 00000000000..bf82498a865 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals/business_area.fixture.json @@ -0,0 +1,46 @@ +{ + "business_area": { + "master": { + "model": "core.businessarea", + "pk": "39332f78-0320-4f30-b619-1973430ca57b", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json new file mode 100644 index 00000000000..af5c855ad07 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals/individual.fixture.json @@ -0,0 +1,287 @@ +{ + "individual": { + "master": { + "model": "household.individual", + "pk": "54ae7175-bbc2-4878-a37f-989aaa24e628", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "unicef_id": "IND-25-0000.0326", + "internal_data": {}, + "business_area": "39332f78-0320-4f30-b619-1973430ca57b", + "program": "dd03ebf1-02b0-4354-95d6-c71cc963a7d8", + "registration_data_import": "fb1e72cc-9626-4df4-b750-38332e284ade", + "household": null, + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "39332f78-0320-4f30-b619-1973430ca57b", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.program", + "pk": "dd03ebf1-02b0-4354-95d6-c71cc963a7d8", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315201, + "data_collecting_type": 200, + "beneficiary_group": "882f2a0c-c640-4635-9ecd-a6a9229477e9", + "business_area": "39332f78-0320-4f30-b619-1973430ca57b", + "name": "Program 0", + "code": "54le", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 200, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 200 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "882f2a0c-c640-4635-9ecd-a6a9229477e9", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "fb1e72cc-9626-4df4-b750-38332e284ade", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "39332f78-0320-4f30-b619-1973430ca57b", + "program": "dd03ebf1-02b0-4354-95d6-c71cc963a7d8", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "be90fdf6-6577-4133-9eaa-dcb59c5ec112", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "be90fdf6-6577-4133-9eaa-dcb59c5ec112", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 468, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 468, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json new file mode 100644 index 00000000000..dcd8542a3be --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals/program.fixture.json @@ -0,0 +1,121 @@ +{ + "program": { + "master": { + "model": "program.program", + "pk": "dd03ebf1-02b0-4354-95d6-c71cc963a7d8", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "data_collecting_type": 200, + "beneficiary_group": "882f2a0c-c640-4635-9ecd-a6a9229477e9", + "business_area": "39332f78-0320-4f30-b619-1973430ca57b", + "name": "Program 0", + "code": "54le", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + "deps": [ + { + "model": "core.datacollectingtype", + "pk": 200, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 200 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "882f2a0c-c640-4635-9ecd-a6a9229477e9", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "core.businessarea", + "pk": "39332f78-0320-4f30-b619-1973430ca57b", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json new file mode 100644 index 00000000000..0271d675f63 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals/role.fixture.json @@ -0,0 +1,17 @@ +{ + "role": { + "master": { + "model": "account.role", + "pk": "64ed7d85-6979-42dd-aa24-fe1e017553c3", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json new file mode 100644 index 00000000000..bedbdb18079 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals/role_assignment.fixture.json @@ -0,0 +1,113 @@ +{ + "role_assignment": { + "master": { + "model": "account.roleassignment", + "pk": "c243bda7-e424-4f77-ba08-92e74ddb880b", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "business_area": "39332f78-0320-4f30-b619-1973430ca57b", + "user": "dfe16495-6572-4156-8167-90030d30ceda", + "partner": null, + "role": "64ed7d85-6979-42dd-aa24-fe1e017553c3", + "program": null, + "expiry_date": null, + "group": null + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "39332f78-0320-4f30-b619-1973430ca57b", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "account.user", + "pk": "dfe16495-6572-4156-8167-90030d30ceda", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 466, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 466, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "account.role", + "pk": "64ed7d85-6979-42dd-aa24-fe1e017553c3", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json new file mode 100644 index 00000000000..8d1ef20d645 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals/superuser.fixture.json @@ -0,0 +1,45 @@ +{ + "superuser": { + "master": { + "model": "account.user", + "pk": "dfe16495-6572-4156-8167-90030d30ceda", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 466, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + "deps": [ + { + "model": "account.partner", + "pk": 466, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..3b425ad2e85 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,52 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, HEAD, OPTIONS", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "1139" + }, + "data": { + "next": "http://testserver/api/rest/business-areas/business-area-0/individuals/?limit=50&offset=50", + "previous": null, + "results": [ + { + "id": "95391fd5-c41f-4a18-b716-b96eec3bc96d", + "unicef_id": "IND-25-0000.0008", + "full_name": "Person 0", + "full_name_latin": null, + "household": null, + "status": "ACTIVE", + "relationship": "", + "age": 35, + "sex": "MALE", + "relationship_display": "", + "birth_date": "1990-01-01", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_batch_status_display": "Unique in batch", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status_display": "Not Processed", + "deduplication_batch_results": [], + "biometric_deduplication_batch_results": [], + "deduplication_golden_record_status": "UNIQUE", + "deduplication_golden_record_status_display": "Unique", + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_status_display": "Not Processed", + "deduplication_golden_record_results": [], + "biometric_deduplication_golden_record_results": [], + "program": { + "id": "75717c42-48fb-43af-8b4a-6bd2206acd88", + "name": "Program 0", + "code": "r2sz" + }, + "last_registration_date": "2025-01-01", + "role": null + } + ] + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..3786e63c6b6 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,71 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, HEAD, OPTIONS", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "1665" + }, + "data": { + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/-416/payment-verifications/517495a2-b0e6-4e8e-a9ba-4f8318def80e/verifications/?limit=50&offset=50", + "previous": null, + "results": [ + { + "id": "8ac8a49c-c376-4140-ab5d-bbf682e93dcc", + "unicef_id": "RCPT-BA0000-25-0.000.001", + "parent_id": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "parent_unicef_id": "PP-BA0000-25-00000001", + "household_id": "e28226e7-6efa-491b-885a-0fbc3568f917", + "household_unicef_id": "HH-25-0000.0228", + "household_size": null, + "household_admin2": "", + "household_status": "ACTIVE", + "hoh_phone_no": "None", + "hoh_phone_no_alternative": "None", + "snapshot_collector_full_name": null, + "snapshot_alternate_collector_full_name": null, + "snapshot_alternate_collector_id": null, + "fsp_name": "", + "entitlement_quantity": null, + "entitlement_quantity_usd": null, + "delivered_quantity": null, + "delivered_quantity_usd": null, + "delivery_date": null, + "delivery_type": null, + "status": "Pending", + "status_display": "Pending", + "currency": "PLN", + "fsp_auth_code": "", + "hoh_id": null, + "hoh_unicef_id": null, + "hoh_full_name": null, + "collector_id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "collector_phone_no": "", + "collector_phone_no_alt": "", + "verification": { + "id": "893e52a8-4d80-48c4-a6f5-283e06893063", + "received_amount": null, + "status": "PENDING", + "payment_verification_plan_unicef_id": "PVP-2", + "verification_channel": "MANUAL", + "admin_url": null, + "version": 1735688653315201, + "is_manually_editable": true + }, + "payment_plan_hard_conflicted": false, + "payment_plan_hard_conflicted_data": [], + "payment_plan_soft_conflicted": false, + "payment_plan_soft_conflicted_data": [], + "people_individual": null, + "program_name": "Program 0", + "program_code": "-416", + "collector_type_display": "Primary collector" + } + ] + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_8ac8a49c-c376-4140-ab5d-bbf682e93dcc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_8ac8a49c-c376-4140-ab5d-bbf682e93dcc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json new file mode 100644 index 00000000000..a0a280d1c92 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_8ac8a49c-c376-4140-ab5d-bbf682e93dcc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -0,0 +1,488 @@ +{ + "status_code": 200, + "headers": { + "Content-Type": "application/json", + "Vary": "Accept, Cookie, origin", + "Allow": "GET, PATCH, HEAD, OPTIONS", + "X-Hope-Backend-Version": "None", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "same-origin", + "Cross-Origin-Opener-Policy": "same-origin", + "Content-Length": "11362" + }, + "data": { + "id": "8ac8a49c-c376-4140-ab5d-bbf682e93dcc", + "unicef_id": "RCPT-BA0000-25-0.000.001", + "parent_id": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "parent_unicef_id": "PP-BA0000-25-00000001", + "household_id": "e28226e7-6efa-491b-885a-0fbc3568f917", + "household_unicef_id": "HH-25-0000.0228", + "household_size": null, + "household_admin2": "", + "household_status": "ACTIVE", + "hoh_phone_no": "None", + "hoh_phone_no_alternative": "None", + "snapshot_collector_full_name": null, + "snapshot_alternate_collector_full_name": null, + "snapshot_alternate_collector_id": null, + "fsp_name": "", + "entitlement_quantity": null, + "entitlement_quantity_usd": null, + "delivered_quantity": null, + "delivered_quantity_usd": null, + "delivery_date": null, + "delivery_type": null, + "status": "Pending", + "status_display": "Pending", + "currency": "PLN", + "fsp_auth_code": "", + "hoh_id": null, + "hoh_unicef_id": null, + "hoh_full_name": null, + "collector_id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "collector_phone_no": "", + "collector_phone_no_alt": "", + "verification": { + "id": "893e52a8-4d80-48c4-a6f5-283e06893063", + "received_amount": null, + "status": "PENDING", + "payment_verification_plan_unicef_id": "PVP-1", + "verification_channel": "MANUAL", + "admin_url": null, + "version": 1735688653315201, + "is_manually_editable": true + }, + "payment_plan_hard_conflicted": false, + "payment_plan_hard_conflicted_data": [], + "payment_plan_soft_conflicted": false, + "payment_plan_soft_conflicted_data": [], + "people_individual": null, + "program_name": "Program 0", + "program_code": "-416", + "collector_type_display": "Primary collector", + "parent": { + "id": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "unicef_id": "PP-BA0000-25-00000001", + "name": null, + "status": "FINISHED", + "total_households_count": 0, + "total_individuals_count": 0, + "currency": null, + "excluded_ids": null, + "total_entitled_quantity": null, + "total_delivered_quantity": null, + "total_undelivered_quantity": null, + "dispersion_start_date": "2025-01-01", + "dispersion_end_date": "2025-01-31", + "is_follow_up": false, + "follow_ups": [], + "created_by": " ", + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "program": { + "id": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "code": "-416", + "name": "Program 0", + "status": "ACTIVE", + "screen_beneficiary": false + }, + "version": 1735688653315204, + "background_action_status": null, + "background_action_status_display": null, + "start_date": null, + "end_date": null, + "program_cycle": { + "id": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "title": "Programme Cycle 0" + }, + "has_payment_list_export_file": false, + "has_fsp_delivery_mechanism_xlsx_template": false, + "imported_file_name": "", + "imported_file_date": null, + "payments_conflicts_count": 0, + "delivery_mechanism": null, + "volume_by_delivery_mechanism": [ + { + "id": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "delivery_mechanism": null, + "volume": null, + "volume_usd": null + } + ], + "split_choices": [ + { + "name": "By Admin Area 1", + "value": "BY_ADMIN_AREA1" + }, + { + "name": "By Admin Area 2", + "value": "BY_ADMIN_AREA2" + }, + { + "name": "By Admin Area 3", + "value": "BY_ADMIN_AREA3" + }, + { + "name": "By Collector", + "value": "BY_COLLECTOR" + }, + { + "name": "By Records", + "value": "BY_RECORDS" + }, + { + "name": "No Split", + "value": "NO_SPLIT" + } + ], + "exclusion_reason": null, + "exclude_household_error": null, + "bank_reconciliation_success": 0, + "bank_reconciliation_error": 0, + "can_create_payment_verification_plan": false, + "available_payment_records_count": 0, + "reconciliation_summary": { + "delivered_fully": 0, + "delivered_partially": 0, + "not_delivered": 0, + "unsuccessful": 0, + "pending": 1, + "reconciled": 0, + "number_of_payments": 1 + }, + "excluded_households": [], + "excluded_individuals": [], + "can_create_follow_up": false, + "total_withdrawn_households_count": 0, + "unsuccessful_payments_count": 0, + "can_send_to_payment_gateway": false, + "can_split": false, + "supporting_documents": [], + "total_households_count_with_valid_phone_no": 0, + "is_payment_gateway_and_all_sent_to_fsp": false, + "fsp_communication_channel": "XLSX", + "financial_service_provider": null, + "can_export_xlsx": false, + "can_download_xlsx": false, + "can_send_xlsx_password": false, + "approval_process": [], + "total_entitled_quantity_usd": null, + "total_entitled_quantity_revised_usd": null, + "total_delivered_quantity_usd": null, + "total_undelivered_quantity_usd": null, + "male_children_count": 0, + "female_children_count": 0, + "male_adults_count": 0, + "female_adults_count": 0, + "steficon_rule": null, + "source_payment_plan": null, + "exchange_rate": null, + "custom_exchange_rate": false, + "unore_exchange_rate": null, + "eligible_payments_count": 1, + "funds_commitments": null, + "available_funds_commitments": [], + "payment_verification_plans": [ + { + "id": "4c15e589-3919-4fcc-86d2-415ff1652ffb", + "unicef_id": "PVP-1", + "status": "PENDING", + "status_display": "Pending", + "verification_channel": "MANUAL", + "sampling": "Full list", + "sex_filter": null, + "activation_date": null, + "completion_date": null, + "sample_size": null, + "responded_count": null, + "received_count": null, + "not_received_count": null, + "received_with_problems_count": null, + "confidence_interval": null, + "margin_of_error": null, + "xlsx_file_exporting": false, + "xlsx_file_imported": false, + "has_xlsx_file": false, + "xlsx_file_was_downloaded": false, + "error": null, + "age_filter_min": null, + "age_filter_max": null, + "excluded_admin_areas_filter": null, + "rapid_pro_flow_id": "", + "admin_url": "/api/unicorn/payment/paymentverificationplan/4c15e589-3919-4fcc-86d2-415ff1652ffb/change/" + } + ], + "admin_url": "/api/unicorn/payment/paymentplan/517495a2-b0e6-4e8e-a9ba-4f8318def80e/change/", + "abort_comment": "", + "flat_amount_value": null + }, + "admin_url": "/api/unicorn/payment/payment/8ac8a49c-c376-4140-ab5d-bbf682e93dcc/change/", + "source_payment": null, + "household": { + "id": "e28226e7-6efa-491b-885a-0fbc3568f917", + "unicef_id": "HH-25-0000.0228", + "head_of_household": { + "id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "full_name": "Person 0", + "full_name_latin": null + }, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "program": "Program 0", + "country": "", + "country_origin": "", + "status": "ACTIVE", + "total_cash_received": null, + "total_cash_received_usd": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "has_duplicates": false, + "registration_data_import": { + "id": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "name": "RDI 0", + "status": "MERGED", + "import_date": "2025-01-01T00:00:00Z", + "number_of_individuals": 1, + "number_of_households": 1, + "imported_by": { + "id": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "first_name": "", + "last_name": "", + "email": "user_1@example.com", + "username": "user_1" + }, + "data_source": "XLS" + }, + "flex_fields": {}, + "linked_grievances": [], + "admin_area_title": "", + "active_individuals_count": 1, + "geopoint": null, + "import_id": "HH-25-0000.0228", + "admin_url": "/api/unicorn/household/household/e28226e7-6efa-491b-885a-0fbc3568f917/change/", + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "currency": null, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "unhcr_id": "", + "village": "", + "address": "", + "zip_code": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "other_sex_group_count": null, + "start": null, + "deviceid": "", + "fchild_hoh": null, + "child_hoh": null, + "returnee": null, + "size": null, + "residence_status": "None", + "program_registration_id": null, + "delivered_quantities": [ + { + "currency": "USD", + "total_delivered_quantity": "0.00" + }, + { + "currency": "PLN", + "total_delivered_quantity": "0.00" + } + ], + "consent": null, + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "registration_method": "", + "consent_sharing": [], + "roles_in_household": [ + { + "id": "056934b5-e92c-409c-895b-36cbb61fda57", + "individual": { + "id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "unicef_id": "IND-25-0000.0324" + }, + "role": "PRIMARY" + } + ] + }, + "delivery_mechanism": null, + "collector": { + "id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "unicef_id": "IND-25-0000.0324", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "age": 35, + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "household": { + "id": "e28226e7-6efa-491b-885a-0fbc3568f917", + "unicef_id": "HH-25-0000.0228", + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "total_cash_received": null, + "total_cash_received_usd": null, + "delivered_quantities": [ + { + "currency": "USD", + "total_delivered_quantity": "0.00" + }, + { + "currency": "PLN", + "total_delivered_quantity": "0.00" + } + ], + "start": null, + "zip_code": null, + "residence_status": "None", + "country_origin": "", + "country": "", + "address": "", + "village": "", + "geopoint": null, + "import_id": "HH-25-0000.0228", + "program_code": "-416" + }, + "role": "PRIMARY", + "relationship": "", + "registration_data_import": { + "id": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "name": "RDI 0", + "status": "MERGED", + "import_date": "2025-01-01T00:00:00Z", + "number_of_individuals": 1, + "number_of_households": 1, + "imported_by": { + "id": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "first_name": "", + "last_name": "", + "email": "user_1@example.com", + "username": "user_1" + }, + "data_source": "XLS" + }, + "import_id": "IND-25-0000.0324", + "admin_url": "/api/unicorn/household/individual/9c298970-4786-42db-b9a6-fe0f8c8305ee/change/", + "preferred_language": null, + "roles_in_households": [ + { + "id": "056934b5-e92c-409c-895b-36cbb61fda57", + "household": { + "id": "e28226e7-6efa-491b-885a-0fbc3568f917", + "unicef_id": "HH-25-0000.0228", + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "total_cash_received": null, + "total_cash_received_usd": null, + "delivered_quantities": [ + { + "currency": "USD", + "total_delivered_quantity": "0.00" + }, + { + "currency": "PLN", + "total_delivered_quantity": "0.00" + } + ], + "start": null, + "zip_code": null, + "residence_status": "None", + "country_origin": "", + "country": "", + "address": "", + "village": "", + "geopoint": null, + "import_id": "HH-25-0000.0228", + "program_code": "-416" + }, + "role": "PRIMARY" + } + ], + "observed_disability": [ + "NONE" + ], + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "disability": "not disabled", + "documents": [], + "identities": [], + "accounts": [], + "email": "", + "phone_no": "", + "phone_no_valid": false, + "phone_no_alternative": "", + "phone_no_alternative_valid": false, + "sanction_list_last_check": null, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "status": "ACTIVE", + "deduplication_golden_record_status": "UNIQUE", + "flex_fields": {}, + "linked_grievances": [], + "photo": null, + "biometric_deduplication_golden_record_status": "Not Processed", + "linked_grievances_biometrics": [], + "enrolled_in_nutrition_programme": null, + "who_answers_phone": "", + "who_answers_alt_phone": "", + "payment_delivery_phone_no": null, + "identification_key": null, + "identification_key_label": null + }, + "reason_for_unsuccessful_payment": null, + "additional_document_number": null, + "additional_document_type": null, + "additional_collector_name": null, + "transaction_reference_id": null, + "snapshot_collector_account_data": null, + "extras": {}, + "sent_to_fsp_date": null + }, + "content_type": "application/json" +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json new file mode 100644 index 00000000000..72759f49b2d --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json @@ -0,0 +1,46 @@ +{ + "business_area": { + "master": { + "model": "core.businessarea", + "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json new file mode 100644 index 00000000000..ce71efa1b4f --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json @@ -0,0 +1,388 @@ +{ + "household": { + "master": { + "model": "household.household", + "pk": "e28226e7-6efa-491b-885a-0fbc3568f917", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315202, + "unicef_id": "HH-25-0000.0228", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "household_collection": null, + "storage_obj": null, + "copied_from": null, + "country_origin": null, + "country": null, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "head_of_household": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "facility": null, + "consent_sign": "", + "consent": null, + "consent_sharing": "", + "residence_status": "", + "address": "", + "zip_code": null, + "size": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "children_count": null, + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "male_children_disabled_count": null, + "female_children_disabled_count": null, + "other_sex_group_count": null, + "unknown_sex_group_count": null, + "returnee": null, + "fchild_hoh": null, + "child_hoh": null, + "village": "", + "currency_old": "", + "currency": null, + "unhcr_id": "", + "detail_id": null, + "originating_id": null, + "start": null, + "registration_method": "", + "family_id": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "collect_type": "STANDARD", + "program_registration_id": null, + "total_cash_received_usd": null, + "total_cash_received": null, + "flex_fields": {}, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "withdrawn": false, + "withdrawn_date": null, + "longitude": null, + "latitude": null, + "deviceid": "", + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "kobo_submission_uuid": null, + "kobo_submission_time": null, + "enumerator_rec_id": null, + "flex_registrations_record_id": null, + "identification_key": null, + "extra_rdis": [] + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.program", + "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315203, + "data_collecting_type": 199, + "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "name": "Program 0", + "code": "-416", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 199, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 199 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 465, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 465, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.individual", + "pk": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "unicef_id": "IND-25-0000.0324", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json new file mode 100644 index 00000000000..d01b1b7894f --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json @@ -0,0 +1,404 @@ +{ + "household_role": { + "master": { + "model": "household.individualroleinhousehold", + "pk": "056934b5-e92c-409c-895b-36cbb61fda57", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "individual": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "role": "PRIMARY", + "copied_from": null + } + }, + "deps": [ + { + "model": "household.individual", + "pk": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315201, + "unicef_id": "IND-25-0000.0324", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + }, + { + "model": "core.businessarea", + "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.program", + "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315204, + "data_collecting_type": 199, + "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "name": "Program 0", + "code": "-416", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 199, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 199 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315201, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 465, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 465, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.household", + "pk": "e28226e7-6efa-491b-885a-0fbc3568f917", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315203, + "unicef_id": "HH-25-0000.0228", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "household_collection": null, + "storage_obj": null, + "copied_from": null, + "country_origin": null, + "country": null, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "head_of_household": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "facility": null, + "consent_sign": "", + "consent": null, + "consent_sharing": "", + "residence_status": "", + "address": "", + "zip_code": null, + "size": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "children_count": null, + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "male_children_disabled_count": null, + "female_children_disabled_count": null, + "other_sex_group_count": null, + "unknown_sex_group_count": null, + "returnee": null, + "fchild_hoh": null, + "child_hoh": null, + "village": "", + "currency_old": "", + "currency": null, + "unhcr_id": "", + "detail_id": null, + "originating_id": null, + "start": null, + "registration_method": "", + "family_id": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "collect_type": "STANDARD", + "program_registration_id": null, + "total_cash_received_usd": null, + "total_cash_received": null, + "flex_fields": {}, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "withdrawn": false, + "withdrawn_date": null, + "longitude": null, + "latitude": null, + "deviceid": "", + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "kobo_submission_uuid": null, + "kobo_submission_time": null, + "enumerator_rec_id": null, + "flex_registrations_record_id": null, + "identification_key": null, + "extra_rdis": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json new file mode 100644 index 00000000000..7c4c2b6bb27 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json @@ -0,0 +1,245 @@ +{ + "payment_plan": { + "master": { + "model": "payment.paymentplan", + "pk": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315201, + "unicef_id": "PP-BA0000-25-00000001", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program_cycle": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "delivery_mechanism": null, + "financial_service_provider": null, + "imported_file": null, + "export_file_entitlement": null, + "export_file_per_fsp": null, + "export_pdf_file_summary": null, + "reconciliation_import_file": null, + "steficon_rule": null, + "steficon_rule_targeting": null, + "created_by": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "source_payment_plan": null, + "storage_file": null, + "name": null, + "start_date": null, + "end_date": null, + "currency_old": null, + "currency": null, + "dispersion_start_date": "2025-01-01", + "dispersion_end_date": "2025-01-31", + "excluded_ids": null, + "exclusion_reason": null, + "vulnerability_score_min": null, + "vulnerability_score_max": null, + "abort_comment": "", + "flat_amount_value": null, + "status": "FINISHED", + "background_action_status": null, + "build_status": null, + "built_at": null, + "exchange_rate": null, + "custom_exchange_rate": false, + "custom_exchange_rate_set_by": null, + "female_children_count": 0, + "male_children_count": 0, + "female_adults_count": 0, + "male_adults_count": 0, + "total_households_count": 0, + "total_individuals_count": 0, + "imported_file_date": null, + "total_entitled_quantity": null, + "total_entitled_quantity_usd": null, + "total_entitled_quantity_revised": null, + "total_entitled_quantity_revised_usd": null, + "total_delivered_quantity": null, + "total_delivered_quantity_usd": null, + "total_undelivered_quantity": null, + "total_undelivered_quantity_usd": null, + "steficon_targeting_applied_date": null, + "steficon_applied_date": null, + "is_follow_up": false, + "exclude_household_error": null, + "status_date": "2025-01-01T00:00:00Z", + "is_cash_assist": false, + "flag_exclude_if_active_adjudication_ticket": false, + "flag_exclude_if_on_sanction_list": false + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.programcycle", + "pk": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "unicef_id": "PC-BA0000-25-000001", + "title": "Programme Cycle 0", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "status": "ACTIVE", + "start_date": "2025-01-01", + "end_date": null, + "created_by": null + } + }, + { + "model": "program.program", + "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315201, + "data_collecting_type": 199, + "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "name": "Program 0", + "code": "-416", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 199, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 199 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "account.user", + "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 463, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 463, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json new file mode 100644 index 00000000000..0fa9f59ec7f --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json @@ -0,0 +1,617 @@ +{ + "payment_verification": { + "master": { + "model": "payment.paymentverification", + "pk": "893e52a8-4d80-48c4-a6f5-283e06893063", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "payment": "8ac8a49c-c376-4140-ab5d-bbf682e93dcc", + "payment_verification_plan": "4c15e589-3919-4fcc-86d2-415ff1652ffb", + "status": "PENDING", + "status_date": "2025-01-01T00:00:00Z", + "received_amount": null, + "sent_to_rapid_pro": false + } + }, + "deps": [ + { + "model": "payment.payment", + "pk": "8ac8a49c-c376-4140-ab5d-bbf682e93dcc", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "unicef_id": "RCPT-BA0000-25-0.000.001", + "signature_hash": "8978b8da7849e29300b31713f55fa57472404499", + "internal_data": {}, + "parent": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "parent_split": null, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": null, + "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "head_of_household": null, + "delivery_type": null, + "financial_service_provider": null, + "collector": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "collector_type": "PRIMARY", + "source_payment": null, + "is_follow_up": false, + "status": "Pending", + "status_date": "2025-01-01T00:00:00Z", + "currency_old": null, + "currency": 111, + "entitlement_quantity": null, + "entitlement_quantity_usd": null, + "entitlement_date": null, + "delivered_quantity": null, + "delivered_quantity_usd": null, + "delivery_date": null, + "transaction_reference_id": null, + "transaction_status_blockchain_link": null, + "conflicted": false, + "excluded": false, + "has_valid_wallet": true, + "reason_for_unsuccessful_payment": null, + "order_number": null, + "token_number": null, + "additional_collector_name": null, + "additional_document_type": null, + "additional_document_number": null, + "fsp_auth_code": null, + "extras": {}, + "vulnerability_score": null, + "is_cash_assist": false, + "sent_to_fsp_date": null + } + }, + { + "model": "payment.paymentplan", + "pk": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315203, + "unicef_id": "PP-BA0000-25-00000001", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program_cycle": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "delivery_mechanism": null, + "financial_service_provider": null, + "imported_file": null, + "export_file_entitlement": null, + "export_file_per_fsp": null, + "export_pdf_file_summary": null, + "reconciliation_import_file": null, + "steficon_rule": null, + "steficon_rule_targeting": null, + "created_by": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "source_payment_plan": null, + "storage_file": null, + "name": null, + "start_date": null, + "end_date": null, + "currency_old": null, + "currency": null, + "dispersion_start_date": "2025-01-01", + "dispersion_end_date": "2025-01-31", + "excluded_ids": null, + "exclusion_reason": null, + "vulnerability_score_min": null, + "vulnerability_score_max": null, + "abort_comment": "", + "flat_amount_value": null, + "status": "FINISHED", + "background_action_status": null, + "build_status": null, + "built_at": null, + "exchange_rate": null, + "custom_exchange_rate": false, + "custom_exchange_rate_set_by": null, + "female_children_count": 0, + "male_children_count": 0, + "female_adults_count": 0, + "male_adults_count": 0, + "total_households_count": 0, + "total_individuals_count": 0, + "imported_file_date": null, + "total_entitled_quantity": null, + "total_entitled_quantity_usd": null, + "total_entitled_quantity_revised": null, + "total_entitled_quantity_revised_usd": null, + "total_delivered_quantity": null, + "total_delivered_quantity_usd": null, + "total_undelivered_quantity": null, + "total_undelivered_quantity_usd": null, + "steficon_targeting_applied_date": null, + "steficon_applied_date": null, + "is_follow_up": false, + "exclude_household_error": null, + "status_date": "2025-01-01T00:00:00Z", + "is_cash_assist": false, + "flag_exclude_if_active_adjudication_ticket": false, + "flag_exclude_if_on_sanction_list": false + } + }, + { + "model": "core.businessarea", + "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.programcycle", + "pk": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315202, + "unicef_id": "PC-BA0000-25-000001", + "title": "Programme Cycle 0", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "status": "ACTIVE", + "start_date": "2025-01-01", + "end_date": null, + "created_by": null + } + }, + { + "model": "program.program", + "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315205, + "data_collecting_type": 199, + "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "name": "Program 0", + "code": "-416", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 199, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 199 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "account.user", + "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 463, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 463, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.household", + "pk": "e28226e7-6efa-491b-885a-0fbc3568f917", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315204, + "unicef_id": "HH-25-0000.0228", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "household_collection": null, + "storage_obj": null, + "copied_from": null, + "country_origin": null, + "country": null, + "admin1": null, + "admin2": null, + "admin3": null, + "admin4": null, + "head_of_household": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "facility": null, + "consent_sign": "", + "consent": null, + "consent_sharing": "", + "residence_status": "", + "address": "", + "zip_code": null, + "size": null, + "female_age_group_0_5_count": null, + "female_age_group_6_11_count": null, + "female_age_group_12_17_count": null, + "female_age_group_18_59_count": null, + "female_age_group_60_count": null, + "pregnant_count": null, + "male_age_group_0_5_count": null, + "male_age_group_6_11_count": null, + "male_age_group_12_17_count": null, + "male_age_group_18_59_count": null, + "male_age_group_60_count": null, + "female_age_group_0_5_disabled_count": null, + "female_age_group_6_11_disabled_count": null, + "female_age_group_12_17_disabled_count": null, + "female_age_group_18_59_disabled_count": null, + "female_age_group_60_disabled_count": null, + "male_age_group_0_5_disabled_count": null, + "male_age_group_6_11_disabled_count": null, + "male_age_group_12_17_disabled_count": null, + "male_age_group_18_59_disabled_count": null, + "male_age_group_60_disabled_count": null, + "children_count": null, + "male_children_count": null, + "female_children_count": null, + "children_disabled_count": null, + "male_children_disabled_count": null, + "female_children_disabled_count": null, + "other_sex_group_count": null, + "unknown_sex_group_count": null, + "returnee": null, + "fchild_hoh": null, + "child_hoh": null, + "village": "", + "currency_old": "", + "currency": null, + "unhcr_id": "", + "detail_id": null, + "originating_id": null, + "start": null, + "registration_method": "", + "family_id": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "collect_type": "STANDARD", + "program_registration_id": null, + "total_cash_received_usd": null, + "total_cash_received": null, + "flex_fields": {}, + "first_registration_date": "2025-01-01T00:00:00Z", + "last_registration_date": "2025-01-01T00:00:00Z", + "withdrawn": false, + "withdrawn_date": null, + "longitude": null, + "latitude": null, + "deviceid": "", + "name_enumerator": "", + "org_enumerator": "", + "org_name_enumerator": "", + "kobo_submission_uuid": null, + "kobo_submission_time": null, + "enumerator_rec_id": null, + "flex_registrations_record_id": null, + "identification_key": null, + "extra_rdis": [] + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315202, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 465, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 465, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "household.individual", + "pk": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315202, + "unicef_id": "IND-25-0000.0324", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + }, + { + "model": "core.currency", + "pk": 111, + "fields": { + "code": "PLN", + "name": "Polish z\u0142oty", + "is_crypto": false + } + }, + { + "model": "payment.paymentverificationplan", + "pk": "4c15e589-3919-4fcc-86d2-415ff1652ffb", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "unicef_id": "PVP-1", + "payment_plan": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "status": "PENDING", + "verification_channel": "MANUAL", + "sampling": "FULL_LIST", + "sex_filter": null, + "activation_date": null, + "completion_date": null, + "sample_size": null, + "responded_count": null, + "received_count": null, + "not_received_count": null, + "received_with_problems_count": null, + "confidence_interval": null, + "margin_of_error": null, + "rapid_pro_flow_id": "", + "rapid_pro_flow_start_uuids": "[]", + "xlsx_file_exporting": false, + "xlsx_file_imported": false, + "error": null, + "age_filter": null, + "excluded_admin_areas_filter": null + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json new file mode 100644 index 00000000000..7048c04aa5c --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json @@ -0,0 +1,257 @@ +{ + "payment_verification_summary": { + "master": { + "model": "payment.paymentverificationsummary", + "pk": "4929a262-e9ea-4b79-8172-517debefd3f8", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "status": "PENDING", + "activation_date": null, + "completion_date": null, + "payment_plan": "517495a2-b0e6-4e8e-a9ba-4f8318def80e" + } + }, + "deps": [ + { + "model": "payment.paymentplan", + "pk": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315202, + "unicef_id": "PP-BA0000-25-00000001", + "internal_data": {}, + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "program_cycle": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "delivery_mechanism": null, + "financial_service_provider": null, + "imported_file": null, + "export_file_entitlement": null, + "export_file_per_fsp": null, + "export_pdf_file_summary": null, + "reconciliation_import_file": null, + "steficon_rule": null, + "steficon_rule_targeting": null, + "created_by": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "source_payment_plan": null, + "storage_file": null, + "name": null, + "start_date": null, + "end_date": null, + "currency_old": null, + "currency": null, + "dispersion_start_date": "2025-01-01", + "dispersion_end_date": "2025-01-31", + "excluded_ids": null, + "exclusion_reason": null, + "vulnerability_score_min": null, + "vulnerability_score_max": null, + "abort_comment": "", + "flat_amount_value": null, + "status": "FINISHED", + "background_action_status": null, + "build_status": null, + "built_at": null, + "exchange_rate": null, + "custom_exchange_rate": false, + "custom_exchange_rate_set_by": null, + "female_children_count": 0, + "male_children_count": 0, + "female_adults_count": 0, + "male_adults_count": 0, + "total_households_count": 0, + "total_individuals_count": 0, + "imported_file_date": null, + "total_entitled_quantity": null, + "total_entitled_quantity_usd": null, + "total_entitled_quantity_revised": null, + "total_entitled_quantity_revised_usd": null, + "total_delivered_quantity": null, + "total_delivered_quantity_usd": null, + "total_undelivered_quantity": null, + "total_undelivered_quantity_usd": null, + "steficon_targeting_applied_date": null, + "steficon_applied_date": null, + "is_follow_up": false, + "exclude_household_error": null, + "status_date": "2025-01-01T00:00:00Z", + "is_cash_assist": false, + "flag_exclude_if_active_adjudication_ticket": false, + "flag_exclude_if_on_sanction_list": false + } + }, + { + "model": "core.businessarea", + "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.programcycle", + "pk": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315201, + "unicef_id": "PC-BA0000-25-000001", + "title": "Programme Cycle 0", + "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "status": "ACTIVE", + "start_date": "2025-01-01", + "end_date": null, + "created_by": null + } + }, + { + "model": "program.program", + "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315202, + "data_collecting_type": 199, + "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "name": "Program 0", + "code": "-416", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 199, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 199 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "account.user", + "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 463, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 463, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json new file mode 100644 index 00000000000..c35e5270445 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json @@ -0,0 +1,121 @@ +{ + "program": { + "master": { + "model": "program.program", + "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "data_collecting_type": 199, + "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "name": "Program 0", + "code": "-416", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + "deps": [ + { + "model": "core.datacollectingtype", + "pk": 199, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 199 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "core.businessarea", + "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json new file mode 100644 index 00000000000..bad76a34183 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json @@ -0,0 +1,17 @@ +{ + "role": { + "master": { + "model": "account.role", + "pk": "4c07a31f-c54c-4885-b1c4-3946c5170b98", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json new file mode 100644 index 00000000000..f2f5549da1d --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json @@ -0,0 +1,113 @@ +{ + "role_assignment": { + "master": { + "model": "account.roleassignment", + "pk": "5fd4bb71-9e59-4638-8c0d-a4d5a7ff67bc", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "user": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "partner": null, + "role": "4c07a31f-c54c-4885-b1c4-3946c5170b98", + "program": null, + "expiry_date": null, + "group": null + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "account.user", + "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 463, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 463, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "account.role", + "pk": "4c07a31f-c54c-4885-b1c4-3946c5170b98", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json new file mode 100644 index 00000000000..29cfea871e0 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json @@ -0,0 +1,45 @@ +{ + "superuser": { + "master": { + "model": "account.user", + "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 463, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + "deps": [ + { + "model": "account.partner", + "pk": 463, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file From 230bb1f3cbb52a2a1444ef091c48921726ce541a Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Tue, 21 Apr 2026 22:40:26 -0400 Subject: [PATCH 15/33] update more tests --- .../core/test_files/kobo-template-valid.xlsx | Bin 104589 -> 108115 bytes .../apps/core/test_kobo_template_upload.py | 13 +++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/unit/apps/core/test_files/kobo-template-valid.xlsx b/tests/unit/apps/core/test_files/kobo-template-valid.xlsx index e6d1f99bc35e2f8da0ca6cc9f02c32d31a639ec3..7853ce759ef78c7f7647a940ec98a247123dcb28 100644 GIT binary patch literal 108115 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񊂅-)aU%%8tFGIBTl@vGZG_({IQle$;Zxj`4q`_AS(s$xYAki+IYH z$dHI+2l+g(h%Yib^Kg|Z!CP1jCGCI6?? z0QKmHuq#_FXAb^${WQKAx0);%(}@~+z1$nS{<49z;JN^#b4#tZ*j@+=s;nMbZ#Dg% z+jR!cs`Qr2QBS&hL+F(ymao_UN>i9>VL@)tu@5G=V|tJ10BTZA@4L$mB0B6@E~SW# zyK9f8uK4r^r7xg534iM(IQ1<<`NK?2Gad=nj;+OnD7e219KLAJdkRyc9K=|${yF4B zJLaKWEA)+HzBzk7tjG+m5A^(I)y6!G9fOMGU`%%WRyWc`5b2-p0O$9UFCGdBh!;z- z`&vE>Z;P8YHuX0?T@=RJy37RqteGphK(wEQkb3ci+c!6woho1d&(B!(s~x+Ca{vJI zlll!82SBb)y`+7e8!4Zk#3j0vbDNwFZ3AU5x}u!5ChMjlTX`6$)iRI*KuL{b%Cr4M zojfVW7S9_EPEA8qx2F76L+<&WL&@4o$ zt+;W4{;<>>g6-Jh7iGgiK%lSD}K`#yvtQ1#gM}Z%`U&vfm(RiZ(qd^i95@Q)leMCA;3g0C{#z@cujG8j(8^>|_#J%Xu}aFG5E?v9 z9AQ4n(Iy=9_2dI)pieWRC8|q+LoB@kML0wi-&&n!HV+!XmDPhEcTFKclvJ;e|O_o1sAlh-l4d^bga`s!=i~J;zO%yZa}CLha2_j5{3CL8lVAk%86PM z^jUQ|ATOcrxg?H~BE)H%3K;3%hD6mLZie>|og*|s>|Ja@_#)aQLM^rL0I=TgDigBG zy_%Ze1M(rTz8kWB>itLx1zPa%g#UJ$@sz%>&KWMaOul-jspC+ku@?#_m%0Ah8m`Vo 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 Date: Wed, 22 Apr 2026 21:25:25 -0400 Subject: [PATCH 16/33] update and add to_latin() --- docker/Dockerfile | 2 - pyproject.toml | 2 + src/hope/apps/household/utils.py | 33 ++++++++++++ src/hope/apps/payment/api/serializers.py | 17 +++++++ .../tasks/rdi_kobo_create.py | 36 +++++++++++++ .../tasks/rdi_xlsx_create.py | 38 ++++++++++++++ .../tasks/rdi_xlsx_people_create.py | 1 + src/hope/apps/registration_data/validators.py | 43 +++++++++++++--- .../all_updatable_fields.py | 5 ++ ...zech_republic_flex_registration_service.py | 7 +-- .../ukraine_flex_registration_service.py | 7 +-- src/hope/models/individual.py | 51 ++++++++++++++----- .../one_time_scripts/migrate_latin_names.py | 27 ++++++++++ uv.lock | 27 +++++++++- 14 files changed, 267 insertions(+), 29 deletions(-) create mode 100644 src/hope/apps/household/utils.py create mode 100644 src/hope/one_time_scripts/migrate_latin_names.py diff --git a/docker/Dockerfile b/docker/Dockerfile index 5caf52d3408..2a247f90ac9 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -43,8 +43,6 @@ RUN pip install --upgrade pip &&\ COPY README.md LICENSE pyproject.toml uv.lock MANIFEST.in ./ - - # Dev image FROM uv AS dev ENV PYTHONPATH=$APP_PATH/src:$APP_PATH/tests/:$PYTHONPATH diff --git a/pyproject.toml b/pyproject.toml index 5bd56ad6a18..24efd94227f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -113,6 +113,8 @@ dependencies = [ "swapper>=1.3,<2", "tblib>=1.7,<4", "tomli>=2.0.1,<3", + "transliterate>=1.10.2", + "unidecode>=1.4", "update>=0.0.1,<1", "urllib3>=1.26.9,<3", "weasyprint>=60", diff --git a/src/hope/apps/household/utils.py b/src/hope/apps/household/utils.py new file mode 100644 index 00000000000..5ec5fdb92b3 --- /dev/null +++ b/src/hope/apps/household/utils.py @@ -0,0 +1,33 @@ +import re + +from transliterate import translit +from transliterate.utils import LanguageDetectionError +from unidecode import unidecode + +from hope.models.individual import ascii_name_validator + + +def to_latin(text: str | None) -> str | None: + """Transliterate name into Latin. + + translit is using for Cyrillic + unidecode for Arabic and other. + """ + if text is None: + return None + + try: + latin_text = translit(text) + except LanguageDetectionError: + latin_text = unidecode(text) + # clean up + latin_text = re.sub(r"[`'’‘]", "", latin_text) + latin_text = re.sub(r"[^a-zA-Z\s]", " ", latin_text) + latin_text = re.sub(r"\s+", " ", latin_text).strip() + # validate + try: + ascii_name_validator(latin_text) + except ValueError as e: + raise ValueError(e.message) from e + + return latin_text.title() diff --git a/src/hope/apps/payment/api/serializers.py b/src/hope/apps/payment/api/serializers.py index dc8a72d6f63..c21cff98a75 100644 --- a/src/hope/apps/payment/api/serializers.py +++ b/src/hope/apps/payment/api/serializers.py @@ -1048,6 +1048,12 @@ class PaymentListSerializer(serializers.ModelSerializer): snapshot_alternate_collector_full_name = serializers.SerializerMethodField( help_text="Get from Snapshot Alternate Collector Full Name" ) + snapshot_collector_full_name_latin = serializers.SerializerMethodField( + help_text="Get from Household Snapshot Latin Name" + ) + snapshot_alternate_collector_full_name_latin = serializers.SerializerMethodField( + help_text="Get from Snapshot Alternate Collector Full Name Latin" + ) snapshot_alternate_collector_id = serializers.SerializerMethodField( help_text="Get from Snapshot Alternate Collector ID" ) @@ -1087,6 +1093,8 @@ class Meta: "hoh_phone_no_alternative", "snapshot_collector_full_name", "snapshot_alternate_collector_full_name", + "snapshot_collector_full_name_latin", + "snapshot_alternate_collector_full_name_latin", "snapshot_alternate_collector_id", "fsp_name", "entitlement_quantity", @@ -1149,6 +1157,15 @@ def get_snapshot_collector_full_name(self, obj: Payment) -> Any: def get_snapshot_alternate_collector_full_name(self, obj: Payment) -> Any: return PaymentListSerializer.get_collector_field(obj, "full_name", ROLE_ALTERNATE) + def get_snapshot_collector_full_name_latin(self, obj: Payment) -> Any: + return PaymentListSerializer.get_collector_field( + obj, + "full_name_latin", + ) + + def get_snapshot_alternate_collector_full_name_latin(self, obj: Payment) -> Any: + return PaymentListSerializer.get_collector_field(obj, "full_name_latin", ROLE_ALTERNATE) + def get_snapshot_alternate_collector_id(self, obj: Payment) -> Any: return PaymentListSerializer.get_collector_field(obj, "id", ROLE_ALTERNATE) diff --git a/src/hope/apps/registration_data/tasks/rdi_kobo_create.py b/src/hope/apps/registration_data/tasks/rdi_kobo_create.py index 38b574add7a..0b6f2c19064 100644 --- a/src/hope/apps/registration_data/tasks/rdi_kobo_create.py +++ b/src/hope/apps/registration_data/tasks/rdi_kobo_create.py @@ -23,6 +23,7 @@ ROLE_ALTERNATE, ROLE_PRIMARY, ) +from hope.apps.household.utils import to_latin from hope.apps.periodic_data_update.utils import populate_pdu_with_null_values from hope.apps.registration_data.tasks.deduplicate import DeduplicateTask from hope.apps.registration_data.tasks.rdi_base_create import RdiBaseCreateTask @@ -415,6 +416,40 @@ def _create_facility(self, facility_data: dict) -> Facility | None: )[0] return None + def _fill_latin_fields(self, obj: PendingIndividual) -> None: + mapping_names = [ + ("given_name", "given_name_latin"), + ("middle_name", "middle_name_latin"), + ("family_name", "family_name_latin"), + ] + for local_name, latin_name in mapping_names: + if not getattr(obj, latin_name): + value = getattr(obj, local_name) + if value: + setattr(obj, latin_name, to_latin(value)) + + def _fill_full_name_latin(self, obj: PendingIndividual) -> None: + if obj.full_name_latin: + return + if obj.full_name: + obj.full_name_latin = to_latin(obj.full_name) + return + + obj.full_name_latin = " ".join( + filter( + None, + [ + obj.given_name_latin, + obj.middle_name_latin, + obj.family_name_latin, + ], + ) + ) + + def _check_latin_names(self, obj_to_create: PendingIndividual) -> None: + self._fill_latin_fields(obj_to_create) + self._fill_full_name_latin(obj_to_create) + def handle_household( # noqa: PLR0912 self, collectors_to_create: dict, @@ -457,6 +492,7 @@ def handle_household( # noqa: PLR0912 if individual_obj.relationship == HEAD: head_of_households_mapping[household_obj] = individual_obj individuals_ids_hash_dict[individual_obj.get_hash_key] = individual_obj.id + individual_obj.set_names_latin() individuals_to_create_list.append(individual_obj) current_individuals.append(individual_obj) documents_and_identities_to_create.append(current_individual_docs_and_identities) diff --git a/src/hope/apps/registration_data/tasks/rdi_xlsx_create.py b/src/hope/apps/registration_data/tasks/rdi_xlsx_create.py index 38b693b30a8..c05538b6626 100644 --- a/src/hope/apps/registration_data/tasks/rdi_xlsx_create.py +++ b/src/hope/apps/registration_data/tasks/rdi_xlsx_create.py @@ -22,6 +22,7 @@ ROLE_ALTERNATE, ROLE_PRIMARY, ) +from hope.apps.household.utils import to_latin from hope.apps.periodic_data_update.service.periodic_data_update_import_service import ( PDUXlsxImportService, ) @@ -495,6 +496,40 @@ def _create_pending_object_factory(self, sheet_title: str, rdi: RegistrationData return partial(PendingIndividual, registration_data_import=rdi, program_id=rdi.program.id) raise ValueError(f"Unhandled sheet label '{sheet_title!r}'") + def _fill_latin_fields(self, obj: PendingIndividual) -> None: + mapping = [ + ("given_name", "given_name_latin"), + ("middle_name", "middle_name_latin"), + ("family_name", "family_name_latin"), + ] + for local_name, latin_name in mapping: + if not getattr(obj, latin_name): + value = getattr(obj, local_name) + if value: + setattr(obj, latin_name, to_latin(value)) + + def _fill_full_name_latin(self, obj: PendingIndividual) -> None: + if obj.full_name_latin: + return + if obj.full_name: + obj.full_name_latin = to_latin(obj.full_name) + return + + obj.full_name_latin = " ".join( + filter( + None, + [ + obj.given_name_latin, + obj.middle_name_latin, + obj.family_name_latin, + ], + ) + ) + + def _check_latin_names(self, obj_to_create: PendingIndividual) -> None: + self._fill_latin_fields(obj_to_create) + self._fill_full_name_latin(obj_to_create) + def _find_header_indices(self, first_row: Any) -> tuple[int | None, int | None]: """Find household_id and relationship column indices.""" household_id_col_idx = None @@ -563,6 +598,9 @@ def _finalize_row_object( ) populate_pdu_with_null_values(self.rdi.program, obj_to_create.flex_fields) self.handle_pdu_fields(row, first_row, obj_to_create) # type: ignore[arg-type] + + # check latin names + self._check_latin_names(obj_to_create) self.individuals.append(obj_to_create) def _bulk_save_and_finalize(self, households_to_update: list) -> None: diff --git a/src/hope/apps/registration_data/tasks/rdi_xlsx_people_create.py b/src/hope/apps/registration_data/tasks/rdi_xlsx_people_create.py index ea4267284b6..8032ece751f 100644 --- a/src/hope/apps/registration_data/tasks/rdi_xlsx_people_create.py +++ b/src/hope/apps/registration_data/tasks/rdi_xlsx_people_create.py @@ -233,6 +233,7 @@ def _post_processing( household.head_of_household = obj_to_create self.households_to_update.append(household) + obj_to_create.set_names_latin() self.individuals.append(obj_to_create) def _process_admin_areas_and_country( diff --git a/src/hope/apps/registration_data/validators.py b/src/hope/apps/registration_data/validators.py index 1762d0816d3..5bdc179edf2 100644 --- a/src/hope/apps/registration_data/validators.py +++ b/src/hope/apps/registration_data/validators.py @@ -327,10 +327,18 @@ def __init__(self, program: Program) -> None: self.facility_admin_area_header = ( "pp_facility_admin_area_h_c" if self.is_social_worker_program else "facility_admin_area_h_c" ) - self.full_name_header = "pp_full_name_i_c" if self.is_social_worker_program else "full_name_i_c" - self.given_name_header = "pp_given_name_i_c" if self.is_social_worker_program else "given_name_i_c" - self.middle_name_header = "pp_middle_name_i_c" if self.is_social_worker_program else "middle_name_i_c" - self.family_name_header = "pp_family_name_i_c" if self.is_social_worker_program else "family_name_i_c" + self.full_name_header_latin = ( + "pp_full_name_latin_i_c" if self.is_social_worker_program else "full_name_latin_i_c" + ) + self.given_name_header_latin = ( + "pp_given_name_latin_i_c" if self.is_social_worker_program else "given_name_latin_i_c" + ) + self.middle_name_header_latin = ( + "pp_middle_name_latin_i_c" if self.is_social_worker_program else "middle_name_latin_i_c" + ) + self.family_name_header_latin = ( + "pp_family_name_latin_i_c" if self.is_social_worker_program else "family_name_latin_i_c" + ) def get_combined_fields(self) -> dict: core_fields = ( @@ -700,10 +708,10 @@ def rows_validator(self, sheet: Worksheet, business_area_slug: str | None = None # validate name fields AB#301335 if self.sheet_title in ("Individuals", "People"): for field_name in [ - self.full_name_header, - self.given_name_header, - self.middle_name_header, - self.family_name_header, + self.full_name_header_latin, + self.given_name_header_latin, + self.middle_name_header_latin, + self.family_name_header_latin, ]: value = self.get_cell_value(first_row, row, field_name) # skip empty values @@ -1892,6 +1900,17 @@ def validate_facility(self, facility_data: dict[str, Any]) -> dict[str, str] | N return {"header": "facility_admin_area_h_c", "message": f"Area with code: {area_p_code} does not exist"} return None + def _validate_latin_fields(self, field: str, value: str, errors: list[dict[str, str]]) -> None: + try: + ascii_name_validator(value) + except ValidationError as e: + errors.append( + { + "header": field, + "message": f"{str(e.code)}, {str(e.message)}, Value provided: {value}", + } + ) + def _validate_household( self, household: dict[str, Any], @@ -1946,6 +1965,14 @@ def _validate_household( if error: errors.append(error) + if i_field in [ + "full_name_latin_i_c", + "given_name_latin_i_c", + "middle_name_latin_i_c", + "family_name_latin_i_c", + ]: + self._validate_latin_fields(i_field, i_value, errors) + docs_and_identities_to_validate.append(current_individual_docs_and_identities) i_expected_field_errors = [ diff --git a/src/hope/apps/universal_update_script/universal_individual_update_service/all_updatable_fields.py b/src/hope/apps/universal_update_script/universal_individual_update_service/all_updatable_fields.py index 6f213cab66c..1c96216a0e9 100644 --- a/src/hope/apps/universal_update_script/universal_individual_update_service/all_updatable_fields.py +++ b/src/hope/apps/universal_update_script/universal_individual_update_service/all_updatable_fields.py @@ -20,12 +20,17 @@ validate_string, ) from hope.models import AccountType, DocumentType, FlexibleAttribute +from hope.models.individual import ascii_name_validator individual_fields: dict[str, tuple[str, Any, Any]] = { "full_name": ("full_name", validate_string, handle_simple_field), "given_name": ("given_name", validate_string, handle_simple_field), "middle_name": ("middle_name", validate_string, handle_simple_field), "family_name": ("family_name", validate_string, handle_simple_field), + "full_name_latin": ("full_name_latin", ascii_name_validator, handle_simple_field), + "given_name_latin": ("given_name_latin", ascii_name_validator, handle_simple_field), + "middle_name_latin": ("middle_name_latin", ascii_name_validator, handle_simple_field), + "family_name_latin": ("family_name_latin", ascii_name_validator, handle_simple_field), "sex": ("sex", validate_choices, handle_simple_field), "birth_date": ("birth_date", validate_date, handle_date_field), "estimated_birth_date": ( diff --git a/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py b/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py index 1d0e9a4d9b4..f9eb00fd858 100644 --- a/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py +++ b/src/hope/contrib/aurora/services/czech_republic_flex_registration_service.py @@ -19,6 +19,7 @@ ROLE_PRIMARY, ) from hope.apps.household.forms import DocumentForm, IndividualForm +from hope.apps.household.utils import to_latin from hope.contrib.aurora.services.base_flex_registration_service import ( BaseRegistrationService, ) @@ -178,9 +179,9 @@ def _prepare_individual_data( middle_name = individual_data.get("middle_name") family_name = individual_data.get("family_name") - given_name_latin = individual_data.get("given_name_latin") - middle_name_latin = individual_data.get("middle_name_latin") - family_name_latin = individual_data.get("family_name_latin") + given_name_latin = individual_data.get("given_name_latin") or to_latin(given_name) + middle_name_latin = individual_data.get("middle_name_latin") or to_latin(middle_name) + family_name_latin = individual_data.get("family_name_latin") or to_latin(family_name) individual_data["full_name"] = " ".join(filter(None, [given_name, middle_name, family_name])) individual_data["full_name_latin"] = " ".join( diff --git a/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py b/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py index 8921f24fc88..e4cc59793ba 100644 --- a/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py +++ b/src/hope/contrib/aurora/services/ukraine_flex_registration_service.py @@ -24,6 +24,7 @@ ROLE_PRIMARY, ) from hope.apps.household.forms import DocumentForm, IndividualForm +from hope.apps.household.utils import to_latin from hope.contrib.aurora.services.base_flex_registration_service import ( BaseRegistrationService, ) @@ -236,9 +237,9 @@ def _prepare_individual_data( given_name = individual_data.get("given_name") middle_name = individual_data.get("middle_name") family_name = individual_data.get("family_name") - given_name_latin = individual_data.get("given_name_latin") - middle_name_latin = individual_data.get("middle_name_latin") - family_name_latin = individual_data.get("family_name_latin") + given_name_latin = individual_data.get("given_name_latin") or to_latin(given_name) + middle_name_latin = individual_data.get("middle_name_latin") or to_latin(middle_name) + family_name_latin = individual_data.get("family_name_latin") or to_latin(family_name) individual_data["full_name"] = " ".join(filter(None, [given_name, middle_name, family_name])) individual_data["full_name_latin"] = " ".join( diff --git a/src/hope/models/individual.py b/src/hope/models/individual.py index 6e96340a2de..f233366785a 100644 --- a/src/hope/models/individual.py +++ b/src/hope/models/individual.py @@ -196,9 +196,7 @@ class Individual( photo = models.ImageField(blank=True, help_text="Photo") full_name = models.CharField( max_length=255, - validators=[ - MinLengthValidator(2), - ], + validators=[MinLengthValidator(2)], db_index=True, help_text="Full Name of the Beneficiary", db_collation="und-ci-det", @@ -240,9 +238,7 @@ class Individual( help_text="First name of the Beneficiary Latin", db_collation="und-ci-det", null=True, - validators=[ - ascii_name_validator, - ], + validators=[ascii_name_validator], ) middle_name_latin = models.CharField( max_length=150, @@ -251,9 +247,7 @@ class Individual( help_text="Middle name of the Beneficiary Latin", db_collation="und-ci-det", null=True, - validators=[ - ascii_name_validator, - ], + validators=[ascii_name_validator], ) family_name_latin = models.CharField( max_length=150, @@ -262,9 +256,7 @@ class Individual( help_text="Last name of the Beneficiary Latin", db_collation="und-ci-det", null=True, - validators=[ - ascii_name_validator, - ], + validators=[ascii_name_validator], ) sex = models.CharField( max_length=255, @@ -586,6 +578,37 @@ def set_relationship_confirmed_flag(self, confirmed: bool) -> None: self.relationship_confirmed = confirmed self.save(update_fields=["relationship_confirmed"]) + def set_names_latin(self) -> None: + from hope.apps.household.utils import to_latin + + mapping_names = [ + ("given_name", "given_name_latin"), + ("middle_name", "middle_name_latin"), + ("family_name", "family_name_latin"), + ] + for local_name, latin_name in mapping_names: + if not getattr(self, latin_name): + value = getattr(self, local_name) + if value: + setattr(self, latin_name, to_latin(value)) + + if self.full_name_latin: + return + if self.full_name: + self.full_name_latin = to_latin(self.full_name) + return + + self.full_name_latin = " ".join( + filter( + None, + [ + self.given_name_latin, + self.middle_name_latin, + self.family_name_latin, + ], + ) + ) + def __str__(self) -> str: return self.unicef_id or "" @@ -733,6 +756,10 @@ def erase(self) -> None: self.given_name = "GDPR REMOVED" self.middle_name = "GDPR REMOVED" self.family_name = "GDPR REMOVED" + self.full_name_latin = "GDPR REMOVED" + self.given_name_latin = "GDPR REMOVED" + self.middle_name_latin = "GDPR REMOVED" + self.family_name_latin = "GDPR REMOVED" self.photo = "" self.disability_certificate_picture = "" self.phone_no = "" diff --git a/src/hope/one_time_scripts/migrate_latin_names.py b/src/hope/one_time_scripts/migrate_latin_names.py new file mode 100644 index 00000000000..f9c79034470 --- /dev/null +++ b/src/hope/one_time_scripts/migrate_latin_names.py @@ -0,0 +1,27 @@ +from hope.apps.household.utils import to_latin +from hope.models import Individual + +BATCH_SIZE = 500 + + +def migrate_to_latin_names() -> None: + qs = Individual.objects.all().iterator(chunk_size=BATCH_SIZE) + to_update = [] + + # TODO: add pagination maybe + + for ind in qs: + if ind.full_name and not ind.full_name_latin: + ind.full_name_latin = to_latin(ind.full_name) + if ind.given_name and not ind.given_name_latin: + ind.given_name_latin = to_latin(ind.given_name) + if ind.middle_name and not ind.middle_name_latin: + ind.middle_name_latin = to_latin(ind.middle_name) + if ind.family_name and not ind.family_name_latin: + ind.family_name_latin = to_latin(ind.family_name) + + to_update.append(ind) + + Individual.objects.bulk_update(to_update, fields=[ + "full_name_latin", "given_name_latin", "middle_name_latin", "family_name_latin" + ], batch_size=BATCH_SIZE) diff --git a/uv.lock b/uv.lock index c5cadc72635..f3f14297271 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 2 requires-python = "==3.14.*" [[package]] @@ -1997,6 +1997,8 @@ dependencies = [ { name = "swapper" }, { name = "tblib" }, { name = "tomli" }, + { name = "transliterate" }, + { name = "unidecode" }, { name = "update" }, { name = "urllib3" }, { name = "weasyprint" }, @@ -2182,6 +2184,8 @@ requires-dist = [ { name = "swapper", specifier = ">=1.3,<2" }, { name = "tblib", specifier = ">=1.7,<4" }, { name = "tomli", specifier = ">=2.0.1,<3" }, + { name = "transliterate", specifier = ">=1.10.2" }, + { name = "unidecode", specifier = ">=1.4" }, { name = "update", specifier = ">=0.0.1,<1" }, { name = "urllib3", specifier = ">=1.26.9,<3" }, { name = "weasyprint", specifier = ">=60" }, @@ -4442,6 +4446,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, ] +[[package]] +name = "transliterate" +version = "1.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/88/e3/84a89c289a5cf00c7aeabfb5a862a6e4cdc25819701cf1c454a18d32ac33/transliterate-1.10.2.tar.gz", hash = "sha256:bc608e0d48e687db9c2b1d7ea7c381afe0d1849cad216087d8e03d8d06a57c85", size = 43088, upload-time = "2018-09-17T20:52:37.984Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/6e/9a9d597dbdd6d0172427c8cc07c35736471e631060df9e59eeb87687f817/transliterate-1.10.2-py2.py3-none-any.whl", hash = "sha256:010a5021bf6021689c4fade0985f3f7b3db1f2f16a48a09a56797f171c08ed42", size = 45780, upload-time = "2018-09-17T20:52:40.332Z" }, +] + [[package]] name = "trio" version = "0.33.0" @@ -4643,6 +4659,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/d6/eace713a7d9b0ae4f92dc1bbc063eb6b3681654a030321c55f262efea023/unicef_security-1.9.2-py2.py3-none-any.whl", hash = "sha256:8f22858cd035df021d784b58557b5cf1892b099824700498786bc9f4631d6a3b", size = 23310, upload-time = "2026-01-20T13:07:22.333Z" }, ] +[[package]] +name = "unidecode" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload-time = "2025-04-24T08:45:03.798Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload-time = "2025-04-24T08:45:01.609Z" }, +] + [[package]] name = "unittest-xml-reporting" version = "4.0.0" From 1c24ce317dcfa4a61b4fc46072a7f95a7d184c42 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 11:04:14 -0400 Subject: [PATCH 17/33] fixes --- src/hope/apps/household/utils.py | 2 +- tests/unit/apps/household/test_household_list_views.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hope/apps/household/utils.py b/src/hope/apps/household/utils.py index 5ec5fdb92b3..b1a73be23d4 100644 --- a/src/hope/apps/household/utils.py +++ b/src/hope/apps/household/utils.py @@ -17,7 +17,7 @@ def to_latin(text: str | None) -> str | None: return None try: - latin_text = translit(text) + latin_text = translit(text, reversed=True) except LanguageDetectionError: latin_text = unidecode(text) # clean up diff --git a/tests/unit/apps/household/test_household_list_views.py b/tests/unit/apps/household/test_household_list_views.py index b9bdc7457ca..03f5a191f55 100644 --- a/tests/unit/apps/household/test_household_list_views.py +++ b/tests/unit/apps/household/test_household_list_views.py @@ -356,7 +356,7 @@ def test_household_list_caching( etag = response.headers["etag"] assert json.loads(cache.get(etag)[0].decode("utf8")) == response.json() assert len(response.json()["results"]) == 2 - assert len(ctx.captured_queries) == 17 + assert len(ctx.captured_queries) == 16 with CaptureQueriesContext(connection) as ctx: response = household_list_context["api_client"].get(household_list_context["list_url"]) From 2a315aebc1ea3844e9499edb4e88e1de4b70b940 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 12:49:29 -0400 Subject: [PATCH 18/33] update tests --- ...f18ae6b758e8014a24c7fa039e91.response.json | 8 +- .../business_area.fixture.json | 46 +++ .../individual.fixture.json | 287 ++++++++++++++++++ .../program.fixture.json | 121 ++++++++ .../test_individuals_global/role.fixture.json | 17 ++ .../role_assignment.fixture.json | 113 +++++++ .../superuser.fixture.json | 45 +++ ...f18ae6b758e8014a24c7fa039e91.response.json | 18 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 87 +++--- .../test_payments/business_area.fixture.json | 2 +- .../test_payments/household.fixture.json | 65 ++-- .../test_payments/household_role.fixture.json | 71 +++-- .../test_payments/payment.fixture.json | 125 ++++---- .../test_payments/payment_plan.fixture.json | 42 +-- .../test_payments/program.fixture.json | 20 +- .../test_payments/role.fixture.json | 4 +- .../role_assignment.fixture.json | 20 +- .../test_payments/superuser.fixture.json | 6 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 16 +- .../business_area.fixture.json | 2 +- .../test_payments_global/payment.fixture.json | 131 ++++---- .../test_payments_global/program.fixture.json | 18 +- .../test_payments_global/role.fixture.json | 2 +- .../role_assignment.fixture.json | 18 +- .../superuser.fixture.json | 6 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 22 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 86 +++--- .../business_area.fixture.json | 2 +- .../household.fixture.json | 56 ++-- .../household_role.fixture.json | 62 ++-- .../payment_plan.fixture.json | 36 +-- .../payment_verification.fixture.json | 96 +++--- .../payment_verification_summary.fixture.json | 40 +-- .../program.fixture.json | 18 +- .../role.fixture.json | 2 +- .../role_assignment.fixture.json | 18 +- .../superuser.fixture.json | 6 +- .../household/test_household_list_views.py | 10 +- .../household/test_household_members_views.py | 3 + .../test_file/kobo_submissions.json | 3 +- .../registration_data/test_rdi_kobo_create.py | 8 +- 41 files changed, 1223 insertions(+), 535 deletions(-) create mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/business_area.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/individual.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/program.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/role.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/role_assignment.fixture.json create mode 100644 tests/unit/api_contract/_api_checker/test_individuals_global/superuser.fixture.json rename tests/unit/api_contract/_api_checker/test_payments/{_api_rest_business-areas_business-area-0_programs_c6r4_payment-plans_911e9fb2-a41a-4d07-97c2-29722c9d749a_payments_ => _api_rest_business-areas_business-area-0_programs_-c5f_payment-plans_771cb14c-11c2-49b0-a3f3-0877b42c7b46_payments_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (78%) rename tests/unit/api_contract/_api_checker/test_payments/{_api_rest_business-areas_business-area-0_programs_c6r4_payment-plans_911e9fb2-a41a-4d07-97c2-29722c9d749a_payments_f533f1fa-fbb4-4719-a515-6c99d493fe57_ => _api_rest_business-areas_business-area-0_programs_-c5f_payment-plans_771cb14c-11c2-49b0-a3f3-0877b42c7b46_payments_8b12a3c8-b6d4-4567-b514-b1b8bc8f1e89_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (85%) rename tests/unit/api_contract/_api_checker/test_verification_records/{_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_ => _api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (76%) rename tests/unit/api_contract/_api_checker/test_verification_records/{_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_8ac8a49c-c376-4140-ab5d-bbf682e93dcc_ => _api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_37b87086-25a8-49eb-ba35-ac35832ca8d0_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (86%) diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 3b425ad2e85..92b3c60ab3f 100644 --- a/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/_api_rest_business-areas_business-area-0_individuals_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -15,8 +15,8 @@ "previous": null, "results": [ { - "id": "95391fd5-c41f-4a18-b716-b96eec3bc96d", - "unicef_id": "IND-25-0000.0008", + "id": "3df420d5-3d68-4482-8f57-6c8176794de0", + "unicef_id": "IND-25-0000.0081", "full_name": "Person 0", "full_name_latin": null, "household": null, @@ -39,9 +39,9 @@ "deduplication_golden_record_results": [], "biometric_deduplication_golden_record_results": [], "program": { - "id": "75717c42-48fb-43af-8b4a-6bd2206acd88", + "id": "bd470378-1c45-43e4-8759-bc60d18ffc6e", "name": "Program 0", - "code": "r2sz" + "code": "3oqd" }, "last_registration_date": "2025-01-01", "role": null diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/business_area.fixture.json new file mode 100644 index 00000000000..4034e4a3ac2 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/business_area.fixture.json @@ -0,0 +1,46 @@ +{ + "business_area": { + "master": { + "model": "core.businessarea", + "pk": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/individual.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/individual.fixture.json new file mode 100644 index 00000000000..2587d62bd21 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/individual.fixture.json @@ -0,0 +1,287 @@ +{ + "individual": { + "master": { + "model": "household.individual", + "pk": "3df420d5-3d68-4482-8f57-6c8176794de0", + "fields": { + "rdi_merge_status": "MERGED", + "is_removed": false, + "removed_date": null, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "unicef_id": "IND-25-0000.0081", + "internal_data": {}, + "business_area": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "program": "bd470378-1c45-43e4-8759-bc60d18ffc6e", + "registration_data_import": "23b7e8ff-d9ad-4b4d-83f7-f968e65d0d59", + "household": null, + "individual_collection": null, + "copied_from": null, + "individual_id": "", + "photo": "", + "full_name": "Person 0", + "given_name": "", + "middle_name": "", + "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, + "sex": "MALE", + "birth_date": "1990-01-01", + "estimated_birth_date": false, + "marital_status": "", + "phone_no": "", + "phone_no_alternative": "", + "email": "", + "payment_delivery_phone_no": null, + "relationship": "", + "work_status": "NOT_PROVIDED", + "pregnant": null, + "fchild_hoh": false, + "child_hoh": false, + "disability": "not disabled", + "observed_disability": "NONE", + "disability_certificate_picture": "", + "seeing_disability": "", + "hearing_disability": "", + "physical_disability": "", + "memory_disability": "", + "selfcare_disability": "", + "comms_disability": "", + "who_answers_phone": "", + "who_answers_alt_phone": "", + "preferred_language": null, + "relationship_confirmed": false, + "wallet_name": "", + "blockchain_name": "", + "wallet_address": "", + "duplicate": false, + "duplicate_date": null, + "withdrawn": false, + "withdrawn_date": null, + "flex_fields": {}, + "phone_no_valid": false, + "phone_no_alternative_valid": false, + "first_registration_date": "2025-01-01", + "last_registration_date": "2025-01-01", + "enrolled_in_nutrition_programme": null, + "deduplication_golden_record_status": "UNIQUE", + "deduplication_batch_status": "UNIQUE_IN_BATCH", + "deduplication_golden_record_results": {}, + "deduplication_batch_results": {}, + "biometric_deduplication_golden_record_status": "NOT_PROCESSED", + "biometric_deduplication_batch_status": "NOT_PROCESSED", + "biometric_deduplication_golden_record_results": [], + "biometric_deduplication_batch_results": [], + "imported_individual_id": null, + "sanction_list_possible_match": false, + "sanction_list_confirmed_match": false, + "detail_id": null, + "originating_id": null, + "program_registration_id": null, + "age_at_registration": null, + "origin_unicef_id": null, + "is_migration_handled": false, + "migrated_at": null, + "identification_key": null, + "vector_column": "'0':3 'none':1 'person':2" + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "program.program", + "pk": "bd470378-1c45-43e4-8759-bc60d18ffc6e", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315201, + "data_collecting_type": 53, + "beneficiary_group": "e04a566f-f8b6-428e-80f4-1534bfc56e03", + "business_area": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "name": "Program 0", + "code": "3oqd", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + { + "model": "core.datacollectingtype", + "pk": 53, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 53 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "e04a566f-f8b6-428e-80f4-1534bfc56e03", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "registration_data.registrationdataimport", + "pk": "23b7e8ff-d9ad-4b4d-83f7-f968e65d0d59", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "version": 1735688653315200, + "name": "RDI 0", + "status": "MERGED", + "deduplication_engine_status": null, + "business_area": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "program": "bd470378-1c45-43e4-8759-bc60d18ffc6e", + "import_date": "2025-01-01T00:00:00Z", + "imported_by": "06d038d7-6b37-4bbe-b22d-ec08a36eb8ce", + "data_source": "XLS", + "import_data": null, + "import_from_ids": null, + "exclude_external_collectors": false, + "pull_pictures": true, + "screen_beneficiary": false, + "excluded": false, + "erased": false, + "refuse_reason": null, + "error_message": "", + "sentry_id": "", + "number_of_individuals": 1, + "number_of_households": 1, + "batch_duplicates": 0, + "batch_possible_duplicates": 0, + "batch_unique": 0, + "golden_record_duplicates": 0, + "golden_record_possible_duplicates": 0, + "golden_record_unique": 0, + "dedup_engine_batch_duplicates": 0, + "dedup_engine_golden_record_duplicates": 0 + } + }, + { + "model": "account.user", + "pk": "06d038d7-6b37-4bbe-b22d-ec08a36eb8ce", + "fields": { + "password": "", + "last_login": null, + "is_superuser": false, + "username": "user_1", + "first_name": "", + "last_name": "", + "is_staff": false, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_1", + "status": "INVITED", + "partner": 125, + "email": "user_1@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 125, + "fields": { + "name": "Partner 1", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 3, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/program.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/program.fixture.json new file mode 100644 index 00000000000..ca69eec29c9 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/program.fixture.json @@ -0,0 +1,121 @@ +{ + "program": { + "master": { + "model": "program.program", + "pk": "bd470378-1c45-43e4-8759-bc60d18ffc6e", + "fields": { + "is_removed": false, + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "last_sync_at": null, + "version": 1735688653315200, + "data_collecting_type": 53, + "beneficiary_group": "e04a566f-f8b6-428e-80f4-1534bfc56e03", + "business_area": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "name": "Program 0", + "code": "3oqd", + "status": "ACTIVE", + "description": "", + "start_date": "2025-01-01", + "end_date": "2026-01-01", + "sector": "MULTI_PURPOSE", + "budget": "1000000.00", + "frequency_of_payments": "ONE_OFF", + "scope": null, + "partner_access": "SELECTED_PARTNERS_ACCESS", + "cash_plus": false, + "population_goal": 1000, + "administrative_areas_of_implementation": "", + "biometric_deduplication_enabled": false, + "collision_detector": "hope.apps.program.collision_detectors.NoopCollisionDetector", + "identification_key_individual_label": null, + "is_visible": true, + "household_count": 0, + "individual_count": 0, + "reconciliation_window_in_days": 0, + "send_reconciliation_window_expiry_notifications": false, + "admin_areas": [], + "sanction_lists": [] + } + }, + "deps": [ + { + "model": "core.datacollectingtype", + "pk": 53, + "fields": { + "created": "2025-01-01T00:00:00Z", + "modified": "2025-01-01T00:00:00Z", + "code": "dct_0", + "label": "DCT 0", + "type": "STANDARD", + "description": "", + "active": true, + "deprecated": false, + "individual_filters_available": false, + "household_filters_available": true, + "recalculate_composition": false, + "weight": 0, + "compatible_types": [ + 53 + ], + "limit_to": [] + } + }, + { + "model": "program.beneficiarygroup", + "pk": "e04a566f-f8b6-428e-80f4-1534bfc56e03", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Group 0", + "group_label": "Household", + "group_label_plural": "Households", + "member_label": "Individual", + "member_label_plural": "Individuals", + "master_detail": true + } + }, + { + "model": "core.businessarea", + "pk": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/role.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/role.fixture.json new file mode 100644 index 00000000000..4f9cf0a6c6c --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/role.fixture.json @@ -0,0 +1,17 @@ +{ + "role": { + "master": { + "model": "account.role", + "pk": "4d72ea48-cdc2-431a-b252-6304f18b1452", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + }, + "deps": [] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/role_assignment.fixture.json new file mode 100644 index 00000000000..946e3be5ad0 --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/role_assignment.fixture.json @@ -0,0 +1,113 @@ +{ + "role_assignment": { + "master": { + "model": "account.roleassignment", + "pk": "c0c35c60-dd73-496d-97e8-2e097e04c3a3", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "business_area": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "user": "390dd1a6-0822-45c5-a8f7-8abb2a41aee9", + "partner": null, + "role": "4d72ea48-cdc2-431a-b252-6304f18b1452", + "program": null, + "expiry_date": null, + "group": null + } + }, + "deps": [ + { + "model": "core.businessarea", + "pk": "d6ae0bc5-774a-4242-8e70-b34afc45ceb3", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "code": "BA0000", + "slug": "business-area-0", + "name": "Business Area 0", + "long_name": "Business Area 0 Long Name", + "parent": null, + "office_country": null, + "is_split": false, + "region_code": "64", + "region_name": "TEST", + "has_data_sharing_agreement": false, + "is_accountability_applicable": false, + "rdi_import_xlsx_disabled": false, + "active": true, + "enable_email_notification": true, + "kobo_username": null, + "kobo_token": null, + "kobo_url": null, + "rapid_pro_host": null, + "rapid_pro_payment_verification_token": null, + "rapid_pro_messages_token": null, + "rapid_pro_survey_token": null, + "postpone_deduplication": false, + "deduplication_duplicate_score": 6.0, + "deduplication_possible_duplicate_score": 6.0, + "deduplication_batch_duplicates_percentage": 50, + "deduplication_batch_duplicates_allowed": 5, + "deduplication_golden_record_duplicates_percentage": 50, + "deduplication_golden_record_duplicates_allowed": 5, + "deduplication_ignore_withdraw": false, + "biometric_deduplication_threshold": 0.0, + "custom_fields": {}, + "countries": [], + "payment_countries": [] + } + }, + { + "model": "account.user", + "pk": "390dd1a6-0822-45c5-a8f7-8abb2a41aee9", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 123, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "account.partner", + "pk": 123, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + }, + { + "model": "account.role", + "pk": "4d72ea48-cdc2-431a-b252-6304f18b1452", + "fields": { + "created_at": "2025-01-01T00:00:00Z", + "updated_at": "2025-01-01T00:00:00Z", + "name": "Role 0", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "is_visible_on_ui": true, + "is_available_for_partner": true + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_individuals_global/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_individuals_global/superuser.fixture.json new file mode 100644 index 00000000000..81d1e59a05c --- /dev/null +++ b/tests/unit/api_contract/_api_checker/test_individuals_global/superuser.fixture.json @@ -0,0 +1,45 @@ +{ + "superuser": { + "master": { + "model": "account.user", + "pk": "390dd1a6-0822-45c5-a8f7-8abb2a41aee9", + "fields": { + "password": "", + "last_login": null, + "is_superuser": true, + "username": "user_0", + "first_name": "", + "last_name": "", + "is_staff": true, + "is_active": true, + "date_joined": "2025-01-01T00:00:00Z", + "azure_id": null, + "display_name": "user_0", + "status": "INVITED", + "partner": 123, + "email": "user_0@example.com", + "custom_fields": {}, + "job_title": "", + "last_modify_date": "2025-01-01T00:00:00Z", + "groups": [], + "user_permissions": [] + } + }, + "deps": [ + { + "model": "account.partner", + "pk": 123, + "fields": { + "name": "Partner 0", + "parent": null, + "is_un": false, + "lft": 1, + "rght": 2, + "tree_id": 2, + "level": 0, + "allowed_business_areas": [] + } + } + ] + } +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_c6r4_payment-plans_911e9fb2-a41a-4d07-97c2-29722c9d749a_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_-c5f_payment-plans_771cb14c-11c2-49b0-a3f3-0877b42c7b46_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 78% rename from tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_c6r4_payment-plans_911e9fb2-a41a-4d07-97c2-29722c9d749a_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_-c5f_payment-plans_771cb14c-11c2-49b0-a3f3-0877b42c7b46_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 502f795d46e..9a9b6ff2afa 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_c6r4_payment-plans_911e9fb2-a41a-4d07-97c2-29722c9d749a_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_-c5f_payment-plans_771cb14c-11c2-49b0-a3f3-0877b42c7b46_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,19 +8,19 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1535" + "Content-Length": "1629" }, "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/c6r4/payment-plans/911e9fb2-a41a-4d07-97c2-29722c9d749a/payments/?limit=50&offset=50", + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/-c5f/payment-plans/771cb14c-11c2-49b0-a3f3-0877b42c7b46/payments/?limit=50&offset=50", "previous": null, "results": [ { - "id": "f533f1fa-fbb4-4719-a515-6c99d493fe57", + "id": "8b12a3c8-b6d4-4567-b514-b1b8bc8f1e89", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "911e9fb2-a41a-4d07-97c2-29722c9d749a", + "parent_id": "771cb14c-11c2-49b0-a3f3-0877b42c7b46", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", - "household_unicef_id": "HH-25-0000.0003", + "household_id": "1b074723-d6ac-4a0a-8cf9-272e670e1118", + "household_unicef_id": "HH-25-0000.0039", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -28,6 +28,8 @@ "hoh_phone_no_alternative": "None", "snapshot_collector_full_name": null, "snapshot_alternate_collector_full_name": null, + "snapshot_collector_full_name_latin": null, + "snapshot_alternate_collector_full_name_latin": null, "snapshot_alternate_collector_id": null, "fsp_name": "", "entitlement_quantity": null, @@ -43,7 +45,7 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "collector_id": "395254a4-2c28-431d-959c-cc15eba5131a", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { @@ -59,7 +61,7 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "c6r4", + "program_code": "-c5f", "collector_type_display": "Primary collector" } ] diff --git a/tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_c6r4_payment-plans_911e9fb2-a41a-4d07-97c2-29722c9d749a_payments_f533f1fa-fbb4-4719-a515-6c99d493fe57_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_-c5f_payment-plans_771cb14c-11c2-49b0-a3f3-0877b42c7b46_payments_8b12a3c8-b6d4-4567-b514-b1b8bc8f1e89_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 85% rename from tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_c6r4_payment-plans_911e9fb2-a41a-4d07-97c2-29722c9d749a_payments_f533f1fa-fbb4-4719-a515-6c99d493fe57_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_-c5f_payment-plans_771cb14c-11c2-49b0-a3f3-0877b42c7b46_payments_8b12a3c8-b6d4-4567-b514-b1b8bc8f1e89_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 4a56949f7c0..484e9718414 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_c6r4_payment-plans_911e9fb2-a41a-4d07-97c2-29722c9d749a_payments_f533f1fa-fbb4-4719-a515-6c99d493fe57_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_payments/_api_rest_business-areas_business-area-0_programs_-c5f_payment-plans_771cb14c-11c2-49b0-a3f3-0877b42c7b46_payments_8b12a3c8-b6d4-4567-b514-b1b8bc8f1e89_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,15 +8,15 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "10386" + "Content-Length": "10600" }, "data": { - "id": "f533f1fa-fbb4-4719-a515-6c99d493fe57", + "id": "8b12a3c8-b6d4-4567-b514-b1b8bc8f1e89", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "911e9fb2-a41a-4d07-97c2-29722c9d749a", + "parent_id": "771cb14c-11c2-49b0-a3f3-0877b42c7b46", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", - "household_unicef_id": "HH-25-0000.0003", + "household_id": "1b074723-d6ac-4a0a-8cf9-272e670e1118", + "household_unicef_id": "HH-25-0000.0039", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -24,6 +24,8 @@ "hoh_phone_no_alternative": "None", "snapshot_collector_full_name": null, "snapshot_alternate_collector_full_name": null, + "snapshot_collector_full_name_latin": null, + "snapshot_alternate_collector_full_name_latin": null, "snapshot_alternate_collector_id": null, "fsp_name": "", "entitlement_quantity": null, @@ -39,7 +41,7 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "collector_id": "395254a4-2c28-431d-959c-cc15eba5131a", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { @@ -55,10 +57,10 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "c6r4", + "program_code": "-c5f", "collector_type_display": "Primary collector", "parent": { - "id": "911e9fb2-a41a-4d07-97c2-29722c9d749a", + "id": "771cb14c-11c2-49b0-a3f3-0877b42c7b46", "unicef_id": "PP-BA0000-25-00000001", "name": null, "status": "OPEN", @@ -77,8 +79,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "program": { - "id": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", - "code": "c6r4", + "id": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", + "code": "-c5f", "name": "Program 0", "status": "ACTIVE", "screen_beneficiary": false @@ -89,7 +91,7 @@ "start_date": null, "end_date": null, "program_cycle": { - "id": "58455199-badf-4828-a15a-aaad78b846f7", + "id": "c2b2a135-3570-4ba2-aa11-d4546de354b2", "title": "Programme Cycle 0" }, "has_payment_list_export_file": false, @@ -100,7 +102,7 @@ "delivery_mechanism": null, "volume_by_delivery_mechanism": [ { - "id": "911e9fb2-a41a-4d07-97c2-29722c9d749a", + "id": "771cb14c-11c2-49b0-a3f3-0877b42c7b46", "delivery_mechanism": null, "volume": null, "volume_usd": null @@ -180,18 +182,19 @@ "funds_commitments": null, "available_funds_commitments": [], "payment_verification_plans": [], - "admin_url": "/api/unicorn/payment/paymentplan/911e9fb2-a41a-4d07-97c2-29722c9d749a/change/", + "admin_url": "/api/unicorn/payment/paymentplan/771cb14c-11c2-49b0-a3f3-0877b42c7b46/change/", "abort_comment": "", "flat_amount_value": null }, - "admin_url": "/api/unicorn/payment/payment/f533f1fa-fbb4-4719-a515-6c99d493fe57/change/", + "admin_url": "/api/unicorn/payment/payment/8b12a3c8-b6d4-4567-b514-b1b8bc8f1e89/change/", "source_payment": null, "household": { - "id": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", - "unicef_id": "HH-25-0000.0003", + "id": "1b074723-d6ac-4a0a-8cf9-272e670e1118", + "unicef_id": "HH-25-0000.0039", "head_of_household": { - "id": "6c26b8a6-10a8-46db-b482-1701c9ed805e", - "full_name": "Person 0" + "id": "395254a4-2c28-431d-959c-cc15eba5131a", + "full_name": "Person 0", + "full_name_latin": null }, "admin1": null, "admin2": null, @@ -207,14 +210,14 @@ "sanction_list_confirmed_match": false, "has_duplicates": false, "registration_data_import": { - "id": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", + "id": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "8c063b49-ddca-441a-bdc3-2f08a68bc5f1", + "id": "1b82f679-fc02-4da1-a239-eee6a4da7a05", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -227,8 +230,8 @@ "admin_area_title": "", "active_individuals_count": 1, "geopoint": null, - "import_id": "HH-25-0000.0003", - "admin_url": "/api/unicorn/household/household/8031bdc0-34c9-469e-b9bb-5605bafe78c6/change/", + "import_id": "HH-25-0000.0039", + "admin_url": "/api/unicorn/household/household/1b074723-d6ac-4a0a-8cf9-272e670e1118/change/", "male_children_count": null, "female_children_count": null, "children_disabled_count": null, @@ -287,10 +290,10 @@ "consent_sharing": [], "roles_in_household": [ { - "id": "1d3f6555-52e3-4af4-91a9-a08534a85a46", + "id": "e43041c7-fd82-40aa-afc9-84d4bfbf3854", "individual": { - "id": "6c26b8a6-10a8-46db-b482-1701c9ed805e", - "unicef_id": "IND-25-0000.0003" + "id": "395254a4-2c28-431d-959c-cc15eba5131a", + "unicef_id": "IND-25-0000.0084" }, "role": "PRIMARY" } @@ -298,12 +301,16 @@ }, "delivery_mechanism": null, "collector": { - "id": "6c26b8a6-10a8-46db-b482-1701c9ed805e", - "unicef_id": "IND-25-0000.0003", + "id": "395254a4-2c28-431d-959c-cc15eba5131a", + "unicef_id": "IND-25-0000.0084", "full_name": "Person 0", "given_name": "", "middle_name": "", "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, "sex": "MALE", "age": 35, "birth_date": "1990-01-01", @@ -312,8 +319,8 @@ "work_status": "NOT_PROVIDED", "pregnant": null, "household": { - "id": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", - "unicef_id": "HH-25-0000.0003", + "id": "1b074723-d6ac-4a0a-8cf9-272e670e1118", + "unicef_id": "HH-25-0000.0039", "admin1": null, "admin2": null, "admin3": null, @@ -340,20 +347,20 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.0003", - "program_code": "c6r4" + "import_id": "HH-25-0000.0039", + "program_code": "-c5f" }, "role": "PRIMARY", "relationship": "", "registration_data_import": { - "id": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", + "id": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "8c063b49-ddca-441a-bdc3-2f08a68bc5f1", + "id": "1b82f679-fc02-4da1-a239-eee6a4da7a05", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -361,15 +368,15 @@ }, "data_source": "XLS" }, - "import_id": "IND-25-0000.0003", - "admin_url": "/api/unicorn/household/individual/6c26b8a6-10a8-46db-b482-1701c9ed805e/change/", + "import_id": "IND-25-0000.0084", + "admin_url": "/api/unicorn/household/individual/395254a4-2c28-431d-959c-cc15eba5131a/change/", "preferred_language": null, "roles_in_households": [ { - "id": "1d3f6555-52e3-4af4-91a9-a08534a85a46", + "id": "e43041c7-fd82-40aa-afc9-84d4bfbf3854", "household": { - "id": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", - "unicef_id": "HH-25-0000.0003", + "id": "1b074723-d6ac-4a0a-8cf9-272e670e1118", + "unicef_id": "HH-25-0000.0039", "admin1": null, "admin2": null, "admin3": null, @@ -396,8 +403,8 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.0003", - "program_code": "c6r4" + "import_id": "HH-25-0000.0039", + "program_code": "-c5f" }, "role": "PRIMARY" } diff --git a/tests/unit/api_contract/_api_checker/test_payments/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/business_area.fixture.json index afa6edbba9d..7b4bf9b333a 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/business_area.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/business_area.fixture.json @@ -2,7 +2,7 @@ "business_area": { "master": { "model": "core.businessarea", - "pk": "49794f4c-cd8b-408c-a294-163b86dac92e", + "pk": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_payments/household.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/household.fixture.json index e2c2c55401e..1b7c519f3b4 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/household.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/household.fixture.json @@ -2,7 +2,7 @@ "household": { "master": { "model": "household.household", - "pk": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", + "pk": "1b074723-d6ac-4a0a-8cf9-272e670e1118", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -11,11 +11,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "HH-25-0000.0003", + "unicef_id": "HH-25-0000.0039", "internal_data": {}, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", - "registration_data_import": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", + "registration_data_import": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -25,7 +25,8 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "head_of_household": "395254a4-2c28-431d-959c-cc15eba5131a", + "facility": null, "consent_sign": "", "consent": null, "consent_sharing": "", @@ -70,6 +71,7 @@ "currency": null, "unhcr_id": "", "detail_id": null, + "originating_id": null, "start": null, "registration_method": "", "family_id": null, @@ -102,7 +104,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "49794f4c-cd8b-408c-a294-163b86dac92e", + "pk": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -143,19 +145,19 @@ }, { "model": "program.program", - "pk": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "pk": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "data_collecting_type": 2, - "beneficiary_group": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", + "data_collecting_type": 55, + "beneficiary_group": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "name": "Program 0", + "code": "-c5f", "status": "ACTIVE", - "code": "c6r4", "description": "", "start_date": "2025-01-01", "end_date": "2026-01-01", @@ -181,7 +183,7 @@ }, { "model": "core.datacollectingtype", - "pk": 2, + "pk": 55, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -196,14 +198,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 2 + 55 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", + "pk": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -217,7 +219,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", + "pk": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -225,10 +227,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "8c063b49-ddca-441a-bdc3-2f08a68bc5f1", + "imported_by": "1b82f679-fc02-4da1-a239-eee6a4da7a05", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -254,7 +256,7 @@ }, { "model": "account.user", - "pk": "8c063b49-ddca-441a-bdc3-2f08a68bc5f1", + "pk": "1b82f679-fc02-4da1-a239-eee6a4da7a05", "fields": { "password": "", "last_login": null, @@ -268,7 +270,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 8, + "partner": 131, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -279,7 +281,7 @@ }, { "model": "account.partner", - "pk": 8, + "pk": 131, "fields": { "name": "Partner 1", "parent": null, @@ -293,7 +295,7 @@ }, { "model": "household.individual", - "pk": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "pk": "395254a4-2c28-431d-959c-cc15eba5131a", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -302,12 +304,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.0003", + "unicef_id": "IND-25-0000.0084", "internal_data": {}, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", - "registration_data_import": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", - "household": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", + "registration_data_import": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", + "household": "1b074723-d6ac-4a0a-8cf9-272e670e1118", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -316,6 +318,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -367,6 +373,7 @@ "sanction_list_possible_match": false, "sanction_list_confirmed_match": false, "detail_id": null, + "originating_id": null, "program_registration_id": null, "age_at_registration": null, "origin_unicef_id": null, @@ -378,4 +385,4 @@ } ] } -} +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_payments/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/household_role.fixture.json index e975e390f76..b57bcbba9fd 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/household_role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/household_role.fixture.json @@ -2,7 +2,7 @@ "household_role": { "master": { "model": "household.individualroleinhousehold", - "pk": "1d3f6555-52e3-4af4-91a9-a08534a85a46", + "pk": "e43041c7-fd82-40aa-afc9-84d4bfbf3854", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -10,8 +10,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, - "individual": "6c26b8a6-10a8-46db-b482-1701c9ed805e", - "household": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", + "individual": "395254a4-2c28-431d-959c-cc15eba5131a", + "household": "1b074723-d6ac-4a0a-8cf9-272e670e1118", "role": "PRIMARY", "copied_from": null } @@ -19,7 +19,7 @@ "deps": [ { "model": "household.individual", - "pk": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "pk": "395254a4-2c28-431d-959c-cc15eba5131a", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -28,12 +28,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "unicef_id": "IND-25-0000.0003", + "unicef_id": "IND-25-0000.0084", "internal_data": {}, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", - "registration_data_import": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", - "household": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", + "registration_data_import": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", + "household": "1b074723-d6ac-4a0a-8cf9-272e670e1118", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -42,6 +42,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -93,6 +97,7 @@ "sanction_list_possible_match": false, "sanction_list_confirmed_match": false, "detail_id": null, + "originating_id": null, "program_registration_id": null, "age_at_registration": null, "origin_unicef_id": null, @@ -104,7 +109,7 @@ }, { "model": "core.businessarea", - "pk": "49794f4c-cd8b-408c-a294-163b86dac92e", + "pk": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -145,19 +150,19 @@ }, { "model": "program.program", - "pk": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "pk": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "data_collecting_type": 2, - "beneficiary_group": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", + "data_collecting_type": 55, + "beneficiary_group": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "name": "Program 0", + "code": "-c5f", "status": "ACTIVE", - "code": "c6r4", "description": "", "start_date": "2025-01-01", "end_date": "2026-01-01", @@ -183,7 +188,7 @@ }, { "model": "core.datacollectingtype", - "pk": 2, + "pk": 55, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -198,14 +203,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 2 + 55 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", + "pk": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -219,7 +224,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", + "pk": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -227,10 +232,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "8c063b49-ddca-441a-bdc3-2f08a68bc5f1", + "imported_by": "1b82f679-fc02-4da1-a239-eee6a4da7a05", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -256,7 +261,7 @@ }, { "model": "account.user", - "pk": "8c063b49-ddca-441a-bdc3-2f08a68bc5f1", + "pk": "1b82f679-fc02-4da1-a239-eee6a4da7a05", "fields": { "password": "", "last_login": null, @@ -270,7 +275,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 8, + "partner": 131, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -281,7 +286,7 @@ }, { "model": "account.partner", - "pk": 8, + "pk": 131, "fields": { "name": "Partner 1", "parent": null, @@ -295,7 +300,7 @@ }, { "model": "household.household", - "pk": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", + "pk": "1b074723-d6ac-4a0a-8cf9-272e670e1118", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -304,11 +309,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "unicef_id": "HH-25-0000.0003", + "unicef_id": "HH-25-0000.0039", "internal_data": {}, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", - "registration_data_import": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", + "registration_data_import": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -318,7 +323,8 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "head_of_household": "395254a4-2c28-431d-959c-cc15eba5131a", + "facility": null, "consent_sign": "", "consent": null, "consent_sharing": "", @@ -363,6 +369,7 @@ "currency": null, "unhcr_id": "", "detail_id": null, + "originating_id": null, "start": null, "registration_method": "", "family_id": null, @@ -394,4 +401,4 @@ } ] } -} +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_payments/payment.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/payment.fixture.json index 201d30b366f..23e6d718e87 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/payment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/payment.fixture.json @@ -2,29 +2,30 @@ "payment": { "master": { "model": "payment.payment", - "pk": "f533f1fa-fbb4-4719-a515-6c99d493fe57", + "pk": "8b12a3c8-b6d4-4567-b514-b1b8bc8f1e89", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "unicef_id": "RCPT-BA0000-25-0.000.001", - "signature_hash": "7f081c79d2e02d3ddb7f33ec44aa34f7c6ffabd0", + "signature_hash": "a4c69d0f67c88d360493f743ae1f9d9b289f82e7", "internal_data": {}, - "parent": "911e9fb2-a41a-4d07-97c2-29722c9d749a", + "parent": "771cb14c-11c2-49b0-a3f3-0877b42c7b46", "parent_split": null, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "program": null, - "household": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", + "household": "1b074723-d6ac-4a0a-8cf9-272e670e1118", "head_of_household": null, "delivery_type": null, "financial_service_provider": null, - "collector": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "collector": "395254a4-2c28-431d-959c-cc15eba5131a", + "collector_type": "PRIMARY", "source_payment": null, "is_follow_up": false, "status": "Pending", "status_date": "2025-01-01T00:00:00Z", - "currency_old": "PLN", - "currency": 1, + "currency_old": null, + "currency": 111, "entitlement_quantity": null, "entitlement_quantity_usd": null, "entitlement_date": null, @@ -45,22 +46,14 @@ "fsp_auth_code": null, "extras": {}, "vulnerability_score": null, - "is_cash_assist": false + "is_cash_assist": false, + "sent_to_fsp_date": null } }, "deps": [ - { - "model": "core.currency", - "pk": 1, - "fields": { - "code": "PLN", - "name": "Polish Zloty", - "is_crypto": false - } - }, { "model": "payment.paymentplan", - "pk": "911e9fb2-a41a-4d07-97c2-29722c9d749a", + "pk": "771cb14c-11c2-49b0-a3f3-0877b42c7b46", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -68,8 +61,8 @@ "version": 1735688653315202, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program_cycle": "58455199-badf-4828-a15a-aaad78b846f7", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program_cycle": "c2b2a135-3570-4ba2-aa11-d4546de354b2", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -79,12 +72,13 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "2822d222-e4f7-4ab9-a700-9f9caf540df1", + "created_by": "9ee09e00-175f-4e78-b49e-e57753a61af0", "source_payment_plan": null, "storage_file": null, "name": null, "start_date": null, "end_date": null, + "currency_old": null, "currency": null, "dispersion_start_date": "2025-01-01", "dispersion_end_date": "2025-01-31", @@ -93,11 +87,14 @@ "vulnerability_score_min": null, "vulnerability_score_max": null, "abort_comment": "", + "flat_amount_value": null, "status": "OPEN", "background_action_status": null, "build_status": null, "built_at": null, "exchange_rate": null, + "custom_exchange_rate": false, + "custom_exchange_rate_set_by": null, "female_children_count": 0, "male_children_count": 0, "female_adults_count": 0, @@ -125,7 +122,7 @@ }, { "model": "core.businessarea", - "pk": "49794f4c-cd8b-408c-a294-163b86dac92e", + "pk": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -166,14 +163,14 @@ }, { "model": "program.programcycle", - "pk": "58455199-badf-4828-a15a-aaad78b846f7", + "pk": "c2b2a135-3570-4ba2-aa11-d4546de354b2", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315201, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -182,19 +179,19 @@ }, { "model": "program.program", - "pk": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "pk": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "data_collecting_type": 2, - "beneficiary_group": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", + "data_collecting_type": 55, + "beneficiary_group": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "name": "Program 0", + "code": "-c5f", "status": "ACTIVE", - "code": "c6r4", "description": "", "start_date": "2025-01-01", "end_date": "2026-01-01", @@ -220,7 +217,7 @@ }, { "model": "core.datacollectingtype", - "pk": 2, + "pk": 55, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -235,14 +232,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 2 + 55 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", + "pk": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -256,7 +253,7 @@ }, { "model": "account.user", - "pk": "2822d222-e4f7-4ab9-a700-9f9caf540df1", + "pk": "9ee09e00-175f-4e78-b49e-e57753a61af0", "fields": { "password": "", "last_login": null, @@ -270,7 +267,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 6, + "partner": 129, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -281,7 +278,7 @@ }, { "model": "account.partner", - "pk": 6, + "pk": 129, "fields": { "name": "Partner 0", "parent": null, @@ -295,7 +292,7 @@ }, { "model": "household.household", - "pk": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", + "pk": "1b074723-d6ac-4a0a-8cf9-272e670e1118", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -304,11 +301,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "unicef_id": "HH-25-0000.0003", + "unicef_id": "HH-25-0000.0039", "internal_data": {}, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", - "registration_data_import": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", + "registration_data_import": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -318,7 +315,8 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "head_of_household": "395254a4-2c28-431d-959c-cc15eba5131a", + "facility": null, "consent_sign": "", "consent": null, "consent_sharing": "", @@ -363,6 +361,7 @@ "currency": null, "unhcr_id": "", "detail_id": null, + "originating_id": null, "start": null, "registration_method": "", "family_id": null, @@ -394,7 +393,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", + "pk": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -402,10 +401,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "8c063b49-ddca-441a-bdc3-2f08a68bc5f1", + "imported_by": "1b82f679-fc02-4da1-a239-eee6a4da7a05", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -431,7 +430,7 @@ }, { "model": "account.user", - "pk": "8c063b49-ddca-441a-bdc3-2f08a68bc5f1", + "pk": "1b82f679-fc02-4da1-a239-eee6a4da7a05", "fields": { "password": "", "last_login": null, @@ -445,7 +444,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 8, + "partner": 131, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -456,7 +455,7 @@ }, { "model": "account.partner", - "pk": 8, + "pk": 131, "fields": { "name": "Partner 1", "parent": null, @@ -470,7 +469,7 @@ }, { "model": "household.individual", - "pk": "6c26b8a6-10a8-46db-b482-1701c9ed805e", + "pk": "395254a4-2c28-431d-959c-cc15eba5131a", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -479,12 +478,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "IND-25-0000.0003", + "unicef_id": "IND-25-0000.0084", "internal_data": {}, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", - "registration_data_import": "e32990f3-a3d0-4893-be2b-d9d7f139f3a9", - "household": "8031bdc0-34c9-469e-b9bb-5605bafe78c6", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", + "registration_data_import": "08ddddc5-e457-4855-98a9-57fe57cc7ff1", + "household": "1b074723-d6ac-4a0a-8cf9-272e670e1118", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -493,6 +492,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -544,6 +547,7 @@ "sanction_list_possible_match": false, "sanction_list_confirmed_match": false, "detail_id": null, + "originating_id": null, "program_registration_id": null, "age_at_registration": null, "origin_unicef_id": null, @@ -552,7 +556,16 @@ "identification_key": null, "vector_column": "'0':3 'none':1 'person':2" } + }, + { + "model": "core.currency", + "pk": 111, + "fields": { + "code": "PLN", + "name": "Polish z\u0142oty", + "is_crypto": false + } } ] } -} +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_payments/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/payment_plan.fixture.json index 5194b602c6c..b3bb5d821b5 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/payment_plan.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/payment_plan.fixture.json @@ -2,7 +2,7 @@ "payment_plan": { "master": { "model": "payment.paymentplan", - "pk": "911e9fb2-a41a-4d07-97c2-29722c9d749a", + "pk": "771cb14c-11c2-49b0-a3f3-0877b42c7b46", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -10,8 +10,8 @@ "version": 1735688653315201, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "program_cycle": "58455199-badf-4828-a15a-aaad78b846f7", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "program_cycle": "c2b2a135-3570-4ba2-aa11-d4546de354b2", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -21,12 +21,13 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "2822d222-e4f7-4ab9-a700-9f9caf540df1", + "created_by": "9ee09e00-175f-4e78-b49e-e57753a61af0", "source_payment_plan": null, "storage_file": null, "name": null, "start_date": null, "end_date": null, + "currency_old": null, "currency": null, "dispersion_start_date": "2025-01-01", "dispersion_end_date": "2025-01-31", @@ -35,11 +36,14 @@ "vulnerability_score_min": null, "vulnerability_score_max": null, "abort_comment": "", + "flat_amount_value": null, "status": "OPEN", "background_action_status": null, "build_status": null, "built_at": null, "exchange_rate": null, + "custom_exchange_rate": false, + "custom_exchange_rate_set_by": null, "female_children_count": 0, "male_children_count": 0, "female_adults_count": 0, @@ -68,7 +72,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "49794f4c-cd8b-408c-a294-163b86dac92e", + "pk": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -109,14 +113,14 @@ }, { "model": "program.programcycle", - "pk": "58455199-badf-4828-a15a-aaad78b846f7", + "pk": "c2b2a135-3570-4ba2-aa11-d4546de354b2", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "program": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -125,19 +129,19 @@ }, { "model": "program.program", - "pk": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "pk": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "data_collecting_type": 2, - "beneficiary_group": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", + "data_collecting_type": 55, + "beneficiary_group": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "name": "Program 0", + "code": "-c5f", "status": "ACTIVE", - "code": "c6r4", "description": "", "start_date": "2025-01-01", "end_date": "2026-01-01", @@ -163,7 +167,7 @@ }, { "model": "core.datacollectingtype", - "pk": 2, + "pk": 55, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -178,14 +182,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 2 + 55 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", + "pk": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -199,7 +203,7 @@ }, { "model": "account.user", - "pk": "2822d222-e4f7-4ab9-a700-9f9caf540df1", + "pk": "9ee09e00-175f-4e78-b49e-e57753a61af0", "fields": { "password": "", "last_login": null, @@ -213,7 +217,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 6, + "partner": 129, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -224,7 +228,7 @@ }, { "model": "account.partner", - "pk": 6, + "pk": 129, "fields": { "name": "Partner 0", "parent": null, @@ -238,4 +242,4 @@ } ] } -} +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_payments/program.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/program.fixture.json index 29c66ec9afb..7a9554ab755 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/program.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/program.fixture.json @@ -2,19 +2,19 @@ "program": { "master": { "model": "program.program", - "pk": "bd0ed8e5-adf7-4716-bd63-cc25bb150852", + "pk": "f2a976e0-7e73-40b7-b380-a87109e8f5e7", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "data_collecting_type": 2, - "beneficiary_group": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", + "data_collecting_type": 55, + "beneficiary_group": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "name": "Program 0", + "code": "-c5f", "status": "ACTIVE", - "code": "c6r4", "description": "", "start_date": "2025-01-01", "end_date": "2026-01-01", @@ -41,7 +41,7 @@ "deps": [ { "model": "core.datacollectingtype", - "pk": 2, + "pk": 55, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -56,14 +56,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 2 + 55 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "7c18dd81-aa40-418c-9e30-9c6cb17d5220", + "pk": "b15acdf8-a717-44fa-abe1-282f5c6bb2e0", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -77,7 +77,7 @@ }, { "model": "core.businessarea", - "pk": "49794f4c-cd8b-408c-a294-163b86dac92e", + "pk": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -118,4 +118,4 @@ } ] } -} +} \ No newline at end of file diff --git a/tests/unit/api_contract/_api_checker/test_payments/role.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/role.fixture.json index 2531b358803..33b7818f60a 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/role.fixture.json @@ -2,12 +2,12 @@ "role": { "master": { "model": "account.role", - "pk": "0867c3cc-fb56-48b7-bcbf-9f8f4567c86d", + "pk": "c7ea1f54-a21f-42c6-b3bc-d045f9657b7c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", "is_visible_on_ui": true, "is_available_for_partner": true } diff --git a/tests/unit/api_contract/_api_checker/test_payments/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/role_assignment.fixture.json index 25979ea3c8d..e55a7a9999f 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/role_assignment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/role_assignment.fixture.json @@ -2,14 +2,14 @@ "role_assignment": { "master": { "model": "account.roleassignment", - "pk": "c76ba4de-a5e3-457c-8ef7-5089a1134f46", + "pk": "dfdf7766-622c-40e8-b90d-c425c5dd5041", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", - "business_area": "49794f4c-cd8b-408c-a294-163b86dac92e", - "user": "2822d222-e4f7-4ab9-a700-9f9caf540df1", + "business_area": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", + "user": "9ee09e00-175f-4e78-b49e-e57753a61af0", "partner": null, - "role": "0867c3cc-fb56-48b7-bcbf-9f8f4567c86d", + "role": "c7ea1f54-a21f-42c6-b3bc-d045f9657b7c", "program": null, "expiry_date": null, "group": null @@ -18,7 +18,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "49794f4c-cd8b-408c-a294-163b86dac92e", + "pk": "ef8d64b6-987e-4cf8-b9fe-99717a1eee7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -59,7 +59,7 @@ }, { "model": "account.user", - "pk": "2822d222-e4f7-4ab9-a700-9f9caf540df1", + "pk": "9ee09e00-175f-4e78-b49e-e57753a61af0", "fields": { "password": "", "last_login": null, @@ -73,7 +73,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 6, + "partner": 129, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -84,7 +84,7 @@ }, { "model": "account.partner", - "pk": 6, + "pk": 129, "fields": { "name": "Partner 0", "parent": null, @@ -98,12 +98,12 @@ }, { "model": "account.role", - "pk": "0867c3cc-fb56-48b7-bcbf-9f8f4567c86d", + "pk": "c7ea1f54-a21f-42c6-b3bc-d045f9657b7c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "name": "Role 0", - "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", + "permissions": "[\"RDI_VIEW_LIST\", \"RDI_VIEW_DETAILS\", \"RDI_IMPORT_DATA\", \"RDI_RERUN_DEDUPE\", \"RDI_MERGE_IMPORT\", \"RDI_REFUSE_IMPORT\", \"RDI_WEBHOOK_DEDUPLICATION\", \"GENERIC_IMPORT_DATA\", \"POPULATION_VIEW_HOUSEHOLDS_LIST\", \"POPULATION_VIEW_HOUSEHOLDS_DETAILS\", \"POPULATION_VIEW_INDIVIDUALS_LIST\", \"POPULATION_VIEW_INDIVIDUALS_DETAILS\", \"POPULATION_VIEW_INDIVIDUAL_DELIVERY_MECHANISMS_SECTION\", \"PROGRAMME_VIEW_LIST_AND_DETAILS\", \"PROGRAMME_MANAGEMENT_VIEW\", \"PROGRAMME_VIEW_PAYMENT_RECORD_DETAILS\", \"PROGRAMME_CREATE\", \"PROGRAMME_UPDATE\", \"PROGRAMME_REMOVE\", \"PROGRAMME_ACTIVATE\", \"PROGRAMME_FINISH\", \"PROGRAMME_DUPLICATE\", \"TARGETING_VIEW_LIST\", \"TARGETING_VIEW_DETAILS\", \"TARGETING_CREATE\", \"TARGETING_UPDATE\", \"TARGETING_DUPLICATE\", \"TARGETING_REMOVE\", \"TARGETING_LOCK\", \"TARGETING_UNLOCK\", \"TARGETING_SEND\", \"PAYMENT_VIEW_LIST_MANAGERIAL\", \"PAYMENT_VIEW_LIST_MANAGERIAL_RELEASED\", \"PAYMENT_VERIFICATION_VIEW_LIST\", \"PAYMENT_VERIFICATION_VIEW_DETAILS\", \"PAYMENT_VERIFICATION_CREATE\", \"PAYMENT_VERIFICATION_UPDATE\", \"PAYMENT_VERIFICATION_ACTIVATE\", \"PAYMENT_VERIFICATION_DISCARD\", \"PAYMENT_VERIFICATION_FINISH\", \"PAYMENT_VERIFICATION_EXPORT\", \"PAYMENT_VERIFICATION_IMPORT\", \"PAYMENT_VERIFICATION_VERIFY\", \"PAYMENT_VERIFICATION_VIEW_PAYMENT_RECORD_DETAILS\", \"PAYMENT_VERIFICATION_DELETE\", \"PAYMENT_VERIFICATION_INVALID\", \"PAYMENT_VERIFICATION_MARK_AS_FAILED\", \"PM_VIEW_LIST\", \"PM_CREATE\", \"PM_VIEW_DETAILS\", \"PM_IMPORT_XLSX_WITH_ENTITLEMENTS\", \"PM_APPLY_RULE_ENGINE_FORMULA_WITH_ENTITLEMENTS\", \"PM_SPLIT\", \"PM_VIEW_PAYMENT_LIST\", \"PM_LOCK_AND_UNLOCK\", \"PM_LOCK_AND_UNLOCK_FSP\", \"PM_SEND_FOR_APPROVAL\", \"PM_EXCLUDE_BENEFICIARIES_FROM_FOLLOW_UP_PP\", \"PM_ACCEPTANCE_PROCESS_APPROVE\", \"PM_ACCEPTANCE_PROCESS_AUTHORIZE\", \"PM_ACCEPTANCE_PROCESS_FINANCIAL_REVIEW\", \"PM_IMPORT_XLSX_WITH_RECONCILIATION\", \"PM_EXPORT_XLSX_FOR_FSP\", \"PM_DOWNLOAD_XLSX_FOR_FSP\", \"PM_MARK_PAYMENT_AS_FAILED\", \"PM_EXPORT_PDF_SUMMARY\", \"PM_SEND_TO_PAYMENT_GATEWAY\", \"PM_VIEW_FSP_AUTH_CODE\", \"PM_DOWNLOAD_FSP_AUTH_CODE\", \"PM_SEND_XLSX_PASSWORD\", \"PM_ASSIGN_FUNDS_COMMITMENTS\", \"PM_SYNC_PAYMENT_PLAN_WITH_PG\", \"PM_SYNC_PAYMENT_WITH_PG\", \"PM_CLOSE_FINISHED\", \"PM_ABORT\", \"PM_REACTIVATE_ABORT\", \"PM_CUSTOM_EXCHANGE_RATE\", \"PM_DOWNLOAD_SUPPORTING_DOCUMENT\", \"PM_UPLOAD_SUPPORTING_DOCUMENT\", \"PM_DELETE_SUPPORTING_DOCUMENT\", \"PM_ADMIN_FINANCIAL_SERVICE_PROVIDER_UPDATE\", \"PM_PROGRAMME_CYCLE_VIEW_LIST\", \"PM_PROGRAMME_CYCLE_VIEW_DETAILS\", \"PM_PROGRAMME_CYCLE_CREATE\", \"PM_PROGRAMME_CYCLE_UPDATE\", \"PM_PROGRAMME_CYCLE_DELETE\", \"RECEIVE_PARSED_WU_QCF\", \"RECEIVE_PP_OVERDUE_EMAIL\", \"USER_MANAGEMENT_VIEW_LIST\", \"DASHBOARD_VIEW_COUNTRY\", \"DASHBOARD_EXPORT\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_LIST_SENSITIVE\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_LIST_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_EXCLUDING_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_CREATOR\", \"GRIEVANCES_VIEW_DETAILS_SENSITIVE_AS_OWNER\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_HOUSEHOLD_DETAILS_AS_OWNER\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_CREATOR\", \"GRIEVANCES_VIEW_INDIVIDUALS_DETAILS_AS_OWNER\", \"GRIEVANCES_CREATE\", \"GRIEVANCES_UPDATE\", \"GRIEVANCES_UPDATE_AS_CREATOR\", \"GRIEVANCES_UPDATE_AS_OWNER\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_UPDATE_REQUESTED_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_ADD_NOTE\", \"GRIEVANCES_ADD_NOTE_AS_CREATOR\", \"GRIEVANCES_ADD_NOTE_AS_OWNER\", \"GRIEVANCES_SET_IN_PROGRESS\", \"GRIEVANCES_SET_IN_PROGRESS_AS_CREATOR\", \"GRIEVANCES_SET_IN_PROGRESS_AS_OWNER\", \"GRIEVANCES_SET_ON_HOLD\", \"GRIEVANCES_SET_ON_HOLD_AS_CREATOR\", \"GRIEVANCES_SET_ON_HOLD_AS_OWNER\", \"GRIEVANCES_SEND_FOR_APPROVAL\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_CREATOR\", \"GRIEVANCES_SEND_FOR_APPROVAL_AS_OWNER\", \"GRIEVANCES_SEND_BACK\", \"GRIEVANCES_SEND_BACK_AS_CREATOR\", \"GRIEVANCES_SEND_BACK_AS_OWNER\", \"GRIEVANCES_APPROVE_DATA_CHANGE\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_CREATOR\", \"GRIEVANCES_APPROVE_DATA_CHANGE_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_EXCLUDING_FEEDBACK_AS_OWNER\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_CREATOR\", \"GRIEVANCES_CLOSE_TICKET_FEEDBACK_AS_OWNER\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_CREATOR\", \"GRIEVANCES_APPROVE_FLAG_AND_DEDUPE_AS_OWNER\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_CREATOR\", \"GRIEVANCES_APPROVE_PAYMENT_VERIFICATION_AS_OWNER\", \"GRIEVANCE_ASSIGN\", \"GRIEVANCE_DOCUMENTS_UPLOAD\", \"GRIEVANCES_CROSS_AREA_FILTER\", \"GRIEVANCES_VIEW_BIOMETRIC_RESULTS\", \"GRIEVANCES_FEEDBACK_VIEW_CREATE\", \"GRIEVANCES_FEEDBACK_VIEW_LIST\", \"GRIEVANCES_FEEDBACK_VIEW_DETAILS\", \"GRIEVANCES_FEEDBACK_VIEW_UPDATE\", \"GRIEVANCES_FEEDBACK_MESSAGE_VIEW_CREATE\", \"PDU_VIEW_LIST_AND_DETAILS\", \"PDU_TEMPLATE_CREATE\", \"PDU_TEMPLATE_DOWNLOAD\", \"PDU_UPLOAD\", \"PDU_ONLINE_SAVE_DATA\", \"PDU_ONLINE_APPROVE\", \"PDU_ONLINE_MERGE\", \"ALL_VIEW_PII_DATA_ON_LISTS\", \"ACTIVITY_LOG_VIEW\", \"ACTIVITY_LOG_DOWNLOAD\", \"UPLOAD_STORAGE_FILE\", \"DOWNLOAD_STORAGE_FILE\", \"BENEFICIARY_GROUP_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_LIST\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_CREATE\", \"ACCOUNTABILITY_COMMUNICATION_MESSAGE_VIEW_DETAILS_AS_CREATOR\", \"ACCOUNTABILITY_SURVEY_VIEW_CREATE\", \"ACCOUNTABILITY_SURVEY_VIEW_LIST\", \"ACCOUNTABILITY_SURVEY_VIEW_DETAILS\", \"GEO_VIEW_LIST\", \"SEARCH_BUSINESS_AREAS\"]", "is_visible_on_ui": true, "is_available_for_partner": true } diff --git a/tests/unit/api_contract/_api_checker/test_payments/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_payments/superuser.fixture.json index 8c52bd6d1f2..e05016a5df7 100644 --- a/tests/unit/api_contract/_api_checker/test_payments/superuser.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments/superuser.fixture.json @@ -2,7 +2,7 @@ "superuser": { "master": { "model": "account.user", - "pk": "2822d222-e4f7-4ab9-a700-9f9caf540df1", + "pk": "9ee09e00-175f-4e78-b49e-e57753a61af0", "fields": { "password": "", "last_login": null, @@ -16,7 +16,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 6, + "partner": 129, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -28,7 +28,7 @@ "deps": [ { "model": "account.partner", - "pk": 6, + "pk": 129, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_payments_global/_api_rest_business-areas_business-area-0_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_payments_global/_api_rest_business-areas_business-area-0_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 9d348fbc605..e7dda8c91c3 100644 --- a/tests/unit/api_contract/_api_checker/test_payments_global/_api_rest_business-areas_business-area-0_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_payments_global/_api_rest_business-areas_business-area-0_payments_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,19 +8,19 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1470" + "Content-Length": "1564" }, "data": { "next": "http://testserver/api/rest/business-areas/business-area-0/payments/?limit=50&offset=50", "previous": null, "results": [ { - "id": "77c13689-b6a1-4164-b85c-56123649ff7f", + "id": "fa7e1173-dfcc-4135-848e-0152b5ef1bd9", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "1dcee178-f68f-4f17-af6e-f3689e807688", + "parent_id": "148a2b88-6a2c-4538-ab81-339cc82bf040", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "38fd5c3d-828c-4d4f-97fa-fd0a53eca856", - "household_unicef_id": "HH-25-0000.0684", + "household_id": "ae84aec1-7778-4da0-bdbb-07bb160e227c", + "household_unicef_id": "HH-25-0000.0041", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -28,6 +28,8 @@ "hoh_phone_no_alternative": "None", "snapshot_collector_full_name": null, "snapshot_alternate_collector_full_name": null, + "snapshot_collector_full_name_latin": null, + "snapshot_alternate_collector_full_name_latin": null, "snapshot_alternate_collector_id": null, "fsp_name": "", "entitlement_quantity": null, @@ -43,7 +45,7 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "dbd8a509-1e52-4e7c-ac0f-29ac8e8ccfef", + "collector_id": "27a31e52-de7d-4e45-99b5-6af30c4a796e", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { @@ -59,7 +61,7 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "2839", + "program_code": "f1k5", "collector_type_display": "Primary collector" } ] diff --git a/tests/unit/api_contract/_api_checker/test_payments_global/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_payments_global/business_area.fixture.json index c369c3b7760..1796aaaf8e9 100644 --- a/tests/unit/api_contract/_api_checker/test_payments_global/business_area.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments_global/business_area.fixture.json @@ -2,7 +2,7 @@ "business_area": { "master": { "model": "core.businessarea", - "pk": "9e49425f-c129-4bfc-aaaf-55797ef96469", + "pk": "ce090a0e-010c-4810-a74a-b22fe26a395c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_payments_global/payment.fixture.json b/tests/unit/api_contract/_api_checker/test_payments_global/payment.fixture.json index da3bb2d861e..90a121ec7e9 100644 --- a/tests/unit/api_contract/_api_checker/test_payments_global/payment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments_global/payment.fixture.json @@ -2,30 +2,30 @@ "payment": { "master": { "model": "payment.payment", - "pk": "77c13689-b6a1-4164-b85c-56123649ff7f", + "pk": "fa7e1173-dfcc-4135-848e-0152b5ef1bd9", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "unicef_id": "RCPT-BA0000-25-0.000.001", - "signature_hash": "c1e9613b7b457da8710be560e796c35ceb0312a9", + "signature_hash": "5299ede05665ec7dbd1b09060dab2126cef6a920", "internal_data": {}, - "parent": "1dcee178-f68f-4f17-af6e-f3689e807688", + "parent": "148a2b88-6a2c-4538-ab81-339cc82bf040", "parent_split": null, - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", - "program": "0148b962-6a7c-4aad-b4c0-6ccc2faa8277", - "household": "38fd5c3d-828c-4d4f-97fa-fd0a53eca856", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", + "program": "bccfe2f6-0944-4ead-9967-24a224de6a2f", + "household": "ae84aec1-7778-4da0-bdbb-07bb160e227c", "head_of_household": null, "delivery_type": null, "financial_service_provider": null, - "collector": "dbd8a509-1e52-4e7c-ac0f-29ac8e8ccfef", + "collector": "27a31e52-de7d-4e45-99b5-6af30c4a796e", "collector_type": "PRIMARY", "source_payment": null, "is_follow_up": false, "status": "Pending", "status_date": "2025-01-01T00:00:00Z", - "currency_old": "PLN", - "currency": 1, + "currency_old": null, + "currency": 111, "entitlement_quantity": null, "entitlement_quantity_usd": null, "entitlement_date": null, @@ -51,18 +51,9 @@ } }, "deps": [ - { - "model": "core.currency", - "pk": 1, - "fields": { - "code": "PLN", - "name": "Polish Zloty", - "is_crypto": false - } - }, { "model": "payment.paymentplan", - "pk": "1dcee178-f68f-4f17-af6e-f3689e807688", + "pk": "148a2b88-6a2c-4538-ab81-339cc82bf040", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -70,8 +61,8 @@ "version": 1735688653315201, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", - "program_cycle": "4066a3f8-2941-4541-afbb-cdc206f55583", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", + "program_cycle": "6acb73d5-b64f-4a5f-941f-05a6865cdf75", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -81,12 +72,13 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "048f0b0c-fd0a-4989-85a5-117b081d27fc", + "created_by": "ac3a3245-d4a8-4d9f-a196-e49ace5afaa8", "source_payment_plan": null, "storage_file": null, "name": null, "start_date": null, "end_date": null, + "currency_old": null, "currency": null, "dispersion_start_date": "2025-01-01", "dispersion_end_date": "2025-01-31", @@ -130,7 +122,7 @@ }, { "model": "core.businessarea", - "pk": "9e49425f-c129-4bfc-aaaf-55797ef96469", + "pk": "ce090a0e-010c-4810-a74a-b22fe26a395c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -171,14 +163,14 @@ }, { "model": "program.programcycle", - "pk": "4066a3f8-2941-4541-afbb-cdc206f55583", + "pk": "6acb73d5-b64f-4a5f-941f-05a6865cdf75", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "0148b962-6a7c-4aad-b4c0-6ccc2faa8277", + "program": "bccfe2f6-0944-4ead-9967-24a224de6a2f", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -187,18 +179,18 @@ }, { "model": "program.program", - "pk": "0148b962-6a7c-4aad-b4c0-6ccc2faa8277", + "pk": "bccfe2f6-0944-4ead-9967-24a224de6a2f", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "data_collecting_type": 444, - "beneficiary_group": "cac47b42-adec-48f8-b949-73ba321953ec", - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", + "data_collecting_type": 56, + "beneficiary_group": "c83df17c-3ddf-4ab9-8666-2f9a6b2d899a", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", "name": "Program 0", - "code": "2839", + "code": "f1k5", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -225,7 +217,7 @@ }, { "model": "core.datacollectingtype", - "pk": 444, + "pk": 56, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -240,14 +232,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 444 + 56 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "cac47b42-adec-48f8-b949-73ba321953ec", + "pk": "c83df17c-3ddf-4ab9-8666-2f9a6b2d899a", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -261,7 +253,7 @@ }, { "model": "account.user", - "pk": "048f0b0c-fd0a-4989-85a5-117b081d27fc", + "pk": "ac3a3245-d4a8-4d9f-a196-e49ace5afaa8", "fields": { "password": "", "last_login": null, @@ -275,7 +267,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 1320, + "partner": 132, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -286,7 +278,7 @@ }, { "model": "account.partner", - "pk": 1320, + "pk": 132, "fields": { "name": "Partner 0", "parent": null, @@ -300,7 +292,7 @@ }, { "model": "household.household", - "pk": "38fd5c3d-828c-4d4f-97fa-fd0a53eca856", + "pk": "ae84aec1-7778-4da0-bdbb-07bb160e227c", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -309,11 +301,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "HH-25-0000.0684", + "unicef_id": "HH-25-0000.0041", "internal_data": {}, - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", - "program": "0148b962-6a7c-4aad-b4c0-6ccc2faa8277", - "registration_data_import": "2ae1b402-c5cf-458d-9756-69ed627c2346", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", + "program": "bccfe2f6-0944-4ead-9967-24a224de6a2f", + "registration_data_import": "a66b1692-8751-4e0d-8b66-48454c2430da", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -323,7 +315,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "a7712b4b-d96f-4d69-8b9c-5536abf5fdc6", + "head_of_household": "40537185-d39e-4f20-82f5-530d32a9568d", "facility": null, "consent_sign": "", "consent": null, @@ -401,7 +393,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "2ae1b402-c5cf-458d-9756-69ed627c2346", + "pk": "a66b1692-8751-4e0d-8b66-48454c2430da", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -409,10 +401,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", - "program": "0148b962-6a7c-4aad-b4c0-6ccc2faa8277", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", + "program": "bccfe2f6-0944-4ead-9967-24a224de6a2f", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "e973ad7d-4cb0-42d9-9e1b-46547cd3f543", + "imported_by": "521cff0e-c87d-4626-b8bc-f3cc60a5e3b7", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -438,7 +430,7 @@ }, { "model": "account.user", - "pk": "e973ad7d-4cb0-42d9-9e1b-46547cd3f543", + "pk": "521cff0e-c87d-4626-b8bc-f3cc60a5e3b7", "fields": { "password": "", "last_login": null, @@ -452,7 +444,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 1322, + "partner": 134, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -463,7 +455,7 @@ }, { "model": "account.partner", - "pk": 1322, + "pk": 134, "fields": { "name": "Partner 1", "parent": null, @@ -477,7 +469,7 @@ }, { "model": "household.individual", - "pk": "a7712b4b-d96f-4d69-8b9c-5536abf5fdc6", + "pk": "40537185-d39e-4f20-82f5-530d32a9568d", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -486,12 +478,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.1305", + "unicef_id": "IND-25-0000.0086", "internal_data": {}, - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", - "program": "0148b962-6a7c-4aad-b4c0-6ccc2faa8277", - "registration_data_import": "2ae1b402-c5cf-458d-9756-69ed627c2346", - "household": "38fd5c3d-828c-4d4f-97fa-fd0a53eca856", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", + "program": "bccfe2f6-0944-4ead-9967-24a224de6a2f", + "registration_data_import": "a66b1692-8751-4e0d-8b66-48454c2430da", + "household": "ae84aec1-7778-4da0-bdbb-07bb160e227c", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -500,6 +492,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -563,7 +559,7 @@ }, { "model": "household.individual", - "pk": "dbd8a509-1e52-4e7c-ac0f-29ac8e8ccfef", + "pk": "27a31e52-de7d-4e45-99b5-6af30c4a796e", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -572,12 +568,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.1306", + "unicef_id": "IND-25-0000.0087", "internal_data": {}, - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", - "program": "0148b962-6a7c-4aad-b4c0-6ccc2faa8277", - "registration_data_import": "2ae1b402-c5cf-458d-9756-69ed627c2346", - "household": "38fd5c3d-828c-4d4f-97fa-fd0a53eca856", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", + "program": "bccfe2f6-0944-4ead-9967-24a224de6a2f", + "registration_data_import": "a66b1692-8751-4e0d-8b66-48454c2430da", + "household": "ae84aec1-7778-4da0-bdbb-07bb160e227c", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -586,6 +582,10 @@ "given_name": "", "middle_name": "", "family_name": "", + "full_name_latin": null, + "given_name_latin": null, + "middle_name_latin": null, + "family_name_latin": null, "sex": "MALE", "birth_date": "1990-01-01", "estimated_birth_date": false, @@ -646,6 +646,15 @@ "identification_key": null, "vector_column": "'1':3 'none':1 'person':2" } + }, + { + "model": "core.currency", + "pk": 111, + "fields": { + "code": "PLN", + "name": "Polish z\u0142oty", + "is_crypto": false + } } ] } diff --git a/tests/unit/api_contract/_api_checker/test_payments_global/program.fixture.json b/tests/unit/api_contract/_api_checker/test_payments_global/program.fixture.json index 28637b46710..b87ccc1337b 100644 --- a/tests/unit/api_contract/_api_checker/test_payments_global/program.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments_global/program.fixture.json @@ -2,18 +2,18 @@ "program": { "master": { "model": "program.program", - "pk": "0148b962-6a7c-4aad-b4c0-6ccc2faa8277", + "pk": "bccfe2f6-0944-4ead-9967-24a224de6a2f", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "data_collecting_type": 444, - "beneficiary_group": "cac47b42-adec-48f8-b949-73ba321953ec", - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", + "data_collecting_type": 56, + "beneficiary_group": "c83df17c-3ddf-4ab9-8666-2f9a6b2d899a", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", "name": "Program 0", - "code": "2839", + "code": "f1k5", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -41,7 +41,7 @@ "deps": [ { "model": "core.datacollectingtype", - "pk": 444, + "pk": 56, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -56,14 +56,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 444 + 56 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "cac47b42-adec-48f8-b949-73ba321953ec", + "pk": "c83df17c-3ddf-4ab9-8666-2f9a6b2d899a", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -77,7 +77,7 @@ }, { "model": "core.businessarea", - "pk": "9e49425f-c129-4bfc-aaaf-55797ef96469", + "pk": "ce090a0e-010c-4810-a74a-b22fe26a395c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_payments_global/role.fixture.json b/tests/unit/api_contract/_api_checker/test_payments_global/role.fixture.json index 87ec2daa7f5..e6a4391b582 100644 --- a/tests/unit/api_contract/_api_checker/test_payments_global/role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments_global/role.fixture.json @@ -2,7 +2,7 @@ "role": { "master": { "model": "account.role", - "pk": "01691811-f1da-40f9-a982-fb6966001240", + "pk": "651cd701-32eb-44d7-88fb-ced17851ff1b", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_payments_global/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_payments_global/role_assignment.fixture.json index a780d332917..49a84d7b05e 100644 --- a/tests/unit/api_contract/_api_checker/test_payments_global/role_assignment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments_global/role_assignment.fixture.json @@ -2,14 +2,14 @@ "role_assignment": { "master": { "model": "account.roleassignment", - "pk": "f2c3e460-a8df-476c-bb1a-0deef755bceb", + "pk": "d7c7f09a-0071-4a84-a270-ec46b163b033", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", - "business_area": "9e49425f-c129-4bfc-aaaf-55797ef96469", - "user": "048f0b0c-fd0a-4989-85a5-117b081d27fc", + "business_area": "ce090a0e-010c-4810-a74a-b22fe26a395c", + "user": "ac3a3245-d4a8-4d9f-a196-e49ace5afaa8", "partner": null, - "role": "01691811-f1da-40f9-a982-fb6966001240", + "role": "651cd701-32eb-44d7-88fb-ced17851ff1b", "program": null, "expiry_date": null, "group": null @@ -18,7 +18,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "9e49425f-c129-4bfc-aaaf-55797ef96469", + "pk": "ce090a0e-010c-4810-a74a-b22fe26a395c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -59,7 +59,7 @@ }, { "model": "account.user", - "pk": "048f0b0c-fd0a-4989-85a5-117b081d27fc", + "pk": "ac3a3245-d4a8-4d9f-a196-e49ace5afaa8", "fields": { "password": "", "last_login": null, @@ -73,7 +73,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 1320, + "partner": 132, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -84,7 +84,7 @@ }, { "model": "account.partner", - "pk": 1320, + "pk": 132, "fields": { "name": "Partner 0", "parent": null, @@ -98,7 +98,7 @@ }, { "model": "account.role", - "pk": "01691811-f1da-40f9-a982-fb6966001240", + "pk": "651cd701-32eb-44d7-88fb-ced17851ff1b", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_payments_global/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_payments_global/superuser.fixture.json index 7740c8da797..f4ca0240496 100644 --- a/tests/unit/api_contract/_api_checker/test_payments_global/superuser.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_payments_global/superuser.fixture.json @@ -2,7 +2,7 @@ "superuser": { "master": { "model": "account.user", - "pk": "048f0b0c-fd0a-4989-85a5-117b081d27fc", + "pk": "ac3a3245-d4a8-4d9f-a196-e49ace5afaa8", "fields": { "password": "", "last_login": null, @@ -16,7 +16,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 1320, + "partner": 132, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -28,7 +28,7 @@ "deps": [ { "model": "account.partner", - "pk": 1320, + "pk": 132, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 76% rename from tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 3786e63c6b6..9055e1f1684 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,19 +8,19 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "1665" + "Content-Length": "1759" }, "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/-416/payment-verifications/517495a2-b0e6-4e8e-a9ba-4f8318def80e/verifications/?limit=50&offset=50", + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/ymm3/payment-verifications/e6defe83-2c61-4af7-a747-a11b8a42b53b/verifications/?limit=50&offset=50", "previous": null, "results": [ { - "id": "8ac8a49c-c376-4140-ab5d-bbf682e93dcc", + "id": "37b87086-25a8-49eb-ba35-ac35832ca8d0", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "parent_id": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "e28226e7-6efa-491b-885a-0fbc3568f917", - "household_unicef_id": "HH-25-0000.0228", + "household_id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "household_unicef_id": "HH-25-0000.0037", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -28,6 +28,8 @@ "hoh_phone_no_alternative": "None", "snapshot_collector_full_name": null, "snapshot_alternate_collector_full_name": null, + "snapshot_collector_full_name_latin": null, + "snapshot_alternate_collector_full_name_latin": null, "snapshot_alternate_collector_id": null, "fsp_name": "", "entitlement_quantity": null, @@ -43,17 +45,17 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "collector_id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { - "id": "893e52a8-4d80-48c4-a6f5-283e06893063", + "id": "3ae747fe-46de-4e77-a727-37a4557b5028", "received_amount": null, "status": "PENDING", "payment_verification_plan_unicef_id": "PVP-2", "verification_channel": "MANUAL", "admin_url": null, - "version": 1735688653315201, + "version": 1735688653315200, "is_manually_editable": true }, "payment_plan_hard_conflicted": false, @@ -62,7 +64,7 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "-416", + "program_code": "ymm3", "collector_type_display": "Primary collector" } ] diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_8ac8a49c-c376-4140-ab5d-bbf682e93dcc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_37b87086-25a8-49eb-ba35-ac35832ca8d0_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 86% rename from tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_8ac8a49c-c376-4140-ab5d-bbf682e93dcc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_37b87086-25a8-49eb-ba35-ac35832ca8d0_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index a0a280d1c92..820b39e1afe 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_-416_payment-verifications_517495a2-b0e6-4e8e-a9ba-4f8318def80e_verifications_8ac8a49c-c376-4140-ab5d-bbf682e93dcc_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_37b87086-25a8-49eb-ba35-ac35832ca8d0_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -8,15 +8,15 @@ "X-Content-Type-Options": "nosniff", "Referrer-Policy": "same-origin", "Cross-Origin-Opener-Policy": "same-origin", - "Content-Length": "11362" + "Content-Length": "11456" }, "data": { - "id": "8ac8a49c-c376-4140-ab5d-bbf682e93dcc", + "id": "37b87086-25a8-49eb-ba35-ac35832ca8d0", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "parent_id": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "e28226e7-6efa-491b-885a-0fbc3568f917", - "household_unicef_id": "HH-25-0000.0228", + "household_id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "household_unicef_id": "HH-25-0000.0037", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -24,6 +24,8 @@ "hoh_phone_no_alternative": "None", "snapshot_collector_full_name": null, "snapshot_alternate_collector_full_name": null, + "snapshot_collector_full_name_latin": null, + "snapshot_alternate_collector_full_name_latin": null, "snapshot_alternate_collector_id": null, "fsp_name": "", "entitlement_quantity": null, @@ -39,11 +41,11 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "collector_id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { - "id": "893e52a8-4d80-48c4-a6f5-283e06893063", + "id": "3ae747fe-46de-4e77-a727-37a4557b5028", "received_amount": null, "status": "PENDING", "payment_verification_plan_unicef_id": "PVP-1", @@ -58,10 +60,10 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "-416", + "program_code": "ymm3", "collector_type_display": "Primary collector", "parent": { - "id": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "id": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "unicef_id": "PP-BA0000-25-00000001", "name": null, "status": "FINISHED", @@ -80,8 +82,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "program": { - "id": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", - "code": "-416", + "id": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "code": "ymm3", "name": "Program 0", "status": "ACTIVE", "screen_beneficiary": false @@ -92,7 +94,7 @@ "start_date": null, "end_date": null, "program_cycle": { - "id": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "id": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", "title": "Programme Cycle 0" }, "has_payment_list_export_file": false, @@ -103,7 +105,7 @@ "delivery_mechanism": null, "volume_by_delivery_mechanism": [ { - "id": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "id": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "delivery_mechanism": null, "volume": null, "volume_usd": null @@ -184,7 +186,7 @@ "available_funds_commitments": [], "payment_verification_plans": [ { - "id": "4c15e589-3919-4fcc-86d2-415ff1652ffb", + "id": "382904a9-f0d2-42c8-b755-48f761c3f1e3", "unicef_id": "PVP-1", "status": "PENDING", "status_display": "Pending", @@ -209,20 +211,20 @@ "age_filter_max": null, "excluded_admin_areas_filter": null, "rapid_pro_flow_id": "", - "admin_url": "/api/unicorn/payment/paymentverificationplan/4c15e589-3919-4fcc-86d2-415ff1652ffb/change/" + "admin_url": "/api/unicorn/payment/paymentverificationplan/382904a9-f0d2-42c8-b755-48f761c3f1e3/change/" } ], - "admin_url": "/api/unicorn/payment/paymentplan/517495a2-b0e6-4e8e-a9ba-4f8318def80e/change/", + "admin_url": "/api/unicorn/payment/paymentplan/e6defe83-2c61-4af7-a747-a11b8a42b53b/change/", "abort_comment": "", "flat_amount_value": null }, - "admin_url": "/api/unicorn/payment/payment/8ac8a49c-c376-4140-ab5d-bbf682e93dcc/change/", + "admin_url": "/api/unicorn/payment/payment/37b87086-25a8-49eb-ba35-ac35832ca8d0/change/", "source_payment": null, "household": { - "id": "e28226e7-6efa-491b-885a-0fbc3568f917", - "unicef_id": "HH-25-0000.0228", + "id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "unicef_id": "HH-25-0000.0037", "head_of_household": { - "id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "full_name": "Person 0", "full_name_latin": null }, @@ -240,14 +242,14 @@ "sanction_list_confirmed_match": false, "has_duplicates": false, "registration_data_import": { - "id": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "id": "1fd75092-4131-4470-b56d-b0ebe872e961", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "id": "6e5268df-b396-4332-82e2-8bc855912e50", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -260,8 +262,8 @@ "admin_area_title": "", "active_individuals_count": 1, "geopoint": null, - "import_id": "HH-25-0000.0228", - "admin_url": "/api/unicorn/household/household/e28226e7-6efa-491b-885a-0fbc3568f917/change/", + "import_id": "HH-25-0000.0037", + "admin_url": "/api/unicorn/household/household/2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73/change/", "male_children_count": null, "female_children_count": null, "children_disabled_count": null, @@ -320,10 +322,10 @@ "consent_sharing": [], "roles_in_household": [ { - "id": "056934b5-e92c-409c-895b-36cbb61fda57", + "id": "afefc180-fb1f-4749-9afd-4309653abea4", "individual": { - "id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", - "unicef_id": "IND-25-0000.0324" + "id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "unicef_id": "IND-25-0000.0082" }, "role": "PRIMARY" } @@ -331,8 +333,8 @@ }, "delivery_mechanism": null, "collector": { - "id": "9c298970-4786-42db-b9a6-fe0f8c8305ee", - "unicef_id": "IND-25-0000.0324", + "id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "unicef_id": "IND-25-0000.0082", "full_name": "Person 0", "given_name": "", "middle_name": "", @@ -349,8 +351,8 @@ "work_status": "NOT_PROVIDED", "pregnant": null, "household": { - "id": "e28226e7-6efa-491b-885a-0fbc3568f917", - "unicef_id": "HH-25-0000.0228", + "id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "unicef_id": "HH-25-0000.0037", "admin1": null, "admin2": null, "admin3": null, @@ -377,20 +379,20 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.0228", - "program_code": "-416" + "import_id": "HH-25-0000.0037", + "program_code": "ymm3" }, "role": "PRIMARY", "relationship": "", "registration_data_import": { - "id": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "id": "1fd75092-4131-4470-b56d-b0ebe872e961", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "id": "6e5268df-b396-4332-82e2-8bc855912e50", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -398,15 +400,15 @@ }, "data_source": "XLS" }, - "import_id": "IND-25-0000.0324", - "admin_url": "/api/unicorn/household/individual/9c298970-4786-42db-b9a6-fe0f8c8305ee/change/", + "import_id": "IND-25-0000.0082", + "admin_url": "/api/unicorn/household/individual/1576a0e2-5975-4e80-9f84-9f21ae1adba2/change/", "preferred_language": null, "roles_in_households": [ { - "id": "056934b5-e92c-409c-895b-36cbb61fda57", + "id": "afefc180-fb1f-4749-9afd-4309653abea4", "household": { - "id": "e28226e7-6efa-491b-885a-0fbc3568f917", - "unicef_id": "HH-25-0000.0228", + "id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "unicef_id": "HH-25-0000.0037", "admin1": null, "admin2": null, "admin3": null, @@ -433,8 +435,8 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.0228", - "program_code": "-416" + "import_id": "HH-25-0000.0037", + "program_code": "ymm3" }, "role": "PRIMARY" } diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json index 72759f49b2d..e1046151c05 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json @@ -2,7 +2,7 @@ "business_area": { "master": { "model": "core.businessarea", - "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json index ce71efa1b4f..b0d53f93035 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json @@ -2,7 +2,7 @@ "household": { "master": { "model": "household.household", - "pk": "e28226e7-6efa-491b-885a-0fbc3568f917", + "pk": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -11,11 +11,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "HH-25-0000.0228", + "unicef_id": "HH-25-0000.0037", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", - "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -25,7 +25,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "head_of_household": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "facility": null, "consent_sign": "", "consent": null, @@ -104,7 +104,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -145,18 +145,18 @@ }, { "model": "program.program", - "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "data_collecting_type": 199, - "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "data_collecting_type": 54, + "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", "name": "Program 0", - "code": "-416", + "code": "ymm3", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -183,7 +183,7 @@ }, { "model": "core.datacollectingtype", - "pk": 199, + "pk": 54, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -198,14 +198,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 199 + 54 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -219,7 +219,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "pk": "1fd75092-4131-4470-b56d-b0ebe872e961", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -227,10 +227,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "imported_by": "6e5268df-b396-4332-82e2-8bc855912e50", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -256,7 +256,7 @@ }, { "model": "account.user", - "pk": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "pk": "6e5268df-b396-4332-82e2-8bc855912e50", "fields": { "password": "", "last_login": null, @@ -270,7 +270,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 465, + "partner": 128, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -281,7 +281,7 @@ }, { "model": "account.partner", - "pk": 465, + "pk": 128, "fields": { "name": "Partner 1", "parent": null, @@ -295,7 +295,7 @@ }, { "model": "household.individual", - "pk": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "pk": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -304,12 +304,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.0324", + "unicef_id": "IND-25-0000.0082", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", - "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", - "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", + "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", "individual_collection": null, "copied_from": null, "individual_id": "", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json index d01b1b7894f..e888a482242 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json @@ -2,7 +2,7 @@ "household_role": { "master": { "model": "household.individualroleinhousehold", - "pk": "056934b5-e92c-409c-895b-36cbb61fda57", + "pk": "afefc180-fb1f-4749-9afd-4309653abea4", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -10,8 +10,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, - "individual": "9c298970-4786-42db-b9a6-fe0f8c8305ee", - "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "individual": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", "role": "PRIMARY", "copied_from": null } @@ -19,7 +19,7 @@ "deps": [ { "model": "household.individual", - "pk": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "pk": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -28,12 +28,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "unicef_id": "IND-25-0000.0324", + "unicef_id": "IND-25-0000.0082", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", - "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", - "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", + "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -109,7 +109,7 @@ }, { "model": "core.businessarea", - "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -150,18 +150,18 @@ }, { "model": "program.program", - "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "data_collecting_type": 199, - "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "data_collecting_type": 54, + "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", "name": "Program 0", - "code": "-416", + "code": "ymm3", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -188,7 +188,7 @@ }, { "model": "core.datacollectingtype", - "pk": 199, + "pk": 54, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -203,14 +203,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 199 + 54 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -224,7 +224,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "pk": "1fd75092-4131-4470-b56d-b0ebe872e961", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -232,10 +232,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "imported_by": "6e5268df-b396-4332-82e2-8bc855912e50", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -261,7 +261,7 @@ }, { "model": "account.user", - "pk": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "pk": "6e5268df-b396-4332-82e2-8bc855912e50", "fields": { "password": "", "last_login": null, @@ -275,7 +275,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 465, + "partner": 128, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -286,7 +286,7 @@ }, { "model": "account.partner", - "pk": 465, + "pk": 128, "fields": { "name": "Partner 1", "parent": null, @@ -300,7 +300,7 @@ }, { "model": "household.household", - "pk": "e28226e7-6efa-491b-885a-0fbc3568f917", + "pk": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -309,11 +309,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "unicef_id": "HH-25-0000.0228", + "unicef_id": "HH-25-0000.0037", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", - "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -323,7 +323,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "head_of_household": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "facility": null, "consent_sign": "", "consent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json index 7c4c2b6bb27..a62f88c72be 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json @@ -2,7 +2,7 @@ "payment_plan": { "master": { "model": "payment.paymentplan", - "pk": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "pk": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -10,8 +10,8 @@ "version": 1735688653315201, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program_cycle": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program_cycle": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -21,7 +21,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "created_by": "085c029f-79ba-4f61-b306-aa7c043737f2", "source_payment_plan": null, "storage_file": null, "name": null, @@ -72,7 +72,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -113,14 +113,14 @@ }, { "model": "program.programcycle", - "pk": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "pk": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -129,18 +129,18 @@ }, { "model": "program.program", - "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "data_collecting_type": 199, - "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "data_collecting_type": 54, + "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", "name": "Program 0", - "code": "-416", + "code": "ymm3", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -167,7 +167,7 @@ }, { "model": "core.datacollectingtype", - "pk": 199, + "pk": 54, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -182,14 +182,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 199 + 54 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -203,7 +203,7 @@ }, { "model": "account.user", - "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", "fields": { "password": "", "last_login": null, @@ -217,7 +217,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 463, + "partner": 126, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -228,7 +228,7 @@ }, { "model": "account.partner", - "pk": 463, + "pk": 126, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json index 0fa9f59ec7f..f365f582594 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json @@ -2,13 +2,13 @@ "payment_verification": { "master": { "model": "payment.paymentverification", - "pk": "893e52a8-4d80-48c4-a6f5-283e06893063", + "pk": "3ae747fe-46de-4e77-a727-37a4557b5028", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, - "payment": "8ac8a49c-c376-4140-ab5d-bbf682e93dcc", - "payment_verification_plan": "4c15e589-3919-4fcc-86d2-415ff1652ffb", + "payment": "37b87086-25a8-49eb-ba35-ac35832ca8d0", + "payment_verification_plan": "382904a9-f0d2-42c8-b755-48f761c3f1e3", "status": "PENDING", "status_date": "2025-01-01T00:00:00Z", "received_amount": null, @@ -18,23 +18,23 @@ "deps": [ { "model": "payment.payment", - "pk": "8ac8a49c-c376-4140-ab5d-bbf682e93dcc", + "pk": "37b87086-25a8-49eb-ba35-ac35832ca8d0", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "unicef_id": "RCPT-BA0000-25-0.000.001", - "signature_hash": "8978b8da7849e29300b31713f55fa57472404499", + "signature_hash": "fef9506418fa1183a5d0c74e8159a556f147823c", "internal_data": {}, - "parent": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "parent": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "parent_split": null, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", "program": null, - "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", "head_of_household": null, "delivery_type": null, "financial_service_provider": null, - "collector": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "collector": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "collector_type": "PRIMARY", "source_payment": null, "is_follow_up": false, @@ -68,7 +68,7 @@ }, { "model": "payment.paymentplan", - "pk": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "pk": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -76,8 +76,8 @@ "version": 1735688653315203, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program_cycle": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program_cycle": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -87,7 +87,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "created_by": "085c029f-79ba-4f61-b306-aa7c043737f2", "source_payment_plan": null, "storage_file": null, "name": null, @@ -137,7 +137,7 @@ }, { "model": "core.businessarea", - "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -178,14 +178,14 @@ }, { "model": "program.programcycle", - "pk": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "pk": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315202, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -194,18 +194,18 @@ }, { "model": "program.program", - "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315205, - "data_collecting_type": 199, - "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "data_collecting_type": 54, + "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", "name": "Program 0", - "code": "-416", + "code": "ymm3", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -232,7 +232,7 @@ }, { "model": "core.datacollectingtype", - "pk": 199, + "pk": 54, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -247,14 +247,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 199 + 54 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -268,7 +268,7 @@ }, { "model": "account.user", - "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", "fields": { "password": "", "last_login": null, @@ -282,7 +282,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 463, + "partner": 126, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -293,7 +293,7 @@ }, { "model": "account.partner", - "pk": 463, + "pk": 126, "fields": { "name": "Partner 0", "parent": null, @@ -307,7 +307,7 @@ }, { "model": "household.household", - "pk": "e28226e7-6efa-491b-885a-0fbc3568f917", + "pk": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -316,11 +316,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "unicef_id": "HH-25-0000.0228", + "unicef_id": "HH-25-0000.0037", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", - "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -330,7 +330,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "head_of_household": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "facility": null, "consent_sign": "", "consent": null, @@ -408,7 +408,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", + "pk": "1fd75092-4131-4470-b56d-b0ebe872e961", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -416,10 +416,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "imported_by": "6e5268df-b396-4332-82e2-8bc855912e50", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -445,7 +445,7 @@ }, { "model": "account.user", - "pk": "0493bf86-0060-4715-a08d-1ef8f97e34aa", + "pk": "6e5268df-b396-4332-82e2-8bc855912e50", "fields": { "password": "", "last_login": null, @@ -459,7 +459,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 465, + "partner": 128, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -470,7 +470,7 @@ }, { "model": "account.partner", - "pk": 465, + "pk": 128, "fields": { "name": "Partner 1", "parent": null, @@ -484,7 +484,7 @@ }, { "model": "household.individual", - "pk": "9c298970-4786-42db-b9a6-fe0f8c8305ee", + "pk": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -493,12 +493,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "IND-25-0000.0324", + "unicef_id": "IND-25-0000.0082", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", - "registration_data_import": "1a0e89d3-1c23-4207-adb9-cebd24a4c77c", - "household": "e28226e7-6efa-491b-885a-0fbc3568f917", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", + "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -583,13 +583,13 @@ }, { "model": "payment.paymentverificationplan", - "pk": "4c15e589-3919-4fcc-86d2-415ff1652ffb", + "pk": "382904a9-f0d2-42c8-b755-48f761c3f1e3", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, "unicef_id": "PVP-1", - "payment_plan": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "payment_plan": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "status": "PENDING", "verification_channel": "MANUAL", "sampling": "FULL_LIST", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json index 7048c04aa5c..9382c25312e 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json @@ -2,20 +2,20 @@ "payment_verification_summary": { "master": { "model": "payment.paymentverificationsummary", - "pk": "4929a262-e9ea-4b79-8172-517debefd3f8", + "pk": "65698924-d48d-4ce6-bab9-5e8accd9c8f7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "status": "PENDING", "activation_date": null, "completion_date": null, - "payment_plan": "517495a2-b0e6-4e8e-a9ba-4f8318def80e" + "payment_plan": "e6defe83-2c61-4af7-a747-a11b8a42b53b" } }, "deps": [ { "model": "payment.paymentplan", - "pk": "517495a2-b0e6-4e8e-a9ba-4f8318def80e", + "pk": "e6defe83-2c61-4af7-a747-a11b8a42b53b", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -23,8 +23,8 @@ "version": 1735688653315202, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "program_cycle": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "program_cycle": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -34,7 +34,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "created_by": "085c029f-79ba-4f61-b306-aa7c043737f2", "source_payment_plan": null, "storage_file": null, "name": null, @@ -84,7 +84,7 @@ }, { "model": "core.businessarea", - "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -125,14 +125,14 @@ }, { "model": "program.programcycle", - "pk": "b3e8e089-1232-4e34-9703-45a479e77d8a", + "pk": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315201, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -141,18 +141,18 @@ }, { "model": "program.program", - "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "data_collecting_type": 199, - "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "data_collecting_type": 54, + "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", "name": "Program 0", - "code": "-416", + "code": "ymm3", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -179,7 +179,7 @@ }, { "model": "core.datacollectingtype", - "pk": 199, + "pk": 54, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -194,14 +194,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 199 + 54 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -215,7 +215,7 @@ }, { "model": "account.user", - "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", "fields": { "password": "", "last_login": null, @@ -229,7 +229,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 463, + "partner": 126, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -240,7 +240,7 @@ }, { "model": "account.partner", - "pk": 463, + "pk": 126, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json index c35e5270445..dbe5948a2e8 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json @@ -2,18 +2,18 @@ "program": { "master": { "model": "program.program", - "pk": "6cf631fa-d09b-4682-a9ee-bb06a2fd68d4", + "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "data_collecting_type": 199, - "beneficiary_group": "256d17a2-3a69-4026-bf8b-be7a89d9e660", - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "data_collecting_type": 54, + "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", "name": "Program 0", - "code": "-416", + "code": "ymm3", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -41,7 +41,7 @@ "deps": [ { "model": "core.datacollectingtype", - "pk": 199, + "pk": 54, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -56,14 +56,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 199 + 54 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "256d17a2-3a69-4026-bf8b-be7a89d9e660", + "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -77,7 +77,7 @@ }, { "model": "core.businessarea", - "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json index bad76a34183..7fa372f8988 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json @@ -2,7 +2,7 @@ "role": { "master": { "model": "account.role", - "pk": "4c07a31f-c54c-4885-b1c4-3946c5170b98", + "pk": "69952268-cd79-40bd-95ae-57f8d57d5c1f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json index f2f5549da1d..72f2390005b 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json @@ -2,14 +2,14 @@ "role_assignment": { "master": { "model": "account.roleassignment", - "pk": "5fd4bb71-9e59-4638-8c0d-a4d5a7ff67bc", + "pk": "475165b5-543e-43ec-b5ec-ba9df92e7212", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", - "business_area": "2872e0c2-cf7f-4570-afc4-26b05b94db26", - "user": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "user": "085c029f-79ba-4f61-b306-aa7c043737f2", "partner": null, - "role": "4c07a31f-c54c-4885-b1c4-3946c5170b98", + "role": "69952268-cd79-40bd-95ae-57f8d57d5c1f", "program": null, "expiry_date": null, "group": null @@ -18,7 +18,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "2872e0c2-cf7f-4570-afc4-26b05b94db26", + "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -59,7 +59,7 @@ }, { "model": "account.user", - "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", "fields": { "password": "", "last_login": null, @@ -73,7 +73,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 463, + "partner": 126, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -84,7 +84,7 @@ }, { "model": "account.partner", - "pk": 463, + "pk": 126, "fields": { "name": "Partner 0", "parent": null, @@ -98,7 +98,7 @@ }, { "model": "account.role", - "pk": "4c07a31f-c54c-4885-b1c4-3946c5170b98", + "pk": "69952268-cd79-40bd-95ae-57f8d57d5c1f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json index 29cfea871e0..d40ab23b1fc 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json @@ -2,7 +2,7 @@ "superuser": { "master": { "model": "account.user", - "pk": "f4175261-aa63-41ef-b391-da021e5d1aa4", + "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", "fields": { "password": "", "last_login": null, @@ -16,7 +16,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 463, + "partner": 126, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -28,7 +28,7 @@ "deps": [ { "model": "account.partner", - "pk": 463, + "pk": 126, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/apps/household/test_household_list_views.py b/tests/unit/apps/household/test_household_list_views.py index 03f5a191f55..b947f0b1306 100644 --- a/tests/unit/apps/household/test_household_list_views.py +++ b/tests/unit/apps/household/test_household_list_views.py @@ -364,7 +364,7 @@ def test_household_list_caching( assert response.has_header("etag") etag_second_call = response.headers["etag"] assert etag == etag_second_call - assert len(ctx.captured_queries) == 9 + assert len(ctx.captured_queries) == 8 household_list_context["household1"].children_count = 100 version_before_save = get_household_list_program_key(household_list_context["program"].id) @@ -379,7 +379,7 @@ def test_household_list_caching( etag_third_call = response.headers["etag"] assert json.loads(cache.get(etag_third_call)[0].decode("utf8")) == response.json() assert etag_third_call not in [etag, etag_second_call] - assert len(ctx.captured_queries) == 12 + assert len(ctx.captured_queries) == 11 set_admin_area_limits_in_program( household_list_context["partner"], @@ -393,7 +393,7 @@ def test_household_list_caching( etag_changed_areas = response.headers["etag"] assert json.loads(cache.get(etag_changed_areas)[0].decode("utf8")) == response.json() assert etag_changed_areas not in [etag, etag_second_call, etag_third_call] - assert len(ctx.captured_queries) == 12 + assert len(ctx.captured_queries) == 11 version_before_delete = get_household_list_program_key(household_list_context["program"].id) with TestCase.captureOnCommitCallbacks(execute=True): @@ -407,7 +407,7 @@ def test_household_list_caching( etag_fourth_call = response.headers["etag"] assert len(response.json()["results"]) == 1 assert etag_fourth_call not in [etag, etag_second_call, etag_third_call, etag_changed_areas] - assert len(ctx.captured_queries) == 12 + assert len(ctx.captured_queries) == 11 with CaptureQueriesContext(connection) as ctx: response = household_list_context["api_client"].get(household_list_context["list_url"]) @@ -415,7 +415,7 @@ def test_household_list_caching( assert response.has_header("etag") etag_fifth_call = response.headers["etag"] assert etag_fifth_call == etag_fourth_call - assert len(ctx.captured_queries) == 9 + assert len(ctx.captured_queries) == 8 def test_household_all_flex_fields_attributes( diff --git a/tests/unit/apps/household/test_household_members_views.py b/tests/unit/apps/household/test_household_members_views.py index 75e64c3e2ca..010c9eb92b5 100644 --- a/tests/unit/apps/household/test_household_members_views.py +++ b/tests/unit/apps/household/test_household_members_views.py @@ -167,6 +167,7 @@ def test_household_members(create_user_role_with_permissions: Any, household_mem "id": str(individual1_1.id), "unicef_id": individual1_1.unicef_id, "full_name": individual1_1.full_name, + "full_name_latin": None, "role": "PRIMARY", "relationship": individual1_1.relationship, "status": individual1_1.status, @@ -200,6 +201,7 @@ def test_household_members(create_user_role_with_permissions: Any, household_mem "id": str(individual1_2.id), "unicef_id": individual1_2.unicef_id, "full_name": individual1_2.full_name, + "full_name_latin": None, "role": None, "relationship": individual1_2.relationship, "status": individual1_2.status, @@ -233,6 +235,7 @@ def test_household_members(create_user_role_with_permissions: Any, household_mem "id": str(individual2_1.id), "unicef_id": individual2_1.unicef_id, "full_name": individual2_1.full_name, + "full_name_latin": None, "role": "ALTERNATE", "relationship": individual2_1.relationship, "status": individual2_1.status, diff --git a/tests/unit/apps/registration_data/test_file/kobo_submissions.json b/tests/unit/apps/registration_data/test_file/kobo_submissions.json index 9ecc80fd123..2da30ebc1e6 100644 --- a/tests/unit/apps/registration_data/test_file/kobo_submissions.json +++ b/tests/unit/apps/registration_data/test_file/kobo_submissions.json @@ -20,6 +20,7 @@ "individual_questions/role_i_c": "primary", "individual_questions/age": "60", "individual_questions/given_name_i_c": "Test", + "individual_questions/given_name_latin_i_c": "TestLatin", "individual_questions/first_registration_date_i_c": "2020-08-11", "individual_questions/gender_i_c": "male", "individual_questions/more_information/marital_status_i_c": "married", @@ -30,7 +31,7 @@ "individual_questions/full_name_i_c": "Test Testowski", "individual_questions/relationship_i_c": "head", "individual_questions/individual_vulnerabilities/work_status_i_c": "1", - "individual_questions/family_name_i_c": "Testowski", + "individual_questions/family_name_i_c": "Testowśki", "individual_questions/individual_vulnerabilities/disability_i_c": "not disabled", "individual_questions/more_information/birth_certificate_no_i_c": "123123123", "individual_questions/more_information/birth_certificate_issuer_i_c": "AFG", diff --git a/tests/unit/apps/registration_data/test_rdi_kobo_create.py b/tests/unit/apps/registration_data/test_rdi_kobo_create.py index e7d8d51b66f..d4b5197aa0d 100644 --- a/tests/unit/apps/registration_data/test_rdi_kobo_create.py +++ b/tests/unit/apps/registration_data/test_rdi_kobo_create.py @@ -189,10 +189,10 @@ def test_execute( "relationship": "HEAD", "sex": "MALE", "marital_status": "MARRIED", - "full_name_latin": "Full_local", - "given_name_latin": "Given_local", - "middle_name_latin": "Middle_local", - "family_name_latin": "Family_local", + "full_name_latin": "Test Testowski", + "given_name_latin": "TestLatin", + "middle_name_latin": None, + "family_name_latin": "Testowski", } assert individuals_obj_data == expected_ind From 8c6548e80ea02f12a965816840e7ba31fbe551b1 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 12:49:48 -0400 Subject: [PATCH 19/33] migration --- src/hope/apps/household/migrations/0041_migration.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hope/apps/household/migrations/0041_migration.py b/src/hope/apps/household/migrations/0041_migration.py index d51fc6ce7b9..3f9cfd618ab 100644 --- a/src/hope/apps/household/migrations/0041_migration.py +++ b/src/hope/apps/household/migrations/0041_migration.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("household", "0040_migration"), ] From 8242a958588a4554638fa39abcf7211bff6eda30 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 13:21:22 -0400 Subject: [PATCH 20/33] tests --- ...f18ae6b758e8014a24c7fa039e91.response.json | 18 ++-- ...f18ae6b758e8014a24c7fa039e91.response.json | 86 +++++++-------- .../business_area.fixture.json | 2 +- .../household.fixture.json | 56 +++++----- .../household_role.fixture.json | 62 +++++------ .../payment_plan.fixture.json | 36 +++---- .../payment_verification.fixture.json | 98 +++++++++--------- .../payment_verification_summary.fixture.json | 40 +++---- .../program.fixture.json | 18 ++-- .../role.fixture.json | 2 +- .../role_assignment.fixture.json | 18 ++-- .../superuser.fixture.json | 6 +- .../test_file/new_reg_data_import.xlsx | Bin 290029 -> 289946 bytes .../registration_data/test_rdi_xlsx_create.py | 8 +- 14 files changed, 225 insertions(+), 225 deletions(-) rename tests/unit/api_contract/_api_checker/test_verification_records/{_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_ => _api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (82%) rename tests/unit/api_contract/_api_checker/test_verification_records/{_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_37b87086-25a8-49eb-ba35-ac35832ca8d0_ => _api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (86%) diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 82% rename from tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 9055e1f1684..1837bd2202a 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -11,16 +11,16 @@ "Content-Length": "1759" }, "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/ymm3/payment-verifications/e6defe83-2c61-4af7-a747-a11b8a42b53b/verifications/?limit=50&offset=50", + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/--rq/payment-verifications/0e2f5b0f-afa1-44b6-a111-810e5f414ea8/verifications/?limit=50&offset=50", "previous": null, "results": [ { - "id": "37b87086-25a8-49eb-ba35-ac35832ca8d0", + "id": "ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "parent_id": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", - "household_unicef_id": "HH-25-0000.0037", + "household_id": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "household_unicef_id": "HH-25-0000.0120", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -45,14 +45,14 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "collector_id": "a1267a75-7431-4d78-900a-cbd409a023ec", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { - "id": "3ae747fe-46de-4e77-a727-37a4557b5028", + "id": "e9e93e19-0afc-4f76-abe6-96263a83fab1", "received_amount": null, "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-2", + "payment_verification_plan_unicef_id": "PVP-4", "verification_channel": "MANUAL", "admin_url": null, "version": 1735688653315200, @@ -64,7 +64,7 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "ymm3", + "program_code": "--rq", "collector_type_display": "Primary collector" } ] diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_37b87086-25a8-49eb-ba35-ac35832ca8d0_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 86% rename from tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_37b87086-25a8-49eb-ba35-ac35832ca8d0_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 820b39e1afe..503fefd00a9 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_ymm3_payment-verifications_e6defe83-2c61-4af7-a747-a11b8a42b53b_verifications_37b87086-25a8-49eb-ba35-ac35832ca8d0_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -11,12 +11,12 @@ "Content-Length": "11456" }, "data": { - "id": "37b87086-25a8-49eb-ba35-ac35832ca8d0", + "id": "ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "parent_id": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", - "household_unicef_id": "HH-25-0000.0037", + "household_id": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "household_unicef_id": "HH-25-0000.0120", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -41,14 +41,14 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "collector_id": "a1267a75-7431-4d78-900a-cbd409a023ec", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { - "id": "3ae747fe-46de-4e77-a727-37a4557b5028", + "id": "e9e93e19-0afc-4f76-abe6-96263a83fab1", "received_amount": null, "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-1", + "payment_verification_plan_unicef_id": "PVP-3", "verification_channel": "MANUAL", "admin_url": null, "version": 1735688653315201, @@ -60,10 +60,10 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "ymm3", + "program_code": "--rq", "collector_type_display": "Primary collector", "parent": { - "id": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "id": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "unicef_id": "PP-BA0000-25-00000001", "name": null, "status": "FINISHED", @@ -82,8 +82,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "program": { - "id": "54fdfad6-0798-47db-85f5-4cd431fa356f", - "code": "ymm3", + "id": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "code": "--rq", "name": "Program 0", "status": "ACTIVE", "screen_beneficiary": false @@ -94,7 +94,7 @@ "start_date": null, "end_date": null, "program_cycle": { - "id": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", + "id": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", "title": "Programme Cycle 0" }, "has_payment_list_export_file": false, @@ -105,7 +105,7 @@ "delivery_mechanism": null, "volume_by_delivery_mechanism": [ { - "id": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "id": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "delivery_mechanism": null, "volume": null, "volume_usd": null @@ -186,8 +186,8 @@ "available_funds_commitments": [], "payment_verification_plans": [ { - "id": "382904a9-f0d2-42c8-b755-48f761c3f1e3", - "unicef_id": "PVP-1", + "id": "24fa618c-b089-4d11-95c8-736a503aab01", + "unicef_id": "PVP-3", "status": "PENDING", "status_display": "Pending", "verification_channel": "MANUAL", @@ -211,20 +211,20 @@ "age_filter_max": null, "excluded_admin_areas_filter": null, "rapid_pro_flow_id": "", - "admin_url": "/api/unicorn/payment/paymentverificationplan/382904a9-f0d2-42c8-b755-48f761c3f1e3/change/" + "admin_url": "/api/unicorn/payment/paymentverificationplan/24fa618c-b089-4d11-95c8-736a503aab01/change/" } ], - "admin_url": "/api/unicorn/payment/paymentplan/e6defe83-2c61-4af7-a747-a11b8a42b53b/change/", + "admin_url": "/api/unicorn/payment/paymentplan/0e2f5b0f-afa1-44b6-a111-810e5f414ea8/change/", "abort_comment": "", "flat_amount_value": null }, - "admin_url": "/api/unicorn/payment/payment/37b87086-25a8-49eb-ba35-ac35832ca8d0/change/", + "admin_url": "/api/unicorn/payment/payment/ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5/change/", "source_payment": null, "household": { - "id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", - "unicef_id": "HH-25-0000.0037", + "id": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "unicef_id": "HH-25-0000.0120", "head_of_household": { - "id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "id": "a1267a75-7431-4d78-900a-cbd409a023ec", "full_name": "Person 0", "full_name_latin": null }, @@ -242,14 +242,14 @@ "sanction_list_confirmed_match": false, "has_duplicates": false, "registration_data_import": { - "id": "1fd75092-4131-4470-b56d-b0ebe872e961", + "id": "85ed0d91-e7c7-4160-b82d-0c404a259933", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "6e5268df-b396-4332-82e2-8bc855912e50", + "id": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -262,8 +262,8 @@ "admin_area_title": "", "active_individuals_count": 1, "geopoint": null, - "import_id": "HH-25-0000.0037", - "admin_url": "/api/unicorn/household/household/2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73/change/", + "import_id": "HH-25-0000.0120", + "admin_url": "/api/unicorn/household/household/2534a243-e3ab-4944-84b0-edab2ed4837e/change/", "male_children_count": null, "female_children_count": null, "children_disabled_count": null, @@ -322,10 +322,10 @@ "consent_sharing": [], "roles_in_household": [ { - "id": "afefc180-fb1f-4749-9afd-4309653abea4", + "id": "3f6b9b87-432e-44ff-97cf-7a731fd37ce0", "individual": { - "id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", - "unicef_id": "IND-25-0000.0082" + "id": "a1267a75-7431-4d78-900a-cbd409a023ec", + "unicef_id": "IND-25-0000.0262" }, "role": "PRIMARY" } @@ -333,8 +333,8 @@ }, "delivery_mechanism": null, "collector": { - "id": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", - "unicef_id": "IND-25-0000.0082", + "id": "a1267a75-7431-4d78-900a-cbd409a023ec", + "unicef_id": "IND-25-0000.0262", "full_name": "Person 0", "given_name": "", "middle_name": "", @@ -351,8 +351,8 @@ "work_status": "NOT_PROVIDED", "pregnant": null, "household": { - "id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", - "unicef_id": "HH-25-0000.0037", + "id": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "unicef_id": "HH-25-0000.0120", "admin1": null, "admin2": null, "admin3": null, @@ -379,20 +379,20 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.0037", - "program_code": "ymm3" + "import_id": "HH-25-0000.0120", + "program_code": "--rq" }, "role": "PRIMARY", "relationship": "", "registration_data_import": { - "id": "1fd75092-4131-4470-b56d-b0ebe872e961", + "id": "85ed0d91-e7c7-4160-b82d-0c404a259933", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "6e5268df-b396-4332-82e2-8bc855912e50", + "id": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -400,15 +400,15 @@ }, "data_source": "XLS" }, - "import_id": "IND-25-0000.0082", - "admin_url": "/api/unicorn/household/individual/1576a0e2-5975-4e80-9f84-9f21ae1adba2/change/", + "import_id": "IND-25-0000.0262", + "admin_url": "/api/unicorn/household/individual/a1267a75-7431-4d78-900a-cbd409a023ec/change/", "preferred_language": null, "roles_in_households": [ { - "id": "afefc180-fb1f-4749-9afd-4309653abea4", + "id": "3f6b9b87-432e-44ff-97cf-7a731fd37ce0", "household": { - "id": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", - "unicef_id": "HH-25-0000.0037", + "id": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "unicef_id": "HH-25-0000.0120", "admin1": null, "admin2": null, "admin3": null, @@ -435,8 +435,8 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.0037", - "program_code": "ymm3" + "import_id": "HH-25-0000.0120", + "program_code": "--rq" }, "role": "PRIMARY" } diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json index e1046151c05..28da72333a8 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json @@ -2,7 +2,7 @@ "business_area": { "master": { "model": "core.businessarea", - "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", + "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json index b0d53f93035..cf54dd1a960 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json @@ -2,7 +2,7 @@ "household": { "master": { "model": "household.household", - "pk": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "pk": "2534a243-e3ab-4944-84b0-edab2ed4837e", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -11,11 +11,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "HH-25-0000.0037", + "unicef_id": "HH-25-0000.0120", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", - "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -25,7 +25,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "head_of_household": "a1267a75-7431-4d78-900a-cbd409a023ec", "facility": null, "consent_sign": "", "consent": null, @@ -104,7 +104,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", + "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -145,18 +145,18 @@ }, { "model": "program.program", - "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "data_collecting_type": 54, - "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "data_collecting_type": 105, + "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", "name": "Program 0", - "code": "ymm3", + "code": "--rq", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -183,7 +183,7 @@ }, { "model": "core.datacollectingtype", - "pk": 54, + "pk": 105, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -198,14 +198,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 54 + 105 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -219,7 +219,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "1fd75092-4131-4470-b56d-b0ebe872e961", + "pk": "85ed0d91-e7c7-4160-b82d-0c404a259933", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -227,10 +227,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "6e5268df-b396-4332-82e2-8bc855912e50", + "imported_by": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -256,7 +256,7 @@ }, { "model": "account.user", - "pk": "6e5268df-b396-4332-82e2-8bc855912e50", + "pk": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", "fields": { "password": "", "last_login": null, @@ -270,7 +270,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 128, + "partner": 326, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -281,7 +281,7 @@ }, { "model": "account.partner", - "pk": 128, + "pk": 326, "fields": { "name": "Partner 1", "parent": null, @@ -295,7 +295,7 @@ }, { "model": "household.individual", - "pk": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "pk": "a1267a75-7431-4d78-900a-cbd409a023ec", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -304,12 +304,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.0082", + "unicef_id": "IND-25-0000.0262", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", - "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", - "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", "individual_collection": null, "copied_from": null, "individual_id": "", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json index e888a482242..a1a0937f909 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json @@ -2,7 +2,7 @@ "household_role": { "master": { "model": "household.individualroleinhousehold", - "pk": "afefc180-fb1f-4749-9afd-4309653abea4", + "pk": "3f6b9b87-432e-44ff-97cf-7a731fd37ce0", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -10,8 +10,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, - "individual": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", - "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "individual": "a1267a75-7431-4d78-900a-cbd409a023ec", + "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", "role": "PRIMARY", "copied_from": null } @@ -19,7 +19,7 @@ "deps": [ { "model": "household.individual", - "pk": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "pk": "a1267a75-7431-4d78-900a-cbd409a023ec", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -28,12 +28,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "unicef_id": "IND-25-0000.0082", + "unicef_id": "IND-25-0000.0262", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", - "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", - "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -109,7 +109,7 @@ }, { "model": "core.businessarea", - "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", + "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -150,18 +150,18 @@ }, { "model": "program.program", - "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "data_collecting_type": 54, - "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "data_collecting_type": 105, + "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", "name": "Program 0", - "code": "ymm3", + "code": "--rq", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -188,7 +188,7 @@ }, { "model": "core.datacollectingtype", - "pk": 54, + "pk": 105, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -203,14 +203,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 54 + 105 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -224,7 +224,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "1fd75092-4131-4470-b56d-b0ebe872e961", + "pk": "85ed0d91-e7c7-4160-b82d-0c404a259933", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -232,10 +232,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "6e5268df-b396-4332-82e2-8bc855912e50", + "imported_by": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -261,7 +261,7 @@ }, { "model": "account.user", - "pk": "6e5268df-b396-4332-82e2-8bc855912e50", + "pk": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", "fields": { "password": "", "last_login": null, @@ -275,7 +275,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 128, + "partner": 326, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -286,7 +286,7 @@ }, { "model": "account.partner", - "pk": 128, + "pk": 326, "fields": { "name": "Partner 1", "parent": null, @@ -300,7 +300,7 @@ }, { "model": "household.household", - "pk": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "pk": "2534a243-e3ab-4944-84b0-edab2ed4837e", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -309,11 +309,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "unicef_id": "HH-25-0000.0037", + "unicef_id": "HH-25-0000.0120", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", - "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -323,7 +323,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "head_of_household": "a1267a75-7431-4d78-900a-cbd409a023ec", "facility": null, "consent_sign": "", "consent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json index a62f88c72be..afc41a613f8 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json @@ -2,7 +2,7 @@ "payment_plan": { "master": { "model": "payment.paymentplan", - "pk": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "pk": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -10,8 +10,8 @@ "version": 1735688653315201, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program_cycle": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program_cycle": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -21,7 +21,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "085c029f-79ba-4f61-b306-aa7c043737f2", + "created_by": "8faa694b-7d0e-4299-bb64-805814b36c53", "source_payment_plan": null, "storage_file": null, "name": null, @@ -72,7 +72,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", + "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -113,14 +113,14 @@ }, { "model": "program.programcycle", - "pk": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", + "pk": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -129,18 +129,18 @@ }, { "model": "program.program", - "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "data_collecting_type": 54, - "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "data_collecting_type": 105, + "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", "name": "Program 0", - "code": "ymm3", + "code": "--rq", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -167,7 +167,7 @@ }, { "model": "core.datacollectingtype", - "pk": 54, + "pk": 105, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -182,14 +182,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 54 + 105 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -203,7 +203,7 @@ }, { "model": "account.user", - "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", + "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", "fields": { "password": "", "last_login": null, @@ -217,7 +217,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 126, + "partner": 324, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -228,7 +228,7 @@ }, { "model": "account.partner", - "pk": 126, + "pk": 324, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json index f365f582594..202088eb50f 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json @@ -2,13 +2,13 @@ "payment_verification": { "master": { "model": "payment.paymentverification", - "pk": "3ae747fe-46de-4e77-a727-37a4557b5028", + "pk": "e9e93e19-0afc-4f76-abe6-96263a83fab1", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, - "payment": "37b87086-25a8-49eb-ba35-ac35832ca8d0", - "payment_verification_plan": "382904a9-f0d2-42c8-b755-48f761c3f1e3", + "payment": "ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5", + "payment_verification_plan": "24fa618c-b089-4d11-95c8-736a503aab01", "status": "PENDING", "status_date": "2025-01-01T00:00:00Z", "received_amount": null, @@ -18,23 +18,23 @@ "deps": [ { "model": "payment.payment", - "pk": "37b87086-25a8-49eb-ba35-ac35832ca8d0", + "pk": "ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "unicef_id": "RCPT-BA0000-25-0.000.001", - "signature_hash": "fef9506418fa1183a5d0c74e8159a556f147823c", + "signature_hash": "a3493a9ecf496082d0754050223cbe3b676bab87", "internal_data": {}, - "parent": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "parent": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "parent_split": null, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", "program": null, - "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", "head_of_household": null, "delivery_type": null, "financial_service_provider": null, - "collector": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "collector": "a1267a75-7431-4d78-900a-cbd409a023ec", "collector_type": "PRIMARY", "source_payment": null, "is_follow_up": false, @@ -68,7 +68,7 @@ }, { "model": "payment.paymentplan", - "pk": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "pk": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -76,8 +76,8 @@ "version": 1735688653315203, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program_cycle": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program_cycle": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -87,7 +87,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "085c029f-79ba-4f61-b306-aa7c043737f2", + "created_by": "8faa694b-7d0e-4299-bb64-805814b36c53", "source_payment_plan": null, "storage_file": null, "name": null, @@ -137,7 +137,7 @@ }, { "model": "core.businessarea", - "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", + "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -178,14 +178,14 @@ }, { "model": "program.programcycle", - "pk": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", + "pk": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315202, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -194,18 +194,18 @@ }, { "model": "program.program", - "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315205, - "data_collecting_type": 54, - "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "data_collecting_type": 105, + "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", "name": "Program 0", - "code": "ymm3", + "code": "--rq", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -232,7 +232,7 @@ }, { "model": "core.datacollectingtype", - "pk": 54, + "pk": 105, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -247,14 +247,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 54 + 105 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -268,7 +268,7 @@ }, { "model": "account.user", - "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", + "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", "fields": { "password": "", "last_login": null, @@ -282,7 +282,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 126, + "partner": 324, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -293,7 +293,7 @@ }, { "model": "account.partner", - "pk": 126, + "pk": 324, "fields": { "name": "Partner 0", "parent": null, @@ -307,7 +307,7 @@ }, { "model": "household.household", - "pk": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "pk": "2534a243-e3ab-4944-84b0-edab2ed4837e", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -316,11 +316,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "unicef_id": "HH-25-0000.0037", + "unicef_id": "HH-25-0000.0120", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", - "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -330,7 +330,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "head_of_household": "a1267a75-7431-4d78-900a-cbd409a023ec", "facility": null, "consent_sign": "", "consent": null, @@ -408,7 +408,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "1fd75092-4131-4470-b56d-b0ebe872e961", + "pk": "85ed0d91-e7c7-4160-b82d-0c404a259933", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -416,10 +416,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "6e5268df-b396-4332-82e2-8bc855912e50", + "imported_by": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -445,7 +445,7 @@ }, { "model": "account.user", - "pk": "6e5268df-b396-4332-82e2-8bc855912e50", + "pk": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", "fields": { "password": "", "last_login": null, @@ -459,7 +459,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 128, + "partner": 326, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -470,7 +470,7 @@ }, { "model": "account.partner", - "pk": 128, + "pk": 326, "fields": { "name": "Partner 1", "parent": null, @@ -484,7 +484,7 @@ }, { "model": "household.individual", - "pk": "1576a0e2-5975-4e80-9f84-9f21ae1adba2", + "pk": "a1267a75-7431-4d78-900a-cbd409a023ec", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -493,12 +493,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "IND-25-0000.0082", + "unicef_id": "IND-25-0000.0262", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", - "registration_data_import": "1fd75092-4131-4470-b56d-b0ebe872e961", - "household": "2d8b2c6b-0d1b-4aaa-aa2b-65daa8691c73", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -583,13 +583,13 @@ }, { "model": "payment.paymentverificationplan", - "pk": "382904a9-f0d2-42c8-b755-48f761c3f1e3", + "pk": "24fa618c-b089-4d11-95c8-736a503aab01", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, - "unicef_id": "PVP-1", - "payment_plan": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "unicef_id": "PVP-3", + "payment_plan": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "status": "PENDING", "verification_channel": "MANUAL", "sampling": "FULL_LIST", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json index 9382c25312e..ca497631d8e 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json @@ -2,20 +2,20 @@ "payment_verification_summary": { "master": { "model": "payment.paymentverificationsummary", - "pk": "65698924-d48d-4ce6-bab9-5e8accd9c8f7", + "pk": "24cfbbf7-3bf3-4b6f-80ce-bbfdb91522c6", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "status": "PENDING", "activation_date": null, "completion_date": null, - "payment_plan": "e6defe83-2c61-4af7-a747-a11b8a42b53b" + "payment_plan": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8" } }, "deps": [ { "model": "payment.paymentplan", - "pk": "e6defe83-2c61-4af7-a747-a11b8a42b53b", + "pk": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -23,8 +23,8 @@ "version": 1735688653315202, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "program_cycle": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "program_cycle": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -34,7 +34,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "085c029f-79ba-4f61-b306-aa7c043737f2", + "created_by": "8faa694b-7d0e-4299-bb64-805814b36c53", "source_payment_plan": null, "storage_file": null, "name": null, @@ -84,7 +84,7 @@ }, { "model": "core.businessarea", - "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", + "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -125,14 +125,14 @@ }, { "model": "program.programcycle", - "pk": "2f949e84-a147-4b2e-9cb4-8e534baa6cab", + "pk": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315201, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -141,18 +141,18 @@ }, { "model": "program.program", - "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "data_collecting_type": 54, - "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "data_collecting_type": 105, + "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", "name": "Program 0", - "code": "ymm3", + "code": "--rq", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -179,7 +179,7 @@ }, { "model": "core.datacollectingtype", - "pk": 54, + "pk": 105, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -194,14 +194,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 54 + 105 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -215,7 +215,7 @@ }, { "model": "account.user", - "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", + "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", "fields": { "password": "", "last_login": null, @@ -229,7 +229,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 126, + "partner": 324, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -240,7 +240,7 @@ }, { "model": "account.partner", - "pk": 126, + "pk": 324, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json index dbe5948a2e8..01d5d66b3d7 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json @@ -2,18 +2,18 @@ "program": { "master": { "model": "program.program", - "pk": "54fdfad6-0798-47db-85f5-4cd431fa356f", + "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "data_collecting_type": 54, - "beneficiary_group": "f36e541a-f053-42c1-961f-35bdb59d3c37", - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", + "data_collecting_type": 105, + "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", "name": "Program 0", - "code": "ymm3", + "code": "--rq", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -41,7 +41,7 @@ "deps": [ { "model": "core.datacollectingtype", - "pk": 54, + "pk": 105, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -56,14 +56,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 54 + 105 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "f36e541a-f053-42c1-961f-35bdb59d3c37", + "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -77,7 +77,7 @@ }, { "model": "core.businessarea", - "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", + "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json index 7fa372f8988..e7b5e9f30f2 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json @@ -2,7 +2,7 @@ "role": { "master": { "model": "account.role", - "pk": "69952268-cd79-40bd-95ae-57f8d57d5c1f", + "pk": "9cd5c32d-68c7-47a2-bcfe-95f61b0606d2", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json index 72f2390005b..b7086dc0fc7 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json @@ -2,14 +2,14 @@ "role_assignment": { "master": { "model": "account.roleassignment", - "pk": "475165b5-543e-43ec-b5ec-ba9df92e7212", + "pk": "514d61d2-2586-418d-a337-2b794b9bf977", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", - "business_area": "77c7b924-0954-42e8-83d2-d53a13027d69", - "user": "085c029f-79ba-4f61-b306-aa7c043737f2", + "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "user": "8faa694b-7d0e-4299-bb64-805814b36c53", "partner": null, - "role": "69952268-cd79-40bd-95ae-57f8d57d5c1f", + "role": "9cd5c32d-68c7-47a2-bcfe-95f61b0606d2", "program": null, "expiry_date": null, "group": null @@ -18,7 +18,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "77c7b924-0954-42e8-83d2-d53a13027d69", + "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -59,7 +59,7 @@ }, { "model": "account.user", - "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", + "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", "fields": { "password": "", "last_login": null, @@ -73,7 +73,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 126, + "partner": 324, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -84,7 +84,7 @@ }, { "model": "account.partner", - "pk": 126, + "pk": 324, "fields": { "name": "Partner 0", "parent": null, @@ -98,7 +98,7 @@ }, { "model": "account.role", - "pk": "69952268-cd79-40bd-95ae-57f8d57d5c1f", + "pk": "9cd5c32d-68c7-47a2-bcfe-95f61b0606d2", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json index d40ab23b1fc..20e1b5621a5 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json @@ -2,7 +2,7 @@ "superuser": { "master": { "model": "account.user", - "pk": "085c029f-79ba-4f61-b306-aa7c043737f2", + "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", "fields": { "password": "", "last_login": null, @@ -16,7 +16,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 126, + "partner": 324, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -28,7 +28,7 @@ "deps": [ { "model": "account.partner", - "pk": 126, + "pk": 324, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/apps/registration_data/test_file/new_reg_data_import.xlsx b/tests/unit/apps/registration_data/test_file/new_reg_data_import.xlsx index 48fae9804b44dc40421069689aecf5f69f7b5b03..ebdc799e18b68f30aa8173de90669a16003635a0 100644 GIT binary patch delta 47704 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 WU~vB~>jS8R9Xu`KnFUxd%>M`RV%81- diff --git a/tests/unit/apps/registration_data/test_rdi_xlsx_create.py b/tests/unit/apps/registration_data/test_rdi_xlsx_create.py index 1b152709d4f..e0039fa2a01 100644 --- a/tests/unit/apps/registration_data/test_rdi_xlsx_create.py +++ b/tests/unit/apps/registration_data/test_rdi_xlsx_create.py @@ -290,10 +290,10 @@ def test_execute( "birth_date": date(1963, 2, 3), "marital_status": "MARRIED", "email": "fake_email_123@mail.com", - "full_name_latin": "Full_local", - "given_name_latin": "Given_local", - "middle_name_latin": "Middle_local", - "family_name_latin": "Family_local", + "given_name_latin": "Some", + "middle_name_latin": "MiddleLatin", + "family_name_latin": "Name", + "full_name_latin": "Some Full Name", } matching_individuals = PendingIndividual.objects.filter(**individual_data) assert matching_individuals.count() == 1 From 3174b662b32725f7aa4b99dda10290c808ed2c6a Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 13:35:29 -0400 Subject: [PATCH 21/33] tests --- ...f18ae6b758e8014a24c7fa039e91.response.json | 20 ++-- ...f18ae6b758e8014a24c7fa039e91.response.json | 88 ++++++++--------- .../business_area.fixture.json | 2 +- .../household.fixture.json | 56 +++++------ .../household_role.fixture.json | 62 ++++++------ .../payment_plan.fixture.json | 36 +++---- .../payment_verification.fixture.json | 98 +++++++++---------- .../payment_verification_summary.fixture.json | 40 ++++---- .../program.fixture.json | 18 ++-- .../role.fixture.json | 2 +- .../role_assignment.fixture.json | 18 ++-- .../superuser.fixture.json | 6 +- 12 files changed, 223 insertions(+), 223 deletions(-) rename tests/unit/api_contract/_api_checker/test_verification_records/{_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ => _api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (81%) rename tests/unit/api_contract/_api_checker/test_verification_records/{_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5_ => _api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_28d7e6f4-7c67-4ab9-bb37-6840912b0ea4_}/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json (86%) diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 81% rename from tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 1837bd2202a..47af73f14fd 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -11,16 +11,16 @@ "Content-Length": "1759" }, "data": { - "next": "http://testserver/api/rest/business-areas/business-area-0/programs/--rq/payment-verifications/0e2f5b0f-afa1-44b6-a111-810e5f414ea8/verifications/?limit=50&offset=50", + "next": "http://testserver/api/rest/business-areas/business-area-0/programs/es1u/payment-verifications/0220b51a-3d67-45f5-aea8-38d230d0052b/verifications/?limit=50&offset=50", "previous": null, "results": [ { - "id": "ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5", + "id": "28d7e6f4-7c67-4ab9-bb37-6840912b0ea4", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "parent_id": "0220b51a-3d67-45f5-aea8-38d230d0052b", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "2534a243-e3ab-4944-84b0-edab2ed4837e", - "household_unicef_id": "HH-25-0000.0120", + "household_id": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", + "household_unicef_id": "HH-25-0000.0001", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -45,17 +45,17 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "a1267a75-7431-4d78-900a-cbd409a023ec", + "collector_id": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { - "id": "e9e93e19-0afc-4f76-abe6-96263a83fab1", + "id": "bcff07b7-a832-4636-9dcb-a411e5e047ad", "received_amount": null, "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-4", + "payment_verification_plan_unicef_id": "PVP-1", "verification_channel": "MANUAL", "admin_url": null, - "version": 1735688653315200, + "version": 1735688653315201, "is_manually_editable": true }, "payment_plan_hard_conflicted": false, @@ -64,7 +64,7 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "--rq", + "program_code": "es1u", "collector_type_display": "Primary collector" } ] diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_28d7e6f4-7c67-4ab9-bb37-6840912b0ea4_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json similarity index 86% rename from tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json rename to tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_28d7e6f4-7c67-4ab9-bb37-6840912b0ea4_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 503fefd00a9..29f77779571 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_--rq_payment-verifications_0e2f5b0f-afa1-44b6-a111-810e5f414ea8_verifications_ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_28d7e6f4-7c67-4ab9-bb37-6840912b0ea4_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -11,12 +11,12 @@ "Content-Length": "11456" }, "data": { - "id": "ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5", + "id": "28d7e6f4-7c67-4ab9-bb37-6840912b0ea4", "unicef_id": "RCPT-BA0000-25-0.000.001", - "parent_id": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "parent_id": "0220b51a-3d67-45f5-aea8-38d230d0052b", "parent_unicef_id": "PP-BA0000-25-00000001", - "household_id": "2534a243-e3ab-4944-84b0-edab2ed4837e", - "household_unicef_id": "HH-25-0000.0120", + "household_id": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", + "household_unicef_id": "HH-25-0000.0001", "household_size": null, "household_admin2": "", "household_status": "ACTIVE", @@ -41,17 +41,17 @@ "hoh_id": null, "hoh_unicef_id": null, "hoh_full_name": null, - "collector_id": "a1267a75-7431-4d78-900a-cbd409a023ec", + "collector_id": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "collector_phone_no": "", "collector_phone_no_alt": "", "verification": { - "id": "e9e93e19-0afc-4f76-abe6-96263a83fab1", + "id": "bcff07b7-a832-4636-9dcb-a411e5e047ad", "received_amount": null, "status": "PENDING", - "payment_verification_plan_unicef_id": "PVP-3", + "payment_verification_plan_unicef_id": "PVP-2", "verification_channel": "MANUAL", "admin_url": null, - "version": 1735688653315201, + "version": 1735688653315200, "is_manually_editable": true }, "payment_plan_hard_conflicted": false, @@ -60,10 +60,10 @@ "payment_plan_soft_conflicted_data": [], "people_individual": null, "program_name": "Program 0", - "program_code": "--rq", + "program_code": "es1u", "collector_type_display": "Primary collector", "parent": { - "id": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "id": "0220b51a-3d67-45f5-aea8-38d230d0052b", "unicef_id": "PP-BA0000-25-00000001", "name": null, "status": "FINISHED", @@ -82,8 +82,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "program": { - "id": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", - "code": "--rq", + "id": "345c56da-354d-46f5-ae2f-298e03dfc5dc", + "code": "es1u", "name": "Program 0", "status": "ACTIVE", "screen_beneficiary": false @@ -94,7 +94,7 @@ "start_date": null, "end_date": null, "program_cycle": { - "id": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", + "id": "89a5baed-4a90-423c-b1cf-8c627c7d6dfb", "title": "Programme Cycle 0" }, "has_payment_list_export_file": false, @@ -105,7 +105,7 @@ "delivery_mechanism": null, "volume_by_delivery_mechanism": [ { - "id": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "id": "0220b51a-3d67-45f5-aea8-38d230d0052b", "delivery_mechanism": null, "volume": null, "volume_usd": null @@ -186,8 +186,8 @@ "available_funds_commitments": [], "payment_verification_plans": [ { - "id": "24fa618c-b089-4d11-95c8-736a503aab01", - "unicef_id": "PVP-3", + "id": "9e53e6e0-5bad-41a2-91ab-bab715f9e4e3", + "unicef_id": "PVP-2", "status": "PENDING", "status_display": "Pending", "verification_channel": "MANUAL", @@ -211,20 +211,20 @@ "age_filter_max": null, "excluded_admin_areas_filter": null, "rapid_pro_flow_id": "", - "admin_url": "/api/unicorn/payment/paymentverificationplan/24fa618c-b089-4d11-95c8-736a503aab01/change/" + "admin_url": "/api/unicorn/payment/paymentverificationplan/9e53e6e0-5bad-41a2-91ab-bab715f9e4e3/change/" } ], - "admin_url": "/api/unicorn/payment/paymentplan/0e2f5b0f-afa1-44b6-a111-810e5f414ea8/change/", + "admin_url": "/api/unicorn/payment/paymentplan/0220b51a-3d67-45f5-aea8-38d230d0052b/change/", "abort_comment": "", "flat_amount_value": null }, - "admin_url": "/api/unicorn/payment/payment/ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5/change/", + "admin_url": "/api/unicorn/payment/payment/28d7e6f4-7c67-4ab9-bb37-6840912b0ea4/change/", "source_payment": null, "household": { - "id": "2534a243-e3ab-4944-84b0-edab2ed4837e", - "unicef_id": "HH-25-0000.0120", + "id": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", + "unicef_id": "HH-25-0000.0001", "head_of_household": { - "id": "a1267a75-7431-4d78-900a-cbd409a023ec", + "id": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "full_name": "Person 0", "full_name_latin": null }, @@ -242,14 +242,14 @@ "sanction_list_confirmed_match": false, "has_duplicates": false, "registration_data_import": { - "id": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "id": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", + "id": "20471dc6-29c5-452f-b3a8-2ca7939d40db", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -262,8 +262,8 @@ "admin_area_title": "", "active_individuals_count": 1, "geopoint": null, - "import_id": "HH-25-0000.0120", - "admin_url": "/api/unicorn/household/household/2534a243-e3ab-4944-84b0-edab2ed4837e/change/", + "import_id": "HH-25-0000.0001", + "admin_url": "/api/unicorn/household/household/aa006d9a-c53c-4f61-ab86-8ca620cba27a/change/", "male_children_count": null, "female_children_count": null, "children_disabled_count": null, @@ -322,10 +322,10 @@ "consent_sharing": [], "roles_in_household": [ { - "id": "3f6b9b87-432e-44ff-97cf-7a731fd37ce0", + "id": "40890bf3-5268-4409-bb5a-4b3b364a922b", "individual": { - "id": "a1267a75-7431-4d78-900a-cbd409a023ec", - "unicef_id": "IND-25-0000.0262" + "id": "aada53d2-d362-42f9-a3d2-d3495424d7f0", + "unicef_id": "IND-25-0000.0001" }, "role": "PRIMARY" } @@ -333,8 +333,8 @@ }, "delivery_mechanism": null, "collector": { - "id": "a1267a75-7431-4d78-900a-cbd409a023ec", - "unicef_id": "IND-25-0000.0262", + "id": "aada53d2-d362-42f9-a3d2-d3495424d7f0", + "unicef_id": "IND-25-0000.0001", "full_name": "Person 0", "given_name": "", "middle_name": "", @@ -351,8 +351,8 @@ "work_status": "NOT_PROVIDED", "pregnant": null, "household": { - "id": "2534a243-e3ab-4944-84b0-edab2ed4837e", - "unicef_id": "HH-25-0000.0120", + "id": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", + "unicef_id": "HH-25-0000.0001", "admin1": null, "admin2": null, "admin3": null, @@ -379,20 +379,20 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.0120", - "program_code": "--rq" + "import_id": "HH-25-0000.0001", + "program_code": "es1u" }, "role": "PRIMARY", "relationship": "", "registration_data_import": { - "id": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "id": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", "name": "RDI 0", "status": "MERGED", "import_date": "2025-01-01T00:00:00Z", "number_of_individuals": 1, "number_of_households": 1, "imported_by": { - "id": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", + "id": "20471dc6-29c5-452f-b3a8-2ca7939d40db", "first_name": "", "last_name": "", "email": "user_1@example.com", @@ -400,15 +400,15 @@ }, "data_source": "XLS" }, - "import_id": "IND-25-0000.0262", - "admin_url": "/api/unicorn/household/individual/a1267a75-7431-4d78-900a-cbd409a023ec/change/", + "import_id": "IND-25-0000.0001", + "admin_url": "/api/unicorn/household/individual/aada53d2-d362-42f9-a3d2-d3495424d7f0/change/", "preferred_language": null, "roles_in_households": [ { - "id": "3f6b9b87-432e-44ff-97cf-7a731fd37ce0", + "id": "40890bf3-5268-4409-bb5a-4b3b364a922b", "household": { - "id": "2534a243-e3ab-4944-84b0-edab2ed4837e", - "unicef_id": "HH-25-0000.0120", + "id": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", + "unicef_id": "HH-25-0000.0001", "admin1": null, "admin2": null, "admin3": null, @@ -435,8 +435,8 @@ "address": "", "village": "", "geopoint": null, - "import_id": "HH-25-0000.0120", - "program_code": "--rq" + "import_id": "HH-25-0000.0001", + "program_code": "es1u" }, "role": "PRIMARY" } diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json index 28da72333a8..36802fb2770 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/business_area.fixture.json @@ -2,7 +2,7 @@ "business_area": { "master": { "model": "core.businessarea", - "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "pk": "afb1921b-c43b-48a1-8834-85e73892e2b7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json index cf54dd1a960..a7369474ee9 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household.fixture.json @@ -2,7 +2,7 @@ "household": { "master": { "model": "household.household", - "pk": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "pk": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -11,11 +11,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "HH-25-0000.0120", + "unicef_id": "HH-25-0000.0001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", - "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", + "registration_data_import": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -25,7 +25,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "a1267a75-7431-4d78-900a-cbd409a023ec", + "head_of_household": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "facility": null, "consent_sign": "", "consent": null, @@ -104,7 +104,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "pk": "afb1921b-c43b-48a1-8834-85e73892e2b7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -145,18 +145,18 @@ }, { "model": "program.program", - "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "pk": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "data_collecting_type": 105, - "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "data_collecting_type": 1, + "beneficiary_group": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", "name": "Program 0", - "code": "--rq", + "code": "es1u", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -183,7 +183,7 @@ }, { "model": "core.datacollectingtype", - "pk": 105, + "pk": 1, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -198,14 +198,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 105 + 1 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", + "pk": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -219,7 +219,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "pk": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -227,10 +227,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", + "imported_by": "20471dc6-29c5-452f-b3a8-2ca7939d40db", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -256,7 +256,7 @@ }, { "model": "account.user", - "pk": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", + "pk": "20471dc6-29c5-452f-b3a8-2ca7939d40db", "fields": { "password": "", "last_login": null, @@ -270,7 +270,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 326, + "partner": 5, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -281,7 +281,7 @@ }, { "model": "account.partner", - "pk": 326, + "pk": 5, "fields": { "name": "Partner 1", "parent": null, @@ -295,7 +295,7 @@ }, { "model": "household.individual", - "pk": "a1267a75-7431-4d78-900a-cbd409a023ec", + "pk": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -304,12 +304,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "unicef_id": "IND-25-0000.0262", + "unicef_id": "IND-25-0000.0001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", - "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", - "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", + "registration_data_import": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", + "household": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", "individual_collection": null, "copied_from": null, "individual_id": "", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json index a1a0937f909..899f1b07c8f 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/household_role.fixture.json @@ -2,7 +2,7 @@ "household_role": { "master": { "model": "household.individualroleinhousehold", - "pk": "3f6b9b87-432e-44ff-97cf-7a731fd37ce0", + "pk": "40890bf3-5268-4409-bb5a-4b3b364a922b", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -10,8 +10,8 @@ "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, - "individual": "a1267a75-7431-4d78-900a-cbd409a023ec", - "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "individual": "aada53d2-d362-42f9-a3d2-d3495424d7f0", + "household": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", "role": "PRIMARY", "copied_from": null } @@ -19,7 +19,7 @@ "deps": [ { "model": "household.individual", - "pk": "a1267a75-7431-4d78-900a-cbd409a023ec", + "pk": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -28,12 +28,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "unicef_id": "IND-25-0000.0262", + "unicef_id": "IND-25-0000.0001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", - "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", - "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", + "registration_data_import": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", + "household": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -109,7 +109,7 @@ }, { "model": "core.businessarea", - "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "pk": "afb1921b-c43b-48a1-8834-85e73892e2b7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -150,18 +150,18 @@ }, { "model": "program.program", - "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "pk": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "data_collecting_type": 105, - "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "data_collecting_type": 1, + "beneficiary_group": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", "name": "Program 0", - "code": "--rq", + "code": "es1u", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -188,7 +188,7 @@ }, { "model": "core.datacollectingtype", - "pk": 105, + "pk": 1, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -203,14 +203,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 105 + 1 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", + "pk": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -224,7 +224,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "pk": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -232,10 +232,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", + "imported_by": "20471dc6-29c5-452f-b3a8-2ca7939d40db", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -261,7 +261,7 @@ }, { "model": "account.user", - "pk": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", + "pk": "20471dc6-29c5-452f-b3a8-2ca7939d40db", "fields": { "password": "", "last_login": null, @@ -275,7 +275,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 326, + "partner": 5, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -286,7 +286,7 @@ }, { "model": "account.partner", - "pk": 326, + "pk": 5, "fields": { "name": "Partner 1", "parent": null, @@ -300,7 +300,7 @@ }, { "model": "household.household", - "pk": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "pk": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -309,11 +309,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315203, - "unicef_id": "HH-25-0000.0120", + "unicef_id": "HH-25-0000.0001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", - "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", + "registration_data_import": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -323,7 +323,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "a1267a75-7431-4d78-900a-cbd409a023ec", + "head_of_household": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "facility": null, "consent_sign": "", "consent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json index afc41a613f8..356d85e828f 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_plan.fixture.json @@ -2,7 +2,7 @@ "payment_plan": { "master": { "model": "payment.paymentplan", - "pk": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "pk": "0220b51a-3d67-45f5-aea8-38d230d0052b", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -10,8 +10,8 @@ "version": 1735688653315201, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program_cycle": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program_cycle": "89a5baed-4a90-423c-b1cf-8c627c7d6dfb", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -21,7 +21,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "8faa694b-7d0e-4299-bb64-805814b36c53", + "created_by": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "source_payment_plan": null, "storage_file": null, "name": null, @@ -72,7 +72,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "pk": "afb1921b-c43b-48a1-8834-85e73892e2b7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -113,14 +113,14 @@ }, { "model": "program.programcycle", - "pk": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", + "pk": "89a5baed-4a90-423c-b1cf-8c627c7d6dfb", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -129,18 +129,18 @@ }, { "model": "program.program", - "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "pk": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315201, - "data_collecting_type": 105, - "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "data_collecting_type": 1, + "beneficiary_group": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", "name": "Program 0", - "code": "--rq", + "code": "es1u", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -167,7 +167,7 @@ }, { "model": "core.datacollectingtype", - "pk": 105, + "pk": 1, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -182,14 +182,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 105 + 1 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", + "pk": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -203,7 +203,7 @@ }, { "model": "account.user", - "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", + "pk": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "fields": { "password": "", "last_login": null, @@ -217,7 +217,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 324, + "partner": 3, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -228,7 +228,7 @@ }, { "model": "account.partner", - "pk": 324, + "pk": 3, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json index 202088eb50f..50d6e145b23 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification.fixture.json @@ -2,13 +2,13 @@ "payment_verification": { "master": { "model": "payment.paymentverification", - "pk": "e9e93e19-0afc-4f76-abe6-96263a83fab1", + "pk": "bcff07b7-a832-4636-9dcb-a411e5e047ad", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, - "payment": "ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5", - "payment_verification_plan": "24fa618c-b089-4d11-95c8-736a503aab01", + "payment": "28d7e6f4-7c67-4ab9-bb37-6840912b0ea4", + "payment_verification_plan": "9e53e6e0-5bad-41a2-91ab-bab715f9e4e3", "status": "PENDING", "status_date": "2025-01-01T00:00:00Z", "received_amount": null, @@ -18,23 +18,23 @@ "deps": [ { "model": "payment.payment", - "pk": "ebe0b1c4-b5de-44e9-bc29-c0b5033d38c5", + "pk": "28d7e6f4-7c67-4ab9-bb37-6840912b0ea4", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "unicef_id": "RCPT-BA0000-25-0.000.001", - "signature_hash": "a3493a9ecf496082d0754050223cbe3b676bab87", + "signature_hash": "86dc9077a0a39c9b8f0af4f8d2c7bfac6ad64e67", "internal_data": {}, - "parent": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "parent": "0220b51a-3d67-45f5-aea8-38d230d0052b", "parent_split": null, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", "program": null, - "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "household": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", "head_of_household": null, "delivery_type": null, "financial_service_provider": null, - "collector": "a1267a75-7431-4d78-900a-cbd409a023ec", + "collector": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "collector_type": "PRIMARY", "source_payment": null, "is_follow_up": false, @@ -68,7 +68,7 @@ }, { "model": "payment.paymentplan", - "pk": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "pk": "0220b51a-3d67-45f5-aea8-38d230d0052b", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -76,8 +76,8 @@ "version": 1735688653315203, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program_cycle": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program_cycle": "89a5baed-4a90-423c-b1cf-8c627c7d6dfb", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -87,7 +87,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "8faa694b-7d0e-4299-bb64-805814b36c53", + "created_by": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "source_payment_plan": null, "storage_file": null, "name": null, @@ -137,7 +137,7 @@ }, { "model": "core.businessarea", - "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "pk": "afb1921b-c43b-48a1-8834-85e73892e2b7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -178,14 +178,14 @@ }, { "model": "program.programcycle", - "pk": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", + "pk": "89a5baed-4a90-423c-b1cf-8c627c7d6dfb", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315202, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -194,18 +194,18 @@ }, { "model": "program.program", - "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "pk": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315205, - "data_collecting_type": 105, - "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "data_collecting_type": 1, + "beneficiary_group": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", "name": "Program 0", - "code": "--rq", + "code": "es1u", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -232,7 +232,7 @@ }, { "model": "core.datacollectingtype", - "pk": 105, + "pk": 1, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -247,14 +247,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 105 + 1 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", + "pk": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -268,7 +268,7 @@ }, { "model": "account.user", - "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", + "pk": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "fields": { "password": "", "last_login": null, @@ -282,7 +282,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 324, + "partner": 3, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -293,7 +293,7 @@ }, { "model": "account.partner", - "pk": 324, + "pk": 3, "fields": { "name": "Partner 0", "parent": null, @@ -307,7 +307,7 @@ }, { "model": "household.household", - "pk": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "pk": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -316,11 +316,11 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315204, - "unicef_id": "HH-25-0000.0120", + "unicef_id": "HH-25-0000.0001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", - "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", + "registration_data_import": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", "household_collection": null, "storage_obj": null, "copied_from": null, @@ -330,7 +330,7 @@ "admin2": null, "admin3": null, "admin4": null, - "head_of_household": "a1267a75-7431-4d78-900a-cbd409a023ec", + "head_of_household": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "facility": null, "consent_sign": "", "consent": null, @@ -408,7 +408,7 @@ }, { "model": "registration_data.registrationdataimport", - "pk": "85ed0d91-e7c7-4160-b82d-0c404a259933", + "pk": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -416,10 +416,10 @@ "name": "RDI 0", "status": "MERGED", "deduplication_engine_status": null, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "import_date": "2025-01-01T00:00:00Z", - "imported_by": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", + "imported_by": "20471dc6-29c5-452f-b3a8-2ca7939d40db", "data_source": "XLS", "import_data": null, "import_from_ids": null, @@ -445,7 +445,7 @@ }, { "model": "account.user", - "pk": "147d7eb3-8ab9-42d5-ada4-114fefaf3b6c", + "pk": "20471dc6-29c5-452f-b3a8-2ca7939d40db", "fields": { "password": "", "last_login": null, @@ -459,7 +459,7 @@ "azure_id": null, "display_name": "user_1", "status": "INVITED", - "partner": 326, + "partner": 5, "email": "user_1@example.com", "custom_fields": {}, "job_title": "", @@ -470,7 +470,7 @@ }, { "model": "account.partner", - "pk": 326, + "pk": 5, "fields": { "name": "Partner 1", "parent": null, @@ -484,7 +484,7 @@ }, { "model": "household.individual", - "pk": "a1267a75-7431-4d78-900a-cbd409a023ec", + "pk": "aada53d2-d362-42f9-a3d2-d3495424d7f0", "fields": { "rdi_merge_status": "MERGED", "is_removed": false, @@ -493,12 +493,12 @@ "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "unicef_id": "IND-25-0000.0262", + "unicef_id": "IND-25-0000.0001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", - "registration_data_import": "85ed0d91-e7c7-4160-b82d-0c404a259933", - "household": "2534a243-e3ab-4944-84b0-edab2ed4837e", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", + "registration_data_import": "0a73fa2f-49b9-448e-8f1f-425ffdd3ffec", + "household": "aa006d9a-c53c-4f61-ab86-8ca620cba27a", "individual_collection": null, "copied_from": null, "individual_id": "", @@ -583,13 +583,13 @@ }, { "model": "payment.paymentverificationplan", - "pk": "24fa618c-b089-4d11-95c8-736a503aab01", + "pk": "9e53e6e0-5bad-41a2-91ab-bab715f9e4e3", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315200, - "unicef_id": "PVP-3", - "payment_plan": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "unicef_id": "PVP-1", + "payment_plan": "0220b51a-3d67-45f5-aea8-38d230d0052b", "status": "PENDING", "verification_channel": "MANUAL", "sampling": "FULL_LIST", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json index ca497631d8e..bd3f77da467 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/payment_verification_summary.fixture.json @@ -2,20 +2,20 @@ "payment_verification_summary": { "master": { "model": "payment.paymentverificationsummary", - "pk": "24cfbbf7-3bf3-4b6f-80ce-bbfdb91522c6", + "pk": "de023795-0914-46bb-b4c5-f2e93ebe869c", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "status": "PENDING", "activation_date": null, "completion_date": null, - "payment_plan": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8" + "payment_plan": "0220b51a-3d67-45f5-aea8-38d230d0052b" } }, "deps": [ { "model": "payment.paymentplan", - "pk": "0e2f5b0f-afa1-44b6-a111-810e5f414ea8", + "pk": "0220b51a-3d67-45f5-aea8-38d230d0052b", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", @@ -23,8 +23,8 @@ "version": 1735688653315202, "unicef_id": "PP-BA0000-25-00000001", "internal_data": {}, - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "program_cycle": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "program_cycle": "89a5baed-4a90-423c-b1cf-8c627c7d6dfb", "delivery_mechanism": null, "financial_service_provider": null, "imported_file": null, @@ -34,7 +34,7 @@ "reconciliation_import_file": null, "steficon_rule": null, "steficon_rule_targeting": null, - "created_by": "8faa694b-7d0e-4299-bb64-805814b36c53", + "created_by": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "source_payment_plan": null, "storage_file": null, "name": null, @@ -84,7 +84,7 @@ }, { "model": "core.businessarea", - "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "pk": "afb1921b-c43b-48a1-8834-85e73892e2b7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -125,14 +125,14 @@ }, { "model": "program.programcycle", - "pk": "c7ee5520-b3db-4384-a7a9-ee27cbd28e3d", + "pk": "89a5baed-4a90-423c-b1cf-8c627c7d6dfb", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "version": 1735688653315201, "unicef_id": "PC-BA0000-25-000001", "title": "Programme Cycle 0", - "program": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "program": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "status": "ACTIVE", "start_date": "2025-01-01", "end_date": null, @@ -141,18 +141,18 @@ }, { "model": "program.program", - "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "pk": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315202, - "data_collecting_type": 105, - "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "data_collecting_type": 1, + "beneficiary_group": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", "name": "Program 0", - "code": "--rq", + "code": "es1u", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -179,7 +179,7 @@ }, { "model": "core.datacollectingtype", - "pk": 105, + "pk": 1, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -194,14 +194,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 105 + 1 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", + "pk": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -215,7 +215,7 @@ }, { "model": "account.user", - "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", + "pk": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "fields": { "password": "", "last_login": null, @@ -229,7 +229,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 324, + "partner": 3, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -240,7 +240,7 @@ }, { "model": "account.partner", - "pk": 324, + "pk": 3, "fields": { "name": "Partner 0", "parent": null, diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json index 01d5d66b3d7..029139f8016 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/program.fixture.json @@ -2,18 +2,18 @@ "program": { "master": { "model": "program.program", - "pk": "ad281f45-5ee7-447c-9ad7-9b1daacc49e2", + "pk": "345c56da-354d-46f5-ae2f-298e03dfc5dc", "fields": { "is_removed": false, "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", "last_sync_at": null, "version": 1735688653315200, - "data_collecting_type": 105, - "beneficiary_group": "ad780e26-a527-41d5-bb7b-346807643c7f", - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "data_collecting_type": 1, + "beneficiary_group": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", "name": "Program 0", - "code": "--rq", + "code": "es1u", "status": "ACTIVE", "description": "", "start_date": "2025-01-01", @@ -41,7 +41,7 @@ "deps": [ { "model": "core.datacollectingtype", - "pk": 105, + "pk": 1, "fields": { "created": "2025-01-01T00:00:00Z", "modified": "2025-01-01T00:00:00Z", @@ -56,14 +56,14 @@ "recalculate_composition": false, "weight": 0, "compatible_types": [ - 105 + 1 ], "limit_to": [] } }, { "model": "program.beneficiarygroup", - "pk": "ad780e26-a527-41d5-bb7b-346807643c7f", + "pk": "2577ad28-bca8-4c24-b952-ba5fe63f8ae6", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -77,7 +77,7 @@ }, { "model": "core.businessarea", - "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "pk": "afb1921b-c43b-48a1-8834-85e73892e2b7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json index e7b5e9f30f2..c432f865b45 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role.fixture.json @@ -2,7 +2,7 @@ "role": { "master": { "model": "account.role", - "pk": "9cd5c32d-68c7-47a2-bcfe-95f61b0606d2", + "pk": "df7031b6-f3c3-4a7b-b80e-9b64965aaf2d", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json index b7086dc0fc7..8e4b55f5870 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/role_assignment.fixture.json @@ -2,14 +2,14 @@ "role_assignment": { "master": { "model": "account.roleassignment", - "pk": "514d61d2-2586-418d-a337-2b794b9bf977", + "pk": "b29161e1-4081-44fd-a060-db339fb8bf75", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", - "business_area": "92d69520-0d24-43c8-940b-99e9b1f791e7", - "user": "8faa694b-7d0e-4299-bb64-805814b36c53", + "business_area": "afb1921b-c43b-48a1-8834-85e73892e2b7", + "user": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "partner": null, - "role": "9cd5c32d-68c7-47a2-bcfe-95f61b0606d2", + "role": "df7031b6-f3c3-4a7b-b80e-9b64965aaf2d", "program": null, "expiry_date": null, "group": null @@ -18,7 +18,7 @@ "deps": [ { "model": "core.businessarea", - "pk": "92d69520-0d24-43c8-940b-99e9b1f791e7", + "pk": "afb1921b-c43b-48a1-8834-85e73892e2b7", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", @@ -59,7 +59,7 @@ }, { "model": "account.user", - "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", + "pk": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "fields": { "password": "", "last_login": null, @@ -73,7 +73,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 324, + "partner": 3, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -84,7 +84,7 @@ }, { "model": "account.partner", - "pk": 324, + "pk": 3, "fields": { "name": "Partner 0", "parent": null, @@ -98,7 +98,7 @@ }, { "model": "account.role", - "pk": "9cd5c32d-68c7-47a2-bcfe-95f61b0606d2", + "pk": "df7031b6-f3c3-4a7b-b80e-9b64965aaf2d", "fields": { "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z", diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json index 20e1b5621a5..48efc790528 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/superuser.fixture.json @@ -2,7 +2,7 @@ "superuser": { "master": { "model": "account.user", - "pk": "8faa694b-7d0e-4299-bb64-805814b36c53", + "pk": "274d3b31-0cad-4549-949b-97cf8f1f9b17", "fields": { "password": "", "last_login": null, @@ -16,7 +16,7 @@ "azure_id": null, "display_name": "user_0", "status": "INVITED", - "partner": 324, + "partner": 3, "email": "user_0@example.com", "custom_fields": {}, "job_title": "", @@ -28,7 +28,7 @@ "deps": [ { "model": "account.partner", - "pk": 324, + "pk": 3, "fields": { "name": "Partner 0", "parent": null, From e74c94c56c4dfb2d6991d860a242aabe58e2a78d Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 14:56:23 -0400 Subject: [PATCH 22/33] upd test_kobo_template_upload --- tests/unit/apps/core/test_kobo_template_upload.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/apps/core/test_kobo_template_upload.py b/tests/unit/apps/core/test_kobo_template_upload.py index 36cfce04782..e7d40878143 100644 --- a/tests/unit/apps/core/test_kobo_template_upload.py +++ b/tests/unit/apps/core/test_kobo_template_upload.py @@ -87,7 +87,7 @@ def test_upload_invalid_template_returns_expected_errors( ): mock_country_choices.return_value = _get_all_country_choices() - with django_assert_num_queries(10): + with django_assert_num_queries(9): response = _upload_file(client, admin_user, "kobo-template-invalid.xlsx") form = response.context["form"] @@ -163,7 +163,7 @@ def test_upload_template_with_validation_error_shows_errors_in_response( ): mock_country_choices.return_value = _get_all_country_choices() - with django_assert_num_queries(10): + with django_assert_num_queries(9): response = _upload_file(client, admin_user, "kobo-template-invalid.xlsx") assert "Field: residence_status_h_c" in response.text From 2fb0e53595907cd283fffb92394da1a849502c37 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 15:16:58 -0400 Subject: [PATCH 23/33] tests & fe scheema --- src/frontend/src/restgenerated/index.ts | 1 - .../restgenerated/models/AddIndividualData.ts | 8 +- .../src/restgenerated/models/CountriesEnum.ts | 508 ------------------ .../restgenerated/models/HeadOfHousehold.ts | 4 +- .../restgenerated/models/HouseholdMember.ts | 4 +- .../src/restgenerated/models/Individual.ts | 16 +- .../restgenerated/models/IndividualDetail.ts | 16 +- .../restgenerated/models/IndividualList.ts | 4 +- .../restgenerated/models/IndividualSimple.ts | 4 +- .../models/IndividualUpdateData.ts | 8 +- .../src/restgenerated/models/PaymentDetail.ts | 8 + .../src/restgenerated/models/PaymentList.ts | 8 + .../src/restgenerated/models/PushPeople.ts | 16 +- ...f18ae6b758e8014a24c7fa039e91.response.json | 2 +- .../apps/core/test_kobo_template_upload.py | 2 +- 15 files changed, 58 insertions(+), 551 deletions(-) delete mode 100644 src/frontend/src/restgenerated/models/CountriesEnum.ts diff --git a/src/frontend/src/restgenerated/index.ts b/src/frontend/src/restgenerated/index.ts index 6a0f3a8bba2..a18bb4ad421 100644 --- a/src/frontend/src/restgenerated/index.ts +++ b/src/frontend/src/restgenerated/index.ts @@ -54,7 +54,6 @@ export { ComparisonMethodEnum as ComparisonMethodEnumCamelCase } from './models/ export { ConsentSharingEnum as ConsentSharingEnumCamelCase } from './models/ConsentSharingEnum'; export type { CoreFieldChoice as CoreFieldChoiceCamelCase } from './models/CoreFieldChoice'; export type { CountResponse as CountResponseCamelCase } from './models/CountResponse'; -export { CountriesEnum as CountriesEnumCamelCase } from './models/CountriesEnum'; export type { Country as CountryCamelCase } from './models/Country'; export { CountryEnum as CountryEnumCamelCase } from './models/CountryEnum'; export { CountryOriginEnum as CountryOriginEnumCamelCase } from './models/CountryOriginEnum'; diff --git a/src/frontend/src/restgenerated/models/AddIndividualData.ts b/src/frontend/src/restgenerated/models/AddIndividualData.ts index b970acdff48..a48bc0439c9 100644 --- a/src/frontend/src/restgenerated/models/AddIndividualData.ts +++ b/src/frontend/src/restgenerated/models/AddIndividualData.ts @@ -10,10 +10,10 @@ export type AddIndividualData = { givenName?: string; middleName?: string; familyName?: string; - fullNameLocal?: string; - givenNameLocal?: string; - middleNameLocal?: string; - familyNameLocal?: string; + fullNameLatin?: string; + givenNameLatin?: string; + middleNameLatin?: string; + familyNameLatin?: string; sex: string; birthDate: string; estimatedBirthDate: boolean; diff --git a/src/frontend/src/restgenerated/models/CountriesEnum.ts b/src/frontend/src/restgenerated/models/CountriesEnum.ts deleted file mode 100644 index f0e84a97595..00000000000 --- a/src/frontend/src/restgenerated/models/CountriesEnum.ts +++ /dev/null @@ -1,508 +0,0 @@ -/* generated using openapi-typescript-codegen -- do not edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -/** - * * `AFG` - Afghanistan - * * `ALB` - Albania - * * `DZA` - Algeria - * * `ASM` - American Samoa - * * `AND` - Andorra - * * `AGO` - Angola - * * `AIA` - Anguilla - * * `ATA` - Antarctica - * * `ATG` - Antigua and Barbuda - * * `ARG` - Argentina - * * `ARM` - Armenia - * * `ABW` - Aruba - * * `AUS` - Australia - * * `AUT` - Austria - * * `AZE` - Azerbaijan - * * `BHS` - Bahamas (The) - * * `BHR` - Bahrain - * * `BGD` - Bangladesh - * * `BRB` - Barbados - * * `BLR` - Belarus - * * `BEL` - Belgium - * * `BLZ` - Belize - * * `BEN` - Benin - * * `BMU` - Bermuda - * * `BTN` - Bhutan - * * `BOL` - Bolivia - * * `BES` - Bonaire, Sint Eustatius and Saba - * * `BIH` - Bosnia and Herzegovina - * * `BWA` - Botswana - * * `BVT` - Bouvet Island - * * `BRA` - Brazil - * * `IOT` - British Indian Ocean Territory - * * `BRN` - Brunei - * * `BGR` - Bulgaria - * * `BFA` - Burkina Faso - * * `BDI` - Burundi - * * `CPV` - Cabo Verde - * * `KHM` - Cambodia - * * `CMR` - Cameroon - * * `CAN` - Canada - * * `CYM` - Cayman Islands - * * `CAF` - Central African Republic - * * `TCD` - Chad - * * `CHL` - Chile - * * `CHN` - China - * * `CXR` - Christmas Island - * * `CCK` - Cocos (Keeling) Islands - * * `COL` - Colombia - * * `COM` - Comoros - * * `COG` - Congo - * * `COK` - Cook Islands - * * `CRI` - Costa Rica - * * `HRV` - Croatia - * * `CUB` - Cuba - * * `CUW` - Curaçao - * * `CYP` - Cyprus - * * `CZE` - Czechia - * * `CIV` - Côte d'Ivoire - * * `COD` - Democratic Republic of the Congo - * * `DNK` - Denmark - * * `DJI` - Djibouti - * * `DMA` - Dominica - * * `DOM` - Dominican Republic - * * `ECU` - Ecuador - * * `EGY` - Egypt - * * `SLV` - El Salvador - * * `GNQ` - Equatorial Guinea - * * `ERI` - Eritrea - * * `EST` - Estonia - * * `SWZ` - Eswatini - * * `ETH` - Ethiopia - * * `FLK` - Falkland Islands (Malvinas) - * * `FRO` - Faroe Islands - * * `FJI` - Fiji - * * `FIN` - Finland - * * `FRA` - France - * * `GUF` - French Guiana - * * `PYF` - French Polynesia - * * `ATF` - French Southern Territories - * * `GAB` - Gabon - * * `GMB` - Gambia - * * `GEO` - Georgia - * * `DEU` - Germany - * * `GHA` - Ghana - * * `GIB` - Gibraltar - * * `GRC` - Greece - * * `GRL` - Greenland - * * `GRD` - Grenada - * * `GLP` - Guadeloupe - * * `GUM` - Guam - * * `GTM` - Guatemala - * * `GGY` - Guernsey - * * `GIN` - Guinea - * * `GNB` - Guinea-Bissau - * * `GUY` - Guyana - * * `HTI` - Haiti - * * `HMD` - Heard Island and McDonald Islands - * * `HND` - Honduras - * * `HKG` - Hong Kong - * * `HUN` - Hungary - * * `ISL` - Iceland - * * `IND` - India - * * `IDN` - Indonesia - * * `IRN` - Iran - * * `IRQ` - Iraq - * * `IRL` - Ireland - * * `IMN` - Isle of Man - * * `ISR` - Israel - * * `ITA` - Italy - * * `JAM` - Jamaica - * * `JPN` - Japan - * * `JEY` - Jersey - * * `JOR` - Jordan - * * `KAZ` - Kazakhstan - * * `KEN` - Kenya - * * `KIR` - Kiribati - * * `KWT` - Kuwait - * * `KGZ` - Kyrgyzstan - * * `LAO` - Laos - * * `LVA` - Latvia - * * `LBN` - Lebanon - * * `LSO` - Lesotho - * * `LBR` - Liberia - * * `LBY` - Libya - * * `LIE` - Liechtenstein - * * `LTU` - Lithuania - * * `LUX` - Luxembourg - * * `MAC` - Macao - * * `MDG` - Madagascar - * * `MWI` - Malawi - * * `MYS` - Malaysia - * * `MDV` - Maldives - * * `MLI` - Mali - * * `MLT` - Malta - * * `MHL` - Marshall Islands - * * `MTQ` - Martinique - * * `MRT` - Mauritania - * * `MUS` - Mauritius - * * `MYT` - Mayotte - * * `MEX` - Mexico - * * `FSM` - Micronesia - * * `MDA` - Moldova - * * `MCO` - Monaco - * * `MNG` - Mongolia - * * `MNE` - Montenegro - * * `MSR` - Montserrat - * * `MAR` - Morocco - * * `MOZ` - Mozambique - * * `MMR` - Myanmar - * * `NAM` - Namibia - * * `NRU` - Nauru - * * `NPL` - Nepal - * * `NLD` - Netherlands - * * `NCL` - New Caledonia - * * `NZL` - New Zealand - * * `NIC` - Nicaragua - * * `NER` - Niger - * * `NGA` - Nigeria - * * `NIU` - Niue - * * `NFK` - Norfolk Island - * * `PRK` - North Korea - * * `MKD` - North Macedonia - * * `MNP` - Northern Mariana Islands - * * `NOR` - Norway - * * `OMN` - Oman - * * `PAK` - Pakistan - * * `PLW` - Palau - * * `PSE` - Palestine - * * `PAN` - Panama - * * `PNG` - Papua New Guinea - * * `PRY` - Paraguay - * * `PER` - Peru - * * `PHL` - Philippines - * * `PCN` - Pitcairn - * * `POL` - Poland - * * `PRT` - Portugal - * * `PRI` - Puerto Rico - * * `QAT` - Qatar - * * `ROU` - Romania - * * `RUS` - Russia - * * `RWA` - Rwanda - * * `REU` - Réunion - * * `BLM` - Saint Barthélemy - * * `SHN` - Saint Helena - * * `KNA` - Saint Kitts and Nevis - * * `LCA` - Saint Lucia - * * `MAF` - Saint Martin (French part) - * * `SPM` - Saint Pierre and Miquelon - * * `VCT` - Saint Vincent and the Grenadines - * * `WSM` - Samoa - * * `SMR` - San Marino - * * `STP` - Sao Tome and Principe - * * `SAU` - Saudi Arabia - * * `SEN` - Senegal - * * `SRB` - Serbia - * * `SYC` - Seychelles - * * `SLE` - Sierra Leone - * * `SGP` - Singapore - * * `SXM` - Sint Maarten (Dutch part) - * * `SVK` - Slovakia - * * `SVN` - Slovenia - * * `SLB` - Solomon Islands - * * `SOM` - Somalia - * * `ZAF` - South Africa - * * `SGS` - South Georgia - * * `KOR` - South Korea - * * `SSD` - South Sudan - * * `ESP` - Spain - * * `LKA` - Sri Lanka - * * `SDN` - Sudan - * * `SUR` - Suriname - * * `SJM` - Svalbard and Jan Mayen - * * `SWE` - Sweden - * * `CHE` - Switzerland - * * `SYR` - Syria - * * `TWN` - Taiwan - * * `TJK` - Tajikistan - * * `TZA` - Tanzania - * * `THA` - Thailand - * * `TLS` - Timor-Leste - * * `TGO` - Togo - * * `TKL` - Tokelau - * * `TON` - Tonga - * * `TTO` - Trinidad and Tobago - * * `TUN` - Tunisia - * * `TKM` - Turkmenistan - * * `TCA` - Turks and Caicos Islands - * * `TUV` - Tuvalu - * * `TUR` - Türkiye - * * `UGA` - Uganda - * * `UKR` - Ukraine - * * `ARE` - United Arab Emirates - * * `GBR` - United Kingdom - * * `UMI` - United States Minor Outlying Islands - * * `USA` - United States of America - * * `U` - Unknown or Not Applicable - * * `URY` - Uruguay - * * `UZB` - Uzbekistan - * * `VUT` - Vanuatu - * * `VAT` - Vatican City - * * `VEN` - Venezuela - * * `VNM` - Vietnam - * * `VGB` - Virgin Islands (British) - * * `VIR` - Virgin Islands (U.S.) - * * `WLF` - Wallis and Futuna - * * `ESH` - Western Sahara - * * `YEM` - Yemen - * * `ZMB` - Zambia - * * `ZWE` - Zimbabwe - * * `ALA` - Åland Islands - */ -export enum CountriesEnum { - AFG = 'AFG', - ALB = 'ALB', - DZA = 'DZA', - ASM = 'ASM', - AND = 'AND', - AGO = 'AGO', - AIA = 'AIA', - ATA = 'ATA', - ATG = 'ATG', - ARG = 'ARG', - ARM = 'ARM', - ABW = 'ABW', - AUS = 'AUS', - AUT = 'AUT', - AZE = 'AZE', - BHS = 'BHS', - BHR = 'BHR', - BGD = 'BGD', - BRB = 'BRB', - BLR = 'BLR', - BEL = 'BEL', - BLZ = 'BLZ', - BEN = 'BEN', - BMU = 'BMU', - BTN = 'BTN', - BOL = 'BOL', - BES = 'BES', - BIH = 'BIH', - BWA = 'BWA', - BVT = 'BVT', - BRA = 'BRA', - IOT = 'IOT', - BRN = 'BRN', - BGR = 'BGR', - BFA = 'BFA', - BDI = 'BDI', - CPV = 'CPV', - KHM = 'KHM', - CMR = 'CMR', - CAN = 'CAN', - CYM = 'CYM', - CAF = 'CAF', - TCD = 'TCD', - CHL = 'CHL', - CHN = 'CHN', - CXR = 'CXR', - CCK = 'CCK', - COL = 'COL', - COM = 'COM', - COG = 'COG', - COK = 'COK', - CRI = 'CRI', - HRV = 'HRV', - CUB = 'CUB', - CUW = 'CUW', - CYP = 'CYP', - CZE = 'CZE', - CIV = 'CIV', - COD = 'COD', - DNK = 'DNK', - DJI = 'DJI', - DMA = 'DMA', - DOM = 'DOM', - ECU = 'ECU', - EGY = 'EGY', - SLV = 'SLV', - GNQ = 'GNQ', - ERI = 'ERI', - EST = 'EST', - SWZ = 'SWZ', - ETH = 'ETH', - FLK = 'FLK', - FRO = 'FRO', - FJI = 'FJI', - FIN = 'FIN', - FRA = 'FRA', - GUF = 'GUF', - PYF = 'PYF', - ATF = 'ATF', - GAB = 'GAB', - GMB = 'GMB', - GEO = 'GEO', - DEU = 'DEU', - GHA = 'GHA', - GIB = 'GIB', - GRC = 'GRC', - GRL = 'GRL', - GRD = 'GRD', - GLP = 'GLP', - GUM = 'GUM', - GTM = 'GTM', - GGY = 'GGY', - GIN = 'GIN', - GNB = 'GNB', - GUY = 'GUY', - HTI = 'HTI', - HMD = 'HMD', - HND = 'HND', - HKG = 'HKG', - HUN = 'HUN', - ISL = 'ISL', - IND = 'IND', - IDN = 'IDN', - IRN = 'IRN', - IRQ = 'IRQ', - IRL = 'IRL', - IMN = 'IMN', - ISR = 'ISR', - ITA = 'ITA', - JAM = 'JAM', - JPN = 'JPN', - JEY = 'JEY', - JOR = 'JOR', - KAZ = 'KAZ', - KEN = 'KEN', - KIR = 'KIR', - KWT = 'KWT', - KGZ = 'KGZ', - LAO = 'LAO', - LVA = 'LVA', - LBN = 'LBN', - LSO = 'LSO', - LBR = 'LBR', - LBY = 'LBY', - LIE = 'LIE', - LTU = 'LTU', - LUX = 'LUX', - MAC = 'MAC', - MDG = 'MDG', - MWI = 'MWI', - MYS = 'MYS', - MDV = 'MDV', - MLI = 'MLI', - MLT = 'MLT', - MHL = 'MHL', - MTQ = 'MTQ', - MRT = 'MRT', - MUS = 'MUS', - MYT = 'MYT', - MEX = 'MEX', - FSM = 'FSM', - MDA = 'MDA', - MCO = 'MCO', - MNG = 'MNG', - MNE = 'MNE', - MSR = 'MSR', - MAR = 'MAR', - MOZ = 'MOZ', - MMR = 'MMR', - NAM = 'NAM', - NRU = 'NRU', - NPL = 'NPL', - NLD = 'NLD', - NCL = 'NCL', - NZL = 'NZL', - NIC = 'NIC', - NER = 'NER', - NGA = 'NGA', - NIU = 'NIU', - NFK = 'NFK', - PRK = 'PRK', - MKD = 'MKD', - MNP = 'MNP', - NOR = 'NOR', - OMN = 'OMN', - PAK = 'PAK', - PLW = 'PLW', - PSE = 'PSE', - PAN = 'PAN', - PNG = 'PNG', - PRY = 'PRY', - PER = 'PER', - PHL = 'PHL', - PCN = 'PCN', - POL = 'POL', - PRT = 'PRT', - PRI = 'PRI', - QAT = 'QAT', - ROU = 'ROU', - RUS = 'RUS', - RWA = 'RWA', - REU = 'REU', - BLM = 'BLM', - SHN = 'SHN', - KNA = 'KNA', - LCA = 'LCA', - MAF = 'MAF', - SPM = 'SPM', - VCT = 'VCT', - WSM = 'WSM', - SMR = 'SMR', - STP = 'STP', - SAU = 'SAU', - SEN = 'SEN', - SRB = 'SRB', - SYC = 'SYC', - SLE = 'SLE', - SGP = 'SGP', - SXM = 'SXM', - SVK = 'SVK', - SVN = 'SVN', - SLB = 'SLB', - SOM = 'SOM', - ZAF = 'ZAF', - SGS = 'SGS', - KOR = 'KOR', - SSD = 'SSD', - ESP = 'ESP', - LKA = 'LKA', - SDN = 'SDN', - SUR = 'SUR', - SJM = 'SJM', - SWE = 'SWE', - CHE = 'CHE', - SYR = 'SYR', - TWN = 'TWN', - TJK = 'TJK', - TZA = 'TZA', - THA = 'THA', - TLS = 'TLS', - TGO = 'TGO', - TKL = 'TKL', - TON = 'TON', - TTO = 'TTO', - TUN = 'TUN', - TKM = 'TKM', - TCA = 'TCA', - TUV = 'TUV', - TUR = 'TUR', - UGA = 'UGA', - UKR = 'UKR', - ARE = 'ARE', - GBR = 'GBR', - UMI = 'UMI', - USA = 'USA', - U = 'U', - URY = 'URY', - UZB = 'UZB', - VUT = 'VUT', - VAT = 'VAT', - VEN = 'VEN', - VNM = 'VNM', - VGB = 'VGB', - VIR = 'VIR', - WLF = 'WLF', - ESH = 'ESH', - YEM = 'YEM', - ZMB = 'ZMB', - ZWE = 'ZWE', - ALA = 'ALA', -} diff --git a/src/frontend/src/restgenerated/models/HeadOfHousehold.ts b/src/frontend/src/restgenerated/models/HeadOfHousehold.ts index c731fc4b6e0..410004e3a6f 100644 --- a/src/frontend/src/restgenerated/models/HeadOfHousehold.ts +++ b/src/frontend/src/restgenerated/models/HeadOfHousehold.ts @@ -9,8 +9,8 @@ export type HeadOfHousehold = { */ fullName: string; /** - * Full Local Name of the Beneficiary + * Full name of the Beneficiary Latin */ - fullNameLocal?: string | null; + fullNameLatin?: string | null; }; diff --git a/src/frontend/src/restgenerated/models/HouseholdMember.ts b/src/frontend/src/restgenerated/models/HouseholdMember.ts index 359563f18af..8dfd4434474 100644 --- a/src/frontend/src/restgenerated/models/HouseholdMember.ts +++ b/src/frontend/src/restgenerated/models/HouseholdMember.ts @@ -13,9 +13,9 @@ export type HouseholdMember = { */ fullName: string; /** - * Full Local Name of the Beneficiary + * Full name of the Beneficiary Latin */ - fullNameLocal?: string | null; + fullNameLatin?: string | null; readonly role: string | null; /** * This represents the MEMBER relationship. can be blank diff --git a/src/frontend/src/restgenerated/models/Individual.ts b/src/frontend/src/restgenerated/models/Individual.ts index cf8842976a7..7140b353419 100644 --- a/src/frontend/src/restgenerated/models/Individual.ts +++ b/src/frontend/src/restgenerated/models/Individual.ts @@ -54,21 +54,21 @@ export type Individual = { */ familyName?: string; /** - * Full Local Name of the Beneficiary + * Full name of the Beneficiary Latin */ - fullNameLocal?: string | null; + fullNameLatin?: string | null; /** - * First local name of the Beneficiary + * First name of the Beneficiary Latin */ - givenNameLocal?: string | null; + givenNameLatin?: string | null; /** - * Middle local name of the Beneficiary + * Middle name of the Beneficiary Latin */ - middleNameLocal?: string | null; + middleNameLatin?: string | null; /** - * Last local name of the Beneficiary + * Last name of the Beneficiary Latin */ - familyNameLocal?: string | null; + familyNameLatin?: string | null; /** * Estimated birth date flag */ diff --git a/src/frontend/src/restgenerated/models/IndividualDetail.ts b/src/frontend/src/restgenerated/models/IndividualDetail.ts index cfd9df4787f..a073b73f53c 100644 --- a/src/frontend/src/restgenerated/models/IndividualDetail.ts +++ b/src/frontend/src/restgenerated/models/IndividualDetail.ts @@ -43,21 +43,21 @@ export type IndividualDetail = { */ familyName?: string; /** - * Full Local Name of the Beneficiary + * Full name of the Beneficiary Latin */ - fullNameLocal?: string | null; + fullNameLatin?: string | null; /** - * First local name of the Beneficiary + * First name of the Beneficiary Latin */ - givenNameLocal?: string | null; + givenNameLatin?: string | null; /** - * Middle local name of the Beneficiary + * Middle name of the Beneficiary Latin */ - middleNameLocal?: string | null; + middleNameLatin?: string | null; /** - * Last local name of the Beneficiary + * Last name of the Beneficiary Latin */ - familyNameLocal?: string | null; + familyNameLatin?: string | null; /** * Beneficiary gender * diff --git a/src/frontend/src/restgenerated/models/IndividualList.ts b/src/frontend/src/restgenerated/models/IndividualList.ts index 83a90da8118..46b96739b32 100644 --- a/src/frontend/src/restgenerated/models/IndividualList.ts +++ b/src/frontend/src/restgenerated/models/IndividualList.ts @@ -20,9 +20,9 @@ export type IndividualList = { */ fullName: string; /** - * Full Local Name of the Beneficiary + * Full name of the Beneficiary Latin */ - fullNameLocal?: string | null; + fullNameLatin?: string | null; household: IndividualListHousehold; readonly status: string; /** diff --git a/src/frontend/src/restgenerated/models/IndividualSimple.ts b/src/frontend/src/restgenerated/models/IndividualSimple.ts index e80532cd715..67d4381fd53 100644 --- a/src/frontend/src/restgenerated/models/IndividualSimple.ts +++ b/src/frontend/src/restgenerated/models/IndividualSimple.ts @@ -12,9 +12,9 @@ export type IndividualSimple = { */ fullName: string; /** - * Full Local Name of the Beneficiary + * Full name of the Beneficiary Latin */ - fullNameLocal?: string | null; + fullNameLatin?: string | null; household: HouseholdSimple; readonly rolesInHouseholds: Record; /** diff --git a/src/frontend/src/restgenerated/models/IndividualUpdateData.ts b/src/frontend/src/restgenerated/models/IndividualUpdateData.ts index 396bc52406a..e9d5aa83368 100644 --- a/src/frontend/src/restgenerated/models/IndividualUpdateData.ts +++ b/src/frontend/src/restgenerated/models/IndividualUpdateData.ts @@ -14,10 +14,10 @@ export type IndividualUpdateData = { givenName?: string; middleName?: string; familyName?: string; - fullNameLocal?: string; - givenNameLocal?: string; - middleNameLocal?: string; - familyNameLocal?: string; + fullNameLatin?: string; + givenNameLatin?: string; + middleNameLatin?: string; + familyNameLatin?: string; sex?: string; birthDate?: string; estimatedBirthDate?: boolean; diff --git a/src/frontend/src/restgenerated/models/PaymentDetail.ts b/src/frontend/src/restgenerated/models/PaymentDetail.ts index 61b620342c3..b26f533c133 100644 --- a/src/frontend/src/restgenerated/models/PaymentDetail.ts +++ b/src/frontend/src/restgenerated/models/PaymentDetail.ts @@ -30,6 +30,14 @@ export type PaymentDetail = { * Get from Snapshot Alternate Collector Full Name */ readonly snapshotAlternateCollectorFullName: any; + /** + * Get from Household Snapshot Latin Name + */ + readonly snapshotCollectorFullNameLatin: any; + /** + * Get from Snapshot Alternate Collector Full Name Latin + */ + readonly snapshotAlternateCollectorFullNameLatin: any; /** * Get from Snapshot Alternate Collector ID */ diff --git a/src/frontend/src/restgenerated/models/PaymentList.ts b/src/frontend/src/restgenerated/models/PaymentList.ts index 679ec1135aa..8d68a6566d4 100644 --- a/src/frontend/src/restgenerated/models/PaymentList.ts +++ b/src/frontend/src/restgenerated/models/PaymentList.ts @@ -25,6 +25,14 @@ export type PaymentList = { * Get from Snapshot Alternate Collector Full Name */ readonly snapshotAlternateCollectorFullName: any; + /** + * Get from Household Snapshot Latin Name + */ + readonly snapshotCollectorFullNameLatin: any; + /** + * Get from Snapshot Alternate Collector Full Name Latin + */ + readonly snapshotAlternateCollectorFullNameLatin: any; /** * Get from Snapshot Alternate Collector ID */ diff --git a/src/frontend/src/restgenerated/models/PushPeople.ts b/src/frontend/src/restgenerated/models/PushPeople.ts index 951eef01837..8c3f423d5db 100644 --- a/src/frontend/src/restgenerated/models/PushPeople.ts +++ b/src/frontend/src/restgenerated/models/PushPeople.ts @@ -79,21 +79,21 @@ export type PushPeople = { */ familyName?: string; /** - * Full Local Name of the Beneficiary + * Full name of the Beneficiary Latin */ - fullNameLocal?: string | null; + fullNameLatin?: string | null; /** - * First local name of the Beneficiary + * First name of the Beneficiary Latin */ - givenNameLocal?: string | null; + givenNameLatin?: string | null; /** - * Middle local name of the Beneficiary + * Middle name of the Beneficiary Latin */ - middleNameLocal?: string | null; + middleNameLatin?: string | null; /** - * Last local name of the Beneficiary + * Last name of the Beneficiary Latin */ - familyNameLocal?: string | null; + familyNameLatin?: string | null; /** * Beneficiary gender * diff --git a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json index 47af73f14fd..6bf475e5a40 100644 --- a/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json +++ b/tests/unit/api_contract/_api_checker/test_verification_records/_api_rest_business-areas_business-area-0_programs_es1u_payment-verifications_0220b51a-3d67-45f5-aea8-38d230d0052b_verifications_/get/dc937b59892604f5a86ac96936cd7ff09e25f18ae6b758e8014a24c7fa039e91.response.json @@ -55,7 +55,7 @@ "payment_verification_plan_unicef_id": "PVP-1", "verification_channel": "MANUAL", "admin_url": null, - "version": 1735688653315201, + "version": 1735688653315200, "is_manually_editable": true }, "payment_plan_hard_conflicted": false, diff --git a/tests/unit/apps/core/test_kobo_template_upload.py b/tests/unit/apps/core/test_kobo_template_upload.py index e7d40878143..fd39a66e15e 100644 --- a/tests/unit/apps/core/test_kobo_template_upload.py +++ b/tests/unit/apps/core/test_kobo_template_upload.py @@ -146,7 +146,7 @@ def test_upload_valid_template_shows_success_message( ): mock_country_choices.return_value = _get_all_country_choices() - with django_assert_num_queries(26): + with django_assert_num_queries(24): response = _upload_file(client, admin_user, "kobo-template-valid.xlsx") messages = [m.message for m in get_messages(response.wsgi_request)] From 5e05f7f81be650e87a8a705e678587b4c82148c0 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 15:30:02 -0400 Subject: [PATCH 24/33] fe tests --- .../HouseholdMembersTable.test.tsx.snap | 132 +++++------ .../HouseholdTable.test.tsx.snap | 74 +++--- .../IndividualsListTable.test.tsx.snap | 210 +++++++++--------- 3 files changed, 208 insertions(+), 208 deletions(-) diff --git a/src/frontend/src/containers/tables/population/HouseholdMembersTable/__snapshots__/HouseholdMembersTable.test.tsx.snap b/src/frontend/src/containers/tables/population/HouseholdMembersTable/__snapshots__/HouseholdMembersTable.test.tsx.snap index 243125ababa..52cd8d92891 100644 --- a/src/frontend/src/containers/tables/population/HouseholdMembersTable/__snapshots__/HouseholdMembersTable.test.tsx.snap +++ b/src/frontend/src/containers/tables/population/HouseholdMembersTable/__snapshots__/HouseholdMembersTable.test.tsx.snap @@ -3,17 +3,17 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] = `

    should handle empty household members list 1`]
    should handle empty household members list 1`] scope="col" > Individual ID @@ -54,7 +54,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Individual @@ -65,7 +65,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Status @@ -76,7 +76,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Relationship to HoH @@ -87,7 +87,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Date of Birth @@ -98,7 +98,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Gender @@ -110,11 +110,11 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should handle empty household members list 1`]
    should handle empty household members list 1`]
    should handle empty household members list 1`]
    should handle empty household members list 1`]
    should handle empty household members list 1`] exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1`] = `
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1 scope="col" > Individual ID @@ -241,7 +241,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Individual @@ -252,7 +252,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Status @@ -263,7 +263,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Relationship to HoH @@ -274,7 +274,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Date of Birth @@ -285,7 +285,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Gender @@ -297,11 +297,11 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1 exports[`HouseholdMembersTable > should render multiple household members with different relationships 1`] = `
    should render multiple household members with d
    should render multiple household members with d scope="col" > Individual ID @@ -428,7 +428,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Individual @@ -439,7 +439,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Status @@ -450,7 +450,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Relationship to HoH @@ -461,7 +461,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Date of Birth @@ -472,7 +472,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Gender @@ -484,11 +484,11 @@ exports[`HouseholdMembersTable > should render multiple household members with d class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should render multiple household members with d
    should render multiple household members with d
    should render multiple household members with d
    should render multiple household members with d
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = ` scope="col" > @@ -47,7 +47,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Individual ID @@ -59,7 +59,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Individual @@ -71,7 +71,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Household ID @@ -83,7 +83,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Relationship to HoH @@ -95,7 +95,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Age @@ -107,7 +107,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Gender @@ -119,7 +119,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Administrative Level 2 @@ -131,11 +131,11 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = ` exports[`IndividualsListTable > should handle no view details permission 1`] = `
    should handle no view details permission 1`] = ` scope="col" > @@ -326,7 +326,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Individual ID @@ -338,7 +338,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Individual @@ -350,7 +350,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Household ID @@ -362,7 +362,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Relationship to HoH @@ -374,7 +374,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Age @@ -386,7 +386,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Gender @@ -398,7 +398,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Administrative Level 2 @@ -410,11 +410,11 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = ` exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] = `
    should render IndividualsListTable correctly 1`] scope="col" > @@ -605,7 +605,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Individual ID @@ -617,7 +617,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Individual @@ -629,7 +629,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Household ID @@ -641,7 +641,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Relationship to HoH @@ -653,7 +653,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Age @@ -665,7 +665,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Gender @@ -677,7 +677,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Administrative Level 2 @@ -689,11 +689,11 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    Date: Thu, 23 Apr 2026 20:33:36 -0400 Subject: [PATCH 25/33] update migrate_to_latin_names --- .../one_time_scripts/migrate_latin_names.py | 83 +++++++++++++++++-- 1 file changed, 74 insertions(+), 9 deletions(-) diff --git a/src/hope/one_time_scripts/migrate_latin_names.py b/src/hope/one_time_scripts/migrate_latin_names.py index f9c79034470..56600e9636a 100644 --- a/src/hope/one_time_scripts/migrate_latin_names.py +++ b/src/hope/one_time_scripts/migrate_latin_names.py @@ -1,27 +1,92 @@ +import time +from typing import List + +from django.db import transaction +from django.db.models import Q + from hope.apps.household.utils import to_latin from hope.models import Individual -BATCH_SIZE = 500 +def _bulk_update(batch_list: List[Individual], batch_size: int) -> None: + with transaction.atomic(): + Individual.objects.bulk_update( + batch_list, + fields=[ + "full_name_latin", + "given_name_latin", + "middle_name_latin", + "family_name_latin", + ], + batch_size=batch_size, + ) + + +def migrate_to_latin_names(batch_size: int = 500) -> None: + """ + Populate latin name fields for Individual model + """ + started_at = time.time() + total_processed: int = 0 + total_processed = 0 + total_updated = 0 + started_at = time.time() -def migrate_to_latin_names() -> None: - qs = Individual.objects.all().iterator(chunk_size=BATCH_SIZE) - to_update = [] + print("Starting latin name migration...") - # TODO: add pagination maybe + qs = ( + Individual.objects + .filter( + Q(full_name_latin__isnull=True) | + Q(given_name_latin__isnull=True) | + Q(middle_name_latin__isnull=True) | + Q(family_name_latin__isnull=True) + ) + .order_by("id") + .iterator(chunk_size=batch_size) + ) + + to_update: List[Individual] = [] for ind in qs: + total_processed += 1 + updated = False + if ind.full_name and not ind.full_name_latin: ind.full_name_latin = to_latin(ind.full_name) + updated = True + if ind.given_name and not ind.given_name_latin: ind.given_name_latin = to_latin(ind.given_name) + updated = True + if ind.middle_name and not ind.middle_name_latin: ind.middle_name_latin = to_latin(ind.middle_name) + updated = True + if ind.family_name and not ind.family_name_latin: ind.family_name_latin = to_latin(ind.family_name) + updated = True + + if updated: + to_update.append(ind) + + if len(to_update) >= batch_size: + _bulk_update(to_update, batch_size) + total_updated += len(to_update) + to_update.clear() + + print( + f"processed={total_processed}, updated={total_updated}" + ) + + # Final update + if to_update: + _bulk_update(to_update, batch_size) + total_updated += len(to_update) - to_update.append(ind) + duration = time.time() - started_at - Individual.objects.bulk_update(to_update, fields=[ - "full_name_latin", "given_name_latin", "middle_name_latin", "family_name_latin" - ], batch_size=BATCH_SIZE) + print( + f"Done in {duration:.2f}s | processed={total_processed}, updated={total_updated}" + ) From 0320744a7004671121bff480213a97209e85299d Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Thu, 23 Apr 2026 20:34:05 -0400 Subject: [PATCH 26/33] clean up --- src/hope/one_time_scripts/migrate_latin_names.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/hope/one_time_scripts/migrate_latin_names.py b/src/hope/one_time_scripts/migrate_latin_names.py index 56600e9636a..300661c8f41 100644 --- a/src/hope/one_time_scripts/migrate_latin_names.py +++ b/src/hope/one_time_scripts/migrate_latin_names.py @@ -26,8 +26,6 @@ def migrate_to_latin_names(batch_size: int = 500) -> None: """ Populate latin name fields for Individual model """ - started_at = time.time() - total_processed: int = 0 total_processed = 0 total_updated = 0 started_at = time.time() From f5475fe96dd13b58adf848f549518ee96aecfc42 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Fri, 24 Apr 2026 09:14:54 -0400 Subject: [PATCH 27/33] core fields labels --- .../apps/core/field_attributes/core_fields_attributes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hope/apps/core/field_attributes/core_fields_attributes.py b/src/hope/apps/core/field_attributes/core_fields_attributes.py index 40e85f2be26..f62a752ded9 100644 --- a/src/hope/apps/core/field_attributes/core_fields_attributes.py +++ b/src/hope/apps/core/field_attributes/core_fields_attributes.py @@ -466,7 +466,7 @@ "name": "full_name_latin", "lookup": "full_name_latin", "required": False, - "label": {"English(EN)": "Full name local"}, + "label": {"English(EN)": "Full name latin"}, "hint": "", "choices": [], "associated_with": _INDIVIDUAL, @@ -506,7 +506,7 @@ "name": "given_name_latin", "lookup": "given_name_latin", "required": False, - "label": {"English(EN)": "Given name local"}, + "label": {"English(EN)": "Given name latin"}, "hint": "", "choices": [], "associated_with": _INDIVIDUAL, @@ -546,7 +546,7 @@ "name": "middle_name_latin", "lookup": "middle_name_latin", "required": False, - "label": {"English(EN)": "Middle name(s) local"}, + "label": {"English(EN)": "Middle name(s) latin"}, "hint": "", "choices": [], "associated_with": _INDIVIDUAL, @@ -586,7 +586,7 @@ "name": "family_name_latin", "lookup": "family_name_latin", "required": False, - "label": {"English(EN)": "Family name local"}, + "label": {"English(EN)": "Family name latin"}, "hint": "", "choices": [], "associated_with": _INDIVIDUAL, From 6d99ce781fe98cbd104a0fe7a668323f960ed449 Mon Sep 17 00:00:00 2001 From: Maciej Szewczyk Date: Fri, 24 Apr 2026 15:19:52 +0200 Subject: [PATCH 28/33] fix build for backend --- src/frontend/src/components/core/ContentLink.tsx | 4 ++-- src/frontend/src/utils/utils.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/components/core/ContentLink.tsx b/src/frontend/src/components/core/ContentLink.tsx index 215cb36819d..aea19157a8a 100644 --- a/src/frontend/src/components/core/ContentLink.tsx +++ b/src/frontend/src/components/core/ContentLink.tsx @@ -1,6 +1,6 @@ import styled from 'styled-components'; import { MiśTheme } from '../../theme'; -import { ReactElement } from 'react'; +import { ReactElement, ReactNode } from 'react'; interface LinkProps { fullWidth?: boolean; @@ -23,7 +23,7 @@ export function ContentLink({ fullWidth = false, }: { href: string; - children: string | ReactElement; + children: ReactNode; download?: boolean; fullWidth?: boolean; }): ReactElement { diff --git a/src/frontend/src/utils/utils.tsx b/src/frontend/src/utils/utils.tsx index 59b992916b0..71084f63baa 100644 --- a/src/frontend/src/utils/utils.tsx +++ b/src/frontend/src/utils/utils.tsx @@ -5,7 +5,7 @@ import { ProgramStatusEnum } from '@restgenerated/models/ProgramStatusEnum'; import { Box, Typography } from '@mui/material'; import _, { camelCase, startCase } from 'lodash'; import moment from 'moment'; -import { ReactNode } from 'react'; +import { ReactElement, ReactNode } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { theme as themeObj } from '../theme'; import { GRIEVANCE_CATEGORIES, PAYMENT_PLAN_STATES } from './constants'; @@ -13,7 +13,7 @@ import { GRIEVANCE_CATEGORIES, PAYMENT_PLAN_STATES } from './constants'; export function displayNameWithLatin>( obj: T | null | undefined, key: string & keyof T, -): ReactNode { +): string | ReactElement | null { if (!obj) return null; const name = obj[key] as string | null | undefined; if (!name) return null; From 9ccfe0199d13f0dc48fa32d6223703c65cc63eb9 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Fri, 24 Apr 2026 10:27:54 -0400 Subject: [PATCH 29/33] clean up --- .../tasks/rdi_kobo_create.py | 35 ----------------- .../tasks/rdi_xlsx_create.py | 38 +------------------ 2 files changed, 1 insertion(+), 72 deletions(-) diff --git a/src/hope/apps/registration_data/tasks/rdi_kobo_create.py b/src/hope/apps/registration_data/tasks/rdi_kobo_create.py index 0b6f2c19064..f978b7cc2c3 100644 --- a/src/hope/apps/registration_data/tasks/rdi_kobo_create.py +++ b/src/hope/apps/registration_data/tasks/rdi_kobo_create.py @@ -23,7 +23,6 @@ ROLE_ALTERNATE, ROLE_PRIMARY, ) -from hope.apps.household.utils import to_latin from hope.apps.periodic_data_update.utils import populate_pdu_with_null_values from hope.apps.registration_data.tasks.deduplicate import DeduplicateTask from hope.apps.registration_data.tasks.rdi_base_create import RdiBaseCreateTask @@ -416,40 +415,6 @@ def _create_facility(self, facility_data: dict) -> Facility | None: )[0] return None - def _fill_latin_fields(self, obj: PendingIndividual) -> None: - mapping_names = [ - ("given_name", "given_name_latin"), - ("middle_name", "middle_name_latin"), - ("family_name", "family_name_latin"), - ] - for local_name, latin_name in mapping_names: - if not getattr(obj, latin_name): - value = getattr(obj, local_name) - if value: - setattr(obj, latin_name, to_latin(value)) - - def _fill_full_name_latin(self, obj: PendingIndividual) -> None: - if obj.full_name_latin: - return - if obj.full_name: - obj.full_name_latin = to_latin(obj.full_name) - return - - obj.full_name_latin = " ".join( - filter( - None, - [ - obj.given_name_latin, - obj.middle_name_latin, - obj.family_name_latin, - ], - ) - ) - - def _check_latin_names(self, obj_to_create: PendingIndividual) -> None: - self._fill_latin_fields(obj_to_create) - self._fill_full_name_latin(obj_to_create) - def handle_household( # noqa: PLR0912 self, collectors_to_create: dict, diff --git a/src/hope/apps/registration_data/tasks/rdi_xlsx_create.py b/src/hope/apps/registration_data/tasks/rdi_xlsx_create.py index c05538b6626..2057704946f 100644 --- a/src/hope/apps/registration_data/tasks/rdi_xlsx_create.py +++ b/src/hope/apps/registration_data/tasks/rdi_xlsx_create.py @@ -22,7 +22,6 @@ ROLE_ALTERNATE, ROLE_PRIMARY, ) -from hope.apps.household.utils import to_latin from hope.apps.periodic_data_update.service.periodic_data_update_import_service import ( PDUXlsxImportService, ) @@ -496,40 +495,6 @@ def _create_pending_object_factory(self, sheet_title: str, rdi: RegistrationData return partial(PendingIndividual, registration_data_import=rdi, program_id=rdi.program.id) raise ValueError(f"Unhandled sheet label '{sheet_title!r}'") - def _fill_latin_fields(self, obj: PendingIndividual) -> None: - mapping = [ - ("given_name", "given_name_latin"), - ("middle_name", "middle_name_latin"), - ("family_name", "family_name_latin"), - ] - for local_name, latin_name in mapping: - if not getattr(obj, latin_name): - value = getattr(obj, local_name) - if value: - setattr(obj, latin_name, to_latin(value)) - - def _fill_full_name_latin(self, obj: PendingIndividual) -> None: - if obj.full_name_latin: - return - if obj.full_name: - obj.full_name_latin = to_latin(obj.full_name) - return - - obj.full_name_latin = " ".join( - filter( - None, - [ - obj.given_name_latin, - obj.middle_name_latin, - obj.family_name_latin, - ], - ) - ) - - def _check_latin_names(self, obj_to_create: PendingIndividual) -> None: - self._fill_latin_fields(obj_to_create) - self._fill_full_name_latin(obj_to_create) - def _find_header_indices(self, first_row: Any) -> tuple[int | None, int | None]: """Find household_id and relationship column indices.""" household_id_col_idx = None @@ -599,8 +564,7 @@ def _finalize_row_object( populate_pdu_with_null_values(self.rdi.program, obj_to_create.flex_fields) self.handle_pdu_fields(row, first_row, obj_to_create) # type: ignore[arg-type] - # check latin names - self._check_latin_names(obj_to_create) + obj_to_create.set_names_latin() self.individuals.append(obj_to_create) def _bulk_save_and_finalize(self, households_to_update: list) -> None: From 6e2cf2d19117a084c20672e0bdc107de75de1fba Mon Sep 17 00:00:00 2001 From: Maciej Szewczyk Date: Fri, 24 Apr 2026 17:10:21 +0200 Subject: [PATCH 30/33] tests + lint --- .../HouseholdMembersTable.test.tsx.snap | 132 +++++------ .../HouseholdTable.test.tsx.snap | 74 +++--- .../IndividualsListTable.test.tsx.snap | 210 +++++++++--------- src/frontend/src/utils/utils.tsx | 2 +- 4 files changed, 209 insertions(+), 209 deletions(-) diff --git a/src/frontend/src/containers/tables/population/HouseholdMembersTable/__snapshots__/HouseholdMembersTable.test.tsx.snap b/src/frontend/src/containers/tables/population/HouseholdMembersTable/__snapshots__/HouseholdMembersTable.test.tsx.snap index 52cd8d92891..243125ababa 100644 --- a/src/frontend/src/containers/tables/population/HouseholdMembersTable/__snapshots__/HouseholdMembersTable.test.tsx.snap +++ b/src/frontend/src/containers/tables/population/HouseholdMembersTable/__snapshots__/HouseholdMembersTable.test.tsx.snap @@ -3,17 +3,17 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] = `
    should handle empty household members list 1`]
    should handle empty household members list 1`] scope="col" > Individual ID @@ -54,7 +54,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Individual @@ -65,7 +65,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Status @@ -76,7 +76,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Relationship to HoH @@ -87,7 +87,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Date of Birth @@ -98,7 +98,7 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] scope="col" > Gender @@ -110,11 +110,11 @@ exports[`HouseholdMembersTable > should handle empty household members list 1`] class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should handle empty household members list 1`]
    should handle empty household members list 1`]
    should handle empty household members list 1`]
    should handle empty household members list 1`]
    should handle empty household members list 1`] exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1`] = `
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1 scope="col" > Individual ID @@ -241,7 +241,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Individual @@ -252,7 +252,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Status @@ -263,7 +263,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Relationship to HoH @@ -274,7 +274,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Date of Birth @@ -285,7 +285,7 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 scope="col" > Gender @@ -297,11 +297,11 @@ exports[`HouseholdMembersTable > should render HouseholdMembersTable correctly 1 class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1
    should render HouseholdMembersTable correctly 1 exports[`HouseholdMembersTable > should render multiple household members with different relationships 1`] = `
    should render multiple household members with d
    should render multiple household members with d scope="col" > Individual ID @@ -428,7 +428,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Individual @@ -439,7 +439,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Status @@ -450,7 +450,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Relationship to HoH @@ -461,7 +461,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Date of Birth @@ -472,7 +472,7 @@ exports[`HouseholdMembersTable > should render multiple household members with d scope="col" > Gender @@ -484,11 +484,11 @@ exports[`HouseholdMembersTable > should render multiple household members with d class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should render multiple household members with d
    should render multiple household members with d
    should render multiple household members with d
    should render multiple household members with d
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` scope="col" > should render HouseholdTable correctly 1`] = ` class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should render HouseholdTable correctly 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = ` scope="col" > @@ -47,7 +47,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Individual ID @@ -59,7 +59,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Individual @@ -71,7 +71,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Household ID @@ -83,7 +83,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Relationship to HoH @@ -95,7 +95,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Age @@ -107,7 +107,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Gender @@ -119,7 +119,7 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` scope="col" > Administrative Level 2 @@ -131,11 +131,11 @@ exports[`IndividualsListTable > should handle empty data 1`] = ` class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = `
    should handle empty data 1`] = ` exports[`IndividualsListTable > should handle no view details permission 1`] = `
    should handle no view details permission 1`] = ` scope="col" > @@ -326,7 +326,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Individual ID @@ -338,7 +338,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Individual @@ -350,7 +350,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Household ID @@ -362,7 +362,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Relationship to HoH @@ -374,7 +374,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Age @@ -386,7 +386,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Gender @@ -398,7 +398,7 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` scope="col" > Administrative Level 2 @@ -410,11 +410,11 @@ exports[`IndividualsListTable > should handle no view details permission 1`] = ` class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = `
    should handle no view details permission 1`] = ` exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] = `
    should render IndividualsListTable correctly 1`] scope="col" > @@ -605,7 +605,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Individual ID @@ -617,7 +617,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Individual @@ -629,7 +629,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Household ID @@ -641,7 +641,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Relationship to HoH @@ -653,7 +653,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Age @@ -665,7 +665,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Gender @@ -677,7 +677,7 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] scope="col" > Administrative Level 2 @@ -689,11 +689,11 @@ exports[`IndividualsListTable > should render IndividualsListTable correctly 1`] class="MuiTableBody-root css-gmh7jj-MuiTableBody-root" >
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    should render IndividualsListTable correctly 1`]
    Date: Fri, 24 Apr 2026 17:19:12 +0200 Subject: [PATCH 31/33] latin in questionnaires --- .../HouseholdQuestionnaire/HouseholdQuestionnaire.tsx | 3 ++- .../IndividualQuestionnnaire/IndividualQuestionnaire.tsx | 4 ++-- .../HouseholdQuestionnaire/HouseholdQuestionnaire.tsx | 3 ++- .../IndividualQuestionnnaire/IndividualQuestionnaire.tsx | 6 +++--- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/frontend/src/components/accountability/Feedback/HouseholdQuestionnaire/HouseholdQuestionnaire.tsx b/src/frontend/src/components/accountability/Feedback/HouseholdQuestionnaire/HouseholdQuestionnaire.tsx index 68cb954fc09..d9c190feb2d 100644 --- a/src/frontend/src/components/accountability/Feedback/HouseholdQuestionnaire/HouseholdQuestionnaire.tsx +++ b/src/frontend/src/components/accountability/Feedback/HouseholdQuestionnaire/HouseholdQuestionnaire.tsx @@ -11,6 +11,7 @@ import { LoadingComponent } from '@components/core/LoadingComponent'; import { useQuery } from '@tanstack/react-query'; import { HouseholdDetail } from '@restgenerated/models/HouseholdDetail'; import { RestService } from '@restgenerated/services/RestService'; +import { displayNameWithLatin } from '@utils/utils'; interface HouseholdQuestionnaireProps { values; @@ -89,7 +90,7 @@ function HouseholdQuestionnaire({ - {selectedHouseholdData.headOfHousehold?.fullName} + {displayNameWithLatin(selectedHouseholdData.headOfHousehold, 'fullName')} ), size: 3, diff --git a/src/frontend/src/components/accountability/Feedback/IndividualQuestionnnaire/IndividualQuestionnaire.tsx b/src/frontend/src/components/accountability/Feedback/IndividualQuestionnnaire/IndividualQuestionnaire.tsx index a3239074480..1d8a5c3f2ef 100644 --- a/src/frontend/src/components/accountability/Feedback/IndividualQuestionnnaire/IndividualQuestionnaire.tsx +++ b/src/frontend/src/components/accountability/Feedback/IndividualQuestionnnaire/IndividualQuestionnaire.tsx @@ -7,7 +7,7 @@ import { ContentLink } from '@core/ContentLink'; import { useProgramContext } from 'src/programContext'; import { ReactElement } from 'react'; import withErrorBoundary from '@components/core/withErrorBoundary'; -import { choicesToDict } from '@utils/utils'; +import { choicesToDict, displayNameWithLatin } from '@utils/utils'; import { RestService } from '@restgenerated/index'; import { IndividualChoices } from '@restgenerated/models/IndividualChoices'; import { useQuery } from '@tanstack/react-query'; @@ -46,7 +46,7 @@ const IndividualQuestionnaire = ({ - {selectedIndividualData.fullName} + {displayNameWithLatin(selectedIndividualData, 'fullName')} ), size: 3, diff --git a/src/frontend/src/components/grievances/HouseholdQuestionnaire/HouseholdQuestionnaire.tsx b/src/frontend/src/components/grievances/HouseholdQuestionnaire/HouseholdQuestionnaire.tsx index 325c8ef4339..75fd8aad218 100644 --- a/src/frontend/src/components/grievances/HouseholdQuestionnaire/HouseholdQuestionnaire.tsx +++ b/src/frontend/src/components/grievances/HouseholdQuestionnaire/HouseholdQuestionnaire.tsx @@ -11,6 +11,7 @@ import withErrorBoundary from '@components/core/withErrorBoundary'; import { HouseholdDetail } from '@restgenerated/models/HouseholdDetail'; import { useQuery } from '@tanstack/react-query'; import { RestService } from '@restgenerated/services/RestService'; +import { displayNameWithLatin } from '@utils/utils'; interface HouseholdQuestionnaireProps { values; @@ -94,7 +95,7 @@ function HouseholdQuestionnaire({ - {selectedHouseholdData.headOfHousehold.fullName} + {displayNameWithLatin(selectedHouseholdData.headOfHousehold, 'fullName')} ) : ( '-' diff --git a/src/frontend/src/components/grievances/IndividualQuestionnnaire/IndividualQuestionnaire.tsx b/src/frontend/src/components/grievances/IndividualQuestionnnaire/IndividualQuestionnaire.tsx index 98c26f98f5b..ba499659584 100644 --- a/src/frontend/src/components/grievances/IndividualQuestionnnaire/IndividualQuestionnaire.tsx +++ b/src/frontend/src/components/grievances/IndividualQuestionnnaire/IndividualQuestionnaire.tsx @@ -10,7 +10,7 @@ import withErrorBoundary from '@components/core/withErrorBoundary'; import { RestService } from '@restgenerated/index'; import { IndividualChoices } from '@restgenerated/models/IndividualChoices'; import { useQuery } from '@tanstack/react-query'; -import { choicesToDict } from '@utils/utils'; +import { choicesToDict, displayNameWithLatin } from '@utils/utils'; interface IndividualQuestionnaireProps { values; @@ -45,7 +45,7 @@ const IndividualQuestionnaire = ({ - {selectedIndividualData.fullName} + {displayNameWithLatin(selectedIndividualData, 'fullName')} ), size: 3, @@ -119,7 +119,7 @@ const IndividualQuestionnaire = ({ - {selectedIndividualData.fullName} + {displayNameWithLatin(selectedIndividualData, 'fullName')} ), size: 3, From e55f9d46b4259df22a1b2d2e76000e30edc07380 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Fri, 24 Apr 2026 11:59:44 -0400 Subject: [PATCH 32/33] add more tests --- src/hope/models/individual.py | 25 +++++---- tests/unit/apps/household/test_models.py | 68 ++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 13 deletions(-) diff --git a/src/hope/models/individual.py b/src/hope/models/individual.py index 1bfe34d6d97..da4e0db5cfd 100644 --- a/src/hope/models/individual.py +++ b/src/hope/models/individual.py @@ -600,20 +600,19 @@ def set_names_latin(self) -> None: if self.full_name_latin: return - if self.full_name: - self.full_name_latin = to_latin(self.full_name) - return - - self.full_name_latin = " ".join( - filter( - None, - [ - self.given_name_latin, - self.middle_name_latin, - self.family_name_latin, - ], + if not self.full_name: + self.full_name_latin = " ".join( + filter( + None, + [ + self.given_name_latin, + self.middle_name_latin, + self.family_name_latin, + ], + ) ) - ) + return + self.full_name_latin = to_latin(self.full_name) def __str__(self) -> str: return self.unicef_id or "" diff --git a/tests/unit/apps/household/test_models.py b/tests/unit/apps/household/test_models.py index 2cef18551e1..b78f2383353 100644 --- a/tests/unit/apps/household/test_models.py +++ b/tests/unit/apps/household/test_models.py @@ -1,5 +1,6 @@ from datetime import timedelta +from django.core.exceptions import ValidationError from django.db import IntegrityError from django.utils import timezone import pytest @@ -387,3 +388,70 @@ def test_facility_str(business_area: BusinessArea, area_hierarchy: tuple[Area, A facility = Facility.objects.create(name="test facility", business_area=business_area, admin_area=area1) assert str(facility) == "TEST FACILITY" + + +def test_individual_erase(business_area: BusinessArea) -> None: + individual = IndividualFactory( + business_area=business_area, + full_name="FullName", + given_name="G_Name", + middle_name="M_Name", + family_name="F_Name", + full_name_latin="LatinFull", + given_name_latin="LatinGiven", + middle_name_latin="MLatin", + family_name_latin="Family latin", + ) + individual.erase() + assert individual.full_name == "GDPR REMOVED" + assert individual.given_name == "GDPR REMOVED" + assert individual.middle_name == "GDPR REMOVED" + assert individual.family_name == "GDPR REMOVED" + assert individual.full_name_latin == "GDPR REMOVED" + assert individual.given_name_latin == "GDPR REMOVED" + assert individual.middle_name_latin == "GDPR REMOVED" + assert individual.family_name_latin == "GDPR REMOVED" + + +def test_individual_set_latin_names(business_area: BusinessArea) -> None: + individual = IndividualFactory( + business_area=business_area, full_name="甜的 針 昏迷", given_name="甜的", middle_name="針", family_name="昏迷" + ) + individual.set_names_latin() + assert individual.full_name_latin == "Tian De Zhen Hun Mi" + assert individual.given_name_latin == "Tian De" + assert individual.middle_name_latin == "Zhen" + assert individual.family_name_latin == "Hun Mi" + + +def test_individual_set_latin_names_full_name(business_area: BusinessArea) -> None: + individual = IndividualFactory( + business_area=business_area, given_name="عبد الملك", middle_name="جولر", family_name="الفرامل" + ) + # calculate based on first, middle, last names + individual.full_name = None + individual.set_names_latin() + assert individual.full_name_latin == "Bd Lmlk Jwlr Lfrml" + assert individual.given_name_latin == "Bd Lmlk" + assert individual.middle_name_latin == "Jwlr" + assert individual.family_name_latin == "Lfrml" + + # provide full name latin + individual_2 = IndividualFactory( + business_area=business_area, + full_name="Provided Latin Name", + given_name="عبد الملك", + middle_name="جولر", + family_name="الفرامل", + ) + individual_2.set_names_latin() + assert individual_2.full_name_latin == "Provided Latin Name" + + +def test_individual_set_latin_names_validation_error(business_area: BusinessArea) -> None: + individual = IndividualFactory(business_area=business_area, full_name="2222222") + with pytest.raises(ValidationError) as error: + individual.set_names_latin() + + assert individual.full_name_latin is None + assert "Only ASCII letters, spaces, hyphens, and apostrophes are allowed." in str(error.value) From 28453be9abd46f7a9bc26232dc495fb18c750bf1 Mon Sep 17 00:00:00 2001 From: pavlo-mk Date: Fri, 24 Apr 2026 13:19:20 -0400 Subject: [PATCH 33/33] coverage --- src/hope/apps/household/utils.py | 6 ++--- .../one_time_scripts/migrate_latin_names.py | 22 ++---------------- tests/unit/apps/household/test_models.py | 2 +- .../test_file/invalid_rows.xlsx | Bin 14588 -> 14691 bytes .../test_kobo_validators_methods.py | 10 ++++++++ .../test_xlsx_upload_validators_methods.py | 6 +++++ 6 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/hope/apps/household/utils.py b/src/hope/apps/household/utils.py index b1a73be23d4..3f527f5758f 100644 --- a/src/hope/apps/household/utils.py +++ b/src/hope/apps/household/utils.py @@ -24,10 +24,8 @@ def to_latin(text: str | None) -> str | None: latin_text = re.sub(r"[`'’‘]", "", latin_text) latin_text = re.sub(r"[^a-zA-Z\s]", " ", latin_text) latin_text = re.sub(r"\s+", " ", latin_text).strip() + # validate - try: - ascii_name_validator(latin_text) - except ValueError as e: - raise ValueError(e.message) from e + ascii_name_validator(latin_text) return latin_text.title() diff --git a/src/hope/one_time_scripts/migrate_latin_names.py b/src/hope/one_time_scripts/migrate_latin_names.py index 300661c8f41..f73553059f8 100644 --- a/src/hope/one_time_scripts/migrate_latin_names.py +++ b/src/hope/one_time_scripts/migrate_latin_names.py @@ -4,7 +4,6 @@ from django.db import transaction from django.db.models import Q -from hope.apps.household.utils import to_latin from hope.models import Individual @@ -48,26 +47,9 @@ def migrate_to_latin_names(batch_size: int = 500) -> None: for ind in qs: total_processed += 1 - updated = False - if ind.full_name and not ind.full_name_latin: - ind.full_name_latin = to_latin(ind.full_name) - updated = True - - if ind.given_name and not ind.given_name_latin: - ind.given_name_latin = to_latin(ind.given_name) - updated = True - - if ind.middle_name and not ind.middle_name_latin: - ind.middle_name_latin = to_latin(ind.middle_name) - updated = True - - if ind.family_name and not ind.family_name_latin: - ind.family_name_latin = to_latin(ind.family_name) - updated = True - - if updated: - to_update.append(ind) + ind.set_names_latin() + to_update.append(ind) if len(to_update) >= batch_size: _bulk_update(to_update, batch_size) diff --git a/tests/unit/apps/household/test_models.py b/tests/unit/apps/household/test_models.py index b78f2383353..f4306d9b2b8 100644 --- a/tests/unit/apps/household/test_models.py +++ b/tests/unit/apps/household/test_models.py @@ -439,7 +439,7 @@ def test_individual_set_latin_names_full_name(business_area: BusinessArea) -> No # provide full name latin individual_2 = IndividualFactory( business_area=business_area, - full_name="Provided Latin Name", + full_name_latin="Provided Latin Name", given_name="عبد الملك", middle_name="جولر", family_name="الفرامل", diff --git a/tests/unit/apps/registration_data/test_file/invalid_rows.xlsx b/tests/unit/apps/registration_data/test_file/invalid_rows.xlsx index b4cccbac95671c368fed62ae47addc33e2af9b47..1b79ab2a19b3ffa362369ea49cd0876a975a3ad9 100644 GIT binary patch delta 7034 zcmZu$2UJtb)(*WRNC^>9I-!aQz4wkpq$wbs00!y3L&@2qc~J+o);@67ByGwaNnGmjNd8kjB-F(Uu~AP4+#N~@w_A|S%c zBp!m3OUX$%bRlbg66#zw)W{QS{8d1a4E|NPN5(~ZX%j$WPkdQeqVFW5#d}#$QSV#k z(f|Mx&PlI9Vn|(6R_&{ihv$OcwO^;H4b|G_m2#O`6e9@2&}}JLKsG587t`3@cJaPw zKDsfo5?GHBxqBZIkdlJQE%p6#w!YlHXMqDwy3~J2$qsF}hkISR`EAR$^3*4If4lW` z{kL1ot?9GvUd#LMvo#dWTQj$Pwl_|8EGrutn+0$3#v!vesk%+&a;|hPcu;ue7(QmQNOvfa4 z$oaVX;|UT85BRKDy0N`_CHM7VvwkSE-}F$_@&1Xwj3BVg^z~5Yz+^~U@J?QHEhHpM0AI?--lUhk-DjzDOPR_P82guJ1WJtcwVfH!rd1BjePk#Dv zWart?`ffX>GNbDJ0Ykv?gUQ&kjnJx-mOatziqJ!(&F<(!)0M~T4qjWq0bA
  • JJn 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 UAT$p@6s;;uN|1`Zlt7^W2RgdXpa1{> diff --git a/tests/unit/apps/registration_data/test_kobo_validators_methods.py b/tests/unit/apps/registration_data/test_kobo_validators_methods.py index bcb74ebc48c..00fc98ed941 100644 --- a/tests/unit/apps/registration_data/test_kobo_validators_methods.py +++ b/tests/unit/apps/registration_data/test_kobo_validators_methods.py @@ -168,6 +168,10 @@ "individual_questions/gender_i_c": "male", "individual_questions/individual_vulnerabilities/disability_i_c": "not disabled", "individual_questions/full_name_i_c": "Test Testowy", + "individual_questions/full_name_latin_i_c": "TestL Full TestowyL", + "individual_questions/given_name_latin_i_c": "TestL", + "individual_questions/middle_name_latin_i_c": "TestL", + "individual_questions/family_name_latin_i_c": "TestL", "individual_questions/is_only_collector": "NO", "individual_questions/mas_treatment_i_f": "1", "individual_questions/arm_picture_i_f": "signature-17_32_52.png", @@ -324,6 +328,7 @@ "individual_questions/individual_vulnerabilities/observed_disability_i_f": "memory", "individual_questions/individual_vulnerabilities/wellbeing_index/active_h_f": "1", "individual_questions/family_name_i_c": "Testowski", + "individual_questions/full_name_latin_i_c": "33333", "individual_questions/individual_vulnerabilities/wellbeing_index/interested_h_f": "4", "individual_questions/individual_index": "1", "individual_questions/full_name_i_c": "Test Testowski", @@ -790,6 +795,11 @@ def test_validate_everything( "header": "facility_admin_area_h_c", "message": "Area with code: AF777 does not exist", }, + { + "header": "full_name_latin_i_c", + "message": "invalid_name, Only ASCII letters, spaces, hyphens, and apostrophes are allowed., " + "Value provided: 33333", + }, { "header": "preferred_language_i_c", "message": "Invalid choice test for field preferred_language_i_c", diff --git a/tests/unit/apps/registration_data/test_xlsx_upload_validators_methods.py b/tests/unit/apps/registration_data/test_xlsx_upload_validators_methods.py index 3a9a7389cd5..850faafd530 100644 --- a/tests/unit/apps/registration_data/test_xlsx_upload_validators_methods.py +++ b/tests/unit/apps/registration_data/test_xlsx_upload_validators_methods.py @@ -475,6 +475,12 @@ def test_rows_validator( "message": "Sheet: 'Individuals', Unexpected value: TestInvalid for " "type select one of field preferred_language_i_c", }, + { + "row_number": 4, + "header": "full_name_latin_i_c", + "message": "invalid_name, Only ASCII letters, spaces, hyphens, and apostrophes are allowed., " + "Value provided: 222222", + }, { "row_number": 8, "header": "relationship_i_c",