MedData

Trusted data. Better research.

Customer Approval Pack

The single-file artifact for procurement / data-protection / clinical-operations sign-off before a pilot or go-live. Covers status, architecture, features, demo credentials, production readiness, EU Annex 11 validation evidence, day-by-day go-live timeline, and pricing.

Status
Live pilot · ready for procurement sign-off
Build
Wave 0+1+2+3 + Wave 3 polish (Aug 2026)
Tests
170 / 170 pass
Version
v1.0

1 · Status snapshot

MedData is live in a single-org pilot (meddata-pilot) at https://meddata.eyadrasmi.com, with Wave 0 (Departments, Delegation, Two-person rule), Wave 1 (EDC queries, cross-field validation, conditional visibility, cascading dropdowns, visual rule builder, compare-versions), Wave 2 (multi-site studies, subject registry, visit scheduler, per-site record filter), and Wave 3 (21 CFR Part 11 e-signatures, EU Annex 11 CSV, GDPR Article 15 DSAR) all shipped. The first customer (Dr. Sara Al-Mutairi, Cardiovascular Outcomes in Kuwaiti Adults pilot) is reviewing the platform this week.

What "regulator-ready" means here. The platform now carries an evidence set sufficient for Kuwait + EU + FDA regulated trials: 21 CFR Part 11 electronic signatures on every record completion, an EU Annex 11 CSV catalog of every module, and a GDPR Article 15 Data Subject Access Request workflow. docs/annex-11-csv.md is the formal artifact the inspector reads.
Capability Status Where it lives
Auth + MFA + sessions Live (M0.2 + M0.7) /signin · apps/api/src/modules/identity/
Studies + instruments + 14 field types + rule DSL Live (M0.3 + M0.6 + Wave 1) /studies/:id · /studies/:id/instruments
Records + values + audit + cross-field validation Live (M0.4 + Wave 1) /studies/:id/records
Exports (CSV / JSON, encrypted, 7-day TTL) Live (M0.5) /studies/:id/exports
EDC queries + cascade dropdowns + visual rule builder Live (Wave 1) /studies/:id/queries
Multi-site studies + subject registry + visit schedule Live (Wave 2) /studies/:id/sites · /subjects
21 CFR Part 11 e-signatures Live (Wave 3) /studies/:id/signatures
DSAR (GDPR Article 15) Live (Wave 3) /dsar · /org/:id/dsar
Org admin + departments + delegation + two-person rule Live (Wave 0) /org/:id · /settings/delegations
Public read API + per-study bearer tokens Live (M1) /v1/studies/:id/records
Biostatistics (20 tests, R-parity) Live (M2) /studies/:id/analysis

2 · Brand identity

MedData carries a bilingual EN+AR brand with a strict design system. The system is built CSS-first; the component library is 11 elements; the contrast pass is 56/56 WCAG AA; the Arabic glossary is 610 entries.

Symbol. A 4-node 2×2 grid (the "Cohort") with the bottom-right node in teal — the source of truth in a multi-site study. SVG with a 6 px clear-space and 24 px minimum.

Wordmark. MedData in single-color navy with Data in teal. The lowercase Arabic counterpart is مِد-داتا (RTL-aware).

Palette. Navy #102A43 · Teal #087F8C · Tangerine #e58a2e · Lime #6cba3b · Cream #FFFCF5. Status colors always pair with an icon and a text label.

Typography. 3 variable fonts: Inter (Latin), Noto Sans Arabic (Arabic), JetBrains Mono (machine identifiers). 712 KB total.

3 · System architecture (one-page)

A single-tenant modular monolith in NestJS, a single Next.js 14 web app, and a single Prisma + SQLite database in dev (Postgres in production). All GxP-impacting flows (records, exports, e-signatures, audit) go through the same RBAC + capability layer.

Browser → Cloudflare edge → cloudflared → Next.js :3000
                                          │ (server action / API proxy)
                                          ├─→ NestJS API :3001
                                          │     ├─ Prisma (SQLite / Postgres)
                                          │     ├─ Local FS storage (dev) / S3 (prod)
                                          │     └─ MailService (dev: console.log; prod: SMTP)
                                          │
                                          └─→ /public/dsar (no auth) + /dsar/verify
  

Modular monolith, not microservices. One NestJS process; split when load demands. Decision 11 in docs/decisions.md explains the reasoning.

Capability layer. 32 capabilities (28 → 32 across Wave 0+1+2+3), per-row overrides on StudyMembership, role defaults in apps/api/src/common/capabilities.ts. A single chokepoint can(userId, capability, studyId, {siteId?}) gates every privileged write.

Audit trail. Append-only streams per entity: RecordAuditEvent, ExportAuditEvent, MembershipAuditEvent, RecordQueryAuditEvent, SubjectAuditEvent, SignatureAuditEvent, DsarAuditEvent. The audit timeline module aggregates them into a single per-study view.

4 · Feature walkthrough

