tvpl.api

<back to all web services

UpdateDocumentRequest

Requires Authentication
The following routes are available for this service:
POST/document/update
import Foundation
import ServiceStack

public class UpdateDocumentRequest : BasicDocument
{
    public var partUploadedFile:UploadedFiles
    public var compactUploadedFile:UploadedFiles
    public var analysisUploadedFile:UploadedFiles
    public var fullUploadedFile:UploadedFiles
    public var attachFiles:[UploadedFiles] = []
    public var basisDocumentId:[Int] = []
    public var referenceDocumentId:[Int] = []
    public var replacedDocumentId:[Int] = []
    public var expiredDocumentId:[Int] = []
    public var id:Int

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case partUploadedFile
        case compactUploadedFile
        case analysisUploadedFile
        case fullUploadedFile
        case attachFiles
        case basisDocumentId
        case referenceDocumentId
        case replacedDocumentId
        case expiredDocumentId
        case id
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        partUploadedFile = try container.decodeIfPresent(UploadedFiles.self, forKey: .partUploadedFile)
        compactUploadedFile = try container.decodeIfPresent(UploadedFiles.self, forKey: .compactUploadedFile)
        analysisUploadedFile = try container.decodeIfPresent(UploadedFiles.self, forKey: .analysisUploadedFile)
        fullUploadedFile = try container.decodeIfPresent(UploadedFiles.self, forKey: .fullUploadedFile)
        attachFiles = try container.decodeIfPresent([UploadedFiles].self, forKey: .attachFiles) ?? []
        basisDocumentId = try container.decodeIfPresent([Int].self, forKey: .basisDocumentId) ?? []
        referenceDocumentId = try container.decodeIfPresent([Int].self, forKey: .referenceDocumentId) ?? []
        replacedDocumentId = try container.decodeIfPresent([Int].self, forKey: .replacedDocumentId) ?? []
        expiredDocumentId = try container.decodeIfPresent([Int].self, forKey: .expiredDocumentId) ?? []
        id = try container.decodeIfPresent(Int.self, forKey: .id)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if partUploadedFile != nil { try container.encode(partUploadedFile, forKey: .partUploadedFile) }
        if compactUploadedFile != nil { try container.encode(compactUploadedFile, forKey: .compactUploadedFile) }
        if analysisUploadedFile != nil { try container.encode(analysisUploadedFile, forKey: .analysisUploadedFile) }
        if fullUploadedFile != nil { try container.encode(fullUploadedFile, forKey: .fullUploadedFile) }
        if attachFiles.count > 0 { try container.encode(attachFiles, forKey: .attachFiles) }
        if basisDocumentId.count > 0 { try container.encode(basisDocumentId, forKey: .basisDocumentId) }
        if referenceDocumentId.count > 0 { try container.encode(referenceDocumentId, forKey: .referenceDocumentId) }
        if replacedDocumentId.count > 0 { try container.encode(replacedDocumentId, forKey: .replacedDocumentId) }
        if expiredDocumentId.count > 0 { try container.encode(expiredDocumentId, forKey: .expiredDocumentId) }
        if id != nil { try container.encode(id, forKey: .id) }
    }
}

public class BasicDocument : Codable
{
    // @Required()
    public var title:String?

    // @StringLength(4000)
    public var Description:String

    // @StringLength(500)
    public var owner:String

    public var documentPolicyId:Int?
    public var updateDocumentId:Int?
    public var effectBeginDate:Date?
    public var effectEndDate:Date?
    public var issuingAgencyId:Int?
    public var documentTypeId:Int?
    public var documentGroupId:Int?
    public var subjectId:Int?
    // @StringLength(500)
    public var signBy:String

    public var signDate:Date?
    public var statusId:Int?
    public var isInternal:Bool
    public var documentNumber:String
    public var documentCode:String
    public var isUrgent:Bool?
    public var scopeType:Int?
    public var isActive:Bool?

    required public init(){}
}

