¿Cómo incorporar bases de datos externas al ANGEL ?

Historia Clínica Electrónica para la administración hospitalaria. Software de salud gratuito.
Estas rutinas explican el procedimiento para incorporar desde una planilla de excel o un archivo .dbf o cualquier archivo SQL a la base de datos del ANGEL.

Estas rutinas son esencialmente demostrativas, Ud. deberá adaptarla a su necesidad, y podrá elegir el lenguaje a utilizar.

Parte primera:

Los scripts que estamos publicando son un modelo de como subir una base de datos al Angel, teniendo en cuenta los distintos casos que se nos han presentado.
Es seguro que Ud. deberá personalizar en algún punto o omitir algún otro.

Como primer paso, solemos trabajar con seis tablas:
-afiliadosangel
-patient
-patient_medins_plan
-patient_medins_plan_status
- medical_insurance_plan
- medical_insurance_company

La primera de ellas es una temporal donde van a estar cargados los registros que deseamos incorporar a la base de datos de Angel.
Esta tabla ("afiliadosangel") puede tener otra estructura distinta a la del angel ("patient") y es la cual va a ser modificada, en su caso, para poder estandarizarla y asi poder subir los registros a la base de datos del angel.
De tener las dos tablas la misma estructura será mucho más fácil la carga, la complejidad puede estar cuando hay información que debe ser modificada para poder ser subida (ejemplo las pronvincias vienen con nombre y no codificadas, el nombre y apellido vienen juntos separados por una coma, la dirección del paciente viene en varias columnas, etc).
Otra aclaración, de esta tabla "afiliadosangel" es creada dentro de la base "cmsys" de Angel.

Las otras cinco tablas mencionadas son ya parte de Angel.
Se agregará en cada una la informacion que se necesaria.

En la rutina, la primera parte es la codificación de las provincias.
Toma los distintos registros de provincias que vienen como nombres y les asigna un código.
Un código distinto por cada provincia. A Capital Federal y Ciudad Autónoma de Buenos Aires (si fuese necesario) les asigna el código 1, a Buenos Aires le asigna el código 2 y asi sucesivamente.
Para no alterar la tabla original la rutina crea una columna nueva donde ingresara la nueva codificación.

Parte segunda:

Corresponde a la codificación de los paises. Es la misma metodología que para las provincias.
Toma los distintos registros de paises que vienen como nombres y les asigna un código.
Un código distinto por cada pais. A Argentina le asigna el código 1, a Bolivia el 2 y asi sucesivamente.

A los indocumentados les asigna el código 0.

Parte tercera:

Consiste en la separación del nombre y el apellido que en éste ejemplo vienen separados por una coma dentro de un mismo campo.
La rutina crea dos columnas y les asigna un valor a cada una (nombre por un lado y apellido por el otro).

Al igual que en la parte 1 también crea las columnas simplemente como una forma de ser prolijos y organizados, para no alterar la información original.

Parte cuarta:

Configura la dirección para que pueda ser cargada en "patient" (toma Nombre de la calle + Número + Piso + Departamento + Localidad). En el ejemplo, vienen en campos separados. Asigna todos los distintos datos en una misma variable ("home_addy") y luego la usará para asignarle los valores en la tabla de Angel.

Parte quinta:

Es el caso en que la fecha viniese como aaaammdd. La rutina separa por guiones el año, el mes y el dia y pone como hora 00:00:00. Esto es debido a que la columna Fecha de Nacimiento en Angel es de tipo `DATETIME`.

En la sexta parte, REALIZO LA CARGA, es donde efectivamente se carga toda la información ya estandarizada en las tablas de Angel.

Parte sexta "A":
En la tabla "patient" se insertará: -número de documento (id1) -País (id2) -Apellido (last_name) -Nombre (first_name) -Sexo (sex) -Fecha de Nacimiento (birth) -Dirección (home_addy) -Provincia del domicilio (home_province_id) -Código postal (zip_code) -Teléfono particular (home_phone) -Notas (extra).
En "extra" va toda la información que se posea originalmente, es decir en la tabla afiliadosangel, que no se ingresa en ningún otro campo de la tabla "patient" de Angel.
Esta es información que se contaba originalmente, la cual puede variar según el caso.
Los campos que son indispensables y no podrán estar ausentes son: -Nro. de documento -País -Nombre y Apellido -Sexo
Vale la aclaración que podrá agregarse más informacián (fuera de "extra") mientras ésta esté contenida en la tabla de Angel.
El caso anterior es sólo ilustrativo, dependerà de la estructura y la información que posea su tabla afiliadosangel.

Parte sexta "B":
Se inserta en la tabla "patient_medins_plan" la información correspondiente.
Se ingresará nuevamente el número de documento y el país. Además, el código del plan (en este caso se define con una variable puesto que supone un mismo plan para todos, de no ser asi, deberá estar en la tabla original y deberá ser tomado de ahí como se hace con el resto de la información), el número de afiliado (member_id) y el número del titular (holder_id). Según corresponda.

