SAP SuccessFactors Release and Change Governance — Specification
Product overview
A consulting-first, multi-tenant SaaS platform for SAP SuccessFactors release governance. It ingests SAP What's New content once, matches it against per-client landscape profiles, and publishes only approved, client-specific change packages into segregated client workspaces for acknowledgment, testing, sign-off, and hypercare closure.
Problem statement
Consulting and support teams managing multiple SAP SuccessFactors clients face release overwhelm, cross-client work duplication, traceability voids, and known-issue blindspots. They need a governed, confidential, and auditable way to assess each SAP release once, decide relevance per client, publish tailored communications, and track the full lifecycle through testing, deployment, and hypercare.
Target users & roles
- Release Manager — Internal portfolio operator who ingests SAP releases, reviews matching results, assigns assessments, monitors deadlines, coordinates sign-off, and reports readiness across clients.
- Module Owner — Functional expert who assesses module-specific relevance, configuration impact, regression scope, and writes client-facing explanations.
- Integration Lead — Technical lead who assesses API, interface, middleware, and integration impacts of SAP changes.
- Change Manager — Owns client-facing publication, communication, and acknowledgment workflows; converts technical assessments into client-ready packages.
- Support Analyst — Manages Known Issues, flags issues early during assessment, links incidents and SAP cases, and triages hypercare incidents.
- Tester — Executes regression test cases, uploads evidence, and records pass/fail/blocked statuses.
- Client Administrator — Client-side user who reviews published changes, acknowledges communications, assigns internal actions, confirms testing availability, and signs off on production.
- Client Viewer — Client-side read-only user who can review published content and acknowledge communications but cannot edit or assign actions.
- Platform Administrator — Manages tenant configuration, users, roles, permissions, audit logs, and system settings.
User journeys
Release Ingestion to Client Publication
- Release Manager uploads an SAP What's New XLSX/CSV file through the Import Wizard and maps columns visually.
- The system validates headers, detects duplicates, and creates Master Release Items under a Master Release Cycle.
- The relevance engine auto-classifies each item against every Client Landscape Profile as Auto-Applicable, Auto-Excluded, or Manual Review Needed.
- Release Manager reviews matching results, resolves ambiguous matches, and assigns manual review items to Module Owners and Integration Leads.
- Module Owners and Integration Leads complete internal assessments with relevance status, impact notes, risk ratings, and regression scope.
- Change Manager selects approved assessments, writes client-facing summaries, sets action deadlines, and publishes immutable client packages.
- Client Administrator reviews published packages, acknowledges them, and confirms testing availability.
Testing Execution to Hypercare Closure
- Tester opens the Test Plan & Execution screen and selects assigned test cases linked to client release assessments.
- Tester executes each case, uploads evidence, and records Passed, Failed, or Blocked status.
- The system enforces the sign-off gate: Production Sign-off cannot be approved while any High/Critical test case is Failed or Blocked without an approved override.
- Client Administrator and Release Manager complete formal production sign-off with authenticated confirmation and audit capture.
- Support Analyst triages hypercare incidents, links SAP cases, records workarounds, and confirms closure.
- The system measures Cycle Time from ingestion timestamp to closure timestamp in the governance lane.
Functional requirements
FR-001: SAP What's New Import Wizard
The platform must provide an XLSX/CSV Import Wizard with visual column mapping, header validation, automated duplicate detection, and manual line-item entry fallback. This serves the confirmed hybrid ingestion decision and mitigates SAP schema mutation risk.
Acceptance criteria:
- Given a valid SAP What's New XLSX file, when the Release Manager completes the visual mapping wizard, then all rows are ingested as Master Release Items with correct field assignments and duplicate detection.
FR-002: Automated Relevance Classification
The platform must auto-classify release items against client landscape profiles using a hybrid relational/JSONB matching engine, producing Auto-Applicable, Auto-Excluded, or Manual Review Needed states. This implements the confirmed rule-based relevance engine and reduces per-client analysis labor.
Acceptance criteria:
- Given a client landscape profile with enabled modules and countries, when a new release item is ingested, then the system auto-classifies it as Auto-Applicable, Auto-Excluded, or Manual Review Needed within 30 seconds.
FR-003: Publication Gate
The platform must enforce a publication gate: a Client Release Assessment cannot be published unless Relevance Status is 'Applicable', Client-Facing Summary is non-empty, and Internal Risk is categorized. This prevents incomplete or inappropriate content from reaching clients.
Acceptance criteria:
- Given a Client Release Assessment with Relevance Status 'Applicable', non-empty Client-Facing Summary, and categorized Internal Risk, when the Change Manager attempts to publish, then the publication succeeds and creates an immutable snapshot.
FR-004: Immutable Audit Logging
The platform must provide immutable audit logging with SHA-256 hash chaining for all sign-offs and publication events, capturing user identity, timestamp, IP address, and role. This serves the confirmed audit trail requirement for compliance and non-repudiation.
Acceptance criteria:
- Given a client user with appropriate role, when they click 'Acknowledge' on a published release, then the system records their identity, timestamp, IP address, and role in an immutable audit trail with SHA-256 hash chaining.
FR-005: Bulk Updates and Excel Import/Export
The platform must support bulk updates, Excel import/export for offline assessment and testing plans, and optimistic concurrency with visual diff merge. This serves the confirmed offline-first Excel workflow and prevents lost updates during crunch windows.
Acceptance criteria:
- Given an Excel export of assessments, when the user re-imports the file after offline edits, then the system detects conflicts via optimistic concurrency and presents a visual diff merge for resolution.
FR-006: Known Issue Duplicate Prevention
Before creating a Known Issue or linking a support ticket, the system must check for existing records with matching SAP KBA/Issue ID or Client Ticket Reference ID and block duplicates with a link to the existing record. This prevents duplicate issue creation and supports traceability.
Acceptance criteria:
- Given a user attempts to create a Known Issue or link a support ticket with a duplicate SAP KBA/Issue ID or Client Ticket Reference ID, the system blocks the action and provides a link to the existing record.
FR-007: Real-Time Urgent Alerts
Real-time urgent alerts should be triggered by SLA breaches, failed sign-off gates, high-impact publication events, and overdue actions. This implements the confirmed hybrid notification strategy with real-time urgent alerts.
Acceptance criteria:
- Given a Client Acknowledgment SLA breach, when the breach occurs, then the system sends a real-time alert to the Change Manager and Release Manager.
FR-008: High-Impact Per-Item Acknowledgment Flagging
High-impact items should be flagged for per-item acknowledgment automatically based on Internal Risk rating (High/Critical) with manual override by Change Manager. This implements the confirmed bulk-with-exceptions acknowledgment granularity.
Acceptance criteria:
- Given a published release with a High/Critical Internal Risk item, when the client views the acknowledgment screen, then the item is flagged for per-item acknowledgment unless the Change Manager overrides it.
FR-009: SLA Breach Escalation
When Client Acknowledgment SLA is breached, automatic escalation to Change Manager and Release Manager with real-time alert should occur. This ensures timely response to missed client acknowledgments.
Acceptance criteria:
- Given a published client package whose acknowledgment SLA has expired, when the system detects the breach, then it escalates to the Change Manager and Release Manager with a real-time alert.
FR-010: Master Catalog Three-Way Diff Merge
Master catalog updates propagate to downstream client assessments via three-way diff merge, never silently overwriting client-tailored notes. This preserves consulting notes while highlighting critical global advisory updates.
Acceptance criteria:
- Given a master release item update, when the system propagates the update to downstream client assessments, then the system flags assessments as 'Update Available' without auto-overwriting client-tailored notes, and consultants review a three-way diff before accepting or rejecting changes.
FR-011: Faceted Filters, Saved Views, and Full-Text Search
The platform must provide faceted filters, saved searches/views, and full-text search across release items, assessments, and known issues. This serves the confirmed search and filter requirements for efficient triage.
Acceptance criteria:
- Given a user on the Assessment Queue screen, when they apply faceted filters and save the view, then the saved view persists and can be reloaded with the same filters applied.
FR-012: Dashboards and KPIs
The platform must provide dashboards and KPIs including Client Acknowledgment Rate, Test Execution Rate, Overdue Actions, Unresolved Dependencies, Release Readiness, Client Acknowledgment SLA, and Cycle Time. This serves the confirmed KPI set for release governance visibility.
Acceptance criteria:
- Given a release cycle with assessments, test cases, dependencies, and acknowledgments, when the dashboard loads, then all seven KPIs are displayed with correct values.
FR-013: Configurable Notifications
The platform must provide configurable email notifications and in-app notifications, with daily/weekly batched digests and real-time urgent alerts. This implements the confirmed hybrid notification strategy.
Acceptance criteria:
- Given a user with notification preferences set to daily digest, when routine updates occur, then the user receives a daily batched email digest with deep links.
FR-014: Multi-Language UI and Locale Formats
The platform must provide multi-language UI support with locale formats and timezone handling for all user-facing timestamps. This serves the confirmed multilingual and timezone-aware requirements.
Acceptance criteria:
- Given a user with a non-English locale, when they view client-facing content, then the UI and content are displayed in their selected language with correct locale formats and timezone.
FR-015: Responsive Mobile-Friendly Interface
The platform must provide a responsive, mobile-friendly interface for client acknowledgment and executive dashboards. This serves the confirmed mobile acknowledgment use case.
Acceptance criteria:
- Given a client executive on a tablet, when they open the client portal dashboard, then the layout is responsive and acknowledgment controls are usable without horizontal scrolling.
FR-016: REST API with Rate Limiting
The platform must provide a REST API for all major entities, with consistent error responses and rate limiting. This serves the confirmed REST API requirement and standard abuse prevention.
Acceptance criteria:
- Given an external system calling the REST API, when the request rate exceeds the configured limit, then the API returns a consistent rate-limit error response.
FR-017: Forms with Validation UX
The platform must provide forms with validation UX, including required fields, regex validation for SAP case IDs, and date constraints. This serves the confirmed forms and validation UX requirement.
Acceptance criteria:
- Given a user entering an invalid SAP Case Reference ID, when they submit the form, then the system shows a validation error and blocks submission.
FR-018: Task Completion Tracking
The platform must provide task completion tracking with owners, deadlines, and status history for every workflow stage. This serves the confirmed task completion requirement and lifecycle traceability.
Acceptance criteria:
- Given an assessment assigned to a Module Owner with a deadline, when the owner completes the assessment, then the status history records the completion with timestamp and owner identity.
FR-019: Client Landscape Profile Management
The platform must provide a Client Landscape Profile Editor for configuring modules, countries, processes, integrations, and environments, with effective-dated snapshots and stale-profile warnings. This serves the confirmed landscape configuration and staleness mitigation requirements.
Acceptance criteria:
- Given a client landscape profile with a stale configuration snapshot, when a consultant opens the profile editor, then the system shows a fixed warning banner with a 'Re-confirm now' button that navigates to the stale fields.
FR-020: Known Issue Register and Linkage
The platform must provide a Known Issue Register for tracking SAP Known Issues, linking them to releases, clients, modules, environments, support tickets, workarounds, and regression tests. This serves the confirmed Known Issues and support traceability requirements.
Acceptance criteria:
- Given a Support Analyst linking a Known Issue to a release item, when they save the link, then the Known Issue appears in the register with traceability to the release item, client, and module.
FR-021: Release Health Score and Readiness
The platform must compute Release Health Score as dimension scores (testing, dependencies, approvals, issues) with an overall status derived by deterministic worst-dimension-wins. This serves the confirmed readiness scoring model.
Acceptance criteria:
- Given a release with a blocked testing dimension, when the dashboard loads, then the overall status is 'blocked' and the testing dimension score is visible.
FR-022: Client Re-Notification Flag Lifecycle
When a severity change on a linked Known Issue sets the Client Re-Notification Flag on a Published Client Package Item, the flag auto-clears when the client acknowledges the re-notification. This serves the confirmed re-notification lifecycle.
Acceptance criteria:
- Given a published client package with a re-notification flag set, when the client acknowledges the re-notification, then the flag auto-clears.
FR-023: Seat Increase Request Approval
Seat-increase requests from client admins require single consulting admin approval with a configurable 48-hour business-hours timeout and automatic escalation to a platform administrator if not actioned. This serves the confirmed seat pool enforcement and approval workflow.
Acceptance criteria:
- Given a seat-increase request from a client admin, when the consulting admin does not act within 48 business hours, then the request escalates to a platform administrator.
FR-024: Cold-Storage Diff Retrieval
The cold-storage retrieval for internal field-level diffs is available to Release Managers and Platform Administrators as read-only, with export capability for compliance reviews. This serves the confirmed audit retention and retrieval requirements.
Acceptance criteria:
- Given a Release Manager requesting an archived field-level diff, when they retrieve it, then the diff is read-only and can be exported as PDF or CSV.
Screen / page inventory
- Release Catalog Dashboard — Overview of all master release cycles and items for the consulting team.
- Elements: Release cycle list with item counts and ingestion status, Drift indicators for master catalog updates, Search and filter controls
- Import Wizard — Ingest SAP What's New XLSX/CSV files with visual mapping and validation.
- Elements: File upload with visual column mapping, Header validation and duplicate detection, Manual line-item entry fallback
- Client Landscape Profile Editor — Configure client modules, countries, processes, integrations, and environments.
- Elements: Module multi-select and country ISO picker, Environment type selector and JSONB extension attributes, Contact phones JSON and custom processes free-text
- Relevance Matching Review — Review auto-classification results and resolve ambiguous matches.
- Elements: Proposed relevance states with configuration snapshot, Reasoning display and manual override controls, Assignment to Module Owners
- Assessment Queue — List of client release assessments assigned to a consultant.
- Elements: Faceted filters (release, client, module, country, owner, priority, decision state, overdue status), Saved views and bulk update controls
- Client Release Assessment Detail — Internal consulting evaluation of one master item for one client.
- Elements: Relevance status, client-specific impact note, internal risk rating, Regression scope, action owner, review state, drift status, Three-way diff merge view
- Publication Builder — Create client-visible packages from approved assessments.
- Elements: Public title, executive summary, client action required, Action deadline and publication gate validation, Version preview
- Client Workspace Dashboard — Client-facing overview of published changes and actions.
- Elements: Executive summaries and action items, Acknowledgment controls and progress indicators, Drill-down for technical details
- Test Plan & Execution — Manage regression test plans and record execution evidence.
- Elements: Test case list with execution status, Evidence upload and linkage to known issues and dependencies
- Known Issue Register — Track SAP Known Issues and linked incidents.
- Elements: SAP KBA/Issue ID, title, summary, severity, affected modules, Workaround, SAP status, client ticket reference ID, ITSM deep link, Duplicate detection
- Release Dashboard — Portfolio-level release readiness view.
- Elements: KPIs (Client Acknowledgment Rate, Test Execution Rate, Overdue Actions, Unresolved Dependencies, Release Readiness, Client Acknowledgment SLA, Cycle Time), Filters by client, module, priority, impact, readiness
- Administration Console — Manage users, roles, permissions, tenant configuration, and audit logs.
- Elements: User provisioning and role assignment, Permission bundles and tenant settings, Audit log viewer
Data model
User
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
email |
string | Unique, indexed, required |
password_hash |
string | Internal users only, nullable for SSO users |
sso_subject |
string | Client SSO subject, nullable |
mfa_settings |
jsonb | MFA configuration, nullable |
created_at |
datetime | Required |
updated_at |
datetime | Required |
Role
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
name |
string | Unique, required |
created_at |
datetime | Required |
updated_at |
datetime | Required |
Permission
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
name |
string | Unique, required |
created_at |
datetime | Required |
updated_at |
datetime | Required |
UserRole
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
user_id |
foreign_key->User | Required, indexed |
role_id |
foreign_key->Role | Required, indexed |
RolePermission
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
role_id |
foreign_key->Role | Required, indexed |
permission_id |
foreign_key->Permission | Required, indexed |
MasterReleaseCycle
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
code |
string | Unique, required, e.g. '2025 1H' |
target_year |
integer | Required |
half |
enum(1H,2H) | Required |
preview_date |
date | Required |
production_date |
date | Required |
lifecycle_state |
enum(Draft,ActiveTriage,Published,HistoricalReadOnly) | Required |
ingested_item_count |
integer | Default 0 |
created_at |
datetime | Required |
updated_at |
datetime | Required |
MasterReleaseItem
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
release_cycle_id |
foreign_key->MasterReleaseCycle | Required, indexed |
sap_feature_id |
string | Unique, required |
title |
string | Required |
module |
enum(EC,PMGM,RCM,ECPayroll,LMS,Comp,Succession,ONB,etc) | Required, indexed |
sub_module |
string | Nullable |
feature_category |
enum(NewFeature,Enhancement,Deprecation,UniversalUpdate) | Required |
description |
text | Required |
sap_documentation_url |
string | Nullable, valid URL |
consulting_master_assessment_richtext |
text | Nullable |
global_risk_level |
enum(Low,Medium,High,Critical) | Required |
master_test_template |
text | Nullable |
version_number |
integer | Required, default 1 |
created_at |
datetime | Required |
updated_at |
datetime | Required |
ClientTenant
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
tenant_id |
string | Unique, required, used for RLS |
client_name |
string | Required |
industry |
string | Nullable |
primary_region |
string | Nullable |
sla_tier |
enum(Standard,Premium,Enterprise) | Required |
active_status |
boolean | Required, default true |
onboarding_date |
date | Required |
storage_prefix |
string | Required, unique, S3 prefix |
created_at |
datetime | Required |
updated_at |
datetime | Required |
ClientLandscapeConfig
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
client_tenant_id |
foreign_key->ClientTenant | Required, indexed |
module_code |
enum(EC,PMGM,RCM,ECPayroll,LMS,Comp,Succession,ONB,etc) | Required, indexed |
country_iso_code |
string | Required, ISO 3166-1 alpha-2, indexed |
environment_type |
enum(Production,Preview,Sandbox) | Required |
extension_attributes |
jsonb | Nullable, custom sub-features and integration endpoints |
contact_phones |
jsonb | Nullable, typed entries: mobile/office/emergency |
custom_processes |
text | Nullable, free-text |
active |
boolean | Required, default true |
last_verified_date |
date | Required |
created_at |
datetime | Required |
updated_at |
datetime | Required |
ClientReleaseAssessment
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
client_tenant_id |
foreign_key->ClientTenant | Required, indexed |
master_release_item_id |
foreign_key->MasterReleaseItem | Required, indexed |
master_item_snapshot |
jsonb | Required, immutable snapshot of critical fields plus version metadata |
synced_master_version |
integer | Required |
relevance_status |
enum(AutoApplicable,AutoExcluded,ManualReviewNeeded,Applicable,NotApplicable) | Required |
client_specific_impact_note |
text | Nullable, internal only |
internal_consulting_risk_rating |
enum(Low,Medium,High,Critical) | Required |
regression_scope |
text | Nullable |
action_owner_id |
foreign_key->User | Required, indexed |
review_state |
enum(Draft,InAssessment,Complete) | Required |
drift_status |
enum(UpToDate,UpdateAvailable) | Required |
created_at |
datetime | Required |
updated_at |
datetime | Required |
PublishedClientPackageItem
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
client_release_assessment_id |
foreign_key->ClientReleaseAssessment | Required, indexed |
client_tenant_id |
foreign_key->ClientTenant | Required, indexed |
public_title |
string | Required |
executive_summary |
text | Required |
client_action_required |
string | Nullable |
action_deadline |
datetime | Nullable, timezone-aware |
published_version |
integer | Required, default 1 |
published_at |
datetime | Required |
published_by_user_id |
foreign_key->User | Required, indexed |
client_acknowledged_state |
enum(NotAcknowledged,Acknowledged) | Required, default NotAcknowledged |
client_re_notification_flag |
boolean | Required, default false |
created_at |
datetime | Required |
updated_at |
datetime | Required |
ReleaseSignOff
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
client_tenant_id |
foreign_key->ClientTenant | Required, indexed |
release_cycle_id |
foreign_key->MasterReleaseCycle | Required, indexed |
sign_off_type |
enum(PreviewTestingAcknowledged,ProductionGoLiveApproved) | Required |
signer_user_id |
foreign_key->User | Required, indexed |
signer_role |
string | Required |
authenticated_timestamp |
datetime | Required |
ip_address |
string | Required |
audit_hash |
string | Required, SHA-256 |
previous_hash |
string | Required, SHA-256 |
comments |
text | Nullable |
created_at |
datetime | Required |
KnownIssue
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
sap_kba_issue_id |
string | Unique, required |
title |
string | Required |
summary |
text | Required |
severity |
enum(Low,Medium,High,Critical) | Required, current value |
affected_modules |
jsonb | Required, array of module codes |
workaround_richtext |
text | Nullable |
sap_status |
enum(Investigating,FixInPreview,Resolved) | Required |
client_ticket_reference_id |
string | Nullable, indexed |
itsm_url_deep_link |
string | Nullable, valid URL |
created_at |
datetime | Required |
updated_at |
datetime | Required |
ReleaseTestCase
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
client_release_assessment_id |
foreign_key->ClientReleaseAssessment | Required, indexed |
test_scenario_title |
string | Required |
expected_result |
text | Required |
test_type |
enum(Functional,Regression,Integration,UAT) | Required |
assigned_tester_user_id |
foreign_key->User | Required, indexed |
execution_status |
enum(NotStarted,InProgress,Passed,Failed,Blocked) | Required, default NotStarted |
test_evidence_attachment_id |
foreign_key->Attachment | Nullable, indexed |
executed_at |
datetime | Nullable |
optimistic_lock_version |
integer | Required, default 1 |
created_at |
datetime | Required |
updated_at |
datetime | Required |
Dependency
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
source_entity_type |
enum(ClientReleaseAssessment,ReleaseTestCase,KnownIssue,MasterReleaseItem) | Required |
source_entity_id |
integer | Required, indexed |
target_entity_type |
enum(ClientReleaseAssessment,ReleaseTestCase,KnownIssue,MasterReleaseItem) | Required |
target_entity_id |
integer | Required, indexed |
dependency_type |
enum(Blocks,IsBlockedBy,RelatesTo) | Required |
direction |
enum(Forward,Backward) | Required |
status |
enum(Open,Resolved) | Required, default Open |
notes |
text | Nullable |
created_at |
datetime | Required |
updated_at |
datetime | Required |
Attachment
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
tenant_id |
foreign_key->ClientTenant | Required, indexed |
entity_type |
enum(ClientReleaseAssessment,ReleaseTestCase,KnownIssue,PublishedClientPackageItem) | Required |
entity_id |
integer | Required, indexed |
file_name |
string | Required |
s3_key |
string | Required, unique |
content_type |
string | Required |
size |
integer | Required, bytes |
uploaded_by_user_id |
foreign_key->User | Required, indexed |
uploaded_at |
datetime | Required |
created_at |
datetime | Required |
AuditLogEntry
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
tenant_id |
foreign_key->ClientTenant | Required, indexed |
entity_type |
string | Required |
entity_id |
integer | Required, indexed |
action |
string | Required |
user_id |
foreign_key->User | Required, indexed |
timestamp |
datetime | Required |
ip_address |
string | Required |
previous_hash |
string | Required, SHA-256 |
current_hash |
string | Required, SHA-256 |
payload |
jsonb | Required |
created_at |
datetime | Required |
Notification
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
tenant_id |
foreign_key->ClientTenant | Required, indexed |
user_id |
foreign_key->User | Required, indexed |
type |
enum(Email,InApp) | Required |
title |
string | Required |
body |
text | Required |
deep_link |
string | Nullable, valid URL |
read_status |
boolean | Required, default false |
created_at |
datetime | Required |
Comment
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
tenant_id |
foreign_key->ClientTenant | Required, indexed |
entity_type |
enum(ClientReleaseAssessment,PublishedClientPackageItem,KnownIssue,ReleaseTestCase) | Required |
entity_id |
integer | Required, indexed |
user_id |
foreign_key->User | Required, indexed |
body |
text | Required |
created_at |
datetime | Required |
updated_at |
datetime | Required |
KnownIssueLink
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
known_issue_id |
foreign_key->KnownIssue | Required, indexed |
entity_type |
enum(ClientReleaseAssessment,ReleaseTestCase,PublishedClientPackageItem,MasterReleaseItem) | Required |
entity_id |
integer | Required, indexed |
link_type |
enum(Blocks,Affects,RelatesTo) | Required |
notes |
text | Nullable |
created_at |
datetime | Required |
updated_at |
datetime | Required |
ReleaseHealthScoreSnapshot
| Field | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
client_tenant_id |
foreign_key->ClientTenant | Required, indexed |
release_cycle_id |
foreign_key->MasterReleaseCycle | Required, indexed |
score_date |
date | Required |
test_pass_rate |
decimal | Required, 0-100 |
open_blocker_ratio |
decimal | Required, 0-100 |
sign_off_progress |
decimal | Required, 0-100 |
dependency_resolution_rate |
decimal | Required, 0-100 |
overall_status |
enum(Blocked,AtRisk,Ready) | Required |
created_at |
datetime | Required |
Business rules
- BR-001: Tenant Isolation — All SELECT, UPDATE, DELETE queries on client workspaces MUST evaluate PostgreSQL RLS policy
tenant_id = current_setting('app.current_tenant_id'). - BR-002: Universal SAP release items cannot be marked as Auto-Excluded unless the client does not own the parent module.
- BR-003: Production Sign-off cannot transition to 'Approved' while any associated High/Critical Test Case remains in 'Failed' or 'Blocked' state without an approved override.
- BR-004: Master Item Snapshot Immutability — Once a Client Release Assessment is created, the Master Item Snapshot JSON is immutable. Updates to the master item only affect the Synced Master Version and Drift Status, never the snapshot.
- BR-005: Known Issue Severity Change Rule — Only Release Manager or Platform Administrator may change Known Issue severity. Every severity change must record the old value, new value, user ID, and timestamp in the immutable audit log.
- BR-006: Severity change on published items — A Release Manager or Platform Administrator may change severity on a Known Issue already linked to a published client package. The change applies to the current Known Issue record, is recorded in the immutable audit log, and triggers a client re-notification flag on the linked Published Client Package Item. No new publication snapshot is required.
- BR-007: Strict matching may produce false negatives if client landscape profile is incomplete or outdated; mitigation: periodic landscape verification and manual override with audit.
- BR-008: Client Re-Notification Flag lifecycle — A severity change on a linked Known Issue sets the Client Re-Notification Flag on the linked Published Client Package Item. The flag auto-clears when the client acknowledges the re-notification. If the client does not acknowledge, the flag remains set and continues to surface in client-facing views and digests until acknowledgment occurs.
- BR-009: Optimistic Concurrency — When saving test executions or assessment edits (via Web or Excel re-import), if
updated_aton DB > submittedbase_version_timestamp, reject write and open visual diff reconciliation. - BR-010: Excel Template Versioning — Imports reject files with an older or newer template version and show a clear error directing the user to download the current template.
- BR-011: Acknowledgment SLA — Client Acknowledgment must be completed within N business days of publication; default N=5, configurable per client. SLA breach triggers automatic escalation to Change Manager and Release Manager with real-time alert.
- BR-012: Seat Increase Approval — Seat-increase requests from client admins require single consulting admin approval with a configurable 48-hour business-hours timeout and automatic escalation to a platform administrator if not actioned.
Permissions
| Role | Capabilities |
|---|---|
| Platform Administrator | create:user; read:user; update:user; delete:user; create:role; read:role; update:role; delete:role; create:permission; read:permission; update:permission; delete:permission; read:audit_log; update:tenant_settings; change_severity:known_issue |
| Release Manager | create:master_release_cycle; read:master_release_cycle; update:master_release_cycle; create:master_release_item; read:master_release_item; update:master_release_item; import:master_release_item; read:client_release_assessment; update:client_release_assessment; assign:client_release_assessment; read:published_client_package_item; update:published_client_package_item; change_severity:known_issue; read:audit_log |
| Module Owner | read:master_release_item; read:client_release_assessment; update:client_release_assessment; create:comment; read:comment |
| Integration Lead | read:master_release_item; read:client_release_assessment; update:client_release_assessment; create:comment; read:comment |
| Change Manager | read:client_release_assessment; create:published_client_package_item; read:published_client_package_item; update:published_client_package_item; create:comment; read:comment |
| Support Analyst | read:master_release_item; read:client_release_assessment; create:known_issue; read:known_issue; update:known_issue; create:known_issue_link; read:known_issue_link; create:comment; read:comment |
| Tester | read:client_release_assessment; create:release_test_case; read:release_test_case; update:release_test_case; create:attachment; read:attachment |
| Client Administrator | read:published_client_package_item; update:published_client_package_item; create:comment; read:comment; create:user; read:user; update:user; delete:user; assign:client_role |
| Client Viewer | read:published_client_package_item; create:comment; read:comment |
Integrations
- SAP What's New Import: XLSX/CSV file upload with visual column mapping and header validation.
- ITSM Reference IDs: Structured reference IDs and URL deep links to ServiceNow/Jira tickets, with ticket status badges.
- SAP Support Portal Deep Links: URL deep links to SAP KBA/Issue records.
- S3 Object Storage: Tenant-scoped S3 bucket prefixes with 15-minute expiring pre-signed URLs for attachments.
- Transactional Email Service: Amazon SES primary with SendGrid fallback for email notifications and digests.
- Identity Providers: Client SSO via OIDC and SAML 2.0; internal consultants use email/password + MFA (TOTP).
Non-functional requirements
- NFR-001: Performance — The platform must support peak concurrent usage of 50+ consultants performing simultaneous bulk updates and imports during release crunch windows.
- NFR-002: Security/Privacy — The platform must implement PostgreSQL Row-Level Security (RLS) with tenant_id = current_setting('app.current_tenant_id') on all client workspace queries, and field-level security must restrict internal notes and client-visible information based on role.
- NFR-003: Scalability/Capacity — Full-text search uses PostgreSQL full-text search with trigram indexes for Phase 1; Elasticsearch/OpenSearch is deferred. Dashboard KPIs refresh near real-time with a maximum 5-minute lag and a manual refresh option.
- NFR-004: Localization — All user-facing timestamps are stored in UTC and displayed in the user's timezone and locale; deadlines whose calendar-day meaning matters carry an explicit timezone. Multi-language UI support with locale formats.
- NFR-005: Audit Retention — Audit log retention defaults to 7 years with archival to cold storage, configurable per consulting firm policy. Audit records move to cold storage automatically after a configurable hot-storage window, defaulting to 2 years hot and 5 years cold.
Edge cases
- User imports CSV with 50,000 rows — over 3,000 capacity: The system must process the import asynchronously, show progress, and reject rows exceeding the configured capacity with a clear error report.
- Client landscape profile is stale when a new release item is ingested: The system must flag the item as Manual Review Needed and show a fixed warning banner on the profile editor until re-confirmation is completed.
- Two consultants edit the same assessment offline in Excel and re-import simultaneously: The system must detect the conflict via optimistic concurrency and present a visual diff merge for resolution.
- A Known Issue severity changes after it is linked to a published client package: The system must set the Client Re-Notification Flag on the linked package and auto-clear it when the client acknowledges.
- A seat-increase request from a client admin is not actioned within 48 business hours: The system must escalate the request to a platform administrator automatically.
Out of scope
- Automated UI/API regression test execution against SAP tenants — the platform only manages test plans, cases, and sign-offs.
- Full ITSM replacement — the platform links to ServiceNow/Jira tickets via reference IDs and deep links only.
- SAP MDF XML or Provisioning deployment — the platform governs the decision to deploy and tracks checklist completion.
- Custom LMS video hosting — the platform links out to existing learning management systems or secure cloud storage.
- Multi-ERP support (Workday, Oracle Cloud HCM) in Phase 1 — scoped to SAP SuccessFactors only.
- Direct SAP tenant credential storage (S-User passwords, Provisioning credentials, API secret keys).
- Onboarding, Navigation, Empty & error states, Design system, Theming, Keyboard navigation, Contrast & typography, Screen reader support, SMS notifications, Push notifications, Policy-based access (ABAC), GDPR controls, CRUD screens, SLAs & escalations, Validation rules, Auto-derivations, Scheduled reports, Webhooks, Job queue, Scheduled jobs, Live updates (WebSockets/SSE), Collaboration & presence, Modular boundaries, API contracts, Caching strategy, Latency targets (p95/p99), DB optimization, Timeouts & retries, Graceful degradation, Logs, metrics, traces, SLOs & alerting, Automated testing (unit/integration/e2e), CI/CD pipelines, Feature flags & staged rollout.
Assumptions & open items
Assumed:
- The 48-hour seat-increase approval timeout is measured in business hours using the consulting firm's configured business calendar, with holidays defined per firm policy and timezone-aware calculation.
- The cold-storage diff retrieval for Release Managers and Platform Administrators is read-only and includes export capability (PDF or CSV) for compliance reviews.
- The summary banner's fixed-until-reconfirmed behavior applies per stale field group, and the banner does not block other profile editing actions.
- The business-hours clock for the seat-increase approval timeout pauses when the consulting firm's business calendar is closed and resumes on the next business day.
- The read-only cold-storage diff retrieval is available to Release Managers and Platform Administrators across all tenants.
Coverage notes
- Functional requirements: 24 (with acceptance criteria: 24)
- Open assumptions: 5 (unresolved/conflicted: 0)
- Entities in data model: 21
- Screens: 12, Roles: 9, Journeys: 2