For digital therapy to achieve widespread adoption and accessibility, integration with insurance reimbursement is essential. The WIA-MENTAL-001 standard specifies automated claims generation and submission workflows compatible with major insurance carriers.
| CPT Code | Description | Time Requirement | Typical Reimbursement |
|---|---|---|---|
| 90832 | Psychotherapy, 30 minutes | 16-37 minutes | $65-$95 |
| 90834 | Psychotherapy, 45 minutes | 38-52 minutes | $90-$130 |
| 90837 | Psychotherapy, 60 minutes | 53+ minutes | $120-$175 |
| 96127 | Brief emotional/behavioral assessment | Per assessment | $10-$25 |
| 99457 | Remote physiologic monitoring, first 20 min | 20 minutes | $50-$70 |
| 99458 | Remote monitoring, each additional 20 min | 20 minutes | $40-$60 |
| 99091 | Collection/interpretation of patient data | 30+ minutes/month | $55-$75 |
class InsuranceClaimsEngine {
private clearinghouseAPI: ClearinghouseAPI;
private codeMapper: CPTCodeMapper;
async generateClaim(
session: TherapySession,
patient: Patient,
provider: Provider
): Promise {
// 1. Determine appropriate CPT code
const cptCode = this.determineCPTCode(session);
// 2. Verify coverage and eligibility
const eligibility = await this.verifyEligibility(
patient.insuranceInfo
);
if (!eligibility.eligible) {
throw new Error(`Patient not eligible: ${eligibility.reason}`);
}
// 3. Build CMS-1500 claim form (electronic)
const claim = this.buildClaim({
patient: {
name: patient.name,
dob: patient.dob,
memberId: patient.insuranceInfo.memberId,
groupNumber: patient.insuranceInfo.groupNumber
},
provider: {
npi: provider.npi,
name: provider.name,
taxId: provider.taxId,
address: provider.address
},
service: {
cptCode: cptCode.code,
modifier: cptCode.modifier,
diagnosisCode: this.getICD10Code(session.diagnosis),
serviceDate: session.date,
placeOfService: '02', // Telehealth
chargeAmount: cptCode.standardCharge,
units: 1
},
insurance: {
payerId: eligibility.payerId,
planName: patient.insuranceInfo.planName,
relationshipToPrimary: 'self'
}
});
// 4. Validate claim
const validation = this.validateClaim(claim);
if (!validation.valid) {
throw new Error(`Invalid claim: ${validation.errors.join(', ')}`);
}
// 5. Submit to clearinghouse
const submission = await this.submitClaim(claim);
// 6. Track claim status
await this.trackClaim(submission.claimId);
return claim;
}
private determineCPTCode(session: TherapySession): CPTCode {
// Map session to appropriate CPT code
const duration = session.durationMinutes;
if (session.type === 'assessment') {
return { code: '96127', modifier: null };
}
// Psychotherapy codes based on duration
if (duration >= 16 && duration <= 37) {
return { code: '90832', modifier: 'GT' }; // GT = via telehealth
} else if (duration >= 38 && duration <= 52) {
return { code: '90834', modifier: 'GT' };
} else if (duration >= 53) {
return { code: '90837', modifier: 'GT' };
} else {
throw new Error(`Session duration ${duration} min does not meet CPT requirements`);
}
}
private async verifyEligibility(
insurance: InsuranceInfo
): Promise {
// Real-time eligibility check via ANSI X12 270/271
const request = {
memberId: insurance.memberId,
dob: insurance.dob,
serviceType: '30', // Behavioral health
payerId: insurance.payerId
};
const response = await this.clearinghouseAPI.checkEligibility(request);
return {
eligible: response.active && response.coversBehavioralHealth,
payerId: response.payerId,
planName: response.planName,
copay: response.copay,
deductible: response.deductible,
deductibleMet: response.deductibleMet,
outOfPocketMax: response.outOfPocketMax,
reason: response.ineligibilityReason
};
}
async trackClaimStatus(claimId: string): Promise {
// Check claim status via ANSI X12 276/277
const status = await this.clearinghouseAPI.getClaimStatus(claimId);
return {
claimId,
status: status.code, // 1=Accepted, 2=Rejected, 3=Pending, etc.
paymentAmount: status.paymentAmount,
patientResponsibility: status.patientResponsibility,
adjustmentReasons: status.adjustmentReasons,
eobDate: status.eobDate
};
}
}
Effective revenue cycle management ensures financial sustainability while maintaining focus on patient care. Automation of billing, collections, and reporting reduces administrative burden.
Healthcare organizations require comprehensive analytics to demonstrate value, optimize operations, and improve outcomes. Enterprise dashboards provide insights across clinical, operational, and financial dimensions.
| Category | Metric | Target/Benchmark | Business Impact |
|---|---|---|---|
| Clinical Outcomes | PHQ-9 score reduction (mean) | ≥ 30% | Treatment efficacy demonstration |
| Remission rate (PHQ-9 < 5) | ≥ 40% | Clinical success metric | |
| Treatment completion rate | ≥ 70% | Engagement effectiveness | |
| Time to first response | ≤ 4 weeks | Early improvement predictor | |
| Operational | Daily active users (DAU) | 60% of enrolled | Platform stickiness |
| Average session duration | 40+ minutes | Engagement depth | |
| Therapist caseload capacity | 2-3x traditional | Scalability benefit | |
| System uptime | 99.9% | Reliability | |
| Financial | Days in A/R | < 35 days | Cash flow health |
| Collection rate | ≥ 95% | Revenue realization | |
| Cost per patient per month | $50-$150 | Profitability | |
| First-pass claim acceptance | ≥ 98% | Billing efficiency |
class EnterpriseAnalyticsDashboard {
private metricsEngine: MetricsEngine;
private dataWarehouse: DataWarehouse;
async generateExecutiveDashboard(
organizationId: string,
dateRange: DateRange
): Promise {
// Parallel data aggregation
const [clinical, operational, financial] = await Promise.all([
this.getClinicalMetrics(organizationId, dateRange),
this.getOperationalMetrics(organizationId, dateRange),
this.getFinancialMetrics(organizationId, dateRange)
]);
return {
summary: {
totalPatients: operational.totalPatients,
activePatients: operational.activePatients,
completedSessions: operational.totalSessions,
revenue: financial.totalRevenue
},
clinical: {
outcomeMetrics: {
phq9Reduction: clinical.averagePHQ9Reduction,
remissionRate: clinical.remissionRate,
completionRate: clinical.completionRate,
timeToResponse: clinical.avgTimeToResponse
},
comparisonToBaseline: clinical.baselineComparison,
trendData: clinical.monthlyTrends
},
operational: {
engagement: {
dau: operational.dailyActiveUsers,
sessionDuration: operational.avgSessionDuration,
retentionRate: operational.retentionRate
},
capacity: {
therapistUtilization: operational.therapistUtilization,
averageCaseload: operational.avgCaseload,
maxCapacity: operational.maxCapacity
},
performance: {
uptime: operational.systemUptime,
responseTime: operational.avgResponseTime,
errorRate: operational.errorRate
}
},
financial: {
revenue: {
total: financial.totalRevenue,
byPayerType: financial.revenueByPayer,
trend: financial.monthlyRevenueTrend
},
receivables: {
daysInAR: financial.daysInAR,
collectionRate: financial.collectionRate,
agingBuckets: financial.arAgingBuckets
},
efficiency: {
costPerPatient: financial.costPerPatient,
reimbursementRate: financial.avgReimbursement,
profitMargin: financial.profitMargin
}
}
};
}
private async getClinicalMetrics(
orgId: string,
dateRange: DateRange
): Promise {
const query = `
WITH baseline AS (
SELECT
patient_id,
MIN(total_score) as baseline_score,
MIN(timestamp) as baseline_date
FROM clinical_assessments
WHERE assessment_type = 'PHQ-9'
AND organization_id = $1
GROUP BY patient_id
),
followup AS (
SELECT
patient_id,
total_score as followup_score,
timestamp as followup_date
FROM clinical_assessments
WHERE assessment_type = 'PHQ-9'
AND organization_id = $1
AND timestamp BETWEEN $2 AND $3
)
SELECT
COUNT(*) as total_patients,
AVG((b.baseline_score - f.followup_score) / b.baseline_score * 100) as avg_reduction,
SUM(CASE WHEN f.followup_score < 5 THEN 1 ELSE 0 END)::FLOAT / COUNT(*) as remission_rate,
AVG(EXTRACT(EPOCH FROM (f.followup_date - b.baseline_date)) / 604800) as avg_weeks_to_response
FROM baseline b
JOIN followup f ON b.patient_id = f.patient_id
`;
const result = await this.dataWarehouse.query(query, [
orgId,
dateRange.start,
dateRange.end
]);
return result.rows[0];
}
}
The WIA-MENTAL-001 standard continues to evolve. Future enhancements will expand capabilities while maintaining core principles of evidence-based care, patient privacy, and accessibility.
| Technology | Potential Application | Timeframe | Readiness Level |
|---|---|---|---|
| Virtual Reality (VR) | Exposure therapy for phobias, PTSD treatment | 1-2 years | Early adoption |
| Voice Biomarkers | Depression detection from speech patterns | 2-3 years | Research phase |
| Digital Phenotyping | Passive symptom monitoring via smartphone sensors | 1-2 years | Pilot deployment |
| Brain-Computer Interfaces | Neurofeedback for mood regulation | 5+ years | Experimental |
| Blockchain | Patient-controlled health data portability | 3-5 years | Proof of concept |
Thank you for reading the WIA-MENTAL-001 Digital Therapy Standard guide. This standard represents our commitment to making quality mental healthcare accessible to all through technology.
弘益人間 (Hongik Ingan) - May this work benefit all humanity.
© 2025 SmileStory Inc. / WIA
한국 의료·바이오 인프라 — 보건복지부(MOHW)·식품의약품안전처(MFDS, 식약처)·국민건강보험공단(NHIS)·건강보험심사평가원(HIRA)·통계청(KOSTAT)·국립암센터·국립중앙의료원·국립재활원·6대 병원 (서울대·삼성·아산·세브란스·분당서울대·고려대)·KRIBB(한국생명공학연구원)·KRICT(한국화학연구원)·KFRI(한국식품연구원)·KIST·KAIST·POSTECH 협력. 「의료법」·「약사법」·「생명윤리 및 안전에 관한 법률」·「의료기기법」·「개인정보 보호법」·「국민건강보험법」·「응급의료에 관한 법률」 적용. KS X HL7 FHIR R5·KS X ISO/IEC 25237 (의료 비식별)·KCD-8 (한국표준질병분류)·SNOMED CT·LOINC·ICD-11·OMOP CDM v5.4·CDISC SDTM/ADaM·DICOM·KS X (한국 의료정보 표준) 한국 프로파일이 적용된다.