Toda la información es tomada de "afiliadosangel".

Parte sexta "C":
Se insertan los datos en la tabla "patient_medins_plan_status".
En ésta tabla se van insertando los registros y el primer campo que se ingresa es un valor autoincremental.
Es decir, que mira el último registro y le suma uno (id_number en patient_medins_plan_id).
Por otro lado, en los campos plan_status y member_status se ingresará la información que se tome de la tabla original.
Sin embargo, puede que no se contenga dicha información en cuyo caso deberá hacerse alguno de los 2 siguientes pasos: -Crear en la rutina un paso para que crea una columna y ahí coloque como código, 1 para "activo" y 2 para "No activo" o bien, -Asignarlo manualmente definiendo una variable ($plan_status = 1), o no, en el caso que se suponga que estan todos activos.

Parte septima - carga Obras Sociales

Se insertan los datos de las Obras Sociales en la tabla "medical_insurance_company".
A continuación por cada una de las Obras Sociales, se carga el o los planes en la tabla "medical_insurance_plan".

La rutina expuesta se publica en PHP por la simplicidad de la lectura, usuarios más avanzados podrán utilizar otros lenguajes con los que se sientan más cómodos.

 

<?php

require("funciones.php");
conectoMysql ('cmsys');

///////////////////////////////
$tabla = 'afiliadosAngel';

//CODIFICO PROVINCIAS

$provincias_nombres = array('CAPITAL FEDERAL', 'CIUDAD AUTONOMA DE BUENOS AIRES', 'BUENOS AIRES', 'CATAMARCA', 'CHACO', 'CHUBUT', 'CORDOBA', 'CORRIENTES', 'ENTRE RIOS', 'FORMOSA', 'JUJUY', 'LA PAMPA', 'LA RIOJA', 'MENDOZA', 'MISIONES', 'NEUQUEN', 'RIO NEGRO', 'SALTA', 'SAN JUAN', 'SAN LUIS', 'SANTA CRUZ', 'SANTA FE', 'SANTIAGO DEL ESTERO', 'TIERRA DEL FUEGO', 'TUCUMAN', 'PROVINCIA SIN DEFINIR');

$provincias_codigos = array(1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0);

$contador = 0;

$borro_columna = querySql("ALTER TABLE $tabla DROP provincia_angel");
$creo_columna = querySql("ALTER TABLE $tabla ADD provincia_angel INT(2)");

while ($contador < sizeof($provincias_nombres))
{

$buscoRef = querySql("UPDATE $tabla SET provincia_angel = $provincias_codigos[$contador] WHERE provincia = \"$provincias_nombres[$contador]\"");
$contador++;
}

//CODIFICO PAIS

$pais_nombres = array('Argentina', 'Bolivia', 'Brasil', 'Chile', 'Colombia', 'Costa Rica',
'Cuba', 'Ecuador', 'El Salvador', 'España', 'Guatemala', 'Haití', 'Honduras', 'Jamaica', 'México', 'Nicaragua', 'Panamá', 'Paraguay', 'Perú', 'Puerto Rico', 'Rep. Dominicana', 'Uruguay', 'Venezuela');

$pais_codigos = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23);

$contador = 0;

$borro_columna = querySql("ALTER TABLE $tabla DROP pais");
$creo_columna = querySql("ALTER TABLE $tabla ADD pais_angel INT(2)");

while ($contador < sizeof($pais_nombres))
{

$buscoRef = querySql("UPDATE $tabla SET pais_angel = $pais_codigos[$contador] WHERE pais = \"$pais_nombres[$contador]\"");
$contador++;
}

//SEPARO NOMBRE Y APELLIDO

$borro_columna = querySql("ALTER TABLE $tabla DROP afiliado_nombre");
$borro_columna = querySql("ALTER TABLE $tabla DROP afiliado_apellido");

$creo_columna = querySql("ALTER TABLE $tabla ADD afiliado_nombre VARCHAR(100)");
$creo_columna = querySql("ALTER TABLE $tabla ADD afiliado_apellido VARCHAR(100)");

$ejecutarseleccionAfiliado = querySql("SELECT afiliado FROM $tabla");
while ($rowAfi = mysql_fetch_array($ejecutarseleccionAfiliado))
{
list($apellido, $nombre) = split(', ', $rowAfi[afiliado]);

$update = querySql("UPDATE $tabla set afiliado_nombre = \"$nombre\", afiliado_apellido = \"$apellido\" WHERE afiliado = \"$rowAfi[afiliado]\"");
}

//HOME ADDY

$borro_columna = querySql("ALTER TABLE $tabla DROP home_addy");
$creo_columna = querySql("ALTER TABLE $tabla ADD home_addy VARCHAR(100)");

$ejecutarseleccionDomicilio = querySql("SELECT id, domicilio1, barrio, localidad FROM $tabla");
while ($rowDom = mysql_fetch_array($ejecutarseleccionDomicilio))