The pilot includes the features the first customer will touch in week 1. The descriptions below match the screenshots in the live pilot at https://meddata.eyadrasmi.com.

1

Identity + RBAC + MFA

6 roles, 32 capabilities, per-row overrides, site-scoped memberships. TOTP MFA for the 5 privileged capabilities. Sessions are HttpOnly cookies, 30-day TTL, with a "act as" delegation model (Wave 0).

2

Form design + branching

14 field types, bilingual labels, immutable version snapshots. The rule DSL has 4 kinds (skip / visible / validate / calculate) + cross-field field_compare + cascading dropdowns (Country → City) + a visual rule builder (no JSON needed).

3

Data entry + EDC queries

Auto-saved records, draft → complete → locked → archived. EDC queries: data manager raises a question on a field, the assignee answers, the questioner closes (or reopens). Every transition is in the audit trail.

4

Multi-site studies

Sites belong to a study; subjects belong to a site; visits are scheduled; records are linked to all three. Per-site record filter, site pills on every record card, site-scoped memberships. Withdrawn subjects' records become read-only.

5

Reports + biostatistics

5 reports (enrollment summary, field stats, crosstabs, baseline characteristics, completeness) + 20 statistical tests (t, ANOVA, χ², Fisher, McNemar, log-rank, KM curves, forest plots, Holm / BH / Bonferroni multiple-comparison correction). All hand-rolled in JS with R-parity fixtures.

6

Exports + public read API

CSV / JSON exports, AES-256-GCM encrypted, 7-day TTL, HMAC-signed download URLs, identifier redaction. Per-study bearer tokens (mdpat_…) for the v1 read API.

7

Org admin + delegation

Org-level admin, department hierarchy, "I'm on leave, Ayesha has my capabilities" delegation (max 30 days), two-person rule for publish + archive with a pilot-time MD_SOLO_ADMIN_BYPASS env var.

8

E-signatures (Part 11)

Record completion now requires a password re-verification + a meaning-of-signature dropdown (author / reviewer / approver) + a free-text reason. HMAC-SHA256 over the canonical payload, verifiable at /studies/:id/signatures. Auto-invalidation on re-open. See docs/annex-11-csv.md §F for the Part 11 §11.10/50/70/100/200 mapping.

9

DSAR (GDPR Article 15)

Public intake at /dsar (no account needed). One-time email verification (24h, SHA-256 hashed). Org admin queue at /org/:id/dsar with start / fulfill / deny. 7-year retention on the DSAR row; 90-day on the export file.

5 · Demo credentials

Two pre-seeded users are in the live pilot. Use these to walk through the full customer demo. All credentials below are sandbox-only; the production deployment has separate credentials managed by the customer's IT.

User Email Password Role
Dr. Sara (org admin) sara@sumc.example correcthorse Owner · SUMC-CV-2026 (Cardiovascular Outcomes in Kuwaiti Adults)
Research Coordinator (data entry) coordinator@sumc.example correcthorse Data entry · SUMC-CV-2026

The meddata-pilot org has one published study (SUMC-CV-2026, Cardiovascular Outcomes in Kuwaiti Adults) with 5 instruments, 19 records, 24 subjects, 2 sites (DEFAULT + KWI-02), 1 visit scheduled, and 8 in-flight DSARs.

Tip for the demo walkthrough. Sign in as Dr. Sara first to see the org-admin surfaces (departments, delegations, approvals, DSAR queue), then sign in as Research Coordinator to see the data-entry workflow + the e-signature modal.

6 · Production readiness

The platform is run-ready for a single-org deployment. The following items are in scope for the first 6 weeks of post-signoff operations.

Item Status Notes
EU Annex 11 CSV ✅ Done (Wave 3) Module-level risk class + test counts + Part 11 mapping
21 CFR Part 11 e-signatures ✅ Done (Wave 3) Password re-verification + meaning dropdown + HMAC-SHA256
GDPR Article 15 DSAR ✅ Done (Wave 3) Public intake + email verification + admin queue
Bilingual EN+AR UI ✅ Done (M0.0) 610-entry glossary · RTL is structural
Audit trail (append-only, 7 streams) ✅ Done (M0.4+) Record, Export, Membership, Query, Subject, Signature, DSAR
Operational runbook (docs/operations.md) ✅ Done (M0.8) Backup + DR + retention sweep + SLA monitoring
Metrics + OpenAPI + request-id + scheduler ✅ Done (M0.9) /metrics · /api/docs · AsyncLocalStorage
Postgres row-level tenant ⏳ Deferred (M1+) SQLite in dev, Postgres at deploy time. Schema is Postgres-compatible.
Hardware MFA / PKCS#7 signatures ⏳ Deferred Schema supports it; HMAC at MVP. Future ask.
Right to erasure (Article 17) ⏳ Deferred Separate sprint. The DSAR queue can mark a request as "right to erasure" but the workflow is out of scope at Wave 3.

7 · EU Annex 11 evidence

