package com.dbs.mplus.service.api.util;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 파라미터 맵핑 유틸 
 * @author DBS 
 *
 */
public class ParamMappingUtil {
	private final static Logger logger = LoggerFactory.getLogger(ParamMappingUtil.class);
	
	/**
	 * 주치의별 동의서 리스트
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _consent_getUnfinishedListPerDoctor(Map<String, Object> map) { 
		Map<String, Object> resultMap = map;
		
		// consentMstRid 동의서 마스터 아이디
		Object consentMstRid = resultMap.remove("consentmstrid");
		resultMap.put("consentMstRid", consentMstRid);
		// consentName 동의서 이름
		Object consentName = resultMap.remove("formnm");
		resultMap.put("consentName", consentName);
		// consentState 동의서 상태
		Object consentState = resultMap.remove("consentstate");
		resultMap.put("consentState", consentState);
		// formCd
		Object formCd = resultMap.remove("formcd");
		resultMap.put("formCd", formCd);
		// formGuid
		Object formGuid = resultMap.remove("formguid");
		resultMap.put("formGuid", formGuid);
		// formRid
		Object formRid = resultMap.remove("formrid");
		resultMap.put("formRid", formRid);
		// ocrNumber
		Object ocrNumber = resultMap.remove("ocrnumber");
		resultMap.put("ocrNumber", ocrNumber);
		// orderCd
		Object orderCd = resultMap.remove("ordercd");
		resultMap.put("orderCd", orderCd);
		// orderNo
		Object orderNo = resultMap.remove("orderno");
		resultMap.put("orderNo", orderNo);
		// patientCode
		Object patientCode = resultMap.remove("pid");
		resultMap.put("patientCode", patientCode);
		// visitType
		Object visitType = resultMap.remove("ordtype");
		resultMap.put("visitType", visitType);
		// createUserName
		Object createUserName = resultMap.remove("createusername");
		resultMap.put("createUserName", createUserName);
		
		return resultMap;
	}
	
	/**
	 * 환자정보 조회 맵핑 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _user_userinfo_find_userId(Map<String, Object> map) { 
		/* 샘플값 
		  "userId": "1492770",
		  "address": "대구광역시 동구 신천3동  281-14",
		  "cellphoneNo": [],
		  "zipCode": "701023",
		  "inHospitalYn": "N",
		  "pNm": "김혜선",
		  "genderCd": "F",
		  "birthDt": "19800517",
		  "vehicleNo": []
		 */
		
