Disclosure Document Gaps
Issue: OCR System Fails to Detect Missing or Incomplete Required Disclosures
Frequency: Common
Symptoms
- Required disclosures missing from file
- Disclosure versions outdated
- State-specific disclosures absent
- Loan-type specific disclosures missing
- Receipt acknowledgments not present
- Disclosure content incomplete
Root Cause Mortgage transactions require numerous federal and state disclosures depending on loan type, property type, and state. OCR processes documents individually without validating completeness against disclosure requirements. Missing disclosures create compliance violations, rescission risk, and audit findings.
Example
Scenario 1: Missing ARM disclosure
Loan type: 5/1 ARM
Required: ARM Program Disclosure
File contains:
- Loan Estimate ✓
- Closing Disclosure ✓
- Right to Cancel ✓
Missing: ARM Program Disclosure
← Required for all ARM loans
← Explains rate adjustment terms
← TILA violation
---
Scenario 2: State disclosure gap
Property state: Texas
Required Texas disclosures:
- Texas Section 50(a)(6) Notice
- Right of Rescission (Texas specific)
- 12-day waiting period acknowledgment
File contains: Federal disclosures only
← State-specific requirements not met
← Texas has unique equity loan rules
← Potential loan invalidity
---
Scenario 3: Outdated disclosure version
Closing Disclosure present:
- Version date: 2019
- Current version: 2023
← CFPB updated disclosure requirements
← Old form missing new required fields
← Form version validation missing
---
Scenario 4: Missing receipt acknowledgment
Disclosures delivered:
- Loan Estimate (delivered March 1)
- Intent to Proceed (received March 3)
Missing:
- Borrower signature acknowledging LE receipt
- Delivery method documentation
← Can't prove disclosure was received
← Timing compliance uncertain
---
Disclosure gap failures:
Files with disclosure issues: 15%
Issue types:
Missing required disclosure: 35%
State-specific gaps: 25%
Version/form outdated: 20%
Receipt acknowledgment missing: 15%
Incomplete disclosure: 5%
Impact:
Compliance violations: 10%
Audit findings: 12%
Rescission risk: 5%
Key Statistics From Compliance Audit Research (2026):
- Missing disclosure findings: 12-18%
- State disclosure gaps: 20-25%
- Version compliance issues: 8-12%
- Rescission claims (disclosure): 2-3%
Required Disclosures by Loan Type
| Loan Type | Required Disclosures |
|---|---|
| All | LE, CD, Right to Cancel (refi) |
| ARM | ARM Disclosure, CHARM Booklet |
| HELOC | HELOC Disclosure |
| Reverse | HECM counseling, TIL |
| FHA | FHA disclosures, amendatory clause |
| VA | VA disclosures, funding fee |
Contributing Factors
- No disclosure manifest validation
- Loan-type rules not encoded
- State requirements not tracked
- Version control absent
- Receipt tracking missing
Mitigation Strategies
Prevention
- Disclosure manifest: Required list by loan type
- State requirements: Jurisdiction-specific checks
- Version validation: Current form verification
- Receipt tracking: Acknowledgment verification
- Content validation: Required sections present
Implementation
class DisclosureValidator:
"""Validate required disclosures are present"""
FEDERAL_DISCLOSURES = [
"loan_estimate",
"closing_disclosure",
"servicing_disclosure"
]
LOAN_TYPE_DISCLOSURES = {
"arm": ["arm_program_disclosure", "charm_booklet"],
"heloc": ["heloc_disclosure", "heloc_handbook"],
"reverse": ["hecm_counseling", "hecm_disclosure"],
"fha": ["fha_amendatory", "fha_informed_consumer"],
"va": ["va_funding_fee", "va_loan_summary"]
}
STATE_DISCLOSURES = {
"TX": ["tx_50a6_notice", "tx_equity_disclosure"],
"CA": ["ca_mlds", "ca_foreclosure_notice"],
"NY": ["ny_subprime_disclosure"],
"FL": ["fl_nonprime_disclosure"]
}
REFI_DISCLOSURES = ["right_to_cancel"]
def get_required_disclosures(self,
loan_type: str,
property_state: str,
is_refinance: bool) -> list:
"""Get list of required disclosures"""
required = self.FEDERAL_DISCLOSURES.copy()
# Loan-type specific
if loan_type in self.LOAN_TYPE_DISCLOSURES:
required.extend(self.LOAN_TYPE_DISCLOSURES[loan_type])
# State-specific
if property_state in self.STATE_DISCLOSURES:
required.extend(self.STATE_DISCLOSURES[property_state])
# Refinance disclosures
if is_refinance:
required.extend(self.REFI_DISCLOSURES)
return required
def validate_disclosures(self,
documents: list,
loan_type: str,
property_state: str,
is_refinance: bool) -> dict:
"""Validate all required disclosures present"""
required = self.get_required_disclosures(
loan_type, property_state, is_refinance
)
present = [d["type"] for d in documents]
missing = [r for r in required if r not in present]
return {
"complete": len(missing) == 0,
"required": required,
"present": present,
"missing": missing,
"compliance_risk": "high" if missing else "none"
}
def validate_disclosure_version(self,
disclosure_type: str,
disclosure_date: str) -> dict:
"""Validate disclosure version is current"""
current_versions = {
"closing_disclosure": "2023-10-01",
"loan_estimate": "2023-10-01",
"arm_program_disclosure": "2021-01-01"
}
required_version = current_versions.get(disclosure_type)
if required_version and disclosure_date < required_version:
return {
"valid": False,
"error": "outdated_version",
"document_version": disclosure_date,
"current_version": required_version
}
return {"valid": True}
def validate_receipt(self,
disclosure: dict,
receipt: dict) -> dict:
"""Validate disclosure receipt is documented"""
if not receipt:
return {
"valid": False,
"error": "missing_receipt",
"disclosure": disclosure["type"],
"action": "obtain_signed_acknowledgment"
}
if receipt["date"] < disclosure["delivery_date"]:
return {
"valid": False,
"error": "receipt_before_delivery",
"delivery": disclosure["delivery_date"],
"receipt": receipt["date"]
}
return {"valid": True}
References
- CFPB Disclosure Requirements - Reg Z
- State Disclosure Matrix - ALTA state requirements
- FHA Handbook - FHA disclosures
- VA Lender Handbook - VA requirements