"code":3001 ["Failed to update data."]

"code":3001 ["Failed to update data."]

I would like to seek your expertise - I might be wrong on my approach also.. I highly appreciate your advice. 
 1 problem remains is when a new row was added on the existing one [from another form that trigger upon Successful form submission ], it gets a return value error code 3001 


here's the return value of bodyMap
{"data":
{"Site_Asset":[3840670000011102012,
3840670000011102014,
{"Floor":"3F",
"Room_Name":"Moon",
"Brand":"Sample",
"Model":"SampleSample",
"Serial_N":"Sample",
"Description":"Sample",
"Status":"Working",
"Remarks":"N/A"
}
]
}
}

-------------------partial script-------------------------
AssetRecord = Site_Asset_Services[SOR_No == input.SOR2 && Type_of_System == "AV System"];
for each  rec in AssetRecord
{
recId = rec.ID;
subformRows = rec.Site_Asset;
updatedSubform = list();
matchedKeys = list();
// Patch existing rows that match a submitted row
for each  row in subformRows
{
for each  Final_Rec in input.AV_System
{
if(row.Floor == Final_Rec.AV_Floor && row.Room_Name == Final_Rec.AV_Room_Name)
{
row.Serial_N=Final_Rec.AV_Serial_N;
row.Status=Final_Rec.AV_Status;
row.Remarks=Final_Rec.AV_Remarks;
key = Final_Rec.AV_Floor + "|" + Final_Rec.AV_Room_Name + "|" + Final_Rec.AV_Brand + "|" + Final_Rec.AV_Model + "|" + Final_Rec.AV_Serial_N;
matchedKeys.add(key);
}
}
updatedSubform.add(row);
}
// Append submitted rows that had no matching existing row
for each  Final_Rec in input.AV_System
{
key = Final_Rec.AV_Floor + "|" + Final_Rec.AV_Room_Name + "|" + Final_Rec.AV_Brand + "|" + Final_Rec.AV_Model + "|" + Final_Rec.AV_Serial_N;
if(!matchedKeys.contains(key))
{
NewRow = Map();
NewRow.put("Floor",Final_Rec.AV_Floor);
NewRow.put("Room_Name",Final_Rec.AV_Room_Name);
NewRow.put("Brand",Final_Rec.AV_Brand);
NewRow.put("Model",Final_Rec.AV_Model);
NewRow.put("Serial_N",Final_Rec.AV_Serial_N);
NewRow.put("Description",Final_Rec.AV_Description);
NewRow.put("Status",Final_Rec.AV_Status);
NewRow.put("Remarks",Final_Rec.AV_Remarks);
updatedSubform.add(NewRow);
}
}
fieldsMap = Map();
fieldsMap.put("Site_Asset",updatedSubform);
bodyMap = Map();
bodyMap.put("data",fieldsMap);
response = invokeurl
[
type :PATCH
parameters:bodyMap.toString()
connection:"zcreatorconnect"
];
info bodyMap;
info response;
}