public class UploadedFiles : BasicUploadedFile
{
    public var id:Int?
    public var uploadedFile:String
    public var subDocumentId:Int?
    public var stepId:Int?
    public var code:Int

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case id
        case uploadedFile
        case subDocumentId
        case stepId
        case code
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        id = try container.decodeIfPresent(Int.self, forKey: .id)
        uploadedFile = try container.decodeIfPresent(String.self, forKey: .uploadedFile)
        subDocumentId = try container.decodeIfPresent(Int.self, forKey: .subDocumentId)
        stepId = try container.decodeIfPresent(Int.self, forKey: .stepId)
        code = try container.decodeIfPresent(Int.self, forKey: .code)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if id != nil { try container.encode(id, forKey: .id) }
        if uploadedFile != nil { try container.encode(uploadedFile, forKey: .uploadedFile) }
        if subDocumentId != nil { try container.encode(subDocumentId, forKey: .subDocumentId) }
        if stepId != nil { try container.encode(stepId, forKey: .stepId) }
        if code != nil { try container.encode(code, forKey: .code) }
    }
}

public class BasicUploadedFile : Codable
{
    public var fileName:String
    public var filekey:String
    public var fileUrl:String
    public var checksum:String
    public var eTag:String
    public var fileSize:Int

    required public init(){}
}

public class DocumentDetailResponse : IResponseRequest, Codable
{
    public var data:DocumentDetail
    public var code:Int
    public var message:String

    required public init(){}
}

