I no longer have the original code, so I rewrote the core as one iLogic rule. It follows the same tags and the same steps, and it is small enough to read in one go. Run it from an empty, saved main assembly, with the report saved as report.xml in the same folder.

What the rule expects

The report is the XML you get from Export Report in Tacton Studio. The rule only looks at parts that carry an IA_type attribute:

IA_type What the rule does
assembly Copies the source assembly into its own folder, builds its children inside it, places it
part Copies the source part, sets parameters, builds its features, places it
extrude_rectangle Sketches a rectangle on a work plane and extrudes it, inside the part above it

A Tacton part without IA tags is only a grouping in the configuration. The rule walks through it and attaches its children to the nearest assembly above.

Two details from real reports. Attribute names were not always spelled the same (IA_Type and IA_type both appear), so the rule compares them without case. And Tacton writes numbers with a point as decimal separator, whatever the Windows locale says, so they are parsed with the invariant culture.

Positions and units

Tacton gives positions and sizes in millimetres. The Inventor API works in centimetres, whatever the document units are. Every value from the report is therefore divided by 10 before it goes into a matrix or a feature. Forgetting that gives a frame ten times too big, which you notice quickly, but it is easier to handle it in one place.

Rotation is around the Z axis in degrees, as in the reports I used. Parts are grounded after placing. The position comes from Tacton; I do not add constraints that could pull it somewhere else.

The rule

Set library to the folder with your source files. Their names must match IA_source_part, without extension.

AddReference "System.Xml"
Imports System.IO
Imports System.Xml
Imports System.Globalization

Sub Main()
    Dim library As String = "C:\Work\Library"
    Dim reportPath As String = Path.Combine(ThisDoc.Path, "report.xml")

    Dim xml As New XmlDocument()
    xml.Load(reportPath)

    Dim topAsm As AssemblyDocument = ThisDoc.Document
    For Each node As XmlElement In xml.SelectNodes("//report/part")
        Walk(node, topAsm, ThisDoc.Path, library)
    Next

    topAsm.Update()
    topAsm.Save()
End Sub

' Build one Tacton part, or pass its children through when it has no IA tags.
Sub Walk(node As XmlElement, parent As AssemblyDocument, folder As String, library As String)
    Dim iaType As String = Attr(node, "IA_type").ToLowerInvariant()

    If iaType <> "assembly" AndAlso iaType <> "part" Then
        For Each child As XmlElement In node.SelectNodes("subparts/part")
            Walk(child, parent, folder, library)
        Next
        Return
    End If

    If Num(node, "qty", 1) < 1 Then Return

    Dim isAssembly As Boolean = (iaType = "assembly")
    Dim ext As String = If(isAssembly, ".iam", ".ipt")
    Dim name As String = Attr(node, "IA_target_part")

    ' An assembly gets its own folder, a part is named after its parent.
    Dim targetFolder As String = If(isAssembly, Path.Combine(folder, name), folder)
    Dim fileName As String = If(isAssembly, name, Path.GetFileNameWithoutExtension(parent.FullFileName) & "_" & name)
    Directory.CreateDirectory(targetFolder)

    Dim source As String = Path.Combine(library, Attr(node, "IA_source_part") & ext)
    Dim target As String = Path.Combine(targetFolder, fileName & ext)
    File.Copy(source, target, True)

    Dim doc As Document = ThisApplication.Documents.Open(target, False)
    If isAssembly Then
        For Each child As XmlElement In node.SelectNodes("subparts/part")
            Walk(child, doc, targetFolder, library)
        Next
    Else
        ApplyParameters(node, doc)
        ApplyFeatures(node, doc)
    End If
    doc.Update()
    doc.Save()

    Place(parent, target, node)
End Sub

' Place a file in its parent at the Tacton position (mm) and Z rotation (degrees).
Sub Place(parent As AssemblyDocument, filePath As String, node As XmlElement)
    Dim tg As TransientGeometry = ThisApplication.TransientGeometry
    Dim m As Matrix = tg.CreateMatrix()
    m.SetToRotation(Num(node, "IA_z_rotation") * Math.PI / 180, tg.CreateVector(0, 0, 1), tg.CreatePoint(0, 0, 0))
    m.SetTranslation(tg.CreateVector(Num(node, "IA_x_position") / 10, Num(node, "IA_y_position") / 10, Num(node, "IA_z_position") / 10))

    Dim occ As ComponentOccurrence = parent.ComponentDefinition.Occurrences.Add(filePath, m)
    occ.Grounded = True
End Sub

