feat: Add Render.com deployment support with production data
Render Configuration: - render.yaml for declarative deployment - requirements-dashboard.txt (lightweight deps for cloud) - Updated .streamlit/config.toml for production - Updated app.py to auto-detect production vs local data Production Data: - Added data/production/test-07/ with 30 real call analyses - Updated .gitignore to allow data/production/ Documentation: - Added Render.com section to DEPLOYMENT.md with step-by-step guide Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
411
data/production/test-07/rca_tree.json
Normal file
411
data/production/test-07/rca_tree.json
Normal file
@@ -0,0 +1,411 @@
|
||||
{
|
||||
"batch_id": "test-07",
|
||||
"created_at": "2026-01-19T13:47:13.154828",
|
||||
"summary": {
|
||||
"total_calls": 30,
|
||||
"calls_with_lost_sales": 7,
|
||||
"calls_with_poor_cx": 27,
|
||||
"calls_with_both": 6,
|
||||
"lost_sales_rate": 0.23333333333333334,
|
||||
"poor_cx_rate": 0.9,
|
||||
"calls_first_call": 23,
|
||||
"calls_repeat_call": 2,
|
||||
"repeat_call_rate": 0.08,
|
||||
"calls_at_risk": 19,
|
||||
"churn_risk_rate": 0.8636363636363636,
|
||||
"agents_good_performer": 2,
|
||||
"agents_needs_improvement": 20
|
||||
},
|
||||
"top_drivers": {
|
||||
"lost_sales": [
|
||||
"PRICE_TOO_HIGH",
|
||||
"COMPETITOR_PREFERENCE",
|
||||
"NO_RETENTION_ATTEMPT",
|
||||
"NO_INTEREST_IN_UPGRADE",
|
||||
"DISTRUST_OF_OFFERS"
|
||||
],
|
||||
"poor_cx": [
|
||||
"BILLING_NOT_CLARIFIED",
|
||||
"NOT_LISTENING",
|
||||
"LOW_EMPATHY",
|
||||
"ISSUE_NOT_RESOLVED",
|
||||
"LONG_SILENCE"
|
||||
],
|
||||
"fcr_failure": [],
|
||||
"churn_risk": []
|
||||
},
|
||||
"lost_sales_tree": [
|
||||
{
|
||||
"driver_code": "PRICE_TOO_HIGH",
|
||||
"category": "lost_sales",
|
||||
"frequency": {
|
||||
"total_occurrences": 4,
|
||||
"calls_affected": 4,
|
||||
"occurrence_rate": 0.13333333333333333,
|
||||
"call_rate": 0.13333333333333333
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 77.5,
|
||||
"impact_level": "critical"
|
||||
},
|
||||
"priority_rank": 1,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"tengo un pago bastante alto en los kilovatios, he pagado 0.15 por kilovatio.",
|
||||
"Es que me están estafando.",
|
||||
"A partir de mil kilovatios de potencia se generó un cobro de 50 a 60 euros aproximadamente"
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "COMPETITOR_PREFERENCE",
|
||||
"category": "lost_sales",
|
||||
"frequency": {
|
||||
"total_occurrences": 3,
|
||||
"calls_affected": 3,
|
||||
"occurrence_rate": 0.1,
|
||||
"call_rate": 0.1
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 75.5,
|
||||
"impact_level": "critical"
|
||||
},
|
||||
"priority_rank": 2,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"porque es que estoy con otra compañía",
|
||||
"Yo tenía la tarifa One en otro domicilio de la calle San Juan.",
|
||||
"pues ya llamaré a otro."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "NO_RETENTION_ATTEMPT",
|
||||
"category": "lost_sales",
|
||||
"frequency": {
|
||||
"total_occurrences": 2,
|
||||
"calls_affected": 2,
|
||||
"occurrence_rate": 0.06666666666666667,
|
||||
"call_rate": 0.06666666666666667
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 69.25,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 3,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"No sé si hay algo más en lo que yo te pueda ayudar o asesorar el día de hoy.",
|
||||
"Si yo te logro conseguir un descuento, ¿Tú te quedarías con Endes el día de hoy?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "NO_INTEREST_IN_UPGRADE",
|
||||
"category": "lost_sales",
|
||||
"frequency": {
|
||||
"total_occurrences": 3,
|
||||
"calls_affected": 3,
|
||||
"occurrence_rate": 0.1,
|
||||
"call_rate": 0.1
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 64.0,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 4,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"De momento aún no, pero lo tendré en cuenta.",
|
||||
"Pero yo no he pasado de mil, ¿No? ¿Que si no he pasado de mil tiene que ser a cero?",
|
||||
"Yo soy electricista, entonces lo que quiero saber es que eso sigue el contrato activo con la tarifa y todo eso"
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "DISTRUST_OF_OFFERS",
|
||||
"category": "lost_sales",
|
||||
"frequency": {
|
||||
"total_occurrences": 2,
|
||||
"calls_affected": 2,
|
||||
"occurrence_rate": 0.06666666666666667,
|
||||
"call_rate": 0.06666666666666667
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 57.25,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 5,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"A mí me han dicho que no, que accesa cero, no, que no hay que pagar nada, me han dicho a mí.",
|
||||
"Pero que todo sigue lo mismo, es decir, la tarifa libre que yo ahora he contratado."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "CONTRACT_PERMANENCE",
|
||||
"category": "lost_sales",
|
||||
"frequency": {
|
||||
"total_occurrences": 1,
|
||||
"calls_affected": 1,
|
||||
"occurrence_rate": 0.03333333333333333,
|
||||
"call_rate": 0.03333333333333333
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 56.99999999999999,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 6,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"yo voy a rescindir el contrato justamente cuando llegue febrero del 26, pero me ponen la factura que la renovación es anual automática y yo no la quiero."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "NO_SAVINGS_CALCULATION",
|
||||
"category": "lost_sales",
|
||||
"frequency": {
|
||||
"total_occurrences": 1,
|
||||
"calls_affected": 1,
|
||||
"occurrence_rate": 0.03333333333333333,
|
||||
"call_rate": 0.03333333333333333
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 51.49999999999999,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 7,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"¿O sea, que el P cuánto es? ¿Y el p?"
|
||||
]
|
||||
}
|
||||
],
|
||||
"poor_cx_tree": [
|
||||
{
|
||||
"driver_code": "BILLING_NOT_CLARIFIED",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 9,
|
||||
"calls_affected": 9,
|
||||
"occurrence_rate": 0.3,
|
||||
"call_rate": 0.3
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 82.5,
|
||||
"impact_level": "critical"
|
||||
},
|
||||
"priority_rank": 1,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"Claro, en esta ocasión, cuando el día que lo vayas a renovar te lo podemos dejar al 0,13.",
|
||||
"apenas está ingresando el dinero de las facturas",
|
||||
"La factura no presenta movimiento de pago, es decir, no se realizó pago alguno en ella."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "NOT_LISTENING",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 13,
|
||||
"calls_affected": 13,
|
||||
"occurrence_rate": 0.43333333333333335,
|
||||
"call_rate": 0.43333333333333335
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 81.3076923076923,
|
||||
"impact_level": "critical"
|
||||
},
|
||||
"priority_rank": 2,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"¿Que el contador de luz o de gas?",
|
||||
"Pero entonces él te pudo contacto.",
|
||||
"¿Hola Miriam me escuchas?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "LOW_EMPATHY",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 5,
|
||||
"calls_affected": 5,
|
||||
"occurrence_rate": 0.16666666666666666,
|
||||
"call_rate": 0.16666666666666666
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 80.4,
|
||||
"impact_level": "critical"
|
||||
},
|
||||
"priority_rank": 3,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"Vale, pero tranquilo, comprender las consultas.",
|
||||
"Te sugiero, antes de que cuelgues, trata de hablar con tu señora madre para que te confirme el DNI.",
|
||||
"No, lo intenté de todas las maneras, pero no me aparece ninguna opción para cancelarlo."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "ISSUE_NOT_RESOLVED",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 3,
|
||||
"calls_affected": 3,
|
||||
"occurrence_rate": 0.1,
|
||||
"call_rate": 0.1
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 77.0,
|
||||
"impact_level": "critical"
|
||||
},
|
||||
"priority_rank": 4,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"No, lo intenté de todas las maneras, pero no me aparece ninguna opción para cancelarlo.",
|
||||
"el técnico puede llegar en ese caso de una 24 horas",
|
||||
"La solicitud de reenganche ya está puesta desde las siete y media."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "LONG_SILENCE",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 14,
|
||||
"calls_affected": 14,
|
||||
"occurrence_rate": 0.4666666666666667,
|
||||
"call_rate": 0.4666666666666667
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 75.60714285714285,
|
||||
"impact_level": "critical"
|
||||
},
|
||||
"priority_rank": 5,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"....",
|
||||
"¿Hola Hola Hola tendré que finalizar la llamada me oye?",
|
||||
"Un momento por favor. Gracias."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "OUTAGE_NOT_EXPLAINED",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 3,
|
||||
"calls_affected": 3,
|
||||
"occurrence_rate": 0.1,
|
||||
"call_rate": 0.1
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 72.50000000000001,
|
||||
"impact_level": "critical"
|
||||
},
|
||||
"priority_rank": 6,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"Yo no puedo saber si ha sido un tema de la zona, eso ya lo maneja el área encargada de averías.",
|
||||
"Vale, pero nosotros solamente somos facturación, quién se encarga de eso es la distribuidora y avería.",
|
||||
"Pero sí ha habido situaciones de otras partes en particular."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "WRONG_DEPARTMENT",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 3,
|
||||
"calls_affected": 3,
|
||||
"occurrence_rate": 0.1,
|
||||
"call_rate": 0.1
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 67.5,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 7,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"En ese caso ya tienes que hablar con lo que sería la distribuidora.",
|
||||
"Tú ya te comunicas con el área de averías para informar y pues que te hagan una incidencia.",
|
||||
"Eso sería directamente con la distribuidora."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "MULTI_TRANSFER",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 2,
|
||||
"calls_affected": 2,
|
||||
"occurrence_rate": 0.06666666666666667,
|
||||
"call_rate": 0.06666666666666667
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 65.25,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 8,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"te voy a transferir para que hagas estos pagos",
|
||||
"me ha dirigido a la distribuidora, me ha dicho que volviera"
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "INCORRECT_INFO",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 1,
|
||||
"calls_affected": 1,
|
||||
"occurrence_rate": 0.03333333333333333,
|
||||
"call_rate": 0.03333333333333333
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 62.5,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 9,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"No, es que siempre el valor de. El valor de la modificación de potencia tiene ese valor, vale, tiene un valor."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "LONG_HOLD",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 2,
|
||||
"calls_affected": 2,
|
||||
"occurrence_rate": 0.06666666666666667,
|
||||
"call_rate": 0.06666666666666667
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 60.5,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 10,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"Permíteme un momento, por favor, y reviso.",
|
||||
"Permítame un momento."
|
||||
]
|
||||
},
|
||||
{
|
||||
"driver_code": "UNCLEAR_NEXT_STEPS",
|
||||
"category": "poor_cx",
|
||||
"frequency": {
|
||||
"total_occurrences": 3,
|
||||
"calls_affected": 3,
|
||||
"occurrence_rate": 0.1,
|
||||
"call_rate": 0.1
|
||||
},
|
||||
"severity": {
|
||||
"severity_score": 59.00000000000001,
|
||||
"impact_level": "high"
|
||||
},
|
||||
"priority_rank": 11,
|
||||
"children": [],
|
||||
"sample_evidence": [
|
||||
"Ya en estos momentos le acabo de realizar la solicitud de reengancho",
|
||||
"¿Hasta qué día tengo para pagarlo? Porque no sea cosa que me corten la luz, no sé.",
|
||||
"estar muy pendiente el día de mañana"
|
||||
]
|
||||
}
|
||||
],
|
||||
"fcr_failure_tree": [],
|
||||
"churn_risk_tree": []
|
||||
}
|
||||
Reference in New Issue
Block a user