scieee AI-readable full text Open interactive document viewer

Software para paciente de enfermedad pulmonar obstructiva crónica

Narbona Vílchez, Diego

Abstract

Desarrollo de una aplicación para Android con la intención de mejorar la adherencia del paciente al tratamiento de EPOC (Enfermedad Pulmonar Obstructiva Crónica) que su médico le asigne, así como su seguimiento por parte de los allegados al paciente. La aplicación cuenta con dos áreas: ● El área del personal sanitario la cual permite la personalización del tratamiento del paciente, así como la introducción y consultas de los análisis y espirometrías de éste. ● El área del paciente en la cual puede consultar mediante un código de colores en un semáforo el tratamiento que le ha sido asignado, posibilidad de llamar al 112, llamar al cuidador, consultar la medicación de rescate, leer consejos sobre ejercicios a realizar, consejos sobre la dieta, consultar estado de citas y visualización de tutoriales de uso de los inhaladores que tenga asignados. Durante todo el proceso de la creación de la aplicación se ha seguido una metodología iterativa y además se ha contado con un cliente real que ha expresado sus necesidades y de las cuales se ha extraído los documentos de requisitos necesarios para la implementación de funcionalidades que contiene la aplicación. La aplicación ha sido desarrollada a partir de fuentes de información proporcionadas por personal sanitario especializado

