Commit c79103e8 by SIAP

Esta compuesto por los módulos

* Identificación de Paciente: Contiene las siguientes funcionalidades
** Configuración de oferta de servicios del establecimiento (modalidad, áreas de atención y especialidades)
** Búsqueda y registro de nuevos pacientes (Creación de Expediente)
** Registro de ingresos hospitalarios
** Registro de emergencias
** Registro y gestión de empleados y usuarios
** Reportes

* Citas: Contiene las siguientes funcionalidades:
** Administración de los horarios de atención de Médicos tanto de consultas y procedimientos según horario de contratación.
** Administración de consultorios.
** Agendamiento de usuarios por citas en horario escalonado (Habilitado para personal de citas y personal médico).
** Asignación de citas médicas, de procedimientos.
** Reportes.

* Seguimiento Clínico: Contiene las siguientes funcionalidades:
** Antecedentes clínicos
** Historia clínicas de paciente según especialidad y otros criterios
** Prescripción de medicamentos
** Solicitud de exámenes de laboratorio
** Próximas citas
** Diagnósticos, Referencias, Consejería
** Solicitud de exámenes de laboratorio desde Hospitalización y Emergencia
** Consulta resultados de exámenes
** Consulta de medicamentos dispensados a pacientes
** Reportes
** Recetas Complementarias
** Historia clínica retroactiva

* Modulo de Laboratorio: http://gitlab.salud.gob.sv/SIAP/laboratorio.git
* Modulo de Farmacia: http://gitlab.salud.gob.sv/SIAP/farmacia.git
* Modulo de Firma Digital: http://gitlab.salud.gob.sv/SIAP/firmadigital.git
parents
Showing with 4168 additions and 0 deletions

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

