This commit is contained in:
@@ -0,0 +1,227 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\Medicamento\ViaAdministracao;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\Receita;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\ReceitaMedicamento;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReceitaController extends Controller
|
||||
{
|
||||
private const TITLE = 'Receita médica';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.receita-medica';
|
||||
|
||||
public static function getTemplate($atendimentoId = null, $params = [])
|
||||
{
|
||||
$receitasIds = $params['receitas_ids'] ?? [];
|
||||
$params['para_assinatura_eletronica'] = $params['para_assinatura_eletronica'] ?? false;
|
||||
|
||||
$paraAssinaturaEletronica = $params['para_assinatura_eletronica'] === true
|
||||
|| (DataUtil::isStringBoolean($params['para_assinatura_eletronica'])
|
||||
&& DataUtil::isStringTrue($params['para_assinatura_eletronica']));
|
||||
|
||||
$receitas = $atendimentoId
|
||||
? Receita::orderByDesc('created_at')
|
||||
->whereHas('medicamentos')
|
||||
->whereHas('atendimentoMedico', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->when(!empty($receitasIds), fn ($q) => $q->whereIn('id', $receitasIds))
|
||||
->get()
|
||||
: request()->receitas;
|
||||
|
||||
$data['receitas'] = [];
|
||||
$data['exibirAssinatura'] = !$paraAssinaturaEletronica;
|
||||
|
||||
foreach ($receitas as $key => $receita) {
|
||||
|
||||
if ((is_array($receita) && is_numeric($receita['id'] ?? null))
|
||||
|| $receita instanceof Receita
|
||||
) {
|
||||
|
||||
if (!($receita instanceof Receita)) {
|
||||
|
||||
$receita = Receita::findOrFail($receita['id']);
|
||||
}
|
||||
|
||||
$paciente = $receita->atendimentoMedico->atendimento->faa->paciente;
|
||||
|
||||
$enderecoPaciente = $paciente->cidadao->domicilio
|
||||
? "{$paciente->cidadao->domicilio->endereco->completo} - "
|
||||
. MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '';
|
||||
|
||||
$data['receitas'][$key] = [
|
||||
'isEspecial' => false,
|
||||
'profissional' => [
|
||||
'nome' => $receita->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $receita->updatedLotacao->ocupacao->nome,
|
||||
'documento' => $receita->updatedLotacao->usuario->registro_tipo_id
|
||||
? ($receita->updatedLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $receita->updatedLotacao->usuario->registro_tipo_outro
|
||||
: $receita->updatedLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$receita->updatedLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'endereco' => $receita->updatedLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($receita->updatedLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $enderecoPaciente,
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $receita->created_at->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => [],
|
||||
];
|
||||
|
||||
$medicamentos = $receita->medicamentos->where('medicamento.receita_tipo_id', TipoReceita::COMUM);
|
||||
|
||||
foreach ($medicamentos as $medicamento) {
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'nome' => $medicamento->medicamento->nome,
|
||||
'usoContinuo' => $medicamento->uso_continuo,
|
||||
'doseUnica' => $medicamento->dose_unica,
|
||||
'livre' => $medicamento->livre,
|
||||
'viaAdministracao' => $medicamento->medicamento->via_administracao_id === ViaAdministracao::OUTRAS
|
||||
? $medicamento->via_administracao_outras
|
||||
: $medicamento->medicamento->viaAdministracao->nome,
|
||||
'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia,
|
||||
'recomendacoes' => $medicamento->recomendacoes ?? '',
|
||||
'descricao' => $medicamento->descricao ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
$medicamentosManuais = $receita->medicamentos->whereNotNull('medicamento_manual');
|
||||
|
||||
foreach ($medicamentosManuais as $medicamentoManual) {
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'medicamento_manual' => $medicamentoManual->medicamento_manual,
|
||||
'usoContinuo' => $medicamentoManual->uso_continuo,
|
||||
'doseUnica' => $medicamentoManual->dose_unica,
|
||||
'livre' => $medicamentoManual->livre,
|
||||
'viaAdministracao' => null,
|
||||
'posologia' => $medicamentoManual->livre ? $medicamentoManual->descricao : $medicamentoManual->posologia,
|
||||
'recomendacoes' => $medicamentoManual->recomendacoes ?? '',
|
||||
'descricao' => $medicamentoManual->descricao ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
$prescricoesManuais = $receita->medicamentos->whereNotNull('prescricao_manual');
|
||||
|
||||
foreach ($prescricoesManuais as $prescricaoManual) {
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'prescricao_manual' => $prescricaoManual->prescricao_manual,
|
||||
];
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
|
||||
$enderecoPaciente = $paciente->cidadao->domicilio
|
||||
? "{$paciente->cidadao->domicilio->endereco->completo} - "
|
||||
. MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '';
|
||||
|
||||
$data['receitas'][$key] = [
|
||||
'isEspecial' => false,
|
||||
'profissional' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'cbo' => $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',
|
||||
],
|
||||
'unidade' => [
|
||||
'endereco' => $lotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($lotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $enderecoPaciente,
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => [],
|
||||
];
|
||||
|
||||
foreach ($receita['medicamentos'] as $medicamento) {
|
||||
|
||||
$medicamento = new ReceitaMedicamento($medicamento);
|
||||
|
||||
if ($medicamento->medicamento && $medicamento->medicamento->receita_tipo_id === TipoReceita::COMUM) {
|
||||
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'nome' => $medicamento->medicamento->nome,
|
||||
'usoContinuo' => $medicamento->uso_continuo,
|
||||
'doseUnica' => $medicamento->dose_unica,
|
||||
'livre' => $medicamento->livre,
|
||||
'viaAdministracao' => $medicamento->medicamento->via_administracao_id === ViaAdministracao::OUTRAS
|
||||
? $medicamento->via_administracao_outras
|
||||
: $medicamento->medicamento->viaAdministracao->nome,
|
||||
'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia,
|
||||
'recomendacoes' => $medicamento->recomendacoes ?? '',
|
||||
'descricao' => $medicamento->descricao ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
if ($medicamento->medicamento_manual) {
|
||||
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'medicamento_manual' => $medicamento->medicamento_manual,
|
||||
'usoContinuo' => $medicamento->uso_continuo,
|
||||
'doseUnica' => $medicamento->dose_unica,
|
||||
'livre' => $medicamento->livre,
|
||||
'viaAdministracao' => null,
|
||||
'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia,
|
||||
'recomendacoes' => $medicamento->recomendacoes ?? '',
|
||||
'descricao' => $medicamento->descricao ?? '',
|
||||
];
|
||||
}
|
||||
|
||||
if ($medicamento->prescricao_manual) {
|
||||
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'prescricao_manual' => $medicamento->prescricao_manual,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId = null)
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $pdf->stream(self::getTemplate($atendimentoId, request()->all()), 'receita-medica');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user