{
$home_addy = "$rowDom[domicilio1] $rowDom[barrio] $rowDom[localidad]";

$update = querySql("UPDATE $tabla set home_addy = \"$home_addy\" WHERE id = $rowDom[id]");
}

//FECHA

$creo_columna = querySql("ALTER TABLE $tabla DROP fechaNacimientoAngel");
$creo_columna = querySql("ALTER TABLE $tabla ADD fechaNacimientoAngel VARCHAR(100)");

$ejecutarmodificacionfecha = querySql ("UPDATE afiliadosAngel
SET fechaNacimientoAngel = concat( substring( `fechaNacimiento` , 1, 4 ) , '-', substring( `fechaNacimiento` , 6, 2 ) , '-',
substring( `fechaNacimiento` , 9, 2 ), ' 00:00:00' )
WHERE 1");

 

//--------------------------REALIZO LA CARGA---------------------------------------
$ejecutarseleccion = querySql("SELECT * FROM afiliadosAngel");
while ($rowDato = mysql_fetch_array($ejecutarseleccion))
{

$extra = "datoextra=$rowDato[datoextra]";

//INSERT PATIENT
$inserto = querySql("insert into `patient`
(`id1`, `id2`, `last_name`, `first_name`, `sex`, `birth`, `home_addy`, `home_province_id`, `home_zip_code`, `home_phone`, `notes`)

VALUES (
\"$rowDato[nroDoc]\", \"$rowDato[pais_angel]\", \"$rowDato[afiliado_apellido]\", \"$rowDato[afiliado_nombre]\",
\"$rowDato[sexo]\", \"$rowDato[fechaNacimientoAngel]\", \"$rowDato[home_addy]\", \"$rowDato[provincia_angel]\", \"$rowDato[codPostal]\", \"$rowDato[telefono]\", \"$extra\")
");

//INSERT PATIENT_MEDINS_PLAN
$elcodigodeplan= ;
$inserto = querySql("insert into patient_medins_plan (
patient_id1,
patient_id2,
medins_plan_id,
member_id,
holder_number

) VALUES (
$rowDato[nroDoc],
'$rowDato[pais_angel]',
$elcodigodeplan,
$rowDato[member_id],
$rowDato[holder_number]
)");

//INSERT PATIENT_MEDINS_PLAN_STATUS
$id_number = mysql_insert_id();//ULTIMO INCREMENTAL DE LA TALBA ANTERIOR, ULTIMO INSERT
$inserto = querySql("insert into patient_medins_plan_status (
patient_medins_plan_id,
plan_status,
member_status

) VALUES (
$id_number,
$rowDato[plan_status],
$rowDato[member_status]

)");

}

//CARGA DE OBRAS SOCIALES

/*

Estructura de la tabla

DROP TABLE IF EXISTS `cmsys`.`medical_insurance_company`;
CREATE TABLE `cmsys`.`medical_insurance_company` (
`id` int(10) unsigned NOT NULL auto_increment,
`entity_id1` varchar(20) default NULL,
`country_id` smallint(5) unsigned NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`rnos` int(10) unsigned default NULL,
`etc` text,
PRIMARY KEY (`id`),
KEY `Rnos` (`rnos`)
) TYPE=InnoDB;

Definicion de campos
Id: autoincremental
entity_id1 = codigo de la OS
country_id: codigo del pais
name = nombre de la OS
rnos = RNOS
etc = datos extras
*/

//tabla origen = os_original
//tabla final: medical_insurance_company

$os_original = 'a completar';

$inserto_company = querySql("INSERT INTO medical_insurance_company
SELECT '', a.* FROM $os_original a");


//CARGA DE LOS PLANES DE LAS OBRAS SOCIALES
/*

Estructura de la tabla

DROP TABLE IF EXISTS `cmsys`.`medical_insurance_plan`;
CREATE TABLE `cmsys`.`medical_insurance_plan` (
`id` int(10) unsigned NOT NULL auto_increment,
`medical_insurance_company_id` int(10) unsigned NOT NULL default '0',
`code` varchar(16) NOT NULL default '',
`description` text,
`nomenclator_id` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `MedicalInsuranceAndCode` (`medical_insurance_company_id`,`code`),
KEY `ByCode` (`code`)
) TYPE=InnoDB;

Definicion de campos
id: autoincremental
medical_insurance_company_id = vincual con la tabla de las OS (medical_insurance_company), a través del id de medical_insurance_company
code = codigo del plan
description = nombre o descripcion del plan
nomencladro_id = ??????

*/

//tabla origen = plan_original
//tabla final: medical_insurance_plan

$plan_original = 'a completar';

$inserto_plan = querySql("INSERT INTO medical_insurance_plan
SELECT '', a.* FROM $plan_original a");

//REALIZO LA CARGA--------------------------------------------------------------------------

 

print("rutina OK");

?>