Files
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

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));
}
}