import type {DocArticle} from './types';

export const marketplaceDocs:DocArticle[]=[
 {
  slug:'marketplace',group:'marketplace',title:'آشنایی با مارکت‌پلیس پلانک',description:'مسیر کشف دارایی، بررسی اطلاعات، ساخت سبد و ورود به صفحهٔ خرید و فروش.',status:'implemented',audience:'همهٔ کاربران',
  sections:[
   {id:'purpose',title:'در بازار چه کاری می‌توان انجام داد؟',paragraphs:['مارکت‌پلیس پلانک یک رابط فارسی‌محور برای معرفی پروژه‌ها و بررسی دارایی‌های توکنی است. صفحهٔ اصلی، دسته‌بندی‌ها، بازار کامل، صفحهٔ پروژه و پنجرهٔ دارایی به هم متصل‌اند؛ کاربر می‌تواند نام و نماد را جستجو کند، قیمت و اطلاعات منتشرشده را ببیند و محاسبهٔ خرید یا فروش را بررسی کند.','داشتن صفحهٔ بازار یا نمایش یک قیمت به معنی فعال بودن اجرای سفارش نیست. در این نسخه، ثبت نهایی خرید و فروش واقعی غیرفعال است و محاسبات فرم صرفاً برای بررسی هستند.']},
   {id:'navigation',title:'مسیرهای اصلی',table:{headers:['مسیر','کاربرد'],rows:[['/','صفحهٔ اصلی، فرصت‌ها، سرمایه‌گذاری هوشمند، ویترین شخصی و معرفی توکنایزیشن'],['/market','جستجو، دسته‌بندی، مرتب‌سازی و نمای کارتی یا جدولی دارایی‌ها'],['/projects/[slug]','اطلاعات، مدارک، ریسک و محاسبهٔ خرید و فروش یک پروژه'],['/assets/USDTTMN','صفحهٔ اختصاصی دارایی متصل؛ اطلاعات، محاسبهٔ خرید و فروش و سفارش‌های بازار'],['/copy-trading','پیش‌نمایش کپی‌ترید'],['/storefront/create','ساخت لینک ویترین انتخابی'],['/account و /wallet','پروفایل و اطلاعات خصوصی دارایی‌های حساب']]}},
   {id:'categories',title:'دسته‌بندی و مقایسه',paragraphs:['دارایی‌ها در سه گروه مشهود، نامشهود و طرح سرمایه‌گذاری قرار می‌گیرند؛ گزینهٔ «همه» مجموعهٔ این دسته‌ها را نشان می‌دهد. قیمت، تغییرات ۲۴ساعته، مدت و بازده فقط در جایی نمایش داده می‌شوند که دادهٔ مرتبط وجود داشته باشد.','بازار کامل جستجو، مرتب‌سازی پیشنهادی، رشد، افت، قیمت و تازگی را ارائه می‌کند. نمای کارتی و جدولی و صفحه‌بندی ۱۲تایی برای مرور فهرست موجود است. مرتب‌سازی در مرورگر روی دادهٔ دریافت‌شده انجام می‌شود.']},
   {id:'data-state',title:'تفاوت دادهٔ واقعی، نمونه و ناموجود',paragraphs:['کاتالوگ سرور فقط پروژه‌های منتشرشده را می‌خواند. حالت live به دریافت کاتالوگ متصل اشاره می‌کند و به‌تنهایی به معنی غیرنمونه بودن همهٔ رکوردها نیست؛ برچسب is_demo هر پروژه همچنان اهمیت دارد.','حالت preview فقط برای ارزیابی طراحی است. وقتی خواندن کاتالوگ متصل شکست بخورد، حالت unavailable برمی‌گردد و اطلاعات ساختگی جای دادهٔ واقعی قرار نمی‌گیرد. دارایی‌های بازار با قیمت ناموجود یا منقضی، قیمت جایگزین ساختگی دریافت نمی‌کنند.'],note:{kind:'info',title:'برچسب نمونه را بخوانید',text:'تصویر، نمودار و بازده پروژهٔ نمونه، مدرک عرضهٔ واقعی یا عملکرد تأییدشده نیست.'}},
   {id:'presentation',title:'نمایش و دسترس‌پذیری',paragraphs:['طراحی فعلی از کارت‌ها و پنجره‌های شیشه‌ای، رنگ دسته‌بندی، تصاویر روشن‌تر، آیکون‌های سه‌بعدی و گرافیک کرهٔ زمین استفاده می‌کند. زبان نمایش و تم روشن یا تیره از تنظیمات رابط کنترل می‌شوند.','کاهش حرکت در تنظیمات حساب و ترجیح کاهش حرکت دستگاه برای بخش‌های متحرک پیش‌بینی شده است. فعال‌بودن یک زبان به تنظیمات محتوای سایت و تکمیل ترجمهٔ همان بخش وابسته است؛ وجود ساختار سه‌زبانه، تکمیل تمام ترجمه‌ها را تضمین نمی‌کند.']},
  ],sources:['components/marketplace.tsx','components/market-page.tsx','components/site-shell.tsx','lib/catalog.ts','lib/server.ts','lib/market-assets.ts','ASSETS.md'],related:['asset-catalog','project-details','smart-investment','storefront'],
 },
 {
  slug:'asset-catalog',group:'marketplace',title:'دارایی‌ها و پروژه‌های نمونه',description:'شناخت ابزارهای بازار، هویت نمادها و تفاوت آن‌ها با پروژه‌های نمایشی.',status:'configured',audience:'کاربران و توسعه‌دهندگان',
  sections:[
   {id:'instruments',title:'پنج دارایی متصل به دادهٔ بازار',table:{headers:['عنوان رابط','نماد توکن','بازار مرجع','توضیح هویت'],rows:[['تتر','USDT','USDTTMN','تتر در بازار تومان'],['تترگلد','XAUT','XAUTTMN','Tether Gold'],['گواهی نفت دیجیتال','USOON','USOONTMN','United States Oil Fund · Ondo'],['گواهی مس دیجیتال','COPXON','COPXONTMN','Global X Copper Miners · Ondo'],['گواهی نقره دیجیتال','SLVON','SLVONTMN','iShares Silver Trust · Ondo']]}},
   {id:'identity',title:'هر نماد چه چیزی را نمایش می‌دهد؟',paragraphs:['مبدل بازار، نماد، دارایی پایه و واحد مظنه را به‌صورت دقیق تطبیق می‌دهد. قیمت این پنج بازار به تومان برای هر واحد توکن دریافت می‌شود. عنوان عمومی «نفت»، «مس» یا «نقره» نباید به‌عنوان تعداد بشکه، کیلوگرم یا اونس فیزیکی تفسیر شود؛ ابزارهای USOON، COPXON و SLVON در این اتصال، توکن‌های مرتبط با صندوق هستند.','حجم ۲۴ساعته، حجم معاملات انجام‌شده است. این عدد موجودی فروشنده، کل عرضه یا ظرفیت قطعی قابل خرید نیست. تعداد سفارش‌های دفتر سفارش نیز داده‌ای مستقل از حجم معاملات است.']},
   {id:'samples',title:'نمونه‌های طراحی در مخزن',paragraphs:['فایل بذر نمونه، پروژه‌های زیر را با is_demo=true تعریف می‌کند. وجود فایل بذر به معنی نصب آن در هر محیط نیست. بازده‌ها و تصاویر این رکوردها برای نمایش محصول‌اند و نباید در مستندات به‌عنوان سود واقعی بازنشر شوند.'],table:{headers:['پروژهٔ نمونه','شناسهٔ مسیر','کاربرد نمایشی'],rows:[['توسعه نیروگاه خورشیدی','solar-power-revenue','مشارکت مفهومی در جریان درآمد فروش برق؛ نماد نمایشی در بذر بازار eSOL'],['مجتمع فرهنگی تفریحی ایزدشهر','izadshahr-cultural-complex','نمونهٔ توکن املاک و توسعهٔ فرهنگی و تفریحی؛ IZAD'],['اپلیکیشن استور غیرمتمرکز','decentralized-app-store','نمونهٔ استارتاپ و زیرساخت نرم‌افزار؛ DAPP'],['مارکت‌پلیس NFT','nft-marketplace','نمونهٔ بازار آثار و دارایی‌های دیجیتال؛ PNFT']]}},
   {id:'freshness',title:'تازگی و کیفیت قیمت',paragraphs:['در اتصال فعلی، دریافت قیمت روی سرور برای ۲۰ ثانیه همگرا و نگهداری می‌شود؛ صفحات قابل مشاهده هر ۳۰ ثانیه تازه‌سازی می‌شوند. پس از ۹۰ ثانیه، قیمت معتبرِ تازه محسوب نمی‌شود. receivedAt زمان دریافت پاسخ توسط برنامه است، نه زمان آخرین معامله در سامانهٔ ارائه‌دهنده.','نمودار جزئیات از قیمت پایانی کندل‌های ساعتی و دفتر سفارش از سطوح معتبر خرید و فروش ساخته می‌شود. نبود داده یا پاسخ نامعتبر، به نمایش وضعیت ناموجود منجر می‌شود؛ نمودار ساختگی برای دارایی واقعی تولید نمی‌شود.']},
   {id:'unified',title:'نمایش یکپارچه در پلانک',paragraphs:['این دارایی‌ها در همان کارت‌ها، دسته‌بندی‌ها، جستجو، مرتب‌سازی و انتخاب سبد پروژه‌های پلانک ظاهر می‌شوند. نمونه‌های کالایی مشخص‌شده در کد برای جلوگیری از تکرار از کاتالوگ نمایشی کنار گذاشته می‌شوند؛ رکورد پایگاه داده حذف یا تغییر نمی‌کند.','دادهٔ کاتالوگ پروژه‌ها و مظنهٔ بازار دو قرارداد جدا دارند. GET /api/catalog پروژه‌ها و محتوای سایت را می‌دهد؛ ابزارهای متصل در رابط با دادهٔ GET /api/markets/wallex ترکیب می‌شوند.']},
  ],sources:['lib/wallex.ts','lib/wallex-server.ts','lib/market-assets.ts','lib/server.ts','lib/market-preview.ts','supabase/seeds/20260908_sample_projects.sql','supabase/seeds/20260908_token_market_samples.sql','WALLEX_SETUP.md'],related:['api-marketplace','project-details','smart-investment'],
 },
 {
  slug:'project-details',group:'marketplace',title:'صفحهٔ دارایی و بررسی خرید و فروش',description:'نحوهٔ خواندن اطلاعات پروژه و محدودیت‌های محاسبهٔ معامله.',status:'implemented',audience:'سرمایه‌گذاران',
  sections:[
   {id:'review',title:'پیش از ورود مبلغ',paragraphs:['صفحهٔ پروژه از مسیر /projects/[slug] باز می‌شود و عنوان، توضیح، مشخصات توکن، قیمت ثبت‌شده، مدت، ظرفیت، مدارک و ریسک منتشرشده را در اختیار کاربر قرار می‌دهد. مسیر نامعتبر یا پروژه‌ای که در کاتالوگ منتشرشده وجود ندارد، صفحهٔ یافت‌نشدن دریافت می‌کند.','نماد و تصویر برای شناسایی اولیه‌اند؛ تعریف حقوق دارنده، شرایط انتقال، سهم درآمد و شرایط خروج باید از توضیح و اسناد همان پروژه خوانده شود. برای دارایی متصل، پنجرهٔ بازار قیمت و اطلاعات واقعی موجود را کنار فرم خرید و فروش نشان می‌دهد.']},
   {id:'inputs',title:'مبلغ، تعداد و موجودی',paragraphs:['فرم‌های خرید و فروش از ورود ارقام فارسی و جداکنندهٔ سه‌رقمی پشتیبانی می‌کنند. گزینه‌های درصد موجودی تنها به موجودی آزاد حساب متصل‌اند؛ ارزش‌گذاری دارایی دیگر یا موجودی قفل‌شده به بودجهٔ قابل خرج تبدیل نمی‌شود.','برای پروژه‌ها، مقدار معامله به واحد کامل و ظرفیت باقی‌مانده محدود است. برای ابزارهای بازار، دقت تعداد از اطلاعات همان نماد خوانده می‌شود و حداقل یک توکن کامل فرض نمی‌شود. اگر دادهٔ موجودی نامعلوم باشد، رابط آن را با صفر ساختگی جایگزین نمی‌کند.']},
   {id:'rounding',title:'گردکردن و مبلغ تخمینی',paragraphs:['محاسبات مالی اصلی از رشتهٔ دهدهی و عدد صحیح بزرگ استفاده می‌کنند. در خرید ابزار بازار، تعداد رو به پایین و هزینهٔ نقدی به ریال کامل رو به بالا گرد می‌شود تا بودجهٔ واردشده تجاوز نشود. در فروش، مبلغ دریافتی رو به پایین گرد می‌شود.','مبلغ فرم، قیمت قطعی اجرا نیست. کارمزد نهایی، لغزش قیمت و نقدشوندگی باید در سرویس معامله تعیین شوند؛ رابط فعلی این عوامل را به‌صورت هزینهٔ قطعی جا نمی‌زند.']},
   {id:'review-dialog',title:'پنجرهٔ بازبینی چه می‌کند؟',paragraphs:['پس از رعایت شرایط فرم و ورود به حساب در مسیرهای لازم، کاربر می‌تواند خلاصهٔ مقدار و برآورد را بازبینی کند. دکمهٔ تأیید نهایی در انتظار سرویس اجراست و نمی‌تواند سفارش یا برداشت از موجودی بسازد.','POST /api/quote در همین نسخه عمداً پاسخ 503 می‌دهد. هیچ محاسبهٔ سمت مرورگر، رزرو موجودی یا سفارش پذیرفته‌شده محسوب نمی‌شود.'],note:{kind:'future',title:'اجرای واقعی هنوز فعال نیست',text:'فعال‌سازی نیازمند قیمت قطعی سمت سرور، رزرو اتمی، کنترل صلاحیت، ایجاد سفارش قابل تکرار امن، تأیید پرداخت و تطبیق مالی است.'}},
  ],sources:['app/projects/[slug]/page.tsx','components/project-page.tsx','components/token-trade.tsx','components/market-asset-trade.tsx','components/wallex-markets.tsx','lib/trade.ts','lib/market-trade.ts','app/api/quote/route.ts'],related:['asset-catalog','wallets','api-marketplace','localized-numbers'],
 },
 {
  slug:'smart-investment',group:'marketplace',title:'سرمایه‌گذاری هوشمند و چیدمان سبد',description:'ساخت یک برآورد شفاف با سرمایه، افق زمانی و ترجیحات خودتان.',status:'implemented',audience:'سرمایه‌گذاران',
  sections:[
   {id:'compact',title:'شروع از یک فیلد',paragraphs:['در صفحهٔ اصلی ابتدا فقط ورودی میزان سرمایه و کنترل بازکردن تنظیمات دیده می‌شود. با ورود به فیلد یا بازکردن کشو، ارز مبنا، موجودی، افق زمانی، ریسک‌پذیری، انتخاب دارایی و سبد پیشنهادی ظاهر می‌شوند. بستن کشو یا عوض‌کردن تب، انتخاب‌ها را در همان بازدید حفظ می‌کند.','مدل مبلغ در آغاز خالی است، اما نمایش فیلد عددی طبق قرارداد رابط صفر است. تا زمانی که مبلغ مثبت معتبر وارد نشود، سبدی از طرف کاربر ساخته نمی‌شود.']},
   {id:'controls',title:'انتخاب‌های قابل تنظیم',table:{headers:['کنترل','رفتار'],rows:[['ارز مبنا','تومان، ریال یا USDT؛ تومان یک رقم اعشار، ریال بدون اعشار و USDT تا شش رقم اعشار'],['موجودی','همهٔ موجودی، ۱۰، ۲۵، ۷۵ و ۱۰۰ درصد و نوار ۰ تا ۱۰۰ درصد از موجودی آزاد همین ارز'],['افق زمانی','گزینه‌های ۶، ۱۲، ۲۴ و ۳۶ ماه در رابط'],['دارایی‌ها','پروژه‌های واجد شرایط و پنج ابزار متصل در یک انتخاب مشترک'],['اولویت','توزیع متوازن یا وزن‌دهی بر اساس نزدیکی مدت پروژه به افق انتخابی']]}},
   {id:'risk-policy',title:'ریسک‌پذیری چه تغییری ایجاد می‌کند؟',paragraphs:['این گزینه، نسبت ذخیره و حد تمرکز را تنظیم می‌کند؛ رتبه‌بندی کارشناسی ریسک هر دارایی یا پیش‌بینی سود نیست. سیاست روی کل سبد یکپارچه اعمال می‌شود.'],table:{headers:['ترجیح','ذخیرهٔ نقدی هدف','حداکثر سهم هر دارایی از کل سرمایه'],rows:[['محتاطانه','۳۵٪','۲۰٪'],['متعادل','۲۰٪','۳۰٪'],['جسورانه','۱۰٪','۴۰٪']]}},
   {id:'eligibility',title:'چرا یک دارایی وارد سبد نمی‌شود؟',paragraphs:['پروژه باید منتشرشده، دارای قیمت صحیح مثبت، ظرفیت باقی‌مانده و مدت معتبر تا افق انتخابی باشد. ابزار بازار باید هویت نماد منطبق، قیمت تازه، وضعیت اسپات و دقت تعداد معتبر داشته باشد. دادهٔ قدیمی یا انتخاب ناسازگار حذف می‌شود و تعداد انتخاب‌های کنارگذاشته‌شده در توضیح سبد قابل بررسی است.','ظرفیت محدود پروژه و سقف تمرکز در تقسیم بودجه لحاظ می‌شوند. حجم معاملات بازار ظرفیت قابل خرید تلقی نمی‌شود. باقیماندهٔ گردکردن یا نبود ظرفیت، نقدی می‌ماند و سهم‌های نمودار در مجموع صد درصد می‌شوند.']},
   {id:'exchange',title:'مرجع تبدیل ارز',paragraphs:['تبدیل تومان و ریال ثابت است: هر تومان برابر ده ریال. تبدیل USDT با مرجع انتخاب‌شده توسط مدیر انجام می‌شود؛ پیش‌فرض والکس است و ساختار فعلی انتخاب تکی والکس یا نوبیتکس و میانگین حسابی هر دو را پشتیبانی می‌کند.','این مرجع، نرخ USDT/IRR است و نباید نرخ نقدی دلار آمریکا نامیده شود. در حالت میانگین، همهٔ منابع انتخاب‌شده باید قیمت تازهٔ معتبر داشته باشند؛ برنامه بی‌صدا منبع خراب را حذف یا نرخ قدیمی را جایگزین نمی‌کند.']},
   {id:'limits',title:'خروجی سبد، دستور معامله نیست',paragraphs:['سبد با هر انتخاب دوباره محاسبه می‌شود و هر دارایی برای بررسی بیشتر لینک دارد. این ابزار سفارش ثبت نمی‌کند، سود آینده را تخمین نمی‌زند و تضمین خروج در پایان مدت پروژه نمی‌دهد.','کارمزد، لغزش و عمق دفتر سفارش در برآورد لحاظ نشده‌اند. عنوان «هوشمند» در این بخش به قواعد شفاف چیدمان اشاره دارد؛ موتور فعلی مدل پیش‌بینی یا مشاور هوش مصنوعی متصل نیست.']},
  ],sources:['components/smart-investment.tsx','lib/smart-investment.ts','lib/unified-investment.ts','lib/investment-amount.ts','lib/exchange-rate.ts','lib/exchange-rate-server.ts','COPY_TRADING.md','WALLEX_SETUP.md'],related:['copy-trading','asset-catalog','api-marketplace','localized-numbers'],
 },
 {
  slug:'copy-trading',group:'marketplace',title:'کپی‌ترید: تجربهٔ فعلی و مسیر اتصال',description:'بررسی الگوهای نمایشی، اتصال آزمایشی و مدل پیشنهادی سهم سود.',status:'preview',audience:'سرمایه‌گذاران و طراحان سرویس',
  sections:[
   {id:'entry',title:'ورود به کپی‌ترید',paragraphs:['تب کپی‌تریدرها در سرمایه‌گذاری هوشمند، معرفی کوتاه کشویی دارد و به /copy-trading می‌رود. صفحهٔ اختصاصی سه الگوی «ثبات و تنوع»، «تعادل هوشمند» و «فرصت‌های پویا» را برای آشنایی با تجربهٔ کاربری نشان می‌دهد.','این نام‌ها اشخاص واقعی، تریدر تأییدشده یا رتبه‌بندی سودآورترین افراد نیستند. سابقهٔ معاملاتی و عملکرد واقعی هنوز به این صفحه متصل نشده است.']},
   {id:'profiles',title:'صفحهٔ اختصاصی هر الگو',table:{headers:['مسیر','الگوی نمایشی'],rows:[['/copy-trading?trader=steady','ثبات و تنوع'],['/copy-trading?trader=balanced','تعادل هوشمند'],['/copy-trading?trader=dynamic','فرصت‌های پویا']]},paragraphs:['فیلتر سبک به مقایسهٔ همین الگوهای نمایشی کمک می‌کند. هر صفحه توضیح سبک، فرم سرمایه و بخش برنامهٔ اختصاصی دارد؛ بازده یا تعداد دنبال‌کنندهٔ ساختگی نمایش داده نمی‌شود.']},
   {id:'trial',title:'اتصال آزمایشی و نمایش برنامه',paragraphs:['کاربر سرمایهٔ مثبت، حد افت نمونه و بازهٔ بررسی را تعیین و آزمایشی بودن اتصال را تأیید می‌کند. سپس ترکیب بودجه و قواعد الگو نمایش داده می‌شوند. قطع اتصال، برنامه را دوباره می‌بندد و ویرایش تنظیمات را آزاد می‌کند.','اتصال تنها در وضعیت همان صفحه نگهداری می‌شود و با بارگذاری مجدد از بین می‌رود. هیچ موجودی خوانده یا تغییر داده نمی‌شود و هیچ سفارش، مجوز معامله یا رابطهٔ دنبال‌کردن پایدار ساخته نمی‌شود. حد افت نمونه، سفارش توقف واقعی ایجاد نمی‌کند.']},
   {id:'profit-share',title:'سهم سود چگونه معرفی شده است؟',paragraphs:['نسبت نمایشی ۸۰ درصد برای سرمایه‌گذار و ۲۰ درصد برای تریدر، فقط مثال طراحی است؛ تعرفهٔ فعال یا محاسبهٔ تسویه نیست. مدل پیشنهادی قرار است سهم تریدر را فقط از سود خالص تحقق‌یافتهٔ مثبت بگیرد، نه از اصل سرمایه.','نرخ هر تریدر، جبران زیان قبلی، دورهٔ تسویه، هزینه‌ها و شرایط خروج باید پیش از اتصال واقعی تعریف و پذیرفته شوند. نسخهٔ فعلی هیچ سود یا کارمزدی ایجاد، جمع یا پرداخت نمی‌کند.']},
   {id:'live-requirements',title:'چه چیزی برای کپی‌ترید واقعی باقی مانده است؟',bullets:['پذیرش و شناسایی تریدرهای واقعی و دریافت عملکرد قابل راستی‌آزمایی.','دسترسی به برنامه پس از کنترل مجوز روی سرور و رابطهٔ اتصال پایدار.','موتور اجرای سفارش، حدود مجوز، کنترل ریسک و رفتار مشخص هنگام قطع اتصال.','قرارداد نرخ، گزارش تسویه و سازوکار محاسبه و پرداخت سهم سود.'],note:{kind:'future',title:'قفل نمایشی، کنترل دسترسی واقعی نیست',text:'برنامه‌های این نسخه صرفاً محتوای نمونه‌اند. برنامهٔ واقعی باید پس از مجوز سرور دریافت شود؛ پنهان‌کردن بخش رابط به‌تنهایی حفاظت دسترسی ایجاد نمی‌کند.'}},
  ],sources:['components/copy-trading-page.tsx','app/copy-trading/page.tsx','lib/copy-trading.ts','COPY_TRADING.md'],related:['smart-investment','project-details','roadmap'],
 },
 {
  slug:'storefront',group:'marketplace',title:'ساخت بازار و ویترین شخصی',description:'انتخاب دارایی‌های عمومی و ساخت صفحه‌ای واقعی که با لینک باز می‌شود.',status:'implemented',audience:'همهٔ کاربران',
  sections:[
   {id:'editor',title:'ویترین خودتان را بسازید',paragraphs:['از بخش «بازار خودتون را بسازید» به /storefront/create بروید. نامی برای ویترین، توضیحی کوتاه و یکی از رنگ‌های نعنایی، بنفش یا کهربایی انتخاب کنید؛ سپس دارایی‌های دلخواه را از کاتالوگ منتشرشده انتخاب کنید.','جستجو با نام یا نماد و پیش‌نمایش زنده در همان صفحه در دسترس است. ویترین می‌تواند پروژه‌های پلانک و ابزارهای بازار را در یک مجموعه نشان دهد.']},
   {id:'limits',title:'حدود اطلاعات و انتخاب',table:{headers:['فیلد','محدودیت'],rows:[['نام','اجباری؛ حداکثر ۶۰ نویسه'],['توضیح','اختیاری؛ حداکثر ۱۶۰ نویسه'],['دارایی‌ها','حداقل یک و حداکثر ۱۲ دارایی؛ شناسه‌های تکراری یکی می‌شوند'],['رنگ','mint، violet یا amber'],['دارایی ناموجود','در صفحهٔ عمومی نمایش داده نمی‌شود؛ برای ساخت لینک تازه باید از انتخاب نامعتبر حذف شود']]}},
   {id:'share',title:'لینک عمومی چگونه کار می‌کند؟',paragraphs:['دکمهٔ «ساخت لینک ویترین»، آدرس /storefront را با نام، توضیح، شناسهٔ دارایی‌ها و رنگ در پارامترهای نشانی می‌سازد. کپی لینک فقط با کلیک کاربر انجام می‌شود و نتیجهٔ موفق یا ناموفق نمایش داده می‌شود.','این تنظیمات در لینک عمومی قرار دارند. ویرایش بعدی، لینک تازه‌ای می‌سازد؛ فروشگاهی در حساب کاربری یا پایگاه داده ذخیره نمی‌شود. دارایی‌های هر لینک هنگام بازشدن دوباره از فهرست عمومی فعلی تطبیق داده می‌شوند.']},
   {id:'public-view',title:'بازدیدکننده چه می‌بیند؟',paragraphs:['صفحهٔ عمومی فقط دارایی‌های انتخاب‌شده و همچنان منتشرشده را نشان می‌دهد. قیمت از اطلاعات موجود کاتالوگ یا قیمت تازهٔ بازار می‌آید؛ برچسب نمونه حفظ می‌شود و دادهٔ ناموجود به‌صورت ناموجود باقی می‌ماند.','برای بررسی و خرید و فروش، کاربر به صفحهٔ همان دارایی در بازار پلانک می‌رود. این صفحه انتخابی از دارایی‌های عمومی است و مالکیت، موجودی فروشنده، درآمد یا سود سازندهٔ ویترین را اثبات نمی‌کند.']},
   {id:'scope',title:'محدودهٔ فروشگاه فعلی',paragraphs:['ویترین شخصی یک مجموعهٔ قابل اشتراک است. دامنهٔ مستقل، حساب فروشنده، سفارش مستقل فروشگاه، کمیسیون، پذیرش دارایی جدید و داشبورد فروش در این قابلیت پیاده نشده‌اند.','لینک ناقص یا نامعتبر، پیام مشخص و مسیر ساخت ویترین تازه دارد. اگر بخشی از دارایی‌ها حذف یا از انتشار خارج شده باشند، تعداد موارد ناموجود اعلام می‌شود و بقیهٔ مجموعه قابل مشاهده می‌ماند.'],links:[{label:'ساخت ویترین',href:'/storefront/create'}]},
  ],sources:['components/market-builder-promo.tsx','components/storefront-page.tsx','lib/storefront.ts','app/storefront/page.tsx','app/storefront/create/page.tsx','tests/storefront.test.mjs'],related:['marketplace','asset-catalog','api-marketplace'],
 },
 {
  "slug": "tokenization",
  "group": "tokenization",
  "title": "ثبت و پیگیری توکنایزیشن دارایی",
  "description": "پروندهٔ خصوصی دارایی، بررسی کارشناسی و پذیرش توکنومیکس تا ثبت نتیجهٔ واقعی صدور.",
  "status": "configured",
  "audience": "صاحبان دارایی و پروژه",
  "sections": [
    {
      "id": "meaning",
      "title": "ورود به پروندهٔ دارایی",
      "paragraphs": [
        "صفحهٔ /tokenize مسیر ثبت درخواست، نگهداری پیش‌نویس، بارگذاری مدارک و پیگیری نتیجه را فراهم می‌کند. معرفی پنج‌مرحله‌ای صفحهٔ اصلی، نمای کلی مسیر از دارایی تا بازار است؛ صفحهٔ پرونده مراحل اجرایی دریافت اطلاعات و بررسی همان درخواست را نشان می‌دهد.",
        "ثبت درخواست به حساب واردشده نیاز دارد. کاربر ابتدا شرایط جاری را می‌خواند و می‌پذیرد، سپس نوع دارایی را انتخاب می‌کند. ثبت پرونده اثبات مالکیت، مجوز عرضه یا تضمین صدور و فروش توکن نیست."
      ],
      "links": [
        {
          "label": "شروع ثبت دارایی",
          "href": "/tokenize"
        }
      ]
    },
    {
      "id": "types",
      "title": "۲۰ نوع دارایی و اطلاعات اختصاصی",
      "paragraphs": [
        "دارایی‌های مشهود شامل نیروگاه خورشیدی، املاک، زمین، ملک تجاری، کشاورزی، ماشین‌آلات، خودرو، فلزات گران‌بها، آثار هنری، پروژهٔ نفتی، نیروگاه بادی، زیرساخت و پروژهٔ معدنی هستند. دارایی‌های نامشهود شامل استارتاپ، سهام شرکت، مالکیت فکری، پتنت، برند، نرم‌افزار و حق دریافت درآمد هستند.",
        "عنوان، مالک، نوع مالک، کشور، شهر، نشانی، معرفی و ارزش برآوردی ریالی اطلاعات مشترک‌اند. هر نوع دارایی فیلدهای تخصصی خود را دارد؛ برای مثال ظرفیت نیروگاه، مشخصات ثبتی ملک یا محدودهٔ حقوق نرم‌افزار. مبلغ‌ها به‌صورت رشتهٔ عددی دقیق نگهداری می‌شوند و ورود ارقام فارسی پشتیبانی می‌شود."
      ]
    },
    {
      "id": "steps",
      "title": "پنج مرحلهٔ پرونده",
      "table": {
        "headers": [
          "مرحله",
          "عملیات فعلی"
        ],
        "rows": [
          [
            "۱. انتخاب دارایی",
            "انتخاب گروه مشهود یا نامشهود و نوع دقیق دارایی پس از مطالعهٔ شرایط."
          ],
          [
            "۲. مشخصات دارایی",
            "تکمیل اطلاعات مشترک و اختصاصی؛ ذخیرهٔ پیش‌نویس ناقص امکان‌پذیر است."
          ],
          [
            "۳. اسناد و مدارک",
            "انتخاب موقت مدارک ضروری و اختیاری؛ بارگذاری فقط هنگام ذخیرهٔ پیش‌نویس یا ارسال انجام می‌شود."
          ],
          [
            "۴. بررسی و تأیید",
            "مرور اطلاعات و مدارک و ارسال پرونده؛ پس از ارسال، نمایش نظرهای حقوقی، مالی و فنی و موارد نیازمند اصلاح."
          ],
          [
            "۵. توکنومیکس و واریز",
            "مطالعه و دریافت متن پیشنهاد، پذیرش نسخهٔ نهایی و پیگیری نتیجهٔ صدور برای کیف پول داخلی پلانک."
          ]
        ]
      }
    },
    {
      "id": "documents",
      "title": "مدارک خصوصی و اصلاح پرونده",
      "paragraphs": [
        "دکمه‌های مرحلهٔ قبل و مرحلهٔ بعد، اطلاعات فرم و فایل‌های انتخاب‌شده را در همان صفحه حفظ می‌کنند و به‌تنهایی چیزی به سرور نمی‌فرستند. برای نگهداری پس از بستن یا تازه‌سازی صفحه، «ذخیرهٔ پیش‌نویس» را انتخاب کنید؛ ذخیرهٔ نهایی و ارسال برای بررسی در مرحلهٔ چهارم انجام می‌شود.",
        "مدارک متناسب با نوع دارایی دریافت می‌شوند. فایل‌های PDF، JPG و PNG تا ۱۰ مگابایت پذیرفته می‌شوند؛ نوع محتوای فایل در سرور بررسی می‌شود. مدارک در فضای خصوصی نگهداری می‌شوند و دانلود به مجوز صاحب پرونده یا کارشناس مجاز وابسته است.",
        "پیش‌نویس و پروندهٔ نیازمند اصلاح قابل ویرایش‌اند. مدارک ردشده یا نیازمند اصلاح باید جایگزین شوند؛ وجود یک فایل به معنی تأیید آن نیست. پس از ارسال، تغییر مستقیم اطلاعات و مدارک توسط مشتری بسته می‌شود تا پرونده دوباره برای اصلاح بازگردانده شود.",
        "یادداشت داخلی کارشناسان برای مشتری ارسال نمی‌شود. مشتری پیام نتیجهٔ هر بررسی و پیام مربوط به مدرک یا پروندهٔ خود را می‌بیند."
      ]
    },
    {
      "id": "states",
      "title": "وضعیت‌ها و پذیرش نسخهٔ مشخص",
      "paragraphs": [
        "وضعیت پرونده از پیش‌نویس به ارسال‌شده و در حال بررسی می‌رود و ممکن است نیازمند اصلاح یا رد شود. پس از تکمیل بررسی‌های لازم، پیشنهاد توکنومیکس با شمارهٔ نسخه در اختیار صاحب دارایی قرار می‌گیرد.",
        "پذیرش پیشنهاد به شمارهٔ نسخه و آخرین نسخهٔ پرونده وابسته است. تغییر مدارک یا اطلاعات، رضایت ثبت‌نشدهٔ رابط را پاک می‌کند و تعارض با تغییر هم‌زمان، خطای روشن می‌دهد. پذیرش نهایی درخواست صدور ایجاد می‌کند؛ این رویداد به‌تنهایی وضعیت صادرشده یا موجودی توکن ایجاد نمی‌کند."
      ]
    },
    {
      "id": "activation",
      "title": "وضعیت فعال‌سازی و واریز واقعی",
      "paragraphs": [
        "ثبت و بررسی پرونده در محیط تأییدشدهٔ پلانک در تاریخ ۲۰۲۶/۰۹/۲۴ راه‌اندازی شد؛ ۲۰ نوع دارایی، جدول‌های محافظت‌شده و فضای خصوصی مدارک در پایگاه داده فعال‌اند. برای نصب در محیط دیگر، اجرای مهاجرت 202609240001_asset_tokenization.sql و تنظیم فضای خصوصی مدارک همچنان لازم است.",
        "پس از پذیرش، پرونده در انتظار صدور باقی می‌ماند تا فرایند معتبر صدور و سرویس بررسی رسید شبکه راه‌اندازی و تنظیم شود. سرویس مورد اعتماد باید شبکه، قرارداد، مقصد، مقدار و رسید واقعی را بررسی کند؛ ثبت قطعی و یک‌بارهٔ موجودی کیف پول داخلی فقط پس از این تأیید انجام می‌شود.",
        "در این مسیر نشانی خارجی از مشتری دریافت نمی‌شود. انتخاب مقصد و بررسی رسید وظیفهٔ سرویس مورد اعتماد است و مرورگر مشتری یا کارشناس نمی‌تواند موفقیت صدور یا موجودی را اعلام کند.",
        "در تخصیص اولیه، کل تعداد توکنِ تأییدشده در کیف پول داخلی صاحب پرونده قفل است. موجودی قابل معامله، برداشت یا استفاده در خدمات مالی به‌صورت خودکار فعال نمی‌شود و به فرایند جداگانهٔ آزادسازی نیاز دارد."
      ]
    },
    {
      "id": "limits",
      "title": "مرز این فرایند",
      "paragraphs": [
        "بررسی پرونده جای مجوز قانونی پروژه، استعلام مرجع مربوط یا قرارداد نهایی را نمی‌گیرد. ثبت تأیید کارشناس به معنی دریافت خودکار تمام مجوزهای هر حوزه نیست.",
        "عرضه در بازار پلانک یا بازار دیگر، اجرای انتقال، دوره‌های قفل، استیک، وام و توزیع درآمد به سرویس فعال و شرایط همان دارایی نیاز دارند. پذیرش پرونده و واریز داخلی، هیچ‌یک پذیرش خودکار در بازار خارجی یا تضمین نقدشوندگی ایجاد نمی‌کنند."
      ]
    }
  ],
  "sources": [
    "components/tokenize-page.tsx",
    "app/tokenize/page.tsx",
    "lib/tokenization.ts",
    "app/api/tokenization/route.ts",
    "app/api/tokenization/documents/route.ts",
    "lib/tokenization-files.ts",
    "supabase/migrations/202609240001_asset_tokenization.sql",
    "lib/tokenization-issuance.ts",
    "app/api/tokenization/issuance/route.ts",
    "TOKENIZATION_SETUP.md"
  ],
  "related": [
    "tokenomics",
    "asset-management",
    "api-customer",
    "identity",
    "support"
  ]
},
 {
  "slug": "tokenomics",
  "group": "tokenization",
  "title": "پیشنهاد توکنومیکس و حقوق دارنده",
  "description": "اطلاعات پیشنهاد، بررسی نسخه و معنای پذیرش و صدور در کیف پول داخلی.",
  "status": "configured",
  "audience": "صاحبان دارایی و طراحان محصول",
  "sections": [
    {
      "id": "definition",
      "title": "پیشنهاد وابسته به پرونده",
      "paragraphs": [
        "کارشناس برای پروندهٔ بررسی‌شده، پیشنهاد توکنومیکس ثبت می‌کند. پیشنهاد شمارهٔ نسخه دارد و نام و نماد، تعداد کل، دقت توکن، قیمت ریالی، شبکه، حقوق دارنده، شرایط انتقال و بازخرید، ریسک‌ها و ردیف‌های تخصیص را مشخص می‌کند.",
        "نام یا نماد به‌تنهایی حق اقتصادی ایجاد نمی‌کند. مالکیت، منافع و شرایط خروج باید با اسناد همان دارایی سازگار باشند. تأیید پرونده یا پیشنهاد، مدرک استقرار قرارداد هوشمند نیست."
      ]
    },
    {
      "id": "parameters",
      "title": "اطلاعاتی که باید بررسی کنید",
      "table": {
        "headers": [
          "موضوع",
          "محتوا"
        ],
        "rows": [
          [
            "تعداد و دقت",
            "تعداد کل مثبت با دقت صفر تا ۱۸ رقم اعشار؛ مقدار در دفتر داخلی باید کمتر از ۱۰ به توان ۲۰ واحد باشد."
          ],
          [
            "قیمت",
            "قیمت مثبت هر واحد به ریال، بدون اعشار ریالی؛ قیمت پیشنهادی تضمین قیمت معامله یا نقدشوندگی نیست."
          ],
          [
            "شبکه",
            "نام شبکه و شناسهٔ عددی زنجیره؛ انتخاب در فرم به معنی فعال‌شدن اتصال صدور نیست."
          ],
          [
            "تخصیص",
            "عنوان، درصد با حداکثر دو رقم اعشار و دورهٔ قفل پیشنهادی هر ردیف؛ مجموع درصدها دقیقاً صد است."
          ],
          [
            "حقوق و شرایط",
            "حقوق دارنده، قواعد انتقال، شرایط بازخرید و افشای ریسک باید کامل باشند."
          ],
          [
            "مقصد",
            "کیف پول داخلی صاحب پرونده در پلانک؛ مقصد خارجی در فرم پیشنهاد قابل تعیین نیست."
          ]
        ]
      }
    },
    {
      "id": "review",
      "title": "مطالعه و دریافت متن پیشنهاد",
      "paragraphs": [
        "صاحب پرونده مشخصات، جدول تخصیص و متن شرایط را در مرحلهٔ نهایی می‌بیند و می‌تواند متن کامل همان نسخه را دریافت کند. گزینهٔ پذیرش زمانی در دسترس است که پیشنهاد آمادهٔ پذیرش و بررسی‌ها و مدارک ضروری تأیید شده باشند.",
        "نسخهٔ پیشنهاد و نسخهٔ پرونده همراه پذیرش کنترل می‌شوند. تغییر پیشنهاد به پذیرش نسخهٔ جدید نیاز دارد؛ رضایت قبلی به پیشنهاد تغییرکرده منتقل نمی‌شود. خطای تعارض باید با دریافت آخرین وضعیت و مطالعهٔ دوباره رفع شود."
      ]
    },
    {
      "id": "acceptance",
      "title": "پذیرش با صدور فرق دارد",
      "paragraphs": [
        "با پذیرش، نسخهٔ پذیرفته‌شدهٔ پیشنهاد و اطلاعات مربوط به آن ثبت و درخواست صدور ساخته می‌شود. نمایش «در انتظار صدور» به معنی ثبت این درخواست است؛ رسید شبکه، توکن صادرشده یا موجودی قابل خرج هنوز نتیجهٔ این عمل نیست.",
        "این پذیرش اجازهٔ برداشت وجه یا ایجاد هزینهٔ اعلام‌نشده نمی‌دهد. هر هزینه یا تعهد اجرایی باید پیش از اجرا مشخص و جداگانه پذیرفته شود."
      ]
    },
    {
      "id": "receipt",
      "title": "از رسید معتبر تا ثبت موجودی",
      "paragraphs": [
        "اتصال صدور و سرویس بررسی رسید باید پیش از واریز واقعی فعال شوند. نتیجه باید با پیشنهاد پذیرفته‌شده، شبکه، قرارداد و مقصد مورد انتظار و مقدار دقیق تطبیق داده شود. رسید نامعتبر، متفاوت یا مربوط به پروندهٔ دیگر نباید موجودی ایجاد کند.",
        "پس از تأیید معتبر، ثبت موجودی داخلی، تراکنش و سابقهٔ تخصیص به همان صاحب پرونده انجام می‌شود و تمام تعداد در ابتدا قفل است. مقدار قابل خرج، برداشت یا انتقال خودکار ایجاد نمی‌شود. کنترل تکرار از اعتباردهی دوبارهٔ یک نتیجه جلوگیری می‌کند. رابط مشتری فقط نتیجهٔ ثبت‌شده را می‌خواند و برای اعلام صدور یا تغییر موجودی مجوز ندارد."
      ]
    },
    {
      "id": "limits",
      "title": "شرایط پیشنهادی و اجرای قرارداد",
      "paragraphs": [
        "ردیف تخصیص یا دورهٔ قفل در پیشنهاد، به‌خودی‌خود قرارداد قفل، توزیع خودکار به اشخاص، برنامهٔ واگذاری تدریجی یا کنترل انتقال روی شبکه ایجاد نمی‌کند. اجرای این شرایط باید در سرویس و قرارداد دارایی پیاده و بررسی شود.",
        "صدور قرارداد، سوزاندن، توزیع درآمد، بازارگردانی و عرضهٔ خارجی از صرف ثبت پیشنهاد نتیجه نمی‌شوند. برای عملیاتی‌شدن این قابلیت در هر محیط، نصب مهاجرت پایگاه داده و راه‌اندازی فرایند صدور و سرویس بررسی رسید لازم است."
      ],
      "links": [
        {
          "label": "مشاهدهٔ مسیر ثبت دارایی",
          "href": "/tokenize"
        },
        {
          "label": "مراحل و پیش‌نیازهای فعال‌سازی",
          "href": "/docs/tokenization"
        }
      ]
    }
  ],
  "sources": [
    "components/tokenize-page.tsx",
    "lib/tokenization.ts",
    "app/api/tokenization/route.ts",
    "supabase/migrations/202609240001_asset_tokenization.sql",
    "lib/catalog.ts",
    "lib/tokenization-issuance.ts",
    "app/api/tokenization/issuance/route.ts",
    "TOKENIZATION_SETUP.md"
  ],
  "related": [
    "tokenization",
    "asset-management",
    "project-details",
    "asset-catalog"
  ]
},
 {
  slug:'asset-management',group:'account',title:'مدیریت دارایی و سوابق',description:'آنچه داشبورد کیف پول نمایش می‌دهد و خدماتی که هنوز عملیات جدید ندارند.',status:'configured',audience:'کاربران دارای حساب',
  sections:[
   {id:'routes',title:'بخش‌های کیف پول',table:{headers:['مسیر','کاربرد'],rows:[['/wallet یا /wallet/overview','نمای کلی دارایی‌ها'],['/wallet/assets','فهرست و جستجوی دارایی‌های ثبت‌شده'],['/wallet/deposit','فرم مبلغ و سابقهٔ شارژ؛ درگاه غیرفعال'],['/wallet/withdraw','وضعیت برداشت؛ عملیات برداشت غیرفعال'],['/wallet/transactions','حداکثر ۱۰۰ تراکنش اخیر'],['/wallet/orders','حداکثر ۱۰۰ سفارش اخیر'],['/wallet/credit و /wallet/instant-credit','نمایش اعتبارهای ثبت‌شده؛ طرح جدید غیرفعال'],['/wallet/staking','نمایش موقعیت و پاداش ثبت‌شده؛ شروع استیک جدید غیرفعال']]}},
   {id:'balances',title:'خواندن مقدار و ارزش',paragraphs:['مقدار دارایی، مقدار قفل‌شده و ارزش ریالی یا USDT فیلدهای جدا هستند. مقدار قابل‌استفاده پس از کم‌کردن قفل‌شده به دست می‌آید؛ ارزش‌گذاری سبد به معنی پول نقد قابل خرج نیست.','کاربر می‌تواند نمایش موجودی را پنهان و دارایی‌های کوچک را فیلتر کند. دادهٔ ناموجود با موجودی واقعی صفر متفاوت است. همهٔ رکوردها باید متعلق به حساب واردشده باشند.']},
   {id:'history',title:'سوابق چه معنایی دارند؟',paragraphs:['جدول‌های سفارش و تراکنش، نوع، تاریخ، مقدار، وضعیت و شمارهٔ پیگیری رکوردهای موجود را نشان می‌دهند. فیلتر وضعیت برای مرور سوابق در دسترس است.','وجود جدول تاریخچه نشان‌دهندهٔ امکان ثبت سفارش از این نسخه نیست. مرورگر اجازهٔ نوشتن سفارش، ایجاد موجودی، کارمزد یا پاداش مالی را از API داشبورد ندارد.']},
   {id:'finance',title:'استیک، وام و اعتبار',paragraphs:['داشبورد می‌تواند موقعیت‌های استیک، مقدار پاداش ثبت‌شده، اصل اعتبار، ماندهٔ تعهد و سررسید را بخواند. این قابلیت برای نمایش داده‌های سرویس مالی آماده شده است.','شروع طرح جدید، درخواست وام، برداشت، بازپرداخت یا توزیع پاداش در رابط فعلی فعال نیست. متن معرفی توکنایزیشن دربارهٔ این خدمات، توضیح مسیر محصول است و نباید به‌عنوان فعال‌بودن عملیات تلقی شود.']},
   {id:'private',title:'ورود و حریم داده',paragraphs:['صفحه‌های حساب و کیف پول تا تعیین نشست، حالت انتظار یا دروازهٔ ورود دارند. خواندن اطلاعات از API خصوصی و توابعی انجام می‌شود که صاحب داده را از نشست معتبر تعیین می‌کنند.','اطلاعات پروفایل، حساب بانکی، تراکنش و مدارک احراز در کاتالوگ عمومی یا ویترین انتخابی قرار نمی‌گیرند.'],links:[{label:'رفتن به کیف پول',href:'/wallet'}]},
  ],sources:['lib/dashboard.ts','components/customer-dashboard.tsx','components/use-customer-data.ts','app/api/dashboard/route.ts','DASHBOARD_SETUP.md','CASH_WALLET.md'],related:['wallets','customer-account','api-customer'],
 },
 {
  slug:'customer-account',group:'account',title:'حساب، ورود و تنظیمات',description:'ثبت‌نام با موبایل، روش‌های ورود، پروفایل و ترجیحات نمایش.',status:'configured',audience:'کاربران و تیم پشتیبانی',
  sections:[
   {id:'signup',title:'ثبت‌نام',paragraphs:['فرم ثبت‌نام نام، نام خانوادگی، ایمیل، موبایل و رمز عبور می‌گیرد؛ نام کاربری و کد دعوت اختیاری‌اند. شماره باید با پیامک تأیید شود و سرور روشن‌بودن تأیید موبایل را بررسی می‌کند.','رمز جدید بین ۱۲ و ۲۵۶ نویسه پذیرفته می‌شود. نام کاربری ۳ تا ۳۲ حرف انگلیسی، عدد یا زیرخط دارد و با حرف شروع می‌شود. اتصال ایمیل پس از تأیید موبایل مسیر تأیید جدا دارد.']},
   {id:'login',title:'ورود و بازیابی',paragraphs:['ورود با ایمیل یا موبایل و رمز عبور، ورود پیامکی و بازیابی از طریق ایمیل یا موبایل پیاده شده‌اند. ورود با نام کاربری نیازمند سرویس محدود جستجوی نام کاربری روی سرور است.','کد پیامکی یک تا شش رقم فارسی، عربی یا لاتین را می‌پذیرد و برای اعتبارسنجی به قالب شش‌رقمی تبدیل می‌کند. کنترل واقعی اعتبار کد بر عهدهٔ سرویس احراز هویت است؛ تبدیل رقم، تأیید امنیتی نیست. بازیابی ایمیلی از مسیر PKCE و همان مرورگر استفاده می‌کند.']},
   {id:'profile',title:'پروفایل و تصویر',paragraphs:['در /account اطلاعات شخصی، وضعیت و سطح احراز دیده می‌شود. نام، نام خانوادگی، تاریخ تولد و در شرایط مجاز کد ملی قابل ثبت‌اند. مشخصات تأییدشده یا وابسته به تطبیق بانکی ممکن است برای ویرایش قفل باشند.','تصویر پروفایل از مسیر خصوصی خود حساب بارگذاری و خوانده می‌شود؛ قالب‌های JPG، PNG و WebP با سقف ۲ مگابایت پذیرفته‌اند. تصویر پروندهٔ احراز هویت و تصویر پروفایل دو فضای مستقل‌اند.']},
   {id:'preferences',title:'تنظیمات قابل ذخیره',bullets:['تم روشن یا تیره، زبان فعال سایت و واحد نمایش TMN یا USDT.','پنهان‌کردن موجودی، پنهان‌کردن دارایی‌های کوچک و کاهش حرکت.','ترجیح اعلان ایمیلی و تأیید ثبت یا لغو سفارش؛ اعمال عملیاتی آن‌ها وابسته به فعال‌شدن همان سرویس است.','خوانده‌شدن اعلان‌های موجود، ثبت و حذف هشدار قیمت؛ هشدارها تا اتصال سرویس اعلان متوقف می‌مانند.']},
   {id:'sections',title:'بخش‌های حساب و محدودیت‌ها',paragraphs:['پروفایل، بانک‌ها، امنیت، تنظیمات، هشدارها، دعوت دوستان، API و اعلان‌ها در /account قابل دسترسی‌اند. مسیر بخش نامعتبر صفحهٔ یافت‌نشدن دریافت می‌کند.','صفحهٔ API فقط مشخصات کلیدهای موجود و ابطال آن‌ها را پشتیبانی می‌کند؛ ایجاد کلید جدید یا API عمومی معامله در این نسخه فراهم نشده است. رمزساز مشتری و ثبت کامل دستگاه‌های نشست نیز به‌عنوان سرویس آماده‌سازی‌شده یا آتی معرفی می‌شوند، نه الزاماً متصل.']},
  ],sources:['components/customer-auth.tsx','lib/auth-input.ts','lib/customer-auth.ts','lib/auth-cookies.ts','lib/dashboard.ts','components/customer-dashboard.tsx','app/api/avatar/route.ts','AUTH_SETUP.md','DASHBOARD_SETUP.md'],related:['identity','wallets','referrals','api-customer'],
 },
 {
  slug:'wallets',group:'account',title:'کیف پول نقدی و اتصال والت عمومی',description:'تفاوت موجودی ثبت‌شده، آدرس تأییدشده و امکان انتقال وجه.',status:'configured',audience:'کاربران دارای حساب',
  sections:[
   {id:'cash',title:'موجودی نقدی واحد',paragraphs:['موجودی نقدی جدید با واحد ریال صحیح ثبت می‌شود؛ رکوردهای قدیمی تومان حفظ و برای نمایش فقط یک‌بار در مجموع منظور می‌شوند. هر تومان ده ریال است. موجودی کل، قفل‌شده و قابل‌استفاده جدا نمایش داده می‌شوند.','شروع یک حساب جدید با موقعیت صفر ریالی، اعتبار رایگان یا شارژ واقعی ایجاد نمی‌کند. نبود رکورد معتبر با صفر یکسان نیست و رابط نباید ارزش توکن پروژه را پول نقد تلقی کند.']},
   {id:'deposit',title:'شارژ و برداشت امروز',paragraphs:['صفحهٔ شارژ، مبلغ و سابقهٔ خصوصی پرداخت را نمایش می‌دهد. API تاریخچه اکنون enabled:false و provider:null برمی‌گرداند. ارسال مبلغ معتبر هنوز پاسخ 503 دارد و نه درخواست پرداخت، نه هدایت درگاه و نه تغییر موجودی ایجاد می‌کند.','پایهٔ دفتر پرداخت و اعتباردهی یک‌باره در پایگاه داده طراحی شده است، اما آداپتور درگاه، تأیید مستقل پرداخت، تطبیق مالی، برداشت و بازپرداخت به سرویس عملیاتی نیاز دارند.']},
   {id:'public-wallet',title:'اتصال آدرس عمومی',paragraphs:['MetaMask، Trust Wallet و والت‌های تزریقی استاندارد EVM از رابط قابل انتخاب‌اند. اتصال QR از WalletConnect به شناسهٔ پروژهٔ معتبر و تنظیم دامنه نیاز دارد. کاربر باید وارد حساب باشد و پیام اتصال را در والت تأیید کند.','سرور پیام EIP-4361 محدود به حساب و دامنه می‌سازد و امضای شخصی را بررسی می‌کند. پیام پنج دقیقه اعتبار دارد و استفادهٔ مجدد یا امضای نامنطبق رد می‌شود. حداکثر ده والت عمومی برای هر حساب تعریف شده است.']},
   {id:'scope',title:'اتصال آدرس چه مجوزی نمی‌دهد؟',paragraphs:['ثبت آدرس، موجودی زنجیره را خودکار وارد دفتر حساب نمی‌کند و مجوز خرج توکن، انتقال وجه یا ایجاد تراکنش نیست. عبارت بازیابی یا کلید خصوصی دریافت نمی‌شود. نشست موقت QR پس از پایان جریان بسته می‌شود؛ آدرس تأییدشده می‌تواند در حساب بماند.','ثبت نتیجهٔ صدور دارایی در کیف پول داخلی، مسیر جداگانهٔ پروندهٔ توکنایزیشن است و به نصب مهاجرت و فعال‌سازی سرویس بررسی رسید نیاز دارد. اعتبارسنجی قراردادهای EIP-1271، شبکه‌های غیر EVM و نمایه‌سازی خودکار موجودی از آدرس متصل در این جریان فعال نیستند.']},
   {id:'privacy',title:'حساب بانکی و آدرس والت',paragraphs:['حساب بانکی و والت در بخش /account/banks کنار هم مدیریت می‌شوند، اما تأیید آدرس والت با تطبیق شبا و کد ملی متفاوت است. ثبت هرکدام شواهد و مسیر مستقل دارد.','سوابق شارژ و آدرس‌ها خصوصی‌اند و از نشست همان کاربر خوانده می‌شوند. هیچ مجوز عمومی برای ویرایش مستقیم موجودی از این APIها وجود ندارد.']},
  ],sources:['components/public-wallet-connect.tsx','components/cash-wallet.tsx','lib/cash-wallet.ts','app/api/deposits/route.ts','app/api/wallet-connect/route.ts','supabase/functions/_shared/wallet-link.ts','supabase/migrations/202609080006_public_wallets.sql','PUBLIC_WALLETS.md','CASH_WALLET.md'],related:['asset-management','identity','api-identity-wallets'],
 },
 {
  slug:'identity',group:'account',title:'احراز هویت و ثبت حساب بانکی',description:'ثبت اطلاعات و مدارک، استعلام‌های مستقل و معنای وضعیت‌های پرونده.',status:'configured',audience:'کاربران و تیم پشتیبانی',
  sections:[
   {id:'flow',title:'مسیر کاربر',paragraphs:['کاربر دارای موبایل تأییدشده، درخواست احراز را شروع می‌کند، مشخصات لازم را می‌نویسد و تصویر کارت ملی و تصویر همراه کد درخواست را می‌فرستد. ارسال نهایی به رضایت صریح، مدارک لازم و اعتبار کد وابسته است.','کد ملی ده‌رقمی با رقم کنترل بررسی می‌شود؛ شماره شناسنامه یک تا ده رقم و کد پستی ده رقم است. نام‌ها بین ۲ تا ۸۰ نویسه و نشانی بین ۱۵ تا ۱۰۰۰ نویسه پذیرفته می‌شوند. درست‌بودن قالب، تأیید هویت یا مالکیت نیست.']},
   {id:'statuses',title:'وضعیت پرونده و استعلام',table:{headers:['وضعیت','معنا'],rows:[['draft','پیش‌نویس کاربر'],['pending','در انتظار بررسی مدیر'],['documents_approved','مدارک تأیید شده‌اند؛ استعلام‌ها هنوز باید کامل شوند'],['verified','شواهد موردنیاز مسیر تأیید کامل شده است'],['rejected','مدارک یا اطلاعات نیاز به اصلاح دارد'],['superseded','درخواست تازه لازم است'],['not_connected / pending / passed / failed / error','وضعیت مستقل هر استعلام: متصل نیست، منتظر، تطبیق، عدم تطبیق یا خطا']]}},
   {id:'levels',title:'سطح اولیه و کامل',paragraphs:['مدل داده مسیر هویتی برای سطح اولیه و مسیر هویتی‌وبانکی برای سطح کامل را از سطح فعلی حساب جدا نگه می‌دارد. در طرح مرحله‌بندی، اطلاعات، مدارک، استعلام‌ها و تأیید نهایی مراحل بررسی‌اند.','سطح اولیه به بررسی مدارک و شواهد هویت و مالکیت موبایل وابسته است. سطح کامل علاوه بر آن به تطبیق حساب بانکی نیاز دارد. وجود کد این قابلیت در مخزن، نصب مهاجرت مربوط در هر محیط را اثبات نمی‌کند.']},
   {id:'bank',title:'ثبت شبا و کارت',paragraphs:['ثبت حساب با شبا، عنوان اختیاری، کارت اختیاری، شناسهٔ درخواست و رضایت انجام می‌شود. بانک از شبا شناسایی و تطبیق شبا با کد ملی از سرویس معتبر درخواست می‌شود؛ کارت اختیاری نیز در صورت ورود باید با شبا تطبیق داشته باشد.','در نبود آداپتور یا کلید لازم، حساب تأییدشده ساخته نمی‌شود. عدم تطبیق بانکی با خطای ارتباط تفاوت دارد. حداکثر ده حساب بانکی تعریف شده و انتخاب حساب اصلی و حذف حساب از جریان موجود پشتیبانی می‌شود.']},
   {id:'files',title:'مدارک خصوصی و ویرایش هم‌زمان',paragraphs:['برای هر تصویر احراز، JPG، PNG یا WebP تا ۵ مگابایت پذیرفته می‌شود و نوع واقعی فایل با هدر اعلام‌شده تطبیق داده می‌شود. مدارک در فضای خصوصی قرار دارند؛ خواندن مدرک نیازمند نشست و مجوز همان درخواست است.','شناسه و نسخهٔ پرونده هنگام ذخیره و ارسال بررسی می‌شوند تا تغییر هم‌زمان بی‌صدا بازنویسی نشود. نامعتبر یا منقضی‌شدن درخواست، تغییر موبایل و قفل‌شدن مشخصات باید با پیام مشخص پیگیری شوند.']},
  ],sources:['lib/identity.ts','lib/identity-server.ts','lib/identity-files.ts','lib/bank-registration.ts','app/api/identity/route.ts','app/api/identity/photo/route.ts','app/api/dashboard/route.ts','IDENTITY_VERIFICATION.md','CUSTOMER_BANK_REGISTRATION.md','supabase/migrations/202609200001_identity_review_levels.sql'],related:['customer-account','wallets','api-identity-wallets'],
 },
 {
  slug:'referrals',group:'account',title:'دعوت دوستان و پاداش‌ها',description:'کد دعوت، شرایط ثبت پاداش و تفاوت محاسبهٔ پاداش با پرداخت پول.',status:'configured',audience:'کاربران دارای حساب',
  sections:[
   {id:'codes',title:'ساخت و اشتراک کد',paragraphs:['بخش /account/referrals کدهای دعوت، لینک اشتراک و گزارش مربوط را نمایش می‌دهد. حساب واجد شرایط می‌تواند تا ۲۰ کد با عنوان دلخواه داشته باشد؛ کد از منبع تصادفی سرور ساخته و یکتایی آن در پایگاه داده کنترل می‌شود.','دکمه‌های کپی، ایمیل و واتس‌اپ لینک و متن را آماده می‌کنند. ارسال نهایی با کاربر است و هیچ پیام دعوتی خودکار فرستاده نمی‌شود.']},
   {id:'attribution',title:'ارتباط دعوت چگونه ثبت می‌شود؟',paragraphs:['لینک دعوت دارای ref و auth=register است. اولین کد دارای قالب معتبر تا ۳۰ روز در مرورگر نگهداری می‌شود و کاربر می‌تواند پیش از ثبت‌نام آن را تغییر دهد یا حذف کند.','سرور اعتبار کد و تأیید اطلاعات تماس دعوت‌کننده را بررسی می‌کند. نسبت دعوت هنگام ساخت حساب تازه ثبت می‌شود؛ ورود یا ویرایش پروفایل بعدی آن را تغییر نمی‌دهد. دادهٔ نگهداری‌شدهٔ مرورگر پس از ورود پاک می‌شود.']},
   {id:'rewards',title:'شرایط پاداش',paragraphs:['تنظیمات پاداش ثابت، سهم از کارمزد و فعال‌بودن طرح توسط مدیر مجاز تعیین می‌شوند. مقادیر بذر، ۵۰٬۰۰۰ تومان و ۲۰ درصد از کارمزد دریافت‌شدهٔ معامله‌اند؛ نمایش نرخ جاری باید از تنظیمات واقعی خوانده شود.','پاداش ثابت به تأیید تماس، احراز هویت و نخستین معاملهٔ واقعیِ تسویه‌شدهٔ دعوت‌شونده وابسته است. سهم معامله از کارمزد نهایی محاسبه می‌شود، نه از اصل سرمایه یا مبلغ فرضی فرم. پروژهٔ نمونه پاداش واقعی ندارد.']},
   {id:'payment',title:'محاسبه و پرداخت دو وضعیت مستقل‌اند',paragraphs:['پاداش accrued یعنی محاسبه‌شده؛ paid نیازمند ثبت و اثبات پرداخت واقعی است. محاسبهٔ پاداش به‌تنهایی موجودی کیف پول را افزایش نمی‌دهد.','مرورگر مجوز نوشتن سفارش، کارمزد یا پاداش ندارد. اتصال تسویهٔ واقعی معامله و پرداخت خودکار هنوز فعال نیست؛ گزارش‌های آماده نباید وعدهٔ درآمد قابل برداشت از نمونه‌ها تلقی شوند.']},
  ],sources:['components/referral-dashboard.tsx','lib/referrals.ts','app/api/referrals/route.ts','supabase/migrations/202609080007_referral_program.sql','REFERRALS.md'],related:['customer-account','asset-management','api-customer'],
 },
 {
  slug:'localized-numbers',group:'marketplace',title:'اعداد فارسی و دقت مبالغ',description:'نمایش خوانا بدون تغییر مقدار واقعی مبلغ، قیمت و تعداد.',status:'implemented',audience:'کاربران و توسعه‌دهندگان رابط',
  sections:[
   {id:'display',title:'قالب نمایش',paragraphs:['فیلدهای مبلغ، قیمت و تعداد از نمایش ارقام فارسی و گروه‌بندی سه‌رقمی مانند ۱٬۲۵۰٬۰۰۰ پشتیبانی می‌کنند. در زبان انگلیسی، همان مقدار با رقم لاتین و جداکنندهٔ مناسب نمایش داده می‌شود؛ برای عربی نیز رقم‌های عربی پیش‌بینی شده‌اند.','فیلد عددی خالی، صفر نمایش می‌دهد اما مدل داخلی می‌تواند همچنان خالی باشد تا ورود مبلغ مثبت و اعتبارسنجی با مقدار ساخته‌شده اشتباه نشود.']},
   {id:'editing',title:'ورود و ویرایش عدد',paragraphs:['کاربر می‌تواند رقم فارسی، عربی یا لاتین وارد یا جای‌گذاری کند. جداکننده‌ها و نشانهٔ اعشار به مدل دهدهی استاندارد تبدیل می‌شوند. جابه‌جایی نشانگر و حذف کنار جداکننده با گروه‌بندی هماهنگ شده است.','مدل مبلغ رشته‌ای باقی می‌ماند؛ اعشار تایپ‌شده و صفرهای انتهایی بدون تبدیل زودهنگام به عدد ممیز شناور حفظ می‌شوند. توان علمی، عدد منفی و ساختار نامعتبر به‌عنوان مبلغ قابل قبول تلقی نمی‌شوند.']},
   {id:'financial-units',title:'واحد مالی را از قالب جدا کنید',paragraphs:['تغییر رقم یا جداکننده، واحد پول را عوض نمی‌کند. ریال و تومان نسبت ثابت ده به یک دارند و تبدیل USDT به مرجع تازهٔ نرخ نیاز دارد.','دقت تعداد ابزار بازار از همان بازار دریافت می‌شود. پروژهٔ دارای واحد کامل، دقت متفاوتی دارد. جمع موجودی نقدی و محاسبات تخصیص، تا حد لازم با عدد صحیح بزرگ انجام می‌شوند.']},
   {id:'scope',title:'کجا اعمال شده است؟',bullets:['ورودی خرید و فروش پروژه و دارایی متصل.','سرمایه‌گذاری هوشمند و سرمایهٔ آزمایشی کپی‌ترید.','فرم مبلغ شارژ و هدف هشدار قیمت.','نمایش مقادیر مرتبط در خروجی‌ها؛ شناسه، موبایل، شبا، تاریخ و رمز این قرارداد مالی را ندارند.'],note:{kind:'info',title:'ناموجود برابر صفر نیست',text:'صفرِ فیلد خالی با نبود قیمت، نبود موجودی معتبر یا اختلال سرویس تفاوت دارد؛ دادهٔ ناموجود همچنان با وضعیت مشخص یا خط تیره نمایش داده می‌شود.'}},
  ],sources:['components/localized-number-input.tsx','lib/localized-number-input.ts','lib/investment-amount.ts','components/investment-amount-input.tsx','components/token-trade.tsx','components/market-asset-trade.tsx','components/cash-wallet.tsx','tests/localized-number-input.test.mjs'],related:['smart-investment','project-details','wallets'],
 },
 {
  slug:'support',group:'marketplace',title:'پشتیبانی و دستیار پلانک',description:'تماس و راهنمای عمومی پلانک در همان پروژهٔ مارکت‌پلیس؛ پیش‌نمایش فعلی محلی است.',status:'configured',audience:'همهٔ کاربران',
  sections:[
   {id:'contact',title:'ارتباط با پلانک',paragraphs:['بخش پشتیبانی صفحهٔ اصلی، تماس تلفنی با شمارهٔ ۰۲۱۸۲۸۰۵۴۰۴ و گفت‌وگو با دستیار را در دسترس می‌گذارد. دکمهٔ تماس، برنامهٔ تلفن دستگاه را باز می‌کند.','این رابط ساعات پاسخ‌گویی یا حضور قطعی کارشناس زنده را اعلام نمی‌کند. دستیار به حساب، پرداخت، تیکت یا کارشناس زنده متصل نیست.']},
   {id:'guide',title:'پاسخ از مرجع عمومی',paragraphs:['گفت‌وگوی موجود سایت در همان مارکت‌پلیس اجرا می‌شود و به سرور جداگانه نیاز ندارد. مرجع مجاز آن lib/assistant/data/public_faq.json با پاسخ‌های عمومی تأییدشده است؛ دانش کامل و گزارش‌های داخلی به مرورگر یا پوشهٔ عمومی سایت منتقل نمی‌شوند.','بدون کلید و مدل تنظیم‌شده در سرور مارکت‌پلیس، پاسخ با mode:reference و شناسه و عنوان منبع بازمی‌گردد. بررسی پیش از خرید توکن، ریسک پشتوانه، امکان فروش و پیگیری دارایی‌ها، چهار مسیر پیشنهادی آغاز گفتگو برای خریداران و سرمایه‌گذاران هستند. پس از هر پاسخ، حداکثر سه پرسش مرتبط با موضوع جاری و زمینهٔ گفتگو پیشنهاد می‌شود؛ پرسش‌های اخیر و موضوعات پاسخ‌داده‌شده تکرار نمی‌شوند.']},
   {id:'ai',title:'اتصال اختیاری مدل',paragraphs:['مدل و کلید API فقط در محیط خصوصی سرور مارکت‌پلیس تنظیم می‌شوند. پاسخ موفق همان درخواست با mode:openai مشخص می‌شود؛ وجود تنظیمات یا قبولی آزمون کد، ارزیابی موفق مدل را ثابت نمی‌کند.','سرور فقط مرجع عمومی تأییدشده، پیام و حداکثر شش پیام قبلی را به مدل می‌فرستد؛ شناسه حساب، کوکی، توکن، موجودی و اطلاعات کاتالوگ ارسال نمی‌شوند. ورود به حساب برای راهنمای عمومی لازم نیست.']},
   {id:'limits',title:'دامنهٔ درخواست و پاسخ',paragraphs:['هر پیام یا ورودی تاریخچه حداکثر ۱۵۰۰ نویسه دارد. پاسخ به صورت متن ساده نمایش داده می‌شود و برچسب منبع در رابط گفتگو نیست. خطای اتصال با امکان تلاش مجدد مشخص است و گفتگوی تازه تاریخچهٔ موقت را پاک می‌کند.','دستیار خرید، انتقال، صدور توکن یا ثبت درخواست اجرا نمی‌کند؛ تعرفه، سود، زمان قطعی تحویل و وضعیت حساب را حدس نمی‌زند. اتصال فعلی فقط برای localhost آماده شده و انتشار عمومی یا اتصال تلگرام انجام نشده است.']},
  ],sources:['components/planck-support.tsx','components/planck-assistant.tsx','components/assistant-mark.tsx','app/api/chat/route.ts','app/api/chat/config/route.ts','lib/assistant-service.ts','docs/assistant-local.md'],related:['tokenization','api-marketplace','customer-account'],
 },
 {
  slug:'api-marketplace',group:'api',title:'API کاتالوگ، بازار و راهنما',description:'قرارداد واقعی مسیرهای عمومی و رفتار خطا بدون نیاز به کلید کاربر.',status:'implemented',audience:'توسعه‌دهندگان',
  sections:[
   {id:'principles',title:'قواعد مشترک',paragraphs:['این‌ها مسیرهای برنامهٔ مارکت‌پلیس‌اند، نه یک API معاملهٔ عمومی دارای کلید توسعه‌دهنده. پاسخ‌های JSON از کمک‌تابع مشترک با Cache-Control:no-store و X-Content-Type-Options:nosniff تولید می‌شوند.','مقادیر دهدهی قیمت و حجم بازار رشته‌اند تا دقت آن‌ها حفظ شود. GETهای جدول زیر ورود نمی‌خواهند؛ POSTهای راهنما و برآورد، کنترل Origin هم‌مبدأ دارند.']},
   {id:'routes',title:'مسیرها و وضعیت HTTP',table:{headers:['روش و مسیر','ورودی / دسترسی','موفقیت و خطا'],rows:[['GET /api/catalog','عمومی؛ بدون پارامتر پیش‌نمایش','200 با Catalog؛ حتی هنگام ناموجود بودن، mode=unavailable در بدنه است.'],['GET /api/markets/wallex','عمومی؛ بدون symbol','200 در status=ready؛ 503 در unavailable.'],['GET /api/markets/wallex?symbol=USDTTMN','عمومی؛ یکی از پنج نماد مجاز','400 برای نماد نامعتبر؛ جزئیات معتبر 200 و پرچم‌های وجود داده.'],['GET /api/markets/exchange-rate','عمومی؛ سیاست روی سرور خوانده می‌شود','200 برای ready؛ 503 برای unavailable.'],['POST /api/quote','Origin هم‌مبدأ؛ سفارش قابل اجرا ندارد','403 برای Origin نامعتبر؛ در غیر این صورت همیشه 503.'],['POST /api/chat','عمومی؛ JSON {message,history}؛ Origin هم‌مبدأ','200 با answer/mode/sources/suggestions؛ 400 ورودی، 403 مبدأ، 415 قالب، 429 محدودیت و 503 اختلال.'],['GET /api/chat/config','تنظیمات عمومی دستیار؛ بدون ورود','200 با عنوان، خوشامدگویی، پرسش‌ها، هشدار و راه تماس؛ 503 در نبود سرویس.'],['POST /api/assistant','نام جایگزین قرارداد /api/chat','همان قرارداد جدید؛ پاسخ reply/guide قدیمی استفاده نمی‌شود.']]}},
   {id:'catalog-contract',title:'قرارداد کاتالوگ',paragraphs:['بدنه شامل projects، content و mode است. mode یکی از live، preview یا unavailable است. Project فیلدهای id، slug، category، status، عنوان‌ها و توضیح‌های محلی، symbol، image_url، unit_price_rial، duration_months، total_units، sold_units، documents و شاخص نمونهٔ اختیاری دارد.','Content شامل معرفی هیرو، FAQ، فوتر، عنوان منوها، نشانی اختیاری اپلیکیشن و پذیرش توکنایزیشن، نشان تجاری و enabled_locales است. دادهٔ شخصی مشتری جزو این قرارداد نیست.'],code:{language:'javascript',content:"const response = await fetch('/api/catalog');\nconst catalog = await response.json();\nif (catalog.mode === 'unavailable') {\n  console.log('فهرست اکنون در دسترس نیست');\n} else {\n  console.log(catalog.projects.map(({slug, symbol}) => ({slug, symbol})));\n}"}},
   {id:'market-contract',title:'قرارداد مظنه و جزئیات',paragraphs:['Feed شامل source:wallex، status، quotes، receivedAt و در خطا error است. هر Quote شامل symbol، base، name، price، change24h، volume24h، quoteVolume24h، high24h، low24h، amountPrecision، pricePrecision، spot، otc و receivedAt است؛ چند فیلد عددی می‌توانند null باشند.','جزئیات شامل symbol، receivedAt، candles با time/close، asks و bids با price/quantity، historyAvailable و depthAvailable است. خطای منبع نمودار یا عمق، لزوماً HTTP503 نمی‌دهد؛ برنامه می‌تواند HTTP200 با پرچم false و آرایهٔ خالی دریافت کند. دادهٔ ناموجود را از همین پرچم‌ها تشخیص دهید.']},
   {id:'rate-contract',title:'قرارداد نرخ مرجع',paragraphs:['پاسخ آماده شامل status:ready، base:USDT، quote:IRR، rateRial، rateToman، receivedAt و expiresAt است. پاسخ ناموجود شامل status:unavailable، همان base/quote و error است.','سیاست پیش‌فرض single با والکس است. آداپتورهای فعلی والکس و نوبیتکس‌اند؛ میانگین، میانگین حسابی هم‌وزن منابع انتخابی و وابسته به تازگی همهٔ آن‌هاست. نرخ نهایی به نزدیک‌ترین ریال گرد می‌شود.'],code:{language:'javascript',content:"const response = await fetch('/api/markets/exchange-rate');\nconst rate = await response.json();\nif (response.ok && rate.status === 'ready') {\n  console.log(rate.rateToman, rate.expiresAt);\n}\n// بدون دادهٔ معتبر، نرخ جایگزین نسازید."}},
   {id:'fail-closed',title:'پیش‌نمایش و نبود مسیر سفارش',paragraphs:['پارامتر preview=design فقط در صفحات و محیط توسعه برای کاتالوگ نمونه کاربرد دارد و /api/catalog را به دادهٔ نمونهٔ اجباری تبدیل نمی‌کند. شکست خواندن کاتالوگ متصل با نمونه جبران نمی‌شود.','POST /api/quote هیچ قرارداد اجرایی مقدار/قیمت یا سفارش نهایی ندارد. تا زمان پیاده‌سازی سرویس معامله، 503 پاسخ مورد انتظار این مسیر است؛ نباید با retry نامحدود آن را به سفارش واقعی تبدیل کرد.']},
  ],sources:['app/api/catalog/route.ts','app/api/markets/wallex/route.ts','app/api/markets/exchange-rate/route.ts','app/api/quote/route.ts','app/api/chat/route.ts','app/api/chat/config/route.ts','app/api/assistant/route.ts','lib/assistant-service.ts','lib/server.ts','lib/wallex.ts','lib/exchange-rate.ts'],related:['asset-catalog','smart-investment','support','api-customer'],
 },
 {
  slug:'api-customer',group:'api',title:'API نشست و داشبورد مشتری',description:'روش‌ها، بدنه‌ها و محدودیت‌های مسیرهای خصوصی حساب.',status:'configured',audience:'توسعه‌دهندگان',
  sections:[
   {id:'auth-boundary',title:'نشست و خطاهای مشترک',paragraphs:['مسیرهای خصوصی از کوکی HttpOnly نشست مشتری استفاده می‌کنند؛ شناسهٔ کاربر ارسالی در بدنه جای نشست معتبر را نمی‌گیرد. مسیرهای authBody به Origin هم‌مبدأ، Content-Type شامل application/json، تنظیم بودن سرویس و بدنهٔ شیء حداکثر ۱۶٬۰۰۰ بایت نیاز دارند.','خطای اعتبارسنجی معمولاً 400، نیاز به ورود 401، Origin نامعتبر 403، نوع محتوا 415، محدودیت سرویس ورود 429 و نبود اتصال 503 است. خطاهای AuthError با بدنهٔ {error:string} برمی‌گردند. بعضی GETهای خصوصی نیز Sec-Fetch-Site:cross-site را رد می‌کنند.']},
   {id:'auth-routes',title:'ورود و ثبت‌نام',table:{headers:['روش و مسیر','بدنه یا رفتار','پاسخ موفق'],rows:[['GET /api/auth/session','بدون بدنه؛ بررسی و در صورت امکان تازه‌سازی نشست','{user} یا {user:null}؛ نبود نشست معتبر لزوماً 401 نیست.'],['POST /api/auth/login','identifier یا email، password، remember اختیاری','{user,notice?} و کوکی نشست'],['POST /api/auth/register','firstName، lastName، phone، email، password؛ username و referralCode اختیاری','{phone,step:verify}؛ ثبت‌نام باید به تأیید موبایل برسد.'],['POST /api/auth/otp','action=send|resend|verify، phone؛ verify با code؛ intent و remember اختیاری','ارسال: {phone,step:verify}؛ تأیید: نشست یا {step:reset} برای بازیابی'],['POST /api/auth/email','email؛ نیازمند نشست','{message} برای درخواست تأیید ایمیل'],['POST /api/auth/logout','Origin هم‌مبدأ؛ پاک‌کردن نشست حتی در اختلال سرویس بالادست','{ok:true}']]}},
   {id:'recovery',title:'بازیابی رمز',paragraphs:['POST /api/auth/recovery با action=request و email، بازیابی PKCE را آغاز می‌کند؛ پاسخ عمومی وجود حساب را افشا نمی‌کند. بازگشت GET /auth/recovery?code=… پس از بررسی verifier با HTTP303 به صفحهٔ تنظیم رمز یا خطای بازیابی می‌رود.','action=reset و password به کوکی بازیابی معتبر نیاز دارد. رمز جدید ۱۲ تا ۲۵۶ نویسه است؛ پس از موفقیت، دسترسی بازیابی و نشست محلی پاک می‌شوند. نبود یا انقضای دسترسی بازیابی 401 می‌دهد. مقادیر کوکی و توکن در مثال مستندات قرار نمی‌گیرند.']},
   {id:'dashboard',title:'خواندن و ویرایش داشبورد',paragraphs:['GET /api/dashboard وضعیت خصوصی حساب، preferences، banks، notifications، unread_count، alerts، referral_codes، referral_stats، api_keys، wallets، positions، transactions، orders، credits، staking و sessions را می‌خواند. مدل کامل در lib/dashboard.ts تعریف شده است.','POST /api/dashboard بدنهٔ {action,payload} می‌گیرد. پاسخ معمول ویرایش {ok:true} است؛ حساب بانکی قرارداد نتیجهٔ جداگانه دارد. عملیات مالی مانند تغییر موجودی، خرید، برداشت یا ایجاد اعتبار جزو actionهای مجاز نیستند.'],table:{headers:['action','payload مجاز'],rows:[['profile','first_name، last_name، birth_date اختیاری و national_id در صورت مجازبودن'],['preferences','پرچم‌های نمایش و اعلان/تأیید، theme=dark|light، locale=fa|en|ar، currency=TMN|USDT'],['alert_add','project_id از نوع UUID، direction=above|below، target_price_rial رشتهٔ صحیح مثبت ۱ تا ۳۰ رقم'],['bank_remove / bank_primary / alert_remove / api_revoke','id از نوع UUID'],['notification_read','id اختیاری؛ نبود آن برای ثبت خوانده‌شدن مجموعه'],['bank_add','iban، account_title و card_number اختیاری، request_key از نوع UUID و consent=true']]}},
   {id:'bank-results',title:'نتیجهٔ ثبت بانکی و تعارض‌ها',paragraphs:['موفقیت bank_add به‌صورت {ok:true,id} است. رد قابل تشخیص می‌تواند {ok:false,code,error} باشد: bank_not_matched با HTTP422، bank_registration_unavailable با 503 و دیگر وضعیت‌های فرایند معمولاً با 409 برمی‌گردند.','نسخهٔ قدیمی پایگاه داده، قفل اطلاعات هویتی، تعارض داده یا سقف حساب و هشدار پاسخ مشخص دارند. در خطای شبکه یا نتیجهٔ نامطمئن، نمایش موفقیت پیش‌فرض مجاز نیست.']},
   {id:'other',title:'دعوت و شارژ',table:{headers:['روش و مسیر','قرارداد','وضعیت'],rows:[['GET /api/referrals','program، codes، stats، invitees، rewards برای همان حساب','200؛ نیاز به نشست، اختلال503'],['POST /api/referrals','{action:create,label}؛ عنوان حداکثر۶۰ نویسه','نتیجهٔ ایجاد کد؛ سقف۲۰ کد و تماس تأییدشده'],['GET /api/deposits','{enabled:false,provider:null,deposits}؛ تا۱۰۰ سابقهٔ اخیر','200؛ نیاز به نشست'],['POST /api/deposits','{amountToman}؛ رشتهٔ صحیح مثبت حداکثر۱۲ رقم پس از نرمال‌سازی','400 مبلغ نامعتبر؛ مبلغ معتبر نیز503 چون درگاه متصل نیست.']]}},
   {id:'tokenization',title:'API خصوصی پروندهٔ دارایی',paragraphs:['GET /api/tokenization فهرست پرونده‌های صاحب نشست را می‌خواند. POST همان مسیر با action=start نوع دارایی و پذیرش نسخهٔ شرایط را دریافت می‌کند؛ action=save اطلاعات پیش‌نویس، action=submit تأیید و ارسال پرونده و action=accept شمارهٔ نسخهٔ پیشنهاد و پذیرش صریح آن را ثبت می‌کند. به‌جز شروع، شناسهٔ پرونده و آخرین version برای جلوگیری از تغییر هم‌زمان لازم‌اند.','POST /api/tokenization/documents فایل و شناسهٔ جایگاه مدرک را به‌صورت multipart دریافت می‌کند. GET با id و document فقط پس از مجوز، فایل خصوصی را برمی‌گرداند. DELETE به شناسهٔ پرونده، نسخه و شناسهٔ مدرک نیاز دارد و فقط در وضعیت قابل ویرایش مجاز است.','کنترل صاحب داده، وضعیت و نسخه در سرور و پایگاه داده اعمال می‌شود. یادداشت داخلی کارشناسان در پاسخ مشتری قرار نمی‌گیرد. نبود سرویس یا مهاجرت، خطای عدم دسترسی سرویس می‌دهد؛ هیچ مسیر عمومی برای اعلام موفقیت صدور یا افزودن موجودی وجود ندارد.'],links:[{label:'ثبت و پیگیری توکنایزیشن',href:'/docs/tokenization'}]},
  ],sources:['lib/customer-auth.ts','lib/auth-cookies.ts','lib/auth-input.ts','lib/dashboard.ts','lib/bank-registration.ts','app/api/auth/session/route.ts','app/api/auth/login/route.ts','app/api/auth/register/route.ts','app/api/auth/otp/route.ts','app/api/auth/recovery/route.ts','app/auth/recovery/route.ts','app/api/dashboard/route.ts','app/api/referrals/route.ts','app/api/deposits/route.ts','app/api/tokenization/route.ts','app/api/tokenization/documents/route.ts','lib/tokenization.ts','supabase/migrations/202609240001_asset_tokenization.sql'],related:['customer-account','identity','wallets','api-identity-wallets'],
 },
 {
  slug:'api-identity-wallets',group:'api',title:'API مدارک، تصویر و اتصال والت',description:'مسیرهای خصوصی فایل و قرارداد چالش امضای آدرس عمومی.',status:'configured',audience:'توسعه‌دهندگان',
  sections:[
   {id:'identity-routes',title:'درخواست احراز',table:{headers:['روش و مسیر','ورودی','خروجی و محدودیت'],rows:[['GET /api/identity','نشست معتبر؛ بدون بدنه','IdentityState شامل request و checks'],['POST /api/identity','{action:start}','آغاز یا دریافت وضعیت درخواست توسط RPC حساب'],['POST /api/identity','{action:save,id,version,fields}','id معتبر، version صحیح مثبت و فیلدهای اعتبارسنجی‌شده'],['POST /api/identity','{action:submit,id,version,consent:true}','ارسال نهایی با کنترل شواهد و نسخه روی سرور']]}},
   {id:'identity-fields',title:'فیلدها و وضعیت‌ها',paragraphs:['fields شامل first_name، last_name، national_id، birth_certificate_number، father_name، address و postal_code است. تاریخ تولد در مسیر پروفایل مدیریت می‌شود و نباید به این بدنهٔ احراز افزوده فرض شود.','خطای RPC احراز، در صورت منع دسترسی 403، اختلال بالادست 503 و خطا یا تعارض دیگر 409 می‌دهد. وضعیت‌های پرونده draft، pending، documents_approved، verified، rejected و superseded و وضعیت‌های استعلام not_connected، pending، passed، failed و error هستند.']},
   {id:'identity-photos',title:'بارگذاری و دریافت مدرک',table:{headers:['مسیر','قرارداد'],rows:[['POST /api/identity/photo','بدنهٔ خام تصویر؛ هدر x-identity-id، هدر x-document-kind با card یا selfie و Content-Type معتبر؛ Origin و نشست بررسی می‌شوند.'],['GET /api/identity/photo?id=…&kind=card','شناسهٔ درخواست و kind=card|selfie؛ دریافت فایل فقط با مجوز خصوصی.'],['قالب و حجم','JPG، PNG یا WebP تا۵ مگابایت؛ امضای فایل با نوع اعلامی تطبیق داده می‌شود.'],['نتیجه و خطا','POST وضعیت احراز را برمی‌گرداند؛413 برای حجم،415 برای نوع،503 برای اختلال و خطاهای نشست/مجوز مطابق کنترل مشترک.']]}},
   {id:'avatar',title:'تصویر پروفایل',paragraphs:['POST /api/avatar تصویر خام با MIME معتبر و حداکثر ۲ مگابایت می‌گیرد و {ok:true,path} برمی‌گرداند. مسیر فایل به حساب و نام تصادفی وابسته است؛ مرورگر مسیر دلخواه برای بازنویسی فایل تعیین نمی‌کند.','GET /api/avatar یا GET /api/avatar?user=… فقط تصویر خود حساب را می‌خواند. شناسهٔ کاربر دیگر یا نبود تصویر 404، نوع نامعتبر 415 و اختلال ذخیره 503 می‌دهد. پاسخ تصویر private,no-store، nosniff و same-origin است.']},
   {id:'wallet-routes',title:'قرارداد اتصال والت',table:{headers:['روش و مسیر','ورودی / خروجی','دسترسی'],rows:[['GET /api/wallet-connect','{projectId:string|null}؛ شناسهٔ عمومی معتبر WalletConnect یا null','عمومی'],['POST /api/wallet-connect','{action:challenge,address,chainId,label?}؛ پاسخ {id,message,expires_at}','نشست معتبر، Origin هم‌مبدأ و JSON حداکثر۸۰۰۰ بایت'],['POST /api/wallet-connect','{action:verify,id,signature}؛ نتیجهٔ {wallet}','همان نشست و پیام تک‌استفاده؛ امضای EOA معتبر'],['GET /api/wallets','{wallets:[{network,address,label,verified_at}]}','فقط آدرس‌های حساب واردشده']]}},
   {id:'wallet-errors',title:'اعتبارسنجی و خطاهای والت',paragraphs:['address باید آدرس ۲۰بایتی EVM غیرصفر باشد و chainId عدد صحیح مثبت امن است. امضا در مسیر وب با 0x و ۱۳۰ رقم هگز پذیرفته می‌شود. origin از خود درخواست سرور تعیین می‌شود، نه بدنهٔ دلخواه مرورگر.','کدهای شناخته‌شده شامل wallet_rate_limit، wallet_challenge_expired، wallet_already_linked، wallet_limit، invalid_signature، origin_not_allowed و unauthorized هستند. وضعیت‌های 400،401،403،409 و429 مجاز حفظ می‌شوند و خطای نامشخص سرویس به wallet_unavailable و503 تبدیل می‌شود. این API درخواست امضای پیام است و تراکنش مالی یا تأیید خرج توکن نمی‌سازد.']},
  ],sources:['app/api/identity/route.ts','app/api/identity/photo/route.ts','app/api/avatar/route.ts','app/api/wallet-connect/route.ts','app/api/wallets/route.ts','lib/identity.ts','lib/identity-server.ts','lib/identity-files.ts','lib/profile-photo.ts','supabase/functions/_shared/wallet-link.ts'],related:['identity','wallets','api-customer'],
 },
];
