12.07.2015 Views

Tesis Sistema de Seguimiento de Proyectos de Construcción y ...

Tesis Sistema de Seguimiento de Proyectos de Construcción y ...

Tesis Sistema de Seguimiento de Proyectos de Construcción y ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

SISTEMA DE POSGRADOMAESTRÍA EN TELECOMUNICACIONESTÍTULO DE LA TESIS:<strong>Sistema</strong> <strong>de</strong> <strong>Seguimiento</strong> <strong>de</strong> <strong>Proyectos</strong> <strong>de</strong> Construcción y Mantenimiento paraEmpresas <strong>de</strong> Telecomunicaciones a través <strong>de</strong> la Web”Previa la obtención <strong>de</strong>l Grado Académico <strong>de</strong> Magíster en TelecomunicacionesELABORADO POR:Ing. Christian León CercadoGuayaquil, a los 12 días <strong>de</strong>l mes Junio año 20121


SISTEMA DE POSGRADOCERTIFICACIÓNCertificamos que el presente trabajo fue realizado en su totalidad por MagísterChristian León Cercado como requerimiento parcial para la obtención <strong>de</strong>l GradoAcadémico <strong>de</strong> Magíster en Telecomunicaciones.Guayaquil, a los 12 días <strong>de</strong>l mes Junio año 2012DIRECTOR DE TESIS__________________________________NombreREVISORES:__________________________________MsC. Edwin Palacios Melén<strong>de</strong>z__________________________________MsC. Luis Cordova Riva<strong>de</strong>neiraDIRECTOR DEL PROGRAMA__________________________________MsC. Manuel Romero Paz2


SISTEMA DE POSGRADODECLARACIÓN DE RESPONSABILIDADYO, Christian León CercadoDECLARO QUE:La tesis “<strong>Sistema</strong> <strong>de</strong> <strong>Seguimiento</strong> <strong>de</strong> <strong>Proyectos</strong> <strong>de</strong> Construcción y Mantenimientopara Empresas <strong>de</strong> Telecomunicaciones a través <strong>de</strong> la Web””, previa a la obtención<strong>de</strong>l grado Académico <strong>de</strong> Magíster, ha sido <strong>de</strong>sarrollada en base a una investigaciónexhaustiva, respetando <strong>de</strong>rechos intelectuales <strong>de</strong> terceros conforme las citas queconstan al pie <strong>de</strong> las páginas correspondientes. Consecuentemente este trabajo es<strong>de</strong> mi total autoría.En virtud <strong>de</strong> esta <strong>de</strong>claración, me responsabilizo <strong>de</strong>l contenido, veracidad y alcancecientífico <strong>de</strong> la tesis <strong>de</strong>l Grado Académico en mención.Guayaquil, a los 12 días <strong>de</strong>l mes Junio año 2012EL AUTOR_____________________Christian León Cercado3


SISTEMA DE POSGRADOAUTORIZACIÓNYO, Christian León CercadoAutorizo a la Universidad Católica <strong>de</strong> Santiago <strong>de</strong> Guayaquil, la publicación, en labiblioteca <strong>de</strong> la institución <strong>de</strong> la <strong>Tesis</strong> <strong>de</strong> Maestría titulada: “<strong>Sistema</strong> <strong>de</strong> <strong>Seguimiento</strong><strong>de</strong> <strong>Proyectos</strong> <strong>de</strong> Construcción y Mantenimiento para Empresas <strong>de</strong>Telecomunicaciones a través <strong>de</strong> la Web””, cuyo contenido, i<strong>de</strong>as y criterios son <strong>de</strong>mi exclusiva responsabilidad y total autoría.Guayaquil, a los 12 días <strong>de</strong>l mes Junio año 2012EL AUTOR__________________________________Christian León Cercado4


AGRADECIMIENTOAgra<strong>de</strong>zco en primer lugar a DIOS, que me da todo los días la oportunidad <strong>de</strong> crecerprofesionalmente y es el que me ilumina a seguir por el buen camino, a mi esposa ehijas que son la parte más sacrificada en este sacrificio valga la redundancia ya queellas son la que soportaban el que por mis estudios no podamos gozar <strong>de</strong> un fin <strong>de</strong>semana como familia, pero como siempre le <strong>de</strong>cía a mi esposa y ella hoy en día melo recalca, los beneficiados <strong>de</strong> mis esfuerzos siempre serán mi familia y es unaenseñanza para mis hijas el ver que su padre se <strong>de</strong>dica o se esfuerza en avanzar enla selva <strong>de</strong> cemento, a mi madre que ha sido esa mujer <strong>de</strong> tesón y ñeque quesiempre está ahí para dar sus palabras sabias y aparte inculcarnos el avanzar puesella más que nadie nos <strong>de</strong>mostró que no existe edad para estudiar y avanzar, y amis hermanos que junto a mi madre y familia se vuelven los pilares fundamentales<strong>de</strong> mi vida y <strong>de</strong> la lucha <strong>de</strong> este ser por ser una persona que le suma a la sociedad<strong>de</strong> mi país .También le agra<strong>de</strong>zco a mi ALMA MATER formadora <strong>de</strong> seres importantes <strong>de</strong> estepaís y <strong>de</strong> mi persona.5


DEDICATORIAPadre, sé que estás en el cielo y siempre me guías con tus bendiciones, aunque noestás aquí físicamente, te <strong>de</strong>dico este esfuerzo pues siempre fuiste ese hombre queaunque no <strong>de</strong>mostrabas afecto, te sentías dichoso <strong>de</strong> tus hijos pues junto a mimadre habían formados hombres <strong>de</strong> bien, leales, sinceros y sin malicias,características que hoy en día casi ya no existen en los hombres, te <strong>de</strong>dico estavictoria como que fuese una tuya, un paso tuyo en la vida y sigue iluminando micaminar en esta batalla <strong>de</strong> llevar tu apellido y legado a lo más gran<strong>de</strong>, a lainmortalidad .6


ÍNDICE GENERALCAPÍTULO 1: INTRODUCCIÓN .............................................................................. 121.1. ANTECEDENTES .............................................................................................. 141.2. JUSTIFICACIÓN DEL PROBLEMA DE INVESTIGACIÓN ............................................. 161.3. DEFINICIÓN DEL PROBLEMA DE INVESTIGACIÓN: ................................................. 171.4. HIPÓTESIS: ..................................................................................................... 171.5. OBJETIVOS ..................................................................................................... 171.5.1. OBJETIVO GENERAL: .................................................................................... 171.5.2. OBJETIVOS ESPECÍFICOS .............................................................................. 171.6. METODOLOGÍA DE INVESTIGACIÓN: ................................................................... 18MÉTODOS TEÓRICOS:............................................................................................... 18CAPÍTULO 2: TECNOLOGÍAS DE PROGRAMACIÓN WEB. ................................ 182.1. INTRODUCCIÓN A PHP..................................................................................... 182.2. CARACTERÍSTICAS DE PHP. ............................................................................. 192.3. FUNCIONALIDAD DE PHP ................................................................................. 212.4. PHP ORIENTADO A OBJETOS. .......................................................................... 222.4.1. Objetos ................................................................................................... 222.4.2. Clases ..................................................................................................... 232.4.3. Declaración <strong>de</strong> clases. ............................................................................ 252.4.4. La palabra reservada new y los constructores ....................................... 252.4.5. Los <strong>de</strong>structores. .................................................................................... 272.4.6. Accediendo a los métodos y atributos a través <strong>de</strong> la variable $this. ....... 282.4.7. Encapsulación. ....................................................................................... 282.4.8. Métodos public, protected y private. ....................................................... 312.4.9. Herencia. ................................................................................................ 322.4.10. Sintaxis <strong>de</strong> la herencia. ........................................................................... 332.4.11. Polimorfismo. .......................................................................................... 352.4.12. El mo<strong>de</strong>lo objeto en PHP 5. Otras características. ................................ 392.4.13. Posibilidad <strong>de</strong> uso <strong>de</strong> interfaces. ............................................................ 392.4.14. Operador instanceof. .............................................................................. 402.4.15. Métodos y clases final. ........................................................................... 407


2.4.16. Atributos y métodos static. ...................................................................... 412.4.17. Clases y métodos abstractos. ................................................................. 422.4.18. Clases reservadas self:: y parent:: ........................................................ 432.4.19. Constantes <strong>de</strong> clase. .............................................................................. 442.4.20. Función __autoload().............................................................................. 452.4.21. Clonado <strong>de</strong> objetos. ................................................................................ 462.5. BASES DE DATOS EN LA WEB ........................................................................... 482.5.1. BIBLIOTECAS DE ACCESO A DATOS EN PHP .................................................... 492.6. ACCESO A BASES DE DATOS MYSQL EN PHP ................................................... 502.7. SOPORTE PARA PROGARACIÓN WEB CON PHP Y MYSQL .................................. 542.7.1. SERVIDOR WAMP. ...................................................................................... 542.7.2. APPSERV .................................................................................................. 552.7.3. PHP ........................................................................................................... 552.7.4. MYSQL ...................................................................................................... 562.7.5. PHPMYADMIN .......................................................................................... 56CAPÍTULO 3: DESARROLLO DE LA SOLUCIÓN PROPUESTA .......................... 573.1. ARQUITECTURA DE LA SOLUCIÓN ...................................................................... 573.2. MODELADO DE LA BASE DE DATOS. .................................................................. 573.3. DISEÑO DE OBJETOS. ...................................................................................... 593.4. ALCANCES Y RESTRICCIONES DEL SOFTWARE ................................................... 703.4.1. RESTRICCIONES ........................................................................................... 713.4.2. GRAFO SIN CICLOS CON REGIÓN ÚNICA .......................................................... 723.4.3. GRAFOS CÍCLICOS ........................................................................................ 733.4.4. GRAFOS MULTI-CAMINO ................................................................................ 743.5. SEGURIDAD Y CONTROL DE ACCESO ................................................................. 753.5.1. Seguridad general <strong>de</strong> acceso a la base <strong>de</strong> datos ................................... 763.5.2. Seguridad <strong>de</strong> acceso al sistema ............................................................. 763.5.3. Seguridad <strong>de</strong> acceso a la información .................................................... 773.6. PARAMETRIZACIÓN GENERAL ........................................................................... 783.6.1. Administración <strong>de</strong> Feriados y Jornada laboral ........................................ 793.6.2. Definición <strong>de</strong> Categorías <strong>de</strong> proyectos ................................................... 798


3.7. PLANTILLAS .................................................................................................... 803.7.1. Definición <strong>de</strong> etapas <strong>de</strong> un proyecto ....................................................... 823.7.2. Definición <strong>de</strong> Activida<strong>de</strong>s Generales <strong>de</strong> proyectos ................................. 843.7.3. Registro <strong>de</strong> plantillas por categoría <strong>de</strong> proyectos ................................... 843.8. REGISTRO DE PROYECTOS ............................................................................... 853.8.1. Asignación <strong>de</strong> tiempos ............................................................................ 863.8.2. Responsables <strong>de</strong> las activida<strong>de</strong>s............................................................ 87Fuente: El autor .................................................................................................. 883.8.3. Elaboración <strong>de</strong> re<strong>de</strong>s .............................................................................. 883.9. SEGUIMIENTO DE PROYECTOS .......................................................................... 893.10. CÁLCULO DE COSTOS DEL PROYECTO ............................................................ 893.11. ÍNDICES DE EFICIENCIA ................................................................................. 893.12. GRÁFICOS Y REPORTES ................................................................................ 903.12.1. Informe <strong>de</strong> Activida<strong>de</strong>s pendientes ......................................................... 903.12.2. Informe <strong>de</strong> Activida<strong>de</strong>s Finalizadas ........................................................ 913.12.3. Informe <strong>de</strong> Ór<strong>de</strong>nes finalizadas .............................................................. 933.12.4. Comparativo <strong>de</strong> costos en Ór<strong>de</strong>nes Finalizadas .................................... 943.12.5. Reporte <strong>de</strong> Or<strong>de</strong>n <strong>de</strong> Trabajo ................................................................. 953.12.6. Reporte <strong>de</strong> <strong>Seguimiento</strong> <strong>de</strong> Ór<strong>de</strong>nes ..................................................... 96CAPÍTULO 4: CONCLUSIONES Y RECOMENDACIONES .................................... 994.1. CONCLUSIONES .............................................................................................. 994.2. RECOMENDACIONES ........................................................................................ 99ANEXO A: GUÍA DE INSTALACIÓN ..................................................................... 100ANEXO II MANUAL DE USUARIO ........................................................................ 101ANEXO III GLOSARIO DE TÉRMINOS ................................................................. 117ANEXO IV DICCIONARIO DE DATOS .................................................................. 118BIBLIOGRAFÍA ...................................................................................................... 1539


ÍNDICE DE FIGURASCapítulo 2:Figura 2. 1: Funcionamiento <strong>de</strong> PHP ........................................................................ 21Figura 2. 2: Diagrama <strong>de</strong> la clase persona. .............................................................. 24Figura 2. 3: Representación <strong>de</strong> la herencia entre las clases. ................................... 33Figura 2. 4: Esquema básico <strong>de</strong> un sitio Web soportado por bases <strong>de</strong> datos .......... 48Capítulo 3:Figura 3. 1: Mo<strong>de</strong>lo <strong>de</strong> Ór<strong>de</strong>nes o <strong>Proyectos</strong> ........................................................... 58Figura 3. 2: Parámetros y Configuración .................................................................. 59Figura 3. 3: Plantillas <strong>de</strong> Tipos <strong>de</strong> <strong>Proyectos</strong> ............................................................ 59Figura 3. 4: Flujo <strong>de</strong> activida<strong>de</strong>s con 1 sola región, grafo a cíclico ........................... 73Figura 3. 1: Flujo <strong>de</strong> activida<strong>de</strong>s cíclica, en este ejemplo el grafo posee 2 regiones 73Figura 3. 6: Dos caminos diferentes <strong>de</strong>s<strong>de</strong> el mismo origen y con el mismo <strong>de</strong>stino 74Figura 3. 7: Dos caminos diferentes hacia el mismo <strong>de</strong>stino, <strong>de</strong>s<strong>de</strong> orígenes distintos................................................................................................................................. 75Figura 3. 8: Tipos <strong>de</strong> roles pre<strong>de</strong>finidos ................................................................... 76Figura 3. 9: Parametrización por catálogo <strong>de</strong> tablas ................................................ 79Figura 3. 10: Definición <strong>de</strong> Tipos <strong>de</strong> <strong>Proyectos</strong> ........................................................ 80Figura 3. 11: Definición <strong>de</strong> plantillas <strong>de</strong> proyectos ................................................... 81Figura 3. 12: Definición <strong>de</strong> usuarios que recibirán avisos por email <strong>de</strong> proyectos ... 82Figura 3. 13: Etapas generales <strong>de</strong> la administración <strong>de</strong> <strong>Proyectos</strong> .......................... 83Figura 3. 14: Definición <strong>de</strong> Activida<strong>de</strong>s Generales ................................................... 84Figura 3. 15: Plantilla <strong>de</strong> Activida<strong>de</strong>s para un tipo <strong>de</strong> Proyecto ................................ 85Figura 3. 16: Registro <strong>de</strong> or<strong>de</strong>n <strong>de</strong> trabajo para un proyecto ................................... 85Figura 3. 17: Asignación <strong>de</strong> tiempos para las activida<strong>de</strong>s <strong>de</strong> un tipo <strong>de</strong> proyecto.... 86Figura 3. 18: Registro <strong>de</strong> usuarios asignados a una actividad ................................. 87Figura 3. 19: Flujo <strong>de</strong> activida<strong>de</strong>s con 1 sola región, grafo acíclico .......................... 88Figura 3. 20: Matriz <strong>de</strong> adyacencia, para flujo <strong>de</strong> activida<strong>de</strong>s .................................. 88Figura 3. 21: Datos para generar informe <strong>de</strong> activida<strong>de</strong>s pendientes ...................... 90Figura 3. 22: Ejemplo <strong>de</strong> informe <strong>de</strong> activida<strong>de</strong>s pendientes ................................... 9110


Figura 3. 23: Datos para generar informe <strong>de</strong> activida<strong>de</strong>s finalizadas ....................... 92Figura 3. 24: Ejemplo <strong>de</strong> informe <strong>de</strong> activida<strong>de</strong>s finalizadas .................................... 93Figura 3. 25: Datos para la generación <strong>de</strong> informe <strong>de</strong> ór<strong>de</strong>nes finalizadas .............. 93Figura 3. 26: Ejemplo <strong>de</strong>l informe <strong>de</strong> ór<strong>de</strong>nes finalizadas ........................................ 94Figura 3. 27: Datos para la generación <strong>de</strong> informe <strong>de</strong> comparativo <strong>de</strong> costos. ........ 94Figura 3. 28: Resumen <strong>de</strong> costos. ............................................................................ 95Figura 3. 29: Reporte <strong>de</strong> or<strong>de</strong>nes <strong>de</strong> trabajos. ......................................................... 96Figura 3. 30: <strong>Seguimiento</strong> <strong>de</strong> ór<strong>de</strong>nes. ..................................................................... 97Figura 3. 31: Reporte <strong>de</strong> seguimiento <strong>de</strong> activida<strong>de</strong>s por ór<strong>de</strong>nes. .......................... 97Figura 3. 32: Reporte <strong>de</strong> seguimiento <strong>de</strong> or<strong>de</strong>nes <strong>de</strong> trabajos. ................................ 9811


Capítulo 1: IntroducciónEn los manuales y guías para la elaboración <strong>de</strong> proyectos, difundidos por las<strong>de</strong>pen<strong>de</strong>ncias <strong>de</strong> la Organización <strong>de</strong> las Naciones Unidas (ONU), el Banco Mundial(BM) y el Banco Interamericano <strong>de</strong> Desarrollo (BID), aparecen, entre otras, lassiguientes <strong>de</strong>finiciones <strong>de</strong> proyecto:1. “Proyecto es el conjunto <strong>de</strong> antece<strong>de</strong>ntes que permiten estimar ventajas y<strong>de</strong>sventajas económicas <strong>de</strong> la asignación <strong>de</strong> insumos para la producción <strong>de</strong><strong>de</strong>terminados bienes y servicios" (ONU, 1973).2. “Un proyecto es una empresa planificada consistente en un conjunto <strong>de</strong>activida<strong>de</strong>s interrelacionadas y coordinadas con el fin <strong>de</strong> alcanzar objetivosespecíficos <strong>de</strong>ntro <strong>de</strong> los límites <strong>de</strong> un presupuesto y un periodo <strong>de</strong> tiempodados" (ONU, 1984).3. “Proyecto es una empresa que cuenta con recursos financieros, materiales yhumanos y está orientada a la consecución <strong>de</strong> un objetivo en un periodo <strong>de</strong>tiempo dado" (BID, 1984).Pasando a algunas <strong>de</strong> las <strong>de</strong>finiciones propuestas por los especialistas, en losmanuales sobre diseño, formulación y <strong>de</strong>sarrollo <strong>de</strong> proyectos, se encuentranalgunas como las siguientes:4. “Proyecto es la menor unidad <strong>de</strong> activida<strong>de</strong>s que se pue<strong>de</strong>n planear, analizary administrar aisladamente” (Salomón y Edin).5. “Proyecto es un conjunto <strong>de</strong> activida<strong>de</strong>s que tiene un principio y un fin<strong>de</strong>finibles y que se pue<strong>de</strong> administrar aisladamente para alcanzar el objetivopor el cual dicha actividad fue instituida” (R. L. Martino: Administración ycontrol <strong>de</strong> proyectos, 1970).6. “Proyecto es un proceso cuyo objetivo es transformar una i<strong>de</strong>a en un productoterminado, constituido por bienes y servicios que serán los medios paraproducir otros bienes o servicios... Por lo general un proyecto nace <strong>de</strong> unainstitución existente que quiere hacer una modificación cualitativa ocuantitativa <strong>de</strong> la producción <strong>de</strong> su sistema <strong>de</strong> régimen. También pue<strong>de</strong> ser12


que el proyecto consista en crear una institución nueva, pero siempre habráun organismo que formula y ejecuta el proyecto que es su entidad madre”(Luis Melgar y José Lefiero, 1979).7. “El proyecto representa la unidad más operativa <strong>de</strong>ntro <strong>de</strong>l proceso <strong>de</strong>planificación y constituye el eslabón final <strong>de</strong> dicho proceso. Está orientado ala producción <strong>de</strong> <strong>de</strong>terminados bienes o a prestar servicios específicos”(A.Pichardo, 1984).8. Algunos autores consi<strong>de</strong>ran que “un proyecto es un instrumento para laacción que presupone la sistematización y or<strong>de</strong>namiento <strong>de</strong> una serie <strong>de</strong>activida<strong>de</strong>s específicas y la asignación <strong>de</strong> responsabilida<strong>de</strong>s para alcanzar<strong>de</strong>terminados objetivos".9. Otros autores, como Espinoza y An<strong>de</strong>r-Egg (1989) <strong>de</strong>finen al proyecto enrelación con un programa específico: es "la unidad menor en que se pue<strong>de</strong>nseparar las acciones concurrentes para el cumplimiento <strong>de</strong> los objetivos ymetas <strong>de</strong> un programa, que involucra un estudio específico que permiteestimar las ventajas o <strong>de</strong>sventajas <strong>de</strong> asignar recursos para la realización <strong>de</strong>dicha acción" (Espinoza, 1989). Por su parte An<strong>de</strong>r-Egg (1989) <strong>de</strong>fine alproyecto como un "<strong>de</strong>signio o pensamiento <strong>de</strong> ejecutar algo; cualquierprevisión, or<strong>de</strong>nación o pre<strong>de</strong>terminación que se hace para la ejecución <strong>de</strong>una obra u operación.10. “Componente o unidad más pequeña que forma parte <strong>de</strong> un programa.Conjunto <strong>de</strong> activida<strong>de</strong>s que se proponen realizar <strong>de</strong> una manera articuladaentre sí, con el fin <strong>de</strong> producir <strong>de</strong>terminados bienes o servicios capaces <strong>de</strong>satisfacer necesida<strong>de</strong>s o resolver problemas”.El concepto <strong>de</strong> proyecto ha evolucionado particularmente durante el presente siglo,pasando <strong>de</strong>l campo <strong>de</strong> la ingeniería al <strong>de</strong> la planeación <strong>de</strong>l <strong>de</strong>sarrollo económico ysocial, <strong>de</strong> modo que en la instrumentación <strong>de</strong> planes y programas <strong>de</strong> <strong>de</strong>sarrollo losproyectos constituyen un elemento necesario e imprescindible.En un intento <strong>de</strong>síntesis integradora <strong>de</strong> las <strong>de</strong>finiciones presentadas por los especialistas, “unproyecto es un proceso que <strong>de</strong>scribe la i<strong>de</strong>a dinámica <strong>de</strong> una acción organizada13


para lograr <strong>de</strong>terminados fines u objetivos, que se pue<strong>de</strong> planear, administrar yevaluar por sí mismo, constituyendo un ámbito <strong>de</strong> gestión peculiar que no pue<strong>de</strong> serconfundido con el <strong>de</strong> la entidad madre o <strong>de</strong>l sistema en don<strong>de</strong> surge”. Pero noparece conveniente admitir que un proyecto se pueda planear y administraraisladamente <strong>de</strong> cualquier referencia institucional o <strong>de</strong> <strong>de</strong>terminados planes yprogramas que operan en el contexto en que ese proyecto surge y se <strong>de</strong>sarrolla.Un proyecto constituye un campo <strong>de</strong> acción, <strong>de</strong> responsabilidad y <strong>de</strong> gestión propioque, por su naturaleza peculiar, requiere <strong>de</strong> suficiente <strong>de</strong>legación por parte <strong>de</strong> laautoridad institucional y que no pue<strong>de</strong> confundirse con los niveles ordinarios <strong>de</strong>autoridad institucional.En congruencia con el concepto <strong>de</strong> planeación propuesto, un proyecto se podría<strong>de</strong>finir como “la <strong>de</strong>scripción y <strong>de</strong>sarrollo <strong>de</strong> un proceso metodológico clasificado enetapas y activida<strong>de</strong>s, que permite organizar la resolución <strong>de</strong> un problema relevante ycomplejo, orientando los procesos <strong>de</strong> cambio constante, mediante la instrumentación<strong>de</strong> estrategias apropiadas, <strong>de</strong>ntro <strong>de</strong> un límite <strong>de</strong> tiempo y espacio <strong>de</strong>terminado ycon los recursos a<strong>de</strong>cuados”.1.1. Antece<strong>de</strong>ntesEl mundo en la actualidad está cambiando a velocida<strong>de</strong>s inusitadas y lasorganizaciones <strong>de</strong>ben reaccionar rápidamente abordando proyectos que las ayu<strong>de</strong>na alcanzar nuevos objetivos. La administración <strong>de</strong> proyectos provee unametodología or<strong>de</strong>nada, sistemática y rigurosa para administrar los proyectos queenfrentan cada día las empresas y sus administradores. El a<strong>de</strong>cuado conocimiento yaplicación <strong>de</strong> estas metodologías permiten crear un ambiente <strong>de</strong> trabajo propicio ycon menor variabilidad para obtener resultados efectivos.Varios estudios realizados por especialistas sostienen que sólo el 20% <strong>de</strong> losproyectos finalizan obteniendo el objetivo planteado, en el tiempo y con los recursosestimados. Esta problemática se da en todo tipo <strong>de</strong> proyectos, y está particularmenteacentuada en proyectos tecnológicos y que no constan con una a<strong>de</strong>cuada14


documentación procedimental.De esto último surge entonces que a<strong>de</strong>más <strong>de</strong> los costos directos, que sonfácilmente contabilizables, existen los costos indirectos - que seguramente sonmucho más importantes que lo que pueda suponerse - <strong>de</strong> no ser así entonces lafalla estuvo en promover un proyecto que no aportaba <strong>de</strong>masiado valor a laorganización. Esto fundamentalmente impacta en una baja <strong>de</strong> productividad <strong>de</strong>algún área <strong>de</strong> la organización y en un COSTO <strong>de</strong> OPORTUNIDAD al no disponer <strong>de</strong>un resultado que seguramente será un eslabón importante para la ca<strong>de</strong>na <strong>de</strong>factores críticos <strong>de</strong> éxito previstos en la estrategia global.Esto conlleva a darle una importancia superior a los motivos que generan estosfracasos y <strong>de</strong>sarrollar lineamientos para corregirlos. En Ecuador particularmente, ydada la situación <strong>de</strong> los últimos años, muchos proyectos <strong>de</strong> Telecomunicaciones hanseguido la misma suerte que la estadística general anota. La permanente búsquedaen reducir los costos <strong>de</strong> RRHH, más que cualquier otro, han llevado a las empresasa generar proyectos <strong>de</strong> alta criticidad y exigencia con el fin <strong>de</strong> que los mismosaporten algún beneficio tangible a la organización que necesita aumentar ingresos ybajar costos, pero al introducir esa baja <strong>de</strong> costos <strong>de</strong> recursos, casualmente en lasárea que <strong>de</strong>ben ejecutar dichos proyectos, se generan dos malos escenarios; o setiene gente preparada para li<strong>de</strong>rar dichos proyectos pero con sobrecargada <strong>de</strong>trabajo lo cual implica no po<strong>de</strong>r ejecutarlos como se <strong>de</strong>be y por lo tanto se ingresaen el 80% o se recambia personal con menor costo y menor experiencia para lafunción, lo cual produce el mismo resultado y en algunos casos “peores a loimaginado”.En un aspecto más conceptual, la dirección o li<strong>de</strong>razgo <strong>de</strong> proyectos, no ha tenido lacategorización <strong>de</strong> una especialidad en sí misma, lo cual implica que se improvisamuchísimo.Este escenario, conduce al replanteamiento en la forma <strong>de</strong> cómo seejecutan los proyectos. Se necesitan más lí<strong>de</strong>res, para conseguir concretar losproyectos <strong>de</strong> cambio en las organizaciones <strong>de</strong> manera tal <strong>de</strong> aumentar la15


