SGIC
Propuesta para “Plan de Telefonía” y “Perfiles de Consumo”
A continuación se presenta una propuesta para tratar los planes de telefonía y los perfiles deconsumo en el SGIC. Las clases naranjas son las más importantes a tratar, y las demás se muestran igualmente para conocer mejor el contexto de aplicación.
PlanDeTelefoníaContratado ServiciosDeTelefonía LineaTelefónicaMóvil LineaTelefónica Proveedor DetallePerfilDeConsumo PerfilDeConsumo Cargo SIM AsignacionDeSIMMóvil DispositivoMóvilEspecífico AsignacionDeDispositivoMóvil Empleado PlanDeTelefonía ServiciosPlanTelefonia 11 11 1..* 1..* 11 0..1 0..1 11 11 11 11 11 11 11 11 11 11 0..* 0..* 0..* 0..* Para empezar diremos que es necesario dividir lo que es “definicional” de lo que es “de uso”. ¿Qué quiere decir esto? Esto quiere decir que el sistema debe por un lado conservar la definición de los
planes de telefonía, al mismo tiempo que debe tener en cuenta el plan con las características
particulares con las que fue contratado. Y esto es muy importante remarcarlo ya que, sin esta aclaración, se podrían estar usando clases equivocadas para hacer cosas equivocadas, como por ejemplo asignar directamente a una línea un plan de telefonía, pero de la clase que corresponde a su definición y no una clase que sea particular de contratación.
PlanDeTelefoníaContratado fechaContratado : Datetime numeroContrato : int fechaBajaContrato : Datetime serviciosExtraContratados : ServiciosPlanTelefonia calcularMontoTotal() PlanDeTelefonía denominacionDePlan : String numeroDePlan : int costoBase : double fechaVigencia : Date tipo [TF/TM] : String servicioPlanTel : ServiciosPlanTelefonia proveedor : Proveedor fechaBaja crear() mostrar() conocerServiciosPosibles() listarServiciosIncluidos() esTipo() mostrarDenominacion() conocerProveedor() ServiciosPlanTelefonia servicio : ServiciosDeTelefonía seIncluye : bool cantidad : double costoServicio : double costoExcedente : double crear() mostrar() conocerServicio() ServiciosDeTelefonía denominacion : String descripcion : String tipo [TF/TM] : String unidadDeMedida crear() mostrar() conocerProveedor() Proveedor 11 0..* 0..* 0..* 0..* 11 11 Para arrancar diremos que el sistema modelará los “ServiciosDeTelefonía”, éstos pueden ser: Minutos para hablar, SMS, Servicio 3G, etc. Sobre los atributos de ServiciosDeTelefonía, se plantea el siguiente ejemplo: ‐ Denominación: SMS ‐ Descripción: Mensajes de Texto ‐ Tipo: TM (Telefonía Móvil) ‐ Unidad de Medida: Unidad. Un Plan de Telefonía tiene un conjunto de servicios que van incluidos con el plan y también un conjunto de servicios no incluidos pero que se puede activar. El kit de la cuestión es que un “Plan de Telefonía” tiene servicios incluidos y no incluidos, pero existen ciertos servicios que ni siquiera se pueden imaginar para un determinado plan, o sea, que ni siquiera “aplicarían” para dicho plan. Por ej.: para un plan simple de 49 + IVA de Claro es impensable pensar en un servicio de, supongamos, 3G ya que ese es un servicio que aplica para otros planes. Sin embargo, si podemos pensar en: minutos para hablar, sms, servicio de correo de voz, entre otros. Volviendo a la definición de clases, vemos entonces, que un “Plan de Telefonía” tiene UNO O VARIOS “Servicios Plan Telefonía”, que son justamente el detalle de aquellos servicios disponibles (incluidos o no) para ese plan.
De cada servicio “Servicio Plan Telefonía”, se consideran los siguientes atributos: ‐ seIncluye (Booleano): que indica si el servicio determinado se incluye o no en el plan de telefonía. Si se incluye, entonces está considerado dentro del costoBase del Plan de Telefonía. ‐ Cantidad (double): es la cantidad de un servicio determinado que se incluye en el plan de telefonía. Supongamos que el plan incluye 100 SMS por mes entonces en cantidad va 100. Se plantea como un “double” porque podrían ser Kilobytes de transferencia (si el servicio fuera 3G, supongamos) y en dicho caso podrían incluirse 2,5 MB. ‐ costoDeServicio: es el costo del servicio para dicho plan. Si el servicio esta incluido este valor podría ser “0”, sin embargo podría suceder que lo que hoy se incluye en un plan mañana no se incluya más y en dicho caso este valor tendrá un significado por sí mismo. Entonces, para redondear, costoServicio es el costo del servicio para este plan, que si esta incluido no se tendrá en cuenta y puede, o no, ser cero. ‐ costoExcedente: si se pasa en consumo a la cantidad de un servicio incluido, el costo excedente se deberá calcular en base al costo excedente por unidad. Este costo es justamente eso, costo por unidad de servicio excedente. El “Plan de Telefonía” tiene los siguientes atributos que se explicarán mediante un ejemplo: ‐ denominacionDelPlan: Plan Zero ‐ numeroDePlan: 0154E (denominación que le da el proveedor) ‐ costoBase: es el costo del plan, con todos los servicios que incluye el mismo. ‐ fechaVigencia: 01/09/2009. Indica la fecha en que este plan fue cargado en el sistema, esto es para ver si se está trabajando con una versión actualizada del plan. Recordemos que los proveedores pueden cambiar la definición del plan y nosotros quedar trabajando con una versión desactualizada. ‐ Tipo [TF/TM]: TM. Es para indicar si el plan corresponde a telefonía fija o móvil. ‐ servicioPlanTel: el conjunto de servicios que dicho plan incluye. (Un array de ServiciosPlanTelefonía). ‐ Proveedor: proveedor del plan. Ej.: Claro. ‐ fechaBaja: fecha de baja del plan, si es que la empresa no lo considera más entre sus planes posibles para trabajar actualmente (pero que aún puede estar siendo referenciado por valores pasados)
Estas 3 clases modelan los que se refiere a lo definicional del Plan de Telefonía. Ahora, para modelar el plan “en uso” utilizaremos una nueva clase denominada: PlanDeTelefoníaContratado. A saber de sus atributos: ‐ fechaContratado: fecha cuando se contrato el plan en particular. Ej.: 01/05/2000
proveedor. ‐ fechaBajaContrato: fecha de baja si el plan de telefonía contratado fue dado de baja. ‐ serviciosExtraContratados: aquí nos detendremos a analizar detalladamente. Sabemos que un plan de telefonía por definición tiene un conjunto de servicios que se incluyen y otros que no, pero, ¿Qué hay si quiero contratar algunos de esos servicios extras? Entonces, ESOS servicios extras serán parte del PLAN que se CONTRATO, y será muy particular por cada plan contratado. Por ej., dos empelados pueden tener el mismo plan de telefonía pero diferentes servicios habilitados de los extras. Es por ello que está este atributo denominado serviciosExtraContratados que es un array de ServiciosPlanTelefonía. Ahora como se sigue la lógica por ejemplo para calcular el monto total de dicho plan, y como se hace un control de lo que se consume versus lo que estaba definido en el plan? Por empezar la lógica empieza por determinar que los servicios extras contratados sean efectivamente servicios que en el plan de telefonía están detallados como no incluidos, o sea, que son efectivamente servicios extras posibles para dicho plan. Luego, al adquirir ese servicio yo deberé pagar el costoServicio (costo por adquirir dicho servicio), y en cantidad se me indica cuanto de dicho servicio se incluye por el precio abonado. Además tendré igualmente un costo de excedente para futuros controles. Materialicemos la contabilidad de servicios extra en un ejemplo práctico poniendo en manifiesto los atributos más importantes:
Planes ServiciosPlanTelefonía ServiciosDeTelefonía
PlanDeTelefonía [Plan Zero] [costoBase: $49] Se incluye: True Cantidad: 100 Precio Servicio: 0 Costo Excedente: 0,15 Denominación: SMS Unidad de Medida: Unidad Se incluye: True Cantidad: 200 Precio Servicio: 0 Costo Excedente: 0,50 Denominación: Minutos Libres Unidad de Medida: Minuto Se incluye: False Cantidad: 0 Precio Servicio: 5 Costo Excedente: 0,30 Denominación: Correo de Voz Unidad de Medida: Minuto (dentro del sistema) Denominación: Navegación 3G Unidad de Medida: Megas (MB) PlanDeTelefoníaContratado [Plan Zero Contratado] [Fecha contrato: 01/09/2009] [Nro. Contrato: 013365E] servicioExtraContratado: Correo de Voz.
Con esto podemos ver que el Plan Zero incluye los servicios de “SMS”, “Minutos Libres”. Además, tiene la posibilidad de adquirir “Correo de Voz”. Sin embargo, por más que se quiera, para este plan no aplica la “Navegación 3G”. La definición queda plasmada en PlanDeTelefonía. Ahora, en PlanDeTelefoníaContratado tenemos un plan de telefonía en particular que SI ADQUIRIO el “Correo de Voz”. Como vemos, el correo de voz cuesta por mes $5 e incluye 0 de la cantidad de dicho servicio. Para entender esto debemos ver que, en la definición del servicio, el correo de voz esta medido en los minutos que uno está dentro del sistema navegando el correo de voz. O sea que el costo es sólo del servicio y en este caso no incluye nada de minutos de navegación, cobrándose cada minuto navegado en el sistema de correo de voz. El costo excedente es de 0,30 lo que nos define cuanto saldrá el minuto navegado en el sistema de correo de voz, en este caso, durante todo el tiempo que estemos dentro del mismo. Distinto sería si la promoción fuera: “El correo de voz cuesta $5 e incluye 30 minutos de navegación en el sistema”. En dicho caso aplicaría mejor lo de “excedente”, sin embargo es válido para este caso, aunque cualquier consumo excede de cero, no? ☺ Finalmente el cálculo final del monto del plan contratado que es el que nos interesa será igual al costoBase del plan más el de los servicios extras, en este caso $49 + $5 = $54.
Cargo Empleado PerfilDeConsumo nombre : String fechaVigencia : Datetime detallePerfil : DetallePerfilDeConsumo crear() mostrar() calcularMejorPlanTelefonia() conocerDetallePerfilConsumo() DetallePerfilDeConsumo servicio cantMaxNecesaria conocerServicio() ServiciosDeTelefonía denominacion : String descripcion : String tipo [TF/TM] : String unidadDeMedida crear() mostrar() conocerProveedor() 11 11 11 1..* 1..* 11 El perfil de consumo define, la relación entre “Servicio de Telefonía” y la cantidad máxima que se necesita de ese servicio. Todo CARGO tiene por defecto un PerfilDeConsumo que se presume genérico para dicho cargo. Al comienzo, a un empleado se le asigna el perfil de consumo que corresponde a su CARGO, sin embargo, con el paso del tiempo, los comportamientos de consumo nos pueden indicar que es necesario cambiar su perfil para ajustarlo mejor a sus necesidades actuales. Este cambio del perfil de consumo se hará en base al análisis de si se está utilizando de más o de menos lo que en este perfil se establece. Lo indicado en el perfil de consumo es la “regla” que dicho empleado debe cumplir en término de consumos. Sabemos que puede haber excesos, y puede haber desaprovechamientos. Estos eventos extraordinarios deberán analizarse a lo largo del tiempo para determinar si no corresponde cambiar el perfil. En base a la definición del perfil de consumo es posible establecer el mejor plan de telefonía para dicho perfil, ya que ambos de alguna manera incluyen “servicios de telefonía” y una “determinada cantidad”. Cabe aclarara que el mejor plan se calculará según el “menor precio posible que cumpla con lo que necesita dicho perfil”.