feat: close final competitive gap — professional review workflow + multi-country (MY/SG/UK)
Closes the 4th and final gap from the competitive benchmark: the human-in-the-loop professional tier every commercial competitor pairs with their software. Deliberately NOT a marketplace or payment integration — a structured review-request status on each member's Wassiyah (not_requested -> requested -> reviewed, with reviewer name recorded), surfaced on the Mutawalli dashboard so nothing quietly ships as final without the legally-required review being flagged. Paired with a new whole-app jurisdiction setting since 'necessary in certain countries' only makes sense per-jurisdiction: - nf_families.jurisdiction (MY/SG/UK), owner-only to change — first UPDATE policy ever added to nf_families, which previously had none. - New Settings-tab jurisdiction selector (JurisdictionSetting.svelte). - Wassiyah tab and the draft will document now carry jurisdiction- specific legal notes: Wills Act 1959 + state Syariah (Malaysia), Wills Act 1838 + AMLA (Singapore), Wills Act 1837 (UK). Singapore added as a full third jurisdiction option, not just a stub. - Zakat calculator's currency label and Nisab default now follow the family's jurisdiction (RM/SGD/GBP) instead of a hardcoded RM guess. Covered by e2e-jurisdiction-review.cjs (13/13). Full regression: 253/253 across all suites (2 reruns confirmed as pre-existing parallel-load flakes, not regressions).
This commit is contained in:
@@ -104,6 +104,18 @@ export async function removeMember(membershipId) {
|
||||
if (error) throw error;
|
||||
}
|
||||
|
||||
/** Whole-app jurisdiction (MY/SG/UK) — drives Wassiyah legal notes, will
|
||||
* document format, and Zakat currency defaults. Owner-only to change. */
|
||||
export async function getFamilyJurisdiction(familyId) {
|
||||
const { data, error } = await supabase.from('nf_families').select('jurisdiction').eq('id', familyId).maybeSingle();
|
||||
if (error) throw error;
|
||||
return data?.jurisdiction || 'MY';
|
||||
}
|
||||
export async function setFamilyJurisdiction(familyId, jurisdiction) {
|
||||
const { error } = await supabase.from('nf_families').update({ jurisdiction }).eq('id', familyId);
|
||||
if (error) throw error;
|
||||
}
|
||||
|
||||
export function getActiveFamilyId() {
|
||||
let id;
|
||||
activeFamilyId.subscribe(v => id = v)();
|
||||
|
||||
Reference in New Issue
Block a user