Merge pull request #164 from dikstub-rssa/feat/things-munaja
Feat/things munaja
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
-- Modify "McuOrderItem" table
|
||||
ALTER TABLE "public"."McuOrderItem" ADD COLUMN "Note" character varying(1024) NULL;
|
||||
@@ -1,4 +1,4 @@
|
||||
h1:8gw1BB9DWz+cNATJjG1oMXA+QAF1HrIw47xjbI33aC4=
|
||||
h1:4ab+A8iOO9wdTsRlY3sxe8ge29VhYaHMyq+qQCEN2UE=
|
||||
20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k=
|
||||
20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0=
|
||||
20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI=
|
||||
@@ -123,5 +123,6 @@ h1:8gw1BB9DWz+cNATJjG1oMXA+QAF1HrIw47xjbI33aC4=
|
||||
20251118074929.sql h1:p1KsWqCuR1JXA/jVO5BmOhCcaQ8clT7t0YRszAhPFbg=
|
||||
20251119063438.sql h1:NVGM0X/LHD37EaPl8SNzkNiZDJ7AB1QR+LLwLh6WRdg=
|
||||
20251119065730.sql h1:U5lzk1WvMB0bw3kwckou7jkEt4bwdYItwHr2Vxqe7w4=
|
||||
20251119072302.sql h1:8L+NsXPFXGZDQZIOhShvuBM9aLwU3h95tXnz6jxHhlA=
|
||||
20251119072450.sql h1:ksTc8ljaHFrBo1/HiHtcnT+iJ7kPS93KgetFTf3p4Qc=
|
||||
20251119072302.sql h1:qCuI2WMEMF/XNbjV+RXPjBnuCKLu1Fia+mR9HiLWBIs=
|
||||
20251119072450.sql h1:Xg+bTwqGyKPNFEQhJylvpz1wifdfmDJvcAq6vmNf0Ng=
|
||||
20251120005512.sql h1:Ek6qpacAI/qVuTYxKno+uJyzn7s5z9pf3t7VA8gTzm4=
|
||||
|
||||
@@ -15,6 +15,7 @@ type CreateDto struct {
|
||||
type ReadListDto struct {
|
||||
FilterDto
|
||||
Includes string `json:"includes"`
|
||||
Sort string `json:"sort"`
|
||||
Pagination ecore.Pagination
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
ep "simrs-vx/internal/domain/main-entities/person"
|
||||
eu "simrs-vx/internal/domain/main-entities/user"
|
||||
"time"
|
||||
|
||||
erc "simrs-vx/internal/domain/references/common"
|
||||
erg "simrs-vx/internal/domain/references/organization"
|
||||
@@ -55,22 +56,26 @@ type MetaDto struct {
|
||||
|
||||
type ResponseDto struct {
|
||||
ecore.Main
|
||||
User_Id *uint `json:"user_id"`
|
||||
User *eu.User `json:"user,omitempty"`
|
||||
Person_Id *uint `json:"person_id"`
|
||||
Person *ep.Person `json:"person,omitempty"`
|
||||
Number *string `json:"number"`
|
||||
Status_Code erc.ActiveStatusCode `json:"status_code"`
|
||||
User_Id *uint `json:"user_id"`
|
||||
User *eu.User `json:"user,omitempty"`
|
||||
Person_Id *uint `json:"person_id"`
|
||||
Person *ep.Person `json:"person,omitempty"`
|
||||
Number *string `json:"number"`
|
||||
Position_Code *erg.EmployeePositionCode `json:"position_code"`
|
||||
Contract_ExpiredDate *time.Time `json:"contract_expiredDate"`
|
||||
Status_Code erc.ActiveStatusCode `json:"status_code"`
|
||||
}
|
||||
|
||||
func (d Employee) ToResponse() ResponseDto {
|
||||
resp := ResponseDto{
|
||||
User_Id: d.User_Id,
|
||||
User: d.User,
|
||||
Person_Id: d.Person_Id,
|
||||
Person: d.Person,
|
||||
Number: d.Number,
|
||||
Status_Code: d.Status_Code,
|
||||
User_Id: d.User_Id,
|
||||
User: d.User,
|
||||
Person_Id: d.Person_Id,
|
||||
Person: d.Person,
|
||||
Number: d.Number,
|
||||
Position_Code: d.Position_Code,
|
||||
Contract_ExpiredDate: d.Contract_ExpiredDate,
|
||||
Status_Code: d.Status_Code,
|
||||
}
|
||||
resp.Main = d.Main
|
||||
return resp
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package mcuorderitem
|
||||
|
||||
import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
ems "simrs-vx/internal/domain/main-entities/mcu-src"
|
||||
"time"
|
||||
|
||||
erc "simrs-vx/internal/domain/references/common"
|
||||
)
|
||||
|
||||
type McuOrderItem struct {
|
||||
ecore.Main // adjust this according to the needs
|
||||
McuOrder_Id *uint `json:"mcuOrder_id" gorm:"uniqueIndex:idx_order_src"`
|
||||
McuSrc_Code *string `json:"mcuSrc_code" gorm:"uniqueIndex:idx_order_src"`
|
||||
McuSrc *ems.McuSrc `json:"mcuSrc,omitempty" gorm:"foreignKey:McuSrc_Code;references:Code"`
|
||||
ExaminationDate *time.Time `json:"examinationDate"`
|
||||
Note *string `json:"note" gorm:"size:1024"`
|
||||
Result *string `json:"result"`
|
||||
Status_Code erc.DataStatusCode `json:"status_code"`
|
||||
}
|
||||
@@ -1,23 +1,15 @@
|
||||
package mcuorderitem
|
||||
|
||||
import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
emo "simrs-vx/internal/domain/main-entities/mcu-order"
|
||||
ems "simrs-vx/internal/domain/main-entities/mcu-src"
|
||||
"time"
|
||||
emoib "simrs-vx/internal/domain/main-entities/mcu-order-item/base"
|
||||
|
||||
erc "simrs-vx/internal/domain/references/common"
|
||||
)
|
||||
|
||||
type McuOrderItem struct {
|
||||
ecore.Main // adjust this according to the needs
|
||||
McuOrder_Id *uint `json:"mcuOrder_id" gorm:"uniqueIndex:idx_order_src"`
|
||||
McuOrder *emo.McuOrder `json:"mcuOrder,omitempty" gorm:"foreignKey:McuOrder_Id;references:Id"`
|
||||
McuSrc_Code *string `json:"mcuSrc_code" gorm:"uniqueIndex:idx_order_src"`
|
||||
McuSrc *ems.McuSrc `json:"mcuSrc,omitempty" gorm:"foreignKey:McuSrc_Code;references:Code"`
|
||||
ExaminationDate *time.Time `json:"examinationDate"`
|
||||
Result *string `json:"result"`
|
||||
Status_Code erc.DataStatusCode `json:"status_code"`
|
||||
emoib.McuOrderItem
|
||||
McuOrder *emo.McuOrder `json:"mcuOrder,omitempty" gorm:"foreignKey:McuOrder_Id;references:Id"`
|
||||
}
|
||||
|
||||
func (d McuOrderItem) IsCompleted() bool {
|
||||
|
||||
@@ -17,6 +17,7 @@ import (
|
||||
// internal - domain - main-entities
|
||||
ed "simrs-vx/internal/domain/main-entities/doctor"
|
||||
ee "simrs-vx/internal/domain/main-entities/encounter"
|
||||
emoib "simrs-vx/internal/domain/main-entities/mcu-order-item/base"
|
||||
)
|
||||
|
||||
type CreateDto struct {
|
||||
@@ -85,7 +86,8 @@ type ResponseDto struct {
|
||||
ExaminationDate *time.Time `json:"examinationDate"`
|
||||
Number uint8 `json:"number"`
|
||||
Temperature float64 `json:"temperature"`
|
||||
UrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"urgencyLevel_code""`
|
||||
UrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"urgencyLevel_code"`
|
||||
Items []*emoib.McuOrderItem `json:"items"`
|
||||
}
|
||||
|
||||
func (d McuOrder) ToResponse() ResponseDto {
|
||||
@@ -100,6 +102,7 @@ func (d McuOrder) ToResponse() ResponseDto {
|
||||
Number: d.Number,
|
||||
Temperature: d.Temperature,
|
||||
UrgencyLevel_Code: d.UrgencyLevel_Code,
|
||||
Items: d.Items,
|
||||
}
|
||||
resp.Main = d.Main
|
||||
return resp
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
ed "simrs-vx/internal/domain/main-entities/doctor"
|
||||
ee "simrs-vx/internal/domain/main-entities/encounter"
|
||||
emoib "simrs-vx/internal/domain/main-entities/mcu-order-item/base"
|
||||
"time"
|
||||
|
||||
ercl "simrs-vx/internal/domain/references/clinical"
|
||||
@@ -23,6 +24,11 @@ type McuOrder struct {
|
||||
Temperature float64 `json:"temperature"`
|
||||
UrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"urgencyLevel_code" gorm:"not null;size:15"`
|
||||
Scope_Code ercl.McuScopeCode `json:"scope_code" gorm:"index;size:10"`
|
||||
Items []*emoib.McuOrderItem `json:"items" gorm:"foreignKey:McuOrder_Id;references:Id"`
|
||||
}
|
||||
|
||||
func (d McuOrder) IsNotNew() bool {
|
||||
return d.Status_Code != erc.DSCNew
|
||||
}
|
||||
|
||||
func (d McuOrder) IsCompleted() bool {
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package personaddress
|
||||
|
||||
import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
epr "simrs-vx/internal/domain/main-entities/postal-region"
|
||||
ev "simrs-vx/internal/domain/main-entities/village"
|
||||
|
||||
erp "simrs-vx/internal/domain/references/person"
|
||||
)
|
||||
|
||||
type PersonAddress struct {
|
||||
ecore.Main // adjust this according to the needs
|
||||
Person_Id uint `json:"person_id"`
|
||||
Address string `json:"address" gorm:"size:150"`
|
||||
LocationType_Code erp.AddressLocationTypeCode `json:"locationType_code" gorm:"size:10"`
|
||||
Rt string `json:"rt" gorm:"size:2"`
|
||||
Rw string `json:"rw" gorm:"size:2"`
|
||||
PostalRegion_Code *string `json:"postalRegion_code" gorm:"size:6"`
|
||||
PostalRegion *epr.PostalRegion `json:"postalRegion,omitempty" gorm:"foreignKey:PostalRegion_Code;references:Code"`
|
||||
Village_Code *string `json:"village_code" gorm:"size:10"`
|
||||
Village *ev.Village `json:"village,omitempty" gorm:"foreignKey:Village_Code;references:Code"`
|
||||
}
|
||||
@@ -1,22 +1,9 @@
|
||||
package personaddress
|
||||
|
||||
import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
epr "simrs-vx/internal/domain/main-entities/postal-region"
|
||||
ev "simrs-vx/internal/domain/main-entities/village"
|
||||
|
||||
erp "simrs-vx/internal/domain/references/person"
|
||||
eb "simrs-vx/internal/domain/main-entities/person-address/base"
|
||||
)
|
||||
|
||||
type PersonAddress struct {
|
||||
ecore.Main // adjust this according to the needs
|
||||
Person_Id uint `json:"person_id"`
|
||||
Address string `json:"address" gorm:"size:150"`
|
||||
LocationType_Code erp.AddressLocationTypeCode `json:"locationType_code" gorm:"size:10"`
|
||||
Rt string `json:"rt" gorm:"size:2"`
|
||||
Rw string `json:"rw" gorm:"size:2"`
|
||||
PostalRegion_Code *string `json:"postalRegion_code" gorm:"size:6"`
|
||||
PostalRegion *epr.PostalRegion `json:"postalRegion,omitempty" gorm:"foreignKey:PostalRegion_Code;references:Code"`
|
||||
Village_Code *string `json:"village_code" gorm:"size:10"`
|
||||
Village *ev.Village `json:"village,omitempty" gorm:"foreignKey:Village_Code;references:Code"`
|
||||
eb.PersonAddress
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package personcontact
|
||||
|
||||
import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
erp "simrs-vx/internal/domain/references/person"
|
||||
)
|
||||
|
||||
type PersonContact struct {
|
||||
ecore.Main // adjust this according to the needs
|
||||
Person_Id uint `json:"person_id"`
|
||||
Type_Code erp.ContactTypeCode `json:"type_code" gorm:"size:15"`
|
||||
Value string `json:"value" gorm:"size:100"`
|
||||
}
|
||||
@@ -1,13 +1,9 @@
|
||||
package personcontact
|
||||
|
||||
import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
erp "simrs-vx/internal/domain/references/person"
|
||||
eb "simrs-vx/internal/domain/main-entities/person-contact/base"
|
||||
)
|
||||
|
||||
type PersonContact struct {
|
||||
ecore.Main // adjust this according to the needs
|
||||
Person_Id uint `json:"person_id"`
|
||||
Type_Code erp.ContactTypeCode `json:"type_code" gorm:"size:15"`
|
||||
Value string `json:"value" gorm:"size:100"`
|
||||
eb.PersonContact
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ type FilterDto struct {
|
||||
Encounter_Id *uint `json:"encounter-id"`
|
||||
Employee_Id *uint `json:"employee-id"`
|
||||
Time *time.Time `json:"time"`
|
||||
TypeCode erc.SoapiTypeCode `json:"typeCode"`
|
||||
TypeCode erc.SoapiTypeCode `json:"type-code"`
|
||||
Value *string `json:"value"`
|
||||
}
|
||||
|
||||
|
||||
@@ -18,14 +18,16 @@ const (
|
||||
EPCReg EmployeePositionCode = "reg" // Admisi/Pendaftaran
|
||||
EPCNur EmployeePositionCode = "nur" // Perawat
|
||||
EPCDoc EmployeePositionCode = "doc" // Dokter
|
||||
EPCNut EmployeePositionCode = "nut" // Ahli gizi
|
||||
EPCMwi EmployeePositionCode = "miw" // Bidan
|
||||
EPCThr EmployeePositionCode = "thr" // Terapis
|
||||
EPCNut EmployeePositionCode = "nut" // Ahli gizi
|
||||
EPCLab EmployeePositionCode = "lab" // Laboran
|
||||
EPCPha EmployeePositionCode = "pha" // Farmasi
|
||||
EPCPay EmployeePositionCode = "pay" // Pembayaran
|
||||
EPCHur EmployeePositionCode = "hue" // Sumber Daya Manusia
|
||||
EPCGea EmployeePositionCode = "gea" // Bagian Umum
|
||||
EPCMan EmployeePositionCode = "man" // Manajemen
|
||||
EPCNom EmployeePositionCode = "nom" // Non Medic
|
||||
// EPCPay EmployeePositionCode = "pay" // Pembayaran
|
||||
// EPCHur EmployeePositionCode = "hue" // Sumber Daya Manusia
|
||||
// EPCGea EmployeePositionCode = "gea" // Bagian Umum
|
||||
// EPCMan EmployeePositionCode = "man" // Manajemen
|
||||
|
||||
IPCSpecialist = "specialist-intern"
|
||||
IPCNurse = "nurse-intern"
|
||||
|
||||
@@ -182,6 +182,7 @@ func SetRoutes() http.Handler {
|
||||
"POST /": mcuorder.O.Create,
|
||||
"PATCH /{id}": mcuorder.O.Update,
|
||||
"DELETE /{id}": mcuorder.O.Delete,
|
||||
"PATCH /{id}/submit": mcuorder.O.Submit,
|
||||
"PATCH /{id}/complete": mcuorder.O.Complete,
|
||||
"PATCH /{id}/set-schedule": mcuorder.O.SetSchedule,
|
||||
})
|
||||
|
||||
@@ -85,6 +85,18 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
|
||||
func (obj myBase) Submit(w http.ResponseWriter, r *http.Request) {
|
||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||
if id <= 0 {
|
||||
return
|
||||
}
|
||||
|
||||
dto := e.ReadDetailDto{}
|
||||
dto.Id = uint(id)
|
||||
res, err := u.Submit(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
|
||||
func (obj myBase) Complete(w http.ResponseWriter, r *http.Request) {
|
||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||
if id <= 0 {
|
||||
|
||||
@@ -65,19 +65,19 @@ func (a AuthInfo) IsPharmacist() bool {
|
||||
return *a.Employee_Position_Code == string(ero.EPCPha)
|
||||
}
|
||||
|
||||
func (a AuthInfo) IsPayment() bool {
|
||||
if a.Employee_Position_Code == nil {
|
||||
return false
|
||||
}
|
||||
return *a.Employee_Position_Code == string(ero.EPCPay)
|
||||
}
|
||||
// func (a AuthInfo) IsPayment() bool {
|
||||
// if a.Employee_Position_Code == nil {
|
||||
// return false
|
||||
// }
|
||||
// return *a.Employee_Position_Code == string(ero.EPCPay)
|
||||
// }
|
||||
|
||||
func (a AuthInfo) IsManagement() bool {
|
||||
if a.Employee_Position_Code == nil {
|
||||
return false
|
||||
}
|
||||
return *a.Employee_Position_Code == string(ero.EPCMan)
|
||||
}
|
||||
// func (a AuthInfo) IsManagement() bool {
|
||||
// if a.Employee_Position_Code == nil {
|
||||
// return false
|
||||
// }
|
||||
// return *a.Employee_Position_Code == string(ero.EPCMan)
|
||||
// }
|
||||
|
||||
func (a AuthInfo) IsSpecialistIntern() bool {
|
||||
if a.Intern_Position_Code == nil {
|
||||
|
||||
@@ -226,6 +226,10 @@ func populateRoles(user *eu.User, input eu.LoginDto, atClaims jwt.MapClaims, out
|
||||
outputData["doctor_code"] = doctor.Code
|
||||
|
||||
// specialist
|
||||
if doctor.Unit_Code != nil {
|
||||
atClaims["unit_code"] = doctor.Unit_Code
|
||||
outputData["unit_code"] = doctor.Unit_Code
|
||||
}
|
||||
if doctor.Specialist_Code != nil {
|
||||
atClaims["specialist_code"] = doctor.Specialist_Code
|
||||
outputData["specialist_code"] = doctor.Specialist_Code
|
||||
|
||||
@@ -52,8 +52,8 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.De
|
||||
Scopes(gh.Preload(input.Includes)).
|
||||
Scopes(gh.Filter(input.FilterDto)).
|
||||
Count(&count).
|
||||
Scopes(gh.Paginate(input, &pagination)).
|
||||
Order("\"CreatedAt\" DESC")
|
||||
Scopes(gh.Sort(input.Sort)).
|
||||
Scopes(gh.Paginate(input, &pagination))
|
||||
|
||||
if err := tx.Find(&data).Error; err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
|
||||
@@ -324,6 +324,65 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
|
||||
}
|
||||
|
||||
func Submit(input e.ReadDetailDto) (*d.Data, error) {
|
||||
var data *e.McuOrder
|
||||
var err error
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Process",
|
||||
Source: source,
|
||||
}
|
||||
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "process")
|
||||
|
||||
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
data, err = ReadDetailData(input, &event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if data.IsNotNew() {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-state-mismatch",
|
||||
Detail: "prescription is not in new state",
|
||||
Raw: errors.New("prescription is not in new state"),
|
||||
}
|
||||
return pl.SetLogError(&event, input)
|
||||
}
|
||||
|
||||
data.Status_Code = erc.DSCSubmited
|
||||
if err := tx.Save(&data).Error; err != nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-update-fail",
|
||||
Detail: "Database update failed",
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(&event, input)
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &d.Data{
|
||||
Meta: d.IS{
|
||||
"source": source,
|
||||
"structure": "single-data",
|
||||
"status": "submited",
|
||||
},
|
||||
Data: data.ToResponse(),
|
||||
}, nil
|
||||
|
||||
}
|
||||
|
||||
func Complete(input e.ReadDetailDto) (*d.Data, error) {
|
||||
var data *e.McuOrder
|
||||
var err error
|
||||
|
||||
Reference in New Issue
Block a user