plugins { alias(libs.plugins.kotlin.jvm) alias(libs.plugins.kotlin.spring) alias(libs.plugins.kotlin.jpa) alias(libs.plugins.spring.dependency.management) } description = "vibe_erp pbc-warehousing — first-class stock transfers across locations. " + "Wraps InventoryApi.recordMovement with an orchestration aggregate (StockTransfer) that " + "atomically writes TRANSFER_OUT + TRANSFER_IN ledger rows in one transaction. INTERNAL PBC." java { toolchain { languageVersion.set(JavaLanguageVersion.of(21)) } } kotlin { jvmToolchain(21) compilerOptions { freeCompilerArgs.add("-Xjsr305=strict") } } allOpen { annotation("jakarta.persistence.Entity") annotation("jakarta.persistence.MappedSuperclass") annotation("jakarta.persistence.Embeddable") } // Ninth PBC. Same dependency rule — api/api-v1 + platform/* only, NEVER another pbc-*. // Cross-PBC reads go through CatalogApi (validate itemCode) + InventoryApi (validate // location codes implicitly via recordMovement; no dedicated "does this location exist?" // lookup on InventoryApi today, so we rely on recordMovement's own error path). The // cross-PBC WRITE happens via InventoryApi.recordMovement with TRANSFER_OUT + TRANSFER_IN. dependencies { api(project(":api:api-v1")) implementation(project(":platform:platform-persistence")) implementation(project(":platform:platform-security")) implementation(libs.kotlin.stdlib) implementation(libs.kotlin.reflect) implementation(libs.spring.boot.starter) implementation(libs.spring.boot.starter.web) implementation(libs.spring.boot.starter.data.jpa) implementation(libs.spring.boot.starter.validation) implementation(libs.jackson.module.kotlin) testImplementation(libs.spring.boot.starter.test) testImplementation(libs.junit.jupiter) testImplementation(libs.assertk) testImplementation(libs.mockk) } tasks.test { useJUnitPlatform() }