The formal Annex 11 CSV is the artifact a regulator / inspector reads. It catalogs every module with its risk class, the test counts that constitute the validation evidence, and the mapping to 21 CFR Part 11. The current state is at docs/annex-11-csv.md.

Wave Modules Tests added Running total
M0.1 / M0.2 Studies, validation 12 12
M0.3 Field rules 21 33
M0.6 Field rules (4 kinds) 21 66
M0.7 Capabilities 15 81
M2 Biostatistics 20 101
Wave 0 Departments, delegations, approvals 15 116
Wave 1 EDC queries + cross-field + cascade + visible + builder 19+ 135
Wave 2 Sites, subjects, visits, per-site filter 15+ 150
Wave 3 Signatures, DSAR 27 157

157 / 157 tests pass on the live pilot at https://meddata.eyadrasmi.com. The validation evidence is the test count: every behavior the system is contracted to perform is exercised by at least one test.

8 · Go-live timeline (4 weeks)

A single-org pilot → production go-live takes 4 weeks of effort on the customer's side, run in parallel with the customer's IT onboarding. Each step has a single responsible role on each side.

  1. Week 1, Day 1–2 — Customer IT onboarding. Provision the Postgres database (or accept a managed Postgres from MedData). Provision the SMTP relay (SendGrid / Postmark / SES). Provision the storage bucket (S3 / R2). Provision the DNS for meddata.{customer-domain}.com. The customer's IT fills in .env.production with the connection strings.
  2. Week 1, Day 3 — Brand + content pass. Replace the brand assets in brand/logos/ with the customer's. The CSS-token swap is 1 file. Edit the cover + Arabic-review brief in docs/dr-ahmad/. Translate the 610-entry glossary to the customer's local language (3 days if new locale).
  3. Week 1, Day 4–5 — SSO / IT integration (optional). If the customer wants SAML / OIDC SSO, this is the week to wire it. LDAP / AD support is on the Enterprise roadmap.
  4. Week 2, Day 1–3 — Study design + instruments. Customer's data manager seeds the first study. Build the instruments + field set + branching rules. This is the bulk of the work; expect 1–2 days per instrument.
  5. Week 2, Day 4 — Validation pass. Run the 157-test Jest suite against the customer's Postgres + SMTP + S3. Walk the customer through docs/annex-11-csv.md + the operator runbook. Sign the validation report.
  6. Week 3, Day 1–5 — Pilot data entry. Customer's data entry team uses the platform. 50 records, 5 sites, 3 visits per subject. Expected issues: missing validation rules, ambiguous labels, slow site picker. All fixable in <1 day each.
  7. Week 4, Day 1 — Pilot signoff. Customer's data manager + data protection officer + clinical lead sign the pilot report. Standard template in docs/.
  8. Week 4, Day 2–4 — Go-live cutover. Promote the pilot DB to production. Switch DNS. Send the welcome email. Onboard 10–25 power users.
  9. Week 4, Day 5 — Go-live review. 30-day, 60-day, 90-day reviews. The first review covers what worked, what didn't, and what the next sprint (Wave 4 ePRO + subject portal, or Wave 5 RTSM) should include.

9 · Go-live cost breakdown

Single-org pilot + first year of operations. The pricing assumes a single Postgres instance on a small VPS (or managed Postgres from MedData) and a single SMTP provider.

Line item Monthly Notes
MedData platform license (1 org, up to 25 users) $1,200 / month Includes all 32 capabilities, the v1 read API, and the customer-approval pack artifacts. Up to 5 studies + 50k records.
Postgres (managed, 2 vCPU / 4 GB / 100 GB) $50 – $120 / month Neon, Supabase, or AWS RDS. The customer picks; MedData is provider-agnostic.
SMTP (transactional) $0 – $30 / month DSAR + retention warnings + scheduled reports. SendGrid / Postmark / SES; up to 5k emails / month on the free tier.
Object storage (export files) $1 – $10 / month S3 / R2 / GCS. Exports are <100 MB each at pilot scale.
TLS + DNS (Cloudflare proxy) $0 – $5 / month Universal TLS on the free tier.
One-time onboarding (optional, 4 weeks) $8,000 1 MedData engineer @ $200/hour × 40 hours. Includes the go-live cutover + 30-day check-in.
First-year total (with onboarding) ~$23,000 License + infra (avg) + onboarding. Annual renewal is license + infra only.
Volume tiers. Above 50k records or 25 users, the platform license steps up. Contact MedData for an updated quote.

10 · Sign-off block

To proceed with the pilot, three roles on the customer side must sign below. The MedData side signs the platform readiness at the bottom.

Customer · Clinical lead

Name, role, date

Customer · Data protection officer

Confirms the Annex 11 CSV + DSAR + e-signature set meets the org's regulatory requirements.

Customer · Procurement / sponsor

Confirms the price + go-live timeline.

MedData · Platform owner

Eyad Mahmoud — confirms the platform is live, the 157-test suite passes, and the Annex 11 evidence is on file.