		// key값 변경 없음 
		return ParamMappingUtil.convertCopy(map); 
	}
	
	/**
	 * 환자정보 조회 맵핑 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _user_userinfo_getUserInfo(Map<String, Object> map) { 
		// 동일한 API에 파라미터만 다르게 해서 호출하는 경우이기 때문에 맵핑 함수도 같은걸 이용한다. 
		return _user_userinfo_find_userId(map); 
	}	
	
	
	/**
	 * 외래 진료이력 (수진이력) 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _history_getOutList(Map<String, Object> map) { 
		/* 샘플값 
		{
		  "resultinfo": {
		    "message": {
		      "description": [],
		      "code": "info",
		      "type": "info",
		      "msg": "정상적으로 처리되었습니다."
		    },
		    "result": [
		      {
		        "dataDate": "20150825",
		        "receiptNo": "1",
		        "doctorNm": "윤창호",
		        "receiptGubunNm": "당일접수",
		        "userId": "1496619",
		        "dataTime": "0913",
		        "departmentNm": "가정의학과"
		      },
		      {
		        "dataDate": "20150828",
		        "receiptNo": "1",
		        "doctorNm": "김아솔",
		        "receiptGubunNm": "당일접수",
		        "userId": "1496619",
		        "dataTime": "0955",
		        "departmentNm": "가정의학과"
		      }
		    ]
		  }
		}		  
		 */
		// 기본 내용은 동일 
		Map<String, Object> resultMap = ParamMappingUtil.convertCopy(map); 

		// 공통파라미터 변환 
		resultMap = ParamMappingUtil.convertCommonParameter(resultMap); 
		
		return resultMap; 
	}	
	
	/**
	 * 진료이력 (입원) 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _history_getInList(Map<String, Object> map) { 
		/* 샘플값 
		{
		  "resultinfo": {
		    "message": {
		      "description": [],
		      "code": "info",
		      "type": "info",
		      "msg": "정상적으로 처리되었습니다."
		    },
		    "result": {
		      "receiptNo": "1",
		      "departmentCd": "2100000000",
		      "dischargeDt": "20140105",
		      "attendDoctorNm": "성원준",
		      "userId": "3205726",
		      "departmentNm": "산부인과",
		      "admissionDt": "20140102"
		    }
		  }
		}		 
		 */
		
		// 기본 내용은 동일 
		Map<String, Object> resultMap = ParamMappingUtil.convertCopy(map); 
		// 공통파라미터 변환 
		resultMap = ParamMappingUtil.convertCommonParameter(resultMap); 
		
		return resultMap; 		
	}
	
	/**
	 * 진료이력 (진료비합계) 
	 */
	public static Map<String, Object> _history_getBillSum(Map<String, Object> map) { 
		/* 샘플코드 
		{
		  "resultinfo": {
		    "message": {
		      "description": [],
		      "code": "info",
		      "type": "info",
		      "msg": "정상적으로 처리되었습니다."
		    },
		    "result": [
		      {
		        "receiptNo": "1",
		        "patientAmt": "                 0",
		        "treatDt": "20160120",
		        "doctorNm": "배주은",
		        "departmentCd": "2240700000",
		        "hospitalCd": "031",
		        "userId": "1496619",
		        "totalAmt": "                 0",
		        "departmentNm": "치주과",
		        "mainSubCd": [],
		        "receiptAmt": "            22,910",
		        "billReceiptNo": "11",
		        "billNo": "7953",
		        "insuranceAmt": "                 0",
		        "dischargeDt": [],
		        "outstandingAmt": "           -22,910",
		        "receiptDt": "20160121",
		        "admissionDt": []
		      },
		      {
		        "receiptNo": "1",
		        "patientAmt": "            45,848",
		        "treatDt": "20160120",
		        "doctorNm": "배주은",
		        "departmentCd": "2240700000",
		        "hospitalCd": "031",
		        "userId": "1496619",
		        "totalAmt": "            46,308",
		        "departmentNm": "치주과",
		        "mainSubCd": [],
		        "receiptAmt": "                 0",
		        "billReceiptNo": "1",
		        "billNo": "10712",
		        "insuranceAmt": "               432",
		        "dischargeDt": [],
		        "outstandingAmt": "            22,910",
		        "receiptDt": "20160120",
		        "admissionDt": []
		      }
		    ]
		  }
		} 
		 */
		
		// 기본 내용은 동일 
		Map<String, Object> resultMap = ParamMappingUtil.convertCopy(map); 
		// 공통파라미터 변환 
		resultMap = ParamMappingUtil.convertCommonParameter(resultMap); 
		
		// 여기 값들은 병원에서 넘어오는 데이터에 공백이 들어있어서 삭제 필요 
		Iterator<String> keyIter = resultMap.keySet().iterator(); 
		String key = null; 
		Object value = null; 
		
		while(keyIter.hasNext()) {
			key = keyIter.next(); 
			value = resultMap.get(key); 
			// 99.999% string임 
			if(value instanceof String) { 
				String str = value.toString().trim(); 
				resultMap.put(key, str); 
			}
		}
		
		
		return resultMap; 	
	}
	
	/**
	 * 진료이력조회 (진료비 상세내역) 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _history_getBillDetail(Map<String, Object> map) { 
		/* 샘플값 
		{
		  "resultinfo": {
		    "message": {
		      "description": [],
		      "code": "info",
		      "type": "info",
		      "msg": "정상적으로 처리되었습니다."
		    },
		    "result": {
		      "mainSubCd": [],
		      "accumulationLclsNm": "합계",
		      "patientAmt": "14728",
		      "fullPatientAmt": "31148",
		      "selectMedicalAmt": "0",
		      "insuranceAmt": "432",
		      "userId": [],
		      "totalAmt": [],
		      "exceptSelectMedicalAmt": "0"
		    }
		  }
		}		
		 */
		
		// 기본 내용은 동일 
		Map<String, Object> resultMap = ParamMappingUtil.convertCopy(map); 
		// 공통파라미터 변환 
		resultMap = ParamMappingUtil.convertCommonParameter(resultMap); 
		
		return resultMap; 	
	}	

	/**
	 * 검사결과 목록 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _totalexam_getExamList(Map<String, Object> map) { 
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 
	}
	
	/**
	 * 입원안내문 목록 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _guide_inpatient_getList(Map<String, Object> map) {
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 
	}
	
	/**
	 * 입원안내문 내용 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _guide_inpatient_getDetail(Map<String, Object> map) { 
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 		
	}
	
	/**
	 * 입원환자 검사안내 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _guide_inpatientexam_getList(Map<String, Object> map) { 
/*
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "정상적으로 처리되었습니다."
    },
    "result": [
      {
        "examNm": "OP [AVF] ",
        "dataDate": "20160329",
        "dataTime": "1430",
        "dataOrder": "1",
        "note": "상세설명(예정)",
        "typeCd": "오늘"
      },
      {
        "examNm": "혈액투석",
        "dataDate": "20160330",
        "dataTime": "1300",
        "dataOrder": "4",
        "note": "상세설명(예정)",
        "typeCd": "내일"
      }
    ]
  }
}
 */
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 		
	}
	
	/**
	 * 예약 - 예약가능한 진료과 
	 * @param map
	 * @return
	 * @description api 정의된 key로 넘어와서 별도로 변환할 필요없음
	 */
	public static Map<String, Object> _reservation_booking_getRevDept(Map<String, Object> map) { 
/*
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "정상적으로 처리되었습니다."
    },
    "result": [
      {
        "departmentCd": "2230000000",
        "departmentNm": "가정의학과"
      },
      {
        "departmentCd": "2090000000",
        "departmentNm": "마취통증의학과"
      }
   ]	
 */
		
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 	
	}
	
	/**
	 * 예약 - 진료과에 의사 
	 * @param map
	 * @return
	 * @description api 정의된 key로 넘어와서 별도로 변환할 필요없음
	 */
	public static Map<String, Object> _reservation_booking_getRevDoc(Map<String, Object> map) { 
		/*
		final Map<String, Object> resultMap = new HashMap<String, Object>(); 
		
		// 진료과 코드 
		resultMap.put("departmentCd", map.get("dp")); 
		// 의사 코드 
		resultMap.put("doctorId", map.get("cd")); 
		// 의사명 
		resultMap.put("doctorNm", map.get("nm")); 		
		
		return resultMap; 
		*/
		return ParamMappingUtil.convertCopy(map); 
	}	
	
	/**
	 * 예약 - 진료과에 의사가 이용 가능한(?) 날짜 
	 * @param map
	 * @return
	 * @description api 정의된 key로 넘어와서 별도로 변환할 필요없음
	 */
	public static Map<String, Object> _reservation_booking_getRevDate(Map<String, Object> map) { 
/*
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "정상적으로 처리되었습니다."
    },
    "result": {
      "weekNm": "목",
      "dataDate": "20160331"
    }
  }
}
 */
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 	
	}	
	
	
	/**
	 * 예약 - 진료과에 의사가 이용 가능한(?) 날짜의 시간  
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _reservation_booking_getRevTime(Map<String, Object> map) { 
/*
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "정상적으로 처리되었습니다."
    },
    "result": [
      {
        "availReservCnt": "1",
        "secondReservCnt": [],
        "firstReservCnt": [],
        "dataTime": "1400",
        "secondAvailReservCnt": [],
        "firstAvailReservCnt": "1"
      }
    ]
*/		
		
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 	
	}	
	
	/**
	 * 예약조회 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _reserva_getRevList(Map<String, Object> map) { 
/*
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "정상적으로 처리되었습니다."
    },
    "result": [
      {
        "reservationMethod": "N",
        "dataDate": "20160304",
        "ordExamKindNm": "검사예약",
        "receiptGubunKindNm": "일반촬영 1실",
        "doctorId": "05043",
        "receiptNo": "0",
        "doctorNm": "안동빈",
        "departmentCd": "RA001",
        "dataTime": "0934",
        "departmentNm": "영상의학과"
      }]		
 */
		
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 
	}

	/**
	 * 예약 - 예약 리스트 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _reservation_search_getRevList(Map<String, Object> map) { 
/*
아직 파라미터가 제대로 안 넘어와서 샘플 메시지를 담아 둘 수 없음 
 */
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 		
	}		

	/**
	 * 도착확인 대상이 되는 항목 변환 
	 * 예약된 목록 중에서 도착확인 대상이 있으므로 예약목록 부분을 재활용함 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _arrival_arriveConfirmTargetList(Map<String, Object> map) { 
/*
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "정상적으로 처리되었습니다."
    },
    "result": {
      "progressStatusNm": "완료",
      "progressStatusCd": "C",
      "receiptNo": "1",
      "doctorNm": "황수경",
      "dataDate" : YYYYMMDD 
      "dataTime": "1037",
      "crmCd": " ",
      "departmentNm": "소아청소년과"
    }
  }
}		
 */
		// 진료룸 코드는 어차피 안쓰는 거라서 뭐가 됐든 처리안하고 변환만 해줌 
		return ParamMappingUtil.convertCopy(map); 
	}	
	
	/**
	 * 진료대기시간조회 결과 맵핑 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _waittime_getwaitingList(Map<String, Object> map) { 
/*
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "정상적으로 처리되었습니다."
    },
    "result": {
      "ranks": "0",
      "progressStatusNm": "호명하면 들어오십시요",
      "delayTime": "0",
      "doctorNm": "유나리",
      "checkTime": [],
      "dataTime": "1600",
      "departmentNm": "소화기내과"
    }
  }
}		
 */
		// 기본은 그대로 사용 
		Map<String, Object> resultMap = ParamMappingUtil.convertCopy(map); 		
		String dataTime = (String) resultMap.get("dataTime"); 
		
		if(dataTime == null) { 
			dataTime = "-"; 
		}
		// 당일접수는 0000으로 넘어옴 
		else if("0000".equals(dataTime)) {
			dataTime = "-"; 
		}
		resultMap.put("dataTime", dataTime); 
		
		return resultMap; 
	}	
	
	/**
	 * 가셔야할곳 목록  
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _roadlist_getVisitInfo(Map<String, Object> map) { 
/* 
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "3건이 조회되었습니다."
    },
    "result": [
      {
        "poiNm": "유방갑상선/대장항문소아내과",
        "nextLocation": "외래동 5층 유방갑상선외과 외래 2016-04-06",
        "doctorNm": "황승욱",
        "departmentNm": "유방갑상선외과"
      },
      {
        "poiNm": "유방갑상선/대장항문소아내과",
        "nextLocation": "외래동5층 유방갑상선외과",
        "doctorNm": "황승욱",
        "departmentNm": "유방갑상선외과"
      },
      {
        "poiNm": "조사실",
        "nextLocation": "2동 1층 조사실",
        "doctorNm": "황승욱",
        "departmentNm": "유방갑상선외과"
      }
    ]
  }
}		
 */

		// 하나만 보고 정리를 할 수 없어서 일단 그대로 반환  
		return ParamMappingUtil.convertCopy(map); 	
	}
	
	/**
	 * 처방조회 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _prescription_getPrescList(Map<String, Object> map) { 
/*
{
  "resultinfo": {
    "message": {
      "description": [],
      "code": "info",
      "type": "info",
      "msg": "정상적으로 처리되었습니다."
    },
    "result": [
      {
        "doseDay": "90",
        "effectNm": "혈압강하, 협심증 및 심근허혈증 치료제",
        "dangerNote": "갑작스런 복용중지를 금함.지속적인 두통, 심계항진, 체중증가, 호흡곤란 지속시에는 의사ㆍ약사에게 알림.졸음, 어지러움이 나타날 수 있으므로 운전 등 위험이 수반되는 기계조작시 주의",
        "prescriptionDt": "2016-01-06",
        "medicineNm": "아모디핀정 5mg",
        "usageNm": "아침식후30분복용하십시오",
        "departmentNm": "소화기내과",
        "dose": "2tab",
        "doseTm": "1"
      },
      {
        "doseDay": "90",
        "effectNm": "담즙분비,담석용해 및 간보호제",
        "dangerNote": "제산제와 병용시 최소 2시간 이상의 간격을 두고 투여.간질환 치료는 정기적인 검진이 시행되어야 함.담석이 용해되는 시간은 보통 6~24개월이기 때문에 치료성과에 대해 6개월마다 뢴트겐이나 초음파검사를 시행.발열, 호흡곤란, 기침 지속시 투여중지 후 의사ㆍ약사에게 알림",
        "prescriptionDt": "2016-01-06",
        "medicineNm": "우루사정 200mg",
        "usageNm": "아침, 점심, 저녁식후30분복용하십시오",
        "departmentNm": "소화기내과",
        "dose": "3tab",
        "doseTm": "3"
      },
      {
        "doseDay": "90",
        "effectNm": "만성 B형 간염바이러스 감염의 치료",
        "dangerNote": [],
        "prescriptionDt": "2016-01-06",
        "medicineNm": "엔테원 정 0.5mg",
        "usageNm": "아침식전1시간복용하십시오",
        "departmentNm": "소화기내과",
        "dose": "1tab",
        "doseTm": "1"
      }
    ]
  }
}
 */
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 	
	}	
	
	/**
	 * 순번기 - 장비목록 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _ticket_list(Map<String, Object> map) { 
		Map<String, Object> resultMap = ParamMappingUtil.convertCopy(map); 	
		
		return resultMap; 
	}	
	
	/**
	 * 순번기 - 번호표 발급 요청 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _ticket_issue(Map<String, Object> map) { 
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 	
	}
	/**
	 * 순번기 - 발급완료여부확인 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _ticket_checkissue(Map<String, Object> map){
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 	
	}
	/**
	 * 순번기 - 내가 발급받은 티켓 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _ticket_mytickets(Map<String, Object> map) { 
		Map<String, Object> resultMap = ParamMappingUtil.convertCopy(map); 		
	
		return resultMap; 
	}	
	
	/**
	 * 결제 가능한 대상 목록 
	 * @param map
	 * @return
	 */
	public static Map<String, Object>  _payment_approve_getPaymentList(Map<String, Object> map) {
		// 변환 
		Map<String, Object> resultMap = new HashMap<String, Object>(); 
		
		// 현재 승인대상목록 가져오는 부분이 완변하지가 않아서 임시 코드임 
		if(map.size() == 1) {
			logger.error("요청이 없음. map=" + map);
			return null; 
		}
		
		// 목록은 필요한 것만 건져서 화면에 내려줌 
		// 진료과명 
		resultMap.put("departmentNm", map.get("otpt_orddeptnm")); 
		// 진료의명 
		resultMap.put("doctorNm", map.get("otpt_orddrnm")); 
		// 진료날짜 
		resultMap.put("dataDate", map.get("otpt_orddd")); 
		// 진료시간 
		resultMap.put("dataTime", map.get("otpt_ordtm")); 
		// 접수번호 
		resultMap.put("receiptNo", map.get("otpt_cretno")); 	
		// 진료구분 
		resultMap.put("orderCd", map.get("otpt_ordtype")); 
		// 진료과 코드 
		resultMap.put("departmentCd", map.get("otpt_orddeptcd")); 
		// 환자번호 
	
//		// TODO  실험용 
//		logger.debug("convert \nbefore : " + map + "\nafter : " + resultMap);
//		
		
		return resultMap; 
	}
	/**
	 * 승인요청 상세 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _payment_approve_getPaymentDetail(Map<String, Object> map) { 
		// 이미 계산해버린 항목에 대해서 상세를 요청하면 병원에서는 계산된거니까 null을 반환하게됨. 
		if(map == null) { 
			return null; 
		}
		
		// 변환 
		Map<String, Object> resultMap = new HashMap<String, Object>(); 
		
		// 진료일자 
		resultMap.put("dataDate", map.get("opmi_orddd")); 
		// 납부할 금액
		resultMap.put("amount", map.get("opmi_rcptexptamt")); 
		// 접수번호 
		resultMap.put("receiptNo", map.get("opmi_cretno")); 
		// 환자번호 
		resultMap.put("userId", map.get("opmi_userId")); 
		// 진료과 코드 
		resultMap.put("departmentCd", map.get("opmi_orddeptcd")); 
		// 진료유형 
		resultMap.put("orderCd", map.get("opmi_ordtype")); 
		// 부분결제 여부 
		resultMap.put("payAll", "N"); 
		
		return resultMap; 
	}
	

	/**
	 * 검사결과 - 혈당 키 몸무게
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _totalexam_getPersonHealthInfo(Map<String, Object> map){
		// 그대로 사용 
		return ParamMappingUtil.convertCopy(map); 		
	}

	/* =============== 여기부터 부산대코드 그대로..  ================ */ 


	
	/**
	 * 도착확인 처리 결과 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _arrival_reqArrivedConfirm(Map<String, Object> map) { 
		if(map == null || map.isEmpty()) {
			return map; 
		}
		
		
		final Map<String, Object> resultMap = new HashMap<String, Object>(); 
		
		// {rtncode=S, rtnmsg=도착 확인이 완료 되었습니다.}
		
		resultMap.put("code", map.get("rtncode")); 
		resultMap.put("message", map.get("rtnmsg")); 
		
		
		return resultMap; 
	}
	
	/**
	 * 간호호출 - 이전 호출 중 미처리 내역 (아직 사용여부가 확정되지 않은 메소드) 
	 * @param map
	 * @return
	 */
	public static Map<String, Object> _call_nursePrevReq(Map<String, Object> map) { 
		final Map<String, Object> resultMap = new HashMap<String, Object>(); 
		
		// 환자번호 
		resultMap.put("userId", map.get("P_ID")); 
		// 요청내역 숫자  
		resultMap.put("reqCodeValue", map.get("REQ_CODE_VALUE")); 
		// 요청내역 문자열   
		resultMap.put("reqValue", map.get("REQ_VALUE"));
		// 기타 요청 내역
		resultMap.put("reqEtcValue", map.get("REQ_ETC_VALUE"));
		// 등록일  
		resultMap.put("regDt", map.get("REG_DT")); 
		// 갱신일 
		resultMap.put("updateDt", map.get("UPDATE_DT")); 
		
		return resultMap; 		
	}	
	
	
	
	/* =============== 여기부터는 손 본 코드.  ================ */ 	
	
	/**
	 * 유효한 값만 복사하기 
	 * @param map
	 * @return
	 */
	private static Map<String, Object> convertCopy(Map<String, Object> map) { 
		if(map == null) { 
			return null; 
		}
		
		
		final Map<String, Object> resultMap = new HashMap<>(); 
		
		final Iterator<String> keyIter = map.keySet().iterator(); 
		String key = null; 
		Object value = null; 
		
		while(keyIter.hasNext()) {
			key = keyIter.next(); 
			value = map.get(key); 
			
			// 대부분의 값은 String으로 넘어옴 
			if(value instanceof String) { 
				resultMap.put(key, value); 
			}
			// SQL을 통해 count 값으로 추려진 정보들이 BigDecimal로 넘어옴 
			else if(value instanceof BigDecimal) {
				resultMap.put(key, value); 
			}
		}
		
		return resultMap; 
	}	
	
	/**
	 * 우리 프로그램과 경대간 API 파라미터를 맞추기 위함.
	 * 현재는 보정이 필요한 곳이 많지는 않아서 따로 분리한 상태임. 
	 * - userId --> userId 
	 * - pNm --> pName 
	 * 
	 * @param map
	 * @return
	 */
	private static Map<String, Object> convertCommonParameter(Map<String, Object> map) { 
		Object data = null;
		
		// userId --> userId로 변경 
		data = map.remove("userId"); 
		if(data != null) { 
			map.put("userId", data); 
		}
		
		// pNm --> pName으로 변경 
		data = map.remove("pNm"); 
		if(data != null) { 
			map.put("pName", data); 
		}
		
		return map; 		
	}
}