' Every Tacton attribute with the same name as a part parameter drives that parameter.
Sub ApplyParameters(node As XmlElement, doc As PartDocument)
    Dim params As Parameters = doc.ComponentDefinition.Parameters
    For Each a As XmlElement In node.SelectNodes("attributes/attribute")
        Dim name As String = a.GetAttribute("name")
        If name.StartsWith("IA_", StringComparison.OrdinalIgnoreCase) Then Continue For

        Dim p As Parameter
        Try
            p = params.Item(name)
        Catch
            Continue For
        End Try

        Dim v As Double
        If Not Double.TryParse(a.InnerText, NumberStyles.Float, CultureInfo.InvariantCulture, v) Then Continue For
        Dim text As String = v.ToString(CultureInfo.InvariantCulture)

        Select Case p.Units
            Case "ul" : p.Expression = text
            Case "deg" : p.Expression = text & " deg"
            Case Else : p.Expression = text & " mm"
        End Select
    Next
End Sub

Sub ApplyFeatures(node As XmlElement, doc As PartDocument)
    For Each f As XmlElement In node.SelectNodes("subparts/part")
        If Attr(f, "IA_type").ToLowerInvariant() = "extrude_rectangle" Then ExtrudeRectangle(doc, f)
    Next
End Sub

' A rectangle centred on the given point, extruded symmetrically along IA_workplane.
Sub ExtrudeRectangle(doc As PartDocument, f As XmlElement)
    Dim def As PartComponentDefinition = doc.ComponentDefinition
    Dim tg As TransientGeometry = ThisApplication.TransientGeometry

    ' Default work planes: 1 = YZ, 2 = XZ, 3 = XY. The axis is the extrusion direction.
    Dim plane As WorkPlane
    Select Case Attr(f, "IA_workplane")
        Case "X_axis" : plane = def.WorkPlanes.Item(1)
        Case "Y_axis" : plane = def.WorkPlanes.Item(2)
        Case Else : plane = def.WorkPlanes.Item(3)
    End Select

    Dim sk As PlanarSketch = def.Sketches.Add(plane)
    Dim c As Point2d = sk.ModelToSketchSpace(tg.CreatePoint(Num(f, "IA_x_position") / 10, Num(f, "IA_y_position") / 10, Num(f, "IA_z_position") / 10))
    Dim hl As Double = Num(f, "IA_length") / 20
    Dim hh As Double = Num(f, "IA_height") / 20
    sk.SketchLines.AddAsTwoPointRectangle(tg.CreatePoint2d(c.X - hl, c.Y - hh), tg.CreatePoint2d(c.X + hl, c.Y + hh))

    Dim op As PartFeatureOperationEnum = PartFeatureOperationEnum.kJoinOperation
    If Attr(f, "IA_extrusion_operation").ToLowerInvariant() = "cut" Then op = PartFeatureOperationEnum.kCutOperation

    Dim ed As ExtrudeDefinition = def.Features.ExtrudeFeatures.CreateExtrudeDefinition(sk.Profiles.AddForSolid(), op)
    ed.SetDistanceExtent(Num(f, "IA_depth") / 10, PartFeatureExtentDirectionEnum.kSymmetricExtentDirection)
    def.Features.ExtrudeFeatures.Add(ed)
End Sub

Function Attr(node As XmlElement, name As String) As String
    For Each a As XmlElement In node.SelectNodes("attributes/attribute")
        If String.Equals(a.GetAttribute("name"), name, StringComparison.OrdinalIgnoreCase) Then Return a.InnerText.Trim()
    Next
    Return ""
End Function

Function Num(node As XmlElement, name As String, Optional fallback As Double = 0) As Double
    Dim v As Double
    If Double.TryParse(Attr(node, name), NumberStyles.Float, CultureInfo.InvariantCulture, v) Then Return v
    Return fallback
End Function

What the rule leaves out

It is a starting point, not the full middleware.

The rule overwrites files in the project folder, so run it on an empty folder or a fresh copy. It only knows symmetric extrusions, because those were the only ones in my reports. The first feature in a part has to be a join; a cut on an empty part has nothing to cut from. Parameters are matched by exact name, so Length in Tacton and length in Inventor will not meet.

The rectangle is centred on the point from the report, with IA_length along the sketch X axis and IA_height along the sketch Y axis. On the default work planes that orientation is fixed by Inventor, so check one part by hand before you trust a whole structure.

Where to take it next

The same walk works for other features. A hole, a fillet or an iFeature from the library is one more Case in ApplyFeatures and one more tag in Tacton. The point is that the tag list stays short and generic, so the Tacton model does not need to know about Inventor files, and the Inventor library does not need to know about the product.