adjust patient
This commit is contained in:
@@ -28,6 +28,7 @@ type CreateDto struct {
|
|||||||
RegisteredAt *time.Time `json:"registeredAt"`
|
RegisteredAt *time.Time `json:"registeredAt"`
|
||||||
RegisteredBy_User_Name *string `json:"registeredBy_user_name" validate:"maxLength=100"`
|
RegisteredBy_User_Name *string `json:"registeredBy_user_name" validate:"maxLength=100"`
|
||||||
Status_Code erc.ActiveStatusCode `json:"status_code" validate:"maxLength=10"`
|
Status_Code erc.ActiveStatusCode `json:"status_code" validate:"maxLength=10"`
|
||||||
|
Number *string `json:"number"`
|
||||||
|
|
||||||
pa.AuthInfo
|
pa.AuthInfo
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,13 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run pre-middleware -> Generate number
|
||||||
|
nomr, err := mwRunner.RunGenerateNumberMiddleware(generatePatientNumber)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
input.Number = nomr
|
||||||
|
|
||||||
if person_id, err := upe.CreateOrUpdatePerson(input.Person, &event, tx); err != nil {
|
if person_id, err := upe.CreateOrUpdatePerson(input.Person, &event, tx); err != nil {
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Patient) error {
|
|||||||
inputSrc = &inputTemp.CreateDto
|
inputSrc = &inputTemp.CreateDto
|
||||||
}
|
}
|
||||||
|
|
||||||
if data.Id == 0 {
|
if data.Number == nil {
|
||||||
medRecNum, err := GenerateNextMedicalRecordNumber()
|
medRecNum, err := GenerateNextMedicalRecordNumber()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -52,38 +52,57 @@ func GenerateNextMedicalRecordNumber() (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
var nextInt int64
|
//var nextInt int64
|
||||||
var format string
|
//var format string
|
||||||
|
|
||||||
|
//if last == "" {
|
||||||
|
// // No existing records, start with 10 digits
|
||||||
|
// nextInt = 1
|
||||||
|
// format = "%08d"
|
||||||
|
//} else {
|
||||||
|
// n, err := strconv.ParseInt(last, 10, 64)
|
||||||
|
// if err != nil {
|
||||||
|
// return "", err
|
||||||
|
// }
|
||||||
|
// nextInt = n + 1
|
||||||
|
//
|
||||||
|
// // Dynamically determine format based on existing number
|
||||||
|
// digitCount := len(last)
|
||||||
|
//
|
||||||
|
// // If the incremented number needs more digits, expand format
|
||||||
|
// nextStr := strconv.FormatInt(nextInt, 10)
|
||||||
|
// if len(nextStr) > digitCount {
|
||||||
|
// digitCount = len(nextStr)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Ensure minimum 10 digits as per requirement
|
||||||
|
// if digitCount < 10 {
|
||||||
|
// digitCount = 10
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// format = fmt.Sprintf("%%0%dd", digitCount)
|
||||||
|
//}
|
||||||
|
|
||||||
|
const prefix = "12" // fixed starting prefix (same as $awal_rm) in simgos
|
||||||
|
const maxSuffix = 999999
|
||||||
|
|
||||||
|
// No existing NOMR → start fresh
|
||||||
if last == "" {
|
if last == "" {
|
||||||
// No existing records, start with 10 digits
|
return prefix + "000001", nil
|
||||||
nextInt = 1
|
|
||||||
format = "%010d"
|
|
||||||
} else {
|
|
||||||
n, err := strconv.ParseInt(last, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
nextInt = n + 1
|
|
||||||
|
|
||||||
// Dynamically determine format based on existing number
|
|
||||||
digitCount := len(last)
|
|
||||||
|
|
||||||
// If the incremented number needs more digits, expand format
|
|
||||||
nextStr := strconv.FormatInt(nextInt, 10)
|
|
||||||
if len(nextStr) > digitCount {
|
|
||||||
digitCount = len(nextStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure minimum 10 digits as per requirement
|
|
||||||
if digitCount < 10 {
|
|
||||||
digitCount = 10
|
|
||||||
}
|
|
||||||
|
|
||||||
format = fmt.Sprintf("%%0%dd", digitCount)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf(format, nextInt), nil
|
suffix := last[len(prefix):] // extract numeric part
|
||||||
|
num, _ := strconv.Atoi(suffix)
|
||||||
|
|
||||||
|
// 3. If suffix reaches 999999 → increment the prefix
|
||||||
|
if num == maxSuffix {
|
||||||
|
p, _ := strconv.Atoi(prefix)
|
||||||
|
p++
|
||||||
|
return fmt.Sprintf("%d000001", p), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. Normal increment
|
||||||
|
return prefix + fmt.Sprintf("%06d", num+1), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func endpointMapper(noBpjs string) string {
|
func endpointMapper(noBpjs string) string {
|
||||||
|
|||||||
@@ -159,6 +159,25 @@ func (me *middlewareRunner) RunDeleteMiddleware(middlewares []deleteMw, input *e
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (me *middlewareRunner) RunGenerateNumberMiddleware(middlewares generateNumberMw) (generateNorm *string, err error) {
|
||||||
|
if !me.SyncOn {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
logData := pu.GetLogData(nil, nil)
|
||||||
|
|
||||||
|
pl.SetLogInfo(me.Event, logData, "started", middlewares.Name)
|
||||||
|
|
||||||
|
generateNorm, err = middlewares.Func()
|
||||||
|
if err != nil {
|
||||||
|
return nil, pu.HandleMiddlewareError(me.Event, string(me.MwType), middlewares.Name, logData, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
pl.SetLogInfo(me.Event, nil, "complete")
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (me *middlewareRunner) setMwType(mwType pu.MWType) {
|
func (me *middlewareRunner) setMwType(mwType pu.MWType) {
|
||||||
me.MwType = mwType
|
me.MwType = mwType
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,11 @@ type readDetailMw struct {
|
|||||||
Func func(input *e.ReadDetailDto, data *e.Patient, tx *gorm.DB) error
|
Func func(input *e.ReadDetailDto, data *e.Patient, tx *gorm.DB) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type generateNumberMw struct {
|
||||||
|
Name string
|
||||||
|
Func func() (*string, error)
|
||||||
|
}
|
||||||
|
|
||||||
type UpdateMw = updateMw
|
type UpdateMw = updateMw
|
||||||
type DeleteMw = deleteMw
|
type DeleteMw = deleteMw
|
||||||
|
|
||||||
@@ -65,6 +70,7 @@ var updatePreMw []updateMw
|
|||||||
var updatePostMw []readDetailMw
|
var updatePostMw []readDetailMw
|
||||||
var deletePreMw []deleteMw
|
var deletePreMw []deleteMw
|
||||||
var deletePostMw []readDetailMw
|
var deletePostMw []readDetailMw
|
||||||
|
var generatePatientNumber generateNumberMw
|
||||||
|
|
||||||
type BPJSResponse struct {
|
type BPJSResponse struct {
|
||||||
MetaData struct {
|
MetaData struct {
|
||||||
|
|||||||
@@ -201,3 +201,31 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Generate() (*d.Data, error) {
|
||||||
|
event := pl.Event{
|
||||||
|
Feature: "Generate Nomr",
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start log
|
||||||
|
pl.SetLogInfo(&event, nil, "started", "create")
|
||||||
|
|
||||||
|
norm, err := generateNomrPatient()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pl.SetLogInfo(&event, nil, "complete")
|
||||||
|
|
||||||
|
return &d.Data{
|
||||||
|
Meta: d.II{
|
||||||
|
"source": source,
|
||||||
|
"structure": "single-data",
|
||||||
|
"status": "created",
|
||||||
|
},
|
||||||
|
Data:d.II{
|
||||||
|
|
||||||
|
}
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user