This repository has been archived on 2026-08-11. You can view files and clone it, but cannot push or open issues or pull requests.
Gishen-B2B/docs/backend/events/README.md
kirukib 3778801ef5 Ship Gishen B2B institutional portal with polished layout and mock-backed flows.
Deliver role-aware shell (sidebar, breadcrumbs, quick search, tables, detail/create layouts), locale-ready pages, shared backend/feature docs, and Vercel project config so HR, finance, and members can demo against typed mocks.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 21:18:23 +03:00

4.3 KiB

Domain events

Events published to the platform event bus for cross-system coordination. B2B emits and consumes as noted.

Workspace: /Users/kirukib/Desktop/Yaltopia Project/Gishen-B2B

Event envelope

{
  "id": "evt_01H...",
  "type": "org.registration_submitted",
  "occurred_at": "2026-03-01T09:00:00Z",
  "org_id": "org_01HNEW",
  "actor_id": "usr_01HNEW",
  "payload": { ... },
  "schema_version": "1"
}

Catalog

Organisation

Event Emitter Consumers Payload
org.registration_submitted B2B API Admin, CRM registration_id, org_id, company, super_user (no password)
org.registration_requested B2B API Admin, CRM request_id, contact_name, channel, email?, phone?, message?
org.activated Admin API B2B, Ecom org_id, commercial, activated_by, activated_at

Sample: org.registration_submitted

{
  "type": "org.registration_submitted",
  "org_id": "org_01HNEW",
  "payload": {
    "registration_id": "oreg_01HABC",
    "company": {
      "legal_name": "Gamma Industries PLC",
      "tin": "0011223344",
      "approx_headcount": 200
    },
    "super_user_email": "hanna@gamma.et"
  }
}

Sample: org.activated

{
  "type": "org.activated",
  "org_id": "org_01HNEW",
  "payload": {
    "status": "active",
    "commercial": {
      "credit_limit": { "amount": "2000000.00", "currency": "ETB" },
      "price_list_id": "pl_corporate_2026",
      "contract_start": "2026-04-01",
      "contract_end": "2027-03-31"
    }
  }
}

Migration

Event Emitter Consumers Payload
migration.job_started B2B API Admin (audit), internal job_id, dataset_type, org_id
migration.job_completed B2B API Admin (audit), internal job_id, commit_result
migration.job_failed B2B API Admin (audit), internal job_id, error_code, message

Sample: migration.job_completed

{
  "type": "migration.job_completed",
  "org_id": "org_01HQXYZ",
  "payload": {
    "job_id": "mig_01HJOB001",
    "dataset_type": "members",
    "commit_result": {
      "created": 487,
      "updated": 10,
      "skipped": 3,
      "failed": 0
    }
  }
}

Prescriptions

Event Emitter Consumers Payload
prescription.submitted B2B API Admin (pharmacist queue) prescription_id, member_id, customer_id, page_count
prescription.review_updated Admin API B2B, Ecom, Mob prescription_id, status, query_message?, medicine_lines?

Sample: prescription.submitted

{
  "type": "prescription.submitted",
  "org_id": "org_01HQXYZ",
  "payload": {
    "prescription_id": "rx_01H001",
    "member_id": "mbr_01HMEM001",
    "customer_id": "cus_01HSHARED",
    "page_count": 2,
    "submitted_at": "2026-03-10T08:00:00Z"
  }
}

Clinical withhold: prescription.submitted event must not include image URLs or clinical content — Admin fetches via secure internal API.

Sample: prescription.review_updated (consumed by B2B)

{
  "type": "prescription.review_updated",
  "payload": {
    "prescription_id": "rx_01H001",
    "status": "approved",
    "reviewed_at": "2026-03-11T10:00:00Z",
    "days_supply": 30,
    "refill_due_at": "2026-04-10"
  }
}

Medicine lines included in consumer payload for MEMBER/SUPER_USER views only — filtered at API layer for HR/Finance.


Webhook delivery (future)

POST https://client.example/webhooks/gishen
X-Gishen-Signature: sha256=...

Retry: exponential backoff, 3 days max.

B2B responsibilities

Action Event
Self-register completes Emit org.registration_submitted
Request form submitted Emit org.registration_requested
Migration commit starts/ends Emit migration.job_*
Member submits Rx Emit prescription.submitted
Admin activates org Consume org.activated → unlock entitlements
Pharmacist reviews Rx Consume prescription.review_updated → update member UI