Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.                                                             

  

Informações Gerais

 

Especificação

Produto

Datasul

Módulo

Gestão de Planos de Saúde

Segmento Executor

Saúde

Projeto

D_SAU_GPS_Roadmap20152016

IRM

DGPS01-1

Requisito

SAUGPS01-15

Subtarefa

 

País

(x) Brasil  (  ) Argentina  (  ) Mexico  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colombia   (  ) Outro _____________.

Objetivo

Criação de um novo perfil de usuário para permitir a alteração de propostas e beneficiários incluídos pelo mesmo usuário.


Definição da Regra de Negócio

1) Criar um novo perfil de usuário que,

quanto à inclusão:
possa incluir propostas, mas não possa enviá-las para aprovação;
possa incluir beneficiários, desde que sejam em propostas incluídas por ele mesmo, mas não possa enviá-los para aprovação;

quanto à alteração:
possa modificar propostas, desde que estas tenham sido incluídas por ele mesmo. 
possa modificar beneficiários, desde que estes sejam de propostas incluídas por ele mesmo. 

 

Para isso, alterar os programas:

No programa  src/main/flex/com/datasul/ems/healthcare/global/enumeration/RoleEnumeration.as adicionar uma nova constante que represente o novo perfil:

// Constante que representa o papel Auxiliar de Cadastro.
public static const REGISTER_AUXILIAR : String = "RAU";

No programa src/main/flex/com/datasul/ems/healthcare/hvp/HVPAccessibilityRoles.as também adicionar constantes para o novo perfil criado:

public static const BENEFICIARY_ROLES:Array = [
				{data:RoleEnumeration.FILE_AUDITOR},
				{data:RoleEnumeration.CONTRACTING_PARTY},
				{data:RoleEnumeration.CONTRACT_ANALYST},
				{data:RoleEnumeration.SALES_ASSISTANT},
				{data:RoleEnumeration.REGISTER_ASSISTANT},
				{data:RoleEnumeration.REGISTER_AUXILIAR}];
		
public static const CONTRACTING_PARTY_ROLES:Array = [
				{data:RoleEnumeration.SALES_ASSISTANT},
				{data:RoleEnumeration.REGISTER_ASSISTANT},
				{data:RoleEnumeration.REGISTER_AUXILIAR}];


Em todos os programas que utilizarem a constante SALES_ASSISTANT, será necessário incluir uma igual validação para a nova constante criada. Estes programas são:

src/main/flex/com/datasul/ems/healthcare/hvp/createcontract/ui/ContractFilter.mxml
src/main/flex/com/datasul/ems/healthcare/hvp/contract/controller/ContractFilterController.as
src/main/flex/com/datasul/ems/healthcare/hvp/createcontract/zoom/ProposalZoomFilter.mxml
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/maintenance/controller/BeneficiaryInformationsController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/maintenance/controller/BeneficiaryMaintenanceController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/maintenance/controller/RepassDestinyController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/model/BeneficiaryCRUDModel.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/model/BeneficiaryHeadFilterModel.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/model/BeneficiaryModel.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/model/BeneficiaryWizardModel.as
src/main/flex/com/datasul/ems/healthcare/hvp/person/company2/handler/HandleCheckModifyPermission.as
src/main/flex/com/datasul/ems/healthcare/hvp/person/demographic2/handler/HandleCheckModifyPermission.as


No programa src/main/flex/com/datasul/ems/healthcare/hvp/contract/controller/ContractCRUDController.as, no método chamado ao clicar no botão enviar para liberação (auditButtonHandler()), testar se o usuário pertence ao novo perfil e não permitir enviar para liberação:

public function auditButtonHandler() : void {
    var message:UIMessage;
    if (!checkSelectedProposal()){
        message = new UIMessage("Atenção!", 
                                "Nenhuma proposta selecionada para enviar para a liberação.",
        UIMessage.WARNING);
    } else {
        if (RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR)) {
            message = new UIMessage("Atenção",
                                    "Usuário não possui permissão para enviar esta proposta para liberação",
                                    UIMessage.INFO); 
        }
        else message = new UIMessage("Enviar para liberação", 
                                     "Você deseja mesmo enviar as propostas selecionadas para liberação?", 
                                    UIMessage.CONFIRM, "", "", sendProposalToLiberation);
      }
    MessageUtil.showMessage(message);
}

No método chamado ao clicar no botão alterar (modifyButtonHandler()), testar se o usuário pertence ao novo perfil e não permitir realizar a alteração do contrato:

if (RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR) && (this._model.selectedProposal.userName != UserManager.getInstance().user.loginName)) {
				MessageUtil.showMessage(new UIMessage("Atenção","Usuário não possui permissão para alterar esta proposta",UIMessage.INFO));
				return; 
}

 

