282 lines
8.7 KiB
PHP
282 lines
8.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Mobile\ConectaSusAb\Sincronizacao;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Controllers\Cadastro\SujeitoAtencao\PacienteController;
|
|
use App\Services\AtencaoBasica\AtendimentoIndividual\AtendimentoIndividualService;
|
|
use App\Services\AtencaoBasica\VisitaDomiciliar\VisitaDomiciliarService;
|
|
use App\Services\AtencaoBasica\Avaliacao\AvaliacaoService;
|
|
use App\Services\AtencaoBasica\FichaComplementar\FichaComplementarService;
|
|
use App\Services\AtencaoBasica\Procedimento\ProcedimentoService;
|
|
use App\Services\AtencaoBasica\MarcadorConsumoAlimentar\MarcadorConsumoAlimentarService;
|
|
use App\Services\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarService;
|
|
use Illuminate\Http\Response;
|
|
|
|
class SincronizacaoController extends Controller
|
|
{
|
|
|
|
public function sincronizacao()
|
|
{
|
|
|
|
$response = [
|
|
'cadastro_paciente' => 0,
|
|
'atendimento_individual' => 0,
|
|
'visita_domiciliar' => 0,
|
|
'avaliacao_elegibilidade' => 0,
|
|
'ficha_complementar' => 0,
|
|
'procedimentos' => 0,
|
|
'marcadores_consumo' => 0,
|
|
'atendimento_domiciliar' => 0,
|
|
];
|
|
|
|
$identificacoes = [];
|
|
|
|
$fichas = request()->all();
|
|
|
|
self::adicionarLogSincronizacao($fichas);
|
|
|
|
if (isset($fichas['cadastro_paciente'])) {
|
|
|
|
self::sincronizarCadastroPaciente($fichas['cadastro_paciente'], $identificacoes, $response);
|
|
}
|
|
|
|
if (isset($fichas['atendimento_individual'])) {
|
|
|
|
self::sincronizarAtendimentoIndividual($fichas['atendimento_individual'], $identificacoes, $response);
|
|
}
|
|
|
|
if (isset($fichas['visita_domiciliar'])) {
|
|
|
|
self::sincronizarVisitaDomiciliar($fichas['visita_domiciliar'], $identificacoes, $response);
|
|
}
|
|
|
|
if (isset($fichas['avaliacao_elegibilidade'])) {
|
|
|
|
self::sincronizarAvaliacaoElegibilidade($fichas['avaliacao_elegibilidade'], $identificacoes, $response);
|
|
}
|
|
|
|
if (isset($fichas['ficha_complementar'])) {
|
|
|
|
self::sincronizarFichaComplementar($fichas['ficha_complementar'], $identificacoes, $response);
|
|
}
|
|
|
|
if (isset($fichas['procedimentos'])) {
|
|
|
|
self::sincronizarProcedimentos($fichas['procedimentos'], $identificacoes, $response);
|
|
}
|
|
|
|
if (isset($fichas['marcadores_consumo'])) {
|
|
|
|
self::sincronizarMarcadorConsumoAlimentar($fichas['marcadores_consumo'], $identificacoes, $response);
|
|
}
|
|
|
|
if (isset($fichas['atendimento_domiciliar'])) {
|
|
|
|
self::sincronizarAtendimentoDomiciliar($fichas['atendimento_domiciliar'], $identificacoes, $response);
|
|
}
|
|
|
|
return response()->json($response, Response::HTTP_OK);
|
|
}
|
|
|
|
private static function sincronizarCadastroPaciente($fichas, &$identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as &$ficha) {
|
|
|
|
$paciente = new PacienteController();
|
|
|
|
$fichaPaciente = $paciente->getPaciente($ficha['paciente_id'] ?? null);
|
|
|
|
if (is_null($fichaPaciente)) {
|
|
|
|
$pacienteIdPorCpf = $paciente->obterFichaPacientePorCpf($ficha['cidadao']['cpf']);
|
|
|
|
$fichaPaciente = $paciente->getPaciente($pacienteIdPorCpf ?? null);
|
|
}
|
|
|
|
$idPaciente = $paciente->saveStore($ficha, $fichaPaciente);
|
|
|
|
if (is_numeric($idPaciente) && $idPaciente > 0 && isset($ficha['ID_TMP']) && $ficha['ID_TMP'] > 0 && is_null($ficha['cidadao']['id'])) {
|
|
|
|
$identificacoes['paciente'][$ficha['ID_TMP']] = $idPaciente;
|
|
}
|
|
|
|
$response['cadastro_paciente'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarCadastroDomiciliar($fichas, $identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as &$ficha) {
|
|
|
|
CadastroDomiciliarService::saveStore($ficha);
|
|
|
|
$response['cadastro_domiciliar'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarCadastroIndividual($fichas, &$identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as $ficha) {
|
|
|
|
CadastroIndividualService::saveStore($ficha);
|
|
|
|
$response['cadastro_individual'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarAtendimentoIndividual($fichas, $identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as $ficha) {
|
|
|
|
$ficha['paciente_id'] = self::obterIdentificacaoPaciente($identificacoes, $ficha['paciente_id'], $ficha['PACIENTE_ID_TMP']);
|
|
|
|
AtendimentoIndividualService::saveStore($ficha);
|
|
|
|
$response['atendimento_individual'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarVisitaDomiciliar($fichas, $identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as $ficha) {
|
|
|
|
$ficha['paciente_id'] = self::obterIdentificacaoPaciente($identificacoes, $ficha['paciente_id'], $ficha['PACIENTE_ID_TMP']);
|
|
|
|
VisitaDomiciliarService::saveStore($ficha, true);
|
|
|
|
$response['visita_domiciliar'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarAvaliacaoElegibilidade($fichas, $identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as $ficha) {
|
|
|
|
$ficha['paciente_id'] = self::obterIdentificacaoPaciente($identificacoes, $ficha['paciente_id'], $ficha['PACIENTE_ID_TMP']);
|
|
|
|
AvaliacaoService::saveStore($ficha);
|
|
|
|
$response['avaliacao_elegibilidade'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarFichaComplementar($fichas, $identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as $ficha) {
|
|
|
|
$ficha['paciente'] = self::obterIdentificacaoPaciente($identificacoes, $ficha['paciente'], $ficha['PACIENTE_ID_TMP']);
|
|
|
|
FichaComplementarService::saveStore($ficha);
|
|
|
|
$response['ficha_complementar'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarProcedimentos($fichas, $identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as $ficha) {
|
|
|
|
foreach ($ficha['atendimentos'] as $atendimento) {
|
|
|
|
$atendimento['paciente_id'] = self::obterIdentificacaoPaciente($identificacoes, $atendimento['paciente_id'], $atendimento['PACIENTE_ID_TMP']);
|
|
}
|
|
|
|
ProcedimentoService::saveStore($ficha);
|
|
|
|
$response['procedimentos'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarMarcadorConsumoAlimentar($fichas, $identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as $ficha) {
|
|
|
|
$ficha['paciente_id'] = self::obterIdentificacaoPaciente($identificacoes, $ficha['paciente_id'], $ficha['PACIENTE_ID_TMP']);
|
|
|
|
MarcadorConsumoAlimentarService::saveStore($ficha);
|
|
|
|
$response['marcadores_consumo'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function sincronizarAtendimentoDomiciliar($fichas, $identificacoes, &$response)
|
|
{
|
|
|
|
if (is_array($fichas) && sizeof($fichas) > 0) {
|
|
|
|
foreach ($fichas as $ficha) {
|
|
|
|
foreach ($ficha['atendimentos'] as $atendimento) {
|
|
|
|
$ficha['paciente_id'] = self::obterIdentificacaoPaciente($identificacoes, $atendimento['paciente_id'], $atendimento['PACIENTE_ID_TMP']);
|
|
}
|
|
|
|
AtendimentoDomiciliarService::saveStore($ficha);
|
|
|
|
$response['atendimento_domiciliar'] += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function obterIdentificacaoPaciente($identificacoes, $idPaciente, $identificacaoTemporaria)
|
|
{
|
|
|
|
if ($idPaciente > 0) {
|
|
|
|
return $idPaciente;
|
|
}
|
|
|
|
if (isset($identificacoes['paciente'][$identificacaoTemporaria]) && $identificacoes['paciente'][$identificacaoTemporaria] > 0) {
|
|
|
|
return $identificacoes['paciente'][$identificacaoTemporaria];
|
|
}
|
|
}
|
|
|
|
private static function adicionarLogSincronizacao($fichas)
|
|
{
|
|
|
|
$cliente = request()->header('customer');
|
|
$dataHora = \Carbon\Carbon::now()->format('YmdHi');
|
|
$caminho = "{$cliente}/{$dataHora}.json";
|
|
|
|
\Storage::disk('mobile')->put($caminho, json_encode($fichas));
|
|
}
|
|
}
|