--- name: bim-model-reader description: يفكّ ملفات BIM الأصلية (IFC) إلى Excel + حصر كميات آلي عبر ifcopenshell. للموديلات الواصلة من الاستشاري في مشاريع KCPC. ---
BIM Model Reader (IFC → Excel + Quantity Takeoff)
متى تُستخدم (auto-trigger)
أي ملف.ifc يرفعه د. وائل (موديل BIM من استشاري/مقاول) → فكّه آلياً:
- استخراج كل العناصر + خصائصها → Excel
- حصر كميات (أحجام/مساحات/أطوال/أعداد) مجمّعة بنوع العنصر
المحرّك
ifcopenshell 0.8.5 (open-source، buildingSMART) + openpyxl — في بيئة root.الأوامر
python3 skills/bim-model-reader/bim_reader.py selftest
python3 skills/bim-model-reader/bim_reader.py info <file.ifc>
python3 skills/bim-model-reader/bim_reader.py excel <file.ifc> [out.xlsx]
python3 skills/bim-model-reader/bim_reader.py takeoff <file.ifc> [out.xlsx]
- info → schema + عدد العناصر + توزيع الأنواع (تشخيص سريع).
- excel → كل IfcProduct + كل خصائصه (Psets/Qtos) في جدول ديناميكي.
- takeoff → حصر كميات مجمّع بالنوع (Count + Volume m³ + Area m² + Length m + Weight kg).
التكامل
- quantity-takeoff-engine → الكميات المستخرجة تُغذّي الحصر الإنشائي + boq_link (مناقصات KCPC).
- design-to-bim → الاتجاه العكسي (تصميم→BIM) مكمّل لهذا (BIM→بيانات).
- document-ai → للمستندات الممسوحة؛ هذا للموديل الأصلي.
never-stop (خط أحمر)
- أي عنصر/خاصية تالفة تُتخطّى بأمان (try/except per-element).
- IFC تالف/مفقود → رسالة واضحة + exit 2 (لا انهيار).
- يقرأ Qto القياسية (Qto_*BaseQuantities: NetVolume/NetArea/Length/Weight) + كل Psets.
مُختبَر E2E (2026-10-08)
selftest: بنى IFC4 (2 walls + 1 column، الجداران NetVolume 2.5+3.0) → info (3 products) → takeoff (IfcWall n=2 V=5.5m³ ✓) → excel → SELFTEST_OK.🔴 القيد (صادق)
- IFC = مدعوم كاملاً (الصيغة المفتوحة القياسية — الاستشاريون يصدّرون IFC من Revit/Tekla/ArchiCAD).
- RVT (Revit الأصلي) = صيغة مغلقة؛ ifcopenshell لا يقرأها مباشرةً. الحل العملي: تصدير IFC من Revit (قياسي)، أو cad2data pipeline لاحقاً عند الحاجة. 99% من تبادل BIM بين الأطراف = IFC.