This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Ambulatorio\AgendamentoService;
|
||||
use App\Utils\Exports\PdfCupom;
|
||||
|
||||
class AgendamentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'AGENDAMENTO';
|
||||
private const TEMPLATE = 'ambulatorio.agendamento';
|
||||
|
||||
public static function getTemplate($id)
|
||||
{
|
||||
return AgendamentoService::getPrintData($id);
|
||||
}
|
||||
|
||||
public function __invoke($id)
|
||||
{
|
||||
return PdfCupom::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AgendamentoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class AgendamentoDemandaEspontaneaController extends Controller
|
||||
{
|
||||
private const TITLE = 'AGENDAMENTOS E DEMANDAS';
|
||||
private const TEMPLATE = 'ambulatorio.agendamento-demanda-espontanea';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$params = (object) request()->all();
|
||||
|
||||
$paciente = Paciente::findOrFail($params->paciente_id);
|
||||
$municipioResidencia = $paciente->cidadao->domicilio->endereco->logradouro->municipio ?? null;
|
||||
|
||||
$agendamentosDemandas = AgendamentoService::getAgendamentosDemandasEspontaneas($params);
|
||||
$itens = $agendamentosDemandas['itens'];
|
||||
|
||||
$itens->each(function ($item) {
|
||||
$item->data = Carbon::create($item->data)->format('d/m/Y');
|
||||
});
|
||||
|
||||
return [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'data_nascimento' => is_null($paciente->cidadao->data_nascimento)
|
||||
? null
|
||||
: (new Carbon($paciente->cidadao->data_nascimento))->format('d/m/Y'),
|
||||
'idade' => $paciente->cidadao->idade_formatada,
|
||||
'nome_mae' => $paciente->cidadao->nome_mae,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cpf' => MaskUtil::getCpfMasked($paciente->cidadao->cpf),
|
||||
'cns' => MaskUtil::getCnsMasked($paciente->cidadao->cns),
|
||||
'municipio_uf' => is_null($municipioResidencia)
|
||||
? null
|
||||
: "{$municipioResidencia->nome} / {$municipioResidencia->estado->uf}",
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
||||
'classificacao' => $paciente->classificacao->descricao ?? null,
|
||||
'validade_fim' => is_null($paciente->validade_fim)
|
||||
? 'INDETERMINADO'
|
||||
: (new Carbon($paciente->validade_fim))->format('d/m/Y')
|
||||
],
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
'origem' => request()->origem === 'consulta-agendada'
|
||||
? 'Consulta agendada'
|
||||
: (request()->origem === 'demanda-espontanea' ? 'Demanda espontânea' : 'Todas'),
|
||||
'colunas' => request()->columns,
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $agendamentosDemandas['totalizadores'],
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Ambulatorio\AgendamentoService;
|
||||
use App\Utils\Exports\PdfCupom;
|
||||
|
||||
class AgendamentoExternoController extends Controller
|
||||
{
|
||||
private const TITLE = 'AGENDAMENTO';
|
||||
private const TEMPLATE = 'ambulatorio.agendamento';
|
||||
|
||||
public static function getTemplate($id)
|
||||
{
|
||||
return AgendamentoService::getPrintDataExterno($id);
|
||||
}
|
||||
|
||||
public function __invoke($id)
|
||||
{
|
||||
return PdfCupom::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Enums\Geral\DocumentoTipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Geral\DocumentoTipo as GeralDocumentoTipo;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\NumericUtil;
|
||||
|
||||
class AtestadoController extends Controller
|
||||
{
|
||||
private const TITLE = 'ATESTADO';
|
||||
private const TEMPLATE = 'ambulatorio.atestado';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$atestados = $this->getAtestadosNaoSalvos($atendimentoId);
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::ATESTADO_MEDICO);
|
||||
} else {
|
||||
|
||||
$atestados = $this->getAtestados($atendimentoId);
|
||||
}
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('atestados'));
|
||||
}
|
||||
|
||||
private function getAtestadosNaoSalvos($pacienteId)
|
||||
{
|
||||
$paciente = Paciente::findOrFail($pacienteId);
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
$unidade = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura->unidade;
|
||||
|
||||
$atestados[] = [
|
||||
'modelo_id' => (int) request()->modelo_id,
|
||||
'descricao' => request()->descricao,
|
||||
'is_atestado_acompanhante' => DataUtil::getBooleanValueFromStringBoolean(request()->is_atestado_acompanhante),
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
],
|
||||
'nome_acompanhante' => request()->nome,
|
||||
'documento' => [
|
||||
'tipo' => GeralDocumentoTipo::find(request()->documento_tipo_id)->nome ?? null,
|
||||
'numero' => request()->documento_tipo_id ? (request()->documento_tipo_id == DocumentoTipo::CPF ? request()->cpf : request()->cns) : null,
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $unidade->nome_fantasia,
|
||||
],
|
||||
'data' => request()->data,
|
||||
'horario' => request()->horario,
|
||||
'horario_inicial' => request()->horario_inicial,
|
||||
'quantidade_horas' => request()->quantidade_horas,
|
||||
'cid' => request()->cid['codigo'] ?? null,
|
||||
'dias' => request()->dias,
|
||||
'dias_por_extenso' => NumericUtil::getPorExtenso((int) request()->dias),
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $lotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? (
|
||||
$lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
|
||||
$data = [
|
||||
'atestados' => $atestados,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function getAtestados($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$atestados = [];
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->get()
|
||||
->each(function($soap) use (&$atestados, $paciente) {
|
||||
$soap->atestados()->get()->each(function($atestado) use (&$atestados, $paciente) {
|
||||
$lotacao = $atestado->createdLotacao;
|
||||
$unidade = $atestado->createdCentroCusto->infraestrutura->unidade;
|
||||
|
||||
$atestados[] = [
|
||||
'modelo_id' => $atestado->modelo_id,
|
||||
'descricao' => $atestado->descricao,
|
||||
'is_atestado_acompanhante' => $atestado->is_atestado_acompanhante,
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
],
|
||||
'nome_acompanhante' => $atestado->nome_acompanhante,
|
||||
'documento' => [
|
||||
'tipo' => $atestado->documentoTipo->nome ?? null,
|
||||
'numero' => $atestado->documento_tipo_id ? ($atestado->documento_tipo_id === DocumentoTipo::CPF ? $atestado->cpf : $atestado->cns) : null,
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $unidade->nome_fantasia,
|
||||
],
|
||||
'data' => $atestado->data ? $atestado->data->format('d/m/Y') : null,
|
||||
'horario' => $atestado->horario ? $atestado->horario->format('H:i') : null,
|
||||
'horario_inicial' => $atestado->horario_inicial ? $atestado->horario_inicial->format('H:i') : null,
|
||||
'quantidade_horas' => $atestado->quantidade_horas,
|
||||
'cid' => $atestado->cid->codigo ?? null,
|
||||
'dias' => $atestado->dias,
|
||||
'dias_por_extenso' => NumericUtil::getPorExtenso((int) $atestado->dias),
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $lotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? (
|
||||
$lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
});
|
||||
});
|
||||
|
||||
$data = [
|
||||
'atestados' => $atestados,
|
||||
'paraAssinar' => $paraAssinaturaEletronica,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class CartaMedicaController extends Controller
|
||||
{
|
||||
private const TITLE = 'CARTA MÉDICA';
|
||||
private const TEMPLATE = 'ambulatorio.carta-medica';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$cartasMedicas = $this->getCartasMedicasNaoSalvas($atendimentoId);
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::CARTA_MEDICA);
|
||||
} else {
|
||||
|
||||
$cartasMedicas = $this->getCartasMedicas($atendimentoId);
|
||||
}
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('cartasMedicas'));
|
||||
}
|
||||
|
||||
private function getCartasMedicasNaoSalvas($pacienteId)
|
||||
{
|
||||
$paciente = Paciente::findOrFail($pacienteId);
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
$infraestrutura = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura;
|
||||
|
||||
$cartasMedicas[] = [
|
||||
'usuario' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'registro_tipo' => $lotacao->usuario->registroTipo->sigla ?? null,
|
||||
'registro_numero' => $lotacao->usuario->registro_numero ?? '-',
|
||||
'unidade' => [
|
||||
'nome' => $infraestrutura->unidade->nome_fantasia ?? '-',
|
||||
'endereco' => $infraestrutura->endereco->completo ?? '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($infraestrutura->telefone),
|
||||
],
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social ?? '-',
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento->format('d/m/Y'),
|
||||
'idade' => $paciente->cidadao->idadeFormatada,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => MaskUtil::getCnsMasked($paciente->cidadao->cns),
|
||||
'cpf' => MaskUtil::getCpfMasked($paciente->cidadao->cpf),
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
||||
'sexo' => $paciente->cidadao->sexo->descricao ?? '-',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae,
|
||||
'telefone' => isset($paciente->cidadao->telefonePrincipal->numero) ? MaskUtil::getPhoneMasked($paciente->cidadao->telefonePrincipal->numero) : '-',
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
|
||||
'unidade' => $paciente->unidade->nomeFantasia ?? '-',
|
||||
],
|
||||
'descricao' => request()->descricao,
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $lotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
|
||||
$data = [
|
||||
'cartasMedicas' => $cartasMedicas,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function getCartasMedicas($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$cartasMedicas = [];
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->get()
|
||||
->each(function($soap) use (&$cartasMedicas, $paciente) {
|
||||
$soap->cartasMedicas()->get()->each(function($cartaMedica) use (&$cartasMedicas, $paciente) {
|
||||
$lotacao = $cartaMedica->createdLotacao;
|
||||
$infraestrutura = $cartaMedica->createdCentroCusto->infraestrutura;
|
||||
|
||||
$cartasMedicas[] = [
|
||||
'usuario' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'registro_tipo' => $lotacao->usuario->registroTipo->sigla ?? null,
|
||||
'registro_numero' => $lotacao->usuario->registro_numero ?? '-',
|
||||
'unidade' => [
|
||||
'nome' => $infraestrutura->unidade->nome_fantasia ?? '-',
|
||||
'endereco' => $infraestrutura->endereco->completo ?? '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($infraestrutura->telefone),
|
||||
],
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social ?? '-',
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento->format('d/m/Y'),
|
||||
'idade' => $paciente->cidadao->idadeFormatada,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => MaskUtil::getCnsMasked($paciente->cidadao->cns),
|
||||
'cpf' => MaskUtil::getCpfMasked($paciente->cidadao->cpf),
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
||||
'sexo' => $paciente->cidadao->sexo->descricao ?? '-',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae,
|
||||
'telefone' => isset($paciente->cidadao->telefonePrincipal->numero) ? MaskUtil::getPhoneMasked($paciente->cidadao->telefonePrincipal->numero) : '-',
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
|
||||
'unidade' => $paciente->unidade->nomeFantasia ?? '-',
|
||||
],
|
||||
'descricao' => $cartaMedica->descricao,
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $lotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
});
|
||||
});
|
||||
|
||||
$data = [
|
||||
'cartasMedicas' => $cartasMedicas,
|
||||
'paraAssinar' => $paraAssinaturaEletronica,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Services\Ambulatorio\GerenciamentoDiarioService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class DeclaracaoComparecimentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'DECLARAÇÃO DE COMPARECIMENTO';
|
||||
private const TEMPLATE = 'ambulatorio.declaracao-comparecimento';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$declaracoes = $this->getDeclaracoesNaoSalvas($atendimentoId);
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::DECLARACAO_COMPARECIMENTO);
|
||||
} else {
|
||||
|
||||
$declaracoes = $this->getDeclaracoes($atendimentoId);
|
||||
}
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('declaracoes'));
|
||||
}
|
||||
|
||||
private function getDeclaracoesNaoSalvas($pacienteId)
|
||||
{
|
||||
$paciente = Paciente::findOrFail($pacienteId);
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
$centroCusto = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'));
|
||||
|
||||
$declaracoes[] = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
],
|
||||
'nome_acompanhante' => request()->nome_acompanhante,
|
||||
'motivo_comparecimento' => request()->motivo_comparecimento,
|
||||
'data' => Carbon::now()->format('d/m/Y'),
|
||||
'entrada' => request()->entrada,
|
||||
'saida' => request()->saida,
|
||||
'unidade' => $centroCusto->infraestrutura->unidade->nome_fantasia,
|
||||
'infraestrutura' => $centroCusto->infraestrutura->nome,
|
||||
'turno' => !isset(request()->turno['nome'])
|
||||
? null
|
||||
: Str::lower(request()->turno['nome']),
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $lotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - '
|
||||
. $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
$data = [
|
||||
'declaracoes' => $declaracoes,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function getDeclaracoes($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$declaracoes = [];
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$atendimento->declaracoesComparecimento()
|
||||
->where(fn ($q) => $q
|
||||
->whereDoesntHave('soap')
|
||||
->orWhereHas('soap', fn ($q) => $q
|
||||
->where('is_rascunho', false)
|
||||
)
|
||||
)
|
||||
->orderByDesc('created_at')
|
||||
->get(['id'])
|
||||
->each(function ($declaracao) use (&$declaracoes) {
|
||||
|
||||
$declaracoes[] = GerenciamentoDiarioService::getDeclaracaoComparecimentoPrintData($declaracao->id);
|
||||
});
|
||||
|
||||
$data = [
|
||||
'declaracoes' => $declaracoes,
|
||||
'paraAssinar' => $paraAssinaturaEletronica,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\AtencaoBasica\AtendimentoIndividual\Encaminhamento;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Geral\Ciap;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\MaskUtil;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class EncaminhamentoController extends Controller
|
||||
{
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
$cliente = Cliente::where('link', app('config')->get('database.default'))
|
||||
->where('sistema_id', 1)
|
||||
->firstOrFail();
|
||||
|
||||
$logotipo = $cliente->logotipo ? base64_encode(file_get_contents(storage_path('app/intranet/cliente/logotipo/' . $cliente->logotipo))) : null;
|
||||
|
||||
$encaminhamentos = [];
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$encaminhamentos[] = self::getDadosNaoSalvos($atendimentoId);
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::ENCAMINHAMENTO);
|
||||
} else {
|
||||
self::getAtendimento($atendimentoId, $encaminhamentos);
|
||||
}
|
||||
|
||||
$data = [
|
||||
'cliente' => [
|
||||
'nome' => Str::upper($cliente->nome),
|
||||
'logotipo' => $logotipo,
|
||||
],
|
||||
'encaminhamentos' => $encaminhamentos,
|
||||
];
|
||||
|
||||
return SnappyPdf::loadView('impressoes.template.ambulatorio.encaminhamento', compact('data'))
|
||||
->setOption('header-html', '')
|
||||
->setOption('footer-html', '')
|
||||
->setOption('margin-top', '10')
|
||||
->setOption('margin-bottom', '10')
|
||||
->inline();
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, &$encaminhamentos) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$encaminhamentos = [];
|
||||
$regulacaoData = self::getRegulacaoData();
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('id', $id))
|
||||
->get()
|
||||
->each(function($soap) use (&$encaminhamentos, $paciente, $regulacaoData) {
|
||||
$soap->encaminhamentos()
|
||||
->when($regulacaoData['especialidade_id'], fn ($q, $id) => $q->where('servico_especializado_especialidade_id', $id))
|
||||
->get()
|
||||
->each(function($encaminhamento) use (&$encaminhamentos, $paciente) {
|
||||
|
||||
$cid = Cid::find($encaminhamento->servico_especializado_cid_id);
|
||||
$ciap = Ciap::find($encaminhamento->servico_especializado_ciap_id);
|
||||
|
||||
$intersetorialInfraestrutura = $encaminhamento->intersetorialInfraestrutura;
|
||||
$infraestrutura = $encaminhamento->createdCentroCusto->infraestrutura;
|
||||
$usuario = $encaminhamento->createdLotacao->usuario;
|
||||
|
||||
$instituicao = null;
|
||||
$endereco = null;
|
||||
$pa = false;
|
||||
$consulta = false;
|
||||
$programa = null;
|
||||
$internacao = false;
|
||||
$outros = null;
|
||||
|
||||
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_INTERSETORIAL) {
|
||||
$instituicao = $intersetorialInfraestrutura->unidade->nome_fantasia;
|
||||
$endereco = $intersetorialInfraestrutura->endereco->completo;
|
||||
$outros = 'Intersetorial';
|
||||
}
|
||||
|
||||
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_CAPS) {
|
||||
$programa = 'Encaminhamento para CAPS';
|
||||
}
|
||||
else if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_DE_ATENCAO_DOMICILIAR) {
|
||||
$programa = 'Encaminhamento para serviço de atenção domiciliar';
|
||||
}
|
||||
|
||||
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR) {
|
||||
$internacao = true;
|
||||
}
|
||||
|
||||
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_ESPECIALIZADO) {
|
||||
$consulta = true;
|
||||
}
|
||||
|
||||
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_URGENCIA) {
|
||||
$pa = true;
|
||||
}
|
||||
|
||||
$encaminhamentos[] = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'idade' => $paciente->cidadao->idade_formatada,
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
||||
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
|
||||
'numero' => $paciente->cidadao->domicilio->endereco->numero ?? null,
|
||||
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero ?? null,
|
||||
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
|
||||
'cep' => $paciente->cidadao->domicilio
|
||||
? MaskUtil::getCepMasked( $paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: null,
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
|
||||
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
||||
],
|
||||
'instituicao' => $instituicao,
|
||||
'endereco' => $endereco,
|
||||
'especialidade' => $encaminhamento->servicoEspecializadoEspecialidade->nome ?? null,
|
||||
'classificacao_risco' => $encaminhamento->servicoEspecializadoClassificacaoRisco->descricao_encaminhamento ?? null,
|
||||
'pa' => $pa,
|
||||
'consulta' => $consulta,
|
||||
'programa' => $programa,
|
||||
'internacao' => $internacao,
|
||||
'outros' => $outros,
|
||||
'unidade_origem' => [
|
||||
'nome_fantasia' => isset($infraestrutura->unidade->nome_fantasia)
|
||||
? substr($infraestrutura->unidade->nome_fantasia, 0, 40) : null,
|
||||
'cnes' => $infraestrutura->unidade->cnes,
|
||||
'telefone' => $infraestrutura->telefone ? MaskUtil::getPhoneMasked($infraestrutura->telefone) : null,
|
||||
],
|
||||
'usuario_origem' => [
|
||||
'nome' => $usuario->cidadao->nome ?? null,
|
||||
'usuario_nome' => $encaminhamento->createdLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $encaminhamento->createdLotacao->ocupacao->codigo . ' - '
|
||||
. $encaminhamento->createdLotacao->ocupacao->nome,
|
||||
'documento' => $encaminhamento->createdLotacao->usuario->registro_tipo_id
|
||||
? ($encaminhamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $encaminhamento->createdLotacao->usuario->registro_tipo_outro
|
||||
: $encaminhamento->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$encaminhamento->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'data' => $encaminhamento->created_at->format('d/m/Y') ?? null,
|
||||
'horario' => $encaminhamento->created_at->format('H:i') ?? null,
|
||||
'motivo' => $encaminhamento->servico_especializado_motivo ?? null,
|
||||
'cid' => $encaminhamento->servico_especializado_cid_id ? $cid->codigo.' - '.$cid->nome : null,
|
||||
'ciap' => $encaminhamento->servico_especializado_ciap_id ? $ciap->codigo.' - '.$ciap->descricao : null,
|
||||
];
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public static function getDadosNaoSalvos($pacienteId) {
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$infraestrutura = $currentLotacao->infraestrutura;
|
||||
$usuario = $currentLotacao->usuario;
|
||||
|
||||
$instituicao = null;
|
||||
$endereco = null;
|
||||
$pa = false;
|
||||
$consulta = false;
|
||||
$programa = null;
|
||||
$internacao = false;
|
||||
$outros = null;
|
||||
|
||||
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_INTERSETORIAL) {
|
||||
$intersetorialInfraestrutura = Infraestrutura::where('id', request()->infraestrutura['id'])->first();
|
||||
$instituicao = $intersetorialInfraestrutura->unidade->nome_fantasia;
|
||||
$endereco = $intersetorialInfraestrutura->endereco->completo;
|
||||
$outros = 'Intersetorial';
|
||||
}
|
||||
|
||||
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_CAPS) {
|
||||
$programa = 'Encaminhamento para CAPS';
|
||||
}
|
||||
else if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_DE_ATENCAO_DOMICILIAR) {
|
||||
$programa = 'Encaminhamento para serviço de atenção domiciliar';
|
||||
}
|
||||
|
||||
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR) {
|
||||
$internacao = true;
|
||||
}
|
||||
|
||||
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_ESPECIALIZADO) {
|
||||
$consulta = true;
|
||||
}
|
||||
|
||||
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_URGENCIA) {
|
||||
$pa = true;
|
||||
}
|
||||
|
||||
return [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'idade' => $paciente->cidadao->idade_formatada,
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
||||
'logradouro' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->nome,
|
||||
'numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->numero,
|
||||
'sem_numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->sem_numero,
|
||||
'complemento' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->complemento ?? '',
|
||||
'cep' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep
|
||||
? MaskUtil::getCepMasked(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep)
|
||||
: null,
|
||||
'municipio' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->nome,
|
||||
'ibge' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->ibge,
|
||||
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
||||
],
|
||||
'instituicao' => $instituicao,
|
||||
'endereco' => $endereco,
|
||||
'especialidade' => request()->especialidade ? request()->especialidade['descricao'] : null,
|
||||
'classificacao_risco' => request()->classificacaoRisco ? request()->classificacaoRisco['descricaoEncaminhamento'] : null,
|
||||
'pa' => $pa,
|
||||
'consulta' => $consulta,
|
||||
'programa' => $programa,
|
||||
'internacao' => $internacao,
|
||||
'outros' => $outros,
|
||||
'unidade_origem' => [
|
||||
'nome_fantasia' => isset($infraestrutura->unidade->nome_fantasia)
|
||||
? substr($infraestrutura->unidade->nome_fantasia, 0, 40) : null,
|
||||
'cnes' => $infraestrutura->unidade->cnes,
|
||||
'telefone' => $infraestrutura->telefone ? MaskUtil::getPhoneMasked($infraestrutura->telefone) : null,
|
||||
],
|
||||
'usuario_origem' => [
|
||||
'nome' => $usuario->cidadao->nome ?? null,
|
||||
'usuario_nome' => $usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - '
|
||||
. $currentLotacao->ocupacao->nome,
|
||||
'documento' => $usuario->registro_tipo_id
|
||||
? ($usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $usuario->registro_tipo_outro
|
||||
: $usuario->registroTipo->sigla
|
||||
) . ": {$usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'data' => Carbon::now()->format('d/m/Y') ?? null,
|
||||
'horario' => Carbon::now()->format('H:i') ?? null,
|
||||
'motivo' => request()->motivo ?? null,
|
||||
'cid' => request()->cid ? request()->cid['codigo'] .' - '. request()->cid['nome'] : null,
|
||||
'ciap' => request()->ciap ? request()->ciap['codigo'] .' - '. request()->ciap['descricao'] : null,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getRegulacaoData()
|
||||
{
|
||||
$regulacaoData = [
|
||||
'soap_id' => null,
|
||||
'especialidade_id' => null,
|
||||
];
|
||||
|
||||
if (request()->regulacao_solicitacao_id) {
|
||||
|
||||
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
|
||||
|
||||
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
|
||||
$regulacaoData['especialidade_id'] = $regulacaoSolicitacao->itens()->first('especialidade_id')->especialidade_id;
|
||||
}
|
||||
|
||||
return $regulacaoData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,443 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
use App\Enums\AtencaoBasica\AtendimentoIndividual\Encaminhamento as EncaminhamentoEnum;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Intranet\Sistema;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoCaraterInternacao;
|
||||
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoClinica;
|
||||
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoCausaExterna;
|
||||
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoVinculoPrevidencia;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\AtendimentoSoap;
|
||||
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Geral\DocumentoTipo;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Utils\MaskUtil;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
|
||||
|
||||
class EncaminhamentoHospitalarController extends Controller
|
||||
{
|
||||
private const TITLE = 'LAUDO PARA SOLICITAÇÃO DE AUTORIZAÇÃO DE INTERNAÇÃO HOSPITALAR';
|
||||
private const TEMPLATE = 'impressoes.template.ambulatorio.encaminhamento-hospitalar';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
return SnappyPdf::loadView(self::TEMPLATE, [
|
||||
'title' => self::TITLE,
|
||||
'paciente' => self::getPacienteDataPacienteId($atendimentoId),
|
||||
'internacao' => self::getInternacaoDataRascunho(),
|
||||
'cliente' => self::getClienteData(),
|
||||
'causa_externa' => self::getCausaExternaOptions(),
|
||||
'usuario' => self::getUsuarioData(),
|
||||
])
|
||||
->setOption('header-html', '')
|
||||
->setOption('footer-html', '')
|
||||
->setOption('margin-top', '10')
|
||||
->setOption('margin-bottom', '10')
|
||||
->setOption('zoom', 0.8)
|
||||
->inline();
|
||||
}
|
||||
|
||||
return SnappyPdf::loadView(self::TEMPLATE, [
|
||||
'title' => self::TITLE,
|
||||
'paciente' => self::getPacienteData(request()->atendimento_id ?? $atendimentoId),
|
||||
'internacao' => self::getInternacaoData(request()->atendimento_id ?? $atendimentoId),
|
||||
'cliente' => self::getClienteData(),
|
||||
'causa_externa' => self::getCausaExternaOptions(),
|
||||
'usuario'=> self::getUsuarioData()
|
||||
])
|
||||
->setOption('header-html', '')
|
||||
->setOption('footer-html', '')
|
||||
->setOption('margin-top', '10')
|
||||
->setOption('margin-bottom', '10')
|
||||
->setOption('zoom', 0.8)
|
||||
->inline();
|
||||
}
|
||||
|
||||
private static function getClienteData(){
|
||||
$cliente = Cliente::where('link', app('config')->get('database.default'))
|
||||
->where('sistema_id', Sistema::CONECTASUS)
|
||||
->firstOrFail();
|
||||
|
||||
$logotipo = $cliente->logotipo ? base64_encode(file_get_contents(storage_path('app/intranet/cliente/logotipo/' . $cliente->logotipo))) : null;
|
||||
$ramoAtividade = $cliente->sistema->ramoAtividade;
|
||||
$infraestruturaLogada = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura;
|
||||
|
||||
return [
|
||||
'logotipo' => $logotipo,
|
||||
'nome' => $cliente->nome,
|
||||
'ramoAtividade' => $ramoAtividade->nome,
|
||||
'infraestrutura' => [
|
||||
'nomeUnidade' => $infraestruturaLogada->unidade->nome_fantasia,
|
||||
'telefone' => $infraestruturaLogada->telefone,
|
||||
'endereco' => [
|
||||
'logradouroNome' => $infraestruturaLogada->endereco->logradouro->nome,
|
||||
'tipo' => $infraestruturaLogada->endereco->logradouro->tipo->descricao,
|
||||
'numero' => $infraestruturaLogada->endereco->numero,
|
||||
'referencia' => $infraestruturaLogada->endereco->referencia,
|
||||
'bairro' => $infraestruturaLogada->endereco->logradouro->bairro->nome,
|
||||
'cep'=> $infraestruturaLogada->endereco->logradouro->cep,
|
||||
'municipio' => $infraestruturaLogada->endereco->logradouro->municipio->nome,
|
||||
'uf'=> $infraestruturaLogada->endereco->logradouro->municipio->estado->uf
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
private static function getInternacaoData($atendimentoId)
|
||||
{
|
||||
$atendimentoSoap = AtendimentoSoap::where('atendimento_id', $atendimentoId)->first();
|
||||
|
||||
if (!$atendimentoSoap) {
|
||||
return request()->has('internacaoHospitalar')
|
||||
? self::getInternacaoDataRascunho()
|
||||
: self::getInternacaoDataVazia();
|
||||
}
|
||||
|
||||
$internacao = $atendimentoSoap->encaminhamentos
|
||||
->where('tipo_id', EncaminhamentoEnum::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR)
|
||||
->first();
|
||||
|
||||
if (!$internacao) {
|
||||
return request()->has('internacaoHospitalar')
|
||||
? self::getInternacaoDataRascunho()
|
||||
: self::getInternacaoDataVazia();
|
||||
}
|
||||
|
||||
return [
|
||||
'unidade_solicitante' => [
|
||||
'nome' => $internacao->internacaoHospitalarUnidadeSolicitante->nome_fantasia,
|
||||
'cnes' => $internacao->internacaoHospitalarUnidadeSolicitante->cnes
|
||||
],
|
||||
'unidade_internacao' =>[
|
||||
'nome'=> null,
|
||||
'cnes'=> null
|
||||
],
|
||||
'principais_sinais_sintomas_clinicos' => $internacao->internacao_hosp_principais_sinais_sintomas_clinicos,
|
||||
'condicoes_que_justificam_internacao' => $internacao->internacao_hosp_condicoes_que_justificam_internacao,
|
||||
'principais_resultados_de_provas_diagnosticas' => $internacao->internacao_hosp_principais_resultados_de_provas_diagnosticas,
|
||||
'cid_principal' => [
|
||||
'codigo' => MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidPrincipal->codigo),
|
||||
'nome' => $internacao->InternacaoHospitalarCidPrincipal->nome
|
||||
],
|
||||
'cid_secundario' => $internacao->internacao_hospitalar_cid_secundario_id
|
||||
? MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidSecundario->codigo)
|
||||
: '',
|
||||
'cid_causas_associadas' => $internacao->internacao_hospitalar_cid_causas_associadas_id
|
||||
? MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidCausasAssociadas->codigo)
|
||||
: '',
|
||||
'procedimento' => self::getProcedimentoData($internacao),
|
||||
'causas_externas' => [
|
||||
'causa_externa' => $internacao->internacao_hospitalar_causa_externa_id,
|
||||
'vinculo_previdencia' => $internacao->internacao_hospitalar_vinculo_previdencia_id,
|
||||
'cnpj_seguradora' => $internacao->internacao_hospitalar_cnpj_seguradora,
|
||||
'numero_bilhete' => $internacao->internacao_hospitalar_numero_bilhete,
|
||||
'serie' => $internacao->internacao_hospitalar_serie,
|
||||
'cnpj_empresa' => $internacao->internacao_hospitalar_cnpj_empresa,
|
||||
'cnae_empresa' => $internacao->internacao_hospitalar_cnae_empresa,
|
||||
'cbor' => $internacao->internacao_hospitalar_cbor,
|
||||
],
|
||||
'autorizacao' => self::getAutorizacaoData($internacao)
|
||||
];
|
||||
}
|
||||
|
||||
private static function getInternacaoDataVazia()
|
||||
{
|
||||
return [
|
||||
'unidade_solicitante' => [
|
||||
'nome' => null,
|
||||
'cnes' => null,
|
||||
],
|
||||
'unidade_internacao' => [
|
||||
'nome' => null,
|
||||
'cnes' => null,
|
||||
],
|
||||
'principais_sinais_sintomas_clinicos' => null,
|
||||
'condicoes_que_justificam_internacao' => null,
|
||||
'principais_resultados_de_provas_diagnosticas' => null,
|
||||
'cid_principal' => null,
|
||||
'cid_secundario' => '',
|
||||
'cid_causas_associadas' => '',
|
||||
'procedimento' => [
|
||||
'procedimento_solicitado' => null,
|
||||
'data_solicitacao' => null,
|
||||
'clinica' => null,
|
||||
'carater_internacao' => null,
|
||||
'profissional_solicitante_assistente' => null,
|
||||
'profissional_assistente_documento' => [
|
||||
'nome' => null,
|
||||
'numero' => null,
|
||||
],
|
||||
],
|
||||
'causas_externas' => [
|
||||
'causa_externa' => null,
|
||||
'vinculo_previdencia' => null,
|
||||
'cnpj_seguradora' => null,
|
||||
'numero_bilhete' => null,
|
||||
'serie' => null,
|
||||
'cnpj_empresa' => null,
|
||||
'cnae_empresa' => null,
|
||||
'cbor' => null,
|
||||
],
|
||||
'autorizacao' => [
|
||||
'profissional_autorizador' => null,
|
||||
'orgao_codigo_emissor' => null,
|
||||
'profissional_autorizador_documento' => [
|
||||
'nome' => null,
|
||||
'numero' => null,
|
||||
],
|
||||
'documento_numero' => null,
|
||||
'data_autorizacao' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
private static function getUsuarioData(){
|
||||
$lotacaoLogada = self::getCurrentLotacao();
|
||||
return [
|
||||
'nome' => $lotacaoLogada->usuario->cidadao->nome,
|
||||
'unidade' => $lotacaoLogada->infraestrutura->unidade->nome_fantasia,
|
||||
'data_hora_impressao' => Carbon::now()->format('d/m/Y H:i')
|
||||
];
|
||||
}
|
||||
|
||||
private static function getPacienteDataPacienteId($pacienteId)
|
||||
{
|
||||
$paciente = Paciente::findOrFail($pacienteId);
|
||||
$cidadao = $paciente->cidadao;
|
||||
|
||||
return [
|
||||
'nome' => $cidadao->nome,
|
||||
'nome_social' => $cidadao->nome_social,
|
||||
'prefere_nome_social' => $cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => MaskUtil::getCnsMasked($cidadao->cns),
|
||||
'cpf' => MaskUtil::getCpfMasked($cidadao->cpf),
|
||||
'data_nascimento' => $cidadao->data_nascimento ? $cidadao->data_nascimento->format('d/m/Y') : '',
|
||||
'idade' => $cidadao->data_nascimento
|
||||
? "{$cidadao->idade['anos']} ano(s) "
|
||||
. "{$cidadao->idade['meses']} mês(s) "
|
||||
. "{$cidadao->idade['dias']} dia(s) "
|
||||
: '',
|
||||
'sexo' => $cidadao->sexo->descricao,
|
||||
'raca_cor' => $cidadao->racaCor->descricao ?? '',
|
||||
'etnia_indigena' => $cidadao->etniaIndigena->descricao ?? '',
|
||||
'nome_mae' => $cidadao->nome_mae,
|
||||
'telefone' => MaskUtil::getPhoneMasked($cidadao->telefone_principal->numero ?? ''),
|
||||
'endereco' => [
|
||||
'completo' => $cidadao->domicilio
|
||||
? "{$cidadao->domicilio->endereco->completo}, "
|
||||
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '',
|
||||
'ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? '',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getInternacaoDataRascunho()
|
||||
{
|
||||
$internacao = request()->internacaoHospitalar ?? [];
|
||||
$procedimento = $internacao['procedimento'] ?? [];
|
||||
$causasExternas = $internacao['causasExternas'] ?? [];
|
||||
$autorizacao = $internacao['autorizacao'] ?? [];
|
||||
|
||||
$cidPrincipal = $internacao['cidPrincipal'] ?? null;
|
||||
$cidSecundarioData = $internacao['cidSecundario'] ?? null;
|
||||
$cidCausasAssociadasData = $internacao['cidCausasAssociadas'] ?? null;
|
||||
|
||||
$cidSecundarioCodigo = null;
|
||||
if ($cidSecundarioData) {
|
||||
if (isset($cidSecundarioData['codigo'])) {
|
||||
$cidSecundarioCodigo = $cidSecundarioData['codigo'];
|
||||
} elseif (isset($cidSecundarioData['id'])) {
|
||||
$cid = Cid::find($cidSecundarioData['id']);
|
||||
$cidSecundarioCodigo = $cid->codigo ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
$cidCausasAssociadasCodigo = null;
|
||||
if ($cidCausasAssociadasData) {
|
||||
if (isset($cidCausasAssociadasData['codigo'])) {
|
||||
$cidCausasAssociadasCodigo = $cidCausasAssociadasData['codigo'];
|
||||
} elseif (isset($cidCausasAssociadasData['id'])) {
|
||||
$cid = Cid::find($cidCausasAssociadasData['id']);
|
||||
$cidCausasAssociadasCodigo = $cid->codigo ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
$unidadeSolicitante = !empty($internacao['unidadeSolicitanteId'])
|
||||
? Unidade::find($internacao['unidadeSolicitanteId'])
|
||||
: null;
|
||||
|
||||
$clinica = !empty($procedimento['clinicaId'])
|
||||
? AmbulatorioEncaminhamentoClinica::find($procedimento['clinicaId'])
|
||||
: null;
|
||||
$caraterInternacao = !empty($procedimento['caraterInternacaoId'])
|
||||
? AmbulatorioEncaminhamentoCaraterInternacao::find($procedimento['caraterInternacaoId'])
|
||||
: null;
|
||||
$documentoTipo = !empty($procedimento['profissionalSolicitanteDocumentoTipoId'])
|
||||
? DocumentoTipo::find($procedimento['profissionalSolicitanteDocumentoTipoId'])
|
||||
: null;
|
||||
$autorizadorDocumentoTipo = !empty($autorizacao['profissionalAutorizadorDocumentoTipoId'])
|
||||
? DocumentoTipo::find($autorizacao['profissionalAutorizadorDocumentoTipoId'])
|
||||
: null;
|
||||
|
||||
$procedimentoSolicitado = $procedimento['procedimentoSolicitado'] ?? null;
|
||||
$profissionalSolicitante = $procedimento['profissionalSolicitanteAssistente'] ?? null;
|
||||
$profissionalAutorizador = $autorizacao['profissionalAutorizador'] ?? null;
|
||||
|
||||
return [
|
||||
'unidade_solicitante' => [
|
||||
'nome' => $unidadeSolicitante->nome_fantasia ?? null,
|
||||
'cnes' => $unidadeSolicitante->cnes ?? null,
|
||||
],
|
||||
'unidade_internacao' => [
|
||||
'nome' => null,
|
||||
'cnes' => null,
|
||||
],
|
||||
'principais_sinais_sintomas_clinicos' => $internacao['principaisSinaisSintomasClinicos'] ?? null,
|
||||
'condicoes_que_justificam_internacao' => $internacao['condicoesQueJustificamInternacao'] ?? null,
|
||||
'principais_resultados_de_provas_diagnosticas' => $internacao['principaisResultadosDeProvasDiagnosticas'] ?? null,
|
||||
'cid_principal' => $cidPrincipal ? [
|
||||
'codigo' => MaskUtil::getCidMasked($cidPrincipal['codigo']),
|
||||
'nome' => $cidPrincipal['nome'],
|
||||
] : null,
|
||||
'cid_secundario' => $cidSecundarioCodigo ? MaskUtil::getCidMasked($cidSecundarioCodigo) : '',
|
||||
'cid_causas_associadas' => $cidCausasAssociadasCodigo ? MaskUtil::getCidMasked($cidCausasAssociadasCodigo) : '',
|
||||
'procedimento' => [
|
||||
'procedimento_solicitado' => $procedimentoSolicitado ? [
|
||||
'codigo' => MaskUtil::getProcedimentoMasked($procedimentoSolicitado['codigo']),
|
||||
'nome' => $procedimentoSolicitado['nome'],
|
||||
] : null,
|
||||
'data_solicitacao' => !empty($procedimento['dataSolicitacao'])
|
||||
? Carbon::parse($procedimento['dataSolicitacao'])->format('d/m/Y')
|
||||
: null,
|
||||
'clinica' => $clinica->nome ?? null,
|
||||
'carater_internacao' => $caraterInternacao->nome ?? null,
|
||||
'profissional_solicitante_assistente' => $profissionalSolicitante['cidadaoNome'] ?? null,
|
||||
'profissional_assistente_documento' => [
|
||||
'nome' => $documentoTipo->nome ?? null,
|
||||
'numero' => ($documentoTipo && !empty($procedimento['profissionalSolicitanteDocumentoNumero']))
|
||||
? MaskUtil::getDocumentMasked(
|
||||
$procedimento['profissionalSolicitanteDocumentoTipoId'],
|
||||
$procedimento['profissionalSolicitanteDocumentoNumero']
|
||||
)
|
||||
: null,
|
||||
],
|
||||
],
|
||||
'causas_externas' => [
|
||||
'causa_externa' => $causasExternas['causaExternaId'] ?? null,
|
||||
'vinculo_previdencia' => $causasExternas['vinculoPrevidenciaId'] ?? null,
|
||||
'cnpj_seguradora' => $causasExternas['cnpjSeguradora'] ?? null,
|
||||
'numero_bilhete' => $causasExternas['numeroBilhete'] ?? null,
|
||||
'serie' => $causasExternas['serie'] ?? null,
|
||||
'cnpj_empresa' => $causasExternas['cnpjEmpresa'] ?? null,
|
||||
'cnae_empresa' => $causasExternas['cnaeEmpresa'] ?? null,
|
||||
'cbor' => $causasExternas['cbor'] ?? null,
|
||||
],
|
||||
'autorizacao' => [
|
||||
'profissional_autorizador' => $profissionalAutorizador['cidadaoNome'] ?? null,
|
||||
'orgao_codigo_emissor' => $autorizacao['codigoOrgaoEmissor'] ?? null,
|
||||
'profissional_autorizador_documento' => [
|
||||
'nome' => $autorizadorDocumentoTipo->nome ?? null,
|
||||
'numero' => ($autorizadorDocumentoTipo && !empty($autorizacao['profissionalAutorizadorDocumentoNumero']))
|
||||
? MaskUtil::getDocumentMasked(
|
||||
$autorizacao['profissionalAutorizadorDocumentoTipoId'],
|
||||
$autorizacao['profissionalAutorizadorDocumentoNumero']
|
||||
)
|
||||
: null,
|
||||
],
|
||||
'documento_numero' => null,
|
||||
'data_autorizacao' => !empty($autorizacao['dataAutorizacao'])
|
||||
? Carbon::parse($autorizacao['dataAutorizacao'])->format('d/m/Y')
|
||||
: null,
|
||||
],
|
||||
];
|
||||
}
|
||||
private static function getPacienteData($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$cidadao = $atendimento->paciente->cidadao;
|
||||
|
||||
return [
|
||||
'nome' => $cidadao->nome,
|
||||
'nome_social' => $cidadao->nome_social,
|
||||
'prefere_nome_social' => $cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'prontuario' => $atendimento->paciente->prontuario,
|
||||
'cns' => MaskUtil::getCnsMasked($cidadao->cns),
|
||||
'cpf' => MaskUtil::getCpfMasked($cidadao->cpf),
|
||||
'data_nascimento' => $cidadao->data_nascimento ? $cidadao->data_nascimento->format('d/m/Y') : '',
|
||||
'idade' => $cidadao->data_nascimento
|
||||
? "{$cidadao->idade['anos']} ano(s) "
|
||||
. "{$cidadao->idade['meses']} mês(s) "
|
||||
. "{$cidadao->idade['dias']} dia(s) "
|
||||
: '',
|
||||
'sexo' => $cidadao->sexo->descricao,
|
||||
'raca_cor' => $cidadao->racaCor->descricao ?? '',
|
||||
'etnia_indigena' => $cidadao->etniaIndigena->descricao ?? '',
|
||||
'nome_mae' => $cidadao->nome_mae,
|
||||
'telefone' => MaskUtil::getPhoneMasked($cidadao->telefone_principal->numero ?? ''),
|
||||
'endereco' => [
|
||||
'completo' => $cidadao->domicilio
|
||||
? "{$cidadao->domicilio->endereco->completo}, "
|
||||
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '',
|
||||
'ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
private static function getProcedimentoData($internacao)
|
||||
{
|
||||
$procedimento = $internacao->internacaoHospitalarProcedimentoSolicitado;
|
||||
return [
|
||||
'procedimento_solicitado' => [
|
||||
'codigo' => MaskUtil::getProcedimentoMasked($procedimento->codigo),
|
||||
'nome' => $procedimento->nome
|
||||
],
|
||||
'data_solicitacao' => (new Carbon($internacao->internacao_hospitalar_data_solicitacao))->format('d/m/Y'),
|
||||
'clinica' => $internacao->InternacaoHospitalarClinica->nome,
|
||||
'carater_internacao' => $internacao->InternacaoHospitalarCaraterInternacao->nome,
|
||||
'profissional_solicitante_assistente' => $internacao->internacaoHospitalarProfissionalSolicitanteAssistente->cidadao->nome,
|
||||
'profissional_assistente_documento' => [
|
||||
'nome' => $internacao->internacaoHospitalarProfissionalSolicitanteDocumentoTipo->nome,
|
||||
'numero' => MaskUtil::getDocumentMasked(
|
||||
$internacao->internacao_hospitalar_profissional_solicitante_documento_tipo_id,
|
||||
$internacao->internacao_hospitalar_profissional_solicitante_documento_numero
|
||||
)
|
||||
]
|
||||
];
|
||||
}
|
||||
private static function getAutorizacaoData($internacao){
|
||||
return [
|
||||
'profissional_autorizador' => optional(optional($internacao->internacaoHospitalarProfissionalAutorizador)->cidadao)->nome,
|
||||
'orgao_codigo_emissor' => $internacao->internacao_hospitalar_codigo_orgao_emissor,
|
||||
'profissional_autorizador_documento'=>[
|
||||
'nome' => optional($internacao->internacaoHospitalarProfissionalAutorizadorDocumentoTipo)->nome,
|
||||
'numero'=> $internacao->internacao_hospitalar_profissional_autorizador_documento_numero
|
||||
? MaskUtil::getDocumentMasked(
|
||||
$internacao->internacao_hospitalar_profissional_autorizador_documento_tipo_id,
|
||||
$internacao->internacao_hospitalar_profissional_autorizador_documento_numero
|
||||
)
|
||||
: null
|
||||
],
|
||||
'documento_numero' => $internacao->internacao_hospitalar_documento_numero,
|
||||
'data_autorizacao' => $internacao->internacao_hospitalar_data_autorizacao
|
||||
? Carbon::parse($internacao->internacao_hospitalar_data_autorizacao)->format('d/m/Y')
|
||||
: null
|
||||
];
|
||||
}
|
||||
private static function getCausaExternaOptions()
|
||||
{
|
||||
return [
|
||||
'causas_externas' => AmbulatorioEncaminhamentoCausaExterna::pluck('nome','id'),
|
||||
'vinculos_previdencia' => AmbulatorioEncaminhamentoVinculoPrevidencia::pluck('nome', 'id')
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,239 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade as EscolaridadeEnum;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\LocalNascimento;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\CasoSuspeito;
|
||||
use App\Models\Ambulatorio\CasoSuspeitoFicha;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Obito;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\Intranet\Estado;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Models\Intranet\Pais;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class FichaNotificacaoController extends Controller
|
||||
{
|
||||
private const TEMPLATE = 'impressoes.template.ambulatorio.ficha-notificacao';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
$request = request()->all();
|
||||
|
||||
$atendimentoId = $request['atendimento_id'] ?? $atendimentoId;
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
$cliente = Cliente::where('link', config('database.default'))->firstOrFail();
|
||||
|
||||
if (!isset($request['caso_suspeito_id'])) {
|
||||
$soapIds = $atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->whereHas('casosSuspeitos')
|
||||
->pluck('id');
|
||||
|
||||
$casoSuspeitoIds = DB::table('ambulatorio_atendimento_soap_caso_suspeito')
|
||||
->whereIn('soap_id', $soapIds)
|
||||
->pluck('caso_suspeito_id')
|
||||
->filter()
|
||||
->unique()
|
||||
->values()
|
||||
->toArray();
|
||||
} else {
|
||||
$casoSuspeitoIds = [$request['caso_suspeito_id']];
|
||||
}
|
||||
|
||||
$impressoes = [];
|
||||
|
||||
foreach ($casoSuspeitoIds as $casoSuspeitoId) {
|
||||
$numeroFicha = 1;
|
||||
|
||||
$fichaExistente = CasoSuspeitoFicha::where('atendimento_id', $atendimento->id)
|
||||
->where('caso_suspeito_id', $casoSuspeitoId)
|
||||
->first();
|
||||
|
||||
if ($fichaExistente) {
|
||||
$numeroFicha = $fichaExistente->numero;
|
||||
} else {
|
||||
$ultimaFicha = CasoSuspeitoFicha::orderByDesc('created_at')->orderByDesc('id')->first();
|
||||
if ($ultimaFicha) {
|
||||
$numeroFicha = intval($ultimaFicha->numero) + 1;
|
||||
}
|
||||
|
||||
CasoSuspeitoFicha::create([
|
||||
'atendimento_id' => $atendimento->id,
|
||||
'caso_suspeito_id' => $casoSuspeitoId,
|
||||
'numero' => $numeroFicha,
|
||||
]);
|
||||
}
|
||||
|
||||
$params = $this->montarParametros(
|
||||
$atendimento,
|
||||
$paciente,
|
||||
$cliente,
|
||||
$casoSuspeitoId,
|
||||
$numeroFicha,
|
||||
$request['cid_id'] ?? null
|
||||
);
|
||||
|
||||
$impressoes[] = $params;
|
||||
}
|
||||
|
||||
return view(self::TEMPLATE, compact('impressoes'));
|
||||
}
|
||||
|
||||
private function montarParametros($atendimento, $paciente, $cliente, $casoSuspeitoId, $numeroFicha, $cidId)
|
||||
{
|
||||
$municipio = Municipio::find($cliente->municipio_id);
|
||||
$estado = Estado::find($municipio->estado_id);
|
||||
|
||||
$dataAtendimento = Carbon::parse($atendimento->created_at);
|
||||
$dataAtendimentoArray = str_split($dataAtendimento->format('dmY'));
|
||||
$dataNascimentoPaciente = $paciente->cidadao->data_nascimento->format('dmY');
|
||||
$dataNascimentoPacienteArray = str_split($dataNascimentoPaciente);
|
||||
$sexoPaciente = $paciente->cidadao->sexo->descricao;
|
||||
|
||||
$gestantePaciente = null;
|
||||
if ($paciente->cidadao->sexo_id === Sexo::MASCULINO) {
|
||||
$gestantePaciente = '6';
|
||||
} else {
|
||||
$soap = $atendimento->soaps()->first();
|
||||
$isGestante = $soap ? AtendimentoService::isPacienteGestante($soap) : false;
|
||||
|
||||
if ($isGestante) {
|
||||
$idadeGestacional = AtendimentoService::getIdadeGestacional($paciente);
|
||||
|
||||
if ($idadeGestacional !== null) {
|
||||
$semanas = $idadeGestacional['semanas'];
|
||||
|
||||
if ($semanas <= 13) {
|
||||
$gestantePaciente = '1';
|
||||
} elseif ($semanas <= 27) {
|
||||
$gestantePaciente = '2';
|
||||
} else {
|
||||
$gestantePaciente = '3';
|
||||
}
|
||||
} else {
|
||||
$gestantePaciente = '4';
|
||||
}
|
||||
} else {
|
||||
$gestantePaciente = null;
|
||||
}
|
||||
}
|
||||
|
||||
$racaCorPaciente = null;
|
||||
switch ($paciente->cidadao->raca_cor_id) {
|
||||
case RacaCor::BRANCA: $racaCorPaciente = '1'; break;
|
||||
case RacaCor::NEGRA: $racaCorPaciente = '2'; break;
|
||||
case RacaCor::AMARELA: $racaCorPaciente = '3'; break;
|
||||
case RacaCor::PARDA: $racaCorPaciente = '4'; break;
|
||||
case RacaCor::INDIGENA: $racaCorPaciente = '5'; break;
|
||||
case RacaCor::SEM_INFORMACAO: $racaCorPaciente = '6'; break;
|
||||
default: $racaCorPaciente = null; break;
|
||||
}
|
||||
|
||||
$escolaridadePaciente = null;
|
||||
if (!is_null($paciente->cidadao->escolaridade_id)) {
|
||||
switch ($paciente->cidadao->escolaridade_id) {
|
||||
case EscolaridadeEnum::FUNDAMENTAL_INCOMPLETO: $escolaridadePaciente = '1'; break;
|
||||
case EscolaridadeEnum::FUNDAMENTAL_COMPLETO: $escolaridadePaciente = '4'; break;
|
||||
case EscolaridadeEnum::MEDIO_INCOMPLETO: $escolaridadePaciente = '5'; break;
|
||||
case EscolaridadeEnum::MEDIO_COMPLETO: $escolaridadePaciente = '6'; break;
|
||||
case EscolaridadeEnum::SUPERIOR_GRADUAcao_INCOMPLETO: $escolaridadePaciente = '7'; break;
|
||||
case EscolaridadeEnum::SUPERIOR_GRADUACAO_COMPLETO: $escolaridadePaciente = '8'; break;
|
||||
case EscolaridadeEnum::POS_GRADUACAO_LATO_SENSO_INCOMPLETO:
|
||||
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_MESTRADO_INCOMPLETO:
|
||||
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_DOUTORADO_INCOMPLETO:
|
||||
$escolaridadePaciente = '7'; break;
|
||||
case EscolaridadeEnum::POS_GRADUACAO_LATO_SENSO_COMPLETO:
|
||||
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_MESTRADO_COMPLETO:
|
||||
case EscolaridadeEnum::POS_GRADUACAO_STRICTO_SENSU_NIVEL_DOUTORADO_COMPLETO:
|
||||
$escolaridadePaciente = '8'; break;
|
||||
default: $escolaridadePaciente = '9'; break;
|
||||
}
|
||||
}
|
||||
|
||||
$domicilioPaciente = DB::table('cadastro_domicilio')->where('id', $paciente->cidadao->domicilio_id)->first();
|
||||
$enderecoPaciente = DB::table('cadastro_endereco')->where('id', $domicilioPaciente->endereco_id)->first();
|
||||
$logradouroPaciente = DB::table('cadastro_logradouro')->where('id', $enderecoPaciente->logradouro_id)->first();
|
||||
$logradouroPacienteTipo = DB::table('cadastro_logradouro_tipo')->where('id', $logradouroPaciente->tipo_id)->first();
|
||||
$municipioPaciente = Municipio::find($logradouroPaciente->municipio_id);
|
||||
$estadoPaciente = Estado::find($municipioPaciente->estado_id);
|
||||
$bairroPaciente = DB::table('cadastro_bairro')->where('id', $logradouroPaciente->bairro_id)->first();
|
||||
$telefonePrincipalPaciente = $paciente->cidadao->telefones->where('principal', true)->first() ?? $paciente->cidadao->telefones->first();
|
||||
$localNascimentoPaciente = $paciente->cidadao->local_nascimento_id;
|
||||
|
||||
$paisPaciente = null;
|
||||
if ($localNascimentoPaciente === LocalNascimento::EM_OUTRO_PAIS) {
|
||||
$paisPaciente = Pais::where('id', $estadoPaciente->pais_id)->pluck('nome')->first();
|
||||
}
|
||||
|
||||
$usuarioLogado = self::getCurrentLotacao()->usuario;
|
||||
$pacienteObito = Obito::where('cidadao_id', $paciente->cidadao_id)->exists();
|
||||
|
||||
if (!$cidId) {
|
||||
$cidId = DB::table('ambulatorio_caso_suspeito_cid')
|
||||
->where('caso_suspeito_id', $casoSuspeitoId)
|
||||
->value('cid_id');
|
||||
}
|
||||
$cidNome = Cid::where('id', $cidId)->pluck('nome')->first();
|
||||
$nomeCasoSuspeito = CasoSuspeito::where('id', $casoSuspeitoId)->pluck('nome')->first();
|
||||
|
||||
return [
|
||||
'numero_notificacao' => $numeroFicha,
|
||||
'nome_caso_suspeito' => $nomeCasoSuspeito,
|
||||
'data_notificacao' => $dataAtendimentoArray,
|
||||
'cliente' => [
|
||||
'estado' => str_split($estado->uf),
|
||||
'municipio' => $municipio->nome,
|
||||
'codigo_ibge' => str_split($municipio->ibge),
|
||||
'nome_unidade' => $atendimento->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
|
||||
'codigo_sinan_unidade' => null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'data_nascimento' => $dataNascimentoPacienteArray,
|
||||
'idade' => null,
|
||||
'sexo' => substr($sexoPaciente, 0, 1),
|
||||
'gestante' => $gestantePaciente,
|
||||
'raca_cor' => $racaCorPaciente,
|
||||
'escolaridade' => $escolaridadePaciente ?? '9',
|
||||
'cartao_sus' => str_split($paciente->cidadao->cns),
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? 'DESCONHECE',
|
||||
'endereco' => [
|
||||
'estado' => str_split($estadoPaciente->uf),
|
||||
'municipio' => $municipioPaciente->nome,
|
||||
'codigo_ibge' => str_split($municipio->ibge),
|
||||
'distrito' => null,
|
||||
'bairro' => $bairroPaciente->nome,
|
||||
'logradouro' => $logradouroPacienteTipo->descricao . " " . $logradouroPaciente->nome,
|
||||
'numero' => $enderecoPaciente->numero ?? null,
|
||||
'complemento' => $enderecoPaciente->complemento ?? null,
|
||||
'referencia' => $enderecoPaciente->referencia ?? null,
|
||||
'cep' => $logradouroPaciente->cep ? str_split($logradouroPaciente->cep) : null,
|
||||
'telefone_ddd' => $telefonePrincipalPaciente ? substr($telefonePrincipalPaciente->numero, 0, 2) : null,
|
||||
'telefone_numero' => $telefonePrincipalPaciente ? str_split(substr($telefonePrincipalPaciente->numero, 2)) : null,
|
||||
'pais' => $paisPaciente,
|
||||
],
|
||||
],
|
||||
'notificante' => [
|
||||
'municipio_unidade' => $municipio->nome . "/" . $atendimento->createdCentroCusto->infraestrutura->unidade->nome_fantasia,
|
||||
'nome' => $usuarioLogado->cidadao->nome,
|
||||
'funcao' => self::getCurrentLotacao()->ocupacao->nome,
|
||||
],
|
||||
'dados_complementares' => [
|
||||
'obito' => $pacienteObito ? '1' : '2',
|
||||
'cid_10' => $cidNome ?? null,
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,343 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Enums\Parametrizacao\Exame\Tipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\ClassificacaoRisco;
|
||||
use App\Models\Ambulatorio\ParametrizacaoAtendimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Geral\Ciap;
|
||||
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\MaskUtil;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class FichaRequisicaoServicoAuxiliarDiagnoseTerapiaController extends Controller
|
||||
{
|
||||
public function __invoke($atendimentoId, $dados = [])
|
||||
{
|
||||
$impressao = null;
|
||||
|
||||
$parametrizacao = ParametrizacaoAtendimento::first();
|
||||
|
||||
if (!is_null($parametrizacao) && $parametrizacao->modelo_impressao_sadt === 'especifico') {
|
||||
$impressao = 'impressoes.template.ambulatorio.ficha-requisicao-servico-auxiliar-diagnose-terapia-especifico';
|
||||
} else {
|
||||
$impressao = 'impressoes.template.ambulatorio.ficha-requisicao-servico-auxiliar-diagnose-terapia-padrao';
|
||||
}
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
$dadosNaoSalvos = self::getDadosNaoSalvos($atendimentoId);
|
||||
|
||||
AtendimentoService::saveLogImpressao(
|
||||
request()->atendimento_id,
|
||||
AtendimentoImpressaoTipo::FICHA_DE_REQUISICAO_DE_SERVICOS_AUXILIARES_DE_DIAGOSE_E_TERAPIA_SADT
|
||||
);
|
||||
|
||||
return SnappyPdf::loadView($impressao, $dadosNaoSalvos)
|
||||
->setOption('header-html', '')
|
||||
->setOption('footer-html', '')
|
||||
->setOption('margin-bottom', 0)
|
||||
->setOption('margin-left', 2)
|
||||
->setOption('margin-right', 2)
|
||||
->setOption('margin-top', 6)
|
||||
->setPaper('a4')
|
||||
->inline();
|
||||
} else {
|
||||
return SnappyPdf::loadView($impressao, self::getAtendimento($atendimentoId, $dados))
|
||||
->setOption('header-html', '')
|
||||
->setOption('footer-html', '')
|
||||
->setOption('margin-bottom', 0)
|
||||
->setOption('margin-left', 2)
|
||||
->setOption('margin-right', 2)
|
||||
->setOption('margin-top', 6)
|
||||
->setPaper('a4')
|
||||
->inline();
|
||||
}
|
||||
}
|
||||
|
||||
public static function getDadosNaoSalvos($pacienteId)
|
||||
{
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$solicitacoesExames = collect();
|
||||
|
||||
foreach ((request()->exames ?? request()->procedimentos_cirurgicos) as $item) {
|
||||
|
||||
$itens[] = [
|
||||
'codigo' => $item['codigo'],
|
||||
'nome' => $item['nome'],
|
||||
];
|
||||
};
|
||||
|
||||
$classificacaoRisco = ClassificacaoRisco::findOrFail(request()->classificacao_risco_id)->descricao_encaminhamento ?? null;
|
||||
|
||||
$solicitacoesExames->push([
|
||||
'data' =>Carbon::now()->format('d/m/Y') ?? null,
|
||||
'cid' => request()->cid ? request()->cid['codigo'] .' - '. request()->cid['nome'] : null,
|
||||
'ciap' => request()->ciap ? request()->ciap['codigo'] .' - '. request()->ciap['descricao'] : null,
|
||||
'justificativa' => request()->justificativa,
|
||||
'observacao' => ($classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . request()->observacao,
|
||||
'itens' => $itens,
|
||||
'usuario_origem' => [
|
||||
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - '
|
||||
. $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: null,
|
||||
],
|
||||
]);
|
||||
|
||||
$dataNascimento = Carbon::parse($paciente->cidadao->data_nascimento);
|
||||
$dataCriacao = Carbon::parse(Carbon::now()->format('Y-m-d'));
|
||||
$diferenca = $dataNascimento->diff($dataCriacao);
|
||||
$idade = [];
|
||||
|
||||
if ($diferenca->y > 0) {
|
||||
$idade[] = $diferenca->y . ' ' . ($diferenca->y === 1 ? 'ano' : 'anos');
|
||||
}
|
||||
|
||||
if ($diferenca->m > 0) {
|
||||
$idade[] = $diferenca->m . ' ' . ($diferenca->m === 1 ? 'mês' : 'meses');
|
||||
}
|
||||
|
||||
if ($diferenca->d > 0) {
|
||||
$idade[] = $diferenca->d . ' ' . ($diferenca->d === 1 ? 'dia' : 'dias');
|
||||
}
|
||||
|
||||
return [
|
||||
'paraAssinar' => false,
|
||||
'requisitante' => [
|
||||
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnes' => $currentLotacao->infraestrutura->unidade->cnes,
|
||||
],
|
||||
'paciente' => [
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? null,
|
||||
'data_nascimento' => is_null($paciente->cidadao->data_nascimento)
|
||||
? null
|
||||
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmy'),
|
||||
'sexo_masculino' => is_null($paciente->cidadao->sexo_id)
|
||||
? null : $paciente->cidadao->sexo_id === Sexo::MASCULINO,
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
||||
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
|
||||
'numero' => $paciente->cidadao->domicilio->endereco->numero ?? null,
|
||||
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero ?? false,
|
||||
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
|
||||
'cep' => $paciente->cidadao->domicilio
|
||||
? $paciente->cidadao->domicilio->endereco->logradouro->cep
|
||||
: null,
|
||||
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
|
||||
'idade' => implode(', ', $idade),
|
||||
'cns' => $paciente->cidadao->cns ?? null,
|
||||
'cpf' => $paciente->cidadao->cpf ?? null,
|
||||
'prontuario' => $paciente->prontuario
|
||||
? str_pad($paciente->prontuario, 8, '0', STR_PAD_LEFT)
|
||||
: null,
|
||||
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
||||
'unidade_referencia_cnes' => $paciente->unidade->cnes ?? null,
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? null,
|
||||
],
|
||||
'solicitacoes' => $solicitacoesExames,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, $dados = []) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$solicitacoesExames = collect();
|
||||
$solicitacoesProcedimentosCirurgicos = collect();
|
||||
$regulacaoData = self::getRegulacaoData();
|
||||
|
||||
if (!isset($dados['itens'])) {
|
||||
|
||||
$dados['itens'] = request()->itens;
|
||||
}
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('id', $id))
|
||||
->get()
|
||||
->each(function ($soap) use ($solicitacoesExames, $solicitacoesProcedimentosCirurgicos, $regulacaoData, $dados) {
|
||||
|
||||
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames, $regulacaoData, $dados) {
|
||||
|
||||
$itens = $solicitacao->itens()
|
||||
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
|
||||
->when(isset($dados['itens']), fn ($q) => $q->whereIn('id', collect($dados['itens'])->where('origem', 'exame')->pluck('id')))
|
||||
->when($regulacaoData['exames_ids'], fn ($q, $ids) => $q->whereIn('exame_id', $ids))
|
||||
->whereHas('exame', fn ($q) => $q->where('tipo_id', Tipo::IMAGEM))
|
||||
->get()
|
||||
->map(fn ($item) => [
|
||||
'codigo' => $item->exame->codigo,
|
||||
'nome' => $item->exame->nome,
|
||||
]);
|
||||
|
||||
if ($itens->isNotEmpty()) {
|
||||
|
||||
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
|
||||
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
|
||||
$classificacaoRisco = $solicitacao->classificacaoRisco->descricao_encaminhamento ?? null;
|
||||
|
||||
$solicitacoesExames->push([
|
||||
'data' => $solicitacao->created_at->format('d/m/Y'),
|
||||
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : null,
|
||||
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : null,
|
||||
'justificativa' => $solicitacao->justificativa,
|
||||
'observacao' => ($classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . ($solicitacao->observacao ?? null),
|
||||
'itens' => $itens,
|
||||
'usuario_origem' => [
|
||||
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
|
||||
. $solicitacao->createdLotacao->ocupacao->nome,
|
||||
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
|
||||
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
|
||||
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
|
||||
: null,
|
||||
],
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
if (!isset(request()->solicitacao_exame_item_id) && !$regulacaoData['exames_ids']) {
|
||||
|
||||
$soap->solicitacoesProcedimentosCirurgicos->each(function ($solicitacao) use ($solicitacoesProcedimentosCirurgicos, $dados) {
|
||||
|
||||
$itens = $solicitacao->itens()
|
||||
->when(isset($dados['itens']), fn ($q) => $q->whereIn('id', collect($dados['itens'])->where('origem', 'procedimento_cirurgico')->pluck('id')))
|
||||
->get()
|
||||
->map(fn ($item) => [
|
||||
'codigo' => $item->procedimentoCirurgico->procedimento_codigo,
|
||||
'nome' => $item->procedimentoCirurgico->nome,
|
||||
]);
|
||||
|
||||
if ($itens->isNotEmpty()) {
|
||||
|
||||
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
|
||||
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
|
||||
$classificacaoRisco = $solicitacao->classificacaoRisco->descricao_encaminhamento ?? null;
|
||||
|
||||
$solicitacoesProcedimentosCirurgicos->push([
|
||||
'data' => $solicitacao->created_at->format('d/m/Y'),
|
||||
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : null,
|
||||
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : null,
|
||||
'justificativa' => $solicitacao->justificativa,
|
||||
'observacao' => ($classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . ($solicitacao->observacao ?? null),
|
||||
'itens' => $itens,
|
||||
'usuario_origem' => [
|
||||
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
|
||||
. $solicitacao->createdLotacao->ocupacao->nome,
|
||||
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
|
||||
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
|
||||
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
|
||||
: null,
|
||||
],
|
||||
]);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$dataNascimento = Carbon::parse($atendimento->paciente->cidadao->data_nascimento);
|
||||
$dataCriacao = Carbon::parse($atendimento->created_at);
|
||||
$diferenca = $dataNascimento->diff($dataCriacao);
|
||||
$idade = [];
|
||||
|
||||
if ($diferenca->y > 0) {
|
||||
$idade[] = $diferenca->y . ' ' . ($diferenca->y === 1 ? 'ano' : 'anos');
|
||||
}
|
||||
|
||||
if ($diferenca->m > 0) {
|
||||
$idade[] = $diferenca->m . ' ' . ($diferenca->m === 1 ? 'mês' : 'meses');
|
||||
}
|
||||
|
||||
if ($diferenca->d > 0) {
|
||||
$idade[] = $diferenca->d . ' ' . ($diferenca->d === 1 ? 'dia' : 'dias');
|
||||
}
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
return [
|
||||
'paraAssinar' => $paraAssinaturaEletronica,
|
||||
'requisitante' => [
|
||||
'unidade' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->nome_fantasia,
|
||||
'cnes' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->cnes,
|
||||
],
|
||||
'paciente' => [
|
||||
'rg' => $atendimento->paciente->cidadao->carteiraIdentidade->numero ?? null,
|
||||
'data_nascimento' => is_null($atendimento->paciente->cidadao->data_nascimento)
|
||||
? null
|
||||
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmy'),
|
||||
'sexo_masculino' => is_null($atendimento->paciente->cidadao->sexo_id)
|
||||
? null : $atendimento->paciente->cidadao->sexo_id === Sexo::MASCULINO,
|
||||
'nome' => $atendimento->paciente->cidadao->nome,
|
||||
'nome_social' => $atendimento->paciente->cidadao->nome_social,
|
||||
'municipio' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'uf' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
'bairro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
||||
'logradouro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
|
||||
'numero' => $atendimento->paciente->cidadao->domicilio->endereco->numero ?? null,
|
||||
'sem_numero' => $atendimento->paciente->cidadao->domicilio->endereco->sem_numero ?? null,
|
||||
'complemento' => $atendimento->paciente->cidadao->domicilio->endereco->complemento ?? '',
|
||||
'cep' => $atendimento->paciente->cidadao->domicilio
|
||||
? $atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep
|
||||
: null,
|
||||
'ibge' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
|
||||
'idade' => implode(', ', $idade),
|
||||
'cns' => $atendimento->paciente->cidadao->cns ?? null,
|
||||
'cpf' => $atendimento->paciente->cidadao->cpf ?? null,
|
||||
'prontuario' => $atendimento->paciente->prontuario
|
||||
? str_pad($atendimento->paciente->prontuario, 8, '0', STR_PAD_LEFT)
|
||||
: null,
|
||||
'telefones' => $atendimento->paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'unidade_referencia' => $atendimento->paciente->unidade->nome_fantasia ?? null,
|
||||
'unidade_referencia_cnes' => $atendimento->paciente->unidade->cnes ?? null,
|
||||
'nome_mae' => $atendimento->paciente->cidadao->nome_mae ?? null,
|
||||
],
|
||||
'solicitacoes' => $solicitacoesExames->concat($solicitacoesProcedimentosCirurgicos),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getRegulacaoData()
|
||||
{
|
||||
$regulacaoData = [
|
||||
'soap_id' => null,
|
||||
'exames_ids' => null,
|
||||
];
|
||||
|
||||
if (request()->regulacao_solicitacao_id) {
|
||||
|
||||
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
|
||||
|
||||
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
|
||||
$regulacaoData['exames_ids'] = $regulacaoSolicitacao->itens()->pluck('exame_id');
|
||||
}
|
||||
|
||||
return $regulacaoData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class ImpressaoAssinadoController extends Controller
|
||||
{
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
|
||||
$path = 'assinatura-eletronica' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . 'ambulatorio' . DIRECTORY_SEPARATOR . 'atendimento';
|
||||
$fileName = request()->tipo;
|
||||
$arquivo = "{$fileName}-{$atendimentoId}.PDF";
|
||||
|
||||
$headers = [
|
||||
'Content-Type' => 'application/pdf',
|
||||
];
|
||||
|
||||
$filePath = Storage::path( $path . DIRECTORY_SEPARATOR . $arquivo);
|
||||
|
||||
return response()->download($filePath, $arquivo, $headers);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\Impressao\Ambulatorio\AtendimentoController;
|
||||
use App\Http\Controllers\Impressao\Ambulatorio\DeclaracaoComparecimentoController;
|
||||
use App\Http\Controllers\Impressao\Ambulatorio\ReceitaMedicaComumController;
|
||||
use App\Http\Controllers\Impressao\Ambulatorio\RequisicaoExameCitopatologicoColoUteroController;
|
||||
use App\Http\Controllers\Impressao\Ambulatorio\RequisicaoMamografiaController;
|
||||
use App\Http\Controllers\Impressao\Ambulatorio\ServicoAnaliseDiagnosticoTerapiaSolicitacaoExameController;
|
||||
use App\Utils\Exports\PhpMerge;
|
||||
|
||||
class ImpressaoGeralController extends Controller
|
||||
{
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
|
||||
$pdfPaths = [];
|
||||
|
||||
collect(request()->all())->each(function ($impressao) use ($atendimentoId, &$pdfPaths) {
|
||||
|
||||
$impressao = (array) $impressao;
|
||||
$identificador = $impressao[0];
|
||||
$dados = $impressao[1] ?? [];
|
||||
|
||||
if ($identificador === 'posConsulta') {
|
||||
|
||||
$posConsulta = new PosConsultaController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $posConsulta($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'preAtendimento') {
|
||||
|
||||
$preAtendimento = new PreAtendimentoController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $preAtendimento($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'atendimento') {
|
||||
|
||||
$atendimento = new AtendimentoController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $atendimento($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'atestado') {
|
||||
|
||||
$atestado = new AtestadoController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $atestado($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'cartaMedica') {
|
||||
|
||||
$cartaMedica = new CartaMedicaController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $cartaMedica($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'declaracaoComparecimento') {
|
||||
|
||||
$declaracaoComparecimento = new DeclaracaoComparecimentoController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $declaracaoComparecimento($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'encaminhamento') {
|
||||
|
||||
$encaminhamento = new EncaminhamentoController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $encaminhamento($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'encaminhamentoHospitalar') {
|
||||
|
||||
$encaminhamento = new EncaminhamentoHospitalarController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $encaminhamento($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'orientacao') {
|
||||
|
||||
$orientacao = new OrientacaoController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $orientacao($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'receitaMedicaComum') {
|
||||
|
||||
$receitaMedicaComum = new ReceitaMedicaComumController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $receitaMedicaComum($atendimentoId, true, $dados),
|
||||
'orientation' => 'L'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'receitaMedicaEspecial') {
|
||||
|
||||
$receitaMedicaEspecial = new ReceitaMedicaEspecialController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $receitaMedicaEspecial($atendimentoId, true, $dados),
|
||||
'orientation' => 'L'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'receitaMedicaEspecialAmarela') {
|
||||
|
||||
$receitaMedicaEspecialAmarela = new ReceitaMedicaEspecialAmarelaController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $receitaMedicaEspecialAmarela($atendimentoId, true, $dados),
|
||||
'orientation' => 'L'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'receitaMedicaEspecialAzul') {
|
||||
|
||||
$receitaMedicaEspecialAzul = new ReceitaMedicaEspecialAzulController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $receitaMedicaEspecialAzul($atendimentoId, true, $dados),
|
||||
'orientation' => 'L'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'receitaMedicaNaoPadronizadaComum') {
|
||||
|
||||
$receitaMedicaNaoPadronizadaComum = new ReceitaMedicaNaoPadronizadaComumController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $receitaMedicaNaoPadronizadaComum($atendimentoId, true, $dados),
|
||||
'orientation' => 'L'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'receitaMedicaNaoPadronizadaEspecial') {
|
||||
|
||||
$receitaMedicaNaoPadronizadaEspecial = new ReceitaMedicaNaoPadronizadaEspecialController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $receitaMedicaNaoPadronizadaEspecial($atendimentoId, true, $dados),
|
||||
'orientation' => 'L'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'servicoAnaliseDiagnosticoTerapiaSolicitacaoExame') {
|
||||
|
||||
$servicoAnaliseDiagnosticoTerapiaSolicitacaoExame = new ServicoAnaliseDiagnosticoTerapiaSolicitacaoExameController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $servicoAnaliseDiagnosticoTerapiaSolicitacaoExame($atendimentoId, $dados),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'laudoMedicamentos') {
|
||||
|
||||
$laudoMedicamentos = new LaudoMedicamentosController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $laudoMedicamentos($atendimentoId, true, $dados),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'requisicaoExameCitopatologicoColoUtero') {
|
||||
|
||||
$requisicaoExameCitopatologicoColoUtero = new RequisicaoExameCitopatologicoColoUteroController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $requisicaoExameCitopatologicoColoUtero($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'requisicaoExameCitopatologicoMama') {
|
||||
|
||||
$requisicaoExameCitopatologicoMama = new RequisicaoExameCitopatologicoMamaController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $requisicaoExameCitopatologicoMama($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'requisicaoExameHistopatologicoMamografia') {
|
||||
|
||||
$requisicaoExameHistopatologicoMamografia = new RequisicaoExameHistopatologicoMamografiaController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $requisicaoExameHistopatologicoMamografia($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'requisicaoMamografia') {
|
||||
|
||||
$requisicaoMamografia = new RequisicaoMamografiaController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $requisicaoMamografia($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'fichaRequisicaoServicoAuxiliarDiagnoseTerapia') {
|
||||
|
||||
$fichaRequisicaoServicoAuxiliarDiagnoseTerapia = new FichaRequisicaoServicoAuxiliarDiagnoseTerapiaController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $fichaRequisicaoServicoAuxiliarDiagnoseTerapia($atendimentoId, $dados),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial') {
|
||||
|
||||
$laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial = new LaudoSolicitacaoAutorizacaoProcedimentoAmbulatorialController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial($atendimentoId, $dados),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
|
||||
if ($identificador === 'laudoMChatR') {
|
||||
|
||||
$laudoMChatR = new LaudoMChatRController();
|
||||
$pdfPaths[] = [
|
||||
'data' => $laudoMChatR($atendimentoId),
|
||||
'orientation' => 'P'
|
||||
];
|
||||
}
|
||||
});
|
||||
|
||||
return PhpMerge::mergePdfDocuments('Impressões', $pdfPaths);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\PuericulturaQuestionarioMChatR;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class LaudoMChatRController extends Controller
|
||||
{
|
||||
private const TITLE = 'LAUDO M-CHAT-R';
|
||||
private const TEMPLATE = 'ambulatorio.laudo-m-chat-r';
|
||||
|
||||
public function __invoke($atendimentoId, $soapId = null)
|
||||
{
|
||||
$laudos = collect();
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->when($soapId, fn ($q) => $q->where('id', $soapId))
|
||||
->whereHas('puericulturaQuestionarioMChatR')->get()->each(function ($soap) use (&$laudos) {
|
||||
$paciente = $soap->atendimento->paciente;
|
||||
|
||||
$questionario = PuericulturaQuestionarioMChatR::orderBy('id')->get()->map(function ($query) use ($soap) {
|
||||
$resposta = $soap->puericulturaQuestionarioMChatR()
|
||||
->where('questionario_m_chat_r_id', $query->id)
|
||||
->first();
|
||||
|
||||
return [
|
||||
'id' => $query->id,
|
||||
'descricao' => $query->descricao,
|
||||
'valor_resposta_sim' => $query->valor_resposta_sim,
|
||||
'valor_resposta_nao' => $query->valor_resposta_nao,
|
||||
'pergunta' => $query->descricao,
|
||||
'resposta' => $resposta->resposta,
|
||||
];
|
||||
});
|
||||
|
||||
$score = $questionario->reduce(function ($total, $query) {
|
||||
$valor = $query['resposta']
|
||||
? $query['valor_resposta_sim']
|
||||
: $query['valor_resposta_nao'];
|
||||
|
||||
return $total + $valor;
|
||||
}, 0);
|
||||
|
||||
$classificacao = null;
|
||||
|
||||
if ($score <= 2) {
|
||||
$classificacao = 'Baixo risco';
|
||||
} elseif ($score >= 3 && $score <= 7) {
|
||||
$classificacao = 'Risco moderado';
|
||||
} elseif ($score >= 8) {
|
||||
$classificacao = 'Alto risco';
|
||||
}
|
||||
|
||||
$laudos->push([
|
||||
'data_hora_atendimento' => $soap->created_at->format('d/m/Y \à\s H:i'),
|
||||
'paciente_nome' => $paciente->cidadao->nome,
|
||||
'paciente_idade' => $paciente->cidadao->idadeFormatada,
|
||||
'questionario' => $questionario,
|
||||
'score' => $score,
|
||||
'classificacao' => $classificacao,
|
||||
]);
|
||||
});
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('laudos'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,396 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Enums\Geral\MedidaTempo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class LaudoMedicamentosController extends Controller
|
||||
{
|
||||
private const TITLE = 'Laudo de Medicamentos (LME)';
|
||||
private const TEMPLATE = 'ambulatorio.laudo-medicamentos';
|
||||
|
||||
public static function getTemplate($atendimentoId, $dados = [])
|
||||
{
|
||||
|
||||
$receitas = collect();
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$receitas[] = self::getReceitasNaoSalvas($atendimentoId);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL);
|
||||
} else {
|
||||
|
||||
self::getAtendimento($atendimentoId, $receitas, $dados);
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => !$paraAssinaturaEletronica,
|
||||
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public static function getReceitasNaoSalvas($pacienteId) {
|
||||
|
||||
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
|
||||
|
||||
$medicamentos = request()->medicamentos;
|
||||
|
||||
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
|
||||
|
||||
$query
|
||||
->whereHas('soap', function ($query) {
|
||||
|
||||
$query->where('atendimento_id', request()->atendimento_id);
|
||||
});
|
||||
})
|
||||
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
|
||||
->first();
|
||||
|
||||
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
|
||||
$createdAt = $item->created_at;
|
||||
} else {
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
}
|
||||
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$medicamentos = [];
|
||||
|
||||
if (request()->has('multiple') && request()->multiple == true) {
|
||||
|
||||
foreach (request()->medicamentos as $solicitacao) {
|
||||
|
||||
$medicamentos[] = [
|
||||
'id' => uniqid(),
|
||||
'nome' => $solicitacao['material']['descricao'],
|
||||
'usoContinuo' => $solicitacao['is_uso_continuo'] == 'true' ? true : false,
|
||||
'imprimirSeparado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] == 'true' ? true : false,
|
||||
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
|
||||
'doseUnica' => $solicitacao['is_dose_unica'] == 'true' ? true : false,
|
||||
'livre' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']),
|
||||
'viaAdministracao' => $solicitacao['material']['via_administracao'] ?? '-',
|
||||
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset($solicitacao['posologia']) ? $solicitacao['posologia'] : null),
|
||||
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
|
||||
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id'])
|
||||
? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
|
||||
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : '',
|
||||
'quantidade' => self::calcularUso($solicitacao)
|
||||
];
|
||||
}
|
||||
} else {
|
||||
|
||||
$medicamentos[] = [
|
||||
'id' => uniqid(),
|
||||
'nome' => request()->material['descricao'],
|
||||
'usoContinuo' => request()->is_uso_continuo == 'true' ? true : false,
|
||||
'imprimirSeparado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado == 'true' ? true : false,
|
||||
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
|
||||
'doseUnica' => request()->is_dose_unica == 'true' ? true : false,
|
||||
'livre' => isset(request()->descricao) && !is_null(request()->descricao),
|
||||
'viaAdministracao' => request()->material['via_administracao'] ?? '-',
|
||||
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) ? request()->posologia : null),
|
||||
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
|
||||
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id)
|
||||
? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => request()->recomendacoes ?? '',
|
||||
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : ''
|
||||
];
|
||||
}
|
||||
|
||||
$medicamentos = collect($medicamentos)->sortBy('usoContinuo')->values();
|
||||
|
||||
$celular = $paciente->cidadao->telefones
|
||||
->filter(fn ($t) => Str::length($t->numero) === 11)->first()->numero ?? null;
|
||||
|
||||
return [
|
||||
'isEspecial' => true,
|
||||
'cid' => request()->cid ?? null,
|
||||
'diagnostico' => request()->diagnostico ? trim(preg_replace('/\s+/', ' ', strip_tags(request()->diagnostico))) : null,
|
||||
'anamnese' => request()->anamnese ? trim(preg_replace('/\s+/', ' ', strip_tags(request()->anamnese))) : null,
|
||||
'tratamento_previo' => [
|
||||
'status' => request()->tratamento_previo['status'],
|
||||
'relatar' => request()->tratamento_previo['relatar']
|
||||
],
|
||||
'profissional' => [
|
||||
'nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
'cns' => $currentLotacao->usuario->cidadao->cns,
|
||||
],
|
||||
'unidade' => [
|
||||
'cnes' => $currentLotacao->infraestrutura->unidade->cnes,
|
||||
'nome' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'endereco' => $currentLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'celular' => $celular ? MaskUtil::getPhoneMasked($celular) : null,
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : null,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'email' => $paciente->email ?? null,
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ? $paciente->cidadao->nome_mae : null,
|
||||
'is_raca_cor_branca' =>$paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
|
||||
'is_raca_cor_preta' =>$paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
|
||||
'is_raca_cor_parda' =>$paciente->cidadao->raca_cor_id === RacaCor::PARDA,
|
||||
'is_raca_cor_amarela' =>$paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
|
||||
'is_raca_cor_indigena' =>$paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
|
||||
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 20),
|
||||
'peso' => str_replace('.', ',' ,request()->peso),
|
||||
'altura' => request()->altura,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => request()->has('is_duplicated') && request()->is_duplicated == true
|
||||
? Carbon::parse($createdAt)->translatedFormat('d \de F \de Y')
|
||||
: Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
'data' => request()->has('is_duplicated') && request()->is_duplicated == true
|
||||
? Carbon::parse($createdAt)->translatedFormat('d/m/Y')
|
||||
: Carbon::now()->translatedFormat('d/m/Y'),
|
||||
],
|
||||
'medicamentos' => $medicamentos,
|
||||
];
|
||||
}
|
||||
|
||||
private static function calcularUso($medicamento)
|
||||
{
|
||||
$duracaoMedidaTempoId = $medicamento['duracao_medida_tempo_id'] ?? null;
|
||||
$intervaloMedidaTempoId = $medicamento['intervalo_medida_tempo_id'] ?? null;
|
||||
|
||||
$duracao = isset($medicamento['duracao']) ? (float) $medicamento['duracao'] : 0;
|
||||
$intervalo = isset($medicamento['intervalo']) ? (float) $medicamento['intervalo'] : 1;
|
||||
$frequenciaVezes = isset($medicamento['frequencia_vezes']) ? (int) $medicamento['frequencia_vezes'] : 1;
|
||||
$dose = isset($medicamento['dose']) ? (float) $medicamento['dose'] : 1;
|
||||
$materialQuantidade = isset($medicamento['material']['quantidade']) ? (float) $medicamento['material']['quantidade'] : 1;
|
||||
|
||||
if ($duracaoMedidaTempoId == MedidaTempo::SEMANAS) {
|
||||
$duracaoDias = $duracao * 7;
|
||||
} elseif ($duracaoMedidaTempoId == MedidaTempo::MESES) {
|
||||
$duracaoDias = $duracao * 30;
|
||||
} elseif ($duracaoMedidaTempoId == MedidaTempo::ANOS) {
|
||||
$duracaoDias = $duracao * 365;
|
||||
} else {
|
||||
$duracaoDias = $duracao; // padrão: dias
|
||||
}
|
||||
|
||||
if ($intervaloMedidaTempoId == MedidaTempo::SEMANAS) {
|
||||
$intervaloDias = $intervalo * 7;
|
||||
} elseif ($intervaloMedidaTempoId == MedidaTempo::MESES) {
|
||||
$intervaloDias = $intervalo * 30;
|
||||
} elseif ($intervaloMedidaTempoId == MedidaTempo::ANOS) {
|
||||
$intervaloDias = $intervalo * 365;
|
||||
} else {
|
||||
$intervaloDias = $intervalo;
|
||||
}
|
||||
|
||||
if ($intervaloDias <= 0) {
|
||||
$intervaloDias = 1;
|
||||
}
|
||||
|
||||
$totalDoses = ceil($duracaoDias / $intervaloDias) * $frequenciaVezes * $dose;
|
||||
$duracaoMeses = round($duracaoDias / 30, 2);
|
||||
|
||||
$mesesCompletos = floor($duracaoDias / 30);
|
||||
$diasRestantes = $duracaoDias - ($mesesCompletos * 30);
|
||||
|
||||
$usoPorMes = [];
|
||||
|
||||
for ($i = 1; $i <= $mesesCompletos; $i++) {
|
||||
$usoPorMes["mes_{$i}"] = ceil(30 / $intervaloDias) * $frequenciaVezes * $dose;
|
||||
}
|
||||
|
||||
if ($diasRestantes > 0) {
|
||||
$usoPorMes["mes_" . ($mesesCompletos + 1)] = ceil($diasRestantes / $intervaloDias) * $frequenciaVezes * $dose / $materialQuantidade;
|
||||
}
|
||||
|
||||
return [
|
||||
'total_doses' => $totalDoses,
|
||||
'duracao_meses' => $duracaoMeses,
|
||||
'uso_por_mes' => $usoPorMes,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getAtendimentoProblemasCondicoes($soap)
|
||||
{
|
||||
$problemasCondicoes = $soap->problemasCondicoes()
|
||||
->with([
|
||||
'cid:id,codigo,nome',
|
||||
])
|
||||
->first([
|
||||
'cid_id',
|
||||
]);
|
||||
|
||||
return $problemasCondicoes['cid']['codigo'];
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, $receitas, $dados = []) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$celular = $paciente->cidadao->telefones
|
||||
->filter(fn ($t) => Str::length($t->numero) === 11)->first()->numero ?? null;
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()
|
||||
->filter(fn ($soap) => self::requiredFieldAtendimento($soap))
|
||||
->each(fn ($soap) => $soap->prescricoesMedicamentos->each(fn ($prescricaoMedicamento) => $receitas
|
||||
->push([
|
||||
'isEspecial' => true,
|
||||
'diagnostico' => $soap->prescricoesMedicamentos->first()->diagnostico,
|
||||
'anamnese' => $soap->prescricoesMedicamentos->first()->anamnese,
|
||||
'tratamento_previo' => [
|
||||
'status' => $soap->prescricoesMedicamentos->first()->tratamento_previo_status,
|
||||
'relatar' => $soap->prescricoesMedicamentos->first()->tratamento_previo_relatar,
|
||||
],
|
||||
'cid' => self::getAtendimentoProblemasCondicoes($soap),
|
||||
'profissional' => [
|
||||
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
|
||||
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
|
||||
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
|
||||
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
'cns' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->cns,
|
||||
],
|
||||
'unidade' => [
|
||||
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
|
||||
'cnes' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnes,
|
||||
'nome' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'celular' => $celular ? MaskUtil::getPhoneMasked($celular) : null,
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : null,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'email' => $paciente->email ?? null,
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ? $paciente->cidadao->nome_mae : null,
|
||||
'is_raca_cor_branca' =>$paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
|
||||
'is_raca_cor_preta' =>$paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
|
||||
'is_raca_cor_parda' =>$paciente->cidadao->raca_cor_id === RacaCor::PARDA,
|
||||
'is_raca_cor_amarela' =>$paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
|
||||
'is_raca_cor_indigena' =>$paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
|
||||
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 20),
|
||||
'peso' => str_replace('.', ',' , DB::table('ambulatorio_atendimento_antropometria')
|
||||
->where('soap_id', $soap->id)
|
||||
->value('peso')
|
||||
),
|
||||
'altura' => DB::table('ambulatorio_atendimento_antropometria')
|
||||
->where('soap_id', $soap->id)
|
||||
->value('altura'),
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
|
||||
'data' => Carbon::parse($prescricaoMedicamento->created_at)->translatedFormat('d/m/Y')
|
||||
],
|
||||
'medicamentos' => $prescricaoMedicamento->itens
|
||||
->whereNotIn('material.receita_tipo_id', [
|
||||
TipoReceita::COMUM
|
||||
])
|
||||
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
|
||||
->map(fn ($item) => [
|
||||
'id' => $item->id,
|
||||
'nome' => $item->material->descricao
|
||||
?? ($item->descricao ?? ''),
|
||||
'usoContinuo' => $item->is_uso_continuo,
|
||||
'imprimirSeparado' => $item->is_imprimir_separado,
|
||||
'removerImpressao' => $item->is_remover_impressao,
|
||||
'doseUnica' => $item->is_dose_unica,
|
||||
'livre' => !is_null($item->descricao),
|
||||
'viaAdministracao' => $item->material->viaAdministracao->nome ?? '-',
|
||||
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
|
||||
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
|
||||
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'descricao' => $item->descricao ?? '',
|
||||
'quantidade' => self::calcularUso($item)
|
||||
])
|
||||
->sortBy('usoContinuo')
|
||||
->values(),
|
||||
])
|
||||
));
|
||||
}
|
||||
|
||||
private static function requiredFieldAtendimento($soap)
|
||||
{
|
||||
|
||||
$peso = DB::table('ambulatorio_atendimento_antropometria')
|
||||
->where('soap_id', $soap->id)
|
||||
->value('peso');
|
||||
|
||||
$altura = DB::table('ambulatorio_atendimento_antropometria')
|
||||
->where('soap_id', $soap->id)
|
||||
->value('altura');
|
||||
|
||||
$diagnostico = $soap->avaliacao_descricao
|
||||
? trim(preg_replace('/\s+/', ' ', strip_tags($soap->avaliacao_descricao)))
|
||||
: null;
|
||||
|
||||
|
||||
|
||||
$cid = collect(self::getAtendimentoProblemasCondicoes($soap))->first();
|
||||
|
||||
if ($peso && $altura && $diagnostico && $cid) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId, $output = null, $dados = [])
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
|
||||
|
||||
return $output
|
||||
? $pdf->output(self::getTemplate($atendimentoId, $dados))
|
||||
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,471 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Enums\Sigtap\Complexidade;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\ClassificacaoRisco;
|
||||
use App\Models\Ambulatorio\ParametrizacaoAtendimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class LaudoSolicitacaoAutorizacaoProcedimentoAmbulatorialController extends Controller
|
||||
{
|
||||
public function __invoke($atendimentoId, $dados = [])
|
||||
{
|
||||
if (request()->dados) {
|
||||
return self::imprimeNaoSalvo();
|
||||
}
|
||||
|
||||
if (!isset($dados['itens'])) {
|
||||
|
||||
$dados['itens'] = request()->itens;
|
||||
}
|
||||
|
||||
$solicitacoesExames = [];
|
||||
$solicitacoesProcedimentosCirurgicos = [];
|
||||
|
||||
$impressao = null;
|
||||
|
||||
$parametrizacao = ParametrizacaoAtendimento::first();
|
||||
$isEspecifico = !is_null($parametrizacao) && $parametrizacao->modelo_impressao_apac === 'especifico';
|
||||
|
||||
$regulacaoData = self::getRegulacaoData();
|
||||
|
||||
DB::table('ambulatorio_atendimento_soap_solicitacao_exame_item')
|
||||
->select([
|
||||
'ambulatorio_atendimento_soap_solicitacao_exame_item.solicitacao_exame_id',
|
||||
'cadastro_unidade.nome_fantasia AS estabelecimento_saude_solicitante_nome',
|
||||
'cadastro_unidade.cnes AS estabelecimento_saude_solicitante_cnes',
|
||||
'cadastro_cidadao.nome AS paciente_nome',
|
||||
'cadastro_cidadao.nome_social AS paciente_nome_social',
|
||||
DB::raw("
|
||||
CASE cadastro_cidadao.sexo_id WHEN " . Sexo::MASCULINO . " THEN
|
||||
'M'
|
||||
WHEN " . Sexo::FEMININO . " THEN
|
||||
'F'
|
||||
ELSE
|
||||
NULL
|
||||
END AS paciente_sexo
|
||||
"),
|
||||
'cadastro_paciente.prontuario AS paciente_prontuario',
|
||||
'cadastro_cidadao.cns AS paciente_cns',
|
||||
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"),
|
||||
'cadastro_raca_cor.descricao AS paciente_raca_cor',
|
||||
'cadastro_cidadao.nome_mae AS paciente_nome_mae',
|
||||
DB::raw("
|
||||
(
|
||||
SELECT numero
|
||||
FROM cadastro_cidadao_telefone
|
||||
WHERE cadastro_cidadao_telefone.cidadao_id = cadastro_cidadao.id
|
||||
AND cadastro_cidadao_telefone.principal = TRUE
|
||||
AND cadastro_cidadao_telefone.DELETED_AT IS NULL
|
||||
LIMIT 1
|
||||
) AS paciente_telefone
|
||||
"),
|
||||
DB::raw("
|
||||
CONCAT(
|
||||
cadastro_logradouro_tipo.descricao,
|
||||
', ',
|
||||
cadastro_logradouro.nome,
|
||||
', ',
|
||||
CASE WHEN cadastro_endereco.numero IS NULL THEN 'S/N' ELSE cadastro_endereco.numero END,
|
||||
', ',
|
||||
cadastro_bairro.nome
|
||||
) AS paciente_rua_numero_bairro
|
||||
"),
|
||||
'cadastro_municipio.nome AS paciente_municipio_residencia',
|
||||
'cadastro_municipio.ibge AS paciente_codigo_ibge_municipio',
|
||||
'cadastro_estado.uf AS paciente_uf',
|
||||
'cadastro_logradouro.cep AS paciente_cep',
|
||||
'ambulatorio_atendimento_soap_solicitacao_exame_item.id AS solicitacao_exame_item_id',
|
||||
'parametrizacao_exame.codigo AS exame_codigo',
|
||||
'parametrizacao_exame.nome AS exame_nome',
|
||||
'ambulatorio_atendimento_soap_solicitacao_exame.justificativa AS justificativa_procedimento_solicitado_descricao_diagnostico',
|
||||
'cid.codigo AS justificativa_procedimento_solicitado_cid_codigo',
|
||||
'cid.nome AS justificativa_procedimento_solicitado_cid_nome',
|
||||
'geral_ciap.codigo AS observacao_procedimento_solicitado_ciap_codigo',
|
||||
'geral_ciap.descricao AS observacao_procedimento_solicitado_ciap_descricao',
|
||||
'ambulatorio_atendimento_soap_solicitacao_exame.observacao AS justificativa_procedimento_solicitado_observacoes',
|
||||
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
|
||||
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
|
||||
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
|
||||
DB::raw("DATE_FORMAT(ambulatorio_atendimento_soap_solicitacao_exame.created_at, '%d/%m/%Y') AS solicitacao_data_solicitacao"),
|
||||
DB::raw("CASE WHEN cadastro_cidadao_usuario.cns IS NOT NULL THEN 'cns' ELSE 'cpf' END AS solicitacao_documento"),
|
||||
DB::raw("CASE WHEN cadastro_cidadao_usuario.cns IS NOT NULL THEN cadastro_cidadao_usuario.cns ELSE cadastro_cidadao_usuario.cpf END AS solicitacao_numero_documento"),
|
||||
'ambulatorio_classificacao_risco.descricao_encaminhamento AS classificacao_risco_descricao_encaminhamento'
|
||||
])
|
||||
->join('ambulatorio_atendimento_soap_solicitacao_exame', 'ambulatorio_atendimento_soap_solicitacao_exame.id', 'ambulatorio_atendimento_soap_solicitacao_exame_item.solicitacao_exame_id')
|
||||
->join('ambulatorio_atendimento_soap', 'ambulatorio_atendimento_soap.id', 'ambulatorio_atendimento_soap_solicitacao_exame.soap_id')
|
||||
->join('ambulatorio_atendimento', 'ambulatorio_atendimento.id', 'ambulatorio_atendimento_soap.atendimento_id')
|
||||
->join('parametrizacao_exame', 'parametrizacao_exame.id', 'ambulatorio_atendimento_soap_solicitacao_exame_item.exame_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'ambulatorio_atendimento_soap_solicitacao_exame.created_centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->leftJoin('ambulatorio_agendamento', 'ambulatorio_agendamento.id', 'ambulatorio_atendimento.agendamento_id')
|
||||
->leftJoin('ambulatorio_demanda_espontanea', 'ambulatorio_demanda_espontanea.id', 'ambulatorio_atendimento.demanda_espontanea_id')
|
||||
->leftJoin('cadastro_paciente', 'cadastro_paciente.id', DB::raw("COALESCE(ambulatorio_agendamento.paciente_id, ambulatorio_demanda_espontanea.paciente_id)"))
|
||||
->leftJoin('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->leftJoin('cadastro_raca_cor', 'cadastro_raca_cor.id', 'cadastro_cidadao.raca_cor_id')
|
||||
->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id')
|
||||
->leftJoin('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
|
||||
->leftJoin('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id')
|
||||
->leftJoin('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id')
|
||||
->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id')
|
||||
->leftJoin('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_logradouro.municipio_id')
|
||||
->leftJoin('intranet.cadastro_estado', 'cadastro_estado.id', 'cadastro_municipio.estado_id')
|
||||
->leftJoin('sigtap.cid', 'cid.id', 'ambulatorio_atendimento_soap_solicitacao_exame.cid_id')
|
||||
->leftJoin('geral_ciap', 'geral_ciap.id', 'ambulatorio_atendimento_soap_solicitacao_exame.ciap_id')
|
||||
->leftJoin('cadastro_lotacao', 'cadastro_lotacao.id', 'ambulatorio_atendimento_soap_solicitacao_exame.created_lotacao_id')
|
||||
->leftJoin('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
|
||||
->leftJoin('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id')
|
||||
->leftJoin('ambulatorio_classificacao_risco', 'ambulatorio_classificacao_risco.id', 'ambulatorio_atendimento_soap_solicitacao_exame.classificacao_risco_id')
|
||||
->where('ambulatorio_atendimento_soap.is_rascunho', false)
|
||||
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q
|
||||
->where('ambulatorio_atendimento_soap_solicitacao_exame_item.id', request()->solicitacao_exame_item_id))
|
||||
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('ambulatorio_atendimento_soap.id', $id))
|
||||
->when($regulacaoData['exames_ids'], fn ($q, $ids) => $q->whereIn('parametrizacao_exame.id', $ids))
|
||||
->when(isset($dados['itens']), fn ($q) => $q->whereIn('ambulatorio_atendimento_soap_solicitacao_exame_item.id', collect($dados['itens'])->where('origem', 'exame')->pluck('id')))
|
||||
->whereExists(function($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('sigtap.procedimento')
|
||||
->where('complexidade', Complexidade::ALTA_COMPLEXIDADE)
|
||||
->whereColumn('procedimento.codigo', 'parametrizacao_exame.codigo')
|
||||
->orderByDesc('competencia_id')
|
||||
->limit(1);
|
||||
})
|
||||
->where('ambulatorio_atendimento.id', $atendimentoId)
|
||||
->get()
|
||||
->each(function($query) use (&$solicitacoesExames, $isEspecifico) {
|
||||
$solicitacoesExames[$query->solicitacao_exame_id] = [
|
||||
'logotipo' => base64_encode(file_get_contents(public_path('images/laudo-solicitacao-autorizacao-procedimento-ambulatorial.blade.png'))),
|
||||
'estabelecimento_saude_solicitante' => [
|
||||
'nome' => $query->estabelecimento_saude_solicitante_nome,
|
||||
'cnes' => Str::padRight($query->estabelecimento_saude_solicitante_cnes, 7),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $query->paciente_nome,
|
||||
'nome_social' => $query->paciente_nome_social,
|
||||
'sexo' => $query->paciente_sexo,
|
||||
'prontuario' => $query->paciente_prontuario,
|
||||
'cns' => Str::padRight($query->paciente_cns, 15),
|
||||
'data_nascimento' => $query->paciente_data_nascimento,
|
||||
'raca_cor' => $query->paciente_raca_cor,
|
||||
'nome_mae' => $query->paciente_nome_mae,
|
||||
'telefone' => Str::padRight($query->paciente_telefone, 10),
|
||||
'rua_numero_bairro' => $query->paciente_rua_numero_bairro,
|
||||
'municipio_residencia' => $query->paciente_municipio_residencia,
|
||||
'codigo_ibge_municipio' => $query->paciente_codigo_ibge_municipio,
|
||||
'uf' => Str::padRight($query->paciente_uf, 2),
|
||||
'cep' => Str::padRight($query->paciente_cep, 8),
|
||||
],
|
||||
'itens' => [],
|
||||
'justificativa_procedimento_solicitado' => [
|
||||
'descricao_diagnostico' => Str::substr(
|
||||
($isEspecifico && $query->classificacao_risco_descricao_encaminhamento
|
||||
? "Classificação de risco: {$query->classificacao_risco_descricao_encaminhamento}. " : ''
|
||||
) . $query->justificativa_procedimento_solicitado_descricao_diagnostico,
|
||||
0,
|
||||
290
|
||||
),
|
||||
'cid_codigo' => $query->justificativa_procedimento_solicitado_cid_codigo,
|
||||
'cid_nome' => $query->justificativa_procedimento_solicitado_cid_nome,
|
||||
'ciap_codigo' => $query->observacao_procedimento_solicitado_ciap_codigo,
|
||||
'ciap_descricao' => $query->observacao_procedimento_solicitado_ciap_descricao,
|
||||
'observacoes' => (!$isEspecifico && $query->classificacao_risco_descricao_encaminhamento
|
||||
? "Classificação de risco: {$query->classificacao_risco_descricao_encaminhamento}. " : ''
|
||||
) . $query->justificativa_procedimento_solicitado_observacoes,
|
||||
],
|
||||
'solicitacao' => [
|
||||
'nome_profissional_solicitante' => $query->solicitacao_nome_profissional_solicitante,
|
||||
'data_solicitacao' => $query->solicitacao_data_solicitacao,
|
||||
'documento' => $query->solicitacao_documento,
|
||||
'numero_documento' => Str::padRight($query->solicitacao_numero_documento, 15),
|
||||
],
|
||||
];
|
||||
})
|
||||
->each(function($query) use (&$solicitacoesExames) {
|
||||
$solicitacoesExames[$query->solicitacao_exame_id]['itens'][] = [
|
||||
'codigo' => Str::padRight($query->exame_codigo, 10),
|
||||
'nome' => $query->exame_nome,
|
||||
'quantidade' => 1,
|
||||
];
|
||||
});
|
||||
|
||||
if (!isset(request()->solicitacao_exame_item_id) && !$regulacaoData['exames_ids']) {
|
||||
|
||||
DB::table('ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item')
|
||||
->select([
|
||||
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.solicitacao_proc_cirurgico_id',
|
||||
'cadastro_unidade.nome_fantasia AS estabelecimento_saude_solicitante_nome',
|
||||
'cadastro_unidade.cnes AS estabelecimento_saude_solicitante_cnes',
|
||||
'cadastro_cidadao.nome AS paciente_nome',
|
||||
'cadastro_cidadao.nome_social AS paciente_nome_social',
|
||||
DB::raw("
|
||||
CASE cadastro_cidadao.sexo_id WHEN " . Sexo::MASCULINO . " THEN
|
||||
'M'
|
||||
WHEN " . Sexo::FEMININO . " THEN
|
||||
'F'
|
||||
ELSE
|
||||
NULL
|
||||
END AS paciente_sexo
|
||||
"),
|
||||
'cadastro_paciente.prontuario AS paciente_prontuario',
|
||||
'cadastro_cidadao.cns AS paciente_cns',
|
||||
DB::raw("DATE_FORMAT(cadastro_cidadao.data_nascimento, '%d/%m/%Y') AS paciente_data_nascimento"),
|
||||
'cadastro_raca_cor.descricao AS paciente_raca_cor',
|
||||
'cadastro_cidadao.nome_mae AS paciente_nome_mae',
|
||||
DB::raw("
|
||||
(
|
||||
SELECT numero
|
||||
FROM cadastro_cidadao_telefone
|
||||
WHERE cadastro_cidadao_telefone.cidadao_id = cadastro_cidadao.id
|
||||
AND cadastro_cidadao_telefone.principal = TRUE
|
||||
LIMIT 1
|
||||
) AS paciente_telefone
|
||||
"),
|
||||
DB::raw("
|
||||
CONCAT(
|
||||
cadastro_logradouro_tipo.descricao,
|
||||
', ',
|
||||
cadastro_logradouro.nome,
|
||||
', ',
|
||||
CASE WHEN cadastro_endereco.numero IS NULL THEN 'S/N' ELSE cadastro_endereco.numero END,
|
||||
', ',
|
||||
cadastro_bairro.nome
|
||||
) AS paciente_rua_numero_bairro
|
||||
"),
|
||||
'cadastro_municipio.nome AS paciente_municipio_residencia',
|
||||
'cadastro_municipio.ibge AS paciente_codigo_ibge_municipio',
|
||||
'cadastro_estado.uf AS paciente_uf',
|
||||
'cadastro_logradouro.cep AS paciente_cep',
|
||||
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.id AS solicitacao_proc_cirurgico_item_id',
|
||||
'parametrizacao_procedimento_cirurgico.procedimento_codigo AS procedimento_cirurgico_codigo',
|
||||
'parametrizacao_procedimento_cirurgico.nome AS procedimento_cirurgico_nome',
|
||||
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.justificativa AS justificativa_procedimento_solicitado_descricao_diagnostico',
|
||||
'cid.codigo AS justificativa_procedimento_solicitado_cid_codigo',
|
||||
'cid.nome AS justificativa_procedimento_solicitado_cid_nome',
|
||||
'geral_ciap.codigo AS observacao_procedimento_solicitado_ciap_codigo',
|
||||
'geral_ciap.descricao AS observacao_procedimento_solicitado_ciap_descricao',
|
||||
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.observacao AS justificativa_procedimento_solicitado_observacoes',
|
||||
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
|
||||
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
|
||||
'cadastro_cidadao_usuario.nome AS solicitacao_nome_profissional_solicitante',
|
||||
DB::raw("DATE_FORMAT(ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.created_at, '%d/%m/%Y') AS solicitacao_data_solicitacao"),
|
||||
DB::raw("CASE WHEN cadastro_cidadao_usuario.cns IS NOT NULL THEN 'cns' ELSE 'cpf' END AS solicitacao_documento"),
|
||||
DB::raw("CASE WHEN cadastro_cidadao_usuario.cns IS NOT NULL THEN cadastro_cidadao_usuario.cns ELSE cadastro_cidadao_usuario.cpf END AS solicitacao_numero_documento"),
|
||||
'ambulatorio_classificacao_risco.descricao_encaminhamento AS classificacao_risco_descricao_encaminhamento'
|
||||
])
|
||||
->join('ambulatorio_atendimento_soap_solicitacao_proc_cirurgico', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.solicitacao_proc_cirurgico_id')
|
||||
->join('ambulatorio_atendimento_soap', 'ambulatorio_atendimento_soap.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.soap_id')
|
||||
->join('ambulatorio_atendimento', 'ambulatorio_atendimento.id', 'ambulatorio_atendimento_soap.atendimento_id')
|
||||
->join('parametrizacao_procedimento_cirurgico', 'parametrizacao_procedimento_cirurgico.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.procedimento_cirurgico_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.created_centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->leftJoin('ambulatorio_agendamento', 'ambulatorio_agendamento.id', 'ambulatorio_atendimento.agendamento_id')
|
||||
->leftJoin('ambulatorio_demanda_espontanea', 'ambulatorio_demanda_espontanea.id', 'ambulatorio_atendimento.demanda_espontanea_id')
|
||||
->leftJoin('cadastro_paciente', 'cadastro_paciente.id', DB::raw("COALESCE(ambulatorio_agendamento.paciente_id, ambulatorio_demanda_espontanea.paciente_id)"))
|
||||
->leftJoin('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->leftJoin('cadastro_raca_cor', 'cadastro_raca_cor.id', 'cadastro_cidadao.raca_cor_id')
|
||||
->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id')
|
||||
->leftJoin('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
|
||||
->leftJoin('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id')
|
||||
->leftJoin('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id')
|
||||
->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id')
|
||||
->leftJoin('intranet.cadastro_municipio', 'cadastro_municipio.id', 'cadastro_logradouro.municipio_id')
|
||||
->leftJoin('intranet.cadastro_estado', 'cadastro_estado.id', 'cadastro_municipio.estado_id')
|
||||
->leftJoin('sigtap.cid', 'cid.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.cid_id')
|
||||
->leftJoin('geral_ciap', 'geral_ciap.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.ciap_id')
|
||||
->leftJoin('cadastro_lotacao', 'cadastro_lotacao.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.created_lotacao_id')
|
||||
->leftJoin('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
|
||||
->leftJoin('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id')
|
||||
->leftJoin('ambulatorio_classificacao_risco', 'ambulatorio_classificacao_risco.id', 'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico.classificacao_risco_id')
|
||||
->where('ambulatorio_atendimento_soap.is_rascunho', false)
|
||||
->when(isset($dados['itens']), fn ($q) => $q->whereIn('ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item.id', collect($dados['itens'])->where('origem', 'procedimento_cirurgico')->pluck('id')))
|
||||
->whereExists(function($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('sigtap.procedimento')
|
||||
->where('complexidade', Complexidade::ALTA_COMPLEXIDADE)
|
||||
->whereColumn('procedimento.codigo', 'parametrizacao_procedimento_cirurgico.procedimento_codigo')
|
||||
->orderByDesc('competencia_id')
|
||||
->limit(1);
|
||||
})
|
||||
->where('ambulatorio_atendimento.id', $atendimentoId)
|
||||
->get()
|
||||
->each(function($query) use (&$solicitacoesProcedimentosCirurgicos, $isEspecifico) {
|
||||
$solicitacoesProcedimentosCirurgicos[$query->solicitacao_proc_cirurgico_id] = [
|
||||
'logotipo' => base64_encode(file_get_contents(public_path('images/laudo-solicitacao-autorizacao-procedimento-ambulatorial.blade.png'))),
|
||||
'estabelecimento_saude_solicitante' => [
|
||||
'nome' => $query->estabelecimento_saude_solicitante_nome,
|
||||
'cnes' => Str::padRight($query->estabelecimento_saude_solicitante_cnes, 7),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $query->paciente_nome,
|
||||
'nome_social' => $query->paciente_nome_social,
|
||||
'sexo' => $query->paciente_sexo,
|
||||
'prontuario' => $query->paciente_prontuario,
|
||||
'cns' => Str::padRight($query->paciente_cns, 15),
|
||||
'data_nascimento' => $query->paciente_data_nascimento,
|
||||
'raca_cor' => $query->paciente_raca_cor,
|
||||
'nome_mae' => $query->paciente_nome_mae,
|
||||
'telefone' => Str::padRight($query->paciente_telefone, 10),
|
||||
'rua_numero_bairro' => $query->paciente_rua_numero_bairro,
|
||||
'municipio_residencia' => $query->paciente_municipio_residencia,
|
||||
'codigo_ibge_municipio' => $query->paciente_codigo_ibge_municipio,
|
||||
'uf' => Str::padRight($query->paciente_uf, 2),
|
||||
'cep' => Str::padRight($query->paciente_cep, 8),
|
||||
],
|
||||
'itens' => [],
|
||||
'justificativa_procedimento_solicitado' => [
|
||||
'descricao_diagnostico' => Str::substr(
|
||||
($isEspecifico && $query->classificacao_risco_descricao_encaminhamento
|
||||
? "Classificação de risco: {$query->classificacao_risco_descricao_encaminhamento}. " : ''
|
||||
) . $query->justificativa_procedimento_solicitado_descricao_diagnostico,
|
||||
0,
|
||||
280
|
||||
),
|
||||
'cid_codigo' => $query->justificativa_procedimento_solicitado_cid_codigo,
|
||||
'cid_nome' => $query->justificativa_procedimento_solicitado_cid_nome,
|
||||
'ciap_codigo' => $query->observacao_procedimento_solicitado_ciap_codigo,
|
||||
'ciap_descricao' => $query->observacao_procedimento_solicitado_ciap_descricao,
|
||||
'observacoes' => (!$isEspecifico && $query->classificacao_risco_descricao_encaminhamento
|
||||
? "Classificação de risco: {$query->classificacao_risco_descricao_encaminhamento}. " : ''
|
||||
) . $query->justificativa_procedimento_solicitado_observacoes,
|
||||
],
|
||||
'solicitacao' => [
|
||||
'nome_profissional_solicitante' => $query->solicitacao_nome_profissional_solicitante,
|
||||
'data_solicitacao' => $query->solicitacao_data_solicitacao,
|
||||
'documento' => $query->solicitacao_documento,
|
||||
'numero_documento' => Str::padRight($query->solicitacao_numero_documento, 15),
|
||||
],
|
||||
];
|
||||
})
|
||||
->each(function($query) use (&$solicitacoesProcedimentosCirurgicos) {
|
||||
$solicitacoesProcedimentosCirurgicos[$query->solicitacao_proc_cirurgico_id]['itens'][] = [
|
||||
'codigo' => Str::padRight($query->procedimento_cirurgico_codigo, 10),
|
||||
'nome' => $query->procedimento_cirurgico_nome,
|
||||
'quantidade' => 1,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
if ($isEspecifico) {
|
||||
$impressao = 'impressoes.template.ambulatorio.laudo-solicitacao-autorizacao-procedimento-ambulatorial-especifico';
|
||||
} else {
|
||||
$impressao = 'impressoes.template.ambulatorio.laudo-solicitacao-autorizacao-procedimento-ambulatorial-padrao';
|
||||
}
|
||||
|
||||
$solicitacoes = collect($solicitacoesExames)->concat(collect($solicitacoesProcedimentosCirurgicos))->all();
|
||||
|
||||
return SnappyPdf::loadView($impressao, compact('solicitacoes'))
|
||||
->setOption('header-html', '')
|
||||
->setOption('footer-html', '')
|
||||
->setOption('margin-top', '10')
|
||||
->setOption('margin-bottom', '10')
|
||||
->setOption('margin-left', '10')
|
||||
->setOption('margin-right', '10')
|
||||
->inline();
|
||||
}
|
||||
|
||||
private function getRegulacaoData()
|
||||
{
|
||||
$regulacaoData = [
|
||||
'soap_id' => null,
|
||||
'exames_ids' => null,
|
||||
];
|
||||
|
||||
if (request()->regulacao_solicitacao_id) {
|
||||
|
||||
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
|
||||
|
||||
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
|
||||
$regulacaoData['exames_ids'] = $regulacaoSolicitacao->itens()->pluck('exame_id');
|
||||
}
|
||||
|
||||
return $regulacaoData;
|
||||
}
|
||||
|
||||
private function imprimeNaoSalvo()
|
||||
{
|
||||
$parametrizacao = ParametrizacaoAtendimento::first();
|
||||
$isEspecifico = !is_null($parametrizacao) && $parametrizacao->modelo_impressao_apac === 'especifico';
|
||||
$paciente = Paciente::find(request()->dados['paciente_id']);
|
||||
$centroCustoLogado = self::getCurrentCentroCusto();
|
||||
$usuarioLogado = self::getCurrentLotacao()->usuario;
|
||||
$ruaNumeroBairro = isset($paciente->cidadao->domicilio->endereco) ? $paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao . ' ' . $paciente->cidadao->domicilio->endereco->logradouro->nome . ', ' . $paciente->cidadao->domicilio->endereco->numero . ' - ' . $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome : '-';
|
||||
$classificacaoRisco = ClassificacaoRisco::findOrFail(request()->dados['classificacao_risco_id'])->descricao_encaminhamento ?? null;
|
||||
|
||||
$solicitacoes[request()->dados['exame_id'] ?? request()->dados['procedimento_cirurgico_id']] = [
|
||||
'logotipo' => base64_encode(file_get_contents(public_path('images/laudo-solicitacao-autorizacao-procedimento-ambulatorial.blade.png'))),
|
||||
'estabelecimento_saude_solicitante' => [
|
||||
'nome' => $centroCustoLogado->infraestrutura->unidade->nome_fantasia,
|
||||
'cnes' => Str::padRight($centroCustoLogado->infraestrutura->unidade->cnes, 7),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'sexo' => $paciente->cidadao->sexo->descricao === Sexo::MASCULINO ? 'M' : 'F',
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => Str::padRight($paciente->cidadao->cns, 15),
|
||||
'data_nascimento' => isset($paciente->cidadao->data_nascimento) ? $paciente->cidadao->data_nascimento->format('d/m/Y') : '',
|
||||
'raca_cor' => $paciente->cidadao->racaCor->descricao,
|
||||
'nome_mae' => $paciente->cidadao->nome_mae,
|
||||
'telefone' => $paciente->cidadao->telefones->isNotEmpty() ? (strlen($paciente->cidadao->telefones[0]->numero) === 10 ? Str::padRight($paciente->cidadao->telefones[0]->numero, 10) : Str::padRight($paciente->cidadao->telefones[0]->numero, 11)) : ' ',
|
||||
'rua_numero_bairro' => $ruaNumeroBairro,
|
||||
'municipio_residencia' => isset($paciente->cidadao->domicilio->endereco) ? $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome : '',
|
||||
'codigo_ibge_municipio' => isset($paciente->cidadao->domicilio->endereco) ? $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge : '',
|
||||
'uf' => isset($paciente->cidadao->domicilio->endereco) ? Str::padRight($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf, 2) : ' ',
|
||||
'cep' => isset($paciente->cidadao->domicilio->endereco) ? Str::padRight($paciente->cidadao->domicilio->endereco->logradouro->cep, 8) : ' ',
|
||||
],
|
||||
'justificativa_procedimento_solicitado' => [
|
||||
'descricao_diagnostico' => Str::substr(($isEspecifico && $classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . request()->dados['justificativa_procedimento_solicitado_descricao_diagnostico'], 0, 280),
|
||||
'cid_codigo' => request()->dados['justificativa_procedimento_solicitado_cid_codigo'],
|
||||
'cid_nome' => request()->dados['justificativa_procedimento_solicitado_cid_nome'],
|
||||
'ciap_codigo' => request()->dados['observacao_procedimento_solicitado_ciap_codigo'],
|
||||
'ciap_descricao' => request()->dados['observacao_procedimento_solicitado_ciap_descricao'],
|
||||
'observacoes' => (!$isEspecifico && $classificacaoRisco ? "Classificação de risco: {$classificacaoRisco}. " : '') . request()->dados['justificativa_procedimento_solicitado_observacoes'],
|
||||
],
|
||||
'solicitacao' => [
|
||||
'nome_profissional_solicitante' => $usuarioLogado->cidadao->nome,
|
||||
'data_solicitacao' => Carbon::now()->format('d/m/Y'),
|
||||
'documento' => $usuarioLogado->cidadao->cpf ? 'cpf' : 'cns',
|
||||
'numero_documento' => Str::padRight($usuarioLogado->cidadao->cpf ?? $usuarioLogado->cidadao->cns, 15),
|
||||
],
|
||||
'itens' => [
|
||||
[
|
||||
'codigo' => Str::padRight(request()->dados['exame_codigo'] ?? request()->dados['procedimento_cirurgico_codigo'], 10),
|
||||
'nome' => request()->dados['exame_nome'] ?? request()->dados['procedimento_cirurgico_nome'],
|
||||
'quantidade' => 1,
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
if ($isEspecifico) {
|
||||
$impressao = 'impressoes.template.ambulatorio.laudo-solicitacao-autorizacao-procedimento-ambulatorial-especifico';
|
||||
} else {
|
||||
$impressao = 'impressoes.template.ambulatorio.laudo-solicitacao-autorizacao-procedimento-ambulatorial-padrao';
|
||||
}
|
||||
|
||||
AtendimentoService::saveLogImpressao(
|
||||
request()->dados['atendimento_id'],
|
||||
AtendimentoImpressaoTipo::LAUDO_PARA_SOLICITACAO_AUTORIZACAO_DE_PROCEDIMENTO_AMBULATORIAL
|
||||
);
|
||||
|
||||
return SnappyPdf::loadView($impressao, compact('solicitacoes'))
|
||||
->setOption('header-html', '')
|
||||
->setOption('footer-html', '')
|
||||
->setOption('margin-top', '10')
|
||||
->setOption('margin-bottom', '10')
|
||||
->setOption('margin-left', '10')
|
||||
->setOption('margin-right', '10')
|
||||
->inline();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\AgendamentoStatus;
|
||||
use App\Models\Ambulatorio\AgendamentoTipo;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Services\Ambulatorio\AgendamentoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class ListaAgendamentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'LISTA DE AGENDAMENTOS';
|
||||
private const TEMPLATE = 'ambulatorio.lista-agendamento';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$agendamentoTipo = AgendamentoTipo::find(request()->tipo_id);
|
||||
$agendamentoStatus = AgendamentoStatus::find(request()->status_id);
|
||||
$itens = AgendamentoService::index((object) request()->all());
|
||||
|
||||
$data = [
|
||||
'data_inicio' => request()->periodo['start'],
|
||||
'data_fim' => request()->periodo['end'],
|
||||
'hora_inicio' => request()->periodo['start'],
|
||||
'hora_fim' => request()->periodo['start'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'ocupacao' => $ocupacao->nome ?? 'Todos',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'agendamento_tipo' => $agendamentoTipo->nome ?? 'Todos',
|
||||
'agendamento_status' => $agendamentoStatus->nome ?? 'Todos',
|
||||
'itens' => $itens,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\AgendamentoStatus;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Services\Ambulatorio\ListagemConsultaAgendadaRealizadaService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ListagemConsultaAgendadaRealizadaController extends Controller
|
||||
{
|
||||
private const TITLE = 'LISTAGEM DE CONSULTAS AGENDADAS/REALIZADAS';
|
||||
private const TEMPLATE = 'ambulatorio.listagem-consulta-agendada-realizada';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = ListagemConsultaAgendadaRealizadaService::index();
|
||||
|
||||
$itens->each(function ($item) {
|
||||
|
||||
if (!is_null($item->paciente_data_nascimento)) {
|
||||
|
||||
$item->paciente_data_nascimento = (new Carbon($item->paciente_data_nascimento))->format('d/m/Y');
|
||||
}
|
||||
|
||||
if (!is_null($item->agendado_para_data)) {
|
||||
|
||||
$item->agendado_para_data = (new Carbon($item->agendado_para_data))->format('d/m/Y');
|
||||
}
|
||||
|
||||
if (!is_null($item->agendado_na_data)) {
|
||||
|
||||
$item->agendado_na_data = (new Carbon($item->agendado_na_data))->format('d/m/Y');
|
||||
}
|
||||
});
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$status = AgendamentoStatus::find(request()->status_id);
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'inicio' => substr(request()->inicio, 0, 5),
|
||||
'fim' => substr(request()->fim, 0, 5),
|
||||
'origem' => is_null(request()->origem)
|
||||
? 'Todas' : (request()->origem === 'agendamento' ? 'CONSULTA AGENDADA' : 'DEMANDA ESPONTÂNEA'),
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'status' => $status->nome ?? 'Todos',
|
||||
'colunas' => collect(request()->selected_cols),
|
||||
'itens' => $itens,
|
||||
];
|
||||
|
||||
$orientation = isset(request()->orientation) ? request()->orientation : 'portrait';
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data, $orientation);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class OrientacaoController extends Controller
|
||||
{
|
||||
private const TITLE = 'ORIENTAÇÃO';
|
||||
private const TEMPLATE = 'ambulatorio.orientacao';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$orientacoes = $this->getOrientacoesNaoSalvas($atendimentoId);
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::ORIENTACAO);
|
||||
} else {
|
||||
|
||||
$orientacoes = $this->getOrientacoes($atendimentoId);
|
||||
}
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('orientacoes'));
|
||||
}
|
||||
|
||||
private function getOrientacoesNaoSalvas($pacienteId)
|
||||
{
|
||||
$paciente = Paciente::findOrFail($pacienteId);
|
||||
|
||||
$orientacoes = [
|
||||
[
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social ?? '-',
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento ? $paciente->cidadao->data_nascimento->format('d/m/Y') : '-',
|
||||
'idade' => $paciente->cidadao->idade['anos'] ?? '-',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? '-',
|
||||
'prontuario' => $paciente->prontuario ?? '-',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : '-',
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : '-',
|
||||
'telefone_numero' => $paciente->cidadao->telefone_principal ? MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero) : '-',
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? '-',
|
||||
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? '-',
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? '-',
|
||||
],
|
||||
'descricao' => request()->descricao,
|
||||
]
|
||||
];
|
||||
|
||||
$data = [
|
||||
'orientacoes' => $orientacoes,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function getOrientacoes($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
$orientacoes = [];
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->get()
|
||||
->each(function($soap) use (&$orientacoes, $paciente) {
|
||||
$soap->orientacoes()->get()->each(function($orientacao) use (&$orientacoes, $paciente) {
|
||||
$orientacoes[] = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social ?? '-',
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento ? $paciente->cidadao->data_nascimento->format('d/m/Y') : '-',
|
||||
'idade' => $paciente->cidadao->idade['anos'] ?? '-',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? '-',
|
||||
'prontuario' => $paciente->prontuario ?? '-',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : '-',
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : '-',
|
||||
'telefone_numero' => $paciente->cidadao->telefone_principal ? MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero) : '-',
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? '-',
|
||||
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? '-',
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? '-',
|
||||
],
|
||||
'descricao' => $orientacao->descricao,
|
||||
];
|
||||
});
|
||||
});
|
||||
|
||||
$data = [
|
||||
'orientacoes' => $orientacoes,
|
||||
'paraAssinar' => $paraAssinaturaEletronica,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Services\Ambulatorio\AtendimentoEnfermagem\PosConsultaService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class PosConsultaController extends Controller
|
||||
{
|
||||
private const TITLE = 'PÓS-CONSULTA';
|
||||
private const TEMPLATE = 'ambulatorio.pos-consulta';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$posConsultas = $atendimento->posConsultas->map(fn ($pc) => PosConsultaService::getPrintData($pc->id));
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, compact('posConsultas'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Services\Ambulatorio\AtendimentoEnfermagem\PreAtendimentoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class PreAtendimentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'PRÉ-ATENDIMENTO';
|
||||
private const TEMPLATE = 'ambulatorio.pre-atendimento';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$data = PreAtendimentoService::getPrintData($atendimento->preAtendimento->id);
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,230 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReceitaMedicaComumController extends Controller
|
||||
{
|
||||
private const TITLE = 'RECEITUÁRIO';
|
||||
private const TEMPLATE = 'ambulatorio.receita-medica-comum';
|
||||
|
||||
public static function getTemplate($atendimentoId, $dados = [])
|
||||
{
|
||||
$receitas = collect();
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$receitas[] = self::getReceitasNaoSalvas($atendimentoId);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_COMUM);
|
||||
} else {
|
||||
|
||||
self::getAtendimento($atendimentoId, $receitas, $dados);
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => !$paraAssinaturaEletronica,
|
||||
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public static function getReceitasNaoSalvas($pacienteId) {
|
||||
|
||||
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
|
||||
|
||||
$medicamentos = request()->medicamentos;
|
||||
|
||||
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
|
||||
|
||||
$query
|
||||
->whereHas('soap', function ($query) {
|
||||
|
||||
$query->where('atendimento_id', request()->atendimento_id);
|
||||
});
|
||||
})
|
||||
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
|
||||
->first();
|
||||
|
||||
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
|
||||
$createdAt = $item->created_at;
|
||||
} else {
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
}
|
||||
|
||||
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$medicamentos = [];
|
||||
|
||||
if (request()->has('multiple') && request()->multiple == true) {
|
||||
|
||||
foreach (request()->medicamentos as $solicitacao) {
|
||||
|
||||
$medicamentos[] = [
|
||||
'nome' => $solicitacao['material']['descricao'],
|
||||
'usoContinuo' => $solicitacao['is_uso_continuo'] == 'true' ? true : false,
|
||||
'imprimirSeparado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] == 'true' ? true : false,
|
||||
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
|
||||
'doseUnica' => $solicitacao['is_dose_unica'] == 'true' ? true : false,
|
||||
'livre' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']),
|
||||
'viaAdministracao' => $solicitacao['material']['via_administracao'] ?? '-',
|
||||
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset($solicitacao['posologia']) ?$solicitacao['posologia'] : null),
|
||||
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
|
||||
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id']) ? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
|
||||
'descricao' => $solicitacao['descricao'] ?? ''
|
||||
];
|
||||
}
|
||||
} else {
|
||||
|
||||
$medicamentos[] = [
|
||||
'nome' => request()->material['descricao'],
|
||||
'usoContinuo' => request()->is_uso_continuo == 'true' ? true : false,
|
||||
'imprimirSeparado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado == 'true' ? true : false,
|
||||
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
|
||||
'doseUnica' => request()->is_dose_unica == 'true' ? true : false,
|
||||
'livre' => isset(request()->descricao) && !is_null(request()->descricao),
|
||||
'viaAdministracao' => request()->material['via_administracao'] ?? '-',
|
||||
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) ? request()->posologia : null),
|
||||
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
|
||||
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id) ? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => request()->recomendacoes ?? '',
|
||||
'descricao' => request()->descricao ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'profissional' => [
|
||||
'nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $currentLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => request()->has('is_duplicated') && request()->is_duplicated == true
|
||||
? Carbon::parse($createdAt)->translatedFormat('d \de F \de Y')
|
||||
: Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => $medicamentos,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, $receitas, $dados = []) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos->each(fn ($prescricaoMedicamento) => $receitas
|
||||
->push([
|
||||
'profissional' => [
|
||||
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
|
||||
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
|
||||
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
|
||||
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => $prescricaoMedicamento->itens
|
||||
->where('material.receita_tipo_id', TipoReceita::COMUM)
|
||||
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
|
||||
->map(fn ($item) => [
|
||||
'nome' => $item->material->descricao,
|
||||
'usoContinuo' => $item->is_uso_continuo,
|
||||
'imprimirSeparado' => $item->is_imprimir_separado,
|
||||
'removerImpressao' => $item->is_remover_impressao,
|
||||
'doseUnica' => $item->is_dose_unica,
|
||||
'livre' => !is_null($item->descricao),
|
||||
'viaAdministracao' => $item->material->viaAdministracao->nome ?? '-',
|
||||
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
|
||||
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
|
||||
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'descricao' => $item->descricao ?? ''
|
||||
]),
|
||||
])
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId, $output = null, $dados = [])
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $output
|
||||
? $pdf->output(self::getTemplate($atendimentoId, $dados))
|
||||
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,328 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class ReceitaMedicaEspecialAmarelaController extends Controller
|
||||
{
|
||||
private const TITLE = 'RECEITUÁRIO ESPECIAL (AMARELA)';
|
||||
private const TEMPLATE = 'ambulatorio.receita-medica-especial-amarela';
|
||||
|
||||
public function getTemplate($atendimentoId, $dados = [])
|
||||
{
|
||||
|
||||
$receitas = collect();
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$receitas = self::getReceitasNaoSalvas($atendimentoId);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL_AMARELA);
|
||||
} else {
|
||||
|
||||
self::getAtendimento($atendimentoId, $receitas, $dados);
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => !$paraAssinaturaEletronica,
|
||||
'receitas' => $receitas->values()->all()
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId, $output = null, $dados = [])
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $output
|
||||
? $pdf->output(self::getTemplate($atendimentoId, $dados))
|
||||
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, &$receitas, $dados = []) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->get()
|
||||
->each(function($soap) use (&$receitas, $paciente, $dados) {
|
||||
$soap->prescricoesMedicamentos->each(function ($prescricaoMedicamentos) use (&$receitas, $paciente, $dados) {
|
||||
$prescricaoMedicamentos->itens
|
||||
->where('material.receita_tipo_id', TipoReceita::ESPECIAL_AMARELA)
|
||||
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
|
||||
->each(function($item) use (&$receitas, $paciente, $prescricaoMedicamentos) {
|
||||
$lotacao = $item->createdLotacao;
|
||||
|
||||
$receitas[] = [
|
||||
'removerImpressao' => $item->is_remover_impressao,
|
||||
'infraestrutura' => [
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->nome_fantasia ?? null,
|
||||
'cnes' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnes ?? null,
|
||||
'cnpj' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
],
|
||||
'endereco' => [
|
||||
'logradouro' => [
|
||||
'municipio' => [
|
||||
'estado' => [
|
||||
'uf' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
],
|
||||
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
|
||||
],
|
||||
'bairro' => [
|
||||
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
|
||||
],
|
||||
'tipo' => [
|
||||
'descricao' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
|
||||
],
|
||||
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->nome ?? null,
|
||||
'cep' => MaskUtil::getCepMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
|
||||
],
|
||||
'numero' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->numero ?? null,
|
||||
'referencia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->referencia ?? null,
|
||||
],
|
||||
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->telefone) ?? null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social ?? null,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'material' => [
|
||||
'descricao' => $item->material->descricao,
|
||||
'quantidade' => $item->material->quantidade,
|
||||
'dose' => $item->dose ?? '-',
|
||||
'via_administracao' => $item->material->viaAdministracao->nome ?? '-',
|
||||
'forma_farmaceutica' => $item->material->formaFarmaceutica->nome ?? '-',
|
||||
'apresentacao' => $item->material->apresentacao->nome ?? '-',
|
||||
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
|
||||
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
|
||||
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
],
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $lotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public static function getReceitasNaoSalvas($pacienteId) {
|
||||
|
||||
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
|
||||
|
||||
$medicamentos = request()->medicamentos;
|
||||
|
||||
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
|
||||
|
||||
$query
|
||||
->whereHas('soap', function ($query) {
|
||||
|
||||
$query->where('atendimento_id', request()->atendimento_id);
|
||||
});
|
||||
})
|
||||
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
|
||||
->first();
|
||||
|
||||
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
|
||||
} else {
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
}
|
||||
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
if (request()->has('multiple') && request()->multiple == true) {
|
||||
|
||||
foreach (request()->medicamentos as $solicitacao) {
|
||||
|
||||
$receitas[] = [
|
||||
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
|
||||
'infraestrutura' => [
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null,
|
||||
'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
],
|
||||
'endereco' => [
|
||||
'logradouro' => [
|
||||
'municipio' => [
|
||||
'estado' => [
|
||||
'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
],
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
|
||||
],
|
||||
'bairro' => [
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
|
||||
],
|
||||
'tipo' => [
|
||||
'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
|
||||
],
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null,
|
||||
'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
|
||||
],
|
||||
'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null,
|
||||
'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null,
|
||||
],
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'material' => [
|
||||
'descricao' => $solicitacao['material']['descricao'],
|
||||
'quantidade' => $solicitacao['material']['quantidade'],
|
||||
'apresentacao' => $solicitacao['material']['apresentacao'] ??null,
|
||||
'dose' => $solicitacao['dose'] ?? '-',
|
||||
'via_administracao' => $solicitacao['material']['via_administracao'] ?? '-',
|
||||
'forma_farmaceutica' => $solicitacao['unidade_medida'] ?? '-',
|
||||
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset( $solicitacao['posologia']) && $solicitacao['posologia'] ? $solicitacao['posologia'] : null),
|
||||
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
|
||||
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id'])
|
||||
? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
|
||||
],
|
||||
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
return $receitas;
|
||||
} else {
|
||||
|
||||
$receitas[] = [
|
||||
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
|
||||
'infraestrutura' => [
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null,
|
||||
'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
],
|
||||
'endereco' => [
|
||||
'logradouro' => [
|
||||
'municipio' => [
|
||||
'estado' => [
|
||||
'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
],
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
|
||||
],
|
||||
'bairro' => [
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
|
||||
],
|
||||
'tipo' => [
|
||||
'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
|
||||
],
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null,
|
||||
'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
|
||||
],
|
||||
'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null,
|
||||
'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null,
|
||||
],
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'material' => [
|
||||
'descricao' => request()->material['descricao'],
|
||||
'quantidade' => request()->material['quantidade'],
|
||||
'dose' => request()->dose ?? '-',
|
||||
'via_administracao' => request()->material['via_administracao'] ?? '-',
|
||||
'forma_farmaceutica' => request()->unidade_medida ?? '-',
|
||||
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) && request()->posologia ? request()->posologia : null),
|
||||
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
|
||||
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id)
|
||||
? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'apresentacao' => request()->material['apresentacao'] ?? '-',
|
||||
],
|
||||
'recomendacoes' => request()->recomendacoes ?? '',
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
|
||||
return $receitas;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,318 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReceitaMedicaEspecialAzulController extends Controller
|
||||
{
|
||||
private const TITLE = 'RECEITUÁRIO ESPECIAL (AZUL)';
|
||||
private const TEMPLATE = 'ambulatorio.receita-medica-especial-azul';
|
||||
|
||||
public function getTemplate($atendimentoId, $dados = [])
|
||||
{
|
||||
|
||||
$receitas = collect();
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$receitas = self::getReceitasNaoSalvas($atendimentoId);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL_AZUL);
|
||||
} else {
|
||||
|
||||
self::getAtendimento($atendimentoId, $receitas, $dados);
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => !$paraAssinaturaEletronica,
|
||||
'receitas' => $receitas->values()->all()
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public static function getReceitasNaoSalvas($pacienteId) {
|
||||
|
||||
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
|
||||
|
||||
$medicamentos = request()->medicamentos;
|
||||
|
||||
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
|
||||
|
||||
$query
|
||||
->whereHas('soap', function ($query) {
|
||||
|
||||
$query->where('atendimento_id', request()->atendimento_id);
|
||||
});
|
||||
})
|
||||
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
|
||||
->first();
|
||||
|
||||
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
|
||||
} else {
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
}
|
||||
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
if (request()->has('multiple') && request()->multiple == true) {
|
||||
|
||||
foreach (request()->medicamentos as $solicitacao) {
|
||||
|
||||
$receitas[] = [
|
||||
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
|
||||
'infraestrutura' => [
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null,
|
||||
'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
],
|
||||
'endereco' => [
|
||||
'logradouro' => [
|
||||
'municipio' => [
|
||||
'estado' => [
|
||||
'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
],
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
|
||||
],
|
||||
'bairro' => [
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
|
||||
],
|
||||
'tipo' => [
|
||||
'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
|
||||
],
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null,
|
||||
'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
|
||||
],
|
||||
'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null,
|
||||
'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null,
|
||||
],
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'material' => [
|
||||
'descricao' => $solicitacao['material']['descricao'],
|
||||
'quantidade' => $solicitacao['material']['quantidade'],
|
||||
'dose' => $solicitacao['dose'] ?? '-',
|
||||
'via_administracao' => $solicitacao['material']['via_administracao'] ?? '-',
|
||||
'forma_farmaceutica' => $solicitacao['unidade_medida'] ?? '-',
|
||||
'posologia' => isset($solicitacao['posologia']) ? $solicitacao['posologia'] : null,
|
||||
],
|
||||
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
}
|
||||
return $receitas;
|
||||
} else {
|
||||
|
||||
$receitas[] = [
|
||||
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
|
||||
'infraestrutura' => [
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null,
|
||||
'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
],
|
||||
'endereco' => [
|
||||
'logradouro' => [
|
||||
'municipio' => [
|
||||
'estado' => [
|
||||
'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
],
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
|
||||
],
|
||||
'bairro' => [
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
|
||||
],
|
||||
'tipo' => [
|
||||
'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
|
||||
],
|
||||
'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null,
|
||||
'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
|
||||
],
|
||||
'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null,
|
||||
'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null,
|
||||
],
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'material' => [
|
||||
'descricao' => request()->material['descricao'],
|
||||
'quantidade' => request()->material['quantidade'],
|
||||
'dose' => request()->dose ?? '-',
|
||||
'via_administracao' => request()->material['via_administracao'] ?? '-',
|
||||
'forma_farmaceutica' => request()->unidade_medida ?? '-',
|
||||
'posologia' => isset(request()->posologia) ? request()->posologia : null,
|
||||
],
|
||||
'recomendacoes' => request()->recomendacoes ?? '',
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
|
||||
return $receitas;
|
||||
}
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, &$receitas, $dados = []) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->get()
|
||||
->each(function($soap) use (&$receitas, $paciente, $dados) {
|
||||
$soap->prescricoesMedicamentos->each(function ($prescricaoMedicamentos) use (&$receitas, $paciente, $dados) {
|
||||
$prescricaoMedicamentos->itens
|
||||
->where('material.receita_tipo_id', TipoReceita::ESPECIAL_AZUL)
|
||||
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
|
||||
->each(function($item) use (&$receitas, $paciente, $prescricaoMedicamentos) {
|
||||
$lotacao = $item->createdLotacao;
|
||||
|
||||
$receitas[] = [
|
||||
'removerImpressao' => $item->is_remover_impressao,
|
||||
'infraestrutura' => [
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->nome_fantasia ?? null,
|
||||
'cnes' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnes ?? null,
|
||||
'cnpj' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
],
|
||||
'endereco' => [
|
||||
'logradouro' => [
|
||||
'municipio' => [
|
||||
'estado' => [
|
||||
'uf' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
],
|
||||
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null,
|
||||
],
|
||||
'bairro' => [
|
||||
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null,
|
||||
],
|
||||
'tipo' => [
|
||||
'descricao' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null,
|
||||
],
|
||||
'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->nome ?? null,
|
||||
'cep' => MaskUtil::getCepMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->cep) ?? null,
|
||||
],
|
||||
'numero' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->numero ?? null,
|
||||
'referencia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->referencia ?? null,
|
||||
],
|
||||
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->telefone) ?? null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'material' => [
|
||||
'descricao' => $item->material->descricao,
|
||||
'quantidade' => $item->material->quantidade,
|
||||
'dose' => $item->dose ?? '-',
|
||||
'via_administracao' => $item->material->viaAdministracao->nome ?? '-',
|
||||
'forma_farmaceutica' => $item->material->formaFarmaceutica->nome ?? '-',
|
||||
'posologia' => $item->posologia,
|
||||
],
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $lotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
];
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId, $output = null, $dados = [])
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $output
|
||||
? $pdf->output(self::getTemplate($atendimentoId, $dados))
|
||||
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamentoItem;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReceitaMedicaEspecialController extends Controller
|
||||
{
|
||||
private const TITLE = 'RECEITUÁRIO ESPECIAL';
|
||||
private const TEMPLATE = 'ambulatorio.receita-medica-especial';
|
||||
|
||||
public static function getTemplate($atendimentoId, $dados = [])
|
||||
{
|
||||
|
||||
$receitas = collect();
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$receitas[] = self::getReceitasNaoSalvas($atendimentoId);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL);
|
||||
} else {
|
||||
|
||||
self::getAtendimento($atendimentoId, $receitas, $dados);
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => !$paraAssinaturaEletronica,
|
||||
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public static function getReceitasNaoSalvas($pacienteId) {
|
||||
|
||||
if (request()->has('is_duplicated') && request()->is_duplicated == true) {
|
||||
|
||||
$medicamentos = request()->medicamentos;
|
||||
|
||||
$item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) {
|
||||
|
||||
$query
|
||||
->whereHas('soap', function ($query) {
|
||||
|
||||
$query->where('atendimento_id', request()->atendimento_id);
|
||||
});
|
||||
})
|
||||
->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id'])
|
||||
->first();
|
||||
|
||||
$currentLotacao = Lotacao::findOrFail($item->lotacao->id);
|
||||
$createdAt = $item->created_at;
|
||||
} else {
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
}
|
||||
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$medicamentos = [];
|
||||
|
||||
if (request()->has('multiple') && request()->multiple == true) {
|
||||
|
||||
foreach (request()->medicamentos as $solicitacao) {
|
||||
|
||||
$medicamentos[] = [
|
||||
'id' => uniqid(),
|
||||
'nome' => $solicitacao['material']['descricao'],
|
||||
'usoContinuo' => $solicitacao['is_uso_continuo'] == 'true' ? true : false,
|
||||
'imprimirSeparado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] == 'true' ? true : false,
|
||||
'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false,
|
||||
'doseUnica' => $solicitacao['is_dose_unica'] == 'true' ? true : false,
|
||||
'livre' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']),
|
||||
'viaAdministracao' => $solicitacao['material']['via_administracao'] ?? '-',
|
||||
'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset($solicitacao['posologia']) ? $solicitacao['posologia'] : null),
|
||||
'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '',
|
||||
'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id'])
|
||||
? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
|
||||
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : ''
|
||||
];
|
||||
}
|
||||
} else {
|
||||
|
||||
$medicamentos[] = [
|
||||
'id' => uniqid(),
|
||||
'nome' => request()->material['descricao'],
|
||||
'usoContinuo' => request()->is_uso_continuo == 'true' ? true : false,
|
||||
'imprimirSeparado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado == 'true' ? true : false,
|
||||
'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false,
|
||||
'doseUnica' => request()->is_dose_unica == 'true' ? true : false,
|
||||
'livre' => isset(request()->descricao) && !is_null(request()->descricao),
|
||||
'viaAdministracao' => request()->material['via_administracao'] ?? '-',
|
||||
'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) ? request()->posologia : null),
|
||||
'duracao' => !is_null(request()->duracao) ? request()->duracao : '',
|
||||
'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id)
|
||||
? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => request()->recomendacoes ?? '',
|
||||
'descricao' => isset($solicitacao['descricao']) && $solicitacao['descricao'] ? $solicitacao['descricao'] : ''
|
||||
];
|
||||
}
|
||||
|
||||
$medicamentos = collect($medicamentos)->filter(fn ($m) => !$m['removerImpressao'])->sortBy('usoContinuo')->values();
|
||||
|
||||
return [
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $currentLotacao->infraestrutura->endereco->completo
|
||||
. (isset($currentLotacao->infraestrutura->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep))
|
||||
: ''),
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => request()->has('is_duplicated') && request()->is_duplicated == true
|
||||
? Carbon::parse($createdAt)->translatedFormat('d \de F \de Y')
|
||||
: Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => $medicamentos,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, $receitas, $dados = []) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos->each(fn ($prescricaoMedicamento) => $receitas
|
||||
->push([
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
|
||||
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
|
||||
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
|
||||
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo
|
||||
. (isset($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep))
|
||||
: ''),
|
||||
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => $prescricaoMedicamento->itens
|
||||
->whereIn('material.receita_tipo_id', [
|
||||
TipoReceita::ESPECIAL
|
||||
])
|
||||
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)))
|
||||
->map(fn ($item) => [
|
||||
'id' => $item->id,
|
||||
'nome' => $item->material->descricao,
|
||||
'usoContinuo' => $item->is_uso_continuo,
|
||||
'imprimirSeparado' => $item->is_imprimir_separado,
|
||||
'removerImpressao' => $item->is_remover_impressao,
|
||||
'doseUnica' => $item->is_dose_unica,
|
||||
'livre' => !is_null($item->descricao),
|
||||
'viaAdministracao' => $item->material->viaAdministracao->nome ?? '-',
|
||||
'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia,
|
||||
'duracao' => !is_null($item->duracao) ? $item->duracao : '',
|
||||
'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '',
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'descricao' => $item->descricao ?? ''
|
||||
])
|
||||
->filter(fn ($m) => !$m['removerImpressao'])
|
||||
->sortBy('usoContinuo')
|
||||
->values()
|
||||
])
|
||||
));
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId, $output = null, $dados = [])
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $output
|
||||
? $pdf->output(self::getTemplate($atendimentoId, $dados))
|
||||
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,319 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use DOMDocument;
|
||||
|
||||
class ReceitaMedicaNaoPadronizadaComumController extends Controller
|
||||
{
|
||||
private const TITLE = 'RECEITUÁRIO';
|
||||
private const TEMPLATE = 'ambulatorio.receita-medica-nao-padronizada-comum';
|
||||
|
||||
public static function getTemplate($atendimentoId, $dados = [])
|
||||
{
|
||||
$receitas = collect();
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
self::setReceitasNaoSalvas($atendimentoId, $receitas);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_NAO_PADRONIZADA_COMUM);
|
||||
} else {
|
||||
self::getAtendimento($atendimentoId, $receitas, $dados);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas->filter(fn ($r) => count($r['medicamentos']) > 0)->values()->all()
|
||||
];
|
||||
}
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => !$paraAssinaturaEletronica,
|
||||
'paraAssinar' => $paraAssinaturaEletronica,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public static function setReceitasNaoSalvas($pacienteId, $receitas)
|
||||
{
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$medicamentos = [];
|
||||
|
||||
if (request()->has('multiple') && request()->multiple == true) {
|
||||
foreach (request()->medicamentos as $solicitacao) {
|
||||
$medicamentos[] = [
|
||||
'is_imprimir_separado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] === 'true' ? true : false,
|
||||
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
|
||||
'descricao' => $solicitacao['descricao'] ?? '',
|
||||
];
|
||||
}
|
||||
} else {
|
||||
$medicamentos[] = [
|
||||
'is_imprimir_separado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado === 'true' ? true : false,
|
||||
'recomendacoes' => request()->recomendacoes ?? '',
|
||||
'descricao' => request()->descricao ?? '',
|
||||
];
|
||||
}
|
||||
|
||||
foreach ($medicamentos as &$medicamento) {
|
||||
$htmlOriginal = $medicamento['descricao'] ?? '';
|
||||
|
||||
$htmlOriginal = preg_replace('/<p>\s*<br\s*\/?>\s*<\/p>/i', '', $htmlOriginal);
|
||||
|
||||
$descricaoPaginas = [];
|
||||
|
||||
$dom = new DOMDocument();
|
||||
libxml_use_internal_errors(true);
|
||||
$dom->loadHTML('<?xml encoding="UTF-8"><div>' . $htmlOriginal . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
|
||||
libxml_clear_errors();
|
||||
|
||||
$wrapper = $dom->getElementsByTagName('div')->item(0);
|
||||
|
||||
$currentPage = '';
|
||||
$currentLineCount = 0;
|
||||
$maxLineLength = 100;
|
||||
$maxLinesPerPage = 15;
|
||||
|
||||
foreach (iterator_to_array($wrapper->childNodes) as $node) {
|
||||
$tempDom = new DOMDocument();
|
||||
$imported = $tempDom->importNode($node, true);
|
||||
$tempDom->appendChild($imported);
|
||||
$htmlNode = $tempDom->saveHTML();
|
||||
|
||||
$textoVisivel = trim(preg_replace('/\s+/', ' ', strip_tags($htmlNode)));
|
||||
$linhasEstimadas = (int) ceil(mb_strlen($textoVisivel) / $maxLineLength);
|
||||
$linhasEstimadas += substr_count(strtolower($htmlNode), '<br');
|
||||
|
||||
if (stripos($htmlNode, '<p') !== false && mb_strlen($textoVisivel) === 0) {
|
||||
$linhasEstimadas += 1;
|
||||
}
|
||||
|
||||
if ($currentLineCount + $linhasEstimadas > $maxLinesPerPage && $currentLineCount > 0) {
|
||||
$descricaoPaginas[] = $currentPage;
|
||||
$currentPage = '';
|
||||
$currentLineCount = 0;
|
||||
}
|
||||
|
||||
$currentPage .= $htmlNode;
|
||||
$currentLineCount += $linhasEstimadas;
|
||||
}
|
||||
|
||||
if (!empty(trim($currentPage))) {
|
||||
$descricaoPaginas[] = $currentPage;
|
||||
}
|
||||
|
||||
$medicamento['descricao_paginas'] = $descricaoPaginas;
|
||||
}
|
||||
|
||||
$dadosPrincipais = [
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $currentLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
];
|
||||
|
||||
$medicamentosAgrupados = collect($medicamentos)->where('is_imprimir_separado', false);
|
||||
|
||||
if ($medicamentosAgrupados->isNotEmpty()) {
|
||||
$receitas->push(array_merge($dadosPrincipais, [
|
||||
'medicamentos' => $medicamentosAgrupados->all()
|
||||
]));
|
||||
}
|
||||
|
||||
$medicamentosSeparados = collect($medicamentos)->where('is_imprimir_separado', true);
|
||||
|
||||
if ($medicamentosSeparados->isNotEmpty()) {
|
||||
$medicamentosSeparados->each(function ($medicamento) use ($receitas, $dadosPrincipais) {
|
||||
$receitas->push(array_merge($dadosPrincipais, [
|
||||
'medicamentos' => [$medicamento]
|
||||
]));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, $receitas, $dados = [])
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos
|
||||
->each(function ($prescricaoMedicamento) use ($receitas, $paciente, $dados) {
|
||||
|
||||
$dadosPrincipais = [
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
|
||||
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
|
||||
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
|
||||
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
];
|
||||
|
||||
$itens = $prescricaoMedicamento->itens
|
||||
->whereNull('material_id')
|
||||
->where('receita_tipo_id', TipoReceita::COMUM)
|
||||
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)));
|
||||
|
||||
$processarItens = function ($itens) {
|
||||
return $itens->map(function ($item) {
|
||||
$htmlOriginal = $item->descricao ?? '';
|
||||
|
||||
$htmlOriginal = preg_replace('/<p>\s*<br\s*\/?>\s*<\/p>/i', '', $htmlOriginal);
|
||||
|
||||
$descricaoPaginas = [];
|
||||
|
||||
$dom = new \DOMDocument();
|
||||
libxml_use_internal_errors(true);
|
||||
$dom->loadHTML('<?xml encoding="UTF-8"><div>' . $htmlOriginal . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
|
||||
libxml_clear_errors();
|
||||
|
||||
$wrapper = $dom->getElementsByTagName('div')->item(0);
|
||||
|
||||
$currentPage = '';
|
||||
$currentLineCount = 0;
|
||||
$maxLineLength = 100;
|
||||
$maxLinesPerPage = 15;
|
||||
|
||||
foreach (iterator_to_array($wrapper->childNodes) as $node) {
|
||||
$tempDom = new \DOMDocument();
|
||||
$imported = $tempDom->importNode($node, true);
|
||||
$tempDom->appendChild($imported);
|
||||
$htmlNode = $tempDom->saveHTML();
|
||||
|
||||
$textoVisivel = trim(preg_replace('/\s+/', ' ', strip_tags($htmlNode)));
|
||||
$linhasEstimadas = (int) ceil(mb_strlen($textoVisivel) / $maxLineLength);
|
||||
$linhasEstimadas += substr_count(strtolower($htmlNode), '<br');
|
||||
|
||||
if (stripos($htmlNode, '<p') !== false && mb_strlen($textoVisivel) === 0) {
|
||||
$linhasEstimadas += 1;
|
||||
}
|
||||
|
||||
if ($currentLineCount + $linhasEstimadas > $maxLinesPerPage && $currentLineCount > 0) {
|
||||
$descricaoPaginas[] = $currentPage;
|
||||
$currentPage = '';
|
||||
$currentLineCount = 0;
|
||||
}
|
||||
|
||||
$currentPage .= $htmlNode;
|
||||
$currentLineCount += $linhasEstimadas;
|
||||
}
|
||||
|
||||
if (!empty(trim($currentPage))) {
|
||||
$descricaoPaginas[] = $currentPage;
|
||||
}
|
||||
|
||||
return [
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'descricao' => $item->descricao ?? '',
|
||||
'descricao_paginas' => $descricaoPaginas,
|
||||
];
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
$itensAgrupados = $itens->where('is_imprimir_separado', false);
|
||||
if ($itensAgrupados->isNotEmpty()) {
|
||||
$receitas->push(array_merge($dadosPrincipais, [
|
||||
'medicamentos' => $processarItens($itensAgrupados)->all()
|
||||
]));
|
||||
}
|
||||
|
||||
$itensSeparados = $itens->where('is_imprimir_separado', true);
|
||||
if ($itensSeparados->isNotEmpty()) {
|
||||
$processarItens($itensSeparados)->each(function ($medicamentoSeparado) use ($receitas, $dadosPrincipais) {
|
||||
$receitas->push(array_merge($dadosPrincipais, [
|
||||
'medicamentos' => [$medicamentoSeparado]
|
||||
]));
|
||||
});
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId, $output = null, $dados = [])
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $output
|
||||
? $pdf->output(self::getTemplate($atendimentoId, $dados))
|
||||
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,238 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReceitaMedicaNaoPadronizadaEspecialController extends Controller
|
||||
{
|
||||
private const TITLE = 'RECEITUÁRIO ESPECIAL';
|
||||
private const TEMPLATE = 'ambulatorio.receita-medica-nao-padronizada-especial';
|
||||
|
||||
public static function getTemplate($atendimentoId, $dados = [])
|
||||
{
|
||||
$receitas = collect();
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
self::setReceitasNaoSalvas($atendimentoId, $receitas);
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => true,
|
||||
'receitas' => $receitas
|
||||
];
|
||||
|
||||
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_NAO_PADRONIZADA_ESPECIAL);
|
||||
} else {
|
||||
self::getAtendimento($atendimentoId, $receitas, $dados);
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
$data = [
|
||||
'exibirAssinatura' => !$paraAssinaturaEletronica,
|
||||
'receitas' => $receitas->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all()
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public static function setReceitasNaoSalvas($pacienteId, $receitas)
|
||||
{
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$medicamentos = [];
|
||||
|
||||
if (request()->has('multiple') && request()->multiple == true) {
|
||||
foreach (request()->medicamentos as $solicitacao) {
|
||||
$medicamentos[] = [
|
||||
'is_imprimir_separado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] === 'true' ? true : false,
|
||||
'recomendacoes' => $solicitacao['recomendacoes'] ?? '',
|
||||
'descricao' => $solicitacao['descricao'] ?? '',
|
||||
];
|
||||
}
|
||||
} else {
|
||||
$medicamentos[] = [
|
||||
'is_imprimir_separado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] === 'true' ? true : false,
|
||||
'recomendacoes' => request()->recomendacoes ?? '',
|
||||
'descricao' => request()->descricao ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
$dadosPrincipais = [
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $currentLotacao->infraestrutura->endereco->completo
|
||||
. (isset($currentLotacao->infraestrutura->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep))
|
||||
: ''),
|
||||
'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
];
|
||||
|
||||
$medicamentosAgrupados = collect($medicamentos)->where('is_imprimir_separado', false);
|
||||
|
||||
if ($medicamentosAgrupados->isNotEmpty()) {
|
||||
|
||||
$receitas->push(array_merge($dadosPrincipais, [
|
||||
'medicamentos' => $medicamentosAgrupados->all()
|
||||
]));
|
||||
}
|
||||
|
||||
$medicamentosSeparados = collect($medicamentos)->where('is_imprimir_separado', true);
|
||||
|
||||
if ($medicamentosSeparados->isNotEmpty()) {
|
||||
|
||||
$medicamentosSeparados->each(function ($medicamento) use ($receitas, $dadosPrincipais) {
|
||||
|
||||
$receitas->push(array_merge($dadosPrincipais, [
|
||||
'medicamentos' => [$medicamento]
|
||||
]));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, $receitas, $dados = [])
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->paciente;
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos
|
||||
->each(function ($prescricaoMedicamento) use ($receitas, $paciente, $dados) {
|
||||
|
||||
$dadosPrincipais = [
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome,
|
||||
'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id
|
||||
? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro
|
||||
: $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj
|
||||
? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj)
|
||||
: null,
|
||||
'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo
|
||||
. (isset($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($prescricaoMedicamento->createdLotacao->infraestrutura->endereco->logradouro->cep))
|
||||
: ''),
|
||||
'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => isset($paciente->cidadao->domicilio->endereco->completo)
|
||||
? $paciente->cidadao->domicilio->endereco->completo
|
||||
. (isset($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep))
|
||||
: '')
|
||||
: '-',
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
];
|
||||
|
||||
$itens = $prescricaoMedicamento->itens
|
||||
->whereNull('material_id')
|
||||
->where('receita_tipo_id', TipoReceita::ESPECIAL)
|
||||
->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id)));
|
||||
|
||||
$itensAgrupados = $itens->where('is_imprimir_separado', false);
|
||||
|
||||
if ($itensAgrupados->isNotEmpty()) {
|
||||
|
||||
$receitas->push(array_merge($dadosPrincipais, [
|
||||
'medicamentos' => $itensAgrupados->map(fn ($item) => [
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'descricao' => $item->descricao ?? ''
|
||||
])
|
||||
]));
|
||||
}
|
||||
|
||||
$itensSeparados = $itens->where('is_imprimir_separado', true);
|
||||
|
||||
if ($itensSeparados->isNotEmpty()) {
|
||||
|
||||
$itensSeparados->each(function ($item) use ($receitas, $dadosPrincipais) {
|
||||
|
||||
$receitas->push(array_merge($dadosPrincipais, [
|
||||
'medicamentos' => collect([
|
||||
[
|
||||
'recomendacoes' => $item->recomendacoes ?? '',
|
||||
'descricao' => $item->descricao ?? ''
|
||||
]
|
||||
])
|
||||
]));
|
||||
});
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId, $output = null, $dados = [])
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $output
|
||||
? $pdf->output(self::getTemplate($atendimentoId, $dados))
|
||||
: $pdf->stream(self::getTemplate($atendimentoId, $dados));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\AgendamentoStatus;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Services\Ambulatorio\RelatorioConsultaFinalizadaService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioConsultaFinalizadaController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE CONSULTAS FINALIZADAS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-consulta-finalizada';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = RelatorioConsultaFinalizadaService::index();
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$status = AgendamentoStatus::find(request()->status_id);
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'status' => $status->nome ?? 'Todos',
|
||||
'itens' => $itens,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Services\Ambulatorio\RelatorioConsultaSolicitadaService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioConsultaSolicitadaController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE CONSULTAS SOLICITADAS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-consulta-solicitada';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = RelatorioConsultaSolicitadaService::index();
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'data' => $itens,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AgendamentoTipo as AmbulatorioAgendamentoTipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\AgendamentoStatus;
|
||||
use App\Models\Ambulatorio\AgendamentoTipo;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Services\Ambulatorio\RelatorioEstatisticoConsultaService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioEstatisticoConsultaController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO ESTATÍSTICO DE CONSULTA';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-estatistico-consulta';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = RelatorioEstatisticoConsultaService::index();
|
||||
$demandaTipo = request()->demanda_tipo === 'agendada' ? 'AGENDADA' : (request()->demanda_tipo === 'espontanea' ? 'ESPONTÂNEA' : 'Todas');
|
||||
$agendamentoTipo = AgendamentoTipo::find(request()->agendamento_tipo_id) ?? AgendamentoTipo::find(AmbulatorioAgendamentoTipo::CONSULTA);
|
||||
$municipio = Municipio::find(request()->municipio_id) ?? 'Todos';
|
||||
$unidade = Unidade::find(request()->unidade_id) ?? 'Todas';
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id) ?? 'Todos';
|
||||
$especialidade = Especialidade::find(request()->especialidade_id) ?? 'Todas';
|
||||
$usuario = Usuario::find(request()->usuario_id) ?? 'Todos';
|
||||
$status = request()->demanda_tipo === 'agendada' ? AgendamentoStatus::find(request()->agendamento_status_id) : 'Todos';
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'demanda_tipo' => $demandaTipo,
|
||||
'agendamento_tipo' => $agendamentoTipo->nome ?? 'Todos',
|
||||
'municipio' => $municipio->nome ?? 'Todos',
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'data' => $itens,
|
||||
'status' => $status,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\AgendamentoStatus;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Services\Ambulatorio\RelatorioEstatisticoPacienteService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioEstatisticoPacienteController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO ESTATÍSTICO DE PACIENTES';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-estatistico-paciente';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = RelatorioEstatisticoPacienteService::index();
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$status = AgendamentoStatus::find(request()->status_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'status' => $status->nome ?? 'Todos',
|
||||
'idade_de' => request()->idade_de ?? '-',
|
||||
'idade_ate' => request()->idade_ate ?? '-',
|
||||
'data' => $itens,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Services\Ambulatorio\RelatorioEstatisticoStatusService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioEstatisticoStatusController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO ESTATÍSTICO POR STATUS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-estatistico-status';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = RelatorioEstatisticoStatusService::index();
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$origem = request()->origem === 'agendamento'
|
||||
? 'Agendamento'
|
||||
: (request()->origem === 'demanda-espontanea' ? 'Demanda espontânea' : null);
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'origem' => $origem ?? 'Todas',
|
||||
'onlyAgendamentos' => request()->origem === 'agendamento',
|
||||
'onlyDemandasEspontaneas' => request()->origem === 'demanda-espontanea',
|
||||
'data' => $itens,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
use App\Services\Ambulatorio\RelatorioIdentificacaoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class RelatorioIdentificacaoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE IDENTIFICAÇÃO (PROCEDIMENTOS LANÇADOS)';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-identificacao';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = RelatorioIdentificacaoService::index();
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$procedimento = Procedimento::find(request()->procedimento_id);
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'procedimento' => $procedimento ? MaskUtil::getProcedimentoMasked($procedimento->codigo) . ' - ' . $procedimento->nome : 'Todos',
|
||||
'data' => $itens,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\JornadaSituacao;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Services\Ambulatorio\RelatorioJornadaService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class RelatorioJornadaController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE JORNADAS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-jornada';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$resultado = RelatorioJornadaService::index();
|
||||
$itens = $resultado['jornadas'];
|
||||
|
||||
$itens->each(function ($item) {
|
||||
|
||||
$item->data = (new Carbon($item->data))->format('d/m/Y');
|
||||
});
|
||||
|
||||
$statusValue = DataUtil::isStringBoolean(request()->status)
|
||||
? DataUtil::getBooleanValueFromStringBoolean(request()->status)
|
||||
: null;
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$status = RelatorioJornadaService::getStatus($statusValue);
|
||||
$situacao = JornadaSituacao::find(request()->situacao_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
|
||||
return [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'status' => $status->text ?? 'Todos',
|
||||
'situacao' => $statusValue ? 'Nenhuma' : ($situacao->nome ?? 'Todas'),
|
||||
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->cidadao->nome ?? 'Todos',
|
||||
'colunas' => collect(request()->columns),
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $resultado['totalizadores'],
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Services\Ambulatorio\RelatorioPacienteAtendimentoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class RelatorioPacienteAtendimentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE PACIENTES PARA ATENDIMENTO';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-paciente-atendimento';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$resultado = RelatorioPacienteAtendimentoService::index();
|
||||
$itens = $resultado['agendamentos'];
|
||||
|
||||
$itens->each(function ($item) {
|
||||
|
||||
$item->data = (new Carbon($item->data))->format('d/m/Y');
|
||||
});
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
|
||||
return [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->cidadao->nome ?? 'Todos',
|
||||
'colunas' => collect(request()->columns),
|
||||
'itens' => $itens,
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
use App\Services\Ambulatorio\RelatorioProcedimentoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class RelatorioProcedimentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE PROCEDIMENTOS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-procedimento';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$resultado = RelatorioProcedimentoService::index();
|
||||
$itens = $resultado['procedimentos'];
|
||||
|
||||
if (request()->sort_by) {
|
||||
|
||||
$sortDesc = filter_var(request()->sort_desc, FILTER_VALIDATE_BOOLEAN);
|
||||
|
||||
$itens = $sortDesc
|
||||
? $itens->sortByDesc(request()->sort_by)->values()
|
||||
: $itens->sortBy(request()->sort_by)->values();
|
||||
}
|
||||
|
||||
$itens->each(function ($item) {
|
||||
|
||||
$item->data = (new Carbon($item->data))->format('d/m/Y');
|
||||
|
||||
if (!is_null($item->paciente_data_nascimento)) {
|
||||
|
||||
$item->paciente_data_nascimento = (new Carbon($item->paciente_data_nascimento))->format('d/m/Y');
|
||||
}
|
||||
|
||||
$item->ocupacao_cbo = collect([$item->ocupacao_codigo, $item->ocupacao_nome])
|
||||
->filter()
|
||||
->implode(' - ');
|
||||
});
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
|
||||
|
||||
$totalRegistros = $itens->count();
|
||||
$totalProcedimentos = $itens->sum(fn ($item) => $item->procedimentos_sigtap->count());
|
||||
$totalAbpg = $itens->sum(fn ($item) => $item->procedimentos_abpg->count());
|
||||
|
||||
$demandaTipoLabels = ['agendada' => 'Agendada', 'espontanea' => 'Espontânea'];
|
||||
$demandaTipo = $demandaTipoLabels[request()->demanda_tipo] ?? 'Todos';
|
||||
|
||||
return [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->cidadao->nome ?? 'Todos',
|
||||
'procedimento' => $procedimento ? "{$procedimento->codigo} - {$procedimento->nome}" : 'Todos',
|
||||
'demandaTipo' => $demandaTipo,
|
||||
'colunas' => collect(request()->columns),
|
||||
'itens' => $itens,
|
||||
'totalRegistros' => $totalRegistros,
|
||||
'totalProcedimentos' => $totalProcedimentos,
|
||||
'totalAbpg' => $totalAbpg,
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
use App\Services\Ambulatorio\RelatorioProcedimentoLancadoPeriodoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class RelatorioProcedimentoLancadoPeriodoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE PROCEDIMENTOS LANÇADOS POR PERÍODO';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-procedimento-lancado-periodo';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$resultado = RelatorioProcedimentoLancadoPeriodoService::index();
|
||||
$itens = $resultado['procedimentos'];
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
|
||||
|
||||
return [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->cidadao->nome ?? 'Todos',
|
||||
'procedimento' => $procedimento
|
||||
? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
|
||||
'colunas' => collect(request()->columns),
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $resultado['totalizadores'],
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
use App\Services\Ambulatorio\RelatorioProducaoAmbulatorialService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class RelatorioProducaoAmbulatorialController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE PRODUÇÃO AMBULATORIAL - BPA';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-producao-ambulatorial';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$resultado = RelatorioProducaoAmbulatorialService::index();
|
||||
$itens = $resultado['procedimentos'];
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
|
||||
|
||||
return [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
|
||||
'procedimento' => $procedimento
|
||||
? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
|
||||
'idadeDe' => request()->idade_de,
|
||||
'idadeAte' => request()->idade_ate,
|
||||
'colunas' => collect(request()->columns),
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $resultado['totalizadores'],
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Services\Ambulatorio\RelatorioQuantitativoAtendimentoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioQuantitativoAtendimentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO QUANTITATIVO DE ATENDIMENTOS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-atendimento';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$resultado = RelatorioQuantitativoAtendimentoService::index();
|
||||
$itens = $resultado['infraestruturas'];
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
|
||||
return [
|
||||
'ano' => request()->periodo['ano'],
|
||||
'mes' => RelatorioQuantitativoAtendimentoService::getMeses()
|
||||
->where('value', request()->periodo['mes'])
|
||||
->first()['text'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'colunas' => collect(request()->columns),
|
||||
'colunasTotalizadores' => collect(request()->columns)
|
||||
->reject(fn ($c) => $c['key'] === 'usuario_nome')
|
||||
->values(),
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $resultado['totalizadores'],
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Services\Ambulatorio\RelatorioQuantitativoCidService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioQuantitativoCidController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO QUANTITATIVO POR CID';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-cid';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = RelatorioQuantitativoCidService::index();
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$cid = Cid::find(request()->cid_id);
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'ocupacao' => $ocupacao->nome ?? 'Todos',
|
||||
'cid' => $cid->nome ?? 'Todos',
|
||||
'idade_de' => request()->idade_de ?? '-',
|
||||
'idade_ate' => request()->idade_ate ?? '-',
|
||||
'data' => $itens,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Services\Ambulatorio\RelatorioQuantitativoConsultaSolicitadaService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioQuantitativoConsultaSolicitadaController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO QUANTITATIVO DE CONSULTAS SOLICITADAS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-consulta-solicitada';
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$itens = RelatorioQuantitativoConsultaSolicitadaService::index();
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
|
||||
$data = [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'unidade' => $unidade->nome_fantasia,
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'data' => $itens,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
use App\Services\Ambulatorio\RelatorioQuantitativoProcedimentoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class RelatorioQuantitativoProcedimentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO QUANTITATIVO DE PROCEDIMENTOS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-procedimento';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$resultado = RelatorioQuantitativoProcedimentoService::index();
|
||||
$itens = $resultado['procedimentos'];
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
|
||||
|
||||
return [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->cidadao->nome ?? 'Todos',
|
||||
'procedimento' => $procedimento
|
||||
? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
|
||||
'colunas' => collect(request()->columns),
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $resultado['totalizadores'],
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
use App\Services\Ambulatorio\RelatorioQuantitativoProducaoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class RelatorioQuantitativoProducaoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO QUANTITATIVO DE PRODUÇÃO';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-quantitativo-producao';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$resultado = RelatorioQuantitativoProducaoService::index();
|
||||
$itens = $resultado['procedimentos'];
|
||||
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$procedimento = Procedimento::where('codigo', request()->procedimento_codigo)->orderByDesc('competencia_id')->first();
|
||||
|
||||
return [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'ocupacao' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : 'Todas',
|
||||
'usuario' => $usuario->cidadao->nome ?? 'Todos',
|
||||
'procedimento' => $procedimento
|
||||
? MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}" : 'Todos',
|
||||
'idadeDe' => request()->idade_de,
|
||||
'idadeAte' => request()->idade_ate,
|
||||
'colunas' => collect(request()->columns),
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $resultado['totalizadores'],
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Enums\Ambulatorio\FeridaStatus;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Services\Ambulatorio\RelatorioRastreioFeridaService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class RelatorioRastreioFeridasController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE RASTREIO DE FERIDAS';
|
||||
private const TEMPLATE = 'ambulatorio.relatorio-rastreio-feridas';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$itens = RelatorioRastreioFeridaService::index();
|
||||
$unidade = Unidade::find(request()->unidade_id);
|
||||
$infraestrutura = Infraestrutura::find(request()->infraestrutura_id);
|
||||
$especialidade = Especialidade::find(request()->especialidade_id);
|
||||
$usuario = Usuario::find(request()->usuario_id);
|
||||
$ocupacao = Ocupacao::find(request()->ocupacao_id);
|
||||
$status = request()->status_id;
|
||||
|
||||
if (!is_null($status)) {
|
||||
switch ($status) {
|
||||
case FeridaStatus::ATIVO:
|
||||
$status = (object) ['nome' => 'Ativo'];
|
||||
break;
|
||||
|
||||
case FeridaStatus::CICATRIZADA:
|
||||
$status = (object) ['nome' => 'Cicatrizada'];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
|
||||
$status = (object) ['nome' => 'Todos'];
|
||||
}
|
||||
|
||||
if (isset($itens['atendimentos']) && is_array($itens['atendimentos'])) {
|
||||
$itens['atendimentos'] = collect($itens['atendimentos'])->map(function ($atendimento) {
|
||||
switch ((int) ($atendimento['cicatrizada'] ?? -1)) {
|
||||
case FeridaStatus::ATIVO:
|
||||
$atendimento['cicatrizada'] = 'Ativo';
|
||||
break;
|
||||
|
||||
case FeridaStatus::CICATRIZADA:
|
||||
$atendimento['cicatrizada'] = 'Cicatrizada';
|
||||
break;
|
||||
|
||||
default:
|
||||
$atendimento['cicatrizada'] = '-';
|
||||
break;
|
||||
}
|
||||
|
||||
return $atendimento;
|
||||
})->toArray();
|
||||
}
|
||||
|
||||
return [
|
||||
'periodo' => [
|
||||
'inicio' => request()->periodo['start'],
|
||||
'fim' => request()->periodo['end'],
|
||||
],
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todas',
|
||||
'especialidade' => $especialidade->nome ?? 'Todas',
|
||||
'usuario' => $usuario->nome ?? 'Todos',
|
||||
'cbo' => $ocupacao->codigo ?? 'Todos',
|
||||
'status' => $status->nome,
|
||||
'colunas' => collect(request()->columns),
|
||||
'itens' => $itens,
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate(), $orientation = 'landscape');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
||||
use App\Enums\Sigtap\Procedimento;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Utils\DataUtil;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class RequisicaoExameCitopatologicoColoUteroController extends Controller
|
||||
{
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
if (isset(request()->em_atendimento) && DataUtil::isStringTrue(request()->em_atendimento)) {
|
||||
|
||||
$data = $this->getDadosNaoSalvos();
|
||||
}
|
||||
else {
|
||||
|
||||
$data = $this->getDadosAtendimento($atendimentoId);
|
||||
}
|
||||
|
||||
$pdf = SnappyPdf::loadView('impressoes.template.ambulatorio.requisicao-exame-citopatologico-colo-utero', $data)
|
||||
->setOption('margin-bottom', 4)
|
||||
->setOption('margin-left', 2)
|
||||
->setOption('margin-right', 2)
|
||||
->setOption('margin-top', 4)
|
||||
->setOption('enable-local-file-access', true)
|
||||
->setPaper('a4')
|
||||
->setOrientation('portrait');
|
||||
|
||||
$pdf->setTimeout(180);
|
||||
|
||||
return $pdf->inline('requisicao-exame-citopatologico-colo-utero.pdf');
|
||||
}
|
||||
|
||||
private function getDadosNaoSalvos()
|
||||
{
|
||||
$currentLotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
|
||||
return [
|
||||
'requisitante' => [
|
||||
'unidade' => mb_str_split($currentLotacao->infraestrutura->unidade->nome_fantasia),
|
||||
'cnes' => mb_str_split($currentLotacao->infraestrutura->unidade->cnes),
|
||||
'municipio_nome' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->nome),
|
||||
'municipio_uf' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => mb_str_split($paciente->prontuario),
|
||||
'cns' => mb_str_split($paciente->cidadao->cns),
|
||||
'cpf' => mb_str_split($paciente->cidadao->cpf),
|
||||
'nome' => mb_str_split($paciente->cidadao->nome),
|
||||
'nome_social' => mb_str_split($paciente->cidadao->nome_social),
|
||||
'nome_mae' => mb_str_split($paciente->cidadao->nome_mae),
|
||||
'nacionalidade' => $paciente->cidadao->nacionalidade->descricao ?? null,
|
||||
'data_nascimento' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmY')),
|
||||
'idade' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (string) $paciente->cidadao->idade['anos']),
|
||||
'is_raca_cor_branca' => $paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
|
||||
'is_raca_cor_preta' => $paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
|
||||
'is_raca_cor_parda' => $paciente->cidadao->raca_cor_id === RacaCor::PARDA,
|
||||
'is_raca_cor_amarela' => $paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
|
||||
'is_raca_cor_indigena' => $paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
|
||||
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
|
||||
'endereco' => [
|
||||
'logradouro' => mb_str_split(isset($paciente->cidadao->domicilio->endereco->logradouro)
|
||||
? "{$paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
|
||||
. $paciente->cidadao->domicilio->endereco->logradouro->nome
|
||||
: ''),
|
||||
'numero' => mb_str_split((string) ($paciente->cidadao->domicilio->endereco->numero ?? '')),
|
||||
'complemento' => mb_str_split($paciente->cidadao->domicilio->endereco->complemento ?? ''),
|
||||
'bairro' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
|
||||
'uf' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
|
||||
'ibge_municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
|
||||
'municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
|
||||
'cep' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
|
||||
'referencia' => mb_str_split($paciente->cidadao->domicilio->endereco->referencia ?? ''),
|
||||
],
|
||||
'telefone' => [
|
||||
'ddd' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
|
||||
'numero' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 2)),
|
||||
'is_celular' => strlen($paciente->cidadao->telefone_principal->numero ?? '') === 11,
|
||||
],
|
||||
'is_escolaridade_analfabeta' => false,
|
||||
'is_escolaridade_fundamental_incompleto' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
|
||||
'is_escolaridade_fundamental_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
|
||||
'is_escolaridade_medio_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
|
||||
'is_escolaridade_superior_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
|
||||
],
|
||||
'solicitacoes' => [[]],
|
||||
];
|
||||
}
|
||||
|
||||
private function getDadosAtendimento($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$solicitacoesExames = collect();
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
|
||||
|
||||
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
|
||||
|
||||
$hasExame = $solicitacao->itens()
|
||||
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
|
||||
->whereHas('exame', fn ($q) => $q
|
||||
->whereIn('codigo', [
|
||||
Procedimento::COLETA_DE_MATERIAL_DO_COLO_DE_UTERO_PARA_EXAME_CITOPATOLOGICO,
|
||||
Procedimento::EXAME_CITOPATOLOGICO_CERVICO_VAGINAL_MICROFLORA,
|
||||
Procedimento::EXAME_CITOPATOLOGICO_CERVICO_VAGINAL_MICROFLORA_RASTREAMENTO,
|
||||
])
|
||||
)
|
||||
->exists();
|
||||
|
||||
if ($hasExame) {
|
||||
|
||||
$solicitacoesExames->push([]);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return [
|
||||
'requisitante' => [
|
||||
'unidade' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia),
|
||||
'cnes' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->cnes),
|
||||
'municipio_nome' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome),
|
||||
'municipio_uf' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => mb_str_split($atendimento->paciente->prontuario),
|
||||
'cns' => mb_str_split($atendimento->paciente->cidadao->cns),
|
||||
'cpf' => mb_str_split($atendimento->paciente->cidadao->cpf),
|
||||
'nome' => mb_str_split($atendimento->paciente->cidadao->nome),
|
||||
'nome_social' => mb_str_split($atendimento->paciente->cidadao->nome_social),
|
||||
'nome_mae' => mb_str_split($atendimento->paciente->cidadao->nome_mae),
|
||||
'nacionalidade' => $atendimento->paciente->cidadao->nacionalidade->descricao ?? null,
|
||||
'data_nascimento' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmY')),
|
||||
'idade' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (string) $atendimento->paciente->cidadao->idade['anos']),
|
||||
'is_raca_cor_branca' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
|
||||
'is_raca_cor_preta' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
|
||||
'is_raca_cor_parda' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::PARDA,
|
||||
'is_raca_cor_amarela' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
|
||||
'is_raca_cor_indigena' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
|
||||
'etnia_indigena' => Str::substr($atendimento->paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
|
||||
'endereco' => [
|
||||
'logradouro' => mb_str_split(isset($atendimento->paciente->cidadao->domicilio->endereco->logradouro)
|
||||
? "{$atendimento->paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
|
||||
. $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome
|
||||
: ''),
|
||||
'numero' => mb_str_split((string) ($atendimento->paciente->cidadao->domicilio->endereco->numero ?? '')),
|
||||
'complemento' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->complemento ?? ''),
|
||||
'bairro' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
|
||||
'uf' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
|
||||
'ibge_municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
|
||||
'municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
|
||||
'cep' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
|
||||
'referencia' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->referencia ?? ''),
|
||||
],
|
||||
'telefone' => [
|
||||
'ddd' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
|
||||
'numero' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 2)),
|
||||
'is_celular' => strlen($atendimento->paciente->cidadao->telefone_principal->numero ?? '') === 11,
|
||||
],
|
||||
'is_escolaridade_analfabeta' => false,
|
||||
'is_escolaridade_fundamental_incompleto' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
|
||||
'is_escolaridade_fundamental_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
|
||||
'is_escolaridade_medio_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
|
||||
'is_escolaridade_superior_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
|
||||
],
|
||||
'solicitacoes' => $solicitacoesExames,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Enums\Sigtap\Procedimento;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\MaskUtil;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class RequisicaoExameCitopatologicoMamaController extends Controller
|
||||
{
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
if (isset(request()->em_atendimento) && DataUtil::isStringTrue(request()->em_atendimento)) {
|
||||
|
||||
$data = $this->getDadosNaoSalvos();
|
||||
}
|
||||
else {
|
||||
|
||||
$data = $this->getDadosAtendimento($atendimentoId);
|
||||
}
|
||||
|
||||
$pdf = SnappyPdf::loadView('impressoes.template.ambulatorio.requisicao-exame-citopatologico-mama', $data)
|
||||
->setOption('margin-bottom', 4)
|
||||
->setOption('margin-left', 2)
|
||||
->setOption('margin-right', 2)
|
||||
->setOption('margin-top', 4)
|
||||
->setOption('enable-local-file-access', true)
|
||||
->setPaper('a4')
|
||||
->setOrientation('portrait');
|
||||
|
||||
$pdf->setTimeout(180);
|
||||
|
||||
return $pdf->inline('requisicao-exame-citopatologico-mama.pdf');
|
||||
}
|
||||
|
||||
private function getDadosNaoSalvos()
|
||||
{
|
||||
$currentLotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
|
||||
return [
|
||||
'requisitante' => [
|
||||
'unidade' => mb_str_split($currentLotacao->infraestrutura->unidade->nome_fantasia),
|
||||
'cnes' => mb_str_split($currentLotacao->infraestrutura->unidade->cnes),
|
||||
'municipio_uf' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
|
||||
'municipio_nome' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->nome),
|
||||
'ibge' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => mb_str_split($paciente->prontuario),
|
||||
'cns' => mb_str_split($paciente->cidadao->cns),
|
||||
'cpf' => mb_str_split($paciente->cidadao->cpf),
|
||||
'is_sexo_masculino' => $paciente->cidadao->sexo_id === Sexo::MASCULINO,
|
||||
'is_sexo_feminino' => $paciente->cidadao->sexo_id === Sexo::FEMININO,
|
||||
'nome' => mb_str_split($paciente->cidadao->nome),
|
||||
'nome_social' => mb_str_split($paciente->cidadao->nome_social),
|
||||
'nome_mae' => mb_str_split($paciente->cidadao->nome_mae),
|
||||
'rg' => [
|
||||
'numero' => mb_str_split($paciente->cidadao->carteiraIdentidade->numero ?? ''),
|
||||
'orgao_emissor' => mb_str_split($paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
|
||||
'uf' => mb_str_split($paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
|
||||
],
|
||||
'data_nascimento' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmY')),
|
||||
'idade' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (string) $paciente->cidadao->idade['anos']),
|
||||
'is_raca_cor_branca' => $paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
|
||||
'is_raca_cor_preta' => $paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
|
||||
'is_raca_cor_parda' => $paciente->cidadao->raca_cor_id === RacaCor::PARDA,
|
||||
'is_raca_cor_amarela' => $paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
|
||||
'is_raca_cor_indigena' => $paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
|
||||
'endereco' => [
|
||||
'logradouro' => mb_str_split(isset($paciente->cidadao->domicilio->endereco->logradouro)
|
||||
? "{$paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
|
||||
. $paciente->cidadao->domicilio->endereco->logradouro->nome
|
||||
: ''),
|
||||
'numero' => mb_str_split((string) ($paciente->cidadao->domicilio->endereco->numero ?? '')),
|
||||
'complemento' => mb_str_split($paciente->cidadao->domicilio->endereco->complemento ?? ''),
|
||||
'bairro' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
|
||||
'uf' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
|
||||
'ibge_municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
|
||||
'municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
|
||||
'cep' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
|
||||
'referencia' => mb_str_split($paciente->cidadao->domicilio->endereco->referencia ?? ''),
|
||||
],
|
||||
'telefone' => [
|
||||
'ddd' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
|
||||
'numero' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 2)),
|
||||
'is_celular' => strlen($paciente->cidadao->telefone_principal->numero ?? '') === 11,
|
||||
],
|
||||
'is_escolaridade_analfabeta' => false,
|
||||
'is_escolaridade_fundamental_incompleto' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
|
||||
'is_escolaridade_fundamental_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
|
||||
'is_escolaridade_medio_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
|
||||
'is_escolaridade_superior_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
|
||||
],
|
||||
'solicitacoes' => [[]],
|
||||
];
|
||||
}
|
||||
|
||||
private function getDadosAtendimento($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$solicitacoesExames = collect();
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
|
||||
|
||||
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
|
||||
|
||||
$hasExame = $solicitacao->itens()
|
||||
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
|
||||
->whereHas('exame', fn ($q) => $q
|
||||
->whereIn('codigo', [
|
||||
Procedimento::EXAME_CITOPATOLOGICO_DE_MAMA
|
||||
])
|
||||
|
||||
)
|
||||
->exists();
|
||||
|
||||
if ($hasExame) {
|
||||
|
||||
$solicitacoesExames->push([]);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return [
|
||||
'requisitante' => [
|
||||
'unidade' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia),
|
||||
'cnes' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->cnes),
|
||||
'municipio_uf' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
|
||||
'municipio_nome' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome),
|
||||
'ibge' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => mb_str_split($atendimento->paciente->prontuario),
|
||||
'cns' => mb_str_split($atendimento->paciente->cidadao->cns),
|
||||
'cpf' => mb_str_split($atendimento->paciente->cidadao->cpf),
|
||||
'is_sexo_masculino' => $atendimento->paciente->cidadao->sexo_id === Sexo::MASCULINO,
|
||||
'is_sexo_feminino' => $atendimento->paciente->cidadao->sexo_id === Sexo::FEMININO,
|
||||
'nome' => mb_str_split($atendimento->paciente->cidadao->nome),
|
||||
'nome_social' => mb_str_split($atendimento->paciente->cidadao->nome_social),
|
||||
'nome_mae' => mb_str_split($atendimento->paciente->cidadao->nome_mae),
|
||||
'rg' => [
|
||||
'numero' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->numero ?? ''),
|
||||
'orgao_emissor' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
|
||||
'uf' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
|
||||
],
|
||||
'data_nascimento' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmY')),
|
||||
'idade' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (string) $atendimento->paciente->cidadao->idade['anos']),
|
||||
'is_raca_cor_branca' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
|
||||
'is_raca_cor_preta' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
|
||||
'is_raca_cor_parda' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::PARDA,
|
||||
'is_raca_cor_amarela' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
|
||||
'is_raca_cor_indigena' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
|
||||
'endereco' => [
|
||||
'logradouro' => mb_str_split(isset($atendimento->paciente->cidadao->domicilio->endereco->logradouro)
|
||||
? "{$atendimento->paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
|
||||
. $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome
|
||||
: ''),
|
||||
'numero' => mb_str_split((string) ($atendimento->paciente->cidadao->domicilio->endereco->numero ?? '')),
|
||||
'complemento' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->complemento ?? ''),
|
||||
'bairro' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
|
||||
'uf' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
|
||||
'ibge_municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
|
||||
'municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
|
||||
'cep' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
|
||||
'referencia' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->referencia ?? ''),
|
||||
],
|
||||
'telefone' => [
|
||||
'ddd' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
|
||||
'numero' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 2)),
|
||||
'is_celular' => strlen($atendimento->paciente->cidadao->telefone_principal->numero ?? '') === 11,
|
||||
],
|
||||
'is_escolaridade_analfabeta' => false,
|
||||
'is_escolaridade_fundamental_incompleto' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
|
||||
'is_escolaridade_fundamental_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
|
||||
'is_escolaridade_medio_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
|
||||
'is_escolaridade_superior_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
|
||||
],
|
||||
'solicitacoes' => $solicitacoesExames,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
||||
use App\Enums\Sigtap\Procedimento;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class RequisicaoExameHistopatologicoMamografiaController extends Controller
|
||||
{
|
||||
private const TITLE = 'REQUISIÇÃO DE EXAME HISTOPATOLÓGICO - MAMOGRAFIA';
|
||||
private const TEMPLATE = 'ambulatorio.requisicao-exame-histopatologico-mamografia';
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$solicitacoesExames = collect();
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
|
||||
|
||||
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
|
||||
|
||||
$hasExame = $solicitacao->itens()
|
||||
->whereHas('exame', fn ($q) => $q
|
||||
->whereIn('codigo', [
|
||||
Procedimento::EXAME_ANATOMOPATOLOGICO_DE_MAMA_BIOPSIA,
|
||||
Procedimento::EXAME_ANATOMOPATOLOGICO_DE_MAMA_PECA_CIRURGICA,
|
||||
])
|
||||
)
|
||||
->exists();
|
||||
|
||||
if ($hasExame) {
|
||||
|
||||
$solicitacoesExames->push([]);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$data = [
|
||||
'requisitante' => [
|
||||
'unidade' => $atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnes' => $atendimento->createdLotacao->infraestrutura->unidade->cnes,
|
||||
'municipio_uf' => $atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome
|
||||
. " / {$atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf}",
|
||||
'ibge' => $atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->ibge,
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => $atendimento->paciente->prontuario,
|
||||
'cns' => MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns),
|
||||
'cpf' => MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf),
|
||||
'sexo' => $atendimento->paciente->cidadao->sexo->descricao ?? null,
|
||||
'nome' => $atendimento->paciente->cidadao->nome,
|
||||
'nome_social' => $atendimento->paciente->cidadao->nome_social,
|
||||
'nome_mae' => $atendimento->paciente->cidadao->nome_mae,
|
||||
'rg' => [
|
||||
'numero' => $atendimento->paciente->cidadao->carteiraIdentidade->numero ?? null,
|
||||
'orgao_emissor' => $atendimento->paciente->cidadao->carteiraIdentidade->orgao_emissor ?? null,
|
||||
'uf' => $atendimento->paciente->cidadao->carteiraIdentidade->estado->uf ?? null,
|
||||
],
|
||||
'data_nascimento' => is_null($atendimento->paciente->cidadao->data_nascimento)
|
||||
? null
|
||||
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('d/m/Y'),
|
||||
'idade' => $atendimento->paciente->cidadao->idade_formatada,
|
||||
'raca_cor' => is_null($atendimento->paciente->cidadao->raca_cor_id)
|
||||
? null
|
||||
: ($atendimento->paciente->cidadao->racaCor->descricao . (
|
||||
$atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA
|
||||
&& !is_null($atendimento->paciente->cidadao->etnia_indigena_id)
|
||||
? " ({$atendimento->paciente->cidadao->etniaIndigena->descricao})"
|
||||
: ''
|
||||
)),
|
||||
'endereco' => is_null($atendimento->paciente->cidadao->domicilio_id)
|
||||
? null
|
||||
: $atendimento->paciente->cidadao->domicilio->endereco->completo,
|
||||
'cep' => MaskUtil::getCepMasked($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep),
|
||||
'ibge' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge,
|
||||
'telefone' => MaskUtil::getPhoneMasked($atendimento->paciente->cidadao->telefone_principal->numero ?? null),
|
||||
'escolaridade' => $atendimento->paciente->cidadao->escolaridade->descricao ?? null,
|
||||
],
|
||||
'solicitacoes' => $solicitacoesExames,
|
||||
];
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Escolaridade;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Enums\Sigtap\Procedimento;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Utils\DataUtil;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class RequisicaoMamografiaController extends Controller
|
||||
{
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
if (isset(request()->em_atendimento) && DataUtil::isStringTrue(request()->em_atendimento)) {
|
||||
|
||||
$data = $this->getDadosNaoSalvos();
|
||||
}
|
||||
else {
|
||||
|
||||
$data = $this->getDadosAtendimento($atendimentoId);
|
||||
}
|
||||
|
||||
$pdf = SnappyPdf::loadView('impressoes.template.ambulatorio.requisicao-mamografia', $data)
|
||||
->setOption('margin-bottom', 4)
|
||||
->setOption('margin-left', 2)
|
||||
->setOption('margin-right', 2)
|
||||
->setOption('margin-top', 4)
|
||||
->setOption('enable-local-file-access', true)
|
||||
->setPaper('a4')
|
||||
->setOrientation('portrait');
|
||||
|
||||
$pdf->setTimeout(180);
|
||||
|
||||
return $pdf->inline('requisicao-mamografia.pdf');
|
||||
}
|
||||
|
||||
private function getDadosNaoSalvos()
|
||||
{
|
||||
$currentLotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
|
||||
return [
|
||||
'requisitante' => [
|
||||
'unidade' => mb_str_split($currentLotacao->infraestrutura->unidade->nome_fantasia),
|
||||
'cnes' => mb_str_split($currentLotacao->infraestrutura->unidade->cnes),
|
||||
'municipio_uf' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
|
||||
'municipio_nome' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->nome),
|
||||
'ibge' => mb_str_split($currentLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => mb_str_split($paciente->prontuario),
|
||||
'cns' => mb_str_split($paciente->cidadao->cns),
|
||||
'cpf' => mb_str_split($paciente->cidadao->cpf),
|
||||
'is_sexo_masculino' => $paciente->cidadao->sexo_id === Sexo::MASCULINO,
|
||||
'is_sexo_feminino' => $paciente->cidadao->sexo_id === Sexo::FEMININO,
|
||||
'nome' => mb_str_split($paciente->cidadao->nome),
|
||||
'nome_social' => mb_str_split($paciente->cidadao->nome_social),
|
||||
'nome_mae' => mb_str_split($paciente->cidadao->nome_mae),
|
||||
'nacionalidade' => $paciente->cidadao->nacionalidade->descricao ?? null,
|
||||
'rg' => [
|
||||
'numero' => mb_str_split($paciente->cidadao->carteiraIdentidade->numero ?? ''),
|
||||
'orgao_emissor' => mb_str_split($paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
|
||||
'uf' => mb_str_split($paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
|
||||
],
|
||||
'data_nascimento' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (new Carbon($paciente->cidadao->data_nascimento))->format('dmY')),
|
||||
'idade' => mb_str_split(is_null($paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (string) $paciente->cidadao->idade['anos']),
|
||||
'is_raca_cor_branca' => $paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
|
||||
'is_raca_cor_preta' => $paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
|
||||
'is_raca_cor_parda' => $paciente->cidadao->raca_cor_id === RacaCor::PARDA,
|
||||
'is_raca_cor_amarela' => $paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
|
||||
'is_raca_cor_indigena' => $paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
|
||||
'etnia_indigena' => Str::substr($paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
|
||||
'endereco' => [
|
||||
'logradouro' => mb_str_split(isset($paciente->cidadao->domicilio->endereco->logradouro)
|
||||
? "{$paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
|
||||
. $paciente->cidadao->domicilio->endereco->logradouro->nome
|
||||
: ''),
|
||||
'numero' => mb_str_split((string) ($paciente->cidadao->domicilio->endereco->numero ?? '')),
|
||||
'complemento' => mb_str_split($paciente->cidadao->domicilio->endereco->complemento ?? ''),
|
||||
'bairro' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
|
||||
'uf' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
|
||||
'ibge_municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
|
||||
'municipio' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
|
||||
'cep' => mb_str_split($paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
|
||||
'referencia' => mb_str_split($paciente->cidadao->domicilio->endereco->referencia ?? ''),
|
||||
],
|
||||
'telefone' => [
|
||||
'ddd' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
|
||||
'numero' => mb_str_split(Str::substr($paciente->cidadao->telefone_principal->numero ?? '', 2)),
|
||||
'is_celular' => strlen($paciente->cidadao->telefone_principal->numero ?? '') === 11,
|
||||
],
|
||||
'is_escolaridade_analfabeta' => false,
|
||||
'is_escolaridade_fundamental_incompleto' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
|
||||
'is_escolaridade_fundamental_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
|
||||
'is_escolaridade_medio_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
|
||||
'is_escolaridade_superior_completo' => $paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
|
||||
],
|
||||
'solicitacoes' => [[]],
|
||||
];
|
||||
}
|
||||
|
||||
private function getDadosAtendimento($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$solicitacoesExames = collect();
|
||||
|
||||
$atendimento->soaps()->where('is_rascunho', false)->get()->each(function ($soap) use ($solicitacoesExames) {
|
||||
|
||||
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
|
||||
|
||||
$hasExame = $solicitacao->itens()
|
||||
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
|
||||
->whereHas('exame', fn ($q) => $q
|
||||
->whereIn('codigo', [
|
||||
Procedimento::MAMOGRAFIA,
|
||||
Procedimento::MAMOGRAFIA_BILATERAL_PARA_RASTREAMENTO,
|
||||
])
|
||||
|
||||
)
|
||||
->exists();
|
||||
|
||||
if ($hasExame) {
|
||||
|
||||
$solicitacoesExames->push([]);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return [
|
||||
'requisitante' => [
|
||||
'unidade' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->nome_fantasia),
|
||||
'cnes' => mb_str_split($atendimento->createdLotacao->infraestrutura->unidade->cnes),
|
||||
'municipio_uf' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf),
|
||||
'municipio_nome' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome),
|
||||
'ibge' => mb_str_split($atendimento->createdLotacao->infraestrutura->endereco->logradouro->municipio->ibge),
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => mb_str_split($atendimento->paciente->prontuario),
|
||||
'cns' => mb_str_split($atendimento->paciente->cidadao->cns),
|
||||
'cpf' => mb_str_split($atendimento->paciente->cidadao->cpf),
|
||||
'is_sexo_masculino' => $atendimento->paciente->cidadao->sexo_id === Sexo::MASCULINO,
|
||||
'is_sexo_feminino' => $atendimento->paciente->cidadao->sexo_id === Sexo::FEMININO,
|
||||
'nome' => mb_str_split($atendimento->paciente->cidadao->nome),
|
||||
'nome_social' => mb_str_split($atendimento->paciente->cidadao->nome_social),
|
||||
'nome_mae' => mb_str_split($atendimento->paciente->cidadao->nome_mae),
|
||||
'nacionalidade' => $atendimento->paciente->cidadao->nacionalidade->descricao ?? null,
|
||||
'rg' => [
|
||||
'numero' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->numero ?? ''),
|
||||
'orgao_emissor' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->orgao_emissor ?? ''),
|
||||
'uf' => mb_str_split($atendimento->paciente->cidadao->carteiraIdentidade->estado->uf ?? ''),
|
||||
],
|
||||
'data_nascimento' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (new Carbon($atendimento->paciente->cidadao->data_nascimento))->format('dmY')),
|
||||
'idade' => mb_str_split(is_null($atendimento->paciente->cidadao->data_nascimento)
|
||||
? ''
|
||||
: (string) $atendimento->paciente->cidadao->idade['anos']),
|
||||
'is_raca_cor_branca' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::BRANCA,
|
||||
'is_raca_cor_preta' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::NEGRA,
|
||||
'is_raca_cor_parda' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::PARDA,
|
||||
'is_raca_cor_amarela' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::AMARELA,
|
||||
'is_raca_cor_indigena' => $atendimento->paciente->cidadao->raca_cor_id === RacaCor::INDIGENA,
|
||||
'etnia_indigena' => Str::substr($atendimento->paciente->cidadao->etniaIndigena->descricao ?? '', 0, 14),
|
||||
'endereco' => [
|
||||
'logradouro' => mb_str_split(isset($atendimento->paciente->cidadao->domicilio->endereco->logradouro)
|
||||
? "{$atendimento->paciente->cidadao->domicilio->endereco->logradouro->tipo->descricao} "
|
||||
. $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome
|
||||
: ''),
|
||||
'numero' => mb_str_split((string) ($atendimento->paciente->cidadao->domicilio->endereco->numero ?? '')),
|
||||
'complemento' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->complemento ?? ''),
|
||||
'bairro' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? ''),
|
||||
'uf' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? ''),
|
||||
'ibge_municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''),
|
||||
'municipio' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? ''),
|
||||
'cep' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep ?? ''),
|
||||
'referencia' => mb_str_split($atendimento->paciente->cidadao->domicilio->endereco->referencia ?? ''),
|
||||
],
|
||||
'telefone' => [
|
||||
'ddd' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 0, 2)),
|
||||
'numero' => mb_str_split(Str::substr($atendimento->paciente->cidadao->telefone_principal->numero ?? '', 2)),
|
||||
'is_celular' => strlen($atendimento->paciente->cidadao->telefone_principal->numero ?? '') === 11,
|
||||
],
|
||||
'is_escolaridade_analfabeta' => false,
|
||||
'is_escolaridade_fundamental_incompleto' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_INCOMPLETO,
|
||||
'is_escolaridade_fundamental_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::FUNDAMENTAL_COMPLETO,
|
||||
'is_escolaridade_medio_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::MEDIO_COMPLETO,
|
||||
'is_escolaridade_superior_completo' => $atendimento->paciente->cidadao->escolaridade_id === Escolaridade::SUPERIOR_GRADUACAO_COMPLETO,
|
||||
],
|
||||
'solicitacoes' => $solicitacoesExames,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,351 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
||||
|
||||
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Enums\Parametrizacao\Exame\Tipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Ambulatorio\Atendimento;
|
||||
use App\Models\Ambulatorio\AtendimentoSoapExameSolicitado;
|
||||
use App\Models\Ambulatorio\AtendimentoSoapTriagemNeonatalSolicitado;
|
||||
use App\Models\Ambulatorio\ClassificacaoRisco;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Geral\Ciap;
|
||||
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Services\Ambulatorio\AtendimentoService;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ServicoAnaliseDiagnosticoTerapiaSolicitacaoExameController extends Controller
|
||||
{
|
||||
private const TITLE = 'SERVIÇO DE ANÁLISES, DIAGNÓSTICOS E TERAPIA, SOLICITAÇÃO DE EXAMES (SADAT)';
|
||||
private const TEMPLATE = 'ambulatorio.servico-analise-diagnostico-terapia-solicitacao-exame';
|
||||
|
||||
public function __invoke($atendimentoId, $dados = [])
|
||||
{
|
||||
|
||||
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
||||
|
||||
$dadosNaoSalvos = self::getDadosNaoSalvos($atendimentoId);
|
||||
|
||||
AtendimentoService::saveLogImpressao(
|
||||
request()->atendimento_id,
|
||||
AtendimentoImpressaoTipo::SERVICO_DE_ANALISES_DIAGNOSTICOS_E_TERAPIA_SOLICITACAO_DE_EXAMES_SADAT
|
||||
);
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, $dadosNaoSalvos);
|
||||
} else {
|
||||
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getAtendimento($atendimentoId, $dados));
|
||||
}
|
||||
}
|
||||
|
||||
public static function getDadosNaoSalvos($pacienteId) {
|
||||
|
||||
$currentLotacao = self::getCurrentLotacao();
|
||||
$paciente = Paciente::where('id', $pacienteId)->first();
|
||||
|
||||
$solicitacoesExames = collect();
|
||||
|
||||
foreach (request()->exames as $solicitacao) {
|
||||
|
||||
$itens[] = [
|
||||
'exame' => [
|
||||
'codigo' => $solicitacao['codigo'],
|
||||
'nome' => $solicitacao['nome'],
|
||||
],
|
||||
];
|
||||
};
|
||||
|
||||
$solicitacoesExames->push([
|
||||
'data' =>Carbon::now()->format('d/m/Y') ?? null,
|
||||
'cid' => request()->cid ? request()->cid['codigo'] .' - '. request()->cid['nome'] : '-',
|
||||
'ciap' => request()->ciap ? request()->ciap['codigo'] .' - '. request()->ciap['descricao'] : '-',
|
||||
'classificacao_risco' => ClassificacaoRisco::findOrFail(request()->classificacao_risco_id)->descricao_encaminhamento,
|
||||
'justificativa' => request()->justificativa,
|
||||
'observacao' => request()->observacao,
|
||||
'itens' => $itens,
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $currentLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - '
|
||||
. $currentLotacao->ocupacao->nome,
|
||||
'documento' => $currentLotacao->usuario->registro_tipo_id
|
||||
? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $currentLotacao->usuario->registro_tipo_outro
|
||||
: $currentLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$currentLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
]);
|
||||
|
||||
return [
|
||||
'paraAssinar' => false,
|
||||
'requisitante' => [
|
||||
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnes' => $currentLotacao->infraestrutura->unidade->cnes,
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'idade' => $paciente->cidadao->idade_formatada,
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
||||
'endereco' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco),
|
||||
'logradouro' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->nome,
|
||||
'numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->numero,
|
||||
'sem_numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->sem_numero,
|
||||
'complemento' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->complemento ?? '',
|
||||
'cep' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep
|
||||
? MaskUtil::getCepMasked(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep)
|
||||
: null,
|
||||
'municipio' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->nome,
|
||||
'ibge' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->ibge,
|
||||
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
||||
],
|
||||
'solicitacoes' => $solicitacoesExames,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getAtendimento($atendimentoId, $dados = []) {
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$solicitacoesExames = collect();
|
||||
$regulacaoData = self::getRegulacaoData();
|
||||
|
||||
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|
||||
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
|
||||
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
|
||||
|
||||
if (!isset($dados['itens'])) {
|
||||
|
||||
$dados['itens'] = request()->itens;
|
||||
}
|
||||
|
||||
$solicitacoesItensIds = isset($dados['itens'])
|
||||
? collect($dados['itens'])->where('tipo_solicitacao', 'padrao')->pluck('id')
|
||||
: null;
|
||||
|
||||
$atendimento->soaps()
|
||||
->where('is_rascunho', false)
|
||||
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('id', $id))
|
||||
->get()
|
||||
->each(function ($soap) use ($solicitacoesExames, $regulacaoData, $solicitacoesItensIds) {
|
||||
|
||||
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames, $regulacaoData, $solicitacoesItensIds) {
|
||||
|
||||
$itens = $solicitacao->itens()
|
||||
->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id))
|
||||
->when(isset($solicitacoesItensIds), fn ($q) => $q->whereIn('id', $solicitacoesItensIds))
|
||||
->whereHas('exame', fn ($q) => $q->where('tipo_id', Tipo::LABORATORIAL))
|
||||
->when($regulacaoData['exames_ids'], fn ($q, $ids) => $q->whereIn('exame_id', $ids))
|
||||
->get()
|
||||
->map(fn ($item) => [
|
||||
'exame' => [
|
||||
'codigo' => MaskUtil::getProcedimentoMasked($item->exame->codigo),
|
||||
'nome' => $item->exame->nome,
|
||||
],
|
||||
]);
|
||||
|
||||
if ($itens->isNotEmpty()) {
|
||||
|
||||
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
|
||||
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
|
||||
|
||||
$solicitacoesExames->push([
|
||||
'data' => $solicitacao->created_at->format('d/m/Y'),
|
||||
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-',
|
||||
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-',
|
||||
'classificacao_risco' => $solicitacao->classificacaoRisco->descricao_encaminhamento ?? null,
|
||||
'justificativa' => $solicitacao->justificativa,
|
||||
'observacao' => $solicitacao->observacao,
|
||||
'itens' => $itens,
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
|
||||
. $solicitacao->createdLotacao->ocupacao->nome,
|
||||
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
|
||||
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
|
||||
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
]);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (!isset(request()->solicitacao_exame_item_id)) {
|
||||
|
||||
$solicitacoesPredefinidos = isset($dados['itens'])
|
||||
? collect($dados['itens'])->where('tipo_solicitacao', 'predefinido')
|
||||
: null;
|
||||
|
||||
AtendimentoSoapExameSolicitado::whereHas('soap', function ($q) use ($atendimento) {
|
||||
$q->where('is_rascunho', false)->where('atendimento_id', $atendimento->id);
|
||||
})
|
||||
->get()
|
||||
->map(function ($solicitacao) use ($solicitacoesExames, $solicitacoesPredefinidos) {
|
||||
|
||||
$itens = $solicitacao->examesSolicitados()
|
||||
->when(isset($solicitacoesPredefinidos), fn ($q) => $q
|
||||
->whereIn('id', $solicitacoesPredefinidos->where('solicitacao_id', $solicitacao->id)->pluck('exame_id'))
|
||||
)
|
||||
->get()
|
||||
->map(fn ($item) => [
|
||||
'exame' => [
|
||||
'codigo' => MaskUtil::getProcedimentoMasked($item->codigo_procedimento),
|
||||
'nome' => $item->descricao,
|
||||
],
|
||||
]);
|
||||
|
||||
if ($itens->isNotEmpty()) {
|
||||
|
||||
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
|
||||
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
|
||||
|
||||
$solicitacoesExames->push([
|
||||
'data' => $solicitacao->created_at->format('d/m/Y'),
|
||||
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-',
|
||||
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-',
|
||||
'classificacao' => null,
|
||||
'justificativa' => $solicitacao->justificativa,
|
||||
'observacao' => $solicitacao->observacao,
|
||||
'itens' => $itens,
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
|
||||
. $solicitacao->createdLotacao->ocupacao->nome,
|
||||
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
|
||||
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
|
||||
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
$solicitacoesPredefinidos = isset($dados['itens'])
|
||||
? collect($dados['itens'])->where('tipo_solicitacao', 'triagem_neonatal')
|
||||
: null;
|
||||
|
||||
AtendimentoSoapTriagemNeonatalSolicitado::whereHas('soap', function ($q) use ($atendimento) {
|
||||
$q->where('is_rascunho', false)->where('atendimento_id', $atendimento->id);
|
||||
})
|
||||
->get()
|
||||
->map(function ($solicitacao) use ($solicitacoesExames, $solicitacoesPredefinidos) {
|
||||
|
||||
$itens = $solicitacao->triagensNeonatalSolicitados()
|
||||
->when(isset($solicitacoesPredefinidos), fn ($q) => $q
|
||||
->whereIn('id', $solicitacoesPredefinidos->where('solicitacao_id', $solicitacao->id)->pluck('exame_id'))
|
||||
)
|
||||
->get()
|
||||
->map(fn ($item) => [
|
||||
'exame' => [
|
||||
'codigo' => MaskUtil::getProcedimentoMasked($item->codigo_procedimento),
|
||||
'nome' => $item->descricao,
|
||||
],
|
||||
]);
|
||||
|
||||
if ($itens->isNotEmpty()) {
|
||||
|
||||
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
|
||||
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
|
||||
|
||||
$solicitacoesExames->push([
|
||||
'data' => $solicitacao->created_at->format('d/m/Y'),
|
||||
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-',
|
||||
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-',
|
||||
'classificacao' => null,
|
||||
'justificativa' => $solicitacao->justificativa,
|
||||
'observacao' => $solicitacao->observacao,
|
||||
'itens' => $itens,
|
||||
'informacoes_administrativas' => [
|
||||
'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome,
|
||||
'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - '
|
||||
. $solicitacao->createdLotacao->ocupacao->nome,
|
||||
'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id
|
||||
? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $solicitacao->createdLotacao->usuario->registro_tipo_outro
|
||||
: $solicitacao->createdLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$solicitacao->createdLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return [
|
||||
'paraAssinar' => $paraAssinaturaEletronica,
|
||||
'requisitante' => [
|
||||
'unidade' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->nome_fantasia,
|
||||
'cnes' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->cnes,
|
||||
],
|
||||
'paciente' => [
|
||||
'prontuario' => $atendimento->paciente->prontuario,
|
||||
'nome' => $atendimento->paciente->cidadao->nome,
|
||||
'nome_social' => $atendimento->paciente->cidadao->nome_social,
|
||||
'idade' => $atendimento->paciente->cidadao->idade_formatada,
|
||||
'cns' => $atendimento->paciente->cidadao->cns ? MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $atendimento->paciente->cidadao->cpf ? MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
||||
'sexo' => $atendimento->paciente->cidadao->sexo->descricao,
|
||||
'data_nascimento' => $atendimento->paciente->cidadao->data_nascimento
|
||||
? $atendimento->paciente->cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'nome_mae' => $atendimento->paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'municipio' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'uf' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
'bairro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
||||
'logradouro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
|
||||
'numero' => $atendimento->paciente->cidadao->domicilio->endereco->numero ?? null,
|
||||
'sem_numero' => $atendimento->paciente->cidadao->domicilio->endereco->sem_numero ?? null,
|
||||
'complemento' => $atendimento->paciente->cidadao->domicilio->endereco->complemento ?? '',
|
||||
'cep' => $atendimento->paciente->cidadao->domicilio
|
||||
? MaskUtil::getCepMasked( $atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: null,
|
||||
'municipio' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'ibge' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
|
||||
'telefones' => $atendimento->paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'unidade_referencia' => $atendimento->paciente->unidade->nome_fantasia ?? null,
|
||||
],
|
||||
'solicitacoes' => $solicitacoesExames,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getRegulacaoData()
|
||||
{
|
||||
$regulacaoData = [
|
||||
'soap_id' => null,
|
||||
'exames_ids' => null,
|
||||
];
|
||||
|
||||
if (request()->regulacao_solicitacao_id) {
|
||||
|
||||
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
|
||||
|
||||
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
|
||||
$regulacaoData['exames_ids'] = $regulacaoSolicitacao->itens()->pluck('exame_id');
|
||||
}
|
||||
|
||||
return $regulacaoData;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user