public class DocumentDetail : DocumentSearchResultItem
{
    public var partUploadedFile:UploadedFileAttach
    public var compactUploadedFile:UploadedFileAttach
    public var analysisUploadedFile:UploadedFileAttach
    public var fullUploadedFile:UploadedFileAttach
    public var createdAt:Date
    public var nextApprover:ApproversProfile
    public var currentApprover:CurrentApprover
    public var attachFiles:[UploadedFileAttach] = []
    public var hasReadPermission:Bool
    public var canGrantReadPermission:Bool
    public var basisDocument:[SimpleDocumentRelation] = []
    public var basisForDocument:[SimpleDocumentRelation] = []
    public var mainDocument:SimpleDocumentRelation
    public var referenceDocument:[SimpleDocumentRelation] = []
    public var referencedByDocument:[SimpleDocumentRelation] = []
    public var replacedDocument:[SimpleDocumentRelation] = []
    public var replacedByDocument:[SimpleDocumentRelation] = []
    public var expiredDocument:[SimpleDocumentRelation] = []
    public var expiredByDocument:[SimpleDocumentRelation] = []
    public var updateForDocument:SimpleDocumentRelation
    public var scopeType:Int?
    public var stepOrder:Int

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case partUploadedFile
        case compactUploadedFile
        case analysisUploadedFile
        case fullUploadedFile
        case createdAt
        case nextApprover
        case currentApprover
        case attachFiles
        case hasReadPermission
        case canGrantReadPermission
        case basisDocument
        case basisForDocument
        case mainDocument
        case referenceDocument
        case referencedByDocument
        case replacedDocument
        case replacedByDocument
        case expiredDocument
        case expiredByDocument
        case updateForDocument
        case scopeType
        case stepOrder
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        partUploadedFile = try container.decodeIfPresent(UploadedFileAttach.self, forKey: .partUploadedFile)
        compactUploadedFile = try container.decodeIfPresent(UploadedFileAttach.self, forKey: .compactUploadedFile)
        analysisUploadedFile = try container.decodeIfPresent(UploadedFileAttach.self, forKey: .analysisUploadedFile)
        fullUploadedFile = try container.decodeIfPresent(UploadedFileAttach.self, forKey: .fullUploadedFile)
        createdAt = try container.decodeIfPresent(Date.self, forKey: .createdAt)
        nextApprover = try container.decodeIfPresent(ApproversProfile.self, forKey: .nextApprover)
        currentApprover = try container.decodeIfPresent(CurrentApprover.self, forKey: .currentApprover)
        attachFiles = try container.decodeIfPresent([UploadedFileAttach].self, forKey: .attachFiles) ?? []
        hasReadPermission = try container.decodeIfPresent(Bool.self, forKey: .hasReadPermission)
        canGrantReadPermission = try container.decodeIfPresent(Bool.self, forKey: .canGrantReadPermission)
        basisDocument = try container.decodeIfPresent([SimpleDocumentRelation].self, forKey: .basisDocument) ?? []
        basisForDocument = try container.decodeIfPresent([SimpleDocumentRelation].self, forKey: .basisForDocument) ?? []
        mainDocument = try container.decodeIfPresent(SimpleDocumentRelation.self, forKey: .mainDocument)
        referenceDocument = try container.decodeIfPresent([SimpleDocumentRelation].self, forKey: .referenceDocument) ?? []
        referencedByDocument = try container.decodeIfPresent([SimpleDocumentRelation].self, forKey: .referencedByDocument) ?? []
        replacedDocument = try container.decodeIfPresent([SimpleDocumentRelation].self, forKey: .replacedDocument) ?? []
        replacedByDocument = try container.decodeIfPresent([SimpleDocumentRelation].self, forKey: .replacedByDocument) ?? []
        expiredDocument = try container.decodeIfPresent([SimpleDocumentRelation].self, forKey: .expiredDocument) ?? []
        expiredByDocument = try container.decodeIfPresent([SimpleDocumentRelation].self, forKey: .expiredByDocument) ?? []
        updateForDocument = try container.decodeIfPresent(SimpleDocumentRelation.self, forKey: .updateForDocument)
        scopeType = try container.decodeIfPresent(Int.self, forKey: .scopeType)
        stepOrder = try container.decodeIfPresent(Int.self, forKey: .stepOrder)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if partUploadedFile != nil { try container.encode(partUploadedFile, forKey: .partUploadedFile) }
        if compactUploadedFile != nil { try container.encode(compactUploadedFile, forKey: .compactUploadedFile) }
        if analysisUploadedFile != nil { try container.encode(analysisUploadedFile, forKey: .analysisUploadedFile) }
        if fullUploadedFile != nil { try container.encode(fullUploadedFile, forKey: .fullUploadedFile) }
        if createdAt != nil { try container.encode(createdAt, forKey: .createdAt) }
        if nextApprover != nil { try container.encode(nextApprover, forKey: .nextApprover) }
        if currentApprover != nil { try container.encode(currentApprover, forKey: .currentApprover) }
        if attachFiles.count > 0 { try container.encode(attachFiles, forKey: .attachFiles) }
        if hasReadPermission != nil { try container.encode(hasReadPermission, forKey: .hasReadPermission) }
        if canGrantReadPermission != nil { try container.encode(canGrantReadPermission, forKey: .canGrantReadPermission) }
        if basisDocument.count > 0 { try container.encode(basisDocument, forKey: .basisDocument) }
        if basisForDocument.count > 0 { try container.encode(basisForDocument, forKey: .basisForDocument) }
        if mainDocument != nil { try container.encode(mainDocument, forKey: .mainDocument) }
        if referenceDocument.count > 0 { try container.encode(referenceDocument, forKey: .referenceDocument) }
        if referencedByDocument.count > 0 { try container.encode(referencedByDocument, forKey: .referencedByDocument) }
        if replacedDocument.count > 0 { try container.encode(replacedDocument, forKey: .replacedDocument) }
        if replacedByDocument.count > 0 { try container.encode(replacedByDocument, forKey: .replacedByDocument) }
        if expiredDocument.count > 0 { try container.encode(expiredDocument, forKey: .expiredDocument) }
        if expiredByDocument.count > 0 { try container.encode(expiredByDocument, forKey: .expiredByDocument) }
        if updateForDocument != nil { try container.encode(updateForDocument, forKey: .updateForDocument) }
        if scopeType != nil { try container.encode(scopeType, forKey: .scopeType) }
        if stepOrder != nil { try container.encode(stepOrder, forKey: .stepOrder) }
    }
}

