Adds EnvelopeCreateResult inner DTO and createEnvelope(Id, String, String)
to DocusignESignatureService. Option A (template-based): POSTs to
/v2.1/accounts/{accountId}/envelopes with templateId, templateRoles
(Signer), and status=sent. Guards blank templateId and blank appraiser
email; catches all exceptions and wraps in result. Named credential
sourced from CLM_Account_Setting__mdt per ADR-002.
Agent: claude-sonnet-4-6
Tests: 8/8 passing | N/A (no new test methods — Task 3 covers test coverage)
Tests-Added: 0
TypeScript: N/A (Apex project)
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>
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>
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>
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>
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>