diff --git a/prototype/valuation-review-assistant/README.md b/prototype/valuation-review-assistant/README.md
new file mode 100644
index 00000000000..8e0d33bc531
--- /dev/null
+++ b/prototype/valuation-review-assistant/README.md
@@ -0,0 +1,16 @@
+# Arabic-First Valuation Review Assistant (Prototype)
+
+A practical RTL prototype for Saudi valuation reviewers.
+
+## Workflow
+1. Upload a PDF report file.
+2. Paste extracted report text.
+3. Review detected IVS + IFRS 13 elements.
+4. Check unsupported assumptions and risk indicators.
+5. Export summary as a Word-compatible `.doc` file.
+
+## Run
+```bash
+npm install
+npm run dev
+```
diff --git a/prototype/valuation-review-assistant/index.html b/prototype/valuation-review-assistant/index.html
new file mode 100644
index 00000000000..839d38bc5d8
--- /dev/null
+++ b/prototype/valuation-review-assistant/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ مساعد مراجعة التقييم العقاري
+
+
+
+
+
+
diff --git a/prototype/valuation-review-assistant/package.json b/prototype/valuation-review-assistant/package.json
new file mode 100644
index 00000000000..b64c1b1c6f6
--- /dev/null
+++ b/prototype/valuation-review-assistant/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "valuation-review-assistant",
+ "private": true,
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1"
+ },
+ "devDependencies": {
+ "@types/react": "^18.3.11",
+ "@types/react-dom": "^18.3.0",
+ "@vitejs/plugin-react": "^4.3.2",
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.4.47",
+ "tailwindcss": "^3.4.14",
+ "typescript": "^5.6.3",
+ "vite": "^5.4.9"
+ }
+}
diff --git a/prototype/valuation-review-assistant/postcss.config.js b/prototype/valuation-review-assistant/postcss.config.js
new file mode 100644
index 00000000000..2e7af2b7f1a
--- /dev/null
+++ b/prototype/valuation-review-assistant/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/prototype/valuation-review-assistant/src/App.tsx b/prototype/valuation-review-assistant/src/App.tsx
new file mode 100644
index 00000000000..5d7dc87ec05
--- /dev/null
+++ b/prototype/valuation-review-assistant/src/App.tsx
@@ -0,0 +1,186 @@
+import { useMemo, useState } from "react";
+
+type ChecklistItem = {
+ name: string;
+ found: boolean;
+ standard: "IVS" | "IFRS 13";
+};
+
+const ivsElements = [
+ "الغرض من التقييم",
+ "تاريخ التقييم",
+ "أساس القيمة",
+ "افتراضات خاصة",
+ "نطاق العمل",
+];
+
+const ifrs13Elements = [
+ "الافتراضات السوقية",
+ "أعلى وأفضل استخدام",
+ "تسلسل القيمة العادلة",
+ "مدخلات يمكن ملاحظتها",
+ "تحليل الحساسية",
+];
+
+const sampleAssumptions = [
+ "استمرار الطلب بنفس المعدلات الحالية لمدة 5 سنوات",
+ "عدم وجود تغييرات تنظيمية مؤثرة",
+ "توفر تمويل عقاري بشروط مستقرة",
+];
+
+export function App() {
+ const [fileName, setFileName] = useState("");
+ const [reportText, setReportText] = useState("");
+
+ const checklist = useMemo(() => {
+ const source = reportText.toLowerCase();
+ const rows: ChecklistItem[] = [];
+
+ for (const item of ivsElements) {
+ rows.push({ name: item, found: source.includes(item.toLowerCase()), standard: "IVS" });
+ }
+
+ for (const item of ifrs13Elements) {
+ rows.push({ name: item, found: source.includes(item.toLowerCase()), standard: "IFRS 13" });
+ }
+
+ return rows;
+ }, [reportText]);
+
+ const missing = checklist.filter((x) => !x.found);
+ const matched = checklist.filter((x) => x.found).length;
+ const confidence = Math.round((matched / checklist.length) * 100) || 0;
+
+ const riskLevel = confidence >= 80 ? "منخفض" : confidence >= 50 ? "متوسط" : "مرتفع";
+
+ const unsupportedAssumptions = sampleAssumptions.filter((assumption) => {
+ const firstWord = assumption.split(" ")[0];
+ return firstWord && !reportText.includes(firstWord);
+ });
+
+ const exportSummary = () => {
+ const content = [
+ "ملخص مراجعة التقييم",
+ `الملف: ${fileName || "غير محدد"}`,
+ `نسبة الاكتمال: ${confidence}%`,
+ `مؤشر المخاطر: ${riskLevel}`,
+ "",
+ "العناصر الناقصة:",
+ ...missing.map((item) => `- ${item.standard}: ${item.name}`),
+ "",
+ "الافتراضات غير المدعومة:",
+ ...unsupportedAssumptions.map((item) => `- ${item}`),
+ ].join("\n");
+
+ const blob = new Blob([content], {
+ type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ });
+ const link = document.createElement("a");
+ link.href = URL.createObjectURL(blob);
+ link.download = "review-summary.doc";
+ link.click();
+ URL.revokeObjectURL(link.href);
+ };
+
+ return (
+
+
+
+
+
+
+
1) رفع التقرير
+
setFileName(e.target.files?.[0]?.name ?? "")}
+ />
+
الملف المختار: {fileName || "لا يوجد"}
+
+
+
+
+
+
2) المؤشرات
+
+
+
الثقة
+
{confidence}%
+
+
+
المخاطر
+
{riskLevel}
+
+
+
+
افتراضات غير مدعومة
+
+ {unsupportedAssumptions.length === 0 ? (
+ - لا توجد ملاحظات حرجة.
+ ) : (
+ unsupportedAssumptions.map((item) => (
+ -
+ {item}
+
+ ))
+ )}
+
+
+
+
+
+
+
3) قائمة المراجع
+
+
+
+
+
+
+
+ | المعيار |
+ العنصر |
+ الحالة |
+
+
+
+ {checklist.map((item) => (
+
+ | {item.standard} |
+ {item.name} |
+
+
+ {item.found ? "موجود" : "ناقص"}
+
+ |
+
+ ))}
+
+
+
+
+
+
+ );
+}
diff --git a/prototype/valuation-review-assistant/src/main.tsx b/prototype/valuation-review-assistant/src/main.tsx
new file mode 100644
index 00000000000..9853f0cf530
--- /dev/null
+++ b/prototype/valuation-review-assistant/src/main.tsx
@@ -0,0 +1,10 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import "./styles.css";
+import { App } from "./App";
+
+ReactDOM.createRoot(document.getElementById("root")!).render(
+
+
+ ,
+);
diff --git a/prototype/valuation-review-assistant/src/styles.css b/prototype/valuation-review-assistant/src/styles.css
new file mode 100644
index 00000000000..a6a182b9ce7
--- /dev/null
+++ b/prototype/valuation-review-assistant/src/styles.css
@@ -0,0 +1,9 @@
+@import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap');
+
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+body {
+ @apply font-sans text-slate-800;
+}
diff --git a/prototype/valuation-review-assistant/tailwind.config.js b/prototype/valuation-review-assistant/tailwind.config.js
new file mode 100644
index 00000000000..53a32ea592a
--- /dev/null
+++ b/prototype/valuation-review-assistant/tailwind.config.js
@@ -0,0 +1,12 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: ["./index.html", "./src/**/*.{ts,tsx}"],
+ theme: {
+ extend: {
+ fontFamily: {
+ sans: ["Tajawal", "system-ui", "sans-serif"]
+ }
+ }
+ },
+ plugins: []
+}
diff --git a/prototype/valuation-review-assistant/tsconfig.json b/prototype/valuation-review-assistant/tsconfig.json
new file mode 100644
index 00000000000..efa1ad09133
--- /dev/null
+++ b/prototype/valuation-review-assistant/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+ "moduleResolution": "Bundler",
+ "allowImportingTsExtensions": false,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+ "strict": true
+ },
+ "include": ["src"]
+}
diff --git a/prototype/valuation-review-assistant/vite.config.ts b/prototype/valuation-review-assistant/vite.config.ts
new file mode 100644
index 00000000000..081c8d9f69f
--- /dev/null
+++ b/prototype/valuation-review-assistant/vite.config.ts
@@ -0,0 +1,6 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+
+export default defineConfig({
+ plugins: [react()],
+});