Skip to main content

Phase 2 Scope vs. Identified Gaps -- Coverage Analysis

Analysis Date: March 26, 2026 Source Documents:

  • Phase 2 SOW: PHASE2-SCOPE-v6.md (Sataware, 03/26/2026)
  • Delivery Mapping: SDD-DELIVERY-MAPPING.md (March 24, 2026)
  • Gap Analysis: memory cms_faq_gap_analysis.md (March 19, 2026)

Summary

The Phase 2 SOW addresses the table extension and field gaps -- the most visible shortcoming from Phase 1. It does not address the majority of the SDD's undelivered commitments, including incremental sync, deactivation logic, validation enforcement, page extensions for the newly extended tables, or the structural and security issues found in the delivered code.

CategoryTotal Gaps IdentifiedAddressed by Phase 2Still Missing
Table extensions (new)3 tables missing extensions3 (Symptom, Fault, Resolution)0
Fields on extended tables19 fields missing19 fields covered0
Incremental syncNot deliveredNot addressed1
Deactivation logicNot deliveredNot addressed1
Page extensions (UI filtering)3+ surfaces missingNot addressed3+
Validation (reject inactive)Not deliveredNot addressed1
Fault Area/Symptom RelationshipTable not syncedNot addressed1
Delete-and-reinsert patternViolates SDDNot addressed1
Double execution bugOnAfterInsert fires sync twiceNot addressed1
Transaction safetyNo rollback/partial update protectionNot addressed1
Service Item Worksheet filterCommented outNot addressed1
DocumentationNot deliveredMentioned (Section 4 line item)Partially
Security (hardcoded creds)2 issuesNot addressed2
TelemetryMissing from app.jsonNot addressed1

Bottom line: Phase 2 closes the table extension gap (the "1 of 20 fields" / "1 of 4 table extensions" problem). Everything else from the SDD commitment scorecard remains open.


Detailed Line-by-Line Mapping

What Phase 2 DOES Cover

These items from the SDD delivery mapping will be addressed if Phase 2 is delivered as scoped:

SDD Commitment #CommitmentCurrent StatusPhase 2 Impact
1Synchronize fault-related master data from FAQ API into BCPartial (4 of 6 tables)Improves -- fields added to all 4 master tables; sync logic updated to populate them. Still does not address Fault Area/Symptom Relationship (table 50113).
2Ensure BC uses only valid and active codes for new transactionsPartial (2 of 6 tables have Status)Improves -- Status and Active fields added to all 4 tables. But Phase 2 does not include page extensions to filter these tables in the UI, so the fields exist but may not be enforced.
13Inactive records retained for historical referencePartial (2 of 6)Improves -- all 4 master tables will have Status/Active fields to support inactive marking.
14Only active values available for new transactionsPartial (2 of 6)Partially improves -- fields exist, but no page extensions are in scope to filter them.
17All existing fault-related records will be marked Inactive (full rebuild)Partial (2 of 6)Improves -- rebuild can now mark records on all 4 tables. Depends on sync logic updates being implemented correctly.
19FAQ API identifiers persisted as primary referenceNo (API IDs used as BC Code)Addresses -- FAQ ID field added as a separate column on all 4 tables.
27Maintain sync state across executionsPartial (log only, no per-record state)Improves -- Created in FAQ and Last Modified in FAQ fields enable per-record sync state.
34Inactive handling ensures backward compatibilityPartial (2 of 6)Improves -- all 4 tables gain inactive capability.

What Phase 2 Does NOT Cover

These gaps from the SDD delivery mapping remain completely unaddressed:

SDD #CommitmentGapWhy It Matters
4Introduce inactive handling without deleting existing recordsDelete-and-reinsert pattern (codeunit 65500, lines 209-212) still presentDeleting records changes SystemId, breaking external references. This is a data integrity violation that persists regardless of Phase 2.
5Provide controlled sync mechanisms as defined in the SDDOnly full sync existsThe SDD defines three mechanisms (full rebuild, incremental, notifications). Incremental still missing.
8Automated incremental synchronization capabilityNo incremental syncEvery execution fetches the complete dataset. No "last modified" parameter, no change detection, no differential processing. Phase 2 adds the Last Modified in FAQ field which enables incremental sync, but does not implement it.
11Supporting technical documentationNot deliveredPhase 2 includes a "Documentation Update" line item (2-3 hrs), but the acceptance criteria only require "source code committed to repository" -- no specific documentation deliverables are defined.
12No deletion of records once used in posted transactionsDelete(true) on line 210The delete-and-reinsert pattern is not in Phase 2 scope.
15Synchronization logic must be safe to re-runDelete-reinsert + double executionNeither issue is addressed. The OnAfterInsert trigger (TableExt 50001, line 14) that causes every scheduled sync to run twice is not in scope.
23Detection of changes between API data and BC cacheNo change detectionPhase 2 adds the timestamp fields that could support change detection, but the actual detection logic is not in scope.
26Mark records Inactive when removed from the APINo deactivation logicIf a code exists in BC but is absent from the next API response, nothing happens. The code to compare API results against BC records and mark missing ones as Inactive does not exist and is not in Phase 2 scope.
31Summary of records marked Inactive (in notification)Deactivation logic prerequisite missingCannot summarize deactivations that don't happen.
32Only Active values available for selection (UI enforcement)No page extensions for Symptom Code, Fault Code, Resolution CodePhase 2 adds the fields but does not include page extensions to filter lookups on these tables. Users will still see all records.
35Partial updates are avoidedNo transaction wrappingThe sync loop processes records sequentially with no rollback. A failure mid-sync leaves a partially updated dataset.
36Repeat executions do not create duplicate or invalid dataDelete-reinsert changes SystemIdStill present.
37Final source code delivery with supporting documentationDocumentation not deliveredPhase 2's documentation line item is vague and not in the acceptance criteria.

