إنتقل إلى المحتوى الرئيسي

المؤسسات

كل المسارات أدناه تتطلب جلسة مدير كونكت وباقة partner-connect-*.

القائمة​

GET /api/partner/organizations
Authorization: Bearer ACCESS_TOKEN

تتضمن الإجابة المؤسسات المنشأة والحسابات المربوطة، وآخر حالة للختم وTTN، وhasLogo وinvoicingSuspendedAt وtaxIdLocked وtaxIdLockReason، وعدد المؤسسات النشطة والسقف والحصة الشهرية وطلبات الربط. شعار base64 ليس في القائمة.

القراءة​

GET /api/partner/organizations/{childOrgId}

نفس البطاقة الموجودة في القائمة، مع logoBase64. taxIdLocked يساوي true أو false. taxIdLockReason يساوي sandbox (هوية المحاكاة) أو ttn_submitted (أُرسلت فاتورة إلى TTN) أو null إذا كان المعرّف لا يزال قابلاً للتعديل.

الإنشاء​

POST /api/partner/organizations
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json

{
"name": "شركة العميل",
"taxId": "1234567A",
"managerEmail": "gerant@client.tn",
"phone": "71111222",
"street": "شارع الحبيب بورقيبة",
"city": "تونس",
"postalCode": "1000",
"ttnLogin": "login-ttn",
"ttnPassword": "secret-ttn",
"sealAlias": "alias-sceau",
"sealPin": "pin-sceau"
}

تنشئ فاتورة المؤسسة التابعة، تنسخ اشتراك كونكت، وتمنح الفوترة (invoice:read وinvoice:write وttn:submit وseal:sign). إذا أُرسلت بيانات TTN أو الختم، تنطلق الاختبارات فورًا.

الاسم وبريد المدير والهاتف والعنوان إلزامية. logoBase64 اختياري: data URL من نوع png أو jpeg أو gif أو webp، حوالي 500 كيلوبايت. في الصندوق الرملي تحمل إجابة الإنشاء taxIdLocked: true وtaxIdLockReason: "sandbox".

تحديث البطاقة​

PATCH /api/partner/organizations/{childOrgId}

حقول اختيارية، واحد على الأقل: name وtaxId وmanagerEmail وphone وstreet وcity وpostalCode وlogoBase64. الحقل الغائب لا يتغير. logoBase64: null يحذف الشعار.

للمؤسسة المنشأة فقط. الحساب المربوط يجيب 409 USE_DETACH_OTP. المؤسسة المؤرشفة تجيب 409 CHILD_ARCHIVED.

إذا كان taxIdLocked صحيحًا، معرّف آخر يجيب 409 TAX_ID_LOCKED مع نفس reason الذي في GET. في الصندوق الرملي لا يتغير المعرّف: تسجيل TTN واسم SEAL هما هذا المعرّف. في الإنتاج يُقفل بعد إيداع TTN. الاسم والعنوان والهاتف والبريد والشعار تبقى قابلة للتعديل.

الإيقاف​

POST /api/partner/organizations/{childOrgId}/pause
POST /api/partner/organizations/{childOrgId}/resume

الإيقاف يرفض إنشاء الفاتورة وتوقيعها وإرسالها (409 INVOICING_SUSPENDED)، بما في ذلك الصندوق الرملي. تبقى المؤسسة ضمن السقف والقراءة مفتوحة. الاستئناف يعيد invoicingSuspendedAt إلى null. الأرشفة أدناه هي الحذف: تحرّر السقف.

الختم وTTN​

PATCH /api/partner/organizations/{childOrgId}/credentials

الحقول الغائبة لا تُمسح. لا يُعاد ttnPassword ولا sealPin بوضوح.

إعادة الاختبار:

POST /api/partner/organizations/{childOrgId}/test-ttn
POST /api/partner/organizations/{childOrgId}/test-seal

تُحفظ آخر نتيجة على المؤسسة (ttnLastCredentialsOk وsealLastTestOk).

الأرشفة​

POST /api/partner/organizations/{childOrgId}/archive

للمؤسسة التي أنشأها الشريك فقط. حساب fatoora.tn المربوط لا يُؤرشف بهذا المسار: المالك يوقف الربط من حسابه (USE_DETACH_OTP). انظر الربط.

أخطاء الإنشاء​

الرمزHTTPالمعنى
TAX_ID_EXISTS409حساب fatoora.tn موجود. لا تُعد إنشاءه: اربطه. الإجابة تسرد organizations.
ALREADY_LINKED409المؤسسة موجودة أصلًا في محفظتك.
NOT_LINKABLE409المعرّف موجود ولا يمكن إنشاؤه ولا ربطه. اقرأ reason.
CONNECT_ORG_LIMIT409بلغ سقف المؤسسات.
CONNECT_PLAN_REQUIRED403الحساب ليس باقة كونكت.
NOT_ALLOWED403للمالك أو المدير فقط.
TAX_ID_LOCKED409لم يعد المعرّف قابلًا للتغيير. reason: sandbox أو ttn_submitted.
INVOICING_SUSPENDED409المؤسسة متوقفة. استأنفها قبل الفوترة.
CHILD_ARCHIVED409مؤسسة مؤرشفة: البطاقة والإيقاف لم يعودا متاحين.
LOGO_INVALID400يجب أن يكون الشعار data URL من نوع PNG أو JPEG أو GIF أو WebP.
LOGO_TOO_LARGE400الشعار كبير جدًا (حوالي 500 كيلوبايت).

قيم reason مع NOT_LINKABLE:

  • own_child — موجودة أصلًا بين مؤسساتك.
  • managed_elsewhere — يديرها كونكت آخر أو مكتب محاسبة.
  • partner_or_cabinet — حساب شريك أو مكتب، وليس شركة fatoora.tn عادية.