Dashboard Features: - 8 navigation sections: Overview, Outcomes, Poor CX, FCR, Churn, Agent, Call Explorer, Export - Beyond Brand Identity styling (colors #6D84E3, Outfit font) - RCA Sankey diagram (Driver → Outcome → Churn Risk flow) - Correlation heatmaps (driver co-occurrence, driver-outcome) - Outcome Deep Dive (root causes, correlation, duration analysis) - Export functionality (Excel, HTML, JSON) Blueprint Compliance: - FCR: 4 categories (Primera Llamada/Rellamada × Sin/Con Riesgo de Fuga) - Churn: Binary view (Sin Riesgo de Fuga / En Riesgo de Fuga) - Agent: Talento Para Replicar / Oportunidades de Mejora - Fixed FCR rate calculation (only FIRST_CALL counts as success) Technical: - Streamlit + Plotly for interactive visualizations - Light theme configuration (.streamlit/config.toml) - Fixed Plotly colorbar titlefont deprecation Documentation: - Updated PROJECT_CONTEXT.md, TODO.md, CHANGELOG.md - Added 4 new technical decisions (TD-014 to TD-017) - Created TROUBLESHOOTING.md with 10 common issues Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
101 lines
2.5 KiB
JSON
101 lines
2.5 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "CallAnalysisResponse",
|
|
"description": "LLM response schema for call analysis",
|
|
"type": "object",
|
|
"required": ["outcome"],
|
|
"properties": {
|
|
"outcome": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SALE_COMPLETED",
|
|
"SALE_LOST",
|
|
"CANCELLATION_SAVED",
|
|
"CANCELLATION_COMPLETED",
|
|
"INQUIRY_RESOLVED",
|
|
"INQUIRY_UNRESOLVED",
|
|
"COMPLAINT_RESOLVED",
|
|
"COMPLAINT_UNRESOLVED",
|
|
"TRANSFER_OUT",
|
|
"CALLBACK_SCHEDULED",
|
|
"UNKNOWN"
|
|
],
|
|
"description": "Final outcome of the call"
|
|
},
|
|
"lost_sales_drivers": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/RCALabel"
|
|
},
|
|
"default": []
|
|
},
|
|
"poor_cx_drivers": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/RCALabel"
|
|
},
|
|
"default": []
|
|
}
|
|
},
|
|
"definitions": {
|
|
"EvidenceSpan": {
|
|
"type": "object",
|
|
"required": ["text", "start_time", "end_time"],
|
|
"properties": {
|
|
"text": {
|
|
"type": "string",
|
|
"maxLength": 500,
|
|
"description": "Exact quoted text from transcript"
|
|
},
|
|
"start_time": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Start time in seconds"
|
|
},
|
|
"end_time": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "End time in seconds"
|
|
},
|
|
"speaker": {
|
|
"type": "string",
|
|
"description": "Speaker identifier"
|
|
}
|
|
}
|
|
},
|
|
"RCALabel": {
|
|
"type": "object",
|
|
"required": ["driver_code", "confidence", "evidence_spans"],
|
|
"properties": {
|
|
"driver_code": {
|
|
"type": "string",
|
|
"description": "Driver code from taxonomy"
|
|
},
|
|
"confidence": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1,
|
|
"description": "Confidence score (0-1)"
|
|
},
|
|
"evidence_spans": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/EvidenceSpan"
|
|
},
|
|
"minItems": 1,
|
|
"description": "Supporting evidence (minimum 1 required)"
|
|
},
|
|
"reasoning": {
|
|
"type": "string",
|
|
"maxLength": 500,
|
|
"description": "Brief reasoning for classification"
|
|
},
|
|
"proposed_label": {
|
|
"type": "string",
|
|
"description": "For OTHER_EMERGENT: proposed new label"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|