productividad <strong>de</strong> las mismas.1.2. Justificación <strong>de</strong>l Problema <strong>de</strong> InvestigaciónEn lo referente al diseño y ejecución <strong>de</strong> proyectos <strong>de</strong> telecomunicaciones, el factorcrítico es el empleo <strong>de</strong> metodologías. Muchasorganizaciones pequeñas y medianasel factor brilla por su ausencia, y en muchas organizaciones gran<strong>de</strong>s el factor existey en general se trabaja bien, pero no son pocos los casos en los cuales – engeneralpor falta <strong>de</strong> tiempo – lametodología termina siendo utilizada como una máscaraformal para el cumplimiento <strong>de</strong> normas y etapas, y no como lo que verda<strong>de</strong>ramentees el eje <strong>de</strong>l proyecto tomando el contenido <strong>de</strong> la metodología y no solo la forma.Uno <strong>de</strong> los puntos en los cuales es muy débil la utilización <strong>de</strong> metodologías, es eldiseño <strong>de</strong> la estructura <strong>de</strong> un proyecto y en la estimación <strong>de</strong> esfuerzos y tiempos. Atal efecto, lo que se propone en esta tesis es una estructura jerárquica basada en elconcepto <strong>de</strong> costo por actividad, entendiéndosepor costo no solo lo referente aldinero. Esto permite disponer <strong>de</strong> una herramienta <strong>de</strong> tablero <strong>de</strong> control que no solomi<strong>de</strong> el avance permanente <strong>de</strong>l proyecto sino que permite evaluar impactos en loscambios que se produzcan y en las estimaciones <strong>de</strong> los tiempos.Llevar a este punto a los proyectos <strong>de</strong> Mantenimiento no es una tarea sencilla, paralograrlo el proyecto <strong>de</strong>be iniciar con una estructura homogénea, que <strong>de</strong>be medir enforma estandarizada tamaños <strong>de</strong> productos a <strong>de</strong>sarrollar, a partir <strong>de</strong> lo cual sepodrán realizar estimaciones coherentes basadas en indicadores <strong>de</strong> productividad.Una <strong>de</strong> las claves es disponer, o comenzar a construir, una base <strong>de</strong> conocimiento <strong>de</strong>la organización, que se alimentará con las experiencias <strong>de</strong> proyectos que se vayan<strong>de</strong>sarrollando, lo que <strong>de</strong>nominamos “plantillas”.En lo que se refiere a problemas humanos, es crítico, y así lo expresan los números.Las metodologías formales son <strong>de</strong> fundamental importancia, para la tarea <strong>de</strong> loslí<strong>de</strong>res <strong>de</strong> proyectos, pero no siempre resultan suficientes para lograr el éxito en el16


cumplimiento <strong>de</strong>l objetivo previsto.1.3. Definición <strong>de</strong>l Problema <strong>de</strong> investigación:Necesidad <strong>de</strong> contar con una herramienta <strong>de</strong> control basada en TIC´s, para medir elavance permanente <strong>de</strong> proyectos y que inmediatamente permita evaluar impactosen los cambios que se produzcan, así como también las estimaciones en los tiempos<strong>de</strong> ejecución.1.4. Hipótesis:La posibilidad <strong>de</strong> implementación <strong>de</strong> un sistema con aplicaciones con licenciaGNU/GPL y basado en un mo<strong>de</strong>lo <strong>de</strong> clases <strong>de</strong> objetos programado en PHP 5.2.6,cuyo motor <strong>de</strong> WorkFlow sea diseñado, codificado y embebido en una Base <strong>de</strong>Datos MySQL 5 que permita gestionar las etapas <strong>de</strong> ejecución y control <strong>de</strong>cualquier tipo <strong>de</strong> proyecto, hasta su finalización o cierre.1.5. Objetivos1.5.1. Objetivo General:Implementación <strong>de</strong> un sistema GNU/GPL basado en un mo<strong>de</strong>lo <strong>de</strong> clases <strong>de</strong> objetosprogramado en PHP 5.2.6, cuyo motor <strong>de</strong> WorkFlow sea diseñado, codificado yembebido en una Base <strong>de</strong> Datos MySQL 5 permitiendo gestionar las etapas <strong>de</strong>ejecución y control <strong>de</strong> cualquier tipo <strong>de</strong> proyecto <strong>de</strong> telecomunicaciones, hasta sufinalización o cierre.1.5.2. Objetivos Específicos Estudio <strong>de</strong>l marco teórico y conceptual <strong>de</strong>l tema <strong>de</strong> investigación, así como <strong>de</strong>lestado <strong>de</strong>l arte <strong>de</strong>l mismo. Estudio <strong>de</strong> las tecnologías necesarias y factibles para la construcción <strong>de</strong>lsistema que se propone. Realizar el diseño y mo<strong>de</strong>lación <strong>de</strong>l sistema. Realización <strong>de</strong> pruebas al sistema.17


Se preten<strong>de</strong>, finalmente obtener un producto <strong>de</strong> software relacionado a lastelecomunicaciones a la altura <strong>de</strong> las exigencias actuales <strong>de</strong> producción <strong>de</strong> softwareen la sociedad actual, acor<strong>de</strong> con los estándares internacionales <strong>de</strong> catalogación y<strong>de</strong> diseño.1.6. Metodología <strong>de</strong> Investigación:Métodos Teóricos:1. Histórico-Lógicos: Para el análisis <strong>de</strong>l objeto <strong>de</strong> estudio y susantece<strong>de</strong>ntes históricos, y las ten<strong>de</strong>ncias al <strong>de</strong>sarrollo <strong>de</strong> la aplicación contecnología que se propone.2. Análisis-Síntesis: Para analizar y sintetizar toda la información relacionadacon el tema <strong>de</strong> la investigación y en la <strong>de</strong>terminación <strong>de</strong> los hechos que hanservido <strong>de</strong> base para fundamentar la necesidad <strong>de</strong>l sistema que se propone.3. Hipotético Deductivo: Para la elaboración <strong>de</strong> la hipótesisy <strong>de</strong>ducir <strong>de</strong> ellaconsecuencias directamente verificables en la realidad.4. Mo<strong>de</strong>lación: Elaborar una aplicación con tecnología <strong>de</strong> programación Webque permita el seguimiento y evaluación <strong>de</strong> proyectos <strong>de</strong> telecomunicaciones.Métodos empíricos:1. Observación: Para diagnosticar la situación actual que presenta elseguimiento y evaluación <strong>de</strong> proyectos <strong>de</strong> telecomunicaciones.2. Encuestas y Entrevistas: Realizadas para el diagnóstico y la validación porcriterio <strong>de</strong> los especialistas.3. Análisis documental: Para la caracterización y <strong>de</strong>sarrollo <strong>de</strong> la tesis y laelaboración <strong>de</strong> la Aplicación.Capítulo 2: Tecnologías <strong>de</strong> programación Web.2.1. Introducción a PHP.La programación en PHP se inicia como simple lenguaje <strong>de</strong> scripts, para cadaversión siempre se incluían algunas nuevas caraterísticas que orientaban la18


programación mediante objetos. De tal modo que con la aparición <strong>de</strong> PHP 5, losingenieros <strong>de</strong>sarrolladores <strong>de</strong> páginas webs PHP orientada a objetos vieron comouna verda<strong>de</strong>ra plataforma <strong>de</strong> programación por su eficaz y potente engine Zend 2.0,el cual permite mayor rapi<strong>de</strong>z y eficiencia en la ejecución <strong>de</strong> cualquier tipo <strong>de</strong>programa.A la hora <strong>de</strong> programar se pue<strong>de</strong> pensar en objetos como entida<strong>de</strong>s que maneja elprograma y que funcionan <strong>de</strong> una <strong>de</strong>terminada manera. Estos objetos poseen<strong>de</strong>terminadas características (variables) y con ellos se pue<strong>de</strong>n realizar diversastareas (funciones). En un esquema <strong>de</strong> programación orientada a objetos, lasvariables y las funciones no son consi<strong>de</strong>rados como elementos in<strong>de</strong>pendientes sinocomo componentes <strong>de</strong> una misma entidad: el objeto; tal como ocurre con los objetos<strong>de</strong> la vida real. (Cobo, Gómez, Pérez, & Rocha, 2005)2.2. Características <strong>de</strong> PHP.La herramienta <strong>de</strong> programación PHP posee varias características que les hapermitido mantenerse como una tecnología confiable y eficiente, para lo cual existentres campos generales en PHP usados como scripts: Scripts en la parte <strong>de</strong>l servidor.Es el campo más tradicional y el principal campo <strong>de</strong> trabajo, necesita trescosas para que su operatividad: (1) Parseador PHP (CGI ó módulo), (2) unservidor web y (3) un navegador. Scripts en línea <strong>de</strong> comandos.Para este script solo se requiere usar el parseador PHP, siendo i<strong>de</strong>al su usopara scripts ejecutados regularmente <strong>de</strong>s<strong>de</strong> cron (Unix) ó el Planificador <strong>de</strong>tareas (Windows 7). Estos scripts también pue<strong>de</strong>n ser usados para tareassimples <strong>de</strong> procesado <strong>de</strong> texto. Escribir aplicaciones gráficas clientes.19


Aunque existen plataformas <strong>de</strong> programación gráficas más robustas, que paralas aplicaciones PHP no es consi<strong>de</strong>rada robusta en gráficas, pero se pue<strong>de</strong>usar algunas características avanzadas en programas clientes, como PHP-GTK 1 para escribir dichos programas.Los módulos <strong>de</strong> funciones proporcionan a PHP muchas <strong>de</strong> sus útiles prestaciones,aunque el motor <strong>de</strong> procesamiento engine Zend 2.0 se encarga <strong>de</strong> analizar, traduciry ejecutar el código entrante. PHP se compila en el momento que se ejecuta, en elservidor, por lo que evita tener que compilar previamente el código especifico paracada tipo <strong>de</strong> equipo en el que se espera que sea ejecutado.Permite modularizar una página web en varios módulos PHP <strong>de</strong>sarrollados en formain<strong>de</strong>pendiente, realizando “inclu<strong>de</strong>s” <strong>de</strong>ntro <strong>de</strong> un script PHP, <strong>de</strong> esta forma sepue<strong>de</strong> a<strong>de</strong>más <strong>de</strong>sarrollarse en PHP componentes rehusables que luego se utilizanen otras páginas o incluso en otros sitios web. Una forma común <strong>de</strong> trabajo usandoPHP para generar sitios dinámicos es <strong>de</strong>finir “templates 2 ” en los cuales se divi<strong>de</strong> lapágina en “zonas” o “módulos” que serán <strong>de</strong>sarrollados.La plataforma PHP opera bajo los sistemas operativos principales <strong>de</strong>l mercado:Linux, Unix, Windows, Mac OS X, RISC OS. Asimismo, compatible con la mayoría<strong>de</strong> servidores web <strong>de</strong> hoy en día (Apache, Microsoft Internet Information Server,Personal Web Server, Oreilly Website Pro Server y muchos otros). Varios módulos<strong>de</strong> PHP se encuentran disponibles para la mayoría <strong>de</strong> los servidores, utilizado comoun procesador CGI, en otras palabras PHP tiene la libertad <strong>de</strong> operar en cualquiersistema operativo y el servidor web que <strong>de</strong>see.Otra característica <strong>de</strong> PHP es el gran número <strong>de</strong> funcionalida<strong>de</strong>s que presenta,entre las principales se pue<strong>de</strong> citar las siguientes:1 PHP – GTK.- Es un proyecto cuyo objetivo es probar que PHP también pue<strong>de</strong> ser usadopara crear aplicaciones gráficas.2 Templates.- Diseños o interfaces que se implementa <strong>de</strong> forma fácil en un sitio web oCMS, tambien son conocidas como plantillas.20


• Funciones <strong>de</strong> encriptación <strong>de</strong> datos• Funciones para manejo <strong>de</strong> FTP• Funciones <strong>de</strong> hashing• Generación dinámica <strong>de</strong> imágenes• Manejo <strong>de</strong> cuentas <strong>de</strong> mail IMAP y POP3• Funciones <strong>de</strong> networking usando sockets• Serialización <strong>de</strong> estructuras <strong>de</strong> datos• Manejo <strong>de</strong> sesiones.2.3. Funcionalidad <strong>de</strong> PHPEn la figura 2.1 se muestra el funcionamiento <strong>de</strong> PHP para <strong>de</strong>terminada aplicaciónweb, don<strong>de</strong> se <strong>de</strong>ben cumplir ciertos requisitos básicos, tales como: El servidor solicita páginas web <strong>de</strong> cualquier formato. I<strong>de</strong>ntifica si es una página con extensión .php. PHP reconocible para convertirse en código HTML. Página HTML se envía al usuario (PHP cuya sintaxis sea correcta).Figura 2. 1: Funcionamiento <strong>de</strong> PHP21


Fuente: http://www.<strong>de</strong>sarrolloweb.com/articulos/392.php2.4. PHP orientado a Objetos.La ten<strong>de</strong>ncia actual <strong>de</strong> los lenguajes es la programación orientada a objetos (POO)(Lavin, 2006). Des<strong>de</strong> la versión 3 <strong>de</strong> PHP se introducen un conjunto <strong>de</strong> estructuraspara llegar al afamado paradigma, claro está que en esta versión la POO era muysimplista y no fue hasta la próxima versión, PHP 4, que se llega a perfeccionarnotablemente. A causa <strong>de</strong> una <strong>de</strong>manda popular para perfeccionar el soporteorientado a objetos, se rediseñó completamente el mo<strong>de</strong>lo <strong>de</strong> objetos que se veníasiguiendo y con esto nació el actual PHP 5. Se adicionó una cantidad consi<strong>de</strong>rable<strong>de</strong> ventajas y cambios en el comportamiento <strong>de</strong> los objetos que conforman la base<strong>de</strong>l lenguaje.Al igual que ocurre en la vida real, los objetos se agrupan en familias o clases <strong>de</strong>objetos que comparten características comunes. Así por ejemplo, dos clientesdiferentes tendrán las mismas variables, aunque lógicamente con diferentes valorespara cada uno <strong>de</strong> ellos, y podrán realizar las mismas acciones; por tanto, serían dosobjetos <strong>de</strong> una misma clases. La POO se basa en <strong>de</strong>finir clases, crear objetos <strong>de</strong>esas clases y realizar acciones con ellos. La clase establecerá las característucas(variables y métodos) que compartirán todos los objetos <strong>de</strong> la misma; en estesentido la clase pue<strong>de</strong> enten<strong>de</strong>rse como un prototipo para lo objetos. (Cobo, Gómez,Pérez, & Rocha, 2005)El mayor problema <strong>de</strong> la programación orientada a objetos (POO) en las versiones 3y 4 <strong>de</strong> PHP se basaba en que, cada vez que se asignaba una variable que conteníaun objeto a otra variable, o se pasaba un objeto por parámetro en una función, serealizaba una copia <strong>de</strong> ese objeto y quedaba a disposición <strong>de</strong>l programa en la nuevavariable o parámetro. 32.4.1. ObjetosLa primera pregunta que salta a la vista es: ¿Qué es un objeto? (Gilmore, 2008) y3 Recuperado <strong>de</strong> la página web: http://www.<strong>de</strong>sarrolloweb.com/articulos/1697.php22


muchos se respon<strong>de</strong>rán que son entida<strong>de</strong>s tangibles que tienen un conjunto <strong>de</strong>… ymi siguiente pregunta es la que sigue: ¿Un sueño es un objeto? Asiento con lacabeza ante todos y respondo yo mismo. Un sueño perfectamente pue<strong>de</strong> ser unobjeto, porque un sueño tiene propieda<strong>de</strong>s, tiene un comportamiento y a<strong>de</strong>másalre<strong>de</strong>dor <strong>de</strong> él suce<strong>de</strong>n un conjunto <strong>de</strong> eventos que respon<strong>de</strong>n a comportamientos<strong>de</strong> los <strong>de</strong>más objetos existentes en el entorno en que se encuentra. Aterricemosahora a la realidad <strong>de</strong>l mundo y <strong>de</strong>finamos a cualquier otro objeto.Las aplicaciones orientadas a objeto frecuentemente poseen varios objetos queinteractúan entresi. (Lavin, 2006) Don<strong>de</strong> el objeto es una entidad <strong>de</strong>l problema cuyoi<strong>de</strong>ntificador es único, mismo que tiene un conjunto <strong>de</strong> propieda<strong>de</strong>s <strong>de</strong>nominadasatributos, que mediante los atributos mejora su comportamiento. Dichos atributosson variables básicas que <strong>de</strong>scriben las características <strong>de</strong>l objeto, mientras que losmétodos son un conjunto <strong>de</strong> funciones que solucionan los requerimientos <strong>de</strong>lsistema, cuyas responsabilida<strong>de</strong>s <strong>de</strong>l objeto para con los <strong>de</strong>más se encuentran en elsistema.2.4.2. ClasesUna clase es un plantilla para los objetos que intervienen en un sistema, es el tipo <strong>de</strong>dato <strong>de</strong> los objetos que son instancias <strong>de</strong> ella. Las clases en programación orientadaa objetos son <strong>de</strong>finiciones <strong>de</strong> los elementos que forman un sistema, en este caso,<strong>de</strong>finiciones <strong>de</strong> los objetos que van a intervenir en nuestros programas. Es a<strong>de</strong>másla que <strong>de</strong>fine los atributos y métodos que tendrán los objetos.El diagrama que se muestra en la figura 2.2 representa a la clase persona, que tienecomo atributo la variable $name y como métodos el setNombre($name) y elgetNombre(). El primero se utiliza para inicializar o cambiar el atributo $name <strong>de</strong> unapersona en específico y el segundo <strong>de</strong>vuelve al programador el valor <strong>de</strong> ese mismoatributo.23


Figura 2. 2: Diagrama <strong>de</strong> la clase persona.Es necesario aclarar que basado en el problema que estemos enfrentando secrearán los objetos que intervendrán como solución, especificamente crearemos dosinstancias <strong>de</strong> Persona, un objeto pudiera ser persona1 y otro persona2, que se<strong>de</strong>talla <strong>de</strong> la siguiente manera:24


