I am not sure if mine grid CRSes are exactly correlated to Transverse Mercator projections.
I wrote a Python module to find the similarity transformation parameters that better adapts to a given set of control points in 3-D: https://github.com/gabriel-de-luca/simil.
I use it to transform local surveys to a geocentric CRS, and then I project from geocentric to the desired projected CRS. But you can pass fixed Z values if you want to find 2-D transformation parameters, or a 2-D rotation with a 3-D translation.
I don't create 2-D CRSes transformed from a projected one, I find the transformation parameters and transform my data with
ogr2ogr and a PROJ pipeline. But if you want to do it, the WKT2:2019 CRS definition must be a Derived Projected CRS, as defined in section 14.4 of the OGC standarization: http://docs.opengeospatial.org/is/18-010r7/18-010r7.html