public class DocumentSearchResultItem : Codable
{
    public var title:String
    public var Description:String
    public var owner:String
    public var documentPolicyId:Int?
    public var updateDocumentId:Int?
    public var effectBeginDate:Date?
    public var effectEndDate:Date?
    public var issuingAgencyId:Int?
    public var subjectId:Int?
    public var signBy:String
    public var signDate:Date?
    public var updatedAt:Date?
    public var statusId:Int?
    public var isInternal:Bool
    public var documentNumber:String
    public var documentCode:String
    public var isUrgent:Bool?
    public var id:Int
    public var reasonReturn:String
    public var accountId:Int?
    public var approverId:Int?
    // @StringLength(500)
    public var updatedBy:String

    // @StringLength(500)
    public var createdBy:String

    public var isParty:Bool?
    public var isRevisionRequested:Bool?
    public var isPrivate:Bool?
    public var departmentId:Int?
    public var publicationDate:Date?
    public var processStatusId:Int
    public var documentTypeId:Int?
    public var documentGroupId:Int?
    public var accountName:String
    public var acceptAccountName:String
    public var documentGroupText:String
    public var processStatusText:String
    public var documentTypeText:String
    public var departmentText:String
    public var statusText:String
    public var issuingAgencyText:String
    public var subjectText:String
    public var comment:String
    public var submitComment:String
    public var fullFile:String
    public var parthFile:String
    public var isActive:Bool?
    public var stepOrder:Int?
    public var stepCount:Int?

    required public init(){}
}

public class UploadedFileAttach : UploadedFileModel
{
    public var fileType:String
    public var subDocumentId:Int?
    public var stepId:Int?

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case fileType
        case subDocumentId
        case stepId
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        fileType = try container.decodeIfPresent(String.self, forKey: .fileType)
        subDocumentId = try container.decodeIfPresent(Int.self, forKey: .subDocumentId)
        stepId = try container.decodeIfPresent(Int.self, forKey: .stepId)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if fileType != nil { try container.encode(fileType, forKey: .fileType) }
        if subDocumentId != nil { try container.encode(subDocumentId, forKey: .subDocumentId) }
        if stepId != nil { try container.encode(stepId, forKey: .stepId) }
    }
}

public class UploadedFileModel : BasicUploadedFile
{
    public var id:Int
    public var accessType:AccessType
    public var createdBy:Int
    public var createdDate:Date

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case id
        case accessType
        case createdBy
        case createdDate
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        id = try container.decodeIfPresent(Int.self, forKey: .id)
        accessType = try container.decodeIfPresent(AccessType.self, forKey: .accessType)
        createdBy = try container.decodeIfPresent(Int.self, forKey: .createdBy)
        createdDate = try container.decodeIfPresent(Date.self, forKey: .createdDate)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if id != nil { try container.encode(id, forKey: .id) }
        if accessType != nil { try container.encode(accessType, forKey: .accessType) }
        if createdBy != nil { try container.encode(createdBy, forKey: .createdBy) }
        if createdDate != nil { try container.encode(createdDate, forKey: .createdDate) }
    }
}

public enum AccessType : String, Codable
{
    case Public
    case Restricted
}

public class ApproversProfile : Codable
{
    public var userProfiles:[UserProfile] = []
    public var processStatusId:Int
    public var processTitle:String
    public var actionButtonLabel:String
    public var processDescription:String
    public var isApprovalRequired:Bool
    public var isFinalStep:Bool
    public var stepOrder:Int

    required public init(){}
}

public class UserProfile : UserLogin
{
    public var id:Int
    public var fullName:String
    public var email:String
    public var departmentId:Int?
    public var partyGroupId:Int?
    public var avatar:String
    public var telephone:String
    public var birthday:Date?
    public var createdAt:Date?
    public var updatedAt:Date?
    public var failedLoginCount:Int
    // @Ignore()
    public var roles:[Int] = []

