1224 lines
60 KiB
PHP
1224 lines
60 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AtencaoBasica\Exportacao;
|
|
|
|
use App\Enums\AtencaoBasica\Exportacao\Status;
|
|
use App\Exceptions\AtencaoBasica\ArquivoException;
|
|
use App\Exceptions\AtencaoBasica\ExportacaoEmAndamentoException;
|
|
use App\Exceptions\AtencaoBasica\NaoExisteFichaException;
|
|
use App\Jobs\AtencaoBasica\ExportacaoJob;
|
|
use App\Models\AtencaoBasica\AtencaoBasicaVersaoIntegradorEsus;
|
|
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliar;
|
|
use App\Models\AtencaoBasica\AtendimentoIndividual\AtendimentoIndividual;
|
|
use App\Models\AtencaoBasica\AtendimentoOdontologico\AtendimentoOdontologico;
|
|
use App\Models\AtencaoBasica\AtividadeColetiva\AtividadeColetiva;
|
|
use App\Models\AtencaoBasica\Avaliacao\Avaliacao;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliar;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\CadastroIndividual;
|
|
use App\Models\AtencaoBasica\Exportacao\Exportacao;
|
|
use App\Models\AtencaoBasica\Exportacao\ExportacaoArquivo;
|
|
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementar;
|
|
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\MarcadorConsumoAlimentar;
|
|
use App\Models\AtencaoBasica\Procedimento\Procedimento;
|
|
use App\Models\AtencaoBasica\VisitaDomiciliar\VisitaDomiciliar;
|
|
use App\Services\AtencaoBasica\Exportacao\FichaAtendimentoIndividualService;
|
|
use App\Services\AtencaoBasica\Exportacao\FichaAtendimentoOdontologicoService;
|
|
use App\Services\AtencaoBasica\Exportacao\FichaCadastroIndividualService;
|
|
use App\Services\AtencaoBasica\Exportacao\FichaConsumoAlimentarMenosSeisMesesService;
|
|
use App\Services\AtencaoBasica\Exportacao\FichaProcedimentoService;
|
|
use App\Services\Service;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
|
|
class ExportacaoService extends Service
|
|
{
|
|
const BASE_PATH = 'atencao-basica' . DIRECTORY_SEPARATOR . 'exportacao' . DIRECTORY_SEPARATOR;
|
|
|
|
public static function index($request)
|
|
{
|
|
switch ($request->listar) {
|
|
case 'fichas':
|
|
return self::getFichasExportadas($request);
|
|
}
|
|
}
|
|
|
|
public static function create()
|
|
{
|
|
return [
|
|
'arquivos_exportados' => self::getArquivosExportados(),
|
|
'form' => [
|
|
'competencias' => self::getCompetencias(),
|
|
'competencias_fichas_exportadas' => self::getCompetenciasFichasExportadas(),
|
|
'versaoIntegradorEsus' => self::getVersaoIntegradorEsus(),
|
|
],
|
|
'model' => [
|
|
'competencia' => null,
|
|
'competencia_ficha_exportada' => null,
|
|
],
|
|
];
|
|
}
|
|
|
|
public static function store($request)
|
|
{
|
|
if (self::hasExportacaoEmAndamento()) {
|
|
throw new ExportacaoEmAndamentoException();
|
|
}
|
|
|
|
self::validate($request);
|
|
|
|
if (self::hasFichasParaExportacao($request->competencia)) {
|
|
DB::transaction(function () use ($request) {
|
|
$exportacaoArquivo = ExportacaoArquivo::create([
|
|
'status_id' => Status::AGUARDANDO_PROCESSAMENTO,
|
|
'competencia' => $request->competencia,
|
|
]);
|
|
|
|
ExportacaoJob::dispatch(app('config')->get('database.default'), $exportacaoArquivo->id);
|
|
});
|
|
} else {
|
|
throw new NaoExisteFichaException();
|
|
}
|
|
}
|
|
|
|
public static function destroy($id)
|
|
{
|
|
DB::transaction(function () use ($id) {
|
|
DB::table('atencao_basica_exportacao')
|
|
->select(['id'])
|
|
->where('exportacao_arquivo_id', $id)
|
|
->get()
|
|
->each(function($query) {
|
|
AtendimentoIndividual::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
Procedimento::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
AtendimentoOdontologico::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_exportacao' => null,
|
|
]);
|
|
|
|
MarcadorConsumoAlimentar::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
AtendimentoDomiciliar::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_exportacao' => null,
|
|
]);
|
|
|
|
CadastroIndividual::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
CadastroDomiciliar::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
FichaComplementar::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
Avaliacao::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
AtividadeColetiva::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
VisitaDomiciliar::where('exportacao_id', $query->id)
|
|
->update([
|
|
'exportacao_id' => null,
|
|
'uuid_ficha' => null,
|
|
'usuario_exportacao_id' => null,
|
|
'data_hora_exportacao' => null,
|
|
]);
|
|
|
|
Exportacao::find($query->id)->delete();
|
|
});
|
|
|
|
$exportacaoArquivo = ExportacaoArquivo::find($id);
|
|
|
|
if (Storage::exists(self::BASE_PATH . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $exportacaoArquivo->arquivo)) {
|
|
Storage::delete(self::BASE_PATH . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $exportacaoArquivo->arquivo);
|
|
}
|
|
|
|
$exportacaoArquivo->delete();
|
|
});
|
|
}
|
|
|
|
public static function download($id)
|
|
{
|
|
$exportacao = ExportacaoArquivo::where('id', $id)
|
|
->whereNotNull('arquivo')
|
|
->whereNull('deleted_at')
|
|
->first();
|
|
|
|
if (!is_null($exportacao)) {
|
|
$cliente = app('config')->get('database.default');
|
|
$file = self::BASE_PATH . $cliente . DIRECTORY_SEPARATOR . $exportacao->arquivo;
|
|
|
|
if (Storage::disk('local')->exists($file)) {
|
|
return [
|
|
'arquivo' => Storage::path($file),
|
|
'nome' => $exportacao->arquivo,
|
|
];
|
|
} else {
|
|
throw new ArquivoException();
|
|
}
|
|
} else {
|
|
throw new ArquivoException();
|
|
}
|
|
}
|
|
|
|
public static function generate($cliente, $competencia, $exportacaoArquivoId, $usuarioId = null)
|
|
{
|
|
request()->merge(['mes_ano' => $competencia]);
|
|
|
|
$path = self::BASE_PATH . $cliente . DIRECTORY_SEPARATOR;
|
|
$fileName = self::getFileName($path, 'exportacaoEsus_' . $cliente . '_' . $competencia . '.zip');
|
|
|
|
self::createDirectory($cliente);
|
|
|
|
FichaAtendimentoIndividualService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaProcedimentoService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaAtendimentoOdontologicoService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaConsumoAlimentarMenosSeisMesesService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaConsumoAlimentarDeSeisAVinteTresMesesService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaConsumoAlimentarMaisDoisAnosService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaAtendimentoDomiciliarService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaCadastroIndividualService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaCadastroDomiciliarService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaComplementarService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaAvaliacaoElegibilidadeService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaAtividadeColetivaService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
FichaVisitaDomiciliarService::create($path, $fileName, $exportacaoArquivoId, $usuarioId);
|
|
|
|
return $fileName;
|
|
}
|
|
|
|
public static function gerarExportacoes($mesAnoInicial)
|
|
{
|
|
return [
|
|
'atendimento_individual' => FichaAtendimentoIndividualService::gerarExportacoes($mesAnoInicial),
|
|
'atendimento_domiciliar' => FichaAtendimentoDomiciliarService::gerarExportacoes($mesAnoInicial),
|
|
'atendimento_odontologico' => FichaAtendimentoOdontologicoService::gerarExportacoes($mesAnoInicial),
|
|
'atividade_coletiva' => FichaAtividadeColetivaService::gerarExportacoes($mesAnoInicial),
|
|
'avaliacao' => FichaAvaliacaoElegibilidadeService::gerarExportacoes($mesAnoInicial),
|
|
'procedimento' => FichaProcedimentoService::gerarExportacoes($mesAnoInicial),
|
|
'visita_domiciliar' => FichaVisitaDomiciliarService::gerarExportacoes($mesAnoInicial),
|
|
'ficha_complementar' => FichaComplementarService::gerarExportacoes($mesAnoInicial),
|
|
'cadastro_domiciliar' => FichaCadastroDomiciliarService::gerarExportacoes($mesAnoInicial),
|
|
'cadastro_individual' => FichaCadastroIndividualService::gerarExportacoes($mesAnoInicial),
|
|
'consumo_alimentar' => FichaConsumoAlimentarMenosSeisMesesService::gerarExportacoes($mesAnoInicial)
|
|
->concat(FichaConsumoAlimentarDeSeisAVinteTresMesesService::gerarExportacoes($mesAnoInicial))
|
|
->concat(FichaConsumoAlimentarMaisDoisAnosService::gerarExportacoes($mesAnoInicial)),
|
|
];
|
|
}
|
|
|
|
public static function elementVersao($dom, $dadoTransporteTransportXml)
|
|
{
|
|
$versaoData = self::getVersaoIntegradorEsus();
|
|
|
|
$versao = $dom->createElement('versao');
|
|
$versao->setAttribute('major', $versaoData['integrador_major']);
|
|
$versao->setAttribute('minor', $versaoData['integrador_minor']);
|
|
$versao->setAttribute('revision', $versaoData['integrador_revision']);
|
|
$dadoTransporteTransportXml->appendChild($versao);
|
|
|
|
return $versao;
|
|
}
|
|
|
|
public static function elementRemetente($dom, $dadoTransporteTransportXml)
|
|
{
|
|
$remetente = $dom->createElement('ns2:remetente');
|
|
$dadoTransporteTransportXml->appendChild($remetente);
|
|
|
|
$remetente->appendChild($dom->createElement('contraChave', 'ConectaSUS'));
|
|
$remetente->appendChild($dom->createElement('uuidInstalacao', '625de6ca-c5d6-48aa-85bb-da82cae0da55'));
|
|
$remetente->appendChild($dom->createElement('cpfOuCnpj', '82238529853')); // CPF Sidnei
|
|
$remetente->appendChild($dom->createElement('nomeOuRazaoSocial', 'RKM SISTEMAS LTDA ME'));
|
|
$remetente->appendChild($dom->createElement('fone', '19 3433.7704'));
|
|
$remetente->appendChild($dom->createElement('email', 'analise@rkmsistemas.com.br'));
|
|
|
|
return $remetente;
|
|
}
|
|
|
|
public static function elementOriginadora($dom, $dadoTransporteTransportXml)
|
|
{
|
|
$originadora = $dom->createElement('ns2:originadora');
|
|
$dadoTransporteTransportXml->appendChild($originadora);
|
|
|
|
$originadora->appendChild($dom->createElement('contraChave', 'ConectaSUS'));
|
|
$originadora->appendChild($dom->createElement('uuidInstalacao', '625de6ca-c5d6-48aa-85bb-da82cae0da55'));
|
|
$originadora->appendChild($dom->createElement('cpfOuCnpj', '82238529853')); // CPF Sidnei
|
|
$originadora->appendChild($dom->createElement('nomeOuRazaoSocial', 'RKM SISTEMAS LTDA ME'));
|
|
$originadora->appendChild($dom->createElement('fone', '19 3433.7704'));
|
|
$originadora->appendChild($dom->createElement('email', 'analise@rkmsistemas.com.br'));
|
|
|
|
return $originadora;
|
|
}
|
|
|
|
public static function getUuid($cnes)
|
|
{
|
|
$uuid = Str::uuid();
|
|
|
|
$uuidSemHifens = str_replace('-', '', $uuid);
|
|
$uuidConcatenado = $cnes . $uuidSemHifens;
|
|
$uuidFormatado = substr($uuidConcatenado, 0, 7) . '-' . substr($uuidConcatenado, 7, 4) . '-'
|
|
. substr($uuidConcatenado, 11, 4) . '-' . substr($uuidConcatenado, 15, 4) . '-'
|
|
. substr($uuidConcatenado, 19);
|
|
|
|
return $uuidFormatado;
|
|
}
|
|
|
|
public static function getFichas()
|
|
{
|
|
$fichas = [];
|
|
$profissional = [];
|
|
|
|
if (request()->funcionalidade == 'Atendimento individual') {
|
|
$table = 'atencao_basica_atendimento_individual';
|
|
$dataAtendimento = 'data_usuario_responsavel';
|
|
}
|
|
else if (request()->funcionalidade == 'Cadastro domiciliar e territorial') {
|
|
$table = 'atencao_basica_cadastro_domiciliar';
|
|
$dataAtendimento = 'data_usuario_responsavel';
|
|
}
|
|
else if (request()->funcionalidade == 'Ficha complementar') {
|
|
$table = 'atencao_basica_ficha_complementar';
|
|
$dataAtendimento = 'data_atendimento';
|
|
}
|
|
else if (request()->funcionalidade == 'Avaliação de elegibilidade e admissão') {
|
|
$table = 'atencao_basica_avaliacao';
|
|
$dataAtendimento = 'data';
|
|
}
|
|
else if (request()->funcionalidade == 'Cadastro individual') {
|
|
$table = 'atencao_basica_cadastro_individual';
|
|
$dataAtendimento = 'data_usuario_responsavel';
|
|
}
|
|
else if (request()->funcionalidade == 'Visita domiciliar') {
|
|
$table = 'atencao_basica_visita_domiciliar';
|
|
$dataAtendimento = 'data_usuario_responsavel';
|
|
}
|
|
else if (request()->funcionalidade == 'Atividade coletiva') {
|
|
$table = 'atencao_basica_atividade_coletiva';
|
|
$dataAtendimento = 'data_cadastro';
|
|
}
|
|
else if (request()->funcionalidade == 'Marcador de consumo alimentar') {
|
|
$table = 'atencao_basica_consumo_alimentar';
|
|
$dataAtendimento = 'data_atendimento';
|
|
}
|
|
else if (request()->funcionalidade == 'Atendimento domiciliar') {
|
|
$table = 'atencao_basica_atendimento_domiciliar';
|
|
$dataAtendimento = 'data';
|
|
}
|
|
else if (request()->funcionalidade == 'Atendimento odontológico') {
|
|
$table = 'atencao_basica_atendimento_odontologico';
|
|
$dataAtendimento = 'data_atendimento';
|
|
}
|
|
|
|
if (request()->funcionalidade == 'Ficha de vacinação') {
|
|
$vacinacao = self::getFichasVacinacao();
|
|
$fichas = $vacinacao['fichas'];
|
|
$profissional = $vacinacao['profissional'];
|
|
}
|
|
else if (request()->funcionalidade == 'Atendimento domiciliar') {
|
|
$atendimento = self::getFichasAtendimentoDomiciliar();
|
|
$fichas = $atendimento['fichas'];
|
|
$profissional = $atendimento['profissional'];
|
|
}
|
|
else if (request()->funcionalidade == 'Procedimentos') {
|
|
$procedimento = self::getFichasProcedimento();
|
|
$fichas = $procedimento['fichas'];
|
|
$profissional = $procedimento['profissional'];
|
|
}
|
|
else if (request()->funcionalidade == 'Atividade coletiva') {
|
|
$atividade = self::getFichasAtividadeColetiva();
|
|
$fichas = $atividade['fichas'];
|
|
$profissional = $atividade['profissional'];
|
|
}
|
|
else if (request()->funcionalidade == 'Cadastro domiciliar e territorial') {
|
|
$atividade = self::getFichasCadastroDomiciliar();
|
|
$fichas = $atividade['fichas'];
|
|
$profissional = $atividade['profissional'];
|
|
}
|
|
else {
|
|
$fichas = DB::table($table)
|
|
->select(
|
|
DB::raw('DATE_FORMAT(' . $table . '.' . $dataAtendimento .', "%d/%m/%Y") as data'),
|
|
'cidadao.nome as paciente_nome',
|
|
'cidadao.data_nascimento as paciente_data_nascimento',
|
|
DB::raw('LPAD(paciente.prontuario,7,0) as paciente_prontuario'),
|
|
'cidadao.nome_social'
|
|
)
|
|
->join(
|
|
'cadastro_paciente as paciente',
|
|
'paciente.id',
|
|
$table . '.paciente_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao as cidadao',
|
|
'cidadao.id',
|
|
'paciente.cidadao_id'
|
|
)
|
|
->where('uuid_ficha', request()->uuid)
|
|
->get();
|
|
|
|
$profissional = self::getProfissional($table);
|
|
}
|
|
|
|
return [
|
|
'fichas' => $fichas,
|
|
'profissional' => $profissional,
|
|
];
|
|
}
|
|
|
|
private static function getCompetencias()
|
|
{
|
|
$dataAtual = Carbon::now()->startOfMonth();
|
|
$dataInicial = $dataAtual->copy()->subMonths(6);
|
|
$competencias = [];
|
|
|
|
while ($dataAtual >= $dataInicial) {
|
|
$competencias[] = [
|
|
'value' => $dataAtual->format('mY'),
|
|
'text' => ucfirst($dataAtual->translatedFormat('F/Y')),
|
|
];
|
|
|
|
$dataAtual->subMonth();
|
|
}
|
|
|
|
return $competencias;
|
|
}
|
|
|
|
private static function getCompetenciasFichasExportadas()
|
|
{
|
|
return DB::table('atencao_basica_exportacao_arquivo')
|
|
->select('competencia')
|
|
->whereNull('atencao_basica_exportacao_arquivo.deleted_at')
|
|
->whereRaw("STR_TO_DATE(atencao_basica_exportacao_arquivo.competencia, '%m%Y') >= ?", [Carbon::now()->subYear()->startOfMonth()->toDateString()])
|
|
->distinct()
|
|
->get()
|
|
->map(function ($item) {
|
|
$competencia = Carbon::createFromFormat('mY', $item->competencia);
|
|
|
|
return [
|
|
'value' => $item->competencia,
|
|
'text' => ucfirst($competencia->translatedFormat('F/Y')),
|
|
];
|
|
})
|
|
->sortByDesc(function ($item) {
|
|
return Carbon::createFromFormat('mY', $item['value']);
|
|
})
|
|
->values();
|
|
}
|
|
|
|
private static function getVersaoIntegradorEsus()
|
|
{
|
|
$versao = AtencaoBasicaVersaoIntegradorEsus::latest()->first();
|
|
|
|
return [
|
|
'integrador_major' => $versao->integrador_major,
|
|
'integrador_minor' => $versao->integrador_minor,
|
|
'integrador_revision' => $versao->integrador_revision,
|
|
'centralizador_major' => $versao->centralizador_major,
|
|
'centralizador_minor' => $versao->centralizador_minor,
|
|
'centralizador_revision' =>$versao->centralizador_revision,
|
|
];
|
|
}
|
|
|
|
private static function getArquivosExportados()
|
|
{
|
|
return DB::table('atencao_basica_exportacao_arquivo')
|
|
->select(
|
|
'atencao_basica_exportacao_arquivo.id',
|
|
DB::raw("DATE_FORMAT(atencao_basica_exportacao_arquivo.created_at, '%d/%m/%Y \à\s %H:%i') AS data_hora"),
|
|
'atencao_basica_exportacao_arquivo.competencia',
|
|
'atencao_basica_exportacao_arquivo.arquivo',
|
|
'cadastro_cidadao.nome AS usuario_nome',
|
|
'atencao_basica_exportacao_status.id AS status_id',
|
|
'atencao_basica_exportacao_status.nome AS status_nome',
|
|
)
|
|
->join('cadastro_lotacao', 'cadastro_lotacao.id', 'atencao_basica_exportacao_arquivo.created_lotacao_id')
|
|
->join('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
|
|
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
|
->join('atencao_basica_exportacao_status', 'atencao_basica_exportacao_status.id', 'atencao_basica_exportacao_arquivo.status_id')
|
|
->whereNull('atencao_basica_exportacao_arquivo.deleted_at')
|
|
->whereRaw("STR_TO_DATE(atencao_basica_exportacao_arquivo.competencia, '%m%Y') >= ?", [Carbon::now()->subYear()->startOfMonth()->toDateString()])
|
|
->orderByDesc('atencao_basica_exportacao_arquivo.created_at')
|
|
->get();
|
|
}
|
|
|
|
private static function hasExportacaoEmAndamento()
|
|
{
|
|
return ExportacaoArquivo::whereIn('status_id', [
|
|
Status::AGUARDANDO_PROCESSAMENTO,
|
|
Status::EM_PROCESSAMENTO,
|
|
])->exists();
|
|
}
|
|
|
|
private static function hasFichasParaExportacao($competencia)
|
|
{
|
|
$atendimentoIndividual = DB::table('atencao_basica_atendimento_individual')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_usuario_responsavel', substr($competencia, 2))
|
|
->whereMonth('data_usuario_responsavel', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($atendimentoIndividual) {
|
|
return $atendimentoIndividual;
|
|
}
|
|
|
|
$procedimento = DB::table('atencao_basica_procedimento')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_usuario_responsavel', substr($competencia, 2))
|
|
->whereMonth('data_usuario_responsavel', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($procedimento) {
|
|
return $procedimento;
|
|
}
|
|
|
|
$atendimentoOdontologico = DB::table('atencao_basica_atendimento_odontologico')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_atendimento', substr($competencia, 2))
|
|
->whereMonth('data_atendimento', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($atendimentoOdontologico) {
|
|
return $atendimentoOdontologico;
|
|
}
|
|
|
|
$marcadorConsumoAlimentar = DB::table('atencao_basica_consumo_alimentar')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_atendimento', substr($competencia, 2))
|
|
->whereMonth('data_atendimento', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($marcadorConsumoAlimentar) {
|
|
return $marcadorConsumoAlimentar;
|
|
}
|
|
|
|
$atendimentoDomiciliar = DB::table('atencao_basica_atendimento_domiciliar')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data', substr($competencia, 2))
|
|
->whereMonth('data', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($atendimentoDomiciliar) {
|
|
return $atendimentoDomiciliar;
|
|
}
|
|
|
|
$cadastroIndividual = DB::table('atencao_basica_cadastro_individual')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_usuario_responsavel', substr($competencia, 2))
|
|
->whereMonth('data_usuario_responsavel', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($cadastroIndividual) {
|
|
return $cadastroIndividual;
|
|
}
|
|
|
|
$cadastroDomiciliar = DB::table('atencao_basica_cadastro_domiciliar')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_usuario_responsavel', substr($competencia, 2))
|
|
->whereMonth('data_usuario_responsavel', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($cadastroDomiciliar) {
|
|
return $cadastroDomiciliar;
|
|
}
|
|
|
|
$fichaComplementar = DB::table('atencao_basica_ficha_complementar')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_atendimento', substr($competencia, 2))
|
|
->whereMonth('data_atendimento', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($fichaComplementar) {
|
|
return $fichaComplementar;
|
|
}
|
|
|
|
$avaliacao = DB::table('atencao_basica_avaliacao')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data', substr($competencia, 2))
|
|
->whereMonth('data', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($avaliacao) {
|
|
return $avaliacao;
|
|
}
|
|
|
|
$atividadeColetiva = DB::table('atencao_basica_atividade_coletiva')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_usuario_responsavel', substr($competencia, 2))
|
|
->whereMonth('data_usuario_responsavel', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($atividadeColetiva) {
|
|
return $atividadeColetiva;
|
|
}
|
|
|
|
$visitaDomiciliar = DB::table('atencao_basica_visita_domiciliar')
|
|
->whereNull('exportacao_id')
|
|
->whereYear('data_usuario_responsavel', substr($competencia, 2))
|
|
->whereMonth('data_usuario_responsavel', substr($competencia, 0, 2))
|
|
->exists();
|
|
|
|
if ($visitaDomiciliar) {
|
|
return $visitaDomiciliar;
|
|
}
|
|
}
|
|
|
|
private static function getFichasExportadas($request)
|
|
{
|
|
return DB::table('atencao_basica_exportacao')
|
|
->select(
|
|
'atencao_basica_exportacao.uuid AS uuid',
|
|
'cadastro_cidadao.nome as usuario',
|
|
DB::raw("DATE_FORMAT(atencao_basica_exportacao.created_at, '%d/%m/%Y') AS data"),
|
|
DB::raw("DATE_FORMAT(atencao_basica_exportacao.created_at, '%H:%i') AS horario"),
|
|
DB::raw("
|
|
DATE_FORMAT(
|
|
CASE
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_atendimento_domiciliar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data
|
|
FROM atencao_basica_atendimento_domiciliar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_atendimento_individual
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_usuario_responsavel
|
|
FROM atencao_basica_atendimento_individual
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_usuario_responsavel ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_atendimento_odontologico
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_atendimento
|
|
FROM atencao_basica_atendimento_odontologico
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_atendimento ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_atividade_coletiva
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_usuario_responsavel
|
|
FROM atencao_basica_atividade_coletiva
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_usuario_responsavel ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_avaliacao
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data
|
|
FROM atencao_basica_avaliacao
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_cadastro_domiciliar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_usuario_responsavel
|
|
FROM atencao_basica_cadastro_domiciliar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_usuario_responsavel ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_cadastro_individual
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_usuario_responsavel
|
|
FROM atencao_basica_cadastro_individual
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_usuario_responsavel ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_ficha_complementar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_atendimento
|
|
FROM atencao_basica_ficha_complementar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_atendimento ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_ficha_vacinacao
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_atendimento
|
|
FROM atencao_basica_ficha_vacinacao
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_atendimento ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_consumo_alimentar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_atendimento
|
|
FROM atencao_basica_consumo_alimentar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_atendimento ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_procedimento
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_usuario_responsavel
|
|
FROM atencao_basica_procedimento
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_usuario_responsavel ASC LIMIT 1)
|
|
WHEN EXISTS (SELECT 1 FROM atencao_basica_visita_domiciliar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id)
|
|
THEN (SELECT data_usuario_responsavel
|
|
FROM atencao_basica_visita_domiciliar
|
|
WHERE exportacao_id = atencao_basica_exportacao.id
|
|
ORDER BY data_usuario_responsavel ASC LIMIT 1)
|
|
ELSE atencao_basica_exportacao.created_at
|
|
END,
|
|
'%d/%m/%Y') AS data_ficha
|
|
")
|
|
)
|
|
->addSelect(self::getFuncionalidade())
|
|
->addSelect(self::getQuantidade())
|
|
->leftJoin('cadastro_lotacao', 'cadastro_lotacao.id', 'atencao_basica_exportacao.created_lotacao_id')
|
|
->leftJoin('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
|
|
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_atendimento_domiciliar')
|
|
->whereColumn('atencao_basica_atendimento_domiciliar.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_atendimento_domiciliar.data', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_atendimento_domiciliar.data', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_atendimento_individual')
|
|
->whereColumn('atencao_basica_atendimento_individual.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_atendimento_individual.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_atendimento_individual.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_atendimento_odontologico')
|
|
->whereColumn('atencao_basica_atendimento_odontologico.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_atendimento_odontologico.data_atendimento', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_atendimento_odontologico.data_atendimento', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_atividade_coletiva')
|
|
->whereColumn('atencao_basica_atividade_coletiva.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_atividade_coletiva.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_atividade_coletiva.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_avaliacao')
|
|
->whereColumn('atencao_basica_avaliacao.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_avaliacao.data', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_avaliacao.data', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_cadastro_domiciliar')
|
|
->whereColumn('atencao_basica_cadastro_domiciliar.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_cadastro_domiciliar.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_cadastro_domiciliar.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_cadastro_individual')
|
|
->whereColumn('atencao_basica_cadastro_individual.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_cadastro_individual.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_cadastro_individual.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_ficha_complementar')
|
|
->whereColumn('atencao_basica_ficha_complementar.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_ficha_complementar.data_atendimento', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_ficha_complementar.data_atendimento', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_ficha_vacinacao')
|
|
->whereColumn('atencao_basica_ficha_vacinacao.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_ficha_vacinacao.data_atendimento', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_ficha_vacinacao.data_atendimento', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_consumo_alimentar')
|
|
->whereColumn('atencao_basica_consumo_alimentar.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_consumo_alimentar.data_atendimento', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_consumo_alimentar.data_atendimento', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_procedimento')
|
|
->whereColumn('atencao_basica_procedimento.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_procedimento.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_procedimento.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->select(DB::raw(1))
|
|
->from('atencao_basica_visita_domiciliar')
|
|
->whereColumn('atencao_basica_visita_domiciliar.exportacao_id', 'atencao_basica_exportacao.id')
|
|
->whereYear('atencao_basica_visita_domiciliar.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 2))
|
|
->whereMonth('atencao_basica_visita_domiciliar.data_usuario_responsavel', substr($request->competencia_ficha_exportada, 0, 2))
|
|
)
|
|
)
|
|
->get();
|
|
}
|
|
|
|
private static function getProfissional($table)
|
|
{
|
|
return DB::table($table)
|
|
->select(
|
|
'cadastro_cidadao.nome as nome',
|
|
DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia) AS unidade"),
|
|
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS local_atendimento'),
|
|
DB::raw("CONCAT(
|
|
'INE: ', atencao_basica_parametrizacao_area.numero_ine,
|
|
CASE
|
|
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL
|
|
THEN CONCAT(' - Área: ', atencao_basica_parametrizacao_area.descricao)
|
|
ELSE ''
|
|
END,
|
|
' - Microárea: ', atencao_basica_parametrizacao_microarea.descricao
|
|
) AS equipe_descricao")
|
|
)
|
|
->join(
|
|
'atencao_basica_parametrizacao_equipe',
|
|
'atencao_basica_parametrizacao_equipe.id',
|
|
$table . '.equipe_id'
|
|
)
|
|
->join(
|
|
'cadastro_infraestrutura',
|
|
'cadastro_infraestrutura.id',
|
|
'atencao_basica_parametrizacao_equipe.infraestrutura_id'
|
|
)
|
|
->join(
|
|
'cadastro_unidade',
|
|
'cadastro_unidade.id',
|
|
'atencao_basica_parametrizacao_equipe.unidade_id'
|
|
)
|
|
->join(
|
|
'cadastro_usuario',
|
|
'cadastro_usuario.id',
|
|
$table . '.usuario_id'
|
|
)
|
|
->join(
|
|
'cadastro_cidadao',
|
|
'cadastro_cidadao.id',
|
|
'cadastro_usuario.cidadao_id'
|
|
)
|
|
->join(
|
|
'atencao_basica_parametrizacao_area',
|
|
'atencao_basica_parametrizacao_area.id',
|
|
'atencao_basica_parametrizacao_equipe.area_id'
|
|
)
|
|
->join(
|
|
'atencao_basica_parametrizacao_microarea',
|
|
'atencao_basica_parametrizacao_microarea.id',
|
|
'atencao_basica_parametrizacao_equipe.microarea_id'
|
|
)
|
|
->where('uuid_ficha', request()->uuid)
|
|
->first();
|
|
}
|
|
|
|
private static function getFichasVacinacao()
|
|
{
|
|
$fichas = DB::table('atencao_basica_vacinacao_paciente')
|
|
->select(
|
|
DB::raw('DATE_FORMAT(vacinacao.data_atendimento, "%d/%m/%Y") as data'),
|
|
'cidadao.nome as paciente_nome',
|
|
'cidadao.data_nascimento as paciente_data_nascimento',
|
|
DB::raw('LPAD(paciente.prontuario,7,0) as paciente_prontuario'),
|
|
'cidadao.nome_social',
|
|
)
|
|
->join('cadastro_paciente as paciente', 'paciente.id', 'atencao_basica_vacinacao_paciente.paciente_id')
|
|
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('atencao_basica_ficha_vacinacao as vacinacao', 'vacinacao.id', 'atencao_basica_vacinacao_paciente.vacinacao_id')
|
|
->whereExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('atencao_basica_vacinacao_paciente_item')
|
|
->whereColumn('vacinacao_paciente_id', 'atencao_basica_vacinacao_paciente.id');
|
|
})
|
|
->where('uuid_ficha', request()->uuid)
|
|
->get();
|
|
|
|
$profissional = self::getProfissional('atencao_basica_ficha_vacinacao');
|
|
|
|
return [
|
|
'fichas' => $fichas,
|
|
'profissional' => $profissional,
|
|
];
|
|
}
|
|
|
|
private static function getFichasAtendimentoDomiciliar()
|
|
{
|
|
$fichas = DB::table('atencao_basica_atendimento_domiciliar_atendimento')
|
|
->select(
|
|
DB::raw('DATE_FORMAT(atencao_basica_atendimento_domiciliar.data, "%d/%m/%Y") as data'),
|
|
'cidadao.nome as paciente_nome',
|
|
'cidadao.data_nascimento as paciente_data_nascimento',
|
|
DB::raw('LPAD(paciente.prontuario,7,0) as paciente_prontuario'),
|
|
'cidadao.nome_social',
|
|
)
|
|
->join('cadastro_paciente as paciente', 'paciente.id', 'atencao_basica_atendimento_domiciliar_atendimento.paciente_id')
|
|
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('atencao_basica_atendimento_domiciliar', 'atencao_basica_atendimento_domiciliar.id', 'atencao_basica_atendimento_domiciliar_atendimento.atendimento_domiciliar_id')
|
|
->where('uuid_ficha', request()->uuid)
|
|
->get();
|
|
|
|
$profissional = self::getProfissional('atencao_basica_atendimento_domiciliar');
|
|
|
|
return [
|
|
'fichas' => $fichas,
|
|
'profissional' => $profissional,
|
|
];
|
|
}
|
|
|
|
private static function getFichasProcedimento()
|
|
{
|
|
$fichas = DB::table('atencao_basica_procedimento_atendimento')
|
|
->select(
|
|
DB::raw('DATE_FORMAT(atencao_basica_procedimento.data_usuario_responsavel, "%d/%m/%Y") as data'),
|
|
'cidadao.nome as paciente_nome',
|
|
'cidadao.data_nascimento as paciente_data_nascimento',
|
|
DB::raw('LPAD(paciente.prontuario,7,0) as paciente_prontuario'),
|
|
'cidadao.nome_social',
|
|
)
|
|
->join('cadastro_paciente as paciente', 'paciente.id', 'atencao_basica_procedimento_atendimento.paciente_id')
|
|
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('atencao_basica_procedimento', 'atencao_basica_procedimento.id', 'atencao_basica_procedimento_atendimento.procedimento_id')
|
|
->where('uuid_ficha', request()->uuid)
|
|
->get();
|
|
|
|
$profissional = self::getProfissional('atencao_basica_procedimento');
|
|
|
|
return [
|
|
'fichas' => $fichas,
|
|
'profissional' => $profissional,
|
|
];
|
|
}
|
|
|
|
private static function getFichasAtividadeColetiva()
|
|
{
|
|
$fichas = DB::table('atencao_basica_atividade_coletiva')
|
|
->select([
|
|
DB::raw('DATE_FORMAT(atencao_basica_atividade_coletiva.data_cadastro, "%d/%m/%Y") as data'),
|
|
'atencao_basica_atividade_coletiva.total_participantes',
|
|
'atividade_tipo.descricao AS atividade_tipo',
|
|
DB::raw('CASE WHEN cadastro_cidadao.nome_social IS NOT NULL THEN cadastro_cidadao.nome_social ELSE cadastro_cidadao.nome END AS profissional_responsavel'),
|
|
DB::raw('CASE WHEN inep IS NOT NULL THEN inep WHEN local_atividade IS NOT NULL THEN local_atividade ELSE cnes END AS local_atividade'),
|
|
DB::raw('GROUP_CONCAT(saude_temas.descricao SEPARATOR ", ") AS saude_temas'),
|
|
])
|
|
->leftJoin('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_atividade_coletiva.usuario_id')
|
|
->leftJoin('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
|
->leftJoin('atencao_basica_cadastro_atividade_tipo AS atividade_tipo', 'atividade_tipo.id', 'atencao_basica_atividade_coletiva.atividade_tipo_id')
|
|
->leftJoin('atencao_basica_atividade_coletiva_saude_tema AS tema', 'tema.atividade_coletiva_id', 'atencao_basica_atividade_coletiva.id')
|
|
->leftJoin('atencao_basica_cadastro_saude_tema AS saude_temas', 'saude_temas.id', 'tema.saude_tema_id')
|
|
->where('uuid_ficha', request()->uuid)
|
|
->get();
|
|
|
|
$profissional = self::getProfissional('atencao_basica_atividade_coletiva');
|
|
|
|
return [
|
|
'fichas' => $fichas,
|
|
'profissional' => $profissional,
|
|
];
|
|
}
|
|
|
|
private static function getFichasCadastroDomiciliar()
|
|
{
|
|
$fichas = DB::table('atencao_basica_cadastro_domiciliar')
|
|
->select([
|
|
DB::raw('DATE_FORMAT(atencao_basica_cadastro_domiciliar.data_usuario_responsavel, "%d/%m/%Y") as data'),
|
|
'cadastro_logradouro.nome AS logradouro_nome',
|
|
'cadastro_logradouro_tipo.descricao AS logradouro_tipo_descricao',
|
|
'cadastro_bairro.nome AS bairro',
|
|
DB::raw("COALESCE(cadastro_endereco.complemento, '-') AS endereco_complemento"),
|
|
DB::raw("COALESCE(cadastro_endereco.numero, '-') AS endereco_numero"),
|
|
DB::raw("COALESCE(cadastro_loteamento.nome, '-') AS loteamento_nome"),
|
|
DB::raw("CONCAT(
|
|
SUBSTR(cadastro_logradouro.cep,1,2),
|
|
'.',
|
|
SUBSTR(cadastro_logradouro.cep,3,3),
|
|
'-',
|
|
SUBSTR(cadastro_logradouro.cep,6,3)) AS logradouro_cep"
|
|
),
|
|
])
|
|
->join('cadastro_domicilio', 'cadastro_domicilio.id', 'atencao_basica_cadastro_domiciliar.domicilio_id')
|
|
->join('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
|
|
->join('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id')
|
|
->join('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id')
|
|
->join('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id')
|
|
->leftJoin('cadastro_loteamento', 'cadastro_loteamento.id', 'cadastro_endereco.loteamento_id')
|
|
->where('uuid_ficha', request()->uuid)
|
|
->get();
|
|
|
|
$profissional = self::getProfissional('atencao_basica_cadastro_domiciliar');
|
|
|
|
return [
|
|
'fichas' => $fichas,
|
|
'profissional' => $profissional,
|
|
];
|
|
}
|
|
|
|
private static function getQuantidade()
|
|
{
|
|
return DB::raw("
|
|
CASE
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_domiciliar
|
|
WHERE atencao_basica_atendimento_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_atendimento_domiciliar_atendimento
|
|
INNER JOIN atencao_basica_atendimento_domiciliar
|
|
ON atencao_basica_atendimento_domiciliar.id = atencao_basica_atendimento_domiciliar_atendimento.atendimento_domiciliar_id
|
|
WHERE atencao_basica_atendimento_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual
|
|
WHERE atencao_basica_atendimento_individual.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_atendimento_individual
|
|
WHERE atencao_basica_atendimento_individual.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_odontologico
|
|
WHERE atencao_basica_atendimento_odontologico.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_atendimento_odontologico
|
|
WHERE atencao_basica_atendimento_odontologico.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_atividade_coletiva
|
|
WHERE atencao_basica_atividade_coletiva.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_atividade_coletiva
|
|
WHERE atencao_basica_atividade_coletiva.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_avaliacao
|
|
WHERE atencao_basica_avaliacao.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_avaliacao
|
|
WHERE atencao_basica_avaliacao.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_cadastro_domiciliar
|
|
WHERE atencao_basica_cadastro_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_cadastro_domiciliar
|
|
WHERE atencao_basica_cadastro_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_cadastro_individual
|
|
WHERE atencao_basica_cadastro_individual.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_cadastro_individual
|
|
WHERE atencao_basica_cadastro_individual.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_ficha_complementar
|
|
WHERE atencao_basica_ficha_complementar.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_ficha_complementar
|
|
WHERE atencao_basica_ficha_complementar.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_ficha_vacinacao
|
|
WHERE atencao_basica_ficha_vacinacao.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_vacinacao_paciente
|
|
INNER JOIN atencao_basica_ficha_vacinacao
|
|
ON atencao_basica_ficha_vacinacao.id = atencao_basica_vacinacao_paciente.vacinacao_id
|
|
INNER JOIN atencao_basica_vacinacao_paciente_item
|
|
ON atencao_basica_vacinacao_paciente_item.vacinacao_paciente_id = atencao_basica_vacinacao_paciente.id
|
|
WHERE atencao_basica_ficha_vacinacao.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_consumo_alimentar
|
|
WHERE atencao_basica_consumo_alimentar.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_consumo_alimentar
|
|
WHERE atencao_basica_consumo_alimentar.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento
|
|
WHERE atencao_basica_procedimento.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_procedimento_atendimento
|
|
INNER JOIN atencao_basica_procedimento
|
|
ON atencao_basica_procedimento.id = atencao_basica_procedimento_atendimento.procedimento_id
|
|
WHERE atencao_basica_procedimento.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM atencao_basica_visita_domiciliar
|
|
WHERE atencao_basica_visita_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
) THEN (
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_visita_domiciliar
|
|
WHERE atencao_basica_visita_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
)
|
|
ELSE 0
|
|
END AS quantidade
|
|
");
|
|
}
|
|
|
|
private static function getFuncionalidade()
|
|
{
|
|
return DB::raw("
|
|
CASE
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_atendimento_domiciliar
|
|
WHERE atencao_basica_atendimento_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Atendimento domiciliar'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_atendimento_individual
|
|
WHERE atencao_basica_atendimento_individual.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Atendimento individual'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_atendimento_odontologico
|
|
WHERE atencao_basica_atendimento_odontologico.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Atendimento odontológico'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_atividade_coletiva
|
|
WHERE atencao_basica_atividade_coletiva.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Atividade coletiva'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_avaliacao
|
|
WHERE atencao_basica_avaliacao.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Avaliação de elegibilidade e admissão'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_cadastro_domiciliar
|
|
WHERE atencao_basica_cadastro_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Cadastro domiciliar e territorial'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_cadastro_individual
|
|
WHERE atencao_basica_cadastro_individual.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Cadastro individual'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_ficha_complementar
|
|
WHERE atencao_basica_ficha_complementar.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Ficha complementar'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_ficha_vacinacao
|
|
WHERE atencao_basica_ficha_vacinacao.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Ficha de vacinação'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_consumo_alimentar
|
|
WHERE atencao_basica_consumo_alimentar.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Marcador de consumo alimentar'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_procedimento
|
|
WHERE atencao_basica_procedimento.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Procedimentos'
|
|
WHEN (
|
|
SELECT 1 FROM atencao_basica_visita_domiciliar
|
|
WHERE atencao_basica_visita_domiciliar.exportacao_id = atencao_basica_exportacao.id
|
|
LIMIT 1
|
|
) IS NOT NULL THEN 'Visita domiciliar'
|
|
ELSE '-'
|
|
END AS funcionalidade
|
|
");
|
|
}
|
|
|
|
private static function getFileName($path, $fileName, $counter = 0)
|
|
{
|
|
$sufixo = ($counter > 0) ? '_' . $counter : '';
|
|
|
|
$newFileName = pathinfo($fileName, PATHINFO_FILENAME) . $sufixo . '.' . pathinfo($fileName, PATHINFO_EXTENSION);
|
|
$newPath = Storage::path($path . $newFileName);
|
|
|
|
if (File::exists($newPath)) {
|
|
return self::getFileName($path, $fileName, $counter + 1);
|
|
}
|
|
|
|
return $newFileName;
|
|
}
|
|
|
|
private static function createDirectory($cliente)
|
|
{
|
|
$path = Storage::path(self::BASE_PATH . $cliente);
|
|
|
|
if (file_exists($path) === false) {
|
|
File::makeDirectory($path, 0775, true, true);
|
|
chmod($path, 0775);
|
|
}
|
|
}
|
|
|
|
private static function validate($request)
|
|
{
|
|
$request->validate([
|
|
'competencia' => [
|
|
'required',
|
|
'string',
|
|
],
|
|
]);
|
|
}
|
|
}
|