No programa src\main\flex\com\datasul\ems\healthcare\hvp\contract\controller\ContractWizardController.as, método responsável por setar os dados na tela de sumário da proposta criada (setupProposalCreatedSummary()), alterar para que o botão de enviar para auditoria fique visível apenas para usuários que não possuam o novo papel:

private function setupProposalCreatedSummary() : void {
		this._model.proposalCreatedSummary.model.proposal = this._model.proposalDTO;
		
		if(this._model.proposalCreatedSummary.hasEventListener(FlexEvent.CREATION_COMPLETE)){
			this._model.proposalCreatedSummary.addEventListener(FlexEvent.CREATION_COMPLETE,initializeProposalCreatedSummary);
		}
}

Desta forma, criar o método: 

public function initializeProposalCreatedSummary(event:FlexEvent=null) : void{			
			this._model.proposalCreatedSummary.chkSendToAuditory.selected = false;
			this._model.proposalCreatedSummary.chkSendToAuditory.visible = RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR);
			this._model.proposalCreatedSummary.chkSendToAuditory.includeInLayout = RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR);
		}

 

No programa src/main/flex/com/datasul/ems/healthcare/hvp/contract/controller/updatemenu/ContractUpdateMenuController.as, método responsável por verificar se o botão de liberação da proposta deve estar habilitado (verifyEnabledLiberateProposal()), testar se o usuário logado pertence ao novo perfil, adicionando o código:

if (!RoleHelper.gotRole(RoleEnumeration.REGISTER_AUXILIAR)){    			
	return false;				
}

 

No programa src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryController.as, no método responsável por verificar a permissão de acesso à modificação de um determinado beneficiário (verifyRolePermissionForUpdate(crud : BenefsCRUDDTO )), verificar se o usuário logado pertence ao novo perfil. Em caso afirmativo, não permitir a alteração de beneficiários cuja inclusão tenha sido realizada por um usuário diferente do logado:

