             "fee_details": self.fees,
             "net": self.net,
             "source": self.source,
-            "status": self.status.rawValue,
-            "type": self.type.rawValue
-        ])
+            "status": self.status?.rawValue,
+            "type": self.type?.rawValue
+        ]
+        return try Node(node: object)
     }
-    
 }
-

        self.fees = try node.get("fee_details")
        self.net = try node.get("net")
        self.source = try node.get("source")
        self.status = try StripeStatus(rawValue: node.get("status")) ?? StripeStatus.failed
        self.type = try ActionType(rawValue: node.get("type")) ?? ActionType.none
    }
    
    public func makeNode(in context: Context?) throws -> Node {
        return try Node(node: [
            "id": self.id,
            "object": self.object,
            "amount": self.amount,


public final class BalanceTransactionItem: StripeModelProtocol {
    
    public private(set) var id: String?
    public private(set) var object: String?
    public private(set) var amount: Int?
    public private(set) var availableOn: Date?
    public private(set) var created: Date?
    public private(set) var description: String?
    public private(set) var fees: [Fee]?
    public private(set) var net: Int?
    public private(set) var source: String?
    public private(set) var status: StripeStatus?
    public private(set) var type: ActionType?
    
    public init(node: Node) throws {
        self.id = try node.get("id")
