إنشاء بيانات مخطط تقدم الهدف ومحطاته
حوّل لقطة حالة الهدف إلى بيانات متسقة للمحطات ومخططات التقدم من دون إعادة بناء العمليات الحسابية في كل لوحة متابعة.
شغّل الأداة مجانًا
أدخل قيمة البداية وأحدث قيمة والقيمة المستهدفة والنسب المئوية للمحطات التي تريد عرضها. تعرض النتيجة التقدم الفعلي، وموضعًا مقيدًا مناسبًا للرسم، والمحطات التي تحققت، والمحطة التالية إن بقيت واحدة، وسلسلة مرتبة من النقاط. تصلح العملية للأهداف التي ترتفع نحو قيمة أكبر وللمؤشرات التي ينبغي خفضها، مثل العيوب أو النفقات أو زمن الاستجابة.
عرّف الهدف بنقطة بداية صريحة
يتطلب حساب نسبة تقدم مفيدة ثلاث قيم، وليس القيمة الحالية والهدف وحدهما. تحدد قيمة البداية نسبة صفر بالمئة، وتحدد القيمة المستهدفة نسبة مئة بالمئة، وتبيّن القيمة الحالية موضع الهدف الآن. يصبح هذا الفرق مهمًا عندما يبدأ العمل من خط أساس غير صفري. فإذا كان المطلوب رفع نتيجة من 20 إلى 100، تكون القيمة 60 في منتصف المسافة، ولا تعني تقدمًا قدره ستين بالمئة لمجرد أن النتيجة الحالية هي 60. أرسل هذه القيم بصيغة أرقام، وحدد نسبة مئوية واحدة على الأقل لمحطة تقع بين صفر ومئة. يمكن إدخال المحطات بأي ترتيب، وتُدمج النسب المتكررة ليحصل المخطط على سلسلة نظيفة مرتبة تصاعديًا. يجب أن تختلف القيمة المستهدفة عن قيمة البداية، لأن المجال ذي الطول الصفري لا يتيح حساب نسبة تقدم ذات معنى. عند تساويهما، تعيد القدرة خطأ إدخال مصنفًا بدلًا من قيمة لا نهائية أو نسبة اعتباطية أو بيانات تبدو سليمة فقط. تقبل كل مطالبة مئة عنصر كحد أقصى، وبذلك يبقى التنفيذ والإخراج محدودين مع استيعاب الخطط التفصيلية.
فسّر الأهداف المتزايدة والمتناقصة بالطريقة نفسها
تتعامل صيغة واحدة مع الاتجاهين: يساوي التقدم المسافة المقطوعة من البداية مقسومة على كامل المسافة بين البداية والهدف. إذا كانت القيمة المستهدفة أكبر من البداية، تصف النتيجة الهدف بأنه متزايد. وإذا كانت أصغر، تصفه بأنه متناقص؛ ولذلك يُعد الانتقال من 100 حادثة إلى هدف قدره 20 تقدمًا، ولا يظهر كقيمة سلبية. لا تُقيد نسبة التقدم المعادة عن قصد. تكشف القيمة الأقل من صفر عن تراجع يتجاوز نقطة البداية، بينما تسجل القيمة الأعلى من مئة تجاوز الهدف. ولأغراض العرض، تُقيد chart_progress_percentage وchart_percentage الخاصة بالنقطة الحالية ضمن المجال من صفر إلى مئة. يعتمد تحديد المحطات المنجزة على التقدم الحقيقي غير المقيد. تتضمن كل محطة بعد تسويتها نسبتها وقيمتها المقابلة على المسار وحالة الوصول إليها. يتضمن الناتج أيضًا عدد المحطات المنجزة ونسبها، إضافة إلى المحطة التالية عندما تبقى محطات معلقة. وعند إنجاز جميع المحطات المطلوبة، يُحذف هذا الحقل الاختياري بدل إعادته بقيمة null.
استخدم النقاط في المخططات وعروض الحالة
توفر مصفوفة chart_points نقطة بداية مرتبة، ونقطة لكل محطة تمت تسويتها، ونقطة للهدف. يحمل كل سجل النوع والنسبة والقيمة وحالة الإنجاز، ولذلك يصلح للمخططات الخطية ومسارات التقدم والعلامات الزمنية والملخصات النصية الميسرة. يحتفظ الكائن current_point بالقيمة الحالية الفعلية وبالتقدم غير المقيد، ويوفر في الوقت نفسه إحداثي الرسم المقيد. يتيح هذا الفصل للوحة المتابعة وضع العلامة بأمان عند حافة المخطط عندما يتأخر الهدف أو يُتجاوز، مع إظهار الرقم الصادق في تسمية أو تلميح. استخدم reached_milestone_percentages للشارات أو رسائل الاحتفاء أو أحداث التدقيق، واستخدم next_milestone لشرح الخطوة التالية من دون البحث في المصفوفة مرة أخرى. الحساب حتمي ولا يستخدم الشبكة أو الوقت أو حالة مخزنة أو قيمًا عشوائية، لذلك تعطي المدخلات المتطابقة مخرجات متطابقة. يمكنك تشغيله مجانًا في المتصفح عند التخطيط التفاعلي، أو استدعاء API مقابل $0.002 لكل طلب عند إنشاء التقارير أو تحديث لوحات المتابعة أو معالجة سجلات الأهداف ضمن سير عمل آلي.
حالات الاستخدام
عرض لوحة متابعة OKR
حوّل خط الأساس وأحدث قياس والهدف وحدود المراجعة لكل نتيجة إلى علامات تقدم متسقة.
متابعة هدف خفض
اعرض التقدم بصورة صحيحة عندما تكون النتيجة المطلوبة أقل، مثل تقليل العيوب أو الحوادث أو تأخر الدعم.
إنشاء إشعارات المحطات
قارن نسب المحطات المنجزة بالحالة السابقة في تطبيقك لتحديد رسائل الإنجاز التي ينبغي إرسالها.
الأسئلة الشائعة
هل يدعم أهدافًا تكون قيمتها المستهدفة أقل من قيمة البداية؟
نعم. تستخدم الأهداف المتناقصة حساب المسافة نفسه، وتُعرّف النتيجة اتجاهها بأنه متناقص.
ماذا يحدث عندما يتجاوز التقدم الهدف؟
يمكن أن تتجاوز النسبة الفعلية 100 للاحتفاظ ببيان الإنجاز الزائد، بينما يُقيد موضع الرسم عند 100.
كيف تُعالج المحطات غير المرتبة أو المتكررة؟
تُزال التكرارات وتُرتب النسب من الأصغر إلى الأكبر قبل حساب القيم وحالات الإنجاز.
لماذا تُرفض قيمتا بداية وهدف متساويتان؟
سيكون طول المجال صفرًا، ولذلك لا تستطيع القسمة إنتاج نسبة ذات معنى لتقدم الهدف.
ما تكلفة طلب API؟
يكلف كل طلب API مقدار $0.002، أما النسخة التفاعلية في المتصفح فمجانية.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/final3/goal-milestone-progress-chart-data \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"start_value":20,"current_value":68,"target_value":100,"milestone_percentages":[25,50,75,100]}'const res = await fetch("https://api.kit.forhosting.com/final3/goal-milestone-progress-chart-data", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"start_value": 20,
"current_value": 68,
"target_value": 100,
"milestone_percentages": [
25,
50,
75,
100
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/final3/goal-milestone-progress-chart-data",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"start_value": 20,
"current_value": 68,
"target_value": 100,
"milestone_percentages": [
25,
50,
75,
100
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/final3/goal-milestone-progress-chart-data", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"start_value":20,"current_value":68,"target_value":100,"milestone_percentages":[25,50,75,100]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"start_value":20,"current_value":68,"target_value":100,"milestone_percentages":[25,50,75,100]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/final3/goal-milestone-progress-chart-data", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"start_value": 20,
"current_value": 68,
"target_value": 100,
"milestone_percentages": [
25,
50,
75,
100
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "final3.goal_milestone_progress_chart_data",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_items | 100 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |