diff --git a/gso/api/v1/network.py b/gso/api/v1/network.py
index e4a19de9e90475f70261e4bf408498de68a95af9..e1a157990178a7d5e3efc242c041b870b51f3dc5 100644
--- a/gso/api/v1/network.py
+++ b/gso/api/v1/network.py
@@ -10,6 +10,8 @@ from orchestrator.security import authorize
 from orchestrator.services.subscriptions import build_extended_domain_model
 from starlette import status
 
+from gso.annotations.coordinates import LatitudeCoordinate, LongitudeCoordinate
+from gso.annotations.interfaces import PhysicalPortCapacity
 from gso.products.product_blocks.iptrunk import IptrunkType
 from gso.products.product_blocks.router import RouterRole
 from gso.services.subscriptions import get_active_iptrunk_subscriptions
diff --git a/gso/workflows/iptrunk/create_imported_iptrunk.py b/gso/workflows/iptrunk/create_imported_iptrunk.py
index 4d75437504ac6536cf56c8b2f5231bea0a937db8..a03ce8df91752bedfbc3f3d27b60a3e1b10533e3 100644
--- a/gso/workflows/iptrunk/create_imported_iptrunk.py
+++ b/gso/workflows/iptrunk/create_imported_iptrunk.py
@@ -13,6 +13,7 @@ from orchestrator.workflows.steps import resync, set_status, store_process_subsc
 from pydantic import AfterValidator, ConfigDict
 from pydantic_forms.validators import validate_unique_list
 
+from gso.annotations.interfaces import LAGMember, LAGMemberList, PhysicalPortCapacity
 from gso.products import ProductName
 from gso.products.product_blocks.iptrunk import IptrunkInterfaceBlockInactive, IptrunkType
 from gso.products.product_types.iptrunk import ImportedIptrunkInactive
diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index e10401186d3731923dc92d398bc93a0d617465fb..8dda847987a68be3b5c860da043e6feb28d8f115 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -20,6 +20,9 @@ from pydantic import ConfigDict
 from pydantic_forms.validators import ReadOnlyField
 from pynetbox.models.dcim import Interfaces
 
+from gso.annotations.interfaces import JuniperLAGMember, LAGMember, LAGMemberList, PhysicalPortCapacity
+from gso.annotations.netbox_router import NetboxEnabledRouter
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.iptrunk import (
     IptrunkInterfaceBlockInactive,
     IptrunkSideBlockInactive,
diff --git a/gso/workflows/iptrunk/migrate_iptrunk.py b/gso/workflows/iptrunk/migrate_iptrunk.py
index 5a7cafb03dad77270754cdb9da8a1c57ba84182e..5afc1e43deb7d36d055130659aa196f7b8b9dc2f 100644
--- a/gso/workflows/iptrunk/migrate_iptrunk.py
+++ b/gso/workflows/iptrunk/migrate_iptrunk.py
@@ -24,6 +24,8 @@ from pydantic import ConfigDict
 from pydantic_forms.validators import ReadOnlyField
 from pynetbox.models.dcim import Interfaces
 
+from gso.annotations.interfaces import JuniperAEInterface, JuniperLAGMember, LAGMember, LAGMemberList
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.iptrunk import IptrunkInterfaceBlock, IptrunkType
 from gso.products.product_types.iptrunk import Iptrunk
 from gso.products.product_types.router import Router
diff --git a/gso/workflows/iptrunk/modify_trunk_interface.py b/gso/workflows/iptrunk/modify_trunk_interface.py
index 16de246238a40f40341cf2911b59471cb956df8b..a43e3634808022124881e3b250b1d2bdeeff43cc 100644
--- a/gso/workflows/iptrunk/modify_trunk_interface.py
+++ b/gso/workflows/iptrunk/modify_trunk_interface.py
@@ -15,6 +15,8 @@ from orchestrator.workflows.utils import wrap_modify_initial_input_form
 from pydantic import ConfigDict
 from pydantic_forms.validators import Label, ReadOnlyField
 
+from gso.annotations.interfaces import JuniperLAGMember, LAGMember, LAGMemberList, PhysicalPortCapacity
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.iptrunk import (
     IptrunkInterfaceBlock,
     IptrunkSideBlock,
diff --git a/gso/workflows/iptrunk/terminate_iptrunk.py b/gso/workflows/iptrunk/terminate_iptrunk.py
index 9b5cf71a88011e68f2cda4202a6e92e3e381b31e..e86a61eb2c2249c221127a4fafa0165704ca197b 100644
--- a/gso/workflows/iptrunk/terminate_iptrunk.py
+++ b/gso/workflows/iptrunk/terminate_iptrunk.py
@@ -17,6 +17,7 @@ from orchestrator.workflows.steps import (
 )
 from orchestrator.workflows.utils import wrap_modify_initial_input_form
 
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.iptrunk import IptrunkSideBlock
 from gso.products.product_types.iptrunk import Iptrunk
 from gso.services import infoblox
diff --git a/gso/workflows/lan_switch_interconnect/create_lan_switch_interconnect.py b/gso/workflows/lan_switch_interconnect/create_lan_switch_interconnect.py
index 973cf1d88495b4343e390c258d16c3c9f78f65c9..de28e1cedd46321917114179dd5e85c55b5f4c0a 100644
--- a/gso/workflows/lan_switch_interconnect/create_lan_switch_interconnect.py
+++ b/gso/workflows/lan_switch_interconnect/create_lan_switch_interconnect.py
@@ -13,6 +13,15 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form
 from pydantic import AfterValidator, ConfigDict
 from pydantic_forms.validators import Divider, ReadOnlyField
 
+from gso.annotations.interfaces import (
+    JuniperAEInterface,
+    JuniperLAGMember,
+    JuniperPhyInterface,
+    LAGMember,
+    PhysicalPortCapacity,
+    validate_interface_names_are_unique,
+)
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.lan_switch_interconnect import (
     LanSwitchInterconnectAddressSpace,
     LanSwitchInterconnectInterfaceBlockInactive,
diff --git a/gso/workflows/router/create_router.py b/gso/workflows/router/create_router.py
index 04d38b750f5fa4ca87591f7affe04674208685bf..8a0fc9b78d77720e5bfb80db9910d2b293a0d405 100644
--- a/gso/workflows/router/create_router.py
+++ b/gso/workflows/router/create_router.py
@@ -14,6 +14,7 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form
 from pydantic import ConfigDict, model_validator
 from pydantic_forms.validators import ReadOnlyField
 
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.router import RouterRole
 from gso.products.product_types.router import RouterInactive, RouterProvisioning
 from gso.products.product_types.site import Site
diff --git a/gso/workflows/router/promote_p_to_pe.py b/gso/workflows/router/promote_p_to_pe.py
index a82b4823f4374772ef2b5365f3f57ea56fad1017..0b7ddf3bda0c1e259d60a40872fe5f64e51e5195 100644
--- a/gso/workflows/router/promote_p_to_pe.py
+++ b/gso/workflows/router/promote_p_to_pe.py
@@ -15,6 +15,7 @@ from orchestrator.workflows.steps import resync, store_process_subscription, uns
 from orchestrator.workflows.utils import wrap_modify_initial_input_form
 from pydantic import ConfigDict, model_validator
 
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.router import RouterRole
 from gso.products.product_types.router import Router
 from gso.services.kentik_client import KentikClient, NewKentikDevice
diff --git a/gso/workflows/router/terminate_router.py b/gso/workflows/router/terminate_router.py
index 9bc48f8ce9943692f8c475b1595d33e9964645f7..dfe846abd409f8e7d138a61b4a547f2eebc88506 100644
--- a/gso/workflows/router/terminate_router.py
+++ b/gso/workflows/router/terminate_router.py
@@ -20,6 +20,7 @@ from orchestrator.workflows.steps import (
 from orchestrator.workflows.utils import wrap_modify_initial_input_form
 from requests import HTTPError
 
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.router import RouterRole
 from gso.products.product_types.router import Router
 from gso.services import infoblox
diff --git a/gso/workflows/router/update_ibgp_mesh.py b/gso/workflows/router/update_ibgp_mesh.py
index 298c0878a2f82449173c78d24604e82ae8eb5bb1..72a1b5935971ee03d3383078ac78f4376f1276ef 100644
--- a/gso/workflows/router/update_ibgp_mesh.py
+++ b/gso/workflows/router/update_ibgp_mesh.py
@@ -12,6 +12,8 @@ from orchestrator.workflows.steps import resync, store_process_subscription, uns
 from orchestrator.workflows.utils import wrap_modify_initial_input_form
 from pydantic import ConfigDict, model_validator
 
+from gso.annotations.snmp import SNMPVersion
+from gso.annotations.tt_number import TTNumber
 from gso.products.product_blocks.router import RouterRole
 from gso.products.product_types.router import Router
 from gso.services import librenms_client
diff --git a/test/cli/test_imports.py b/test/cli/test_imports.py
index 983323869339b67329f3824ee7310a495c6c5a24..ac3aa66441b7a7e4a8c36fad34203aaa4c571e37 100644
--- a/test/cli/test_imports.py
+++ b/test/cli/test_imports.py
@@ -4,6 +4,7 @@ from unittest.mock import patch
 
 import pytest
 
+from gso.annotations.interfaces import PhysicalPortCapacity
 from gso.cli.imports import (
     import_iptrunks,
     import_office_routers,
diff --git a/test/fixtures.py b/test/fixtures.py
index 6c3928555854b130deea0cf30fc95d3afaed62cd..29d5614febb9e400e4272513db4c7bd06edcf89d 100644
--- a/test/fixtures.py
+++ b/test/fixtures.py
@@ -21,6 +21,7 @@ from pydantic_forms.core import FormPage
 from pydantic_forms.types import FormGenerator, SubscriptionMapping
 from pydantic_forms.validators import Choice
 
+from gso.annotations.interfaces import PhysicalPortCapacity
 from gso.products import ProductName
 from gso.products.product_blocks.iptrunk import (
     IptrunkInterfaceBlock,
diff --git a/test/utils/test_helpers.py b/test/utils/test_helpers.py
index 0df4ced9588e514f2cad00bbc8c22eaa2acdbfb5..a39ab9fb027f2fbee56a282fc998201b9fcaf138 100644
--- a/test/utils/test_helpers.py
+++ b/test/utils/test_helpers.py
@@ -3,6 +3,7 @@ from unittest.mock import patch
 import pytest
 from orchestrator.types import SubscriptionLifecycle
 
+from gso.annotations.tt_number import validate_tt_number
 from gso.products import Router
 from gso.products.product_blocks.iptrunk import IptrunkInterfaceBlock
 from gso.products.product_blocks.router import RouterRole
diff --git a/test/workflows/iptrunk/test_create_iptrunk.py b/test/workflows/iptrunk/test_create_iptrunk.py
index 6be42faed62222a5d899e4f5977a26e813c4f2f7..b8a90ba9eb60bace00e121144473064f2e5b9057 100644
--- a/test/workflows/iptrunk/test_create_iptrunk.py
+++ b/test/workflows/iptrunk/test_create_iptrunk.py
@@ -4,6 +4,7 @@ from unittest.mock import patch
 import pytest
 from infoblox_client.objects import HostRecord
 
+from gso.annotations.interfaces import PhysicalPortCapacity
 from gso.products import Iptrunk, ProductName
 from gso.products.product_blocks.iptrunk import IptrunkType
 from gso.services.subscriptions import get_product_id_by_name
diff --git a/test/workflows/iptrunk/test_modify_trunk_interface.py b/test/workflows/iptrunk/test_modify_trunk_interface.py
index 359308cdf880ef7b16a341073ce203410749d15d..7c0d2235cf403403d6da7e1b2378442e736d43e7 100644
--- a/test/workflows/iptrunk/test_modify_trunk_interface.py
+++ b/test/workflows/iptrunk/test_modify_trunk_interface.py
@@ -2,6 +2,7 @@ from unittest.mock import patch
 
 import pytest
 
+from gso.annotations.interfaces import LAGMemberList, PhysicalPortCapacity
 from gso.products import Iptrunk
 from gso.products.product_blocks.iptrunk import IptrunkType
 from gso.utils.shared_enums import Vendor