init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

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