This code works great however it creates an additional ID1 column because you calculate the ID using SQL. To remedy this you could also get the ID from SQL in the following way:

Property id As %Integer(%JSONINCLUDE = "OUTPUTONLY") [ Calculated, Transient ];

Method idGet() As %Status
{
    return ..%Id()
}

The getter will now provide the ID and Transient ensures no additional property is stored in the database.