Full text

                                             1     2   ESCUELATÉCNICASUPERIORDEINGENIERÍAINFORMÁTICA INGENIERÍADELSOFTWARE        SOFTWAREPARAPACIENTEDEENFERMEDADPULMONAR OBSTRUCTIVACRÓNICA  SOFTWAREFORCHRONICOBSTRUCTIVEPULMONARY DISEASEPATIENTS     Realizadopor DiegoNarbonaVílchez  Tutorizadopor JoséMaríaÁlvarezPalomo  Departamento deLenguajesyCienciasdelaComputación      UNIVERSIDADDEMÁLAGA MÁLAGA, julio2016    Fechadefensa: ElSecretariodelTribunal      3     4  Resumen: DesarrollodeunaaplicaciónparaAndroidconlaintencióndemejorarlaadherenciadel pacientealtratamientodeEPOC(EnfermedadPulmonarObstructivaCrónica)quesu médicoleasigne,asícomosuseguimientoporpartedelosallegadosalpaciente.La aplicacióncuentacondosáreas:  ● Eláreadelpersonalsanitariolacualpermitelapersonalizacióndeltratamiento delpaciente,asícomolaintroducciónyconsultasdelosanálisisyespirometrías deéste.  ● Eláreadelpacienteenlacualpuedeconsultarmedianteuncódigodecoloresen unsemáforoeltratamientoquelehasidoasignado,posibilidaddellamaral112, llamaralcuidador,consultarlamedicaciónderescate,leerconsejossobre ejerciciosarealizar,consejossobreladieta,consultarestadodecitasy visualizacióndetutorialesdeusodelosinhaladoresquetengaasignados.  Durantetodoelprocesodelacreacióndelaaplicaciónsehaseguidounametodología iterativayademássehacontadoconunclienterealquehaexpresadosusnecesidadesy delascualessehaextraídolosdocumentosderequisitosnecesariosparala implementacióndefuncionalidadesquecontienelaaplicación.Laaplicaciónhasido desarrolladaapartirdefuentesdeinformaciónproporcionadasporpersonalsanitario especializado. Palabrasclaves:  APP,Android,EPOC,Enfermedad,Pulmonar,Obstructiva,Crónica,Iterativa, Especializado,Salud  Summary: ThedevelopmentofanapplicationforAndroidwhichaimstohelppatientsfollowthe treatmentforChronicobstructivepulmonarydisease(COPD)prescribedbytheirdoctor aswellasallowingtheirnextofkinthepossibilityofmonitoringtheirevolution.The applicationhastwoareas: ● Thedoctors’areawhichallowsthemtocustomizethepatient’streatment,aswellas introducingandconsultingtheanalysisandspirometries.  ● Thepatient’sareainwhichtheyareabletoconsult,usingatrafficlightcolourcode, thetreatmenttheyhavebeenassigned,aswellasthepossibilityofcallingthe emergencyservices,callingtheirassistant,checkingtheemergencymedication required,readingtheadviceaboutphysicalexercise,checkingadviceaboutdiet, consultingfutureappointmentsandviewinginhalatortutorials. Duringthecreationofthisapplicationarecurrentmethodhasbeenusedandwehavetaken intoaccounttheneedsexpressedbyarealclientfromwhomwehaveobtainedthe documentswiththenecessaryrequirementstoimplementthefunctionscontainedinthe application.Wehavecreatedtheapplicationbasedoninformationobtainedfromspecialized sanitarystaff. Keywords: APP,Android,COPD,Disease,Pulmonary,Obstructive,Chronic,Recurrent,Specialized, Health 5  Índice  Introducción……………………………………………………………………………. 7  Tecnologíasutilizadas………………………………………………………………….. 7 Estructuradelamemoria………………………………………………………………. 10 1. Primeraparte……………………………………………………………………... 11  1.1. Sistemaparaverlosmanualesdeinhaladoresymanualesdefisioterapia.. 11 1.2. Listadodemanualesytratamiento……………………………………….. 13 ■ Consultassqlparaconsultarinhaladoresasociadosaltratamiento, obtencióndelospasosdelosmanuales,obtencióndeltratamiento completodelusuario. 1.3. Creacióndealgunasentidadesdepersistencia……………………………. 17 1.4. Creaciónalarma(Conjunto)......................................................................... 18 ■ Receiversdelasalarmas,parasuactualización. ■ Receiverpararefrescodelasalarmasalreiniciarelmóvil ■ Sonidoenlasalarmas. 1.5. Protecciónporcontraseñacifradadeláreadelpersonalsanitario………... 22 1.6. Interfazmenúprincipalconiconos……………………………………….. 23 1.7. Creación,eliminaciónylistadodecitas………………………………….. 24 1.8. Permisosdelaaplicaciónentiempodeejecución………………………... 26 1.9. Cargaenmemoriademaneraeficientelasimágenesparaunacorrectafluidez deloslistView…………………………………………………………….. 29 1.10. PatrónviewHolderenloslistView………………………………………... 30 1.11. ActivacióndesactivacióndeSMSs……………………………………….. 32  2. Segundaparte……………………………………………………………………… 33  2.1. Creación,consultaymodificacióndeanálisisdelpaciente……………….. 33 2.2. Consejosparaladietadelpaciente…………………………………………34 2.3. OrdenacióncronológicadeloslistView……………………………………35  2.4 Desarrolloiterativo………………………………………………………… 36  3. Conclusiones………………………………………………………………………. 38    6  Introducción:  Motivación:  LaaplicaciónsurgiócomorespuestaalretopresentadoporlaConsejeríadeSaludyla ConsejeríadeEmpleo,EmpresayComerciodelaJuntadeAndalucía,encolaboracióncon Vodafone,comoayudaaltratamientodeEPOCatravésdeunaaplicaciónmóvil.  Objetivos:  LaintencióndeestaappesmejorarlaadherenciadelpacientealtratamientodeEPOCquesu médicolehaasignado,asícomosuseguimientoporpartedelosallegadosalpaciente.  Características:  Durantetodoelprocesodelacreacióndelaaplicaciónsehaseguidounametodología iterativayademássehacontadoconunclienterealquehaexpresadosusnecesidadesy delascualessehaextraídolosdocumentosderequisitosnecesariosparala implementacióndefuncionalidadesquecontienelaaplicación.  LaApphasidodesarrolladaapartirdefuentesdeinformaciónproporcionadasporpersonal sanitarioespecializado:todalainformaciónincorporadaestábasadaendatosypautasreales acercadeEPOC.  Estaaplicaciónpreservalaprivacidaddelainformaciónregistrada:seaplicalaseguridad lógicaentornoalosdatosqueestánsometidosalaleydeproteccióndedatosvigentes.  Tecnologíasusadas:  ●Android[1]:EsunsistemaoperativobasadoenelnúcleoLinux.Fuediseñado principalmenteparadispositivosmóvilesconpantallatáctil,comoteléfonos inteligentes.  Androidsetratadeunsistemaabierto,multitarea,quepermitealosdesarrolladores accederalasfuncionalidadesprincipalesdeldispositivomedianteaplicaciones, cualquieraplicaciónpuedeserreemplazadalibremente,ademásdesarrollarlaspor terceros,atravésdeherramientasproporcionadasporGoogle,ymediantelos lenguajesdeprogramaciónJavayC.    7  ●SQLite[2]:SQLiteesunsistemadegestióndebasesdedatosrelacionalcompatible conACID(Atomicidad,Consistencia,AislamientoyDurabilidad).Unadesus principalescaracterísticasesquelabasededatoscompletaseencuentraenunsolo archivo.  ●Java [3]: Java es un lenguaje de programación de propósito general,concurrente,         orientado a objetos que fue diseñado específicamente para tener tan pocas           dependencias de implementación como fuera posible. Su intención es permitir que los            desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en            cualquierdispositivo.  ●XML[4]:XML,siglaseninglésdeeXtensibleMarkupLanguage("lenguajede marcasExtensible"),esunlenguajedemarcasdesarrolladoporelWorldWideWeb Consortium(W3C)utilizadoparaalmacenardatosenformalegible.Eslabasedelas interfacesgráficasenelsistemaoperativoAndroid.  ●SQLCipher[5]:SQLCipheresunaextensiónopensourcedeSQLitequeproporciona cifradoAES256bitparaarchivosdebasededatos.SQLCipherposeeungran rendimientoasíqueesidealparabasededatosembebidaseidóneoparaentornos móviles.  ●GIT[6]:EsunsoftwaredecontroldeversionesdiseñadoporLinusTorvalds, pensandoenlaeficienciaylaconfiabilidaddelmantenimientodeversionesde aplicacionescuandoéstastienenungrannúmerodearchivosdecódigofuente.  Entrelascaracterísticasmásrelevantesseencuentran:  ●Fuerteapoyoaldesarrollonolineal,porenderapidezenlagestiónderamasy mezcladodediferentesversiones.Gitincluyeherramientasespecíficaspara navegaryvisualizarunhistorialdedesarrollonolineal.Unapresunción fundamentalenGitesqueuncambioseráfusionadomuchomásfrecuentemente deloqueseescribeoriginalmente,conformesepasaentrevariosprogramadores quelorevisan.  ●Gestióndistribuida.AligualqueDarcs,BitKeeper,Mercurial,SVK,Bazaary Monotone,Gitledaacadaprogramadorunacopialocaldelhistorialdel desarrolloentero,yloscambiossepropaganentrelosrepositorioslocales.Los cambiosseimportancomoramasadicionalesypuedenserfusionadosenlamisma maneraquesehaceconlaramalocal.   8  ●BitBucket[7]:Bitbucketesunserviciodealojamientobasadoenweb,paralos proyectosqueutilizanelsistemadecontroldeversionesMercurialyGit.  ●SourceTree[8]:Aplicacióndeescritorioquepermitetrabajardeunamanerarápiday visualconrepositorioslocalesyremotosdeGIT.Agilizalasoperacionesyaqueno hayquememorizarloscomandosdeGIT.  ●AndroidStudio[9]:AndroidStudioesunentornodedesarrollointegradoparala plataformaAndroid. Características: ●Renderizaciónentiemporeal ●Consoladedesarrollador:consejosdeoptimización,ayudaparalatraducción, estadísticasdeuso. ●SoporteparaconstrucciónbasadaenGradle. ●RefactorizaciónespecíficadeAndroid. ●HerramientasLintparadetectarproblemasderendimiento,usabilidad, compatibilidaddeversiones,yotrosproblemas. ●PlantillasparacreardiseñoscomunesdeAndroidyotroscomponentes. ●SoporteparaprogramaraplicacionesparaAndroidWear.  ●Slack[10]:SlackesunaherramientadecomunicaciónenequipocreadaporStewart Butterfield,EricCostello,CalHenderson,ySergueiMourachov.Slackofrecesalasde chatorganizadasportemas,asícomogruposprivadosymensajesdirectos.Poseeun cuadrodebúsquedaquepermiteaccederatodoelcontenidodelaaplicación.Slack integraunagrancantidaddeserviciosatercerosyrespaldalasintegracioneshechas porlacomunidad.Lasprincipalesincorporacionesincluyenserviciostalescomo GoogleDrive,Dropbox,Heroku,Crashlytics,GitHubyZendesk.Algunasfuentes piensanqueSlackestaninnovadorquereemplazaráaIRCalgúndía.            9    Agrupaciónporhoras:  Elsistemaparaagruparporhorasquesehautilizadoeselsiguiente:  1Sehaordenadoporordenhorariolastomas. 2Enellayouttodaslasfilasdelalistacontienenunseparadorquesemuestraoseoculta segúnlasiguientelógica. 3Sieslaprimeraposicióndelalistaapareceelseparadordelahora. 4Sinoeslaprimeraposiciónsecompruebaelelementoanteriordelalista,siesigual,nose añadeelseparador,siesdistintoseañadeelseparador.                               16  1.3Creacióndeentidadesdepersistencia  Duranteeldesarrollodelaaplicaciónsehamapeadolastablasdelabasededatosenclases javaparafacilitarsuutilizaciónenelcódigo.  Enlasimágenesqueseencuentranenelanexo(Páginas41,24)sepuedeobservarla estructurageneraldelabasededatosdelaaplicacióncompleta.  Entidades:  Treatment:Eltratamientoquetendráasignadoelpaciente,enelseencuentranlastomasque elpacientedeberátomarse.Lasopcionesdeampliaciónfuturassonmuyampliasyaque permitiráalpacientetenervariostratamientossegúnlasenfermedadesquetenga.  Take:Latomaqueelpacientedebesuministrarse,tendráasociadoelinhalador,el medicamentoyelprincipioactivoasociadoqueelmédicolehaindicado.  Inhaler:Representarálosinhaladoresquelaaplicacióntienealmacenados.  ActiveIngredient:Principiosactivos.  Medecine:Medicamentos.  Medecine_Presentation:Relaciónexistenteentreelmedicamentoyelprincipioactivo,se utilizaparafiltrarlaslistasdesplegablesenlaseleccióndeltratamiento.  UserManualStep:Representaunpasoenunmanualdeusuario.  Analysis:Representarálosdatosdeunanálisisqueelusuariosehayarealizado.  Spirometries:Representarálosdatosdeunaespirometríaqueelusuariosehayarealizado.  PatientPersonalData:Almacenarálosdatospersonalesdelusuario.  Rescue:Medicaciónderescatequeelpacientedeberásuministrarseencasodecrisis.  Appointment:Almacenarálascitasmédicasdelasquedispongaelusuario.   17  1.4Creaciónalarmas: Lacreacióndealarmasenelmomentodelacreacióndelastomasyelcambiodeestadodel semáforohansidorealizadaenconjuntoconmicompañeroSergioSánchezGil.  Laaplicacióndisponedeunsistemadealarmasquepermitealusuariorecordarlecuándo debetomarsesumedicación,estaalarmasecreaautomáticamenteenelmomentoqueel médicocrealastomas.  Unavezlaalarmasuena,selanzaunaactividadqueenprimerlugarpreguntasiquiere realizarlatomaoposponerla,sideseaposponerla,pulsaráenelbotón“posponer”yel sistemamoveráesamismaalarma15minutosmástarde(hastaunmáximode3veces),si desearealizarlasimplementesepulsasobreelbotón“ok”,sipulsasobreelbotón“ok”se crearálamismaalarmaaldíasiguiente.  Unavezmarcadosiqueremosrealizarlatoma,apareceunlistadoconlastomasdel tratamientoqueelpacientesedebetomaralahoraquesonólaalarma,enestalistaapareceel medicamentoquedebedetomarelpacienteasícomoelnúmerodeinhalacionesquedebe realizar,sielpacientepulsasobrelaimagendelinhaladorseráredirigidoalmanual correspondienteaeste,unavezfinalizadalatomasimplementeelpacientedebemarcarel checkboxcorrespondientealastomasqueharealizadoypulsarenfinalizar.   18    Laposibilidaddemarcarmedianteuncheckboxsielpacienteharealizadoonolatomaesde vitalimportanciaparaelseguimientodeltratamiento,yaque,alteraráelestadodelsemáforo deseguimientoqueseencuentraenelmenúprincipal.    Elsemáforodispondráde3estados:  Verde:Sielpacienteharealizadotodaslastomasquelecorrespondíahoy. Ámbar:Sielpacienteharealizadoalgunastomasquelecorrespondíahoyyademás lefaltanalgunasporrealizar. Rojo:Sielpacientenoharealizadoningunatomaquelecorrespondíahoy.  Elestadodelsemáforoesreseteadotodoslosdíasalas23:59,paraello,enelmomentoque secreantodaslasalarmastambiénsecrealaalarmadereseteo.  Otradelascaracterísticasquehansidoincluidasenlafuncionalidaddelasalarmasesla inclusióndeunanotificaciónsonoraparaalertaralusuariodequedeberealizarlatomaquele corresponde.  Implementación:  ElelementoprincipaldelasalarmasenAndroidsonlosreceivers,unBroadcastReceiveres elcomponentequeestádestinadoarecibiryresponderanteeventosglobalesgeneradosporel sistema,comounavisodebateríabaja,unSMSrecibido,unSMSenviado,unallamada,un 19  avisodedelatajeaSD,etc.ytambiénaeventosproducidosporotrasaplicacionescomopor ejemplounaalarmageneradoporunaaplicación.  Enestaaplicaciónsehaceusode3receivers.   1erReceiver:AlarmReceiver,estereceiverseráelencargadoderecibirlasalarmasdelas quelaaplicacióngenere.  2doReceiver:ResetTakesReceiver,estereceiverseráelencargadoderecibirlaactividad queresetealastomasalas23:59decadadía.  3erReceiver:AlarmOnBootReceiver,estereceiverseráelencargadoderecibireleventodel sistemaqueindicaqueelmóvilhaterminadodeiniciarse,seutilizapararefrescarelestado detodaslasalarmasunavezsereiniciaelmóvil,hacefaltaañadirunaslíneasenelarchivo androidmanifestparapoderrealizarestafunción.  <usespermissionandroid:name="android.alarm.permission.SET_ALARM"/> <usespermission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  <receiver android:name=".alarms.AlarmOnBootReceiver" android:enabled="true"> <intentfilter> <actionandroid:name="android.intent.action.BOOT_COMPLETED"/> </intentfilter> </receiver> Androidagrandesrasgosdiferencia2tiposdealarmas,lasalarmasexactasylasalarmas inexactas:  ● Lasalarmasexactascomosupropionombreindicasonaránenelmomento exactoqueleindiquemos,estohacequeelsistemaoperativoestésiempre esperandoadichaalarmayestopuedeprovocarproblemasdebateríasise abusa.  ● Lasalarmasinexactas,quepuedenonopuedensonarenelmomentoexacto queleindiquemos,estoesdebidoaqueelsistemaoperativointentaráagrupar variasalarmasparaqueseanlanzadasalavezyasíevitarunconsumo innecesariodebatería.  20  Ennuestraaplicaciónesnecesarioutilizarelsistemadealarmasexactasyaquenopodemos dependerdelsistemaparaqueelpacientepuedarealizarelsuministrodemedicaciónquele corresponde.  Calendaralarm=Calendar.getInstance  (); alarm.set(Calendar.HOUR_OF_DAY  ,hora); alarm.set(Calendar.MINUTE  ,min); alarm.set(Calendar.SECOND  ,0); alarm.add(Calendar.DAY_OF_MONTH  ,1);  if(Build.VERSION.SDK_INT  <Build.VERSION_CODES.KITKAT  ){ System.out  .println("Alarm"+id+"issetat"+alarm.getTime()); alarmManager.set(AlarmManager.RTC_WAKEUP  ,alarm.getTimeInMillis(), pendingIntent); }else{ System.out  .println("Alarm"+id+"issetat"+alarm.getTime()); alarmManager.setExact(AlarmManager.RTC_WAKEUP  ,alarm.getTimeInMillis(), pendingIntent); }   Enesteejemplopodemosobservarlacreacióndeunaalarma,podemosdiferenciardistintas partes:  1Objetocalendar,utilizandoesteobjetopodemosseleccionarlafechaylahoraque queremosquelaalarmasuene,unavezintroducidoslosdatossimplementedeberemosllamar almétodoalarm.getTimeInMillis()quenosdevolverálahoraseñaladaenelcalendarioen milisegundos(lasalarmasfuncionaenmilisegundos).  2(Build.VERSION.SDK_INT  <Build.VERSION_CODES.KITKAT  )estalíneadelcódigo fuenecesariaintroducirlaporelcambioquerealizógoogleeneltratamientodelasalarmas dependiendodelaAPIenlaqueseejecutalaaplicación,sielsistemausaunaversióninferior aKITKAT,lacreacióndealarmasexactasserealizaráconlafunciónalarmManager.set(... estocrearáunaalarmaexactaenelmomentoqueleseaindicado,perolosdispositivosque utilizanunaversióndelsistemaoperativosuperioroigualaKITKATdebenutilizarel métodoalarmManager.setExact(...yaquesiutilizaranelmétodoanteriorsecrearíauna alarmainexacta.  3pendingIntent,cuandolaalarmasueneseejecutarálaactividadqueseaasignadaaese Intent.   21  1.5Protecciónporcontraseñacifradadeláreadelpersonalsanitario  Estaaplicaciónalcontartantoconeláreadelmédicocomoconeláreadelpacientees necesarioprotegerlapartedelmédicoparaevitarmodificacioneseneltratamientode informacióndelicadacomoanálisisyespirometrías. Laprimeravezqueseinstalalaaplicación,éstasolicitaalusuarioqueintroduzcauna contraseñaparaprotegereláreamédica,estacontraseñaesalmacenadaenlasshared preferencesrealizándoleunHASHSHA1previamente.     SharedPreferencesprefs= getSharedPreferences("myPrefs", Context.MODE_PRIVATE  ); SharedPreferences.Editoreditor=prefs.edit(); Stringpass=SHA1  (ts); editor.putString("contrasena",pass); editor.putBoolean("sms",false); editor.commit();        Comosepuedeobservarsesolicitaqueseintroduzcalamismacontraseñadosvecespara evitarproblemasalintroducirla.          22  1.6Interfazmenúprincipalconiconos  Lainterfazdeestaaplicaciónhasidodiseñadoconelobjetivodequefueraamigableparael usuarioyalmismotiempofueraválidaparapersonasquepuedantenerproblemasenlavista, esporelloquesehanutilizadoiconosgrandeconuntextoexplicativodebajo.      Todoslosdibujoshansidohechosamanoparaquelainterfazfueralomáscercanaal usuario.         23  1.7Creaciónylistadodecitas  Unadelasfuncionalidadesdelaaplicacióneslaposibilidaddealmacenarcitasquetengael pacienteenelfuturo.Cuandosevayaaguardarunacitatenemoslaposibilidaddeseleccionar eldíaquesevaarealizarlacita,lahora,porquienvaaseratendidoelpaciente,la especialidadalaqueperteneceelfacultativoquelevaatender,eltipodepruebasquelevan arealizartantodiagnósticascomodevaloración.    Noesposiblecumplimentarunacitasitodosloscamposnoestánrellenosasíelpacientese aseguradequehaintroducidocorrectamentelacita.Cuandolacitaestáguardadaelsistema calculamedianteunobjetocalendareldíadelasemanaquecorrespondelafechaintroducida, parafacilitaralpacientelavisualizacióndelascitas.    24  Sehaintroducidounafuncionalidadvisualquepermitiráintroducirlahoradelacitadeuna maneramuyrápidaeintuitiva.   publicstaticclassTimePickerFragmentextendsDialogFragment implementsTimePickerDialog.OnTimeSetListener{ @Override @NonNull publicDialogonCreateDialog(BundlesavedInstanceState){ //Usethecurrenttimeasthedefaultvaluesforthepicker   finalCalendarc=Calendar.getInstance  (); inthour=c.get(Calendar.HOUR_OF_DAY  ); intminute=c.get(Calendar.MINUTE  );    returnnewTimePickerDialog(getActivity(),this,hour,minute, DateFormat.is24HourFormat  (getActivity())); }  25   1.11ActivacióndesactivacióndeSMSs.  Unadelascaracterísticasmásinteresantesdelaaplicacióneslaposibilidaddemantener actualizadoalcuidadorinformal(entiéndasepareja,familiar)delprogresodeltratamientodel paciente,utilizandoelmétododelosmensajesdetexto,enelmomentoquelaalarmasuena pararealizarlatomaquelecorrespondealpacientelaaplicaciónenviaráunmensajedetexto indicandoqueelpacientedeberealizarlatoma.  Estafunciónestádesactivadapordefectoypuedeseractivadaydesactivadasiemprequese desee,sepermiteestaposibilidadyaquelosmensajesdetextopuedenacarreargastos económicosyelobjetivodeestaaplicaciónesnoproducirningúngasto.    32  2daIteración 2.1Creación,consultaymodificacióndeanálisisdelpaciente  Unadelasfuncionalidadesqueofreceestaaplicaciónalpersonalsanitarioeslaposibilidad dellevarunregistrocronológicodelosanálisisqueseharealizadoelpacienteparacontrolar elestadodesuEPOC.  Unafuncionalidadmuyinteresanteyaquepermitiráobservarlaevolucióndelosparámetros relacionadosconlaEPOC.  Losdatosquesepuedenalmacenarson:colesterol,tiroides,hemoglobina,triglicéridos, hematocrito,glucosaycreatinina.     33   2.2Consejosparaladietadelpaciente LaaplicacióncontieneungrannúmerodeconsejosquepermitiráalaspersonasconEPOC seguirunadietaadecuadaasuenfermedad.Losconsejosintroducidosenlaaplicaciónhan sidosuministradosporpersonalsanitarioespecializado.           34  2.3OrdenacióncronológicadeloslistView  SehaintroducidolaordenacióndelosListViewquecontenganfechasporordencronológico yaquepermitiráobservardemaneramuchomásclaraculascitaspasadasyfuturas.  SeharealizadounaimplementacióndelmétodocompareToparaasípoderrealizarunsortal ArrayListquecontienelosobjetosaordenar.  publicintcompareTo(Analysisanalysis){ if(Integer.parseInt  (this.getAño())>Integer.parseInt  (analysis.getAño())){ return1; }elseif(Integer.parseInt  (this.getAño())<Integer.parseInt  (analysis.getAño())){ return1; }else{ if(Integer.parseInt  (this.getMes())>Integer.parseInt  (analysis.getMes())){ return1; }elseif(Integer.parseInt  (this.getMes())<Integer.parseInt  (analysis.getMes())){ return1; }else{ if(Integer.parseInt  (this.getDia())>Integer.parseInt  (analysis.getDia())){ return1; }elseif(Integer.parseInt  (this.getDia())<Integer.parseInt  (analysis.getDia())){ return1; }else{ return0; } } } }    35   2.4Desarrolloiterativo  Durantetodoeldesarrollodelaaplicaciónseharealizadoundesarrolloiterativoenelcualse hechotantolastareasdeanalistacomodeprogramador,sehanmantenidoreunionesconla clientarealenlascualessehanrealizadolatomaderequisitos,deloscualessehancreado loscasosdeusoyelbocetodelasinterfaces,estasinterfaceshansidomostradasalaclienta paraquedierasuvistobueno.Durantetodoesteprocesoselehanentregadoversiones funcionalesdelaaplicaciónparaquesiguierasudesarrolloypudieradetectarposibleserrores queexistieran.  Sehanrealizado5iteraciones,delascualeslas4primeraselequipodeIngdelaSaludtomó elpapeldeanalistayelequipodeIngdeSoftwareelpapeldeprogramador,yenlaúltimael equipodesoftwarehatomadotantoelpapeldeprogramadorcomoeldeanalista  Enlasdistintasiteracionessehandesarrolladolassiguientesfuncionalidades:  Enlaprimeraiteración,seimplementaronlasfuncionalidadesde: •Consultarmanualdeusuariodeuninhalador. •Consultartratamiento(listadodetomas). •Crearunatoma. •Consultarunatoma. •Borrartomas. •CreaciónBasedeDatos. Enlasegunda: •Visualizacióndelsemáforo. •Alarmadeavisodetoma. •Añadidoacercadedelaaplicación. •Fixesiteraciónanterior. Enlatercera: •FisioterapiaRespiratoria. •ConsultarycreartratamientodeRescateyrecomendaciones. •Llamaralteléfonodeemergencia. •CRUDdatosdelpaciente. •Llamaralteléfonodelcuidador. •Fixesiteraciónanterior.  36  Enlacuarta: •Crearcitaconpersonalsanitario. •Consultarcitas. •Protecciónporcontraseñaáreadelpersonalsanitario. •ActivaciónydesactivacióndeenvíodeSMS. •Actualizacióninterfazgráfica Enlaquinta: •CRUDanálisis. •Consejossobrelasdietas. •Edicióndelastomas. •CRUDespirometría. •Guíaparadejardefumar.       37   2.5Conclusiones  Elobjetivoprincipalquepretendíacumplirestaaplicacióneramejorarlaadherenciadel pacientealtratamientodeEPOCquesumédicolehaasignado,asícomosuseguimientopor partedelosallegadosalpaciente.  Creemosqueestaaplicaciónhaalcanzadosatisfactoriamenteesteobjetivo,yaquepermitirá alpacientecontrolarsuenfermedaddeunamaneramuchomásefectivagraciasalacantidad defuncionalidadesqueestaaplicaciónleofrece,ademásdeesteobjetivohemosconseguido quelaaplicaciónseacompatibleconlagranmayoríadeteléfonosmóvilesAndroidactuales.    LaversiónmínimaquepuedeutilizarestaaplicacióneslaAPI14,asíque,podránutilizarla aplicaciónun97,9%delosdispositivosandroidqueexistenenelmercadoactual.  Otradelascaracterísticasquehaalcanzadoestaaplicacióneslaaccesibilidadque proporcionaaaquellaspersonasquetenganalgúntipodeimpedimento,yaseavisualode otrotipo,estoesdebidoaquesehabuscadoentodomomentolautilizacióndefuentesdeun tamañoelevado,imágenesrepresentativasyamigables,tambiénsehanañadidoalos tutorialeslaposibilidaddequeelmóvilreproduzcalostextos,centradoparalaspersonasque tenganproblemasenlavisión.  38   Lasposibilidadesdeampliacióndeestaaplicaciónsonmuyelevadas,yaque,podríaser utilizadaparamejorarlaadherenciaauntratamientodeunpacientedecualquiertipode enfermedad,simplementeharíafaltaintroducirlosmedicamentosqueseannecesariospara esaenfermedadasícomolostutorialesdeusodeestos.Ademáslaestructuradelabasede datospermitiráelusosimultáneodedistintostratamientosyperfilesdeusuario,porloque unafamiliapodríautilizarunsolodispositivo(Ejemplo:unatablet)parallevaracaboel controldeltratamientodetodoslosmiembrosdelafamilia.                39  Bibliografía  [1]https://www.android.com/intl/es_es/ [2]https://www.sqlite.org/docs.html [3]https://docs.oracle.com/javase/7/docs/api/ [4]http://www.w3.org/XML/ [5]https://www.zetetic.net/sqlcipher/documentation/ [6]https://gitscm.com/documentation [7]https://confluence.atlassian.com/bitbucket/bitbucketclouddocumentationhome221 448814.html [8]https://www.sourcetreeapp.com [9]https://developer.android.com/studio/index.html [10]https://slack.com [11]https://developer.android.com/training/improvinglayouts/smoothscrolling.html [12]https://developer.android.com/training/displayingbitmaps/loadbitmap.html                            40  Anexoconestructuradelabasededatos.                  41