diff --git a/src/app/[lang]/dashboard/controller/create-invoice.controller.ts b/src/app/[lang]/dashboard/controller/create-invoice.controller.ts
index 185261a..e07023f 100644
--- a/src/app/[lang]/dashboard/controller/create-invoice.controller.ts
+++ b/src/app/[lang]/dashboard/controller/create-invoice.controller.ts
@@ -1,8 +1,13 @@
 "use server";
 
 import { ApiEither } from "@/feature/common/data/api-task";
+import serverDi from "@/feature/common/server.di";
 import { InvoiceParam } from "@/feature/core/invoice/domain/param/invoice.param";
-import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice.usecase";
+import {
+  CreateInvoiceUsecase,
+  createInvoiceUsecaseKey,
+} from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
+import { invoiceModuleKey } from "@/feature/core/invoice/invoice.module-key";
 import { connection } from "next/server";
 
 /**
@@ -15,5 +20,8 @@ export default async function createInvoiceController(
   params: InvoiceParam,
 ): Promise<ApiEither<string>> {
   connection();
-  return createInvoiceUsecase(params);
+  const usecase = serverDi(invoiceModuleKey).resolve<CreateInvoiceUsecase>(
+    createInvoiceUsecaseKey,
+  );
+  return usecase(params);
 }
diff --git a/src/app/[lang]/dashboard/module/dashboard.app-module.ts b/src/app/[lang]/dashboard/module/dashboard.app-module.ts
index e4344ab..b3ec20f 100644
--- a/src/app/[lang]/dashboard/module/dashboard.app-module.ts
+++ b/src/app/[lang]/dashboard/module/dashboard.app-module.ts
@@ -1,6 +1,5 @@
 import CreateRandomInvoiceButtonVM from "@/app/[lang]/dashboard/vm/create-random-invoice-button-vm";
 import di from "@/bootstrap/di/init-di";
-// import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice.usecase";
 
 /**
  * Each page can have its own di to connect all vms, usecases or controllers
@@ -8,9 +7,6 @@ import di from "@/bootstrap/di/init-di";
 export default function dashboardAppModule() {
   const dashboardDi = di.createChildContainer();
 
-  // dashboardDi.register(createInvoiceUsecase.name, {
-  //   useValue: createInvoiceUsecase,
-  // });
   dashboardDi.register(
     CreateRandomInvoiceButtonVM,
     CreateRandomInvoiceButtonVM,
diff --git a/src/app/[lang]/dashboard/vm/create-random-invoice-button-vm.ts b/src/app/[lang]/dashboard/vm/create-random-invoice-button-vm.ts
index 92e0c25..246508d 100644
--- a/src/app/[lang]/dashboard/vm/create-random-invoice-button-vm.ts
+++ b/src/app/[lang]/dashboard/vm/create-random-invoice-button-vm.ts
@@ -5,7 +5,7 @@ import useThrottle from "@/bootstrap/helpers/hooks/use-throttle";
 import BaseVM from "@/bootstrap/helpers/vm/base-vm";
 import langKey from "@/bootstrap/i18n/dictionaries/lang-key";
 import { InvoiceParam } from "@/feature/core/invoice/domain/param/invoice.param";
-import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice.usecase";
+import { CreateInvoiceUsecase } from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
 import { faker } from "@faker-js/faker";
 import { useRouter } from "next/navigation";
 import { useTranslation } from "react-i18next";
@@ -16,7 +16,7 @@ import { useTranslation } from "react-i18next";
  *  in this layer.
  */
 export default class CreateRandomInvoiceButtonVM extends BaseVM<ButtonVm> {
-  private createInvoice: typeof createInvoiceUsecase;
+  private createInvoice: CreateInvoiceUsecase;
 
   constructor() {
     super();
diff --git a/src/app/components/button/stories/Button.stories.tsx b/src/app/components/button/stories/Button.stories.tsx
index 2ad8208..a68137b 100644
--- a/src/app/components/button/stories/Button.stories.tsx
+++ b/src/app/components/button/stories/Button.stories.tsx
@@ -4,7 +4,7 @@ import { DiContext, useDI } from "@/bootstrap/di/di-context";
 import mockedModuleDi from "@/bootstrap/di/mocked-module-di";
 import Story from "@/bootstrap/helpers/view/storybook-base-template-type";
 import getArgVM from "@/bootstrap/helpers/view/storybook-with-arg-vm";
-import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice.usecase";
+import { createInvoiceUsecaseKey } from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
 import type { Meta } from "@storybook/react";
 import { useRef } from "react";
 
@@ -36,30 +36,32 @@ export const Primary: Story = {
 export const WithVM: Story = {
   decorators: [
     (Story) => {
-      const di = mockedModuleDi([
-        {
-          token: CreateRandomInvoiceButtonVM,
-          provider: CreateRandomInvoiceButtonVM,
-        },
-        {
-          token: createInvoiceUsecase.name,
-          // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-console
-          provider: (args: any) => console.log("clicked", args),
-        },
-      ]);
-      return <Story di={di} />;
+      const di = useRef(
+        mockedModuleDi([
+          {
+            token: CreateRandomInvoiceButtonVM,
+            provider: CreateRandomInvoiceButtonVM,
+          },
+          {
+            token: createInvoiceUsecaseKey,
+            // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-console
+            provider: (args: any) => console.log("clicked", args),
+          },
+        ]),
+      );
+      return (
+        <DiContext.Provider value={di.current}>
+          <Story di={di.current} />
+        </DiContext.Provider>
+      );
     },
   ],
-  render: (_, globalProps) => {
+  render: () => {
     function Child() {
       const di = useDI();
       const vm = useRef(di.resolve(CreateRandomInvoiceButtonVM));
       return <Button vm={vm.current} memoizedByVM={false} />;
     }
-    return (
-      <DiContext.Provider value={globalProps.di}>
-        <Child />
-      </DiContext.Provider>
-    );
+    return <Child />;
   },
 };
diff --git a/src/feature/core/invoice/data/module/invoice.di.ts b/src/feature/core/invoice/data/module/invoice.di.ts
index 641faee..cfff4b0 100644
--- a/src/feature/core/invoice/data/module/invoice.di.ts
+++ b/src/feature/core/invoice/data/module/invoice.di.ts
@@ -1,11 +1,16 @@
 import di from "@/bootstrap/di/init-di";
 import invoiceDbRepo from "@/feature/core/invoice/data/repo/invoice-db.repo";
 import { invoiceRepoKey } from "@/feature/core/invoice/domain/i-repo/invoice.i-repo";
+import createInvoiceUsecase from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice-impl.usecase";
+import { createInvoiceUsecaseKey } from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
 import { DependencyContainer } from "tsyringe";
 
 export default function getInvoiceDi(): DependencyContainer {
   const invoiceDi = di.createChildContainer();
 
   invoiceDi.register(invoiceRepoKey, invoiceDbRepo);
+  invoiceDi.register(createInvoiceUsecaseKey, {
+    useValue: createInvoiceUsecase,
+  });
   return invoiceDi;
 }
diff --git a/src/feature/core/invoice/domain/usecase/create-invoice.usecase.ts b/src/feature/core/invoice/domain/usecase/create-invoice/create-invoice-impl.usecase.ts
similarity index 80%
rename from src/feature/core/invoice/domain/usecase/create-invoice.usecase.ts
rename to src/feature/core/invoice/domain/usecase/create-invoice/create-invoice-impl.usecase.ts
index da93b8d..edb7144 100644
--- a/src/feature/core/invoice/domain/usecase/create-invoice.usecase.ts
+++ b/src/feature/core/invoice/domain/usecase/create-invoice/create-invoice-impl.usecase.ts
@@ -9,12 +9,13 @@ import {
   invoiceSchema,
 } from "@/feature/core/invoice/domain/param/invoice.param";
 import { invoiceModuleKey } from "@/feature/core/invoice/invoice.module-key";
+import { CreateInvoiceUsecase } from "@/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase";
 import { pipe } from "fp-ts/lib/function";
 import { chain, fromNullable, left, map, right } from "fp-ts/lib/TaskEither";
 
-export default async function createInvoiceUsecase(
+const createInvoiceUsecase: CreateInvoiceUsecase = async (
   params: InvoiceParam,
-): Promise<ApiEither<string>> {
+): Promise<ApiEither<string>> => {
   const repo = serverDi(invoiceModuleKey).resolve<InvoiceRepo>(invoiceRepoKey);
 
   return pipe(
@@ -27,4 +28,6 @@ export default async function createInvoiceUsecase(
     }),
     chain((params) => repo.createInvoice(params)),
   )();
-}
+};
+
+export default createInvoiceUsecase;
diff --git a/src/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase.ts b/src/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase.ts
new file mode 100644
index 0000000..4289a0e
--- /dev/null
+++ b/src/feature/core/invoice/domain/usecase/create-invoice/create-invoice.usecase.ts
@@ -0,0 +1,8 @@
+import { ApiEither } from "@/feature/common/data/api-task";
+import { InvoiceParam } from "@/feature/core/invoice/domain/param/invoice.param";
+
+export type CreateInvoiceUsecase = (
+  param: InvoiceParam,
+) => Promise<ApiEither<string>>;
+
+export const createInvoiceUsecaseKey = "createInvoiceUsecaseKey";