    public var lastLoginDate:Date?

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case id
        case fullName
        case email
        case departmentId
        case partyGroupId
        case avatar
        case telephone
        case birthday
        case createdAt
        case updatedAt
        case failedLoginCount
        case roles
        case lastLoginDate
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        id = try container.decodeIfPresent(Int.self, forKey: .id)
        fullName = try container.decodeIfPresent(String.self, forKey: .fullName)
        email = try container.decodeIfPresent(String.self, forKey: .email)
        departmentId = try container.decodeIfPresent(Int.self, forKey: .departmentId)
        partyGroupId = try container.decodeIfPresent(Int.self, forKey: .partyGroupId)
        avatar = try container.decodeIfPresent(String.self, forKey: .avatar)
        telephone = try container.decodeIfPresent(String.self, forKey: .telephone)
        birthday = try container.decodeIfPresent(Date.self, forKey: .birthday)
        createdAt = try container.decodeIfPresent(Date.self, forKey: .createdAt)
        updatedAt = try container.decodeIfPresent(Date.self, forKey: .updatedAt)
        failedLoginCount = try container.decodeIfPresent(Int.self, forKey: .failedLoginCount)
        roles = try container.decodeIfPresent([Int].self, forKey: .roles) ?? []
        lastLoginDate = try container.decodeIfPresent(Date.self, forKey: .lastLoginDate)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if id != nil { try container.encode(id, forKey: .id) }
        if fullName != nil { try container.encode(fullName, forKey: .fullName) }
        if email != nil { try container.encode(email, forKey: .email) }
        if departmentId != nil { try container.encode(departmentId, forKey: .departmentId) }
        if partyGroupId != nil { try container.encode(partyGroupId, forKey: .partyGroupId) }
        if avatar != nil { try container.encode(avatar, forKey: .avatar) }
        if telephone != nil { try container.encode(telephone, forKey: .telephone) }
        if birthday != nil { try container.encode(birthday, forKey: .birthday) }
        if createdAt != nil { try container.encode(createdAt, forKey: .createdAt) }
        if updatedAt != nil { try container.encode(updatedAt, forKey: .updatedAt) }
        if failedLoginCount != nil { try container.encode(failedLoginCount, forKey: .failedLoginCount) }
        if roles.count > 0 { try container.encode(roles, forKey: .roles) }
        if lastLoginDate != nil { try container.encode(lastLoginDate, forKey: .lastLoginDate) }
    }
}

public class UserLogin : Codable
{
    // @Required()
    public var name:String?

    required public init(){}
}

public class CurrentApprover : Codable
{
    public var approverId:Int?
    public var status:String
    public var processStatusId:Int
    public var processTitle:String
    public var actionButtonLabel:String
    public var processDescription:String
    public var isApprovalRequired:Bool
    public var isFinalStep:Bool
    public var stepOrder:Int

    required public init(){}
}

public class SimpleDocumentRelation : Codable
{
    public var id:Int
    public var title:String
    public var documentCode:String
    public var publicationDate:Date?

    required public init(){}
}


Swift UpdateDocumentRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .other suffix or ?format=other

