القواعد: التحقق والمفاتيح
تُبقي القواعد بياناتك نظيفة — حقول مطلوبة، حدود، أنماط، مفاتيح والمزيد. أضِفها في ورقة Rules_ (أو Validation_)، قاعدة واحدة لكل صف، عبر هذه الأعمدة: Field وRule Type وValue وMessage وSection وForm. يحدد نوع القاعدة ما الذي يُفرَض:
| نوع القاعدة | التأثير |
|---|---|
| required | يجب أن يكون للحقل قيمة. قد يضيف عمود Value مقارنة — مثلاً على end_date: "greater or equal to start_date". |
| min / max | حدود. يمكن أن يكون الحد رقمًا أو تاريخ ISO أو اسم حقل آخر ("end_date | min | start_date" يعني end ≥ start، مع إدراك التاريخ). فقط min/max الرقمي يجعل الحقل مطلوبًا أيضًا. |
| min_length / max_length | حدود طول السلسلة النصية. |
| pattern | يجب أن تطابق القيمة تعبيرًا نمطيًا. |
| key | يضع علامة على الحقل كمفتاح عمل للنموذج — يصبح مطلوبًا، وتطابق عمليات الاستيراد السجلات الموجودة بناءً عليه. يمكن أن يكون للنموذج مفتاح واحد فقط. |
| subkey | الجزء الثانوي من مفتاح العمل — واحد لكل نموذج، وفقط مع وجود مفتاح. عند وجود كليهما، تطابق عمليات الاستيراد على المفتاح + المفتاح الفرعي معًا. يقبل أيضًا "sub key" و"sub_key" و"sub-key". |
| sensitive / mask / pii | يعلّم الحقل (من أي نوع) كحساس: مُقنّع في الشبكة والنموذج والطباعة والتصدير — ومشفّر في حالة السكون عندما يكون مشغّلك قد فعّل تشفير الحقول. اكتب اسم قائمة بيانات رئيسية في عمود Form لتعليم أحد أعمدتها بدلاً من ذلك — يُقنّع في صيانة البيانات الرئيسية، ويرث أي حقل في النموذج يشير إلى ذلك العمود (قائمة منسدلة أو قيمة مُعبّأة تلقائياً) التقنيع تلقائياً. |
| conditional / validation | مثلاً "required if status is 'Active'". يمكن أن تكون الشروط مركّبة — AND / OR / XOR — وتستخدم رموزًا (=, !=, >=, <=, >, <) أو كلمات؛ ويمكن أن تكون القيمة المقارَنة حقلاً آخر. |
| between / range | between <low> and <high>. كل حد هو قيمة حرفية أو اسم حقل أو "system date" / "today" (تاريخ الحفظ). يمكن تقييد تاريخ بند بحقول HEADER ("between start_date and end_date from HEADER"). |
| auto / autogen | ترقيم تلقائي: يعيّن التطبيق الرقم التالي عند إنشاء سجل — يبدأ من 1 افتراضيًا، أو من الرقم الموجود في عمود Value (مثل 100 فيبدأ من 100 ثم 101 ثم 102…). وإذا كان Data type للحقل مُعرّفًا مُولَّدًا (ulid / nanoid)، فإنه يولّد ذلك المعرّف بآليته الخاصة بدلًا من رقم. للعرض فقط؛ ولا يُعاد تعيين القيم الموجودة أبدًا. الحقل التلقائي هو المفتاح ضمنيًا، لذا لا يمكن أن يحتوي القسم أيضًا على حقل مفتاح منفصل. |
| derived | تُحسب قيمة الحقل ولا تُكتب يدويًا — من البيانات المرجعية (سجل كامل بـ from Products، أو عمود واحد بـ Product.UOM / UOM from Product عندما يختلف اسم الحقل عن العمود، مثل منتقي وحدة يُملأ من uom) أو من حساب تاريخ. |
| calc / calculation | الحقل يحسبه التطبيق ويخزّنه — تحويل عملة أو وحدة (انظر تحويل العملات والوحدات أدناه). للقراءة فقط، ويُعاد حسابه عند كل حفظ؛ وتُتجاهل أي قيمة تُكتب فيه أو تُستورد. يُكتب أيضًا calculation. |
| display | للقراءة فقط — يظهر الحقل لكنه لا يقبل الكتابة أبدًا. استخدمه لقيمة تأتي من قيمة افتراضية بدلًا من المستخدم: مثلًا حقل submission_date الذي هو required + display مع system date في عمود Value يعرض تاريخ اليوم دون إمكانية التعديل. (بخلاف calc/auto، لا يحسب التطبيق القيمة ولا يعيّنها — بل يعرض فقط القيمة الافتراضية التي يحملها.) |
Rules_ منفصلًا لكل قاعدة. مثلًا، حقل sales_order الذي هو key للعمل ويُرقَّم عبر auto في آن واحد يكون صفّين بنفس Field.start_date/end_date، from_date/to_date…)، يفرض التطبيق end ≥ start تلقائيًا — دون الحاجة إلى قاعدة.القيم الافتراضية. يمكن لعمود Value في أي قاعدة أن يحمل قيمة افتراضية: default value "Active" أو default = X. النص المقتبس أو العادي قيمة حرفية؛ أما المرجع المؤهَّل (default = HEADER.currency_code) أو الحساب (default = amount / 100) فيُقيَّم عند فتح النموذج أو صف البند.
يمكن لحقول المال والكمية أن تتحوّل تلقائيًا — مبلغ إلى عملة أخرى، وكمية إلى وحدة أخرى — مع تخزين النتيجة وإبقائها محدّثة. انظر تحويل العملات والوحدات.
لِـالحقول المحسوبة — المجاميع والعمليات الحسابية ومنطق IF / القيم المنطقية في ورقة Formula_ — راجع الصيغ.