{{ cur }} — {{ getCurrencySymbol(cur) }}
Llamadas a Móvil
{{ getDestStats('movil', cur).llamadas }}
Minutos:
{{ getDestStats('movil', cur).total_minutos }} min
Venta:
{{ fmtMoney(getDestStats('movil', cur).total_venta, cur) }}
Costo:
{{ fmtMoney(getDestStats('movil', cur).total_costo, cur) }}
Utilidad:
{{ fmtMoney(getDestStats('movil', cur).total_utilidad, cur) }}
Llamadas a Fijo
{{ getDestStats('fijo', cur).llamadas }}
Minutos:
{{ getDestStats('fijo', cur).total_minutos }} min
Venta:
{{ fmtMoney(getDestStats('fijo', cur).total_venta, cur) }}
Costo:
{{ fmtMoney(getDestStats('fijo', cur).total_costo, cur) }}
Utilidad:
{{ fmtMoney(getDestStats('fijo', cur).total_utilidad, cur) }}
Total Consolidado
{{ getTotalStats(cur).llamadas }} llamadas
Minutos Totales:
{{ getTotalStats(cur).total_minutos }} min
Ingresos Totales:
{{ fmtMoney(getTotalStats(cur).total_venta, cur) }}
Costo Total:
{{ fmtMoney(getTotalStats(cur).total_costo, cur) }}
Utilidad Neta:
{{ fmtMoney(getTotalStats(cur).total_utilidad, cur) }}
Resumen Detallado por Cliente
| Cliente | Moneda | Llamadas | Minutos | Min. Móvil | Min. Fijo | Venta Móvil | Venta Fijo | Total Venta | Total Costo | Utilidad |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ cs.client_name }} | {{ cs.currency }} | {{ cs.llamadas }} | {{ cs.total_minutos }}m | {{ cs.minutos_movil }}m | {{ cs.minutos_fijo }}m | ${{ cs.venta_movil }} | ${{ cs.venta_fijo }} | ${{ cs.total_venta }} | ${{ cs.total_costo }} | ${{ cs.total_utilidad }} |
Resumen Detallado por Proveedor
| Proveedor | Moneda | Llamadas | Minutos | Min. Móvil | Min. Fijo | Venta Móvil | Venta Fijo | Total Venta | Total Costo | Utilidad |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ ps.provider_name || 'Desconocido' }} | {{ ps.currency }} | {{ ps.llamadas }} | {{ ps.total_minutos }}m | {{ ps.minutos_movil }}m | {{ ps.minutos_fijo }}m | ${{ ps.venta_movil }} | ${{ ps.venta_fijo }} | ${{ ps.total_venta }} | ${{ ps.total_costo }} | ${{ ps.total_utilidad }} |
Análisis de Finalización de Llamadas (Causas)
| Causa (Hangup Cause) | Código | Cantidad de Llamadas |
|---|---|---|
| {{ cause.hangup_cause || 'Desconocido' }} | {{ cause.hangup_code || '--' }} | {{ cause.cantidad }} |
Registros Detallados (CDR)
| Fecha / Hora | Cliente | Destino | Troncal | Pref. Cliente | Pref. Proveedor | Moneda | Tipo | T. Total | T. Hablado | Code | Causa | Precio Venta | Costo | Utilidad |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
{{ String(cdr.fecha).substring(0,10) }}
{{ cdr.hora }}
|
{{ cdr.client_name || 'Desconocido' }} | {{ cdr.dialed_number }} | {{ cdr.trunk_name || '--' }} | {{ cdr.client_prefix || '--' }} | {{ cdr.provider_prefix || '--' }} | {{ cdr.currency || '--' }} | {{ cdr.dest_type }} | {{ cdr.total_time }}s | {{ cdr.talk_time }}s | {{ cdr.hangup_code }} | {{ cdr.hangup_cause }} | {{ fmtMoney(cdr.sale_price, cdr.currency) }} | {{ fmtMoney(cdr.cost_price, cdr.currency) }} | {{ fmtMoney(cdr.profit, cdr.currency) }} |
Directorio de Clientes
| RUT / DNI | Nombre | Venta Móvil | Venta Fijo | Moneda | Estado | Acciones |
|---|---|---|---|---|---|---|
| {{ c.rut_dni }} | {{ c.name }} | ${{ Number(c.sale_mobile).toFixed(c.currency === 'USD' ? 4 : 2) }} | ${{ Number(c.sale_fixed).toFixed(c.currency === 'USD' ? 4 : 2) }} | {{ c.currency || 'CLP' }} | Activo Inactivo |
Agregar IP a WhiteList
Formatos aceptados:
- IP única: 192.168.100.22
- Rango: 192.168.100.22 - 192.168.100.30
- CIDR: 192.168.100.0/24
Troncales de Clientes
| Cliente | Prefijo In | Autenticación (IP/User) | Proveedor Asignado | Estado Lógico | Enlace SIP | Acciones |
|---|---|---|---|---|---|---|
| {{ t.client_name }} | {{ t.prefix }} | {{ t.ip || t.username || '--' }} | {{ t.provider_name || 'Balanceo Automático' }} Prefijo Add: {{t.provider_prefix}} | Activa Inactiva |
Reachable ({{ getTrunkRealtime(t.trunk_name).ping }}ms)
Unreachable
-
|
|
| No hay troncales de clientes | ||||||
Troncales de Proveedor (Salida)
| Proveedor | Host / IP | Auth SIP | Compra Movil | Compra Fijo | Estado Lógico | Enlace SIP | Acciones |
|---|---|---|---|---|---|---|---|
| {{ t.provider_name }} | {{ t.ip }} | {{ t.username || '--' }} | ${{ Number(t.buy_mobile).toFixed(2) }} | ${{ Number(t.buy_fixed).toFixed(2) }} | Activa Inactiva |
Reachable ({{ getTrunkRealtime(t.trunk_name).ping }}ms)
Unreachable
-
|
|
| No hay troncales de proveedor | |||||||
Historial de Estado de Troncales
| Fecha / Hora | Nombre de Troncal | Estado Detectado | Latencia (Ping) |
|---|---|---|---|
|
{{ String(log.fecha).substring(0,10) }}
{{ log.hora }}
|
{{ log.trunk_name }} | {{ log.status }} | {{ log.ping_ms ? log.ping_ms + ' ms' : '--' }} |
| No hay logs de estado en la tabla | |||
Gestión de Clientes Prepago
Clientes Prepago
{{ prepaidClients.length }}
Minutos Totales
{{ prepaidClients.reduce((sum,c) => sum + (parseFloat(c.minutes_balance)||0), 0).toFixed(0) }}
Saldo Total
{{ fmtMoney(prepaidClients.reduce((sum,c) => sum + (parseFloat(c.balance)||0), 0), 'CLP') }}
| Cliente | Minutos | Saldo | Vencimiento | Acciones |
|---|---|---|---|---|
| {{ c.name }} | {{ parseFloat(c.minutes_balance||0).toFixed(1) }} | {{ fmtMoney(c.balance, c.currency) }} | {{ c.expiration_date ? c.expiration_date.split('T')[0] : 'Sin fecha' }} | |
| No hay clientes prepago | ||||
IP's Permitidas en Firewall
| IP / Rango | Descripción | Estado | Acciones |
|---|---|---|---|
| {{ item.ip_range }} | {{ item.description || '-' }} | {{ item.active ? 'Activo' : 'Inactivo' }} |
|
| No hay IPs en la whitelist | |||
Tu cuenta está configurada como postpago. Tu moneda es {{ myBalance.currency || 'CLP' }}.
Mis Consumos Recientes
| Fecha | Destino | Prefijo | Minutos | Moneda | Costo |
|---|---|---|---|---|---|
| {{ String(cdr.fecha).substring(0,10) }} {{ cdr.hora }} | {{ cdr.dialed_number }} | {{ cdr.client_prefix || '--' }} | {{ cdr.talk_time }}s | {{ cdr.currency || myBalance.currency }} | {{ fmtMoney(cdr.sale_price, cdr.currency || myBalance.currency) }} |
| Sin consumos recientes | |||||
SALDO DISPONIBLE
{{ parseFloat(myBalance.minutes_balance || 0).toFixed(1) }} min
≈ {{ fmtMoney(myBalance.balance, myBalance.currency) }}
VENCIMIENTO
{{ myBalance.expiration_date ? myBalance.expiration_date.split('T')[0] : 'Sin fecha' }}
ESTADO
{{ (parseFloat(myBalance.minutes_balance)||0) < 10 ? 'Saldo Bajo' : 'Activo' }}
| Fecha | Tipo | Monto | Minutos |
|---|---|---|---|
| {{ new Date(t.created_at).toLocaleString() }} | {{ t.type === 'recharge' ? 'Recarga' : 'Consumo' }} | {{ t.amount >= 0 ? '+' : '' }}{{ fmtMoney(t.amount, t.currency || selectedClient?.currency) }} | {{ t.minutes_change >= 0 ? '+' : '' }}{{ parseFloat(t.minutes_change).toFixed(1) }} |
| Sin transacciones | |||
Historial de Transacciones - {{ selectedClient?.name }}
| Fecha | Tipo | Monto | Minutos | Descripción |
|---|---|---|---|---|
| {{ new Date(t.created_at).toLocaleString() }} | {{ t.type === 'recharge' ? 'Recarga' : t.type === 'consumption' ? 'Consumo' : t.type }} | {{ t.amount >= 0 ? '+' : '' }}{{ fmtMoney(t.amount, t.currency || myBalance.currency) }} | {{ t.minutes_change >= 0 ? '+' : '' }}{{ parseFloat(t.minutes_change).toFixed(1) }} | {{ t.description }} |
| No hay transacciones | ||||
{{ clientTransactions.length }} transacciones