HTTP + OTHER

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /document/update HTTP/1.1 
Host: etc-api.vsmlab.vn 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"partUploadedFile":{"id":0,"uploadedFile":"String","subDocumentId":0,"stepId":0,"code":0,"fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0},"compactUploadedFile":{"id":0,"uploadedFile":"String","subDocumentId":0,"stepId":0,"code":0,"fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0},"analysisUploadedFile":{"id":0,"uploadedFile":"String","subDocumentId":0,"stepId":0,"code":0,"fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0},"fullUploadedFile":{"id":0,"uploadedFile":"String","subDocumentId":0,"stepId":0,"code":0,"fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0},"attachFiles":[{"id":0,"uploadedFile":"String","subDocumentId":0,"stepId":0,"code":0,"fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0}],"basisDocumentId":[0],"referenceDocumentId":[0],"replacedDocumentId":[0],"expiredDocumentId":[0],"id":0,"title":"String","description":"String","owner":"String","documentPolicyId":0,"updateDocumentId":0,"effectBeginDate":"0001-01-01T00:00:00.0000000+07:06","effectEndDate":"0001-01-01T00:00:00.0000000+07:06","issuingAgencyId":0,"documentTypeId":0,"documentGroupId":0,"subjectId":0,"signBy":"String","signDate":"0001-01-01T00:00:00.0000000+07:06","statusId":0,"isInternal":false,"documentNumber":"String","documentCode":"String","isUrgent":false,"scopeType":0,"isActive":false}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

{"data":{"partUploadedFile":{"fileType":"String","subDocumentId":0,"stepId":0,"id":0,"accessType":"Public","createdBy":0,"createdDate":"0001-01-01T00:00:00.0000000+07:06","fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0},"compactUploadedFile":{"fileType":"String","subDocumentId":0,"stepId":0,"id":0,"accessType":"Public","createdBy":0,"createdDate":"0001-01-01T00:00:00.0000000+07:06","fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0},"analysisUploadedFile":{"fileType":"String","subDocumentId":0,"stepId":0,"id":0,"accessType":"Public","createdBy":0,"createdDate":"0001-01-01T00:00:00.0000000+07:06","fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0},"fullUploadedFile":{"fileType":"String","subDocumentId":0,"stepId":0,"id":0,"accessType":"Public","createdBy":0,"createdDate":"0001-01-01T00:00:00.0000000+07:06","fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0},"createdAt":"0001-01-01T00:00:00.0000000+07:06","nextApprover":{"userProfiles":[{"id":0,"fullName":"String","email":"String","departmentId":0,"partyGroupId":0,"avatar":"String","telephone":"String","birthday":"0001-01-01T00:00:00.0000000+07:06","createdAt":"0001-01-01T00:00:00.0000000+07:06","updatedAt":"0001-01-01T00:00:00.0000000+07:06","failedLoginCount":0,"roles":[0],"lastLoginDate":"0001-01-01T00:00:00.0000000+07:06","name":"String"}],"processStatusId":0,"processTitle":"String","actionButtonLabel":"String","processDescription":"String","isApprovalRequired":false,"isFinalStep":false,"stepOrder":0},"currentApprover":{"approverId":0,"status":"String","processStatusId":0,"processTitle":"String","actionButtonLabel":"String","processDescription":"String","isApprovalRequired":false,"isFinalStep":false,"stepOrder":0},"attachFiles":[{"fileType":"String","subDocumentId":0,"stepId":0,"id":0,"accessType":"Public","createdBy":0,"createdDate":"0001-01-01T00:00:00.0000000+07:06","fileName":"String","filekey":"String","fileUrl":"String","checksum":"String","eTag":"String","fileSize":0}],"hasReadPermission":false,"canGrantReadPermission":false,"basisDocument":[{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"}],"basisForDocument":[{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"}],"mainDocument":{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"},"referenceDocument":[{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"}],"referencedByDocument":[{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"}],"replacedDocument":[{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"}],"replacedByDocument":[{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"}],"expiredDocument":[{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"}],"expiredByDocument":[{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"}],"updateForDocument":{"id":0,"title":"String","documentCode":"String","publicationDate":"0001-01-01T00:00:00.0000000+07:06"},"scopeType":0,"stepOrder":0,"title":"String","description":"String","owner":"String","documentPolicyId":0,"updateDocumentId":0,"effectBeginDate":"0001-01-01T00:00:00.0000000+07:06","effectEndDate":"0001-01-01T00:00:00.0000000+07:06","issuingAgencyId":0,"subjectId":0,"signBy":"String","signDate":"0001-01-01T00:00:00.0000000+07:06","updatedAt":"0001-01-01T00:00:00.0000000+07:06","statusId":0,"isInternal":false,"documentNumber":"String","documentCode":"String","isUrgent":false,"id":0,"reasonReturn":"String","accountId":0,"approverId":0,"updatedBy":"String","createdBy":"String","isParty":false,"isRevisionRequested":false,"isPrivate":false,"departmentId":0,"publicationDate":"0001-01-01T00:00:00.0000000+07:06","processStatusId":0,"documentTypeId":0,"documentGroupId":0,"accountName":"String","acceptAccountName":"String","documentGroupText":"String","processStatusText":"String","documentTypeText":"String","departmentText":"String","statusText":"String","issuingAgencyText":"String","subjectText":"String","comment":"String","submitComment":"String","fullFile":"String","parthFile":"String","isActive":false,"stepOrder":0,"stepCount":0},"code":0,"message":"String"}