Commit Graph

12 Commits

Author SHA1 Message Date
paulh 546ffd7dcf Remove erroneous ClientCertificate from CLMs1NamedCreds
JWT signing is handled by the DocusignJWT external credential. The
ClientCertificate parameter was adding unnecessary mTLS configuration
that DocuSign's API does not require. Now matches CLMuatNamedCreds.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 21:11:25 -04:00
paulh 8fb9df01db Retrieve AcctDemo_NamedCreds into source; add to manifest
SecuredEndpoint credential pointing to account-d.docusign.com, backed by
the DocusignJWT external credential. Referenced by DTC_CLM_Demo account
setting for ESignature_Auth_Named_Credential__c.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 21:01:23 -04:00
paulh 091b1870b6 Fix AcctDemo_NamedCreds note — exists in org, not yet retrieved to source
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 20:56:06 -04:00
paulh 148854ff1e Add retrieved/ and .codex to .gitignore; document manual credential setup
.gitignore:
- Add retrieved/ (org retrieve scratch metadata — not source of truth)
- Add .codex (Claude Code agent state)

SALESFORCE_SETUP.md:
- Add AcctDemo_NamedCreds to named credentials list with note that it must
  be created manually in the target org (not in source)
- Add "Manual post-deploy steps" section documenting AcctDemo_NamedCreds
  setup and the DocusignJWT external credential demo values (iss/sub/aud)
  that need to be replaced before use in a real org

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 20:51:03 -04:00
paulh 0ce516bbfc Fix LWC async bug, null guard, stale sample script; update manifest
LWC fixes:
- clmDocGenWorkbench: resetSelectionsToDefaults was a sync onclick handler
  calling async initializeDefaults without await — isBusy not set and errors
  silently dropped; made the method async and added await
- clmRequestPreview: loadPreview called from refreshAll (account/letter change
  handlers) without a recordId guard; a null appraiserCaseId would propagate
  to the Apex AuraHandledException; added early return with a user-facing message

manifest/package.xml:
- Was missing CLM_Account_Setting__mdt and CLM_Letter_Definition__mdt objects
  and all 17 custom metadata records
- Missing DocusignESignatureService and its test class
- Missing docusignEsignWorkbench and clmRequestPreview LWC components
- Missing NamedCredential section entirely (CLMs1*, CLMuat*, Esignature_Demo)
- Missing CLM Account Setting and Letter Definition layouts

scripts/apex/createSampleAppraiserCase.apex:
- Rewrote entirely; old version referenced the deleted Appraiser_Deficiency__c
  object, Sort_Order__c, Deficiency_Number__c as a string, and the deleted
  AppraiserCaseDocGenService class
- Now uses Appraiser_Case_Deficiency__c with correct field types
- Populates all appraiser identity/address fields added since original version
- Debug output uses AppraiserCasePayloadBuilder and CLMDocGenCallout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 20:50:57 -04:00
paulh fe337efe63 Update documentation to reflect current architecture
SALESFORCE_SETUP.md:
- Rewrite "What was added" to cover all current fields, metadata types,
  Apex classes, LWC components, named credentials, and permission sets
- Add DocusignESignatureServiceTest to the test run command

README.md:
- Replace absolute /home/paulh/... paths with relative ./FILE.md links

CLM_INTEGRATION.md:
- Pattern 1: replace wrong 3-arg trigger callout with correct Queueable pattern
  (triggers cannot make direct callouts)
- Pattern 2: mark LWC quick action as implemented (no longer a recommendation)
- Pattern 3: update REST resource to use CLMAdminService.generateDocument signature
- Payload/request/response: replace old pre-XML format with current
  documentxmlmergetasks JSON and XML structure
- Template design: replace Handlebars syntax with CLM XML merge description

NEXT_STEPS_DOCGEN.md:
- Mark Option B (LWC quick action) as complete
- Replace open-ended "what to confirm" with forward-looking guidance on
  extending to NOD, Education, and Intent to Remove letter types

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 20:36:29 -04:00
paulh 45814dc2d5 Add CLMAdminService, DocusignESignatureService, and fix code review issues
New classes:
- CLMAdminService: UI-facing orchestration — account/letter settings from
  metadata, document generation, task status polling, file attachment,
  folder browsing; persists all CLM results to Appraiser_Case__c
- DocusignESignatureService: eSignature API browsing (accounts, templates,
  envelopes, login info, user info)
- CLMAdminServiceTest, CLMDocGenCalloutTest, DocusignESignatureServiceTest

Updated classes (AppraiserCasePayloadBuilder, CLMDocGenCallout):
- CLMDocGenCallout: full XML merge callout stack, task status polling,
  document download, recursive document href discovery, account-based
  endpoint building; HTTP_TIMEOUT made public
- AppraiserCasePayloadBuilder: formatMailingAddress made public so
  CLMAdminService can reuse it rather than duplicating the logic

Code review bug fixes:
- Fix null fields emitting literal "null" in generated XML — add safeValue()
  helper; String.valueOf(null) returns "null" so escapeXml's null guard
  never fired
- Fix unguarded inline SOQL in getCaseContext and getDocGenPreview — throws
  QueryException for missing records instead of AuraHandledException; now
  uses list query with isEmpty guard
- Remove duplicate formatAddress in CLMAdminService; delegate to
  AppraiserCasePayloadBuilder.formatMailingAddress
- Replace hardcoded 30000 timeout in performGet with CLMDocGenCallout.HTTP_TIMEOUT
- Remove duplicate JSDoc on getTaskStatus

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 20:36:16 -04:00
paulh 62b78faf1a Add new Salesforce metadata for account-based CLM and eSignature integration
- Appraiser_Case__c: appraiser identity/address fields, FHA case number,
  CLM tracking fields (task ID/URL/status), generated document fields,
  attached file fields, Letter_Sent_Date__c
- Appraiser_Case_Deficiency__c: Reference__c field, blank-record validation rule
- CLM_Account_Setting__mdt and CLM_Letter_Definition__mdt: per-account CLM
  and eSignature configuration with seeded records for DTC_CLM_Demo,
  DTC_IAM_Enterprise, DTC_HUD_Demo
- CLM_Environment_Setting__mdt: UAT/S1 environment defaults
- Named credentials: CLMs1NamedCreds, CLMs1Download, Esignature_Demo_NamedCreds
- LWC: clmDocGenWorkbench, docusignEsignWorkbench, clmRequestPreview
- Layouts, record page, permission sets, quick action, app, tabs, manifest

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 20:35:59 -04:00
paulh 703fb0c0ba Remove legacy Appraiser_Deficiency__c object and AppraiserCaseDocGenService
Replaced by Appraiser_Case_Deficiency__c (master-detail, with Reference__c
field) and the XML-merge-based CLMDocGenCallout/CLMAdminService stack.
Also removes placeholder named credentials CLMNamedCred and CLMuatDownloadNamedCreds
superseded by the account-specific credential set.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 20:35:42 -04:00
paulh e058dedb82 Create Appraiser Case custom record and DocGen service 2026-04-05 14:31:51 -04:00
paulh 1e532029fa Add Appraiser Review Letter template and XML merge data 2026-04-05 14:22:57 -04:00
paulh 63b1bfd758 Initial commit: Salesforce Appraiser Review Letter with DocuSign CLM integration 2026-04-03 12:13:59 -04:00