This commit is contained in:
@@ -0,0 +1,281 @@
|
||||
<?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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user