adjust patient
This commit is contained in:
@@ -28,6 +28,7 @@ type CreateDto struct {
|
||||
RegisteredAt *time.Time `json:"registeredAt"`
|
||||
RegisteredBy_User_Name *string `json:"registeredBy_user_name" validate:"maxLength=100"`
|
||||
Status_Code erc.ActiveStatusCode `json:"status_code" validate:"maxLength=10"`
|
||||
Number *string `json:"number"`
|
||||
|
||||
pa.AuthInfo
|
||||
}
|
||||
|
||||
@@ -45,6 +45,13 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
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 {
|
||||
return err
|
||||
} else {
|
||||
|
||||
@@ -24,7 +24,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Patient) error {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
if data.Id == 0 {
|
||||
if data.Number == nil {
|
||||
medRecNum, err := GenerateNextMedicalRecordNumber()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -52,38 +52,57 @@ func GenerateNextMedicalRecordNumber() (string, error) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
var nextInt int64
|
||||
var format string
|
||||
//var nextInt int64
|
||||
//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 == "" {
|
||||
// No existing records, start with 10 digits
|
||||
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 prefix + "000001", nil
|
||||
}
|
||||
|
||||
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 {
|
||||
|
||||
@@ -159,6 +159,25 @@ func (me *middlewareRunner) RunDeleteMiddleware(middlewares []deleteMw, input *e
|
||||
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) {
|
||||
me.MwType = mwType
|
||||
}
|
||||
|
||||
@@ -50,6 +50,11 @@ type readDetailMw struct {
|
||||
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 DeleteMw = deleteMw
|
||||
|
||||
@@ -65,6 +70,7 @@ var updatePreMw []updateMw
|
||||
var updatePostMw []readDetailMw
|
||||
var deletePreMw []deleteMw
|
||||
var deletePostMw []readDetailMw
|
||||
var generatePatientNumber generateNumberMw
|
||||
|
||||
type BPJSResponse struct {
|
||||
MetaData struct {
|
||||
|
||||
@@ -201,3 +201,31 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
}, 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