2.4.3. Declaración <strong>de</strong> clases.Declararuna clase, es bastante simple, usando primeramente la palabra reservadaclass, seguido <strong>de</strong> un i<strong>de</strong>ntificador o nombre <strong>de</strong> la clase y por último una lista con losatributos y métodos que tendrán los objetos instancias <strong>de</strong> la clase. (Gosselin,Kokoska, & Easterbrooks, 2010)classMyClass{… // Lista <strong>de</strong> atributos…… // Lista <strong>de</strong> métodos};Se pue<strong>de</strong> notar que antes <strong>de</strong> hacer la <strong>de</strong>claración <strong>de</strong>l atributo $name, se usó lapalabra reservada private. Más a<strong>de</strong>lante se explicará en <strong>de</strong>talle esta palabra, perobásicamente significa que solo los métodos <strong>de</strong> esta clase pue<strong>de</strong>n acce<strong>de</strong>r al valor<strong>de</strong> $name, esto obliga a que todas las instancias <strong>de</strong> la clase Persona a usar losmétodos setNombre($name) y getNombre() para po<strong>de</strong>r modificar y recibir lainformación <strong>de</strong>l atributo.2.4.4. La palabra reservada new y los constructoresLa palabra reservada new se utiliza para crear instancias <strong>de</strong> una clase <strong>de</strong>terminada(objetos). En el ejemplo visto anteriormente se creo una instancia persona1 <strong>de</strong> laclase Persona <strong>de</strong> la siguiente forma: $persona1 = new Persona();.La palabrareservada new crea un nuevo objeto que contiene una copia <strong>de</strong> los atributos <strong>de</strong> laclase y se llama entonces al constructor que fue <strong>de</strong>finido. El constructor <strong>de</strong> una clasees un método llamado __construct(), se ejecuta automáticamente cuando se crea unobjeto con new. Notemos que pue<strong>de</strong> existir o no la <strong>de</strong>claración explicita en la clase,siempre se llama a un constructor, aunque sea el constructor vacío. Ellos sonfunciones como las tratadas en temas anteriores, que pue<strong>de</strong>n tener uno o másargumentos. En PHP se utiliza también el nombre <strong>de</strong> la clase como método para25


<strong>de</strong>finir el constructor como se hace en C++, pero es buena practica <strong>de</strong> programaciónel uso <strong>de</strong> __construct() en nuestras aplicaciones. Aclarar que son dos guiones bajosantes <strong>de</strong> la palabra "construct". (Gilmore, 2008)Reescribamos entonces el ejemplo anterior con un constructor en el cual pasaremosel atributo como parámetro:


?>Pudiéramos haber eliminado la función setNombre($name), pero en algún momentola necesitaremos para los objetos que necesiten cambiarse el nombre por una razónu otra.2.4.5. Los <strong>de</strong>structores.Como su nombre lo indica, los <strong>de</strong>structores son las funciones que <strong>de</strong>struyen losobjetos, es <strong>de</strong>cir, hacen la función contraria a los constructores. Estos se llaman <strong>de</strong>forma automática cuando se quiere <strong>de</strong>struir o liberar a un objeto (cuando no senecesitan más referencias al objeto). PHP al igual que otros lenguajes se encarga <strong>de</strong>la liberación <strong>de</strong> los recursos al final <strong>de</strong> cada llamada, por lo cual la importancia <strong>de</strong>los <strong>de</strong>structores pier<strong>de</strong> en alguna medida el sentido para los cuales fueron creados.No por esto <strong>de</strong>jan <strong>de</strong> ser necesarios para liberar la memoria <strong>de</strong> algunos recursosutilizados o para guardar información en el servidor que que<strong>de</strong> como constancia <strong>de</strong>ltrabajo con la aplicación (logging). La <strong>de</strong>finición <strong>de</strong> un <strong>de</strong>structor es tan simple comoadicionar una función __<strong>de</strong>struct()(Lavin, 2006) en nuestra clase:


$objeto = NULL;?>La salida <strong>de</strong>l ejemplo sería:Se creo un objeto <strong>de</strong> MyClassUn objeto <strong>de</strong> la clase MyClass se ha <strong>de</strong>struidoAl ejecutar la sentencia $objeto = NULL; se libera el único manipulador (handle) quetiene el objeto por tanto se llama al <strong>de</strong>structor correspondiente y el objeto <strong>de</strong>ja <strong>de</strong>existir.El momento exacto en que se llama al <strong>de</strong>structor no está garantizado en PHP,pue<strong>de</strong> ser unas sentencias <strong>de</strong>spués <strong>de</strong> haber realizado la última referencia al objetoque por lógica fue la referencia don<strong>de</strong> se libera al objeto <strong>de</strong> la memoria, por tanto esresponsabilidad <strong>de</strong>l programador tener en cuenta esta aclaración cuando realiza unaaplicación.2.4.6. Accediendo a los métodos y atributos a través <strong>de</strong> la variable $this.Cuando ejecutamos cualquier método <strong>de</strong> un objeto o acce<strong>de</strong>mos a uno <strong>de</strong> susatributos, se llama automáticamente a una variable que se <strong>de</strong>fine como parte <strong>de</strong> laclase por <strong>de</strong>fecto, $this. (Lavin, 2006) Está variable o atributo <strong>de</strong> la clase es unareferencia a sí misma. Para esto $this usa la notación . Se pudiera entoncesacce<strong>de</strong>r al atributo $name usando la siguiente sentencia, $thisname (nótese queno es necesario poner el signo <strong>de</strong> $ <strong>de</strong>lante <strong>de</strong>l atributo cuando se referencia <strong>de</strong>esta manera), <strong>de</strong> igual forma se acce<strong>de</strong> a cualquier método que se haya <strong>de</strong>finido,ejemplo: $thisgetNombre();2.4.7. Encapsulación.La clave <strong>de</strong>l paradigma POO es la encapsulación y la protección <strong>de</strong> acceso a losatributos y métodos <strong>de</strong> la clase. Los lenguajes orientados a objetos más comunespresentan tres palabras reservadas para restringir el acceso: public, protected yprivate. A partir <strong>de</strong> ahora po<strong>de</strong>mos utilizar los modificadores <strong>de</strong> acceso habituales <strong>de</strong>la POO. Estos modificadores sirven para <strong>de</strong>finir qué métodos y propieda<strong>de</strong>s <strong>de</strong> las28


clases son accesibles <strong>de</strong>s<strong>de</strong> cada entorno. La encapsulación, también llamada"ocultación <strong>de</strong> la información", esto asegura que los objetos no pue<strong>de</strong>n cambiar elestado interno <strong>de</strong> otros objetos <strong>de</strong> maneras inesperadas; solamente los propiosmétodos internos <strong>de</strong>l objeto pue<strong>de</strong>n acce<strong>de</strong>r a su estado. Cada tipo <strong>de</strong> objetoexpone una interfaz a otros objetos que especifica cómo otros objetos pue<strong>de</strong>ninteractuar con él. (Lavin, 2006)En el mo<strong>de</strong>lo objeto <strong>de</strong> PHP 3 o 4, se <strong>de</strong>finía con la palabra reservada var unatributo (miembro) <strong>de</strong> la clase, lo que es equivalente a public en PHP 5. Un ejemploque muestra el uso <strong>de</strong> estas palabras reservadas es el que sigue:classMyClass{public $attrpublico = “Atributo publico”;protected $attrprotegido = “Atributo protegido”;private $attrprivado = “Atributo privado”;functionmiMetodo(){//...}}$objeto = new MyClass();Definiciones <strong>de</strong> cada uno <strong>de</strong> los modificadores <strong>de</strong> acceso: public: Los miembros públicos <strong>de</strong> una clase se pue<strong>de</strong>n acce<strong>de</strong>r <strong>de</strong>s<strong>de</strong>cualquier lugar <strong>de</strong> la clase con la variante dada anteriormente:$thismiembropúblico y también las instancias <strong>de</strong> esa clase (objetos)utilizando la siguiente sentencia: $objetomiembropúblico. Es el nivel <strong>de</strong>acceso más permisivo. Sirve para indicar que el método o atributo <strong>de</strong> la clasees público. En este caso se pue<strong>de</strong> acce<strong>de</strong>r a ese atributo, para visualizarlo oeditarlo, por cualquier otro elemento <strong>de</strong> nuestro programa. Es el modificadorque se aplica por <strong>de</strong>fecto.29


protected: Este indica un nivel <strong>de</strong> acceso medio y un poco más especial quelos anteriores. Sirve para que el método o atributo sea público <strong>de</strong>ntro <strong>de</strong>lcódigo <strong>de</strong> la propia clase y <strong>de</strong> cualquier clase que here<strong>de</strong> <strong>de</strong> aquella don<strong>de</strong>está el método o propiedad protected. Es privado y no accesible <strong>de</strong>s<strong>de</strong>cualquier otra parte. Es <strong>de</strong>cir, un elemento protected es público <strong>de</strong>ntro <strong>de</strong> lapropia clase y en sus heredadas. La herencia la veremos más a<strong>de</strong>lante ytendremos ejemplos <strong>de</strong>l uso <strong>de</strong> este modificador. private: Es el nivel <strong>de</strong> acceso más estricto. Sirve para indicar que esavariable sólo se va a po<strong>de</strong>r acce<strong>de</strong>r <strong>de</strong>s<strong>de</strong> el propio objeto, nunca <strong>de</strong>s<strong>de</strong>fuera. Si intentamos acce<strong>de</strong>r a un método o atributo <strong>de</strong>clarado private <strong>de</strong>s<strong>de</strong>fuera <strong>de</strong>l propio objeto, obtendremos un mensaje <strong>de</strong> error indicando que noes posible acce<strong>de</strong>r a ese elemento.Po<strong>de</strong>mos pensar que para los atributos <strong>de</strong> una clase que se quieren acce<strong>de</strong>r <strong>de</strong>s<strong>de</strong>fuera <strong>de</strong> los objetos usamos el modificador <strong>de</strong> acceso public y para los que no sequieren acce<strong>de</strong>r <strong>de</strong>s<strong>de</strong> fuera, pues usar private. Hay que tener en consi<strong>de</strong>ración laimportancia <strong>de</strong>l modificador protected para los conceptos que estudiaremos enacápites posteriores.Pudiéramos poner un ejemplo para mostrar la utilización <strong>de</strong> los modificadores <strong>de</strong>acceso que hemos tratado:class Usuario{public $nombre;protected $sitio = “www.curso_php.com”;private $clave;functionencriptarClave($pass){//...}30


functiongetClave(){return $thisencriptarClave($thisclave);}}$objeto = new Usuario();print $objetonombre.” tiene la clave: ”.$thisgetClave();2.4.8. Métodos public, protected y private.Los modificadores <strong>de</strong> acceso pue<strong>de</strong>n ser usados para restringir también a losmétodos <strong>de</strong> las clases siguiendo las mismas reglas que se trataron anteriormente: public: Los métodos que pue<strong>de</strong>n ser invocados <strong>de</strong>s<strong>de</strong> cualquier lugar, <strong>de</strong>ntroo fuera <strong>de</strong> la clase. protected: Los que solo pue<strong>de</strong>n ser llamados <strong>de</strong>s<strong>de</strong> <strong>de</strong>ntro <strong>de</strong> la clase o <strong>de</strong>las clases que heredan <strong>de</strong> la principal. private: Los métodos que solo pue<strong>de</strong>n ser invocados <strong>de</strong>s<strong>de</strong> <strong>de</strong>ntro <strong>de</strong> lamisma clase o re<strong>de</strong>clarados en las clases hijas, por tanto cada clase tieneuna versión <strong>de</strong> lo que realiza este método.class Usuario{public $nombre;protected $sitio = “www.curso_php.com”;private $clave;privatefunctionencriptarClave($pass){//...}publicfunctiongetClave(){return $thisencriptarClave($thisclave);31


}}Cuando se obvia el modificador <strong>de</strong> acceso para los métodos se asume public,mientras que para los atributos no se asume ningún modificador, por lo que hay queaclarar en cada caso.2.4.9. Herencia.La herencia es uno <strong>de</strong> los mecanismos fundamentales <strong>de</strong> la programación orientadaa objetos. Por medio <strong>de</strong> la herencia, se pue<strong>de</strong>n <strong>de</strong>finir clases a partir <strong>de</strong> la<strong>de</strong>claración <strong>de</strong> otras clases. Las clases que heredan incluyen tanto los métodoscomo las propieda<strong>de</strong>s <strong>de</strong> la clase a partir <strong>de</strong> la que están <strong>de</strong>finidos. (Lavin,2006)Pensemos en un ejemplo <strong>de</strong> la vida real, en una universidad pudiéramos<strong>de</strong>finir la clase “Persona” que pue<strong>de</strong> incluir las características referentes a todo elpersonal que trabaja o estudia en la universidad (atributos <strong>de</strong> la clase), al igual quelas responsabilida<strong>de</strong>s o funcionalida<strong>de</strong>s que tienen (métodos <strong>de</strong> la clase), así comoi<strong>de</strong>ntificarse o moverse.Como es lógico el personal en una universidad es muy variado y cumplen diferentesfunciones. Tomemos por ejemplo a los profesores, a los estudiantes y a losdirigentes que son los más comunes. Todos tienen las mismas características quepue<strong>de</strong> tener una persona, pero en particular se diferencian en algunos aspectos. Portanto pue<strong>de</strong> existir en nuestro sistema una clase Estudiante, Profesor y otra claseDirigente que sean una herencia <strong>de</strong> la clase Persona <strong>de</strong>finida anteriormente. Laclase estudiante tendría atributos como: cantidad_asignaturas, semestre_que_cursay otros atributos a<strong>de</strong>más <strong>de</strong> los que hereda <strong>de</strong> la clase Persona, así comofuncionalida<strong>de</strong>s como recibir_evaluacion(), promedio_semestre() oacreditar_asignatura.Lo normal en sistemas <strong>de</strong> herencia es que las clases que heredan <strong>de</strong> otras incluyannuevas características y funcionalida<strong>de</strong>s, aparte <strong>de</strong> los atributos y métodos32


heredados. Pero esto no es imprescindible, <strong>de</strong> modo que se pue<strong>de</strong>n crear objetosque here<strong>de</strong>n <strong>de</strong> otros y no incluyan nada nuevo.La herencia organiza y facilita el polimorfismo y la encapsulación(Gilmore, 2008),permitiendo a los objetos ser <strong>de</strong>finidos y creados como tipos especializados <strong>de</strong>objetos preexistentes. Estos pue<strong>de</strong>n compartir (y exten<strong>de</strong>r) su comportamiento sintener que reimplementarlo. Esto suele hacerse habitualmente agrupando los objetosen clases y las clases en árboles o enrejados que reflejan un comportamientocomún. (Lavin, 2006)2.4.10. Sintaxis <strong>de</strong> la herencia.El mo<strong>de</strong>lo <strong>de</strong> objeto <strong>de</strong> PHP nos brinda una serie <strong>de</strong> estructuras para <strong>de</strong>finir laherencia en nuestras aplicaciones, <strong>de</strong> modo que se puedan crear jerarquías <strong>de</strong>objetos que heredan unos <strong>de</strong> otros. Realizamos un esquema mostrado por la figura2.3 tomando en cuenta el ejemplo que <strong>de</strong>finimos anteriormente, cuyo mo<strong>de</strong>lo espuramente ficticio y solo sirve como medio <strong>de</strong> enseñanza.classMi_Clase_HijaextendsClase_Padre{. . .}Figura 2. 3: Representación <strong>de</strong> la herencia entre las clases.class Persona33


{public $nombre;protected $sexo;protected $apellidos;function _contruct($name, $lastname, $sex = “Masculino”){$thisnombre = $name;$thisapellidos = $lastname;$thissexo = $sex;}privatefunction caminar(){print “De forma común”;}}class Estudiante extends Persona{private $cant_asignaturas;private $semestre_cursa;private $centro_proce<strong>de</strong>ncia;function __contruct($name, $last, $sex, $asig, $sem, $centro){parent::__construct($name, $last, $sex);$thiscant_asignaturas = $asig;$thissemestre_cursa = $sem;$thiscentro_proce<strong>de</strong>ncia = $centro;}//. . .functionpromSemestre(){//$suma_notas se calcula <strong>de</strong> alguna manera...34


}}return $suma_notas/$this->cant_asignaturas;$estudiante1 = new Estudiante(“Dayren”, “Martinez”, “F”, “PHP”,5, “IPUEC -Levantamiento Jucaral”);print “El estudiante: ”.$estudiante1nombre. “tiene un atributo público y es elnombre”;print “Sería un error tratar <strong>de</strong> acce<strong>de</strong>r a: ”.$estudiante1->sexo. “, así como hacerlopara ”.$estudiante1->sexo;Por tanto se pue<strong>de</strong> <strong>de</strong>cir que la herencia y los modificadores <strong>de</strong> acceso juegan unpapel fundamental en la construcción <strong>de</strong> la solución <strong>de</strong> las aplicaciones en PHP.2.4.11. Polimorfismo.Cuando se habla <strong>de</strong> polimorfismo, posiblemente estemos tratando uno <strong>de</strong> los logrosmás significativos <strong>de</strong> la POO. Queda <strong>de</strong>mostrado que con el uso <strong>de</strong> clases y laherencia se hace más fácil <strong>de</strong>scribir situaciones <strong>de</strong> la vida real, en vez <strong>de</strong> usar ungrupo <strong>de</strong> datos y funciones; suele ser más cómodo exten<strong>de</strong>r o agrandar losproyectos a través <strong>de</strong> la reutilización <strong>de</strong>l código que brinda la herencia. A<strong>de</strong>más paralograr una programación robusta y extensible es necesario el polimorfismo. (Williams& Lane, 2004)Polimorfismo es una palabra <strong>de</strong> origen griego que significa aproximadamente“muchas formas”, (poly = muchas, morphos = forma).Veamos el siguiente ejemplo:class Gato{function miau(){print “miau”;}35


}class Vaca{functionmuu(){print “Muu”;}}functionimprimirSonidoCorrecto($obj){if($objinstanceof Gato){$objmiau();}elseif($objinstanceof Vaca){$objmuu();}else{print “ERROR: El objeto no es un animal apropiado”;}print “”;}$obj1 = new Gato();$obj2 = new Vaca();imprimirSonidoCorrecto($obj1);imprimirSonidoCorrecto($obj2);La salida <strong>de</strong> este ejemplo:36


MiauMuuEs evi<strong>de</strong>nte ver que este ejemplo no es para nada extensible, si tratamos <strong>de</strong>adicionar más sonidos <strong>de</strong> animales tendremos que poner mas sentencias elseif yelse en la función imprimirSonidoCorrecto() chequeando que el objeto pasado porparámetros es instancia <strong>de</strong>l nuevo animal para po<strong>de</strong>r invocar el métodocorrespondiente.Este problema se resuelve con el uso <strong>de</strong>l polimorfismo y la herencia. Si sacamos <strong>de</strong>lproblema que pudiera existir una clase Animal y que <strong>de</strong> ella heredaran todos losanimalitos que queramos, entonces existirían una serie <strong>de</strong> características y enespecial una función común para todos los animales que <strong>de</strong>nominaríamos,emiteSonido(). Por tanto una clase hija <strong>de</strong> Animal pudiera ser la clase Gato, Vaca yotros.class Animal{functionemiteSonido(){print “ERROR: Impleméntalo en la clase hija”;}}class Vaca extends Animal{functionemiteSonido(){print “Muu”;}}class Gato extends Animal37


{functionemiteSonido(){print “Miau”;}}functionimprimirSonidoCorrecto($obj){if($objinstanceof Animal){$objemiteSonido();}else{print “ERROR: El objeto es <strong>de</strong> otro tipo”;}print “”;}$obj1 = new Gato();$obj2 = new Vaca();imprimirSonidoCorrecto($obj1);imprimirSonidoCorrecto($obj2);De igual manera se imprimiría:MiauMuuEn el transcurso <strong>de</strong> la clase apren<strong>de</strong>remos algunas sentencias que nos ayudaran aresolver un conjunto <strong>de</strong> problemas que todavía quedan en la POO que hemos visto38


hasta ahora. Conoceremos que significa, aunque sea evi<strong>de</strong>nte, la palabra reservadainstanceof, así como abstract, que obliga al programador a implementar la funciónen la clase hija, por ejemplo emiteSonido() <strong>de</strong> la clase Animal, <strong>de</strong>bería llevar <strong>de</strong>lantela palabra abstract, ya que no tiene sentido implementar una función cuando será reimplementadaen las clases hijas, porque a<strong>de</strong>más, los Animales no tienen un sonidoen común, sino que cada una <strong>de</strong> las especies emiten el suyo.2.4.12. El mo<strong>de</strong>lo objeto en PHP 5. Otras características.Existe un conjunto <strong>de</strong> funciones, operadores y palabras reservadas en PHP 5 que lohace alcanzar un nivel <strong>de</strong>terminante en el agrado <strong>de</strong> todo programador Web. En losinicios <strong>de</strong> PHP 3 se hicieron intentos <strong>de</strong> adicionar sintaxis orientada a objetos, pero<strong>de</strong>jaba mucho que <strong>de</strong>sear. No fue hasta la versión 4, cuando Zeev Suraski y AndiGutmans (personalida<strong>de</strong>s en la programación) reescriben el nuevo sistema (engine)que serviría <strong>de</strong> base para lograr una mayor velocidad, estabilidad y a<strong>de</strong>más unsistema que alar<strong>de</strong>aba <strong>de</strong> mejores posibilida<strong>de</strong>s y capacida<strong>de</strong>s que los existentes enel momento. Así y todo, todavía quedaba vigente el pobre mo<strong>de</strong>lo orientado a objetoque poseía PHP 3. No obstante comenzó a utilizarse con más fuerza el novedosomo<strong>de</strong>lo <strong>de</strong> PHP 4, hasta la llegada <strong>de</strong>l “mejoradísimo” mo<strong>de</strong>lo para la programaciónorientada a objetos que tiene PHP 5 y que vamos a ver sus principalescaracterísticas.2.4.13. Posibilidad <strong>de</strong> uso <strong>de</strong> interfaces.Las interfaces se utilizan en la POO para <strong>de</strong>finir un conjunto <strong>de</strong> métodos queimplementa una clase. Una clase pue<strong>de</strong> implementar varias interfaces o conjuntos<strong>de</strong> métodos. En la práctica, el uso <strong>de</strong> interfaces es utilizado muy a menudo parasuplir la falta <strong>de</strong> herencia múltiple <strong>de</strong> lenguajes como PHP o Java.Interfaces:Son clases que no tienen implementación. (Williams & Lane, 2004)• Sirven como tipos <strong>de</strong> otras clases.• Todos sus métodos son abstractos y todos sus atributos son final.• Una clase pue<strong>de</strong> implementar muchas interfaces.39


interfaceMostrar_en_pantalla{functionmostrar_en_pantalla();}class Circulo implementsMostrar_en_pantalla{functionmostrar_en_pantalla(){print “Mostrando el circulo...”;}}2.4.14. Operador instanceof.Se utiliza para saber si un objeto es una instancia <strong>de</strong> una clase <strong>de</strong>terminada, es unoperador que sustituye a la función is_a() <strong>de</strong> PHP 4 que se encargaba <strong>de</strong> chequearlas relaciones entre clases. (Lavin, 2006)if($objinstanceof Circulo){print “El objeto creado es una instancia <strong>de</strong> la clase Circulo”;}2.4.15. Métodos y clases final.En PHP 5 se pue<strong>de</strong> indicar que un método es final. Con ello no se permitesobrescribir ese método, en una nueva clase que lo here<strong>de</strong>. Si la clase es final, loque se indica es que esa clase no permite ser heredada por otra clase.classMetodo_Final{final functiongetNombreClase(){return __CLASS__;}40


}Este ejemplo <strong>de</strong>vuelve un error <strong>de</strong>bido al concepto <strong>de</strong> clase final:final classClase_Final{function metodo1(){//. . .}}classClase_ErroneaextendsClase_Final{//. . .}2.4.16. Atributos y métodos static.En PHP5 po<strong>de</strong>mos hacer uso <strong>de</strong> atributos y métodos static. Son las propieda<strong>de</strong>s yfuncionalida<strong>de</strong>s a las que se pue<strong>de</strong> acce<strong>de</strong>r a partir <strong>de</strong>l nombre <strong>de</strong> clase, sinnecesidad <strong>de</strong> haber instanciado un objeto <strong>de</strong> dicha clase.classMiClase{static $attrEstatico;static $attrInitEstatico = 0;staticfunctionmetodo_estatico(){print “Hola Universidad”;}}41


llamada a los atributosMiClase::$attrEstatico++;$result = MiClase::$attrInitEstatico + 2;echoMiClase::$attrEstatico. “”;echo $result. “”;MiClase::metodo_estatico();Este ejemplo imprime los siguientes valores:12Hola Universidad2.4.17. Clases y métodos abstractos.También es posible crear clases y métodos abstractos. Las clases abstractas no sepue<strong>de</strong>n instanciar, se suelen utilizar para heredarlas <strong>de</strong>s<strong>de</strong> otras clases que notienen porque ser abstractas. Los métodos abstractos no se pue<strong>de</strong>n llamar, seutilizan más bien para ser heredados por otras clases, don<strong>de</strong> no tienen porque ser<strong>de</strong>clarados abstractos. Hay que aclarar que las clases que incluyen métodosabstractos tienen que ser <strong>de</strong>claradas abstractas.abstractclassClase_abstracta{functionmostrarTexto(){print “Texto que muestra la clase abstracta”;}}/* Lo que viene a continuación es un error porque las clases abstractas no sepue<strong>de</strong>n instanciar */$obj = new Clase_abstracta(); // ERRORA continuación mostramos un ejemplo con la utilización <strong>de</strong> los métodos abstractos:42


abstractclass Figura{protected $x;protected $y;abstractfunction dibujar()functionsetCentro($x, $y){$thisx = $x;$thisy = $y;}}class Circulo extends Figura{function dibujar(){//. . .}}Como se pue<strong>de</strong>n fijar la función dibujar() <strong>de</strong> la clase Figura no se implementa porqueestamos en presencia <strong>de</strong> un método abstracto que será re implementado en lasclases hijas <strong>de</strong> Figura.2.4.18. Clases reservadas self:: y parent::PHP en su nueva versión agregó dos clases reservadas para mejorar el códigocuando <strong>de</strong> programación orientada a objeto se refiere. self:: es una clase que serefiere a los atributos y métodos estáticos, así como a las constantes <strong>de</strong>finidas. Esuna referencia a la clase que la utiliza. (Lavin, 2006) Por su lado parent:: se refiere a43


la clase ancestro o padre y se usa a menudo cuando se quiere invocar el constructoro un método <strong>de</strong> la clase padre.classClase_Padre{static nombre = “Padre”;function __construct(){print “Constructor en la clase: ”.self::$nombre.“ \n”;}}classClase_Hija{static nombre = “Hija”;function __construct(){printparent::__construct();print “Constructor en la clase: ”.self::$nombre.“ \n”;}}$obj = new Clase_Hija();El ejemplo tendría la siguiente salida:Constructor en la clase: PadreConstructor en la clase: Hija2.4.19. Constantes <strong>de</strong> clase.Se pue<strong>de</strong>n <strong>de</strong>finir constantes <strong>de</strong>ntro <strong>de</strong> la clase. Luego se pue<strong>de</strong>n acce<strong>de</strong>r dichasconstantes a través <strong>de</strong> la propia clase.classMiClase{const UCI = “Universidad <strong>de</strong> las Ciencias Informáticas”;44


const MIJ = “Ministerio <strong>de</strong> Justicia”;functionorganismo_Cuba(){printself::UCI;}functionorganismo_Venezuela(){printself::MIJ;}}printMiClase::UCI.” en conjunto con el ”.MiClase::MIJ.”.”;$obj = new MiClase();$objorganismo_Cuba;echo “”;$objorganismo_Venezuela;echo “”;El código imprime los siguientes mensajes:Universidad <strong>de</strong> las Ciencias Informáticas en conjunto con el Ministerio <strong>de</strong> Justicia.Universidad <strong>de</strong> las Ciencias InformáticasMinisterio <strong>de</strong> JusticiaEs buena práctica <strong>de</strong> programación escribir las constantes en mayúscula.2.4.20. Función __autoload().Es habitual que los <strong>de</strong>sarrolladores escriban un archivo por cada clase que realizan,como técnica para organizar el código <strong>de</strong> las aplicaciones. Por esa razón, a vecesresulta tedioso realizar los inclu<strong>de</strong> <strong>de</strong> cada uno <strong>de</strong> los códigos <strong>de</strong> las clases que seutilizan en un script. La función __autoload() sirve para intentar incluir el código <strong>de</strong>una clase que se necesite, y que no haya sido <strong>de</strong>clarada todavía en el código que seestá ejecutando.miclase.php45


general.incin<strong>de</strong>x.php2.4.21. Clonado <strong>de</strong> objetos.Si se <strong>de</strong>sea, se pue<strong>de</strong> realizar un objeto a partir <strong>de</strong> la copia exacta <strong>de</strong> otro objeto.Para ello se utiliza la instrucción clone. También se pue<strong>de</strong> <strong>de</strong>finir el método__clone() para realizar tareas asociadas con la clonación <strong>de</strong> un objeto.Muchasveces, al hacer una copia <strong>de</strong> un objeto, no nos interesa tener una copia exacta <strong>de</strong>lmismo, sino que lo que buscamos es un objeto <strong>de</strong>l mismo tipo que el copiado, perocon algunos recursos o características propias <strong>de</strong>l nuevo objeto, y no "copiadas" <strong>de</strong>l46


primero. Con el nuevo mo<strong>de</strong>lo <strong>de</strong> objetos <strong>de</strong> PHP 5, al hacer un $objeto2 = $objeto1;ya no estamos copiando un objeto, sino creando una nueva referencia al mismo, porlo que es necesario un mecanismo para copiar objetos, sin tener que llamar aloperador new. Aquí es dón<strong>de</strong> entra en juego, el método __clone().classClonable{public $variable;function __construct(){$this->variable = 'Variable Clonada';}}$objeto1 = new Clonable();$objeto2 = $objeto1->__clone();El método __clone() pue<strong>de</strong> ser sobre escrito para hacer lo que el usuario <strong>de</strong>see, y<strong>de</strong> esta manera, se pue<strong>de</strong> controlar mejor el clonado <strong>de</strong> objetos:classClonable{static $id = 0;public $nombre;public $apellidos;function __construct(){$thisid = self::$id++;}function __clone(){$thisnombre = $thatnombre;$thisapellidos = $thatapellidos;$thisid = self::$id++;47


}}$objeto1 = new Clonable();$objeto1nombre = “Lidiexy”;$objeto1apellidos = “Alonso Hernan<strong>de</strong>z”;$objeto2 = $objeto1->__clone();print $objeto2->id. "\n";print $objeto2->nombre. "\n";print $objeto2->apellidos. "\n";2.5. Bases <strong>de</strong> datos en la WebLas bases <strong>de</strong> datos permiten almacenar <strong>de</strong> una forma estructurada y eficiente todala información <strong>de</strong> un sitio Web (ver figura 2.4). . A<strong>de</strong>más el uso <strong>de</strong> bases <strong>de</strong> datos enla Web nos brinda una serie <strong>de</strong> ventajas tales como:o Dinamismo <strong>de</strong>l sitio Web.o Proporcionar información actualizada.o Facilitar la realización <strong>de</strong> búsquedas.o Disminuir los costes <strong>de</strong> mantenimiento.o Implementar sistemas <strong>de</strong> control <strong>de</strong> acceso.o Almacenar preferencias <strong>de</strong> los usuarios.Figura 2. 4: Esquema básico <strong>de</strong> un sitio Web soportado por bases <strong>de</strong> datos48


2.5.1. Bibliotecas <strong>de</strong> acceso a datos en PHPQuizás la característica más potente y <strong>de</strong>stacable <strong>de</strong> PHP es su soporte para unagran cantidad <strong>de</strong> bases <strong>de</strong> datos. Escribir una interfaz Web para mantener una base<strong>de</strong> datos es una tarea simple con PHP; ya que el mismo cuenta con un conjunto <strong>de</strong>módulos, extensiones, e incluso bibliotecas <strong>de</strong> clases para el acceso a múltiplestipos <strong>de</strong> bases <strong>de</strong> datos, las que se muestra en la tabla 2.1.Tabla 2. 1: Bases <strong>de</strong> datos Disponible para PHPAdabas D Ingres Oracle (OCI8)dBase InterBase OvrimosEmpress FrontBase PostgreSQLFilePro (read-only) mSQL SolidHyperwave Direct MS-SQL SybaseIBM DB2 MySQL VelocisInformix ODBC Unix dbmTambién se cuenta con una extensión DBX <strong>de</strong> abstracción <strong>de</strong> base <strong>de</strong> datos quepermite usar <strong>de</strong> forma transparente cualquier base <strong>de</strong> datos soportada por laextensión. Adicionalmente, PHP soporta ODBC (<strong>de</strong>l inglés Open DatabaseConnectivity Standard, en español Estándar Abierto <strong>de</strong> Conexión con Bases <strong>de</strong>Datos), así que pue<strong>de</strong> conectarse a cualquier base <strong>de</strong> datos que soporte talestándar. Entre ellas se incluyen los productos <strong>de</strong> Microsoft y muchos otros.Para la conexión a los diferentes tipos <strong>de</strong> bases <strong>de</strong> datos el PHP cuenta con unconjunto <strong>de</strong> extensiones <strong>de</strong> la biblioteca PECL (PHP Extension Community Library),las cuales se pue<strong>de</strong>n incluir directamente en la configuración <strong>de</strong>l PHP en el archivophp.ini o dinámicamente durante la ejecución <strong>de</strong>l script, es <strong>de</strong>cir <strong>de</strong>ntro <strong>de</strong>l código <strong>de</strong>una página php con la función dl(‘extension.dll’).En la versión <strong>de</strong> PHP para Windows las extensiones son DLLs que se incluyen almismo. Algunas <strong>de</strong> estas extensiones son: php_mysql.dllBiblioteca <strong>de</strong> funciones para el acceso a bases <strong>de</strong> datos MySQL.49


php_mysqli.dllBiblioteca <strong>de</strong> clases para el acceso a bases <strong>de</strong> datos MySQL php_pgsql.dllBiblioteca <strong>de</strong> funciones para el acceso a bases <strong>de</strong> datos PostgreSQL. php_mssql.dllBiblioteca <strong>de</strong> funciones para el acceso a bases <strong>de</strong> datos MS SQL Server. php_dbx.dllBiblioteca <strong>de</strong> funciones para el acceso a bases <strong>de</strong> datos <strong>de</strong> tipoo FrontBaseo Microsoft SQL Servero MySQLo ODBCo PostgreSQLo Sybase-CTo Oracle (oci8)o SQLite, entre otras2.6. Acceso a bases <strong>de</strong> datos MySQL en PHPMySQL es uno <strong>de</strong> los gestores más utilizados junto a PHP. Como se dijoanteriormente para el trabajo con MySQL el PHP tiene dos extensiones, php_mysqly php_mysqli, esta última como la versión mejorada con un mo<strong>de</strong>lo orientado aobjeto. Por lo que usaremos esta para el <strong>de</strong>sarrollo <strong>de</strong> la clase.La extensiónphp_mysqli contiene tres clases <strong>de</strong> objetos fundamentales, que son:mysqli: Representa una conexión entre PHP y la base <strong>de</strong> datos MySQL.mysqli_stmt: Representa una sentencia preparada.mysqli_result: Representa el resultado obtenido <strong>de</strong> la consulta hecha en la base<strong>de</strong> datos.De estas tres clases la primera y la última son las más usadas comúnmente. Delas cuales estudiaremos sus métodos y propieda<strong>de</strong>s principales.mysqliConstructor:50


mysqli - constructor <strong>de</strong> un nuevo objeto mysqliMétodos: change_user - cambia el usuario <strong>de</strong>l i<strong>de</strong>ntificador <strong>de</strong> enlace especificado. close - cierra una conexión previamente abierta. commit - completa la transacción actual. connect - abre una nueva conexión al servidor <strong>de</strong> MySQL. init - inicializa el objeto mysqli. kill - solicita al servidor <strong>de</strong>struir un hilo <strong>de</strong> MySQL. multi_query - realiza consultas <strong>de</strong> SQL múltiples. more_results - chequea si existen más resultados <strong>de</strong> la consulta múltipleactualmente ejecutada. next_result - lee el siguiente resultado <strong>de</strong> la consulta múltiple actualmenteejecutada. ping - llama una conexión con el servidor o reconecta si no hay conexión. prepare - prepara una sentencia SQL. query - ejecuta una sentencia SQL. rollback - <strong>de</strong>shace la transacción actual. select_db - selecciona la base <strong>de</strong> datos por <strong>de</strong>fecto. store_result - transfiere un resultado <strong>de</strong> la última consulta.Propieda<strong>de</strong>s: affected_rows - obtiene el número <strong>de</strong> filas afectadas en la operación MySQLprevia. errno - regresa el código <strong>de</strong> error para la llamada a función más reciente. error - regresa la ca<strong>de</strong>na <strong>de</strong> error para la llamada a función más reciente. field_count - regresa el número <strong>de</strong> columnas para la consulta más reciente. insert_id - regresa el i<strong>de</strong>ntificador generado automáticamente usado en laúltima consulta.mysqli_resultMétodos:51


close - cierra el resultado. data_seek - mueve el puntero interno <strong>de</strong>l resultado. fetch_field - obtiene la información <strong>de</strong> la columna en el resultado. fetch_fields - obtiene la información para todas las columnas <strong>de</strong>l resultado. fetch_field_direct - obtiene información <strong>de</strong> la columna para la columna dada. fetch_array - recupera una fila como una matriz asociativa, una matriznumérica, o ambos. fetch_assoc - obtiene una fila como una matriz asociativa. fetch_object - obtiene una fila como un objeto. fetch_row - obtiene una fila como una matriz enumerada. close - libera la memoria ocupada por el resultado. field_seek - fija el apuntador <strong>de</strong>l resultado a la posición especificada.Propieda<strong>de</strong>s: current_field - regresa la posición <strong>de</strong> puntero actual. field_count - regresa el número <strong>de</strong> campos en el resultado. lengths - regresa una matriz con la longitud <strong>de</strong> los campos. num_rows - regresa el número <strong>de</strong> filas en el resultado.Los pasos para acce<strong>de</strong>r <strong>de</strong>s<strong>de</strong> PHP a una base <strong>de</strong> datos son los siguientes:1. Conectar con el servidor <strong>de</strong> bases <strong>de</strong> datos.2. Seleccionar una base <strong>de</strong> datos.3. Enviar la instrucción SQL a la base <strong>de</strong> datos.4. Obtener y procesar los resultados.5. Cerrar la conexión con el servidor <strong>de</strong> bases <strong>de</strong> datos.Los métodos concretos en PHP que realizan estas operaciones son:1. Conectar con el servidor <strong>de</strong> bases <strong>de</strong> datos (Crear el objeto mysqli):$mysqli = new mysqli("localhost", "user", "password");2. Seleccionar una base <strong>de</strong> datos:$mysqli->select_db(“dbname”)52


3. Enviar la instrucción SQL a la base <strong>de</strong> datos:$consulta = $mysqli->query(“sentencia sql”)4. Obtener y procesar los resultados:$consulta->num_rows() y $consulta ->fetch_object()5. Cerrar la conexión con el servidor <strong>de</strong> bases <strong>de</strong> datos:$mysqli->close()Conectar con el servidor <strong>de</strong> bases <strong>de</strong> datos:mysqli_connect(): Devuelve un objeto mysqli con la conexión en caso <strong>de</strong> éxito yfalse en caso contrarioSintaxis: $mysqli = new mysqli(servidor, user, pass);Ejemplo: $mysqli = new mysqli(“localhost”, “root”, “root”)or die (“No se pue<strong>de</strong> conectar con el servidor”);Seleccionar una base <strong>de</strong> datos:mysqli_select_db(): Devuelve true en caso <strong>de</strong> éxito y false en caso contrario.Sintaxis: $mysqli->select_db(database);Ejemplo: $mysqli->select_db (“lindavista”)or die (“No se pue<strong>de</strong> seleccionar la base <strong>de</strong> datos”);Enviar la instrucción SQL a la base <strong>de</strong> datos:mysqli_query(): Devuelve un objeto mysqli_result o true (<strong>de</strong>pendiendo <strong>de</strong> lainstrucción) si la instrucción se ejecuta correctamente y false en caso contrario.Sintaxis: $consulta = $mysqli->query(instrucción);Ejemplo:$consulta = $mysql->query(“select * from noticias”)or die (“Fallo en la consulta”);Obtener y procesar los resultados:mysqli_num_rows(), mysqli_fetch_object(): En el caso <strong>de</strong> que la instrucciónenviada produzca unos resultados, mysqli_query() <strong>de</strong>vuelve las filas <strong>de</strong> la tabla53


afectadas por la instrucción. La función mysqli_num_rows() <strong>de</strong>vuelve el número <strong>de</strong>filas afectadas y para obtener las distintas filas <strong>de</strong>l resultado se utiliza la funciónmysqli_fetch_object(), que obtiene una fila <strong>de</strong>l resultado en un objeto, don<strong>de</strong> losatributos son los campos <strong>de</strong> la consulta.Sintaxis: $nfilas = $consulta ->num_rows($consulta);$fila = $consulta->fetch_object($consulta);Obtención <strong>de</strong> las filas:while ($fila = $consulta->fetch_object()){procesar fila i-ésima <strong>de</strong> los resultadosecho “titulo: ”.$file->titulo;echo “fecha: ”.$file->fecha;}Cerrar la conexión con el servidor <strong>de</strong> bases <strong>de</strong> datos:mysqli_close()Sintaxis:$mysqli->close();Ejemplo:$mysqli->close();2.7. Soporte para progaración Web con PHP y MySQL2.7.1. Servidor WAMP.WAMP es el acrónimo usado para <strong>de</strong>scribir un sistema <strong>de</strong> infraestructura <strong>de</strong> internetque usa las siguientes herramientas:• Windows, como sistema operativo;• Apache, como servidor web;• MySQL, como gestor <strong>de</strong> bases <strong>de</strong> datos;• PHP (generalmente), Perl, o Python, como lenguajes <strong>de</strong> programación.El uso <strong>de</strong> un WAMP permite servir páginas html a internet, a<strong>de</strong>más <strong>de</strong> po<strong>de</strong>r54


gestionar datos en ellas, al mismo tiempo un WAMP, proporciona lenguajes <strong>de</strong>programación para <strong>de</strong>sarrollar aplicaciones web.• LAMP es el sistema análogo que corre bajo ambiente Linux• WAMP es el sistema análogo que corre bajo ambiente Windows• MAMP es el sistema análogo que corre bajo ambiente Macintosh2.7.2. APPSERVAppServ es un programa que aúna una serie <strong>de</strong> aplicaciones y utilida<strong>de</strong>s, <strong>de</strong> maneraque al instalarlo, no solo tendremos instalados todo esto, sino que, a<strong>de</strong>más estaránperfectamente configurados y listos para usarlos en cuestión <strong>de</strong> minutos, mientrasque si tuviésemos que instalar por separado estos programas, <strong>de</strong>beríamos <strong>de</strong>dicarlemucho más tiempo a su correcta configuración.Pero ¿qué aplicaciones nos instala este paquete?• Apache• PHP• MySQL• phpMyAdminApache es un servidor HTTP <strong>de</strong> código abierto disponible para plataformas Unix(BSD, GNU/Linux, etc.), Windows, Macintosh y otras. Esta aplicación es necesariapara montar un host local en el cual se apoyarán el programa SGMPROTEL(<strong>Sistema</strong> <strong>de</strong> Gestión y Mantenimieto <strong>de</strong> <strong>Proyectos</strong> <strong>de</strong> Telecomunicaciones) quevamos a instalar.2.7.3. PHPPHP es un lenguaje <strong>de</strong> programación interpretado que se ejecuta <strong>de</strong>l lado <strong>de</strong>lservidor, es <strong>de</strong>cir, al hacerle la petición <strong>de</strong> una página PHP al servidor, éste antes <strong>de</strong>enviársela al usuario, lo que hace es interpretarlo, traducirlo a html y, acto seguidoenviarla al or<strong>de</strong>nador que ha realizado la petición.55


2.7.4. MYSQLMySQL es un sistema <strong>de</strong> gestión <strong>de</strong> bases <strong>de</strong> datos relacionales multiusuario queestá <strong>de</strong>sarrollada por la empresa Sun Microsystems. MySQL es un complementoperfecto para el <strong>de</strong>sarrollo <strong>de</strong> sitios web dinámicos, como por ejemplo foros, ya quecada usuario podrá modificar el contenido <strong>de</strong> la página o simplemente ampliándolo.2.7.5. PHPMYADMINphpMyAdmin es una utilidad adicional, y que, en absoluto es necesaria para el<strong>de</strong>sarrollo <strong>de</strong> un sitio web dinámico que se sustente sobre una base <strong>de</strong> datos, perofacilita mucho a tarea, ya que nos permite administrar una base <strong>de</strong> datos sinnecesidad <strong>de</strong> tener que recurrir a la escritura <strong>de</strong> líneas <strong>de</strong> comandos sobre laconsola <strong>de</strong>l equipo, ya que nos proporciona un entorno gráfico para ello, quea<strong>de</strong>más es bastante intuitivo.56


Capítulo 3: Desarrollo <strong>de</strong> la solución propuesta3.1. Arquitectura <strong>de</strong> la SoluciónEste sistema está basado en un mo<strong>de</strong>lo <strong>de</strong> clases <strong>de</strong> objetos, el motor <strong>de</strong> WorkFlowes un motor simple diseñado, codificado y embebido en la Base <strong>de</strong> Datos.El sistema está formado por:• Capa <strong>de</strong> Aplicación (<strong>de</strong>sarrollada en php)• Servidor <strong>de</strong> Aplicaciones Apache• Capa <strong>de</strong> Base <strong>de</strong> Datos (Lógica <strong>de</strong>l negocio)3.2. Mo<strong>de</strong>lado <strong>de</strong> la Base <strong>de</strong> Datos.Para el mo<strong>de</strong>lado <strong>de</strong> la base <strong>de</strong> datos <strong>de</strong>l presente proyecto se muestra en la figura3.1. Dicho mo<strong>de</strong>lo permite el funcionamiento correcto <strong>de</strong>l programa <strong>de</strong>sarrolladopara la operatividad <strong>de</strong>l mismo. Adicional se <strong>de</strong>be incluir los parámetros yconfiguración que se muestra en la figura 3.2 y finalmente las plantillas <strong>de</strong>l tipo <strong>de</strong>proyecto mostrado en la figura 3.3.57


Figura 3. 1: Mo<strong>de</strong>lo <strong>de</strong> Ór<strong>de</strong>nes o <strong>Proyectos</strong>58


Figura 3. 2: Parámetros y ConfiguraciónFigura 3. 3:Plantillas <strong>de</strong> Tipos <strong>de</strong> <strong>Proyectos</strong>3.3. Diseño <strong>de</strong> Objetos.A continuación se muestra el diseño orientado a objetos en PHP 5 <strong>de</strong>l <strong>Sistema</strong> <strong>de</strong><strong>Seguimiento</strong> <strong>de</strong> <strong>Proyectos</strong> <strong>de</strong> Construcción y Mantenimiento para Empresas <strong>de</strong>Telecomunicaciones a través <strong>de</strong> la Web:Cls_activ_tipo_tramclass cls_activ_tipo_tram{var $tipo_tramite;var $cod_actividad;var $or<strong>de</strong>n_ejecucion;var $costo_ref;var $programa_relac;var $ca<strong>de</strong>na_comandos;59


var $tipo_programa;var $duracion;var $formato;var $es_critica;functioncls_activ_tipo_tram($txt_tipo_tramite="",$txt_cod_actividad="",$txt_or<strong>de</strong>n_ejecucion=0,$txt_costo_ref=0,$txt_programa_relac=0,$txt_ca<strong>de</strong>na_comandos="",$txt_tipo_programa="",$txt_duracion=0,$txt_formato="",$txt_es_critica=""){$this->tipo_tramite=$txt_tipo_tramite;$this->cod_actividad=$txt_cod_actividad;$this->or<strong>de</strong>n_ejecucion=$txt_or<strong>de</strong>n_ejecucion;$this->costo_ref=$txt_costo_ref;$this->programa_relac=$txt_programa_relac;$this->ca<strong>de</strong>na_comandos=$txt_ca<strong>de</strong>na_comandos;$this->tipo_programa=$txt_tipo_programa;$this->duracion=$txt_duracion;$this->formato=$txt_formato;$this->es_critica=$txt_es_critica;}function setTipoTramite($tipo_tramite) {$this->tipo_tramite=$tipo_tramite;}function setCodActividad($cod_actividad) {$this->cod_actividad=$cod_actividad;}function setOr<strong>de</strong>nEjecucion($or<strong>de</strong>n_ejecucion) {$this->or<strong>de</strong>n_ejecucion=$or<strong>de</strong>n_ejecucion;}function setCostoRef($costo_ref) {$this->costo_ref=$costo_ref;}function setProgramaRelac($programa_relac) {$this-60


programa_relac=$programa_relac;}function setCa<strong>de</strong>naComandos($ca<strong>de</strong>na_comandos) {$this->ca<strong>de</strong>na_comandos=$ca<strong>de</strong>na_comandos;}function setTipoPrograma($tipo_programa) {$this->tipo_programa=$tipo_programa;}function setDuracion($duracion) {$this->duracion=$duracion;}function setFormato($formato) {$this->formato=$formato;}function setEsCritica($es_critica) {$this->es_critica=$es_critica;}function getTipoTramite() { return $this->tipo_tramite;}function getCodActividad(){ return $this->cod_actividad;}function getOr<strong>de</strong>nEjecucion() { return $this->or<strong>de</strong>n_ejecucion;}function getCostoRef() { return $this->costo_ref;}function getProgramaRelac() { return $this->programa_relac;}function getCa<strong>de</strong>naComandos() { return $this->ca<strong>de</strong>na_comandos;}function getTipoPrograma() { return $this->tipo_programa;}function getDuracion() { return $this->duracion;}function getFormato() { return $this->formato;}function getEsCritica() { return $this->es_critica;}Cls_activida<strong>de</strong>sclass cls_activida<strong>de</strong>s{var $cod_actividad;var $nombre_corto;var $nombre_actividad;var $costo_ref;var $duracion;var $formato;61


var $proceso;functioncls_activida<strong>de</strong>s($txt_cod_actividad="",$txt_nombre_corto="",$txt_nombre_actividad="",$txt_costo_ref=0,$txt_duracion=0,$txt_formato="",$txt_proceso=0){$this->cod_actividad=$txt_cod_actividad;$this->nombre_corto=$txt_nombre_corto;$this->nombre_actividad=$txt_nombre_actividad;$this->costo_ref=$txt_costo_ref;$this->duracion=$txt_duracion;$this->formato=$txt_formato;$this->proceso=$txt_proceso;}function setCodActividad($cod_actividad) {$this->cod_actividad=$cod_actividad;}function setNombreCorto($nombre_corto) {$this->nombre_corto=$nombre_corto;}function setNombreActividad($nombre_actividad) {$this->nombre_actividad=$nombre_actividad;}function setCostoRef($costo_ref) {$this->costo_ref=$costo_ref;}function setDuracion($duracion) {$this->duracion=$duracion;}function setFormato($formato) {$this->formato=$formato;}function setProceso($proceso) {$this->proceso=$proceso;}function getCodActividad(){ return $this->cod_actividad;}function getNombreCorto(){ return $this->nombre_corto;}function getNombreActividad(){ return $this->nombre_actividad;}function getCosto() { return $this->costo_ref;}function getDuracion() { return $this->duracion;}62


function getFormato() { return $this->formato;}function getProceso() { return $this->proceso;}Cls_clientesclass cls_clientes{var $cod_cliente;var $tipo_i<strong>de</strong>ntifica;var $num_i<strong>de</strong>ntificacion;var $nombre_razonsocial;var $apellido;var $direccion;var $telefono;var $fax;var $tipo_persona;var $fecha_ingreso;var $observacion;var $estado;var $resi<strong>de</strong>ncia;var $resi<strong>de</strong>ncia_<strong>de</strong>scrip;functioncls_clientes($txt_cod_cliente="",$cbo_tipo_i<strong>de</strong>ntifica="C",$txt_num_i<strong>de</strong>ntificacion="",$txt_nombre_razonsocial="",$txt_apellido="",$txt_direccion="",$txt_telefono="",$txt_fax="",$cbo_tipo_persona="N",$txt_fecha_ingreso="",$txt_observacion="",$cbo_estado=1,$txt_resi<strong>de</strong>ncia="",$txt_resi<strong>de</strong>ncia_<strong>de</strong>scrip=""){$this->cod_cliente=$txt_cod_cliente;$this->tipo_i<strong>de</strong>ntifica=$cbo_tipo_i<strong>de</strong>ntifica;$this->num_i<strong>de</strong>ntificacion=$txt_num_i<strong>de</strong>ntificacion;$this->nombre_razonsocial=$txt_nombre_razonsocial;$this->apellido=$txt_apellido;63


$this->direccion=$txt_direccion;$this->telefono=$txt_telefono;$this->fax=$txt_fax;$this->tipo_persona=$cbo_tipo_persona;$this->fecha_ingreso=$txt_fecha_ingreso;$this->observacion=$txt_observacion;$this->estado=$cbo_estado;$this->resi<strong>de</strong>ncia=$txt_resi<strong>de</strong>ncia;$this->resi<strong>de</strong>ncia_<strong>de</strong>scrip=$txt_resi<strong>de</strong>ncia_<strong>de</strong>scrip;}function setCod_cliente($cod_cliente) {$this->cod_cliente=$cod_cliente;}function setNombre_razonsocial($nombre_razonsocial){$this->nombre_razonsocial=$nombre_razonsocial;}function setApellido($apellido) {$this->apellido=$apellido;}function setTipo_i<strong>de</strong>ntifica($tipo_i<strong>de</strong>ntifica) {$this->tipo_i<strong>de</strong>ntifica=$tipo_i<strong>de</strong>ntifica;}function setNum_i<strong>de</strong>ntificacion($num_i<strong>de</strong>ntificacion) {$this->num_i<strong>de</strong>ntificacion=$num_i<strong>de</strong>ntificacion;}function setTipo_persona($tipo_persona) {$this->tipo_persona=$tipo_persona;}function setDireccion($direccion) {$this->direccion=$direccion;}function setTelefono($telefono) {$this->telefono=$telefono;}function setFax($fax) {$this->fax=$fax;}function setFecha_ingreso($fecha_ingreso) {$this->fecha_ingreso=$fecha_ingreso;}function setObservacion($observacion) {$this->observacion=$observacion;}function setEstado($estado) {$this->estado=$estado;}function setResi<strong>de</strong>ncia($resi<strong>de</strong>ncia) {$this-64


esi<strong>de</strong>ncia=$resi<strong>de</strong>ncia;}function setResi<strong>de</strong>ncia_<strong>de</strong>scrip($resi<strong>de</strong>ncia_<strong>de</strong>scrip) {$this->resi<strong>de</strong>ncia_<strong>de</strong>scrip=$resi<strong>de</strong>ncia_<strong>de</strong>scrip;}function getCod_cliente(){return $this->cod_cliente;}function getTipo_i<strong>de</strong>ntifica(){return $this->tipo_i<strong>de</strong>ntifica;}function getNum_i<strong>de</strong>ntificacion(){return $this->num_i<strong>de</strong>ntificacion;}function getNombre_razonsocial(){return $this->nombre_razonsocial;}function getApellido(){return $this->apellido;}function getDireccion(){return $this->direccion;}function getTelefono(){return $this->telefono;}function getFax(){return $this->fax;}function getTipo_persona(){return $this->tipo_persona;}function getFecha_ingreso(){return $this->fecha_ingreso;}function getObservacion(){return $this->observacion;}function getEstado(){return $this->estado;}function getResi<strong>de</strong>ncia() { return $this->resi<strong>de</strong>ncia=$resi<strong>de</strong>ncia;}function getResi<strong>de</strong>ncia_<strong>de</strong>scrip() { return $this->resi<strong>de</strong>ncia_<strong>de</strong>scrip=$resi<strong>de</strong>ncia_<strong>de</strong>scrip;}Cls_or<strong>de</strong>nesclass cls_or<strong>de</strong>nes{var $tipo;var $numero;var $tipo_tramite;var $cod_cliente;var $fec_ingreso;var $fec_fin;var $fec_factura;var $numero_factura;65


var $<strong>de</strong>scripcion;var $subtipo;var $oficial;var $anio;var $numero_or<strong>de</strong>n;//campo con formato "año-numero"var $nom_cli;var $<strong>de</strong>sc_tram;var $estado;var $fec_ini_real;var $Login;functioncls_or<strong>de</strong>nes($txt_tipo="",$txt_numero="",$txt_tipo_tramite="",$txt_cod_cliente="",$txt_fec_ingreso="",$txt_fec_fin="",$txt_fec_factura="",$txt_numero_factura="",$txt_<strong>de</strong>scripcion="",$txt_subtipo="",$txt_oficial="",$txt_anio="",$numero_or<strong>de</strong>n="",$txt_nom_cli="",$txt_<strong>de</strong>sc_tram="",$txt_estado="",$txt_fec_ini_real="", $Login=""){$this->tipo=$txt_tipo;$this->numero=$txt_numero;$this->tipo_tramite=$txt_tipo_tramite;$this->cod_cliente=$txt_cod_cliente;$this->fec_ingreso=$txt_fec_ingreso;$this->fec_fin=$txt_fec_fin;$this->fec_factura=$txt_fec_factura;$this->numero_factura=$txt_numero_factura;$this-><strong>de</strong>scripcion=$txt_<strong>de</strong>scripcion;$this->subtipo=$txt_subtipo;$this->oficial=$txt_oficial;$this->anio=$txt_anio;$this->numero_or<strong>de</strong>n=$numero_or<strong>de</strong>n;66


$this->nom_cli=$txt_nom_cli;$this-><strong>de</strong>sc_tram=$txt_<strong>de</strong>sc_tram;$this->estado=$txt_estado;$this->fec_ini_real=$txt_fec_ini_real;$this->Login=$Login;}function settipo($tipo) { $this->tipo=$tipo; }function setnumero($numero) { $this->numero=$numero; }function settipo_tramite($tipo_tramite) { $this->tipo_tramite=$tipo_tramite; }function setcod_cliente($cod_cliente) { $this->cod_cliente=$cod_cliente; }function setfec_ingreso($fec_ingreso) { $this->fec_ingreso=$fec_ingreso; }function setfec_fin($fec_fin) { $this->fec_fin=$fec_fin; }function setfec_factura($fec_factura) { $this->fec_factura=$fec_factura; }function setnumero_factura($numero_factura) { $this->numero_factura=$numero_factura; }function set<strong>de</strong>scripcion($<strong>de</strong>scripcion) { $this-><strong>de</strong>scripcion=$<strong>de</strong>scripcion; }function setsubtipo($subtipo) { $this->subtipo=$subtipo; }function setoficial($oficial) { $this->oficial=$oficial; }function setanio($anio) { $this->anio=$anio; }function setnumero_or<strong>de</strong>n($numero_or<strong>de</strong>n) { $this->numero_or<strong>de</strong>n=$numero_or<strong>de</strong>n; }function setestado($estado) { $this->estado=$estado; }function setfec_ini_real($fec_ini_real) { $this->fec_ini_real=$fec_ini_real; }function setLogin($Login) { $this->Login=$Login; }function gettipo() { return $this->tipo; }67


function getnumero() { return $this->numero; }function gettipo_tramite() { return $this->tipo_tramite; }function getnumero_tramite() { return $this->numero_tramite;}function getcod_cliente() { return $this->cod_cliente; }function getor<strong>de</strong>n() { return $this->or<strong>de</strong>n; }function getfec_ingreso() { return $this->fec_ingreso; }function getfec_fin() { return $this->fec_fin; }function getfec_factura() { return $this->fec_factura; }function getnumero_factura() { return $this->numero_factura;}function get<strong>de</strong>scripcion() { return $this-><strong>de</strong>scripcion; }function getsubtipo() { return $this->subtipo; }function getoficial() { return $this->oficial; }function getanio() { return $this->anio; }function getnumero_or<strong>de</strong>n() { return $this->numero_or<strong>de</strong>n; }function getestado() { return $this->estado; }function getfec_ini_real() { return $this->fec_ini_real; }function getLogin() { return $this->Login; }Cls_tipo_tramclass cls_tipotramite{//Atributos <strong>de</strong> las Clasevar $tipotramite;var $cliente;var $<strong>de</strong>sc_corta;var $<strong>de</strong>sc_larga;var $oficial_cuenta;var $subtipotramite;var $<strong>de</strong>sc_tram;var $<strong>de</strong>sc_sub;var $nom_cli;68


functioncls_tipotramite($txt_tipotramite="",$txt_cliente="",$txt_<strong>de</strong>sc_corta="",$txt_<strong>de</strong>sc_larga="", $txt_oficial_cuenta="",$txt_subtipotramite="",$txt_tiponame="",$txt_subtiponame="",$txt_nom_cliente=""){$this->tipotramite=$txt_tipotramite;$this->cliente=$txt_cliente;$this-><strong>de</strong>sc_corta=$txt_<strong>de</strong>sc_corta;$this-><strong>de</strong>sc_larga=$txt_<strong>de</strong>sc_larga;$this->oficial_cuenta=$txt_oficial_cuenta;$this->subtipotramite=$txt_subtipotramite;$this-><strong>de</strong>sc_tram = $txt_tiponame;$this-><strong>de</strong>sc_sub = $txt_subtiponame;$this->nom_cli = $txt_nom_cliente;}function setTipoTramite($tipotramite) {$this->tipotramite=$tipotramite;}function setSubTipoTramite($subtipotramite) {$this->subtipotramite=$subtipotramite;}function setCliente($cliente) {$this->cliente=$cliente;}function setDesc_corta($<strong>de</strong>sc_corta) {$this-><strong>de</strong>sc_corta=$<strong>de</strong>sc_corta;}function setDesc_larga($<strong>de</strong>sc_larga) {$this-><strong>de</strong>sc_larga=$<strong>de</strong>sc_larga;}function setOficial_cuenta($oficial_cuenta) {$this->oficial_cuenta=$oficial_cuenta;}function set<strong>de</strong>sc_tram($<strong>de</strong>sc_tram) {$this-><strong>de</strong>sc_tram=$<strong>de</strong>sc_tram;}function set<strong>de</strong>sc_sub($<strong>de</strong>sc_sub) {$this-><strong>de</strong>sc_sub=$<strong>de</strong>sc_sub;}function setOnom_cli($nom_cli) {$this->nom_cli=$nom_cli;}69


function getTipoTramite(){return $this->tipotramite;}function getSubTipoTramite(){return $this->subtipotramite;}function getCliente(){return $this->cliente;}function getDesc_corta(){return $this-><strong>de</strong>sc_corta;}function getDesc_larga(){return $this-><strong>de</strong>sc_larga;}function getOficial_cuenta(){return $this->oficial_cuenta;}function get<strong>de</strong>sc_tram(){return $this-><strong>de</strong>sc_tram;}function get<strong>de</strong>sc_sub(){return $this-><strong>de</strong>sc_sub;}function getnom_cli(){return $this->nom_cli;}3.4. Alcances y Restricciones <strong>de</strong>l softwareEl sistema fue orientado originalmente para llevar el control <strong>de</strong> activida<strong>de</strong>soperativas <strong>de</strong> una empresa, lo cual significa que la empresa que <strong>de</strong>see implantar elsistema <strong>de</strong>be contar con la <strong>de</strong>finición clara <strong>de</strong> sus procesos. Sin embargo esto no lolimita a unos pocos tipos <strong>de</strong> proyectos. Es posible <strong>de</strong>finir activida<strong>de</strong>s por casicualquier tipo <strong>de</strong> proyectos, como por ejemplo:• <strong>Proyectos</strong> <strong>de</strong> construcción• Gestión <strong>de</strong> instituciones educativas• Gestión <strong>de</strong> empresas <strong>de</strong> servicio• Gestión <strong>de</strong> logística• Gestión <strong>de</strong> tecnologíasEsta característica obliga en cierta forma a documentar los procedimientos <strong>de</strong> laempresa, colaborando <strong>de</strong> esta manera con la organización. A<strong>de</strong>más pue<strong>de</strong> servircomo herramienta para iniciar el camino a una certificación <strong>de</strong> calidad tipo ISO9000.Para lograr estos objetivos se presenta una herramienta parametrizada yflexible, que permita hacer el seguimiento a proyectos <strong>de</strong> diversos tipos,<strong>de</strong>nominados “Or<strong>de</strong>n <strong>de</strong> Trabajo”. Cada “Or<strong>de</strong>n <strong>de</strong> Trabajo” se relaciona con unconjunto <strong>de</strong> activida<strong>de</strong>s y usuarios que <strong>de</strong>ben encargarse <strong>de</strong>l seguimiento <strong>de</strong> éstas.70


Cada actividad podrá dar flujo a otras activida<strong>de</strong>s, <strong>de</strong> manera que se forman Flujos<strong>de</strong> Trabajo con tiempos <strong>de</strong> inicio y duración <strong>de</strong> cada actividad. La duración <strong>de</strong> lasactivida<strong>de</strong>s pue<strong>de</strong> medirse en Semanas, Días, Horas o Minutos.Es posible asignarlepresupuesto <strong>de</strong> costos a un proyecto, y a medida que el proyecto avance, agregarlecostos referenciales asignados al proyecto y costos referenciales asignadas a cadaactividad. De esta manera se podrán comparar luego el costo presupuestado con losreferenciales.Cada actividad que finaliza, mueve el tiempo <strong>de</strong> inicio <strong>de</strong> susactivida<strong>de</strong>s sucesoras, <strong>de</strong> forma que el tiempo total <strong>de</strong> la “Or<strong>de</strong>n <strong>de</strong> Trabajo”,modifica su fecha final estimada. Estos tiempos se guardan diferenciándolos <strong>de</strong> lostiempos inicial y final originales, <strong>de</strong> forma que existen los tiempos recalculados inicialy final.3.4.1. RestriccionesEl sistema trata <strong>de</strong> cumplir con los requisitos básicos para la administración <strong>de</strong>proyectos, como <strong>de</strong>finición <strong>de</strong> tareas, activida<strong>de</strong>s, responsables y flujos, sinembargo dado que el sistema está orientado a servir como herramienta <strong>de</strong> apoyopara el seguimiento y control <strong>de</strong> las diversas activida<strong>de</strong>s planificadas, inclusive leotorga la responsabilidad al cliente <strong>de</strong> marcar el cumplimiento <strong>de</strong> una o variasactivida<strong>de</strong>s. Así mismo se pue<strong>de</strong> parametrizar para que el cliente reciba unanotificación por correo electrónico <strong>de</strong>l estado <strong>de</strong> avance <strong>de</strong>l proyecto.Para resumiralgunas <strong>de</strong> las características <strong>de</strong>l sistema se <strong>de</strong>finen en la tabla 3.1.ArquitecturaTabla3. 1: Características<strong>de</strong>l<strong>Sistema</strong>Características2 capasLógica <strong>de</strong>l negocio almacenada en BD - storedInterfaz <strong>de</strong> clienteMáximo número <strong>de</strong> activida<strong>de</strong>sLenguaje <strong>de</strong> programaciónMenús parametrizadosproceduresBasado en WebIlimitadophp + sql scriptSI71


Acceso por contraseñaSIDefinición <strong>de</strong> activida<strong>de</strong>sSIDefinición <strong>de</strong> plantillasSIPlantillas personalizables por cliente SIDefinición <strong>de</strong> flujos <strong>de</strong> activida<strong>de</strong>s SI<strong>Seguimiento</strong> por activida<strong>de</strong>s/usuario SIRegistrar costos para activida<strong>de</strong>s SIMarcar observaciones por actividad SIEmail sobre estado <strong>de</strong> activida<strong>de</strong>s SICalcular índices <strong>de</strong> eficienciaSIReportes <strong>de</strong> avancesSIGráficos <strong>de</strong> GanntNOMáximo número <strong>de</strong> regionesUnaFlujos <strong>de</strong> activida<strong>de</strong>s condicionados NoAsignación <strong>de</strong> documentosNoAnálisis <strong>de</strong> costos unitariosNoEl sistema mantiene la característica principal <strong>de</strong> las herramientas paraadministración <strong>de</strong> proyectos; “las activida<strong>de</strong>s pue<strong>de</strong>n agruparse para formar flujos <strong>de</strong>trabajo”, sin embargo solamente se permiten aquellos grafos que contengan unasola región.A continuación se explica mediante gráficos, algunos ejemplos <strong>de</strong> grafos<strong>de</strong> flujos <strong>de</strong> activida<strong>de</strong>s que pue<strong>de</strong>n <strong>de</strong>finirse y otros que no pue<strong>de</strong>n <strong>de</strong>finirse enesta versión <strong>de</strong>l programa.3.4.2. Grafo sin ciclos con región únicaEste es un ejemplo <strong>de</strong> un grafo <strong>de</strong> flujo con una sola región, que pue<strong>de</strong> <strong>de</strong>finirse enel sistema. Supongamos que un proyecto está <strong>de</strong>finido con seis activida<strong>de</strong>senumeradas <strong>de</strong> la A hasta la F, y presentan el siguiente flujo (ver figura 3.4).72


Figura 3. 4: Flujo <strong>de</strong> activida<strong>de</strong>s con 1 sola región, grafo a cíclicoLa figura 3.4 muestra el flujo <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias <strong>de</strong> las activida<strong>de</strong>s, para registrarlo enel sistema, <strong>de</strong>bemos llenar una matriz <strong>de</strong> adyacencia como la que se muestra acontinuación:A B C D E FAB XC XD XE XFX3.4.3. Grafos cíclicosLos grafos <strong>de</strong> flujo <strong>de</strong> activida<strong>de</strong>s que presentan ciclos, no son permitidos en estaversión, por lo tanto, al momento <strong>de</strong> guardar su <strong>de</strong>finición <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias o flujo <strong>de</strong>activida<strong>de</strong>s, el sistema le indicará cuando se haya encontrado un ciclo, un ejemploque <strong>de</strong>scribe lo anterior se muestra en la figura 3.5.Figura 3. 5: Flujo <strong>de</strong> activida<strong>de</strong>s cíclica, en este ejemplo el grafo posee 2 regionesEl flujo <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias (ver figura 3.5) <strong>de</strong> las activida<strong>de</strong>sen un sistema con unciclo, que forma dos regiones. Este tipo <strong>de</strong> grafo no se pue<strong>de</strong> registrar en elsistema, sin embargo se muestra la matriz <strong>de</strong> adyacencia que le correspon<strong>de</strong>ría a73


este grafo:A B C D E FAB XXC XD XE XFX3.4.4. Grafos multi-caminoOtro ejemplo <strong>de</strong> grafo <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias <strong>de</strong> activida<strong>de</strong>s que no está permitido en estaversión <strong>de</strong>l programa es aquel que <strong>de</strong>fine múltiples caminos hasta una actividad,<strong>de</strong>s<strong>de</strong> un mismo origen, es <strong>de</strong>cir que tiene varios pre<strong>de</strong>cesores, como se muestra enla figura 3.6.Figura 3. 6: Dos caminos diferentes <strong>de</strong>s<strong>de</strong> el mismo origen y con el mismo <strong>de</strong>stinoLafigura 3.6 muestra el flujo <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias <strong>de</strong> las activida<strong>de</strong>s, don<strong>de</strong> existen doscaminos diferentes para llegar <strong>de</strong>s<strong>de</strong> la actividad A hacia la actividad E, este es otroejemplo <strong>de</strong> grafo <strong>de</strong> flujo con dos regiones y no se pue<strong>de</strong> registrar en el sistema, sinembargo se muestra la matriz <strong>de</strong> adyacencia que le correspon<strong>de</strong>ría a este grafo:A B C D E FAB XC XD XE XFX74


Otro ejemplo <strong>de</strong> grafo <strong>de</strong> flujos multicamino se muestra en la figura3.7.Figura 3. 7: Dos caminos diferentes hacia el mismo <strong>de</strong>stino, <strong>de</strong>s<strong>de</strong> orígenes distintosLa figura 3.7 se muestra el flujo <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias <strong>de</strong> las activida<strong>de</strong>s, don<strong>de</strong> existendos caminos diferentes para llegar a la actividad E, los cuales son: A, B, D, E y C, D,E, este ejemplo sin embargo representa un grafo <strong>de</strong> flujo con una sola región y no sepue<strong>de</strong> registrar en el sistema, sin embargo se muestra la matriz <strong>de</strong> adyacencia quele correspon<strong>de</strong>ría a este grafo:A B C D E FAB XC XD XE XFXPara permitir estos casos en una próxima versión, se <strong>de</strong>berá incluir en cadaactividad el número <strong>de</strong> pre<strong>de</strong>cesores pendientes, don<strong>de</strong> cada vez que unprerrequisito finalice, se re calculan los tiempos y se disminuye este número en uno,cuando este valor llegue a cero, entonces la actividad sucesora podrá iniciar.3.5. Seguridad y Control <strong>de</strong> accesoLa seguridad <strong>de</strong> la información es uno <strong>de</strong> los temas principales para cualquiersistema, sobretodo si estará basado en una plataforma web. Por ello se handiseñado tres niveles <strong>de</strong> seguridad y control <strong>de</strong> acceso:75


3.5.1. Seguridad general <strong>de</strong> acceso a la base <strong>de</strong> datosEn la base <strong>de</strong> datos MySQL <strong>de</strong>be <strong>de</strong>finirse y registrarse el usuario que tendráacceso a la base <strong>de</strong> datos <strong>de</strong>l sistema, y a<strong>de</strong>más se <strong>de</strong>be registrar la dirección IP<strong>de</strong>l host <strong>de</strong>s<strong>de</strong> el cual se acce<strong>de</strong>rá a la base. Este es un control propio <strong>de</strong>l motor <strong>de</strong>MySQL y que pue<strong>de</strong> ser fácilmente configurado <strong>de</strong>s<strong>de</strong> cualquier administrador <strong>de</strong> labase <strong>de</strong> datos, como por ejemplo phpMyAdmin.3.5.2. Seguridad <strong>de</strong> acceso al sistemaEl acceso al sistema es el siguiente nivel <strong>de</strong> control, cada contraseña <strong>de</strong> usuario seregistra en la base <strong>de</strong> datos, encriptándolas con MD5. Si <strong>de</strong>sea mayor nivel <strong>de</strong>protección, pue<strong>de</strong> reemplazarlo con algún algoritmo <strong>de</strong> cifrado como por ejemploTwoFish.Una vez <strong>de</strong>finido el usuario, es importante asignarle un rol <strong>de</strong>ntro <strong>de</strong>lsistema, si no lo hace, entonces simplemente no tendrá acceso a ninguna <strong>de</strong> lasopciones <strong>de</strong>l menú.Cada rol posee la capacidad <strong>de</strong> asociarse a una o varias opciones <strong>de</strong>l menúprincipal <strong>de</strong>l sistema (ver figura 3.8), y el sistema permite <strong>de</strong>finir el número <strong>de</strong> rolesque <strong>de</strong>see, sin embargo se recomienda un número no mayor a cuatro roles, entrelos cuales se encuentran:Figura 3. 8: Tipos <strong>de</strong> roles pre<strong>de</strong>finidosFuente: El autorRol Administrador <strong>de</strong>l sistema.- tiene la capacidad <strong>de</strong> <strong>de</strong>finir a otros usuarios,modificar el or<strong>de</strong>n <strong>de</strong> aparición <strong>de</strong>l menú, asignar permisos nuevos, <strong>de</strong>finir nuevos76


oles, etc., y no <strong>de</strong>be interferir en el seguimiento <strong>de</strong> los proyectos.Rol <strong>de</strong> Supervisor.- tiene la capacidad <strong>de</strong> observar el avance <strong>de</strong> los proyectos ymarcar la finalización <strong>de</strong> algunas activida<strong>de</strong>s que están bajo su responsabilidad.Rol <strong>de</strong> usuario restringido.- este rol se <strong>de</strong>finió para aquellos usuarios queúnicamente pue<strong>de</strong>n consultar ciertas opciones <strong>de</strong>l sistema, pue<strong>de</strong>n ser empleados<strong>de</strong> la misma compañía que cumplen un papel <strong>de</strong> control sobre ciertas activida<strong>de</strong>s<strong>de</strong>ntro <strong>de</strong>l proyecto.Rol <strong>de</strong> Cliente.- se utiliza para i<strong>de</strong>ntificar el conjunto <strong>de</strong> opciones <strong>de</strong>l sistema queestarán disponibles para los clientes que hagan uso <strong>de</strong> la aplicación.3.5.3. Seguridad <strong>de</strong> acceso a la informaciónEl acceso a la información está relacionado con el tipo <strong>de</strong> usuario <strong>de</strong>finido en elsistema y con el rol que le fue asignado, esto permite dividir este acceso en dos. Porun lado el control <strong>de</strong> roles le da acceso al menú con las opciones <strong>de</strong>finidas, y porotro lado el tipo <strong>de</strong> usuario <strong>de</strong>termina las atribuciones que pue<strong>de</strong> tener en lamanipulación <strong>de</strong> la información, por ello se <strong>de</strong>finen los siguientes tipos <strong>de</strong> usuarios:Tipos <strong>de</strong> DescripciónUsuariosCClienteFGerenteProyectoAAdministradorOSupervisorTOtrosLos usuarios <strong>de</strong>l tipo F, C y O (Gerente Proyecto, Cliente y Supervisor), tienen lassiguientes propieda<strong>de</strong>s <strong>de</strong>ntro <strong>de</strong>l sistema:• Pue<strong>de</strong>n consultar todos los proyectos, excepto el tipo Cliente, quiensolamente podrá consultar sus proyectos y podrán ver todas las activida<strong>de</strong>s• Pue<strong>de</strong>n ver datos y observaciones si son responsables77


• Pue<strong>de</strong>n Marcar Fin <strong>de</strong> la actividad en aquellas en las que esté autorizado• Pue<strong>de</strong> enviar email a los <strong>de</strong>stinatarios pre<strong>de</strong>finidos <strong>de</strong> una actividad, si estámarcado como el responsable <strong>de</strong> dicha actividadLos <strong>de</strong>más usuarios (tipo A y T), tienen las siguientes propieda<strong>de</strong>s:• Podrán ver las activida<strong>de</strong>s en las cuales el usuario sea responsable• Pue<strong>de</strong> ingresar nuevos datos a las activida<strong>de</strong>s• Pue<strong>de</strong> marcar fin si esta autorizado• Pue<strong>de</strong> ingresar observaciones• Pue<strong>de</strong> enviar email a los <strong>de</strong>stinatarios pre<strong>de</strong>finidos <strong>de</strong> una actividad, si estámarcado como el responsable <strong>de</strong> dicha actividad3.6. Parametrización GeneralEl sistema contiene una serie <strong>de</strong> parámetros que le permiten operar y brindarservicios a los usuarios, entre éstos se encuentran:• Códigos <strong>de</strong> tablas <strong>de</strong>finidas en el sistema.- es el código que se utiliza parai<strong>de</strong>ntificar el listado <strong>de</strong> tipos <strong>de</strong> datos asociados a las activida<strong>de</strong>s.• Pié <strong>de</strong> página utilizado en los reportes.- texto que aparece en el pie <strong>de</strong> página<strong>de</strong> todos los reportes.• Intervalo <strong>de</strong> reor<strong>de</strong>namiento <strong>de</strong> las activida<strong>de</strong>s.- cuando se aña<strong>de</strong>n nuevasactivida<strong>de</strong>s, es posible reor<strong>de</strong>narlas automáticamente, el sistema les dará unnuevo número <strong>de</strong> secuencia en intervalos iguales.• Parámetros para correos electrónicos.- se <strong>de</strong>finen los datos utilizados en lacláusula <strong>de</strong>s<strong>de</strong> (From) y asunto (Subject). Tanto para cuando se inicia unaor<strong>de</strong>n <strong>de</strong> trabajo, cuando se hace un envío explícito y para cuando unaactividad ha finalizadoo Fromo Subject• Código <strong>de</strong> la tabla para <strong>de</strong>finir los procesos programables que se ejecutancon las activida<strong>de</strong>s. Aunque esto es una funcionalidad que no está vigente,está consi<strong>de</strong>rada para añadirse en la siguiente versión <strong>de</strong>l sistema78


Figura 3. 9: Parametrización por catálogo <strong>de</strong> tablasFuente: El autor3.6.1. Administración <strong>de</strong> Feriados y Jornada laboralLa administración <strong>de</strong> las activida<strong>de</strong>s <strong>de</strong> un proyecto no sería posible <strong>de</strong> gestionarefectivamente en sus tiempos, si no se consi<strong>de</strong>ran los días feriados y los díaslaborables, así como la jornada laboral.Lamentablemente en esta versión la jornadalaboral se <strong>de</strong>fine en forma general, es <strong>de</strong>cir que afecta a todas las activida<strong>de</strong>s queno han finalizado y las que no han iniciado aún, en todos los proyectos <strong>de</strong>finidos<strong>de</strong>ntro <strong>de</strong>l sistema.En la siguiente versión se prevé incluir la jornada laboral comoparte <strong>de</strong> la información <strong>de</strong> cada proyecto.Los fines <strong>de</strong> semana han sido consi<strong>de</strong>rados <strong>de</strong>ntro <strong>de</strong> la estructura para díasferiados, sin embargo esta característica se prevé mejorarla para la siguienteversión, al igual que también se previene mejorar el control <strong>de</strong> feriados para quesean heredables cada año.La <strong>de</strong>finición <strong>de</strong> la jornada laboral, es utilizada para<strong>de</strong>finir el inicio y fin <strong>de</strong> cada actividad asociada al proyecto, lo cual también afecta lafecha final estimada <strong>de</strong>l proyecto.Modificar la jornada laboral, afectará al cálculo <strong>de</strong>las fechas <strong>de</strong> inicio <strong>de</strong> las activida<strong>de</strong>s pendientes, las activida<strong>de</strong>s finalizadas noserán afectadas.3.6.2. Definición <strong>de</strong> Categorías <strong>de</strong> proyectosEl sistema permite llevar un registro <strong>de</strong> las diferentes categorías <strong>de</strong> proyectos (vrfigura 3.10) que se pue<strong>de</strong>n manejar, para ello se <strong>de</strong>finen categorías y subcategorías<strong>de</strong> proyectos, que luego son utilizados para incluir las plantillas <strong>de</strong> activida<strong>de</strong>s con79


todos los <strong>de</strong>talles que éstas requieren.Figura 3. 10: Definición <strong>de</strong> Tipos <strong>de</strong> <strong>Proyectos</strong>Fuente: El autor3.7. PlantillasLas plantillas son conjuntos <strong>de</strong> <strong>Proyectos</strong>, <strong>de</strong>finidos por categorías y subcategorías,las cuales pue<strong>de</strong>n contener un conjunto <strong>de</strong> activida<strong>de</strong>s con su propio flujo <strong>de</strong>proceso.Las plantillas pue<strong>de</strong>n ser <strong>de</strong>finidas para:• Uso general, una plantilla <strong>de</strong> uso general es aquella que no está asociada aun cliente en particular.• Asociadas a un cliente en particular, es posible <strong>de</strong>finir una plantilla <strong>de</strong> unacategoría/subcategoría dada, para asociarla a un cliente en particular, esto seutiliza cuando el cliente tiene una manera un poco diferente <strong>de</strong> registrar susprocesos en un proyecto <strong>de</strong>terminado.La <strong>de</strong>finición <strong>de</strong> las plantillas <strong>de</strong> proyectos se realiza <strong>de</strong>finiendo la categoría ysubcategoría <strong>de</strong>l proyecto, luego se <strong>de</strong>termina si va a estar asociada con un usuarioo es <strong>de</strong> uso general, como se muestra en la figura 3.11.80


Figura 3. 11: Definición <strong>de</strong> plantillas <strong>de</strong> proyectosFuente: El autorEs posible que necesite notificar a uno o varios usuarios, sobre el estado <strong>de</strong> unproyecto, para ello es necesario asociar cuentas <strong>de</strong> usuarios <strong>de</strong>finidos en el sistemacon cada plantilla <strong>de</strong> proyecto (ver figura 3.12). Esta asignación se realizapresionando el botón Asignar Correos.81


Figura 3. 12: Definición <strong>de</strong> usuarios que recibirán avisos por email <strong>de</strong> proyectosFuente: El autorComo se pue<strong>de</strong> apreciar en la figura 3.12 el listado <strong>de</strong> usuarios registrados en elsistema, si se <strong>de</strong>sea que los usuarios reciban notificaciones por correo <strong>de</strong>l estado <strong>de</strong>avances <strong>de</strong>l proyecto, entonces se <strong>de</strong>be marcar la casilla etiquetada “Enviar Email”.Las notificaciones que recibe un usuario se relacionan con el estado <strong>de</strong> avance <strong>de</strong>las activida<strong>de</strong>s asociadas al proyecto, cada proyecto tiene su propia <strong>de</strong>finición <strong>de</strong>usuarios o notificaciones por correo electrónico (email).3.7.1. Definición <strong>de</strong> etapas <strong>de</strong> un proyectoDes<strong>de</strong> un punto <strong>de</strong> vista muy general, podría consi<strong>de</strong>rarse que todo proyecto tiene almenos tres etapas bien i<strong>de</strong>ntificadas, que son: Planeación, Ejecución y Entrega opuesta en marcha.Etapa <strong>de</strong> Planeación(Desmond, 2004).- durante esta etapa, el equipo <strong>de</strong> trabajo se<strong>de</strong>be concentrar en <strong>de</strong>terminar el alcance <strong>de</strong>l proyecto, satisfacer las necesida<strong>de</strong>s yrestricciones, estimar los costes, número <strong>de</strong> recursos, tiempos <strong>de</strong> ejecución.Durante esta etapa se <strong>de</strong>scompone el proyecto en activida<strong>de</strong>s que luego seránsincronizadas y ejecutadas <strong>de</strong> acuerdo con un or<strong>de</strong>n específicoy con los recursos82


que se requieran para ello.Etapa <strong>de</strong> Ejecución (Heerkens, 2007).- <strong>de</strong>terminada por las características propias<strong>de</strong> cada tipo <strong>de</strong> proyecto, y consiste en la realización misma <strong>de</strong> las activida<strong>de</strong>s<strong>de</strong>finidas durante la planeación, supone a<strong>de</strong>más la gestión a<strong>de</strong>cuada <strong>de</strong> losrecursos asignados para llevar el proyecto hacia su etapa final y el monitoreo <strong>de</strong> losavances previstos según los tiempos asignados a cada tarea durante la planeación.Etapa <strong>de</strong> Entrega o puesta en marcha.- (Cleland & Ireland, 2006) todo proyecto seinicia con el objetivo <strong>de</strong> culminarse en un plazo <strong>de</strong> tiempo <strong>de</strong>terminado y con losrecursos <strong>de</strong>finidos para ello, entregando finalmente el proyecto al cliente. Sinembargo, en la práctica, pue<strong>de</strong>n presentarse complicaciones que alargueninnecesariamente la duración <strong>de</strong>l proyecto, elevando los costos y provocandoretrasos imprevistos.La figura 3.13 muestra una ampliación <strong>de</strong> las etapas. El sistema que proponemos,permitirá administrar y hacer un seguimiento <strong>de</strong>l proyecto en las etapas <strong>de</strong>Ejecución, Control y Cierre.Figura 3. 13: Etapas generales <strong>de</strong> la administración <strong>de</strong> <strong>Proyectos</strong>Fuente: El autorLas etapas <strong>de</strong> Inicio y Planeación obe<strong>de</strong>cen más a un análisis particular que no estáconsi<strong>de</strong>rado <strong>de</strong>ntro <strong>de</strong> la solución propuesta en esta tesis, <strong>de</strong>bido a los factores queexplicamos en el Capítulo 2. Sin embargo el resultado que se obtiene durante laetapa <strong>de</strong> Planeación sirve como dato <strong>de</strong> entrada al sistema para po<strong>de</strong>r encargarse83


<strong>de</strong> las etapas siguientes. (Knutson & Bitz, 1991)3.7.2. Definición <strong>de</strong> Activida<strong>de</strong>s Generales <strong>de</strong> proyectosEs posible contar con una <strong>de</strong>finición general <strong>de</strong> activida<strong>de</strong>s(Desmond, 2004) quepue<strong>de</strong>n utilizarse en varios proyectos. Aquellas que son <strong>de</strong> uso frecuente, o que serepiten en diversos proyectos y que forman parte <strong>de</strong> las tareas o activida<strong>de</strong>sgenerales que se <strong>de</strong>ben realizar sin importar el proyecto que se lleve a cabo. Elregistro <strong>de</strong> las activida<strong>de</strong>s generales, se realiza mediante la pantalla que se muestraen la figura 3.14.Figura 3. 14: Definición <strong>de</strong> Activida<strong>de</strong>s GeneralesFuente: El autor3.7.3. Registro <strong>de</strong> plantillas por categoría <strong>de</strong> proyectosEl sistema, se basa en <strong>de</strong>finir plantillas <strong>de</strong> proyectos. (Knutson & Bitz, 1991)Lasactivida<strong>de</strong>s se <strong>de</strong>finen durante la etapa <strong>de</strong> Planeación <strong>de</strong>l proyecto, estasactivida<strong>de</strong>s son ingresadas al sistema, <strong>de</strong>ntro <strong>de</strong> la categoría <strong>de</strong> proyecto que lecorresponda, lo cual permite <strong>de</strong> alguna manera, po<strong>de</strong>r <strong>de</strong>finir plantillas generales <strong>de</strong>activida<strong>de</strong>s.Para <strong>de</strong>finir una plantilla(Desmond, 2004)en el sistema, se <strong>de</strong>be empezar por ladocumentación <strong>de</strong> los procesos, lo cual se traduce en la <strong>de</strong>finición <strong>de</strong> las activida<strong>de</strong>sque se <strong>de</strong>ben llevar a cabo para concluir un proyecto <strong>de</strong>terminado. Para la figura3.15, se muestra una plantilla <strong>de</strong> activida<strong>de</strong>s para un cliente específico, sin embargo,es posible <strong>de</strong>finir plantillas <strong>de</strong> activida<strong>de</strong>s para proyectos que correspon<strong>de</strong>n a unacategoría específica, <strong>de</strong> esta manera po<strong>de</strong>mos utilizar esta plantilla con cualquiercliente que requiera iniciar un proyecto. (Knutson & Bitz, 1991)84


Figura 3. 15: Plantilla <strong>de</strong> Activida<strong>de</strong>s para un tipo <strong>de</strong> ProyectoFuente: El autor3.8. Registro <strong>de</strong> proyectosLa planificación inicia con el registro <strong>de</strong> los proyectos (ver figura 3.16), para registrarun proyecto que va a empezar a monitorearse, es importante <strong>de</strong>finir una Or<strong>de</strong>n <strong>de</strong>Trabajo.Figura 3. 16: Registro <strong>de</strong> or<strong>de</strong>n <strong>de</strong> trabajo para un proyecto85


Fuente: El autorUna Or<strong>de</strong>n <strong>de</strong> Trabajo se crea cuando se va a iniciar un proyecto <strong>de</strong> una categoríaespecífica. Al crear una Or<strong>de</strong>n <strong>de</strong> Trabajo, se crean todas las activida<strong>de</strong>s <strong>de</strong>finidasen la plantilla <strong>de</strong>l tipo <strong>de</strong> proyecto seleccionado, colocando la estimación <strong>de</strong> tiempospara cada actividad, y calculando la fecha final estimada para el proyecto.(Sherif,2006)3.8.1. Asignación <strong>de</strong> tiemposUna vez iniciado un proyecto, los tiempos(Sherif, 2006)se asignan al proyecto<strong>de</strong>pendiendo <strong>de</strong> la plantilla seleccionada. Cada plantilla incluye la <strong>de</strong>finición <strong>de</strong> lasactivida<strong>de</strong>s, <strong>de</strong>terminadas según la documentación <strong>de</strong> los procesos <strong>de</strong> la empresa,así como también los tiempos y flujos <strong>de</strong> ejecución <strong>de</strong> cada una <strong>de</strong> las activida<strong>de</strong>s(ver figura 3.17). No es posible modificar las activida<strong>de</strong>s heredadas <strong>de</strong> una plantilla,pues éstas obe<strong>de</strong>cen a las <strong>de</strong>finiciones <strong>de</strong> los procedimientos <strong>de</strong> la empresa, y porlo tanto no <strong>de</strong>ben ser alteradas.Figura 3. 17: Asignación <strong>de</strong> tiempos para las activida<strong>de</strong>s <strong>de</strong> un tipo <strong>de</strong> proyectoFuente: El autorLos tiempos <strong>de</strong>finen la duración <strong>de</strong> las activida<strong>de</strong>s(Desmond, 2004), y ésta se86


<strong>de</strong>termina en días, horas o minutos, adicionalmente pue<strong>de</strong> <strong>de</strong>terminarse si unaactividad se convierte en crítica, cuando ha sobrepasado un límite <strong>de</strong> tiempo<strong>de</strong>finido, por ejemplo: Una actividad tiene un tiempo <strong>de</strong> ejecución asignado <strong>de</strong> 1hora, y se ha <strong>de</strong>terminado que se vuelve crítica cuando ha pasado 1 día sincompletarse.3.8.2. Responsables <strong>de</strong> las activida<strong>de</strong>sA cada actividad <strong>de</strong>finida en una plantilla, se le pue<strong>de</strong> asignar uno o variosresponsables(Sherif, 2006), sin embargo únicamente uno <strong>de</strong> ellos es quien <strong>de</strong>bemarcar la finalización <strong>de</strong> dicha actividad.Es posible asociar uno o más usuarios auna actividad, entre las tareas <strong>de</strong> los usuarios se encuentran:• Ser responsables(Desmond, 2004) <strong>de</strong> la actividad• Marcar la finalización(Desmond, 2004) <strong>de</strong> la actividad• Enviar notificaciones por email a los usuarios <strong>de</strong>finidos en las notificacionespor email <strong>de</strong>l proyecto.Figura 3. 18: Registro <strong>de</strong> usuarios asignados a una actividad87


Fuente: El autor3.8.3. Elaboración <strong>de</strong> re<strong>de</strong>sLas re<strong>de</strong>s <strong>de</strong>finen el comportamiento <strong>de</strong> las activida<strong>de</strong>s <strong>de</strong>ntro <strong>de</strong>l proyecto. Unared es un grafo <strong>de</strong> flujo <strong>de</strong> activida<strong>de</strong>s, don<strong>de</strong> se <strong>de</strong>fine el or<strong>de</strong>n <strong>de</strong> ejecución y porconsiguiente el seguimiento(Desmond, 2004) <strong>de</strong> cada una <strong>de</strong> ellas.La <strong>de</strong>finición <strong>de</strong>las re<strong>de</strong>s(Desmond, 2004)se revisó en la sección 3.1.3 “Grafo acíclico con una solaregión”, en la figura 3.19 se muestra otro ejemplo <strong>de</strong> un grafo acíclico.Figura 3. 19: Flujo <strong>de</strong> activida<strong>de</strong>s con 1 sola región, grafo acíclicoFuente: El autorEsta <strong>de</strong>finición se logra llenando una matriz <strong>de</strong> adyacencia(Desmond, 2004), la quese muestra en la figura 3.20.Figura 3. 20: Matriz <strong>de</strong> adyacencia, para flujo <strong>de</strong> activida<strong>de</strong>sFuente: El autor88


3.9. <strong>Seguimiento</strong> <strong>de</strong> proyectosUno <strong>de</strong> los principales informes que presenta la aplicación es el informe <strong>de</strong>seguimiento a los proyectos.El seguimiento muestra un resumen <strong>de</strong> las activida<strong>de</strong>sterminadas y permite marcar la finalización <strong>de</strong> las activida<strong>de</strong>s pendientes,recor<strong>de</strong>mos que para que un usuario pueda marcar el fin <strong>de</strong> una actividad, esnecesario que haya sido <strong>de</strong>finido <strong>de</strong>ntro <strong>de</strong> la plantilla <strong>de</strong>l tipo <strong>de</strong> proyecto.(Desmond, 2004)3.10. Cálculo <strong>de</strong> costos <strong>de</strong>l proyectoEl cálculo <strong>de</strong> los costos <strong>de</strong>l proyecto se realiza <strong>de</strong> manera muy sencilla, simplementese suman los costos <strong>de</strong> cada una <strong>de</strong> las activida<strong>de</strong>s asociadas al proyecto.Cadaactividad se <strong>de</strong>fine con un costo referencial, el cual no se modifica durante laejecución <strong>de</strong>l proyecto, sin embargo es posible asignar costos en forma <strong>de</strong> Datospara cada actividad, estos datos se suman para calcular el costo <strong>de</strong>l proyecto.(Heerkens, 2007)3.11. Índices <strong>de</strong> eficienciaLos índices <strong>de</strong> eficiencia se calculan para cada una <strong>de</strong> las activida<strong>de</strong>s <strong>de</strong>l proyecto yse lo realiza computando la diferencia entre el tiempo total estimado y el tiempo totalreal <strong>de</strong> culminación <strong>de</strong> una actividad. (Cleland & Ireland, 2006)El resultado es unvalor que pue<strong>de</strong> ser:• Igual a uno, la actividad terminó en el tiempo <strong>de</strong>terminado.• Menor a uno, la actividad terminó antes <strong>de</strong>l tiempo <strong>de</strong>terminado.• Mayor a uno, la actividad terminó atrasada.Los índices <strong>de</strong> eficiencia aparecen en un informe, listando por cada actividad elíndice calculado.El cálculo <strong>de</strong>l índice <strong>de</strong> eficiencia pue<strong>de</strong> modificarse alterando elprocedimiento almacenado “sp_calcula_indice”.89


3.12. Gráficos y ReportesEl sistema presenta tres reportes principales, los datos <strong>de</strong> cada uno pue<strong>de</strong>n serutilizados para ser exportados a Excel, y a partir <strong>de</strong> ellos generar informes gráficosaprovechando las herramientas <strong>de</strong> gráficos <strong>de</strong> Excel, según la necesidad <strong>de</strong>lusuario. Los reportes que se presentan en esta versión discriminan el tipo <strong>de</strong>usuario, <strong>de</strong> tal manera que se cumple lo siguiente:a) Los usuarios <strong>de</strong> tipo Clientes, solo podrán consultar sus proyectos,b) Los usuarios Supervisores, podrán visualizar todos los proyectos que se leshaya asignado.c) Los administradores, podrán visualizar todos los proyectos <strong>de</strong> todos lossupervisores y clientes.3.12.1. Informe <strong>de</strong> Activida<strong>de</strong>s pendientesLa figura 3.21 muestra la lista <strong>de</strong>l informe <strong>de</strong> las activida<strong>de</strong>s que aún no hanculminado, a la fecha <strong>de</strong> corte indicada, pudiendo filtrarse los resultados por Cliente,Supervisor o Tipo <strong>de</strong> Proyecto.Figura 3. 21: Datos para generar informe <strong>de</strong> activida<strong>de</strong>s pendientesFuente: El autorDe acuerdo a la figura 3.21 po<strong>de</strong>mos ver si el tipo <strong>de</strong>l contenido es: Resumido.- Muestra todas las Activida<strong>de</strong>s No finalizadas que no tenganpre<strong>de</strong>cesores y todas las activida<strong>de</strong>s que tengan al menos un pre<strong>de</strong>cesorfinalizado. Completo.- Muestra todas las activida<strong>de</strong>s finalizadas y no finalizadas.90


Los resultados <strong>de</strong>l informe pue<strong>de</strong>n mostrarse or<strong>de</strong>nados y agrupados por doscriterios:a) Cliente, Tipo <strong>de</strong> Proyecto y Número <strong>de</strong> Or<strong>de</strong>n,b) Supervisor, Cliente Tipo <strong>de</strong> Proyecto y Número <strong>de</strong> Or<strong>de</strong>n.El informe mostrado por la figura 3.22 nos indica los costos referenciales <strong>de</strong> cadaactividad y el tiempo <strong>de</strong> atraso en días – horas: minutos: segundos.Figura 3. 22: Ejemplo <strong>de</strong> informe <strong>de</strong> activida<strong>de</strong>s pendientesFuente: El autor3.12.2. Informe <strong>de</strong> Activida<strong>de</strong>s FinalizadasPara el presente informe muestra la lista (ver figura 3.23) <strong>de</strong> las activida<strong>de</strong>s que hanfinalizado <strong>de</strong>ntro <strong>de</strong> las fecha <strong>de</strong> corte indicadas, pudiendo filtrarse los resultadospor Cliente, Supervisor o Tipo <strong>de</strong> Proyecto.Los usuarios i<strong>de</strong>ntificados como Otros oTerceros, no podrán emitir este informe.91


Figura 3. 23: Datos para generar informe <strong>de</strong> activida<strong>de</strong>s finalizadasFuente: El autorEste informe permite analizar los resulta por tres criterios:i. Proceso y Actividadii. Cliente y Actividadiii. Supervisor, ActividadEl índice <strong>de</strong> las activida<strong>de</strong>s mostrado en este informe correspon<strong>de</strong> al promedio <strong>de</strong>los índices obtenido por la actividad en cada uno <strong>de</strong> los proyectos en los queaparece.92


Figura 3. 24: Ejemplo <strong>de</strong> informe <strong>de</strong> activida<strong>de</strong>s finalizadasFuente: El autorEste informe también permite <strong>de</strong>terminar las Activida<strong>de</strong>s que se consi<strong>de</strong>ran“Exclusiones”, entendiéndose como exclusión aquella actividad cuyo índice obtenidoen un proyecto, está fuera <strong>de</strong>l promedio más menos una <strong>de</strong>sviación estándar. Elnúmero <strong>de</strong> “Exclusiones” <strong>de</strong>termina en cuántos proyectos la actividad se consi<strong>de</strong>raExcluida <strong>de</strong>l promedio. Este dato nos permite <strong>de</strong>terminar si los tiempos planificadospara las activida<strong>de</strong>s han sido calculados exitosamente, o si tienen que ser revisados.3.12.3. Informe <strong>de</strong> Ór<strong>de</strong>nes finalizadasEste informe muestra una lista <strong>de</strong> los proyectos completados <strong>de</strong>ntro <strong>de</strong> un rango <strong>de</strong>fechas <strong>de</strong>terminado, pudiendo filtrarse los resultados por Cliente, Supervisor o Tipo<strong>de</strong> Proyecto.Figura 3. 25: Datosparalageneración<strong>de</strong> informe <strong>de</strong> ór<strong>de</strong>nes finalizadasFuente: El autorEste informe permite analizar los resulta por dos criterios:• Supervisor y Cliente,• Cliente y Tipo <strong>de</strong> ProyectoEn ambos casos se muestran tres fechas importantes: la fecha <strong>de</strong> inicio real, lafecha planificada <strong>de</strong> finalización <strong>de</strong>l proyecto y la fecha real <strong>de</strong> fin.93


Figura 3. 26: Ejemplo <strong>de</strong>l informe <strong>de</strong> ór<strong>de</strong>nes finalizadasFuente: El autorLos valores <strong>de</strong> índice y exclusión, consi<strong>de</strong>ran los mismos criterios <strong>de</strong> los reportesanteriores.3.12.4. Comparativo <strong>de</strong> costos en Ór<strong>de</strong>nes FinalizadasEste informe muestra una lista <strong>de</strong> los proyectos completados <strong>de</strong>ntro <strong>de</strong> un rango <strong>de</strong>fechas <strong>de</strong>terminado, pudiendo filtrarse los resultados por Cliente, Supervisor o Tipo<strong>de</strong> Proyecto, pero muestra un comparativo <strong>de</strong> los costos <strong>de</strong> proyecto.Figura 3. 27: Datos para la generación <strong>de</strong> informe <strong>de</strong> comparativo <strong>de</strong> costos.Fuente: El autor94


Este informe permite analizar los resulta por dos criterios:• Supervisor y Cliente,• Cliente y Tipo <strong>de</strong> ProyectoEn ambos casos se muestra el costo presupuestado y final (referencial) <strong>de</strong> cadaproyecto, con lo cual se obtiene un porcentaje comparativo <strong>de</strong> costos que pue<strong>de</strong>interpretarse según lo siguiente:• Un valor positivo indica que el proyecto tuvo un presupuesto <strong>de</strong> costo mayoral referencial final,• Un valor negativo indica que el proyecto tuvo un presupuesto <strong>de</strong> costo inferioral referencial final,• Un valor <strong>de</strong> cero o muy cercano a cero podría indicar que el presupuesto secalculó con bastante acierto.Figura 3. 28: Resumen <strong>de</strong> costos.Fuente: El autor3.12.5. Reporte <strong>de</strong> Or<strong>de</strong>n <strong>de</strong> TrabajoEste reporte aparece cuando un proyecto Inicia, si el proyecto u Or<strong>de</strong>n <strong>de</strong> Trabajono ha sidoiniciado, es posible consultarlo y luego iniciarlo, entonces este reporte aparece.95


Figura 3. 29: Reporte <strong>de</strong> or<strong>de</strong>nes <strong>de</strong> trabajos.Fuente: El autor3.12.6. Reporte <strong>de</strong> <strong>Seguimiento</strong> <strong>de</strong> Ór<strong>de</strong>nesEl seguimiento <strong>de</strong> las Ór<strong>de</strong>nes permite hacer un análisis <strong>de</strong>l estado <strong>de</strong> cadaproyecto, don<strong>de</strong> se pue<strong>de</strong> apreciar la última actividad ejecutada y la siguienteactividad por ejecutarse.96


Figura 3. 30: <strong>Seguimiento</strong> <strong>de</strong> ór<strong>de</strong>nes.Fuente: El autorAl hacer clic sobre el número <strong>de</strong> una or<strong>de</strong>n, aparece el seguimiento <strong>de</strong> la Or<strong>de</strong>n,según se pue<strong>de</strong> apreciar en la siguiente imagen.Figura 3. 31: Reporte <strong>de</strong> seguimiento <strong>de</strong> activida<strong>de</strong>s por ór<strong>de</strong>nes.Fuente: El autorLas opciones <strong>de</strong> Fin para una actividad se activan si el usuario está <strong>de</strong>finido como97


esponsable con permiso para finalizar una actividad.La impresión <strong>de</strong>l reporte <strong>de</strong>seguimiento, se lo realiza <strong>de</strong>s<strong>de</strong> el enlace “Imprimir”, mostrando el siguiente informe:Figura 3. 32: Reporte <strong>de</strong> seguimiento <strong>de</strong> or<strong>de</strong>nes <strong>de</strong> trabajos.Fuente: El autorEl porcentaje <strong>de</strong> Avance mostrado en este reporte indica que se han completado el0.95% <strong>de</strong>l tiempo planificado en las activida<strong>de</strong>s.98


Capítulo 4: Conclusiones y Recomendaciones4.1. Conclusiones La flexibilidad <strong>de</strong>l sistema permite adaptarlo a diferentes tipos <strong>de</strong> empresas, yun grupo importante <strong>de</strong> ellas son las empresas estatales, y empresas queestán implantando certificaciones <strong>de</strong> calidad en el áreaoperativa/administrativa. Es posible adaptarlo para que permita el Manejo <strong>de</strong> estadísticas <strong>de</strong>indicadores <strong>de</strong> gestión, que permitan a los directores y/o auditores llevar unregistro sobre la evolución <strong>de</strong> estas activida<strong>de</strong>s y planificar su revisión omejorar su planificación. Un aspecto interesante que no fue consi<strong>de</strong>rado, es aprovechar los avisosautomáticos <strong>de</strong> mensajes SMS (celular), notificando la ocurrencia <strong>de</strong> eventos.4.2. Recomendaciones Implementar el presente sistema en una empresa, pero previamente <strong>de</strong>berealizar una revisión <strong>de</strong> los procesos que <strong>de</strong>sean monitorearse, <strong>de</strong> maneraque puedan ser <strong>de</strong>finidos en el sistema y aprovechar su uso para mejorar lagestión <strong>de</strong> estos procesos. Al ser un software <strong>de</strong> código abierto, pue<strong>de</strong> mejorarse poniéndolo disponiblepara la comunidad, a<strong>de</strong>más pue<strong>de</strong> aprovecharse la herramienta para explotarun posible negocio <strong>de</strong> servicios, impulsando el uso <strong>de</strong>l mismo a través <strong>de</strong>algún mo<strong>de</strong>lo <strong>de</strong> marketing por internet.99


ANEXO A: GUÍA DE INSTALACIÓNEste sistema está basado en la plataforma Apache MySQL y PHP, sin embargo porsus características, es posible instalarlo para que funcione sobre Windows o Linux,según sea la preferencia <strong>de</strong>l usuario.Para la instalación <strong>de</strong> la base <strong>de</strong> datos,refiérase al manual <strong>de</strong> Mysql y luego <strong>de</strong>be crear la base <strong>de</strong> datos con el nombreSGMPROTELProject.I.1. Instalación en WindowsPara la instalación <strong>de</strong>l sistema sobre el <strong>Sistema</strong> Operativo Windows, se recomiendautilizar la plataforma integrada AppServ, que pue<strong>de</strong> <strong>de</strong>scargarla gratuitamente en lasiguiente dirección http://www.appservnetwork.com.Finalmente siga los pasos <strong>de</strong> lainstalación y luego copie la carpeta <strong>de</strong>l contenido <strong>de</strong>l proyecto <strong>de</strong>ntro <strong>de</strong> la rutaC:\AppServ\www y la aplicación estará lista para funcionar. Es importante queconfigure la habilitación <strong>de</strong> las variables globales <strong>de</strong> PHP, para ello cambie laconfiguración <strong>de</strong>l archivo php.ini y coloque register_globals = On.I.2. Instalación en LinuxPara la instalación <strong>de</strong>l sistema sobre Linux, siga los pasos <strong>de</strong> instalación paraLAMP, Linux, Apache, MySQL y PHP, que pue<strong>de</strong> obtenerlos gratuitamente en laweb.Finalmente siga los pasos <strong>de</strong> la instalación y luego copie la carpeta <strong>de</strong>lcontenido <strong>de</strong>l proyecto <strong>de</strong>ntro <strong>de</strong> la ruta raíz <strong>de</strong> Apache y la aplicación estará listapara funcionar. Es importante que configure la habilitación <strong>de</strong> las variables globales<strong>de</strong> PHP, para ello cambie la configuración <strong>de</strong>l archivo php.ini y coloqueregister_globals = On.I.3. Configuración Inicial <strong>de</strong>l SoftwareEl sistema viene preparado con la configuración inicial que se requiere, simplementeejecutando el script llamado carga_inicial.sql, pero primero <strong>de</strong>be asegurarse <strong>de</strong>haber creado la base <strong>de</strong> datos.100


ANEXO II MANUAL DE USUARIOEste documento supone que Usted tiene experiencia en el uso <strong>de</strong> un computador y<strong>de</strong> un navegador Web.En este documento encontrará algunos símbolos, tales como: Los botones están encerrados entre los símbolos .EnlaceTambién conocido como link, usualmente utilizado para:a. ejecutar una instrucción especial con respecto <strong>de</strong> los datosque acompaña, como anular, borrar, imprimir, etc.b. Saltar a otra página <strong>de</strong> la aplicación.c. Descargar un archivo.d. Cerrar la sesión <strong>de</strong> Usuario.CasillerosIcono <strong>de</strong> búsqueda, utilizado para buscar valores referentes alcampo que acompañan.Los nombres <strong>de</strong> los casilleros <strong>de</strong> datos o etiquetas apareceránen negritas.II.1.Plataforma <strong>de</strong> ejecuciónEl sistema ha sido <strong>de</strong>sarrollado bajo ambiente Web, lo que significa que parautilizarlo, necesitará tener instalado en su computador un Navegador Web, entre losrecomendados, están:Internet Explorer 6.0 o superior, Mozila Firefox y GoogleChromeAlgunas propieda<strong>de</strong>s <strong>de</strong> los navegadores han sido bloqueadas por cuestiones <strong>de</strong>seguridad, por tanto, no siempre podrá hacer uso <strong>de</strong> la tecla Backspace pararegresar a la última página visitada.II.2.La plataforma <strong>de</strong> usuario incluye101


1. La barra <strong>de</strong> menú.-- contiene las opciones <strong>de</strong>l sistema que el Administradorha activado para cada usuario, no podrá hacer otra cosa que no sea lo<strong>de</strong>finido en el menú.2. La barra <strong>de</strong> información.-contiene tres partes:a. Información <strong>de</strong>l tipo <strong>de</strong> cambio: la cual contiene:i. El tipo <strong>de</strong> cambio <strong>de</strong>l euro vigente al momento <strong>de</strong>l ingreso yii.La fecha en que se registró ese tipo <strong>de</strong> cambio.b. Información <strong>de</strong>l usuario: la cual contiene:i. El usuario que ha iniciado sesión yii.Un enlace para terminar el programa, i<strong>de</strong>ntificado como Cierre <strong>de</strong>Sesión.c. Información <strong>de</strong> la tienda, que i<strong>de</strong>ntifica la tienda en la que solicitó elingreso al sistema.3. Área <strong>de</strong> trabajo, ó área <strong>de</strong> datos.- don<strong>de</strong> se realiza toda la interacción con elsistema, ingreso <strong>de</strong> datos, cotizaciones, políticas <strong>de</strong> <strong>de</strong>scuentos, reportes,etc. Existen 3 tipos <strong>de</strong> pantallas:a. Pantallas <strong>de</strong> Ingreso/Mantenimiento <strong>de</strong> datos, sirven para registrar omodificar datos, siempre encontrará algunos casilleros acompañados <strong>de</strong>un asterisco (*) <strong>de</strong> color rojo, , lo cual indica que este casillero no pue<strong>de</strong>estar vacío.b. Pantallas <strong>de</strong> Transacciones, permiten seleccionar opciones parabúsqueda <strong>de</strong> datos y luego po<strong>de</strong>r realizar alguna operación con ellos.c. Pantallas <strong>de</strong> Reportes, contienen filtros <strong>de</strong> búsqueda, tales como fechas,rangos <strong>de</strong> valores, valores específicos, etc., con la finalidad <strong>de</strong> mostrar unconjunto <strong>de</strong> resultados que cumplan con los criterios <strong>de</strong> búsquedasolicitados.d. Usualmente <strong>de</strong>ntro <strong>de</strong>l área <strong>de</strong> datos, existen algunos que tienen un icono<strong>de</strong> búsqueda <strong>de</strong> datos, representado por éste símbolo: , el cual al serpresionado, muestra una pantalla azul con varias opciones <strong>de</strong> búsqueda,pue<strong>de</strong> utilizar el casillero <strong>de</strong> la parte superior para efectuar una búsquedaintroduciendo unas pocas letras <strong>de</strong>l elemento solicitado.102


Otra forma <strong>de</strong> buscar es: presione el mismo botón, también pue<strong>de</strong> utilizar elbotón consultar para traer todos los elementos y luego buscar el que necesita en ellistado obtenido, por ejemplo, fíjese en la siguiente figura.Figura II. 1: Ejemplo <strong>de</strong> pantalla <strong>de</strong> ayuda y/o consultaII.3.Cómo iniciar el programaDebido a que la aplicación está instalada sobre un ambiente Web, es necesariocontar con una dirección Web (URL) para po<strong>de</strong>r acce<strong>de</strong>r a la aplicación.Para iniciarla aplicación <strong>de</strong>be ingresar la dirección <strong>de</strong>l servidor Web que contiene la aplicación,que al momento <strong>de</strong> emitir este manual es: http://localhost/proyman/in<strong>de</strong>x.php.Luegopodrá ver la pantalla <strong>de</strong> acceso, como se muestra en la siguiente ilustración:Figura II. 2: Pantalla <strong>de</strong> inicio <strong>de</strong> sesiónEscriba el usuario y contraseña que le asignó el administrador <strong>de</strong>l sistema, si <strong>de</strong>seaingresar como administrador pue<strong>de</strong> utilizar admin, admin, para <strong>de</strong>finir los <strong>de</strong>másusuarios <strong>de</strong>l sistema.103


II.4. Terminar <strong>de</strong> utilizar el sistemaPara terminar una sesión (el uso <strong>de</strong>l sistema), simplemente presione el enlacei<strong>de</strong>ntificado como Cierre <strong>de</strong> Sesión, que se encuentra en la barra <strong>de</strong> información,junto al código <strong>de</strong>l Usuario, en la parte superior <strong>de</strong>recha <strong>de</strong> la pantalla <strong>de</strong> laaplicación.II.5. SeguridadEsta opción <strong>de</strong>be estar disponible para los administradores <strong>de</strong>l sistema.A través <strong>de</strong>las opciones incluidas en este menú se pue<strong>de</strong> asignar o quitar acceso a las <strong>de</strong>másopciones <strong>de</strong>l menú, es por ello que <strong>de</strong>be ser administrada con muchocuidado.Revisaremos cada una <strong>de</strong> las opciones incluidas aquí:II.6. Catálogo <strong>de</strong> tablasEsta opción forma parte medular <strong>de</strong> la configuración <strong>de</strong>l sistema, en el catálogo <strong>de</strong>tablas se encuentran distribuidos los parámetros principales que se utilizan en elsistema, que están clasificadas en.• Tipos <strong>de</strong> Datos• Tipos <strong>de</strong> Observación• Tipos <strong>de</strong> Programas• Tipos <strong>de</strong> <strong>Proyectos</strong>• Parámetros <strong>de</strong> correo electrónico• Procesos para Activida<strong>de</strong>sII.7. Usuarios <strong>de</strong>l sistemaEsta opción le permitirá ingresar nuevos usuarios al sistema o modificar los datos <strong>de</strong>los usuarios ya registrados.104


Figura II. 3: Definición <strong>de</strong> Usuarios <strong>de</strong>l sistemaII.8. RolesEl sistema <strong>de</strong> asignación <strong>de</strong> permisos a los usuarios está basado en Roles, un Rolpue<strong>de</strong> ser asignado a un grupo <strong>de</strong> opciones <strong>de</strong> menú, luego se asigna un Rol a unoo más usuarios para que éstos here<strong>de</strong>n todas las opciones <strong>de</strong> menú asignadas alRol.Figura II. 4: Definición <strong>de</strong> RolesII.9. Asignación <strong>de</strong> Roles a usuariosEsta opción le permite asignar un Rol a algún usuario, <strong>de</strong> manera que el usuarioadquiera todos los permisos <strong>de</strong> acceso que han sido <strong>de</strong>finidos para el Rol.105


Figura II. 5: Roles <strong>de</strong> UsuarioII.10. Permisos <strong>de</strong> RolesPermite asignar opciones <strong>de</strong>l menú a un Rol específico, <strong>de</strong> esa manera cualquierusuario al que se le asigne el Rol, podrá tener acceso a dichas opciones <strong>de</strong>l menú.Figura II. 6: Ejemplo <strong>de</strong> selección <strong>de</strong> opciones <strong>de</strong>l menú para un RolII.11. Menú <strong>de</strong>l sistemaEl menú es posible configurarlo y modificarlo para que muestre las <strong>de</strong>scripcionesque al usuario le agra<strong>de</strong>n, también es posible cambiar la ubicación <strong>de</strong> las opcionesen el menú <strong>de</strong>splegable y reorganizarlos para que aparezcan en una secuenciadiferente, para hacerlo, <strong>de</strong>bemos seleccionar el menú que <strong>de</strong>seamos editar ycambiar sus datos, tal como se muestra en la siguiente pantalla.106


Figura II. 7: Edición <strong>de</strong> opciones <strong>de</strong>l menú <strong>de</strong> la aplicaciónII.12. Registro <strong>de</strong> ClientesLos clientes se ingresan mediante esta pantalla, <strong>de</strong>be completar la información yguardar el registro para que los cambios tengan efecto.Figura II. 8: Registro <strong>de</strong> Clientes107


II.13. Catálogo <strong>de</strong> tipo <strong>de</strong> <strong>Proyectos</strong>Los tipos <strong>de</strong> proyectos <strong>de</strong>finidos en el sistema se configuran con esta opción, talcomo se muestra en la pantalla a continuación.Únicamente se requiere <strong>de</strong>finir uncódigo y una <strong>de</strong>scripción para registrar los tipos <strong>de</strong> <strong>Proyectos</strong> que <strong>de</strong>sea administraren el sistema. Pue<strong>de</strong> añadir cualquier tipo <strong>de</strong> proyecto que <strong>de</strong>see, se recomiendacontar con la documentación <strong>de</strong> procesos respectiva para garantizar que el sistemase configure y funcione como se espera.Figura II. 9: Catálogo <strong>de</strong> tipo <strong>de</strong> <strong>Proyectos</strong>II.14. Subtipo <strong>de</strong> <strong>Proyectos</strong>Los proyectos se clasifican en tipos y subtipos, la creación <strong>de</strong> los subtipos esin<strong>de</strong>pendiente <strong>de</strong> los tipos <strong>de</strong> proyectos, sin embargo se relacionan cuando se creauna plantilla <strong>de</strong> proyecto. Para la creación <strong>de</strong> Subtipo <strong>de</strong> <strong>Proyectos</strong>, ingrese losdatos en la siguiente pantalla:108


Figura II. 10: Catálogo <strong>de</strong> Subtipo <strong>de</strong> <strong>Proyectos</strong>II.15. PlantillasLas plantillas, le permiten pre<strong>de</strong>finir los tipos y subtipos <strong>de</strong> proyectos, con susactivida<strong>de</strong>s, prerrequisitos, responsables y datos, así como la secuencia <strong>de</strong>ejecución <strong>de</strong> las activida<strong>de</strong>s y el tiempo asignado a cada una <strong>de</strong> ellas, pararegistrarlos, <strong>de</strong>be llenar la siguiente pantalla:109


Figura II. 11: Tipos <strong>de</strong> proyectosII.16. Definición cuentas correoEs posible asociar usuarios <strong>de</strong> correo a una plantilla, para ello presione le botón y marque los usuarios que <strong>de</strong>sea asociar, tal como se muestraen la siguiente ilustración.110


Figura II. 12: Selección <strong>de</strong> usuarios en la plantilla <strong>de</strong> proyectosII.17. Definición <strong>de</strong> las activida<strong>de</strong>s en una plantilla <strong>de</strong> proyectoLas activida<strong>de</strong>s se <strong>de</strong>finen presionando el botón , en esta pantalla podráingresar las activida<strong>de</strong>s pre<strong>de</strong>finidas en el sistema y asignarle datos, usuarios y<strong>de</strong>finir el or<strong>de</strong>n <strong>de</strong> ejecución <strong>de</strong> ellas.Para completar esta información, <strong>de</strong>be llenaruna plantilla como se muestra en la siguiente ilustración.Figura II. 13: Activida<strong>de</strong>s <strong>de</strong>l tipo <strong>de</strong> proyecto111


Presione el botón para obtener un informe <strong>de</strong> la plantilla, don<strong>de</strong> se muestrael resumen <strong>de</strong> las activida<strong>de</strong>s, con sus datos, pre<strong>de</strong>cesores y tiempos <strong>de</strong> ejecuciónasignados, así como también se muestra el or<strong>de</strong>n <strong>de</strong> ejecución <strong>de</strong> las activida<strong>de</strong>s.Elbotón , le permite <strong>de</strong>finir la matriz <strong>de</strong> pre<strong>de</strong>cesores <strong>de</strong>l sistema.Figura II. 14: Definición <strong>de</strong>l Flujo <strong>de</strong> activida<strong>de</strong>s para la plantillaII.18. Registro <strong>de</strong> Usuarios por actividadEn la plantilla, las activida<strong>de</strong>s pue<strong>de</strong>n tener asociados usuarios, para ello, presioneel enlace Usuarios en la columna “Responsables”, <strong>de</strong> la lista <strong>de</strong> activida<strong>de</strong>s <strong>de</strong>finidaspara la plantilla, la siguiente ilustración muestra un ejemplo <strong>de</strong> ello:112


Figura II. 15: Usuarios <strong>de</strong>finidos por actividadII.19. Copiar plantillaUna funcionalidad muy importante es la <strong>de</strong> Copiar Plantilla. Ocurre que pue<strong>de</strong> tenerplantillas que pertenezcan a tipos <strong>de</strong> proyectos diferentes, sin embargo la mayoría<strong>de</strong> las activida<strong>de</strong>s <strong>de</strong>finidas en una plantilla son muy parecidas a la nueva, por loque es más sencillo hacer una copia y modificarla, que volver a ingresar la plantillacompleta. Esto se logra mediante el botón , en la pantalla <strong>de</strong> plantillas.113


Figura II. 16: Pantalla para importar plantillasII.20. Registro <strong>de</strong> Ór<strong>de</strong>nesCuando tiene que iniciar un proyecto, se <strong>de</strong>be iniciar una or<strong>de</strong>n, las ór<strong>de</strong>nes sirvenpara asignar responsables y tareas en un tipo <strong>de</strong> proyecto <strong>de</strong>terminado.Las ór<strong>de</strong>nesheredan las <strong>de</strong>finiciones (plantillas) <strong>de</strong>l tipo <strong>de</strong> proyecto seleccionado, incluyendo losresponsables <strong>de</strong> cada actividad, los datos <strong>de</strong>finidos para las activida<strong>de</strong>s y el flujo <strong>de</strong>ejecución <strong>de</strong> las activida<strong>de</strong>s. Pero a<strong>de</strong>más es importante completar el costoPresupuestado, para po<strong>de</strong>r hacer una comparación final con el costo referencial <strong>de</strong>lproyecto.La siguiente ilustración muestra como luce una Or<strong>de</strong>n Iniciada para un tipo<strong>de</strong> proyecto dado.114


Figura II. 17: Registro / Inicio <strong>de</strong> Flujo <strong>de</strong> Trabajo <strong>de</strong> un proyectoII.21. Asociar Ór<strong>de</strong>nes <strong>de</strong> ClientesLos Clientes pue<strong>de</strong>n tener documentos que <strong>de</strong>sean asociar a un proyecto, estaversión contempla la posibilidad <strong>de</strong> guardar una referencia que permita relacionaruno o más proyectos, para ello se <strong>de</strong>be completar la siguiente pantalla.115


Figura II. 18: Asociar <strong>Proyectos</strong> utilizando números <strong>de</strong> referencia116


ANEXO III GLOSARIO DE TÉRMINOSAESOFT: Asociación Ecuatoriana <strong>de</strong> SoftwareEXCLUSION: Aquella actividad cuyo índice obtenido en un proyecto, está fuera <strong>de</strong>lpromedio más menos una <strong>de</strong>sviación estándar.GPL: Generic Public License, Texto <strong>de</strong> la Licencia Pública General enhttp://www.gnu.org/licenses/gpl.txtLAMP: Linux Apache MySQL PhpOpen Source: Código Abierto117


ANEXO IV DICCIONARIO DE DATOSCAC_TABLAColumna TipoDatoCodigoNombre<strong>de</strong>NUMERIC(2)VARCHAR(50)ClavePrimariaNulo Ban<strong>de</strong>raValorinicial ComentarioCódigo <strong>de</strong> latablaNombre <strong>de</strong> latablaAutoIncCATEGORIA_DESCARGAColumna TipoDatocodigonombre<strong>de</strong>scripcion<strong>de</strong>INTEGER(4)VARCHAR(100)VARCHAR(250)ClavePrimariaNulo Ban<strong>de</strong>raValorinicial ComentarioPK NN Código <strong>de</strong> objetoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY CodigoNombre <strong>de</strong> objetoDescripciónobjeto<strong>de</strong>scarga<strong>de</strong>paraAutoIncDESCARGAColumna TipoDato<strong>de</strong>ClavePrimariaNulo Ban<strong>de</strong>raValorinicial ComentarioAutoInccodigoINTEGER(4)PKNNCódigoarchivo<strong>de</strong>scarga<strong>de</strong><strong>de</strong>categoria INTEGER(4)Categoríaarchivo<strong>de</strong>scarga<strong>de</strong>l<strong>de</strong>nombreVARCHAR(50)Nombrearchivo<strong>de</strong>l118


<strong>de</strong>scripcionnom_archivoVARCHAR(250)VARCHAR(250)NNDescripcióncontenidoarchivo<strong>de</strong>l<strong>de</strong>lNombre Físico<strong>de</strong>l archivo endiscoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigodias_feriadosColumna TipoDato<strong>de</strong>ClavePrimariacodigo BIGINT(18) PK NNdia_feriadoDATETIMENulo Ban<strong>de</strong>raNNpais CHAR(10) NNestado CHAR(10) NNciudad CHAR(10) NNValorinicial ComentarioCódigo <strong>de</strong>registro <strong>de</strong>l díaferiadoFecha <strong>de</strong>l diaferiadoPais don<strong>de</strong> aplicael día feriadoEstado oprovincia don<strong>de</strong>aplica el feriadoCiudad don<strong>de</strong>aplica el feriadoAutoIncNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY CodigoESTADOColumna TipoDatocodigo<strong>de</strong>scripcion<strong>de</strong>NUMERIC(2)VARCHAR(25)ClavePrimariaPKNulo Ban<strong>de</strong>raNNValorinicial ComentarioCódigo <strong>de</strong> estado<strong>de</strong> los registrosDescripciónestado<strong>de</strong>lAutoInc119


Nombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigoESTADO_TABLAColumnatablaestadoTipoDato<strong>de</strong>NUMERIC(2)NUMERIC(2)ClavePrimariaNuloBan<strong>de</strong>raValorinicialComentarioCódigo <strong>de</strong>lEstado <strong>de</strong> lasTablasDescripciónGeneral <strong>de</strong>lEstado <strong>de</strong> lastablasAutoIncjornada_laboralConfiguración <strong>de</strong> la Jornada Laboral (JL) para el sistema, solo se pue<strong>de</strong><strong>de</strong>finir un registro en todo el sistemaColumnacodigohora_iniTipoDato<strong>de</strong>BIGINT(18)TINYINT(3)minuto_ini TINYINT(3)hora_finTINYINT(3)minuto_fin TINYINT(3)ClavePrimariaPKNuloNNNNNNNNNNBan<strong>de</strong>raValorinicialComentarioCódigoregistro<strong>de</strong>lHora inicial <strong>de</strong> laJLMinutos iniciales<strong>de</strong> la JLHora final <strong>de</strong> laJLMinutos<strong>de</strong> la JLNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigofinalesAutoInc120


OPCION_SISTEMAOpciones <strong>de</strong>l menú <strong>de</strong>l sistemaColumnacodigoTipoDato<strong>de</strong>INTEGER(4)<strong>de</strong>scripcion VARCHAR(250)alternativonombre_fisicoparametrofecha_creacionopcion_superiorventana_nuevaor<strong>de</strong>n_presentacionVARCHAR(250)VARCHAR(250)VARCHAR(10)DATETIMENUMERIC(4)CHAR(10)NUMERIC(2)tipo_opcion NUMERIC(2)posicionNUMERIC(2)ClavePrimariaPKNuloNNNNNNNNNNNNBan<strong>de</strong>raValorinicial(getdate())ComentarioCódigoregistro<strong>de</strong>lDescripción <strong>de</strong>lmenúNombrealternativoNobre fisico <strong>de</strong>larchivoasociado almenúParámetro querecibe el archivoo programaFecha <strong>de</strong>creación <strong>de</strong> laopciónCódigo <strong>de</strong> menúsuperiorBan<strong>de</strong>ra paraindicar si laopción se cargaen una ventananuevaOr<strong>de</strong>n <strong>de</strong>presentación <strong>de</strong>lmenúTipo <strong>de</strong> opción (menú,submenú)Posición <strong>de</strong>ubicación <strong>de</strong>lmenú, <strong>de</strong>faulttopAutoInc121


estadoNUMERIC(2)CódigoestadoregistroNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigo<strong>de</strong>l<strong>de</strong>lPARÁMETROParámetros Generales <strong>de</strong>l SisitemaColumnacodigoclase<strong>de</strong>scripcionnombrevalortipo_datoestadoTipoDato<strong>de</strong>INTEGER(4)VARCHAR(50)VARCHAR(250)VARCHAR(50)VARCHAR(100)CHAR(1)NUMERIC(2)ClavePrimariaPKNuloNNBan<strong>de</strong>raValorinicialComentarioCódigoregistroClaseparámetro<strong>de</strong>l<strong>de</strong>Descripción <strong>de</strong>lparámetroNombreparámetroValor asignado<strong>de</strong>lTipo <strong>de</strong>valor/dato (texto,número)Códigoestadoregistro<strong>de</strong>l<strong>de</strong>lAutoIncNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigoPERMISOColumnaTipoDato<strong>de</strong>ClavePrimariaNuloBan<strong>de</strong>raValorinicialComentarionumero INTEGER( Numero <strong>de</strong>lAutoInc122


olopcion_sistema4) registroNUMERIC(2)NUMERIC(4)Codigo <strong>de</strong>l RolOpción <strong>de</strong>lmenú asignadaal RolPOSICION_MENUColumnacodigo<strong>de</strong>scripcionROLColumnacodigo<strong>de</strong>scripcionestadoTipoDato<strong>de</strong>NUMERIC(2)VARCHAR(10)TipoDato<strong>de</strong>INTEGER(4)VARCHAR(100)NUMERIC(2)ClavePrimariaClavePrimariaNuloNuloBan<strong>de</strong>raBan<strong>de</strong>raValorinicialValorinicialComentarioCódigo <strong>de</strong>l item<strong>de</strong> menúDescripción <strong>de</strong>lItem <strong>de</strong>l MenúComentarioPK NN Código <strong>de</strong>l RolDescripción <strong>de</strong>lRolEstado (Activo,Inactivo,Eliminado)Nombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigoAutoIncAutoIncROL USUARIOColumnarolTipoDato<strong>de</strong>INTEGER(4)ClavePrimariaNuloBan<strong>de</strong>raValorinicialComentarioPK NN Código <strong>de</strong> rolAutoInc123


user_idfecha_asignacionfecha_caducanunca_caducaVARCHAR(15)CHAR(10)CHAR(10)VARCHAR(1)PK NN UsuarioNNNNFechaasignaciónrolFechacaducidad<strong>de</strong><strong>de</strong>l<strong>de</strong>Ban<strong>de</strong>ra paraindicar que laasignación nocaducaNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY roluser_idtb_cat_subtipotramiteColumnacod_subtipotramite<strong>de</strong>scripcionTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(50)ClavePrimariaPKNuloNNNNBan<strong>de</strong>raValorinicialComentarioCódigoCategoríaSubtipoProyecto<strong>de</strong><strong>de</strong><strong>de</strong>Descripción <strong>de</strong>SubcategoríaNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY cod_subtipotramiteAutoInctb_cat_tipotramiteColumnacod_tipotramiteTipoDatoVARCHAR(10)<strong>de</strong>ClavePrimariaPKNuloNNBan<strong>de</strong>raValorinicialComentarioCódigo <strong>de</strong> lacategoría <strong>de</strong>ltipo <strong>de</strong> Proyecto<strong>de</strong>scripcion VARCHAR NN Descripción <strong>de</strong>AutoInc124


(50) CategoríaNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY cod_tipotramitetb_catalogo_tablasCatálogo <strong>de</strong> tablas <strong>de</strong>l sistema, es posible configurar varias tablas con suselementos en el sistema.Columnacodigo<strong>de</strong>scripcionTipoDato<strong>de</strong>BIGINT(18)VARCHAR(50)tipo_objeto NUMERIC(9)pertenece_avalorNUMERIC(18)VARCHAR(255)ClavePrimariaPKNuloNNNNNNNNBan<strong>de</strong>raValorinicialComentarioCódigoregistroDescripciónla tabla<strong>de</strong>l<strong>de</strong>Tipo <strong>de</strong> objeto(registro, tabla)Código <strong>de</strong> latabla a la quepertenece elregistroValor asignadoal registro <strong>de</strong> latablaNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigoAutoInctb_wf_activ_tipo_tramDefinición <strong>de</strong> Activida<strong>de</strong>s por Tipo <strong>de</strong> ProyectoColumnatipo_tramitesubtipotramitecod_clienteTipoDatoVARCHAR(10)VARCHAR(10)VARCHAR(15)<strong>de</strong>ClavePrimariaPKPKNuloNNNNBan<strong>de</strong>raValorinicialComentarioTipoProyectoSubtipoProyectoPK NN Cliente<strong>de</strong><strong>de</strong>AutoInc125


cod_actividador<strong>de</strong>n_ejecucioncosto_refprograma_relacca<strong>de</strong>na_comandostipo_programaVARCHAR(15)NUMERIC(18)DECIMAL(12, 4)VARCHAR(255)VARCHAR(255)NUMERIC(18)PK NN ActividadNNNNNNNNNNduracion INTEGER NN (0)formato CHAR(1) NNes_critica CHAR(1) NNdias_maximoINTEGER NN (0)Or<strong>de</strong>n <strong>de</strong>ejecución <strong>de</strong> laActividadCostoreferencialProgramaasociado con laactividad, paracompatibilidadcon sistemasexternosCa<strong>de</strong>na <strong>de</strong>comandos aejecutar, paracompatibilidadcon sistemasexternosTipo <strong>de</strong>programa aejecutar, paracompatibilidadcon programasexternosDuración <strong>de</strong> laActividadCódigo <strong>de</strong>duración <strong>de</strong> laactividad (días,horas, minutos,semanas)Ban<strong>de</strong>ra paraindicar si laactividad escríticaTiempo máximoen días que<strong>de</strong>bentranscurrir para126


<strong>de</strong>clararcríticaactividadNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_tramitesubtipotramitecod_clientecod_actividadcomolatb_wf_activida<strong>de</strong>s_fmtPlantilla <strong>de</strong> Activida<strong>de</strong>s GeneralesColumnacod_actividadnombre_cortonombre_actividadcosto_refTipoDato<strong>de</strong>VARCHAR(15)VARCHAR(30)VARCHAR(250)DECIMAL(12, 4)ClavePrimariaPKNuloNNNNNNNNduracion INTEGER NNformato CHAR(1) NNprocesoNUMERIC(4)NNBan<strong>de</strong>raValorinicialComentarioCódigoActividad<strong>de</strong>Nombre corto <strong>de</strong>referenciaDescripciónlarga <strong>de</strong> laActividadCostoreferencialDuraciónestimada <strong>de</strong> laActividadFormato <strong>de</strong>duración (dias,semanas, horas,minutos)Nombre <strong>de</strong>proceso externo,paracompatibilidadcon otrossistemasNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY cod_actividadAutoInc127


tb_wf_activida<strong>de</strong>s_or<strong>de</strong>nesColumnaTipoDato<strong>de</strong>tipo_or<strong>de</strong>n VARCHAR(10)numero_or<strong>de</strong>ncod_actividador<strong>de</strong>n_ejecucionfecha_iniciofecha_finfecha_fin_recalcVARCHAR(15)VARCHAR(15)NUMERIC(18)DATETIMEDATETIMEDATETIMEcosto_final DECIMAL(15, 4)estadonombre_cortonombre_actividadVARCHAR(15)VARCHAR(30)VARCHAR(250)ClavePrimariaPKPKPKNuloNNNNNNNNNNNNNNBan<strong>de</strong>raNN (0)NNNNNNduracion INTEGER NNformato CHAR(1) NNValorinicialComentarioCódigo <strong>de</strong>l tipo<strong>de</strong> Or<strong>de</strong>nNúmero <strong>de</strong> laOr<strong>de</strong>nCódigo <strong>de</strong> laActividadOr<strong>de</strong>n <strong>de</strong>ejecución <strong>de</strong> laActividadFecha <strong>de</strong> inicio<strong>de</strong> la ActividadFechaculminaciónla Actividad<strong>de</strong><strong>de</strong>Fecha <strong>de</strong> InicioRecalculadaCosto Final <strong>de</strong>la ActividadEstado <strong>de</strong> laActividadNombre corto <strong>de</strong>la ActividadDescripciónla Actividad<strong>de</strong>Tiempo <strong>de</strong>Duración <strong>de</strong> laActividad, paracalcular la fechafinalFormato <strong>de</strong>Tiempo <strong>de</strong>Duración (Días,Horas, Minutos)fecha_fin_r DATETIM NN Fecha FinalAutoInc128


eal E Real <strong>de</strong> laActividadprocesoNUMERIC(4)NNes_critica CHAR(1) NNdias_maximoruadiferencia_diasdiferencia_horasdiferencia_minutosindiceINTEGERVARCHAR(15)INTEGERINTEGERINTEGERNUMERIC(6, 2)pre<strong>de</strong>finida CHAR(1)NNNNNNNNNNNN (0)NNCódgio <strong>de</strong>lProcesoasociado <strong>de</strong> laActividadMarca paraindicar si laActividad escrítica (S,N)Días que <strong>de</strong>bentranscurrir paraque la actividadsea crítica, solosi el campoes_critica = SCódigo <strong>de</strong>lRegistro Unico<strong>de</strong> AuditoríaDias <strong>de</strong>diferencia entrefecha final real yestimadaHoras <strong>de</strong>diferencia entrefecha final real yestimadaMinutos <strong>de</strong>diferencia entrefecha final real yestimadaNúmero <strong>de</strong>Indice, utilizadopara or<strong>de</strong>nar lasActivida<strong>de</strong>sMarca para<strong>de</strong>terminar si laactividad vienepre<strong>de</strong>finida <strong>de</strong> laplantilla129


fecha_inicio_realDATETIMENNFecha Real <strong>de</strong>Inicio <strong>de</strong> laActividadNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nnumero_or<strong>de</strong>ncod_actividadtb_wf_clientesColumnacod_clientenombre_razonsocialapellidonum_i<strong>de</strong>ntificaciontipo_i<strong>de</strong>ntificatipo_personadirecciontelefonofaxTipoDato<strong>de</strong>VARCHAR(15)VARCHAR(50)VARCHAR(50)DECIMAL(13)CHAR(1)CHAR(1)VARCHAR(100)VARCHAR(25)VARCHAR(25)ClavePrimariaPKNuloNNNNNNNNBan<strong>de</strong>raValorinicial('')(null)(0)('0')('0')('')(null)(null)ComentarioCódigoClienteNombreRazón Social<strong>de</strong>loApellidos, encaso <strong>de</strong>Persona NaturalNúmeroI<strong>de</strong>ntificación<strong>de</strong>Tipo <strong>de</strong>I<strong>de</strong>ntificación(Cédula,Pasaporte, Ruc)IndicadorPersonaNatural,PersonaJurídicaDireccióndomicilioClienteNúmeroteléfonoCliente<strong>de</strong><strong>de</strong>l<strong>de</strong><strong>de</strong>lNúmero <strong>de</strong> fax<strong>de</strong>l ClienteAutoInc130


fecha_ingresoCHAR(10)observacion VARCHAR(100)estadoresi<strong>de</strong>nciaresi<strong>de</strong>ncia_<strong>de</strong>scripDECIMAL(2)NUMERIC(4)VARCHAR(30)NNNNNN('0000-00-00')(null)(0)FechaIngresoCliente<strong>Sistema</strong>Observacioneso ComentarioCódigoEstado<strong>de</strong><strong>de</strong>lal<strong>de</strong>lCódigo <strong>de</strong>Referencia paraZonificar laresi<strong>de</strong>nciaDescripciónadicional <strong>de</strong> laResi<strong>de</strong>ncia(actualmentebloqueado)Nombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY cod_clientetb_wf_cola_fin_activColumnasecuencialnumero_or<strong>de</strong>ncod_actividadTipoDato<strong>de</strong>BIGINT(18)VARCHAR(15)VARCHAR(15)procesado CHAR(1)ClavePrimariaPKNuloNNBan<strong>de</strong>raValorinicial('N')ComentarioNúmerosecuencial <strong>de</strong>los elementosen la colaNúmero <strong>de</strong> laOr<strong>de</strong>n <strong>de</strong>ServicioCódigo <strong>de</strong> laActividadincluido en laOr<strong>de</strong>nMarca paraindicar si elregistro fueAutoInc131


procesado en lacolaNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY secuencialtb_wf_correo_or<strong>de</strong>nColumnatipo_or<strong>de</strong>nuseridsubjectbodyTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(40)VARCHAR(40)VARCHAR(250)ClavePrimariaPKPKNuloNNNNNNNNBan<strong>de</strong>raValorinicialComentarioTipo <strong>de</strong> Or<strong>de</strong>n<strong>de</strong> servicioUsuario querecibe email porel tipo <strong>de</strong> or<strong>de</strong>nAsunto <strong>de</strong> emailCuerpomensajeemailNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nuserid<strong>de</strong>l<strong>de</strong>lAutoInctb_wf_correo_tipotramiteColumnaTipoDato<strong>de</strong>secuencia BIGINT(18)tipo_tramitesubtipotramitecod_clienteVARCHAR(10)VARCHAR(10)VARCHAR(15)ClavePrimariaPKNuloNNNNNNNNBan<strong>de</strong>raValorinicialComentarioNúmerosecuencialregistro<strong>de</strong>lTipo <strong>de</strong> proyectoSubtipoproyectoCódigoCliente<strong>de</strong><strong>de</strong>lAutoInc132


user_idVARCHAR(15)envio_mail CHAR(1)NNNNUsuarioBan<strong>de</strong>ra paraindicar si envíaemailNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY secuenciatb_wf_datos_activ_tipo_tramColumnatipo_tramitesubtipotramitecod_clientecod_actividaddato_asociadotipo_datoTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(10)VARCHAR(15)VARCHAR(15)VARCHAR(10)NUMERIC(18)requerido CHAR(1)<strong>de</strong>scripcionVARCHAR(30)ClavePrimariaPKPKPKPKPKNuloNNNNNNNNNNNNNNNNBan<strong>de</strong>raValorinicialComentarioTipoProyectoSubtipoProyectoCódigoCliente<strong>de</strong><strong>de</strong><strong>de</strong>lCódigo <strong>de</strong> laActividadDato asociado ala ActividadTipo <strong>de</strong> dato(texto, costo,fecha)Ban<strong>de</strong>ra para<strong>de</strong>terminarobligatoriedadDescripción <strong>de</strong>lDatoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_tramitesubtipotramitecod_clientecod_actividaddato_asociadoAutoInc133


tb_wf_datos_actividadDatos <strong>de</strong> la actividad generalColumnacod_actividaddato_asociadotipo_datoTipoDato<strong>de</strong>VARCHAR(15)VARCHAR(10)NUMERIC(18)requerido CHAR(1)<strong>de</strong>scripcionVARCHAR(30)ClavePrimariaPKPKNuloNNNNNNNNBan<strong>de</strong>raValorinicialComentarioCódigo general<strong>de</strong> ActividadDato asociado ala ActividadTipo <strong>de</strong> dato(texto, costo,fecha)Ban<strong>de</strong>ra para<strong>de</strong>terminar si eldato esobligatorioDescripción <strong>de</strong>lDatoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY cod_actividaddato_asociadoAutoInctb_wf_datos_actividad_or<strong>de</strong>nDatos <strong>de</strong> la actividad cuando se inicia una Or<strong>de</strong>n <strong>de</strong> Trabajo (proyecto)Columnatipo_or<strong>de</strong>nnumero_or<strong>de</strong>ncod_actividaddato_asociadotipo_datoTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(15)VARCHAR(15)VARCHAR(10)NUMERIC(18)ClavePrimariaPKPKPKPKNuloNNNNNNNNBan<strong>de</strong>raValorinicialComentarioTipo <strong>de</strong> Or<strong>de</strong>n<strong>de</strong> trabajoNúmero <strong>de</strong> laOr<strong>de</strong>n <strong>de</strong>trabajoCódigo <strong>de</strong> laActividadDato asociado ala ActividadTipo <strong>de</strong> Dato(texto, costo,AutoInc134


equerido CHAR(1)<strong>de</strong>scripcionVARCHAR(30)valor_num DECIMAL(15, 4)valor_fechaDATETIMEvalor_texto VARCHAR(250)NNNNNNNNNNfecha)Ban<strong>de</strong>ra para<strong>de</strong>terminar si eldato esobligatorioDescripción <strong>de</strong>ldatoValor si esnuméricoValor si es fechaValor si es textoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nnumero_or<strong>de</strong>ncod_actividaddato_asociadotb_wf_datos_asociadosDatos <strong>de</strong>finidos en la plantilla <strong>de</strong> <strong>Proyectos</strong>Columnatipo_tramitesubtipotramitecod_clientedato_asociado<strong>de</strong>scripciontipo_datoTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(10)VARCHAR(15)VARCHAR(10)VARCHAR(30)VARCHAR(3)ClavePrimariaPKPKPKNuloNNNNNNBan<strong>de</strong>raValorinicialComentarioTipoProyectoSubtipoProyectoClientepre<strong>de</strong>finidoPK NN Dato asociadoNN<strong>de</strong><strong>de</strong>Descripción <strong>de</strong>ldatoTipo <strong>de</strong> dato(texto, fecha,costo)AutoInc135


equerido CHAR(1)NNBan<strong>de</strong>ra para<strong>de</strong>terminar si eldato esrequeridoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_tramitesubtipotramitecod_clientedato_asociadotb_wf_datos_or<strong>de</strong>nesColumnatipo_or<strong>de</strong>nnumero_or<strong>de</strong>ndato_asociadotipo_datoTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(15)VARCHAR(10)VARCHAR(3)requerido CHAR(1)<strong>de</strong>scripcionVARCHAR(30)valor_num DECIMAL(15, 4)ClavePrimariaNuloBan<strong>de</strong>raValorinicialComentarioPK NN Tipo <strong>de</strong> Or<strong>de</strong>nPKPKNNNNNNNNNNNúmeroOr<strong>de</strong>n<strong>de</strong>Código <strong>de</strong>l Datoasociado a laOr<strong>de</strong>nTipo <strong>de</strong> Dato(numérico, texto,fecha, costo)Marca paraindicar que estedato esrequerido encualquierpantalla <strong>de</strong>ingresoDescripcióngeneral <strong>de</strong>l tipo<strong>de</strong> datoSe llena si eldato esnuméricovalor_fech DATETIM NN Se llena si elAutoInc136


a E dato es fechavalor_texto VARCHAR(250)pre<strong>de</strong>finido CHAR(1)NNNNSe llena si eldato es textoBan<strong>de</strong>ra para<strong>de</strong>teminar si eldato espre<strong>de</strong>finido o noNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nnumero_or<strong>de</strong>ndato_asociadotb_wf_<strong>de</strong>f_prerrequisitoColumnatipo_tramitesubtipotramitecod_clientecod_actividadactiv_prerreqTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(10)VARCHAR(15)VARCHAR(15)VARCHAR(15)ClavePrimariaPKPKNuloNNNNBan<strong>de</strong>raValorinicialComentarioTipoProyectoSubtipoProyectoPK NN ClientePK NN ActividadPKNN<strong>de</strong><strong>de</strong>Prerrequisito <strong>de</strong>la ActividadNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_tramitesubtipotramitecod_clientecod_actividadactiv_prerreqAutoInctb_wf_err_<strong>de</strong>f_flujoPermite almacenar los errores encontrados al <strong>de</strong>finir un flujo <strong>de</strong> activida<strong>de</strong>sColumna Tipo <strong>de</strong> Clave Nul Band Valor Comentario Auto137


cod_regtipo_tramitesubtipotramitecod_clientecod_actividadactiv_prerreqfecha_procesoca<strong>de</strong>na_errorDatoBIGINT(18)VARCHAR(10)VARCHAR(10)VARCHAR(15)VARCHAR(10)VARCHAR(10)DATETIMEVARCHAR(255)PrimariaPKo era inicial IncNNNNCódigoregistroTipoProyectoSubtipoProyectoClienteActividad<strong>de</strong><strong>de</strong><strong>de</strong>Prerrequisito <strong>de</strong>la ActividadFecha <strong>de</strong>procesamientoMensaje <strong>de</strong>error encontradoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY cod_regtb_wf_err_flujo_or<strong>de</strong>nPara almacenar los errores encontrados en la Or<strong>de</strong>n <strong>de</strong> TrabajoColumnacod_regTipoDato<strong>de</strong>BIGINT(18)tipo_or<strong>de</strong>n VARCHAR(10)numero_or<strong>de</strong>ntipo_tramitesubtipotramiteVARCHAR(10)VARCHAR(10)VARCHAR(10)ClavePrimariaPKNuloNNBan<strong>de</strong>raValorinicialComentarioCódigoregistro<strong>de</strong>Tipo <strong>de</strong> Or<strong>de</strong>n<strong>de</strong> TrabajoNúmeroOr<strong>de</strong>nTrabajoTipoProyectoSubtipoProyecto<strong>de</strong><strong>de</strong><strong>de</strong><strong>de</strong>AutoInc138


cod_clientecod_actividadactiv_prerreqfecha_procesoca<strong>de</strong>na_errorVARCHAR(15)VARCHAR(10)VARCHAR(10)DATETIMEVARCHAR(255)NNClienteActividadPrerrequisitoFecha <strong>de</strong>procesamientoMensaje <strong>de</strong>error encontradoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY cod_regTB_WF_FORMATO_TIEMPOFormato <strong>de</strong> tiempos medidos para las activida<strong>de</strong>s, están <strong>de</strong>finidos : días,horas, minutos, semanasColumnaTipoDato<strong>de</strong>ClavePrimariaNuloBan<strong>de</strong>raValorinicialComentariocodigo CHAR(1) PK NN Código <strong>de</strong>finido<strong>de</strong>scripcionVARCHAR(30)NNDescripción <strong>de</strong>lformato <strong>de</strong>tiempoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigoAutoInctb_wf_observ_actividadObservaciones grabadas en la Or<strong>de</strong>n <strong>de</strong> TrabajoColumnasecuenciatipo_or<strong>de</strong>nTipoDato<strong>de</strong>BIGINT(18)VARCHAR(10)ClavePrimariaPKNuloNNBan<strong>de</strong>raValorinicialComentarioSecuenciaregistroTipo <strong>de</strong> Or<strong>de</strong>nnumero_ord VARCHA Número <strong>de</strong><strong>de</strong>lAutoInc139


en R(15) Or<strong>de</strong>ncod_actividadtipo_observacionsubtipo_observacionfecha_ingresouser_idtexto_observacionruaVARCHAR(15)VARCHAR(3)VARCHAR(3)DATETIMEVARCHAR(15)VARCHAR(255)VARCHAR(15)NN (getdate())NNNNNNActividad <strong>de</strong> laOr<strong>de</strong>nTipoobservaciónSubtipoobservación<strong>de</strong><strong>de</strong>Fecha <strong>de</strong>registroUsuario queregistró laobservaciónTexto <strong>de</strong> laobservaciónRegistro Único<strong>de</strong> AuditoríaNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY secuenciatb_wf_observacionPlantilla <strong>de</strong> tipos <strong>de</strong> observacionesColumnatipo_observacionsubtipo_observacion<strong>de</strong>talle_observacionuser_idfecha_horaTipoDato<strong>de</strong>NUMERIC(18)NUMERIC(18)VARCHAR(254)VARCHAR(15)DATETIMEClavePrimariaPKPKNuloNNNNNNNNNNBan<strong>de</strong>raValorinicial(getdate())ComentarioTipoobservaciónSubtipoobservación<strong>de</strong><strong>de</strong>Detalle <strong>de</strong> laobservaciónUsuarioFecharegistroNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_observacionsubtipo_observacion<strong>de</strong>AutoInc140


tb_wf_oc_clienteColumnatipo_or<strong>de</strong>nnumero_or<strong>de</strong>nnum_oc_cliente<strong>de</strong>scripcionfecha_reffecha_ingresoTipoDatoVARCHAR(10)VARCHAR(15)VARCHAR(25)<strong>de</strong>VARCHAR(150)DATETIMEDATETIMEClavePrimariaPKPKPKNuloNNNNNNNNNNBan<strong>de</strong>raValorinicial(getdate())ComentarioTipo <strong>de</strong> Or<strong>de</strong>n<strong>de</strong> trabajoNúmeroOr<strong>de</strong>ntrabajoNúmeroOr<strong>de</strong>nCliente<strong>de</strong><strong>de</strong><strong>de</strong><strong>de</strong>lDescripción <strong>de</strong>la Or<strong>de</strong>n <strong>de</strong>lClienteFecha <strong>de</strong>referencia <strong>de</strong> laor<strong>de</strong>n <strong>de</strong> clienteFechaingresoregistroNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nnumero_or<strong>de</strong>nnum_oc_cliente<strong>de</strong><strong>de</strong>lAutoInctb_wf_or<strong>de</strong>nesRegistro <strong>de</strong> la Ór<strong>de</strong>nes <strong>de</strong> Trabajo, cuando se inicia un proyecto se inicia unaOr<strong>de</strong>n <strong>de</strong> Trabajo.ColumnaTipoDato<strong>de</strong>tipo_or<strong>de</strong>n VARCHAR(10)numero_or<strong>de</strong>nVARCHAR(15)ClavePrimariaNuloBan<strong>de</strong>raValorinicialComentarioPK NN Tipo <strong>de</strong> Or<strong>de</strong>nPKNNNúmeroOr<strong>de</strong>n<strong>de</strong><strong>de</strong>AutoInc141


anio INTEGER NNtipo_tramite VARCHAR(10)subtipotramiteVARCHAR(10)cod_cliente VARCHAR(15)fecha_ingresofecha_estimada_finfecha_facturacionnumero_factura<strong>de</strong>scripcion_or<strong>de</strong>nruaoficial_cuentadiferencia_diasDATETIMEDATETIMEDATETIMEVARCHAR(15)VARCHAR(125)VARCHAR(15)VARCHAR(15)INTEGERNNNNNNNNNNNN(getdate())NN (getdate())NNNNtrabajoAño <strong>de</strong>procesamiento<strong>de</strong> la Or<strong>de</strong>nTipo <strong>de</strong>Proyectoasociado a laOr<strong>de</strong>nSubtipoProyectoCliente<strong>de</strong>Fecha <strong>de</strong>registro <strong>de</strong> laOr<strong>de</strong>nFecha estimada<strong>de</strong> finalización<strong>de</strong> la Or<strong>de</strong>nFecha <strong>de</strong>facturación <strong>de</strong> laOr<strong>de</strong>n, paraintegrarlo con unsistema externoNúmero <strong>de</strong>Factura <strong>de</strong>lsistema externo<strong>de</strong> facturaciónDescripción <strong>de</strong>la Or<strong>de</strong>n <strong>de</strong>TrabajoRegistro Único<strong>de</strong> AuditoríaUsuario Oficial<strong>de</strong> la CuentaDias <strong>de</strong>diferencia en laestimación <strong>de</strong>fechasdiferencia_ INTEGER NN Horas <strong>de</strong>142


horasdiferencia_minutosindiceestadofecha_fin_recfecha_fin_realfecha_inicio_realINTEGERNUMERIC(6, 2)NUMERIC(2)DATETIMEDATETIMEDATETIMENNNNNNNN(0)(1)diferencia en laestimación <strong>de</strong>fechasMinutos <strong>de</strong>diferencia en laestimación <strong>de</strong>fechasIndice calculado<strong>de</strong> eficienciapromedioEstado <strong>de</strong>ejecución <strong>de</strong> laOr<strong>de</strong>nFecha Finalrecalculada <strong>de</strong>la Or<strong>de</strong>nFecha FinalReal <strong>de</strong> laOr<strong>de</strong>nFecha <strong>de</strong> InicioReal <strong>de</strong> laOr<strong>de</strong>nNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nnumero_or<strong>de</strong>ntb_wf_or<strong>de</strong>nes_asociadasGuarda las relaciones entre las Ór<strong>de</strong>nes <strong>de</strong>l Cliente y las Ór<strong>de</strong>nes <strong>de</strong> Trabajo<strong>de</strong> la Empresa, cuando se inicia un proyectoColumnatipo_or<strong>de</strong>nnumero_or<strong>de</strong>ntipo_or<strong>de</strong>n_asocTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(15)VARCHAR(10)ClavePrimariaNuloBan<strong>de</strong>raValorinicialComentarioPK NN Tipo <strong>de</strong> Or<strong>de</strong>nPKPKNNNNNúmeroOr<strong>de</strong>n<strong>de</strong>Tipo <strong>de</strong> Or<strong>de</strong>nAsociadaAutoInc143


numero_or<strong>de</strong>n_asocnumero_ocVARCHAR(15)VARCHAR(25)fecha_registro DATETIMEPKPKNNNN(getdate())Número <strong>de</strong>Or<strong>de</strong>n AsociadaNúmero <strong>de</strong>Or<strong>de</strong>n <strong>de</strong>lCliente asociadaFecharegistroNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nnumero_or<strong>de</strong>ntipo_or<strong>de</strong>n_asocnumero_or<strong>de</strong>n_asocnumero_oc<strong>de</strong>tb_wf_prerrequisitosDefinición <strong>de</strong> los prerrequisitos <strong>de</strong> las activida<strong>de</strong>s <strong>de</strong>ntro <strong>de</strong> una Or<strong>de</strong>niniciadaColumnatipo_or<strong>de</strong>nnumero_or<strong>de</strong>ncod_actividadactiv_prerrequisitoTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(15)VARCHAR(15)VARCHAR(15)ClavePrimariaPKPKNuloNNNNBan<strong>de</strong>raValorinicialComentarioTipo <strong>de</strong> Or<strong>de</strong>n<strong>de</strong> trabajoNúmero <strong>de</strong> laOr<strong>de</strong>n <strong>de</strong>trabajoPK NN ActividadPKNNPrerrequisito <strong>de</strong>la actividadNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nnumero_or<strong>de</strong>ncod_actividadactiv_prerrequisitoAutoInc144


tb_wf_responsablesAsignación <strong>de</strong> responsables para las activida<strong>de</strong>s en una plantilla <strong>de</strong> tipo <strong>de</strong>proyecto.ColumnaTipoDato<strong>de</strong>secuencia BIGINT(18)tipo_tramitesubtipotramitecod_clientecod_actividaduser_i<strong>de</strong>s_responsableVARCHAR(10)VARCHAR(10)VARCHAR(15)VARCHAR(15)VARCHAR(15)CHAR(1)marcar_fin CHAR(1)envio_mail CHAR(1)ClavePrimariaPKNuloNNNNNNNNNNNNNNNNNNBan<strong>de</strong>raValorinicialComentarioSecuenciaregistroTipoProyectoSubtipoProyectoClienteActividadproyecto<strong>de</strong><strong>de</strong><strong>de</strong><strong>de</strong>lUsuarioasignado a laactividadMarca paraindicar si elusuario esresponsableMarca paraindicar si elusuario pue<strong>de</strong>marcar el fin <strong>de</strong>la actividadMarca paraindicar si elusuario pue<strong>de</strong>enviar email atodos losinvolucradosNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY secuenciaAutoInc145


tb_wf_responsables_activResponsables por Actividad <strong>de</strong>ntro <strong>de</strong> una Or<strong>de</strong>nColumnaTipoDato<strong>de</strong>secuencia BIGINT(18)tipo_or<strong>de</strong>n VARCHAR(10)numero_or<strong>de</strong>ncod_actividaduser_i<strong>de</strong>s_responsableVARCHAR(15)VARCHAR(15)VARCHAR(15)CHAR(1)marcar_fin CHAR(1)envio_mail CHAR(1)ruaNUMERIC(18)ClavePrimariaPKNuloNNNNNNNNNNBan<strong>de</strong>raValorinicialComentarioSecuenciaregistro<strong>de</strong>lTipo <strong>de</strong> Or<strong>de</strong>n<strong>de</strong> TrabajoNúmero <strong>de</strong> laOr<strong>de</strong>n <strong>de</strong>TrabajoCódigo <strong>de</strong> laActividadUsuarioasignado a estaactividadMarca para<strong>de</strong>terminar si elusuario esresponsableMarca para<strong>de</strong>terminar si elusuario pue<strong>de</strong>finalizar laactividadMarca para<strong>de</strong>terminar si elusuario pue<strong>de</strong>enviarnotificacionespor email a otrosusuarios <strong>de</strong> laOr<strong>de</strong>n <strong>de</strong>TrabajoRegistro Único<strong>de</strong> AuditoríaNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY secuenciaAutoInc146


tb_wf_secuencia_or<strong>de</strong>nesColumnaTipoDato<strong>de</strong>ClavePrimariaNuloanio INTEGER PK NNtipo_or<strong>de</strong>nVARCHAR(10)secuencia NUMERIC(6)Ban<strong>de</strong>raValorinicialComentarioAño <strong>de</strong> registro<strong>de</strong> la secuenciaPK NN Tipo <strong>de</strong> Or<strong>de</strong>n(1)NúmerosecuenciasiguienteNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY aniotipo_or<strong>de</strong>n<strong>de</strong>AutoIncTB_WF_TIPO_ESTADOColumnacodigo<strong>de</strong>scripcionTipoDato<strong>de</strong>DECIMAL(2)VARCHAR(30)ClavePrimariaPKNuloNNNNBan<strong>de</strong>raValorinicialComentarioCódigoestado<strong>de</strong>Descripción <strong>de</strong>lestado para uso<strong>de</strong> Ór<strong>de</strong>nes yproyectosNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigoAutoIncTB_WF_TIPO_IDENTIFICAColumnaTipoDato<strong>de</strong>ClavePrimariaNulocodigo CHAR(1) PK NNBan<strong>de</strong>raValorinicialComentarioTipoi<strong>de</strong>ntificación<strong>de</strong>AutoInc147


<strong>de</strong>scripcionVARCHAR(30)NNDescripcióntipoi<strong>de</strong>ntificaciónNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigo<strong>de</strong><strong>de</strong>tb_wf_tipo_or<strong>de</strong>nDefine el año que se utilizará para asignar las secuencias a las Ór<strong>de</strong>nes <strong>de</strong>Trabajo, la secuencia se reinicia cada cambio <strong>de</strong> año.Columnatipo_or<strong>de</strong>n<strong>de</strong>scripcion_or<strong>de</strong>nanioTipoDatoVARCHAR(10)<strong>de</strong>VARCHAR(40)SMALLINT(5)ClavePrimariaPKNuloNNNNNNBan<strong>de</strong>raValorinicialComentarioTipo <strong>de</strong> Or<strong>de</strong>n<strong>de</strong> TrabajoDescripción <strong>de</strong>la Or<strong>de</strong>n <strong>de</strong>TrabajoAño <strong>de</strong>finidopara lassecuenciasNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_or<strong>de</strong>nAutoIncTB_WF_TIPO_PERSONAPara <strong>de</strong>finición <strong>de</strong> Personas Naturales, Jurídicas, Socieda<strong>de</strong>s, etc.ColumnaTipoDato<strong>de</strong>ClavePrimariaNulocodigo CHAR(1) PK NN<strong>de</strong>scripcionVARCHAR(30)NNBan<strong>de</strong>raValorinicialComentarioCódigo <strong>de</strong>l Tipo<strong>de</strong> PersonaDescripción <strong>de</strong>ltipo <strong>de</strong> personaNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigoAutoInc148


tb_wf_tipo_tramitePlantilla <strong>de</strong> Tipos <strong>de</strong> <strong>Proyectos</strong>Columnatipo_tramitesubtipotramitecod_cliente<strong>de</strong>scripcion_corta<strong>de</strong>scripcion_largaoficial_cuentaTipoDato<strong>de</strong>VARCHAR(10)VARCHAR(10)VARCHAR(15)VARCHAR(30)VARCHAR(250)VARCHAR(15)ClavePrimariaPKPKNuloNNNNBan<strong>de</strong>raValorinicialComentarioTipoProyectoSubtipoProyectoPK NN ClienteNNNNNN<strong>de</strong><strong>de</strong>Descripcióncorta <strong>de</strong>l Tipo <strong>de</strong>ProyectoDescripciónlarga <strong>de</strong>l Tipo <strong>de</strong>ProyectoOficial Usuarioasignado al tipo<strong>de</strong> ProyectoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY tipo_tramitesubtipotramitecod_clienteAutoIncTB_WF_USUARIOS_X_CLIENTEColumnauser_idcod_clienteTipoDato<strong>de</strong>VARCHAR(15)VARCHAR(15)ClavePrimariaPKNuloNNBan<strong>de</strong>raValorinicialComentarioCódigousuariosistemaCódigoclienteNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY user_id<strong>de</strong><strong>de</strong>l<strong>de</strong>lAutoInc149


TIPO_OBJETOColumnacodigo<strong>de</strong>scripcionTipoDato<strong>de</strong>NUMERIC(18)VARCHAR(25)ClavePrimariaPKNuloNNNNBan<strong>de</strong>raValorinicialComentarioCódigo <strong>de</strong>l tipo<strong>de</strong> objetoDescripción <strong>de</strong>lobjetoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY codigoAutoIncTIPO_OPCIONColumnacodigo<strong>de</strong>scripcionTipoDato<strong>de</strong>NUMERIC(2)VARCHAR(25)ClavePrimariaNuloBan<strong>de</strong>raValorinicialComentarioCódigo <strong>de</strong>l tipo<strong>de</strong> opción <strong>de</strong>lsistemaDescripción <strong>de</strong>ltipo <strong>de</strong> OpciónAutoInctmp_seg_or<strong>de</strong>nesPara <strong>de</strong>finición y construcción <strong>de</strong>l seguimiento <strong>de</strong> las Ór<strong>de</strong>nes <strong>de</strong> trabajoColumnaloginnumero_or<strong>de</strong>n<strong>de</strong>scripcion_or<strong>de</strong>nnombre_razonsocialTipoDato<strong>de</strong>VARCHAR(15)VARCHAR(15)VARCHAR(125)VARCHAR(50)ClavePrimariaPKPKNuloNNNNNNBan<strong>de</strong>raValorinicialComentarioCodigoUsuarioNúmeroOr<strong>de</strong>nseguimientoDescripciónla Or<strong>de</strong>nNombreRazón Socialult_act VARCHA Última Actividad<strong>de</strong><strong>de</strong>en<strong>de</strong>oAutoInc150


sigu_actR(50)VARCHAR(50)tipo_tramite VARCHAR(10)subtipotramite<strong>de</strong>scripcion_cortaVARCHAR(10)VARCHAR(30)cod_cliente VARCHAR(15)tipo_or<strong>de</strong>nfecha_estimada_finVARCHAR(10)DATETIMENNNNNNejecutadaSiguienteActivida<strong>de</strong>jecutarTipoProyectoSubtipoProyectopor<strong>de</strong><strong>de</strong>Descripcióncorta <strong>de</strong> laActividadClienteTipo <strong>de</strong> Or<strong>de</strong>n<strong>de</strong> trabajoFecha estimada<strong>de</strong> finalizaciónanio INTEGER NN Año <strong>de</strong> procesoNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY loginnumero_or<strong>de</strong>nUSUARIODefinición <strong>de</strong> UsuariosColumnauser_idpasswordnombreapellidoTipoDato<strong>de</strong>VARCHAR(15)VARCHAR(50)VARCHAR(50)VARCHAR(50)ClavePrimariaPKNuloNNBan<strong>de</strong>raValorinicialComentarioCodigoUsuarioContraseñaNombreUsuarioApellido<strong>de</strong><strong>de</strong>lAutoInc151


ucdirecciontelefonofaxfecha_ingresoemailrua<strong>de</strong>scripcionestadotipo_usuarioclienteVARCHAR(14)VARCHAR(250)VARCHAR(10)VARCHAR(10)CHAR(10)VARCHAR(50)VARCHAR(25)VARCHAR(250)NUMERIC(2)CHAR(1)VARCHAR(15)NNNNNNNNNN('F')Registro Único<strong>de</strong>ContribuyenteDirecciónTeléfonoFaxFecharegistroCorreoelectrónico<strong>de</strong>Registro Único<strong>de</strong> AuditoríaDescripcióngeneralCódigoestadoUsuario<strong>de</strong>l<strong>de</strong>lTipo <strong>de</strong> Usuario(Administrador,Gerente, etc)Cliente asociadoal usuarioNombre <strong>de</strong> Índice Tipo <strong>de</strong> Índice ColumnasPRIMARY PRIMARY user_id152


BibliografíaCleland, D., & Ireland, L. (2006). Project Management: Strategic Design andImplementarion. United States: McGraw-Hill Professional.Cobo, Á., Gómez, P., Pérez, D., & Rocha, R. (2005). PHP y MySQL, Tecnologíaspara el <strong>de</strong>sarrollo <strong>de</strong> aplicaciones web.España: Díaz <strong>de</strong> Santos.Desmond, C. L. (2004). Project Management for Telecomunications Managers.Kluwer Aca<strong>de</strong>mic Publishers, 17, 41.Gilmore, W. (2008). Beginning PHP and MySQL from Novice to Professional.Apress.Gosselin, D., Kokoska, D., & Easterbrooks, R. (2010). PHP Programming withMYSQL. Boston: Cengage.Heerkens, G. (2007). Project Management: 24 Steps to Help You Master AnyProject. USA: McGraw-Hill Professional.Knutson, J., & Bitz, I. (1991). Project Management – How to Plan and ManageSuccessful Projects. New York: AMACOM.Lavin, P. (2006). Object-Oriented PHP:concepts techniques and co<strong>de</strong>. SanFrancisco, USA: No Starch Press, Inc.Sherif, M. H. (2006). Managing Projects in Telecommunication Services. Canada :John Wiley & Sons.Williams, H., & Lane, D. (2004). Web database applications with PHP and MySQL.Sebastopol, California: O'Reilly Media, Inc.Project Management for Telecomunications ManagersCelia L. Desmond – Kluwer Aca<strong>de</strong>mic Publishers (2004)Managing Projects in Telecomunication ServicesJhon Wiley & Sons – Wiley Interscience (Oct 6, 2006)Project Management – 24 steps to help you master any projectGary R. Heerkens – McGraw-Hill (June 12, 2007)153


Project Management – Strategic Design and Implementarion Fifth editionDavid I. Cleland – Lewis R. Ireland (Aug 21, 2006)Project Management – How to Plan and Manage Successful ProjectsJoan Knutson and Ira Bitz (June 15, 1991)Manual <strong>de</strong> PHP 15/10/2005 (http://www.php.net/docs.php)Building a Database-Driven Web Site Using PHP and MySQLKevin Yank (Jan 26, 2009)PHP Programming with MYSQLDon Gosselin, Diana Kokoska, Robert Easterbrooks(Jan 12, 2010)Object-Oriented PHP:concepts techniques and co<strong>de</strong>Peter Lavin (June 12, 2006)Web database applications with PHP and MySQLHugh E. Williams, David John Lane (2004)Create dynamic sites with PHP & MySQLDeveloperWorks, ibm.com/<strong>de</strong>veloperWork154


155

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!