First, some previous considerations and decisions: Both systems are 2D. EPSG:28356 is a projected (Transverse Mercator method) one. About the local reference system we don't know its procedence, but we can think that it is just a local cartesian 2D system.
We have some options, but let me consider two:
One is transform the EPSG:28356 coordinates to geocentric, determine the paremeters of a similitude transformation from the local cartesian system to the geocentric one, in 3D, and then transform the coordinates of the local cartesian system to geocentric and reproject them to EPSG:28356.
The other is consider a 2D similitude transformation between the local cartesian system and the projected one. This method will be less precise but has an advantage, we can define a CRS WKT for the 2D affine transformed from the projected reference system, and we can just define that CRS for the local layer.
Since you want to setup a custom CRS we will take the second option. So, lets find the 2D parameters to transform the coordinates from EPSG:28356 to the local CRS.
I will use a Python module that I wrote when I need to do that (https://github.com/gabriel-de-luca/simil). It is made for 3D, so I will create a Z=zero coordinate. There are other ways to get the parameters, but I use this:
import numpy as np
np.set_printoptions(precision=3,suppress=True)
import simil
source_points = [[383276.37, 6359888.50, 0],
[382941.47, 6359791.40, 0],
[383155.14, 6359756.31, 0]]
target_points = [[7950, 1000, 0],
[7650, 850, 0],
[7850, 850, 0]]
source_points_array = np.array(source_points)
target_points_array = np.array(target_points)
Get the parameters
m_scalar, r_matrix, t_vector = simil.process(source_points_array,target_points_array)
Print the parameters
print('\n m scalar = \n' + str(m_scalar))
print('\n R matrix = \n' + str(r_matrix))
print('\n T vector = \n' + str(t_vector))
Print them ready for the WKT
print('\n A0 = ' + str(t_vector[0]))
print('\n A1 = ' + str(m_scalar * r_matrix[0][0]))
print('\n A2 = ' + str(m_scalar * r_matrix[0][1]))
print('\n B0 = ' + str(t_vector[1]))
print('\n B1 = ' + str(m_scalar * r_matrix[1][0]))
print('\n B2 = ' + str(m_scalar * r_matrix[1][1]))
Which returns:
m scalar =
0.9598327695807208
R matrix =
[[ 0.985 -0.172 0. ]
[ 0.172 0.985 0. ]
[ 0. 0. 1. ]]
T vector =
[[ 694357.794]
[-6075863.374]
[ 0. ]]
A0 = [694357.794]
A1 = 0.9455596465082436
A2 = -0.1649117959886513
B0 = [-6075863.374]
B1 = 0.1649117959886513
B2 = 0.9455596465082436
Now, we can create a custom CRS WKT2:2019 definition, which will be a derived (Affine method) from EPSG:28356:
DERIVEDPROJCRS["Historic site grid",
BASEPROJCRS["GDA94 / MGA zone 56",
BASEGEOGCRS["GDA94",
DATUM["Geocentric Datum of Australia 1994",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]]],
CONVERSION["Map Grid of Australia zone 56",
METHOD["Transverse Mercator",
ID["EPSG",9807]],
PARAMETER["Latitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8801]],
PARAMETER["Longitude of natural origin",153,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8802]],
PARAMETER["Scale factor at natural origin",0.9996,
SCALEUNIT["unity",1],
ID["EPSG",8805]],
PARAMETER["False easting",500000,
LENGTHUNIT["metre",1],
ID["EPSG",8806]],
PARAMETER["False northing",10000000,
LENGTHUNIT["metre",1],
ID["EPSG",8807]]]],
DERIVINGCONVERSION["Affine",
METHOD["Affine parametric transformation",
ID["EPSG",9624]],
PARAMETER["A0",694357.794,
LENGTHUNIT["metre",1],
ID["EPSG",8623]],
PARAMETER["A1",0.945559646508244,
SCALEUNIT["coefficient",1],
ID["EPSG",8624]],
PARAMETER["A2",-0.164911795988651,
SCALEUNIT["coefficient",1],
ID["EPSG",8625]],
PARAMETER["B0",-6075863.374,
LENGTHUNIT["metre",1],
ID["EPSG",8639]],
PARAMETER["B1",0.164911795988651,
SCALEUNIT["coefficient",1],
ID["EPSG",8640]],
PARAMETER["B2",0.945559646508244,
SCALEUNIT["coefficient",1],
ID["EPSG",8641]]],
CS[Cartesian,2],
AXIS["(E)",east,
ORDER[1],
LENGTHUNIT["metre",1]],
AXIS["(N)",north,
ORDER[2],
LENGTHUNIT["metre",1]]]
That's all. Create the new Custom CRS:

and set it for the local system layer:
