taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 32a668f3f9cad7f8146a60d796765e99263d41e1
parent f724484ccf1e193f28c38159bb12ef8fd896b724
Author: Sebastian <sebasjm@gmail.com>
Date:   Sun, 27 Apr 2025 11:20:16 -0300

pep should only be triggered on vqf 902

Diffstat:
Mpackages/aml-backoffice-ui/src/hooks/decision-request.ts | 5+++--
Mpackages/aml-backoffice-ui/src/pages/NewMeasure.tsx | 7+++----
Mpackages/aml-backoffice-ui/src/pages/decision/Measures.tsx | 40++++++++++++++++++++++++++++++++++------
Mpackages/taler-util/src/aml/aml-properties.ts | 12+++++++++---
4 files changed, 49 insertions(+), 15 deletions(-)

diff --git a/packages/aml-backoffice-ui/src/hooks/decision-request.ts b/packages/aml-backoffice-ui/src/hooks/decision-request.ts @@ -27,6 +27,7 @@ import { codecForNumber, codecForString, codecOptional, + codecOptionalDefault, KycRule, MeasureInformation, } from "@gnu-taler/taler-util"; @@ -107,9 +108,9 @@ export interface DecisionRequest { export const codecForMeasure = (): Codec<MeasureInformation> => buildCodecForObject<MeasureInformation>() - .property("check_name", codecForString()) + .property("check_name", codecOptionalDefault(codecForString(), "SKIP")) .property("prog_name", codecForString()) - .property("context", codecOptional(codecForMap(codecForString()))) + .property("context", codecOptional(codecForMap(codecForAny()))) .build("MeasureInformation"); export const codecForAccountAttributes = (): Codec<AccountAttributes> => diff --git a/packages/aml-backoffice-ui/src/pages/NewMeasure.tsx b/packages/aml-backoffice-ui/src/pages/NewMeasure.tsx @@ -32,9 +32,11 @@ export type MeasureDefinition = { */ export function NewMeasure({ initial, + isNew, onCancel, }: { initial?: Partial<MeasureDefinition>; + isNew?: boolean; onCancel: () => void; }): VNode { const measures = useServerMeasures(); @@ -53,14 +55,12 @@ export function NewMeasure({ ); } - const addingNew = !undefinedIfEmpty(initial); - return ( <MeasureForm summary={summary} initial={initial} onCancel={onCancel} - addingNew={addingNew} + addingNew={isNew} /> ); } @@ -102,7 +102,6 @@ export function MeasureForm({ !addingNew, ); - initial?.context; const form = useForm<MeasureDefinition>(design, initial ?? {}); const name = !form.status.result ? undefined : form.status.result.name; diff --git a/packages/aml-backoffice-ui/src/pages/decision/Measures.tsx b/packages/aml-backoffice-ui/src/pages/decision/Measures.tsx @@ -29,14 +29,18 @@ import { MeasureDefinition, NewMeasure } from "../NewMeasure.js"; * @returns */ export function Measures({}: {}): VNode { - const [initMeasure, setAddMeasure] = useState<Partial<MeasureDefinition>>(); //test; - if (initMeasure) { + const [addMeasure, setAddMeasure] = useState<{ + isNew: boolean; + template: Partial<MeasureDefinition>; + }>(); //test; + if (addMeasure) { return ( <NewMeasure onCancel={() => { setAddMeasure(undefined); }} - initial={initMeasure} + initial={addMeasure.template} + isNew={addMeasure.isNew} /> ); } @@ -45,8 +49,17 @@ export function Measures({}: {}): VNode { <Fragment> <ActiveMeasureForm /> <ShowAllMeasures - addNewMeasure={(m) => { - setAddMeasure(m); + addNewMeasure={(template) => { + setAddMeasure({ + isNew: true, + template, + }); + }} + editMeasure={(template) => { + setAddMeasure({ + isNew: false, + template, + }); }} /> </Fragment> @@ -89,8 +102,10 @@ function ActiveMeasureForm(): VNode { function ShowAllMeasures({ addNewMeasure, + editMeasure, }: { addNewMeasure: (m: Partial<MeasureDefinition>) => void; + editMeasure: (m: Partial<MeasureDefinition>) => void; }): VNode { const { i18n } = useTranslationContext(); const measures = useServerMeasures(); @@ -128,7 +143,7 @@ function ShowAllMeasures({ measureBody, )} onSelect={(m) => { - addNewMeasure({ + editMeasure({ check: m.type === "form" ? m.checkName : undefined, context: !m.context ? [] @@ -153,6 +168,19 @@ function ShowAllMeasures({ <div class="p-2"> <CurrentMeasureTable measures={computeAvailableMesaures(measureBody)} + onSelect={(m) => { + addNewMeasure({ + check: m.type === "form" ? m.checkName : undefined, + context: !m.context + ? [] + : Object.entries(m.context).map(([key, value]) => ({ + key, + value, + })), + name: m.name, + program: m.programName, + }); + }} /> </div> </div> diff --git a/packages/taler-util/src/aml/aml-properties.ts b/packages/taler-util/src/aml/aml-properties.ts @@ -63,7 +63,7 @@ export const TOPS_AML_PROPERTIES: PropertiesMapInfo< }, PEP_DOMESTIC: { deriveProperty(formId, limits, state, attributes) { - if (formId === "vqf_902_1_officer") { + if (formId === "vqf_902_4") { return !!attributes[TalerFormAttributes.PEP_DOMESTIC]; } return undefined; @@ -71,12 +71,18 @@ export const TOPS_AML_PROPERTIES: PropertiesMapInfo< }, PEP_FOREIGN: { deriveProperty(formId, limits, state, attributes) { - return !!attributes[TalerFormAttributes.PEP_FOREIGN]; + if (formId === "vqf_902_4") { + return !!attributes[TalerFormAttributes.PEP_FOREIGN]; + } + return undefined; }, }, PEP_INTERNATIONAL_ORGANIZATION: { deriveProperty(formId, limits, state, attributes) { - return !!attributes[TalerFormAttributes.PEP_INTERNATIONAL_ORGANIZATION]; + if (formId === "vqf_902_4") { + return !!attributes[TalerFormAttributes.PEP_INTERNATIONAL_ORGANIZATION]; + } + return undefined; }, }, HIGH_RISK_CUSTOMER: {