# Bootstrap
app/bootstrap*
# Composer phar
composer.phar
composer.lock
# Symfony directories
vendor/*
*/logs/*
*/cache/*
web/uploads/*
web/bundles/*
src/TmpBundle/
# Archivos de configuración
app/config/parameters.ini
app/config/parameters.yml
#Carpeta nbproject de netbeans
nbproject/
#Archivos de respaldo
*~
#Archivos de solución de conflictos
*.orig
#Compilaciones de Jasper
*.jasper
#Directorio que utiliza el JasperServerReport para abrir las imagenes
web/imagenes/*
#upload files
upload/firmaDigital/*
#Vendors compresos
*.tar.gz
#Excluir los directorios
*.directory
#Excluir configuracion interfacelis
scripts/configuracion.php
#Excluir configuracion de relab
scripts/relab/configuracion.php
language: php
php:
- 5.3.3
- 5.3
- 5.4
before_script: composer install
script: phpunit -c app
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
# Sistema Integral de Atención al Paciente
### Ministerio de Salud de El Salvador (MINSAL)
<div align="center">
<a href="http://codigo.salud.gob.sv/">
<img alt="SUIS" title="SUIS" src="https://next.salud.gob.sv/index.php/s/Bo6GFW9yK8YmFCG/preview" width="450" style="width: 450px;">
</a>
</div>
## Tabla de Contenido
* [Descripción](#descripción)
* [Instalación](#instalación)
* [Colaboradores](#colaboradores)
* [Enlaces de ayuda](#enlaces-de-ayuda)
* [Licencia](#licencia)
## Descripción
El Sistema Integral de Atención al Paciente (SIAP) es Sistema Informático que permite realizar la gestión de la información de los pacientes que consultan en los diferentes niveles de atención del MINSAL con el objetivo de mejorar la atención en los servicios brindados. Es un componente fundamental del Sistema Único de Información en Salud. Esta compuesto por los módulos
- **Identificación de Paciente:** Contiene las siguientes funcionalidades
- Configuración de oferta de servicios del establecimiento (modalidad, áreas de atención y especialidades)
- Búsqueda y registro de nuevos pacientes (Creación de Expediente)
- Registro de ingresos hospitalarios
- Registro de emergencias
- Registro y gestión de empleados y usuarios
- Reportes
- **Citas:** Contiene las siguientes funcionalidades:
- Administración de los horarios de atención de Médicos tanto de consultas y procedimientos según horario de contratación.
- Administración de consultorios.
- Agendamiento de usuarios por citas en horario escalonado (Habilitado para personal de citas y personal médico).
- Asignación de citas médicas, de procedimientos.
- Reportes.
- **Seguimiento Clínico:** Contiene las siguientes funcionalidades:
- Antecedentes clínicos
- Historia clínicas de paciente según especialidad y otros criterios
- Prescripción de medicamentos
- Solicitud de exámenes de laboratorio
- Próximas citas
- Diagnósticos, Referencias, Consejería
- Solicitud de exámenes de laboratorio desde Hospitalización y Emergencia
- Consulta resultados de exámenes
- Consulta de medicamentos dispensados a pacientes
- Reportes
- Recetas Complementarias
- Historia clínica retroactiva
- **Modulo de Laboratorio:** http://gitlab.salud.gob.sv/siap/laboratorio.git
- **Modulo de Farmacia:** http://gitlab.salud.gob.sv/siap/farmacia.git
- **Modulo de Firma Digital:** http://gitlab.salud.gob.sv/siap/firma-digital.git
## Instalación
Para la instalación seguir los pasos descritos en el archivo [**INSTALL.md**](http://gitlab.salud.gob.sv/siap/siaps/blob/master/README.md) y apoyarse del manual de instalación de todos los módulos en [Manual de Instalación](http://gitlab.salud.gob.sv/siap/db_siaps/blob/master/ManualInstalacion.pdf)
## Colaboradores
Los colaboradores de este proyectos son Analistas Programadores que trabajan en el Ministerio de Salud, ellos son:
- Aaron Romero <caromero@salud.gob.sv>
- Caleb Rodriguez <crorozco@salud.gob.sv>
- Jasmín Menjivar <jcmenjivar@salud.gob.sv>
- Julio Castillo <jcastillo@salud.gob.sv>
- Karen Peñate <kpenate@salud.gob.sv>
- Victoria López <mvlopez@salud.gob.sv>
**Dirección de Tecnologías de Información y Comunicaciones (DTIC).**<br />
**Ministerio de Salud**<br />
[www.salud.gob.sv](http://www.salud.gob.sv)
## Enlaces de ayuda
* **FrameworkBundle** - The core Symfony framework bundle
* [**SensioFrameworkExtraBundle**][6] - Adds several enhancements, including
template and routing annotation capability
* [**DoctrineBundle**][7] - Adds support for the Doctrine ORM
* [**TwigBundle**][8] - Adds support for the Twig templating engine
* [**SecurityBundle**][9] - Adds security by integrating Symfony's security
component
* [**SwiftmailerBundle**][10] - Adds support for Swiftmailer, a library for
sending emails
* [**MonologBundle**][11] - Adds support for Monolog, a logging library
* [**AsseticBundle**][12] - Adds support for Assetic, an asset processing
library
* [**JMSSecurityExtraBundle**][13] - Allows security to be added via
annotations
* [**JMSDiExtraBundle**][14] - Adds more powerful dependency injection
features
* **WebProfilerBundle** (in dev/test env) - Adds profiling functionality and
the web debug toolbar
* **SensioDistributionBundle** (in dev/test env) - Adds functionality for
configuring and working with Symfony distributions
* [**SensioGeneratorBundle**][15] (in dev/test env) - Adds code generation
capabilities
* **AcmeDemoBundle** (in dev/test env) - A demo bundle with some example
code
* **CiRestClientBundle** [16] (in master) - A Smart REST client with an intuitive API, providing all REST methods and returning a Symfony Response Object.
[1]: http://symfony.com/doc/current/book/installation.html
[2]: http://getcomposer.org/
[3]: http://symfony.com/download
[4]: http://symfony.com/doc/current/quick_tour/the_big_picture.html
[5]: http://symfony.com/doc/current/index.html
[6]: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html
[7]: http://symfony.com/doc/current/book/doctrine.html
[8]: http://symfony.com/doc/current/book/templating.html
[9]: http://symfony.com/doc/current/book/security.html
[10]: http://symfony.com/doc/current/cookbook/email.html
[11]: http://symfony.com/doc/current/cookbook/logging/monolog.html
[12]: http://symfony.com/doc/current/cookbook/assetic/asset_management.html
[13]: http://symfony.com/doc/current/bundles/SensioGeneratorBundle/index.html
[16]: https://github.com/CircleOfNice/CiRestClientBundle
## Licencia
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html"><img alt="Licencia GNU GPLv3" style="border-width:0" src="https://next.salud.gob.sv/index.php/s/qxdZd5iwcqCyJxn/preview" width="96" /></a>
Este proyecto está bajo la <a rel="license" href="http://gitlab.salud.gob.sv/siap/siaps/blob/master/LICENSE">licencia GNU General Public License v3.0</a>
\ No newline at end of file
deny from all
\ No newline at end of file
<?php
require_once __DIR__.'/AppKernel.php';
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
class AppCache extends HttpCache
{
}
<?php
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sonata\CoreBundle\SonataCoreBundle(),
new Sonata\BlockBundle\SonataBlockBundle(),
new Sonata\jQueryBundle\SonatajQueryBundle(),
new Knp\Bundle\MenuBundle\KnpMenuBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(),
new Sonata\AdminBundle\SonataAdminBundle(),
new FOS\UserBundle\FOSUserBundle(),
new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'),
new Sonata\EasyExtendsBundle\SonataEasyExtendsBundle(),
new Sonata\CacheBundle\SonataCacheBundle(),
new Application\Sonata\UserBundle\ApplicationSonataUserBundle(),
new Knp\Bundle\MarkdownBundle\KnpMarkdownBundle(),
new Ivory\CKEditorBundle\IvoryCKEditorBundle(),
new Ivory\OrderedFormBundle\IvoryOrderedFormBundle(),
new Sonata\FormatterBundle\SonataFormatterBundle(),
new Sonata\IntlBundle\SonataIntlBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
new JMS\AopBundle\JMSAopBundle(),
new JMS\DiExtraBundle\JMSDiExtraBundle($this),
new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
new FOS\JsRoutingBundle\FOSJsRoutingBundle(),
new Application\CoreBundle\ApplicationCoreBundle(),
new Minsal\SiapsBundle\MinsalSiapsBundle(),
new Minsal\SeguimientoBundle\MinsalSeguimientoBundle(),
new Minsal\CitasBundle\MinsalCitasBundle(),
new ADesigns\CalendarBundle\ADesignsCalendarBundle(),
new Minsal\LaboratorioBundle\MinsalLaboratorioBundle(),
new Minsal\FarmaciaBundle\MinsalFarmaciaBundle(),
new Endroid\Bundle\QrCodeBundle\EndroidQrCodeBundle(),
new Knp\Bundle\SnappyBundle\KnpSnappyBundle(),
new Application\SoapBundle\ApplicationSoapBundle(),
new Knp\Bundle\TimeBundle\KnpTimeBundle(),
new Application\ApiSecurityBundle\ApplicationApiSecurityBundle(),
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
//$bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}
return $bundles;
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
}
}
{# Variables Globales #}
{% set tipoEmpleado = app.user.getIdEmpleado.getIdTipoEmpleado.getCodigo %}
{% block user_block %}
{% if app.user %}
{% set _bg_class = "bg-light-blue" %}
{% set _logout_uri = url('sonata_user_admin_security_logout') %}
{% set _logout_text = 'user_block_logout'|trans({}, 'SonataUserBundle') %}
{% set _user_image = asset(sonata_user.defaultAvatar) %}
{# Customize this with your profile picture implementation, see below for example #}
{#{% set _user_image = app.user.profilePicture|default(asset(sonata_user.defaultAvatar)) %}#}
{% if is_granted('ROLE_PREVIOUS_ADMIN') and sonata_user.impersonating %}
{% set _bg_class = "bg-light-green" %}
{% set _logout_uri = url(sonata_user.impersonating.route, sonata_user.impersonating.parameters| merge({'_switch_user': '_exit'})) %}
{% set _logout_text = '(exit)' %}
{% endif %}
<li>
<a href="{{ _logout_uri }}">
<i class="fa fa-sign-out fa-fw" style="width:25px;"></i>
{{ _logout_text }}
</a>
</li>
{% if app.user.getIdEmpleado.getIdTipoEmpleado is defined and ( tipoEmpleado is sameas("MED") or tipoEmpleado is sameas("ENF") ) and
app.session.get('_secured_token') is defined and app.session.get('_secured_token') is not null and
app.request.attributes.get('_route') != 'verify_medic_service' %}
<li>
<a href="{{ url('verify_medic_service', { '_provided_token': app.session.get('_secured_token') }) }}">
<i style="width:25px; margin-right: 10px;">
<span class="glyphicon glyphicon-user" style="margin-right: 0;font-size: 10px;"></span>
<span class="glyphicon glyphicon-log-in" style="margin-right: 0;font-size: 10px;"></span>
</i>
Cambiar de {% if tipoEmpleado == 'MED' %}Especialidad{% else %}Modalidad{% endif %}
</a>
</li>
{% endif %}
{% if app.session.get('_moduleSelection') not in signed_modules|split(',') %}
<li>
<a href="{{ url('fos_user_change_password') }}">
<span class="glyphicon glyphicon-pencil" style="width:25px;"></span>
Cambiar Contraseña
</a>
<li>
{% endif %}
{% endif %}
{% endblock %}
{% extends base_template %}
{% block stylesheets %}
{{ parent() }}
<link rel="stylesheet" href="{{ asset('bundles/applicationcore/css/corelogin.css') }}?v={{ _version }}" type="text/css" media="all" />
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script type="text/javascript">
jQuery(document).ready(function ($) {
$('body').append('</div>');
$('#_digitalSignature').on('change', function () {
var file = this.files[0];
var name = file.name;
var size = file.size;
var type = file.type;
/* if(type !== 'application/x-pkcs12') {
$(this).val('');
$('#fileInfo').val('');
if($('div#dialog-message').length == 0) {
$('body').append('<div id="dialog-message"></div>');
} else {
$('#dialog-message').empty();
}
$("#dialog-message").append('<p><i class="icon-warning-sign" style="margin-right:7px;"></i>\
El archivo seleccionado no es un archivo de tipo <b>Firma digital</b> cuya extensi&oacute;n debe ser <b>.p12</b>,\
<br />Por favor seleccione un nuevo archivo.</p>');
$("#dialog-message").dialog({
dialogClass: "dialog-warning",
modal: true,
title: 'Tipo de archivo incorrecto!!!',
buttons: {
Cerrar: function() {
$( this ).dialog( "close" );
}
}
});
} else {*/
$('#fileInfo').val($(this).val().replace("C:\\fakepath\\", ""));
// }
});
{% if module is defined %}
var url = window.location;
//truco para añadir a la url el modulo seleccionado en la primera pagina de login
if (window.location.href.indexOf('_moduleSelection') == -1) {
window.history.replaceState("object or string", "Title", "?{{ module }}");
}
{% endif %}
});
</script>
{% endblock %}
{% block sonata_nav %}
{% endblock sonata_nav %}
{% block sonata_header %}
<div id="wrapper">
<header class="header">
{% block logo %}
<center><img class="banner" src="{{ asset('bundles/applicationcore/images/banner.png') }}?v={{ _version }}" alt="Ministerio de Salud banner" /></center>
{% endblock logo %}
</header>
{% endblock sonata_header %}
{% block sonata_left_side %}
{% endblock sonata_left_side %}
{% block body_attributes %}class="sonata-bc bg-black"{% endblock %}
{% block sonata_wrapper %}
prueba
<div class="form-box" id="login-box">
<div class="header">{# 'title_user_authentication'|trans({}, 'SonataUserBundle') #}</div>
{% block sonata_user_login_form %}
<form action="{{ path("sonata_user_admin_security_check") }}" method="post" role="form" enctype="multipart/form-data">
<div class="body bg-gray">
{% block sonata_user_login_error %}
{% if error %}
<div class="alert alert-danger alert-error">{{ error|trans({}, 'FOSUserBundle')|raw }}</div>
{% endif %}
{% endblock %}
{% block session_messages %}
{% for type in sessionMsjType %}
{% for message in msj[type] %}
<div class="alert alert-{{ type }} alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
{{ message|raw }}
</div>
{% endfor %}
{% endfor %}
{% endblock %}
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}"/>
<input type="hidden" name="_moduleSelection" value="{{ module|slice(-1,1) }}" />
<div class="form-group control-group">
{% if module|slice(-1,1) not in signed_modules %}
<label for="username" style="text-align:left;">Nombre de Usuario</label>
<input type="text" class="form-control" id="username" name="_username" value="{{ last_username }}" required="required" placeholder="{{ 'security.login.username'|trans({}, 'SonataUserBundle') }}"/>
{% else %}
<label for="digtalSignature" style="text-align:left;">Firma digital</label>
<div class="custom_file_upload form-control">
<input type="text" id="fileInfo" class="file_info" placeholder="Seleccionar firma digital" name="_username" readonly />
<div class="file_upload">
<input type="file" id="_digitalSignature" name="_digitalSignature" />
</div>
</div>
{% endif %}
</div>
<div class="form-group control-group">
<label>Contrase&ntilde;a</label>
<input type="password" class="form-control" id="password" name="_password" required="required" placeholder="{{ 'security.login.password'|trans({}, 'SonataUserBundle') }}"/>
</div>
<!--<div class="form-group">
<input type="checkbox" id="remember_me" name="_remember_me" value="on"/>
{{ 'security.login.remember_me'|trans({}, 'FOSUserBundle') }}
</div>-->
</div>
<div class="footer">
<center><button type="submit" id="_submit" name="_submit" class="btn btn-primary btn-block">{{ 'security.login.submit'|trans({}, 'FOSUserBundle') }}</button></center>
<!--<p><a href="{{ path('fos_user_resetting_request') }}" class="text-center">{{ 'forgotten_password'|trans({}, 'SonataUserBundle') }}</a></p>-->
</div>
</form>
{% endblock %}
</div>
<div class="page-footer"><img class="dtic-footer" src="{{ asset("bundles/applicationcore/images/dtic.png") }}?v={{ _version }}" alt="dtic"/>Direcci&oacute;n de Tecnolog&iacute;as de Informaci&oacute;n y Comunicaciones - Ministerio de Salud</div>
{% endblock sonata_wrapper %}
{% extends 'SonataUserBundle::layout.html.twig' %}
{% block stylesheets %}
{{ parent() }}
<style type="text/css">
.ui-front {
z-index: 1030 !important;
}
</style>
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script type="text/javascript">
$(document).ready(function() {
$("#guardar").click(function() {
if ($("#fos_user_change_password_form_new_first").val() != $("#fos_user_change_password_form_new_second").val()) {
$("#fos_user_change_password_form_new_first").val('');
$("#fos_user_change_password_form_new_second").val('');
$("#fos_user_change_password_form_new_first").focus();
$("body").append('<div id="dialog-message"></div>');
$("#dialog-message").empty();
$("#dialog-message").append('<p><span class="glyphicon glyphicon-exclamation-sign"></span> Los campos de la nueva contraseña no coinciden.<br /><strong>Por favor vuelva a digitarlas</strong></p>');
$("#dialog-message").dialog({
dialogClass: "dialog-error",
modal: true,
title: 'Contraseñas no coinciden.',
width: 500,
buttons: {
Aceptar: function() {
$( this ).dialog( "close" );
}
}
});
return false;
}
});
});
</script>
{% endblock %}
{% block fos_user_content %}
<center>
<form action="{{ path('fos_user_change_password') }}" {{ form_enctype(form) }} method="POST" class="fos_user_change_password">
<table style="border-collapse: separate; border-spacing: 10px;">
<tr>
<td>{{ form_label(form.current_password, label|default(null)) }}</td>
<td>{{ form_widget(form.current_password) }}</td>
</tr>
<tr>
<td>{{ form_label(form.new.first, label|default(null)) }}</td>
<td>{{ form_widget(form.new.first) }}</td>
</tr>
<tr>
<td>{{ form_label(form.new.second, label|default(null)) }}</td>
<td>{{ form_widget(form.new.second) }}</td>
</tr>
</table>
{{ form_widget(form) }}
<div>
<button id="guardar" type="submit" class="btn btn-primary">
<span class="glyphicon glyphicon-ok"></span> {{ 'change_password.submit'|trans({}, 'FOSUserBundle') }}
</button>
<a class="btn btn-info" href="{{ path('_inicio') }}">
<span class="glyphicon glyphicon-home"></span> Regresar
</a>
</div>
</form>
</center>
{% endblock fos_user_content %}
{% extends 'SonataAdminBundle::layout.html.twig' %}
{% block content %}
<div class="span10">
{% for message in app.session.flashbag.get('fos_user_success') %}
<div class="alert alert-success">
{{ message|trans({}, "FOSUserBundle") }}
</div>
{% endfor %}
{% for message in app.session.flashbag.get('sonata_user_success') %}
<div class="alert alert-success">
{{ message|trans({}, "SonataUserBundle") }}
</div>
{% endfor %}
</div>
{% endblock %}
{% extends 'SonataAdminBundle::layout.html.twig' %}
{% block content %}
{% block fos_user_content %}{% endblock %}
{% endblock %}