Structural & Security Issues Not in Phase 2 Scope

These were identified in the gap analysis and code review but are not mentioned in the Phase 2 SOW:

IssueSeverityStatus
Hardcoded API credentials (username=BWUFAQ&password=BWUFAQ123 in codeunit)Critical / SecurityNot addressed
Hardcoded admin password (admin / 12345 in AdminPermission page)Critical / SecurityNot addressed
Double sync execution (OnAfterInsert on Job Queue Log Entry fires sync twice)High / BugNot addressed
Delete-and-reinsert pattern (breaks SystemId referential integrity)High / Data IntegrityNot addressed
Service Item Worksheet filter commented out (PageExt 50005 line 44)Medium / FunctionalNot addressed
No page extensions for Symptom Code, Fault Code, Resolution Code lookupsMedium / FunctionalNot addressed
No PSI page extensions for any fault-related lookupsMedium / FunctionalNot addressed
No validation triggers (OnValidate to reject inactive codes)Medium / FunctionalNot addressed
No telemetry (applicationInsightsConnectionString missing from app.json)Medium / OperationalNot addressed
FAQ Management page mostly commented out (700+ lines dead code)Low / Code QualityNot addressed
Inconsistent Status casing ("true"/"false" vs "True"/"False" across objects)Low / Code QualityNot addressed
No error handling in ProcessStandardFormatResponseMedium / ReliabilityNot addressed
Fault Area/Symptom Relationship (table 50113) completely absentMedium / FunctionalNot addressed

Assessment

Phase 2 is a necessary but narrow step. It closes the most quantifiable gap from Phase 1 -- the missing table extensions and fields -- and adds the infrastructure (FAQ ID, timestamps) that would make future features like incremental sync and change detection possible.

However, of the 37 SDD commitments scored in the delivery mapping:

VerdictPhase 1After Phase 2 (projected)
Yes -- fully delivered13 (35%)13 (35%)
Partial -- improved but not complete13 (35%)19 (51%) -- several "No" items move to "Partial"
No -- not delivered11 (30%)5 (14%)

Phase 2 moves ~6 items from "No" or "Partial" toward "Partial" or closer to "Yes," but zero "No" items become "Yes" because the SOW only adds fields -- it does not implement the logic that uses them (incremental sync, deactivation, UI filtering, validation).

Items That Should Be in Phase 2 But Are Not

If the goal is to deliver a working extension that meets the SDD, these items should be discussed with Sataware as additions to Phase 2 or as a defined Phase 3:

  1. Page extensions for the 3 newly extended tables -- without these, adding Status/Active fields has no user-facing effect. Users still see all records. Estimated effort: 3-4 hrs per table (9-12 hrs total).

  2. Deactivation logic -- the ability to mark records Inactive when they're absent from the API response. This is the core value proposition of the sync. Without it, the Status field is only ever set to Active. Estimated effort: 4-8 hrs.

  3. Fix the delete-and-reinsert pattern -- replace Delete(true) + Insert(true) with Modify(true) on Fault/Resol. Relationship records. This is a data integrity fix, not a feature. Estimated effort: 1-2 hrs.

  4. Fix the double execution bug -- remove or guard the OnAfterInsert subscriber on Job Queue Log Entry that causes every scheduled sync to run twice. Estimated effort: 1 hr.

  5. Remove hardcoded credentials -- move API credentials and admin password to BC's Isolated Storage or the API Setup table. Estimated effort: 2-3 hrs.

  6. Uncomment the Service Item Worksheet filter (PageExt 50005 line 44) -- or implement it correctly. Estimated effort: < 1 hr.

Total additional effort for items 1-6: ~17-26 hrs at $28/hr = $476-$728.


Recommendation

Phase 2 as scoped is worth approximately $700-$924 for table extension work that is straightforward and well-defined. The acceptance criteria are clear and verifiable. Approve the scope as-is, but before confirming:

  1. Clarify "Integration & sync logic updates" (6-8 hrs) -- the SOW says this covers "support new fields across all tables." Does this include populating the new fields (FAQ ID, Created in FAQ, Last Modified in FAQ) from the API response during sync? If not, the fields will exist but be permanently empty. Get written confirmation of what "support" means.

  2. Flag the items above as Phase 3 -- send Ashok a list of the remaining gaps and ask for a Phase 3 estimate that covers deactivation logic, page extensions, and bug fixes. This keeps Phase 2 on track while ensuring the remaining work is scoped and estimated before the next invoice.

  3. Do not accept Phase 2 as closing the SDD -- the SDD commitment scorecard should be updated after Phase 2 delivery, but it will still show material gaps. Phase 2 is remediation of Phase 1 shortfalls, not new work.