private function verifyRolePermissionForUpdate(crud : BenefsCRUDDTO ) : Boolean {
			if (crud.isSimulationBeneficiary) {
				return true;
			}
			if(this._model.isRegisterAuxiliar && (this._model.proposal.typingUser != UserManager.getInstance().user.loginName)) {				
				this.message = new UIMessage("Atenção", "Usuário não possui permissão " + 
													 	"para alterar beneficiários", UIMessage.INFO);
				MessageUtil.showMessage(this.message);
				return false;
			}

 

No programa src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryCRUDController.as, no método responsável pela liberação do beneficiário (releaseBeneficiaryFromPendingPortlet()), verificar se o usuário logado pertence ao novo perfil. Em caso afirmativo, não permitir a liberação de beneficiários cuja inclusão tenha sido realizada por um usuário diferente do logado:

private function releaseBeneficiaryFromPendingPortlet() : void {
			
			var message : UIMessage;
			
			// Caso não exista algum beneficiário selecionado, exibe erro e aborta o processo.
			var beneficiary:BenefsCRUDDTO = this._view.dg.selectedItem as BenefsCRUDDTO;
			if (beneficiary == null) {
				message = new UIMessage("Atenção", "Selecione ao menos um beneficiário para ser liberado", UIMessage.INFO);
				MessageUtil.showMessage(message);
				return;
			}
			
			if(this._model.isRegisterAuxiliar && (this._model.proposal.typingUser != UserManager.getInstance().user.loginName)) {				
				message = new UIMessage("Atenção", "Usuário não possui permissão " + 
						     				 	   "para liberar beneficiários", UIMessage.INFO);
				MessageUtil.showMessage(message);
				return;
			}

 

Nos programas abaixo, adicionar as validações do novo perfil. Sempre que houver uma validação para o perfil de SalesAssistant(SAS) o mesmo deve ser feito para o novo perfil, como por exemplo:

Alterar:
if(!this._model.isSalesAssistant && !this._model.isSalesAuxiliar && !this._model.isRegisterAssistant && !this._model.isContractingParty) 
 
Para:
if(!this._model.isSalesAssistant && (!this._model.isSalesAuxiliar || !this._model.isRegisterAuxiliar) && !this._model.isRegisterAssistant && !this._model.isContractingParty) 

src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryCRUDController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryHeaderFilterController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryWizardController.as
src/main/flex/com/datasul/ems/healthcare/hvp/newbeneficiary/controller/BeneficiaryCRUDController.as
src/main/flex/com/datasul/ems/healthcare/hvp/person/company2/handler/HandleCheckModifyPermission.as
src/main/flex/com/datasul/ems/healthcare/hvp/person/demographic2/handler/HandleCheckModifyPermission.as
 

 2) Na tela da Auditoria de Contratos, incluir o filtro abaixo:

 

Somente contratos pendentes de aprovação: Ao selecionar este filtro serão exibidos os contratos que ainda não sofreram/iniciaram auditoria por algum auditor.
Somente meus contratos: Ao selecionar esta opção, serão exibidos apenas os contratos cujo auditor responsável seja o usuário logado.
Todos: Ao selecionar esta opção, serão exibidos todos os contratos, ou seja, sem filtro.

 

Alterar os programas:

No programa src/main/flex/com/datasul/ems/healthcare/hvp/auditcontract/ui/AuditContractView.mxml, adicionar a tela os novos filtros:

<mx:ApplicationControlBar height="30" top="10" left="10" right="10">
			<mx:Label text="Propostas Pendentes de Auditoria ({this.model.proposalsInAuditoryLenght})" 
					  fontWeight="bold" fontSize="12"/>
					
			<mx:HBox paddingLeft="40" width="100%" horizontalGap="20">
			
				<mx:RadioButtonGroup id="radioGroupFilter" change="this.controller.onChangeRadioGroupFilter(event)"/>
						
			   	<mx:RadioButton id="rbAll"  value="1" label="Todos" groupName="radioGroupFilter" selected="true"/>
				<mx:RadioButton id="rbPendingApproval" value="2" label="Somente contratos pendentes de aprovação" groupName="radioGroupFilter"/>
				<mx:RadioButton id="rbMyContracts"     value="3" label="Somente meus contratos" groupName="radioGroupFilter"/>
						  	
			</mx:HBox>
				
			<mx:Spacer width="100%"/>					
			
			<mx:LinkButton icon="@Embed('/assets/icons/hot/refresh_16_hot.png')" 
						   click="this.controller.getProposalsPendingOfAuditory()"
						   toolTip="Recarregar listagem"/>
</mx:ApplicationControlBar>

Com esta alteração é necessário adicionar ao programa src/main/flex/com/datasul/ems/healthcare/hvp/auditcontract/model/AuditContractModel.as a variável proposalsInAuditoryLenght:

Bindable
public var proposalsInAuditoryLenght : String = "000";

E no programa src/main/flex/com/datasul/ems/healthcare/hvp/auditcontract/ui/AuditContractController.as adicionar as tratativas do filtro:

 
Função auditContractResultHandler:
 
private function auditContractResultHandler(event : AuditContractResultEvent) : void {
			if(event.type == AuditContractResultEvent.GET_PROPOSALS_PENDING_AUDITORY) {
				
				this._model.proposalsInAuditoryList = event.resultCollection;
				this._model.proposalsInAuditoryList.filterFunction = this.filterProposalsInAuditory;
				this._model.proposalsInAuditoryList.refresh();
				this.formatProposalsInAuditoryList();

 
Adicionar as novas funções:
 
private function formatProposalsInAuditoryList() : void {
			
			if(this._model.proposalsInAuditoryList.length < 10){
				this._model.proposalsInAuditoryLenght = '00' + String(this._model.proposalsInAuditoryList.length);
				return;
			}
			
			if(this._model.proposalsInAuditoryList.length >= 10 && this._model.proposalsInAuditoryList.length < 100){
				this._model.proposalsInAuditoryLenght = '0' + String(this._model.proposalsInAuditoryList.length);
				return;
			}			
			this._model.proposalsInAuditoryLenght = String(this._model.proposalsInAuditoryList.length);			
		}		
		
		public function onChangeRadioGroupFilter(e:Event = null) : void {
			this._model.proposalsInAuditoryList.refresh();
			this.formatProposalsInAuditoryList();
		}
		
		private function filterProposalsInAuditory(item:Object) : Boolean {			
            if(item == null) {
                return false;
            }
           
           var proposalDTO:ProposalDTO = item as ProposalDTO;
           var filterValue : int = this._view.radioGroupFilter.selectedValue as int;
           
           switch (filterValue) {
				case 1: //Todos
					return true;
				case 2: //Pendente de Aprovacao				
		           if(proposalDTO.situationCode == ProposalStatusEnumeration.PENDING_APPROVAL){
		           		return true;
		           }		           
		           return false;				
				case 3: //Somente meus contratos				
					if(UserManager.getInstance().user.loginName == proposalDTO.approverName){
						return true;
					}					
					return false;					
           }           
            return false;
        }	
 

Rotina

Tipo de Operação

Opção de Menu

Regras de Negócio

[contractView - Manutenção Contratos]

[Alteração]

[VP - Venda de Planos -> Cadastros]

-

[beneficiaryView - Manutenção Beneficiário]

[Alteração]

[VP - Venda de Planos -> Cadastros]

-

 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.                                                             

#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))