@frihet/mcp-server 1.9.0-beta.1 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +263 -13
  2. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts +13 -0
  3. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts.map +1 -0
  4. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js +420 -0
  5. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js.map +1 -0
  6. package/dist/__tests__/einvoice-day4-tools.test.d.ts +16 -0
  7. package/dist/__tests__/einvoice-day4-tools.test.d.ts.map +1 -0
  8. package/dist/__tests__/einvoice-day4-tools.test.js +377 -0
  9. package/dist/__tests__/einvoice-day4-tools.test.js.map +1 -0
  10. package/dist/__tests__/einvoice-tools.test.d.ts +1 -1
  11. package/dist/__tests__/einvoice-tools.test.js +25 -12
  12. package/dist/__tests__/einvoice-tools.test.js.map +1 -1
  13. package/dist/__tests__/fiscal-tools.test.d.ts +5 -4
  14. package/dist/__tests__/fiscal-tools.test.d.ts.map +1 -1
  15. package/dist/__tests__/fiscal-tools.test.js +8 -26
  16. package/dist/__tests__/fiscal-tools.test.js.map +1 -1
  17. package/dist/__tests__/openai-profile.test.d.ts +10 -0
  18. package/dist/__tests__/openai-profile.test.d.ts.map +1 -0
  19. package/dist/__tests__/openai-profile.test.js +132 -0
  20. package/dist/__tests__/openai-profile.test.js.map +1 -0
  21. package/dist/__tests__/recurring-tools.test.d.ts +14 -7
  22. package/dist/__tests__/recurring-tools.test.d.ts.map +1 -1
  23. package/dist/__tests__/recurring-tools.test.js +195 -9
  24. package/dist/__tests__/recurring-tools.test.js.map +1 -1
  25. package/dist/__tests__/team-tools.test.d.ts +18 -0
  26. package/dist/__tests__/team-tools.test.d.ts.map +1 -0
  27. package/dist/__tests__/team-tools.test.js +228 -0
  28. package/dist/__tests__/team-tools.test.js.map +1 -0
  29. package/dist/__tests__/time-tools.test.d.ts +9 -7
  30. package/dist/__tests__/time-tools.test.d.ts.map +1 -1
  31. package/dist/__tests__/time-tools.test.js +96 -9
  32. package/dist/__tests__/time-tools.test.js.map +1 -1
  33. package/dist/client-interface.d.ts +236 -0
  34. package/dist/client-interface.d.ts.map +1 -1
  35. package/dist/client.d.ts +245 -1
  36. package/dist/client.d.ts.map +1 -1
  37. package/dist/client.js +266 -5
  38. package/dist/client.js.map +1 -1
  39. package/dist/index.js +6 -6
  40. package/dist/index.js.map +1 -1
  41. package/dist/openai-profile.d.ts +4 -1
  42. package/dist/openai-profile.d.ts.map +1 -1
  43. package/dist/openai-profile.js +105 -1
  44. package/dist/openai-profile.js.map +1 -1
  45. package/dist/tools/accountingClose.d.ts +20 -0
  46. package/dist/tools/accountingClose.d.ts.map +1 -0
  47. package/dist/tools/accountingClose.js +119 -0
  48. package/dist/tools/accountingClose.js.map +1 -0
  49. package/dist/tools/audit_gl.d.ts +19 -0
  50. package/dist/tools/audit_gl.d.ts.map +1 -0
  51. package/dist/tools/audit_gl.js +86 -0
  52. package/dist/tools/audit_gl.js.map +1 -0
  53. package/dist/tools/bank_rules.d.ts +23 -0
  54. package/dist/tools/bank_rules.d.ts.map +1 -0
  55. package/dist/tools/bank_rules.js +96 -0
  56. package/dist/tools/bank_rules.js.map +1 -0
  57. package/dist/tools/einvoice.d.ts +70 -3
  58. package/dist/tools/einvoice.d.ts.map +1 -1
  59. package/dist/tools/einvoice.js +421 -3
  60. package/dist/tools/einvoice.js.map +1 -1
  61. package/dist/tools/fiscal.d.ts +3 -2
  62. package/dist/tools/fiscal.d.ts.map +1 -1
  63. package/dist/tools/fiscal.js +4 -22
  64. package/dist/tools/fiscal.js.map +1 -1
  65. package/dist/tools/gestoria.d.ts +28 -0
  66. package/dist/tools/gestoria.d.ts.map +1 -0
  67. package/dist/tools/gestoria.js +248 -0
  68. package/dist/tools/gestoria.js.map +1 -0
  69. package/dist/tools/hr.d.ts +24 -0
  70. package/dist/tools/hr.d.ts.map +1 -0
  71. package/dist/tools/hr.js +219 -0
  72. package/dist/tools/hr.js.map +1 -0
  73. package/dist/tools/igic.d.ts +19 -0
  74. package/dist/tools/igic.d.ts.map +1 -0
  75. package/dist/tools/igic.js +102 -0
  76. package/dist/tools/igic.js.map +1 -0
  77. package/dist/tools/impuesto_sociedades.d.ts +18 -0
  78. package/dist/tools/impuesto_sociedades.d.ts.map +1 -0
  79. package/dist/tools/impuesto_sociedades.js +64 -0
  80. package/dist/tools/impuesto_sociedades.js.map +1 -0
  81. package/dist/tools/onboard_vies.d.ts +22 -0
  82. package/dist/tools/onboard_vies.d.ts.map +1 -0
  83. package/dist/tools/onboard_vies.js +74 -0
  84. package/dist/tools/onboard_vies.js.map +1 -0
  85. package/dist/tools/onboarding.d.ts +19 -0
  86. package/dist/tools/onboarding.d.ts.map +1 -0
  87. package/dist/tools/onboarding.js +63 -0
  88. package/dist/tools/onboarding.js.map +1 -0
  89. package/dist/tools/payroll.d.ts +20 -0
  90. package/dist/tools/payroll.d.ts.map +1 -0
  91. package/dist/tools/payroll.js +73 -0
  92. package/dist/tools/payroll.js.map +1 -0
  93. package/dist/tools/permissions.d.ts +19 -0
  94. package/dist/tools/permissions.d.ts.map +1 -0
  95. package/dist/tools/permissions.js +52 -0
  96. package/dist/tools/permissions.js.map +1 -0
  97. package/dist/tools/portal_domain.d.ts +19 -0
  98. package/dist/tools/portal_domain.d.ts.map +1 -0
  99. package/dist/tools/portal_domain.js +85 -0
  100. package/dist/tools/portal_domain.js.map +1 -0
  101. package/dist/tools/recurring.d.ts +10 -5
  102. package/dist/tools/recurring.d.ts.map +1 -1
  103. package/dist/tools/recurring.js +178 -6
  104. package/dist/tools/recurring.js.map +1 -1
  105. package/dist/tools/register-all.d.ts +2 -2
  106. package/dist/tools/register-all.d.ts.map +1 -1
  107. package/dist/tools/register-all.js +41 -3
  108. package/dist/tools/register-all.js.map +1 -1
  109. package/dist/tools/shared.d.ts +313 -1
  110. package/dist/tools/shared.d.ts.map +1 -1
  111. package/dist/tools/shared.js +256 -0
  112. package/dist/tools/shared.js.map +1 -1
  113. package/dist/tools/team.d.ts +17 -0
  114. package/dist/tools/team.d.ts.map +1 -0
  115. package/dist/tools/team.js +141 -0
  116. package/dist/tools/team.js.map +1 -0
  117. package/dist/tools/time.d.ts +9 -8
  118. package/dist/tools/time.d.ts.map +1 -1
  119. package/dist/tools/time.js +54 -9
  120. package/dist/tools/time.js.map +1 -1
  121. package/dist/tools/webhooks.d.ts.map +1 -1
  122. package/dist/tools/webhooks.js +27 -1
  123. package/dist/tools/webhooks.js.map +1 -1
  124. package/package.json +12 -5
  125. package/scripts/audit-mcp-refs.mjs +331 -0
@@ -351,9 +351,9 @@ export declare const ticketbaiStatusOutput: z.ZodObject<{
351
351
  aeatResponse: z.ZodOptional<z.ZodString>;
352
352
  qrUrl: z.ZodOptional<z.ZodString>;
353
353
  province: z.ZodOptional<z.ZodEnum<{
354
- araba: "araba";
355
354
  bizkaia: "bizkaia";
356
355
  gipuzkoa: "gipuzkoa";
356
+ araba: "araba";
357
357
  }>>;
358
358
  }, z.core.$loose>;
359
359
  export declare const timeEntryItemOutput: z.ZodObject<{
@@ -392,6 +392,318 @@ export declare const pdfResultOutput: z.ZodObject<{
392
392
  url: z.ZodOptional<z.ZodString>;
393
393
  contentType: z.ZodOptional<z.ZodString>;
394
394
  }, z.core.$loose>;
395
+ export declare const timeSummaryOutput: z.ZodObject<{
396
+ from: z.ZodString;
397
+ to: z.ZodString;
398
+ totalHours: z.ZodNumber;
399
+ billableHours: z.ZodNumber;
400
+ nonBillableHours: z.ZodNumber;
401
+ estimatedCostEur: z.ZodOptional<z.ZodNumber>;
402
+ groups: z.ZodOptional<z.ZodArray<z.ZodObject<{
403
+ key: z.ZodString;
404
+ label: z.ZodOptional<z.ZodString>;
405
+ totalHours: z.ZodNumber;
406
+ billableHours: z.ZodNumber;
407
+ nonBillableHours: z.ZodNumber;
408
+ estimatedCostEur: z.ZodOptional<z.ZodNumber>;
409
+ }, z.core.$strip>>>;
410
+ }, z.core.$loose>;
411
+ export declare const teamMemberItemOutput: z.ZodObject<{
412
+ id: z.ZodString;
413
+ name: z.ZodOptional<z.ZodString>;
414
+ email: z.ZodString;
415
+ role: z.ZodOptional<z.ZodEnum<{
416
+ owner: "owner";
417
+ admin: "admin";
418
+ member: "member";
419
+ viewer: "viewer";
420
+ }>>;
421
+ status: z.ZodOptional<z.ZodEnum<{
422
+ active: "active";
423
+ pending: "pending";
424
+ }>>;
425
+ invitedAt: z.ZodOptional<z.ZodString>;
426
+ joinedAt: z.ZodOptional<z.ZodString>;
427
+ createdAt: z.ZodOptional<z.ZodString>;
428
+ updatedAt: z.ZodOptional<z.ZodString>;
429
+ }, z.core.$loose>;
430
+ /**
431
+ * Gestoria message — single message in a contextual thread attached to a
432
+ * document request, filing item, or fiscal obligation. Used by both gestor
433
+ * and client; `senderRole` distinguishes them.
434
+ */
435
+ export declare const gestoriaMessageItemOutput: z.ZodObject<{
436
+ id: z.ZodString;
437
+ parentType: z.ZodOptional<z.ZodEnum<{
438
+ documentRequest: "documentRequest";
439
+ filingItem: "filingItem";
440
+ obligation: "obligation";
441
+ }>>;
442
+ parentId: z.ZodOptional<z.ZodString>;
443
+ senderUid: z.ZodOptional<z.ZodString>;
444
+ senderRole: z.ZodOptional<z.ZodEnum<{
445
+ gestor: "gestor";
446
+ client: "client";
447
+ }>>;
448
+ body: z.ZodString;
449
+ createdAt: z.ZodOptional<z.ZodString>;
450
+ readAt: z.ZodOptional<z.ZodString>;
451
+ }, z.core.$loose>;
452
+ /** Result of `gestoria_message_send` — message metadata + per-side unread counts. */
453
+ export declare const gestoriaMessageSendResultOutput: z.ZodObject<{
454
+ messageId: z.ZodString;
455
+ createdAt: z.ZodOptional<z.ZodString>;
456
+ unreadCounts: z.ZodOptional<z.ZodObject<{
457
+ gestor: z.ZodOptional<z.ZodNumber>;
458
+ client: z.ZodOptional<z.ZodNumber>;
459
+ }, z.core.$loose>>;
460
+ }, z.core.$loose>;
461
+ /**
462
+ * Document request template — reusable template gestores can bulk-send to N
463
+ * client workspaces in one call.
464
+ */
465
+ export declare const gestoriaTemplateItemOutput: z.ZodObject<{
466
+ id: z.ZodString;
467
+ name: z.ZodString;
468
+ title: z.ZodOptional<z.ZodString>;
469
+ description: z.ZodOptional<z.ZodString>;
470
+ dueDateOffsetDays: z.ZodOptional<z.ZodNumber>;
471
+ attachmentRequired: z.ZodOptional<z.ZodBoolean>;
472
+ variables: z.ZodOptional<z.ZodArray<z.ZodObject<{
473
+ key: z.ZodString;
474
+ label: z.ZodOptional<z.ZodString>;
475
+ defaultValue: z.ZodOptional<z.ZodString>;
476
+ }, z.core.$loose>>>;
477
+ createdAt: z.ZodOptional<z.ZodString>;
478
+ updatedAt: z.ZodOptional<z.ZodString>;
479
+ }, z.core.$loose>;
480
+ /** Result of `gestoria_template_create` — minimal handle for chaining. */
481
+ export declare const gestoriaTemplateCreateResultOutput: z.ZodObject<{
482
+ templateId: z.ZodString;
483
+ }, z.core.$loose>;
484
+ /**
485
+ * Result of `gestoria_template_bulk_send` — per-client outcome summary.
486
+ * Mirrors callable `gestoriaBulkSendRequests` shape (Frihet-ERP PR #383).
487
+ */
488
+ export declare const gestoriaBulkSendResultOutput: z.ZodObject<{
489
+ success: z.ZodNumber;
490
+ failed: z.ZodArray<z.ZodObject<{
491
+ clientWorkspaceId: z.ZodString;
492
+ reason: z.ZodOptional<z.ZodString>;
493
+ }, z.core.$loose>>;
494
+ totalDuration: z.ZodOptional<z.ZodNumber>;
495
+ }, z.core.$loose>;
496
+ /**
497
+ * Cross-client aging report — totals per overdue bucket + per-workspace
498
+ * breakdown + top-N overdue invoices. Returned by `gestoria_aging_consolidated`.
499
+ */
500
+ export declare const gestoriaAgingConsolidatedOutput: z.ZodObject<{
501
+ totals: z.ZodObject<{
502
+ current: z.ZodNumber;
503
+ "30_60": z.ZodNumber;
504
+ "60_90": z.ZodNumber;
505
+ "90_plus": z.ZodNumber;
506
+ }, z.core.$loose>;
507
+ byWorkspace: z.ZodArray<z.ZodObject<{
508
+ workspaceId: z.ZodString;
509
+ workspaceName: z.ZodOptional<z.ZodString>;
510
+ current: z.ZodOptional<z.ZodNumber>;
511
+ "30_60": z.ZodOptional<z.ZodNumber>;
512
+ "60_90": z.ZodOptional<z.ZodNumber>;
513
+ "90_plus": z.ZodOptional<z.ZodNumber>;
514
+ total: z.ZodOptional<z.ZodNumber>;
515
+ }, z.core.$loose>>;
516
+ topOverdue: z.ZodArray<z.ZodObject<{
517
+ invoiceId: z.ZodString;
518
+ workspaceId: z.ZodOptional<z.ZodString>;
519
+ clientName: z.ZodOptional<z.ZodString>;
520
+ amountDue: z.ZodOptional<z.ZodNumber>;
521
+ daysOverdue: z.ZodOptional<z.ZodNumber>;
522
+ dueDate: z.ZodOptional<z.ZodString>;
523
+ }, z.core.$loose>>;
524
+ generatedAt: z.ZodOptional<z.ZodString>;
525
+ }, z.core.$loose>;
526
+ /** Leave/PTO request — backend `/v1/leaves`. */
527
+ export declare const leaveRequestItemOutput: z.ZodObject<{
528
+ id: z.ZodString;
529
+ employeeId: z.ZodOptional<z.ZodString>;
530
+ type: z.ZodOptional<z.ZodString>;
531
+ startDate: z.ZodOptional<z.ZodString>;
532
+ endDate: z.ZodOptional<z.ZodString>;
533
+ durationDays: z.ZodOptional<z.ZodNumber>;
534
+ status: z.ZodOptional<z.ZodEnum<{
535
+ cancelled: "cancelled";
536
+ rejected: "rejected";
537
+ pending: "pending";
538
+ approved: "approved";
539
+ }>>;
540
+ reason: z.ZodOptional<z.ZodString>;
541
+ decisionReason: z.ZodOptional<z.ZodString>;
542
+ decidedAt: z.ZodOptional<z.ZodString>;
543
+ decidedBy: z.ZodOptional<z.ZodString>;
544
+ createdAt: z.ZodOptional<z.ZodString>;
545
+ updatedAt: z.ZodOptional<z.ZodString>;
546
+ }, z.core.$loose>;
547
+ /** Attendance / time-entry record — backend `/v1/time-entries`. */
548
+ export declare const attendanceEntryItemOutput: z.ZodObject<{
549
+ id: z.ZodString;
550
+ employeeId: z.ZodOptional<z.ZodString>;
551
+ clockInAt: z.ZodOptional<z.ZodString>;
552
+ clockOutAt: z.ZodOptional<z.ZodString>;
553
+ durationMinutes: z.ZodOptional<z.ZodNumber>;
554
+ mood: z.ZodOptional<z.ZodString>;
555
+ location: z.ZodOptional<z.ZodString>;
556
+ status: z.ZodOptional<z.ZodEnum<{
557
+ open: "open";
558
+ closed: "closed";
559
+ }>>;
560
+ createdAt: z.ZodOptional<z.ZodString>;
561
+ updatedAt: z.ZodOptional<z.ZodString>;
562
+ }, z.core.$loose>;
563
+ /** Overtime aggregated report. */
564
+ export declare const overtimeReportOutput: z.ZodObject<{
565
+ period: z.ZodString;
566
+ totalRegularHours: z.ZodOptional<z.ZodNumber>;
567
+ totalOvertimeHours: z.ZodOptional<z.ZodNumber>;
568
+ estimatedCostEur: z.ZodOptional<z.ZodNumber>;
569
+ byEmployee: z.ZodOptional<z.ZodArray<z.ZodObject<{
570
+ employeeId: z.ZodString;
571
+ employeeName: z.ZodOptional<z.ZodString>;
572
+ regularHours: z.ZodOptional<z.ZodNumber>;
573
+ overtimeHours: z.ZodOptional<z.ZodNumber>;
574
+ }, z.core.$loose>>>;
575
+ generatedAt: z.ZodOptional<z.ZodString>;
576
+ }, z.core.$loose>;
577
+ /** Anomaly detection record — backend `/v1/anomalies`. */
578
+ export declare const anomalyItemOutput: z.ZodObject<{
579
+ id: z.ZodString;
580
+ type: z.ZodOptional<z.ZodString>;
581
+ severity: z.ZodOptional<z.ZodEnum<{
582
+ low: "low";
583
+ medium: "medium";
584
+ high: "high";
585
+ critical: "critical";
586
+ }>>;
587
+ subjectId: z.ZodOptional<z.ZodString>;
588
+ description: z.ZodOptional<z.ZodString>;
589
+ detectedAt: z.ZodOptional<z.ZodString>;
590
+ resolvedAt: z.ZodOptional<z.ZodString>;
591
+ status: z.ZodOptional<z.ZodEnum<{
592
+ open: "open";
593
+ acknowledged: "acknowledged";
594
+ resolved: "resolved";
595
+ dismissed: "dismissed";
596
+ }>>;
597
+ createdAt: z.ZodOptional<z.ZodString>;
598
+ updatedAt: z.ZodOptional<z.ZodString>;
599
+ }, z.core.$loose>;
600
+ /** Webhook test result — backend `/v1/webhooks/:id/test`. */
601
+ export declare const webhookTestResultOutput: z.ZodObject<{
602
+ webhookId: z.ZodString;
603
+ delivered: z.ZodBoolean;
604
+ statusCode: z.ZodOptional<z.ZodNumber>;
605
+ responseTimeMs: z.ZodOptional<z.ZodNumber>;
606
+ eventType: z.ZodOptional<z.ZodString>;
607
+ attemptedAt: z.ZodOptional<z.ZodString>;
608
+ error: z.ZodOptional<z.ZodString>;
609
+ }, z.core.$loose>;
610
+ /** Payroll export result — backend `/v1/payroll/prep/export`. */
611
+ export declare const payrollExportOutput: z.ZodObject<{
612
+ format: z.ZodEnum<{
613
+ a3: "a3";
614
+ contasol: "contasol";
615
+ sage: "sage";
616
+ holded: "holded";
617
+ siltra: "siltra";
618
+ }>;
619
+ month: z.ZodString;
620
+ fileUrl: z.ZodOptional<z.ZodString>;
621
+ filename: z.ZodOptional<z.ZodString>;
622
+ rowCount: z.ZodOptional<z.ZodNumber>;
623
+ generatedAt: z.ZodOptional<z.ZodString>;
624
+ }, z.core.$loose>;
625
+ /** Payroll checklist — backend `/v1/payroll/prep/employees`. */
626
+ export declare const payrollChecklistOutput: z.ZodObject<{
627
+ month: z.ZodString;
628
+ totalEmployees: z.ZodOptional<z.ZodNumber>;
629
+ readyEmployees: z.ZodOptional<z.ZodNumber>;
630
+ missingEmployees: z.ZodOptional<z.ZodNumber>;
631
+ employees: z.ZodOptional<z.ZodArray<z.ZodObject<{
632
+ employeeId: z.ZodString;
633
+ employeeName: z.ZodOptional<z.ZodString>;
634
+ status: z.ZodOptional<z.ZodEnum<{
635
+ ready: "ready";
636
+ missing_data: "missing_data";
637
+ blocked: "blocked";
638
+ }>>;
639
+ missingFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
640
+ }, z.core.$loose>>>;
641
+ generatedAt: z.ZodOptional<z.ZodString>;
642
+ }, z.core.$loose>;
643
+ /** Onboarding workspace state — backend `/v1/onboarding/status`. */
644
+ export declare const onboardingStatusOutput: z.ZodObject<{
645
+ workspaceId: z.ZodOptional<z.ZodString>;
646
+ persona: z.ZodOptional<z.ZodEnum<{
647
+ autonomo: "autonomo";
648
+ empresa: "empresa";
649
+ agencia: "agencia";
650
+ gestoria: "gestoria";
651
+ }>>;
652
+ completedSteps: z.ZodOptional<z.ZodArray<z.ZodString>>;
653
+ pendingSteps: z.ZodOptional<z.ZodArray<z.ZodString>>;
654
+ percentComplete: z.ZodOptional<z.ZodNumber>;
655
+ startedAt: z.ZodOptional<z.ZodString>;
656
+ completedAt: z.ZodOptional<z.ZodString>;
657
+ }, z.core.$loose>;
658
+ /** Onboarding persona update result. */
659
+ export declare const onboardingPersonaResultOutput: z.ZodObject<{
660
+ workspaceId: z.ZodOptional<z.ZodString>;
661
+ persona: z.ZodEnum<{
662
+ autonomo: "autonomo";
663
+ empresa: "empresa";
664
+ agencia: "agencia";
665
+ gestoria: "gestoria";
666
+ }>;
667
+ updatedAt: z.ZodOptional<z.ZodString>;
668
+ }, z.core.$loose>;
669
+ /** Permissions matrix — backend `/v1/permissions/matrix`. */
670
+ export declare const permissionsMatrixOutput: z.ZodObject<{
671
+ roles: z.ZodOptional<z.ZodArray<z.ZodObject<{
672
+ role: z.ZodString;
673
+ permissions: z.ZodArray<z.ZodString>;
674
+ }, z.core.$loose>>>;
675
+ resources: z.ZodOptional<z.ZodArray<z.ZodString>>;
676
+ generatedAt: z.ZodOptional<z.ZodString>;
677
+ }, z.core.$loose>;
678
+ /** Caller's own permissions — backend `/v1/permissions/me`. */
679
+ export declare const permissionsMeOutput: z.ZodObject<{
680
+ userId: z.ZodOptional<z.ZodString>;
681
+ role: z.ZodOptional<z.ZodString>;
682
+ permissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
683
+ workspaceId: z.ZodOptional<z.ZodString>;
684
+ }, z.core.$loose>;
685
+ /** Accounting period state — backend `/v1/periods/*`. */
686
+ export declare const periodStatusOutput: z.ZodObject<{
687
+ id: z.ZodString;
688
+ type: z.ZodOptional<z.ZodEnum<{
689
+ monthly: "monthly";
690
+ quarterly: "quarterly";
691
+ }>>;
692
+ status: z.ZodOptional<z.ZodEnum<{
693
+ open: "open";
694
+ closed: "closed";
695
+ closing: "closing";
696
+ reopened: "reopened";
697
+ }>>;
698
+ startDate: z.ZodOptional<z.ZodString>;
699
+ endDate: z.ZodOptional<z.ZodString>;
700
+ closedAt: z.ZodOptional<z.ZodString>;
701
+ closedBy: z.ZodOptional<z.ZodString>;
702
+ reopenedAt: z.ZodOptional<z.ZodString>;
703
+ reopenReason: z.ZodOptional<z.ZodString>;
704
+ createdAt: z.ZodOptional<z.ZodString>;
705
+ updatedAt: z.ZodOptional<z.ZodString>;
706
+ }, z.core.$loose>;
395
707
  /** Return type of a tool handler — index signature required by MCP SDK */
396
708
  interface ToolResult {
397
709
  [x: string]: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"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"}
@@ -541,6 +541,262 @@ export const pdfResultOutput = z.object({
541
541
  url: z.string().optional(),
542
542
  contentType: z.string().optional(),
543
543
  }).passthrough();
544
+ /* --- Time summary schema --------------------------------------------------- */
545
+ const timeSummaryGroupItemSchema = z.object({
546
+ key: z.string().describe("Group key (userId, projectId, or date)"),
547
+ label: z.string().optional(),
548
+ totalHours: z.number(),
549
+ billableHours: z.number(),
550
+ nonBillableHours: z.number(),
551
+ estimatedCostEur: z.number().optional(),
552
+ });
553
+ export const timeSummaryOutput = z.object({
554
+ from: z.string(),
555
+ to: z.string(),
556
+ totalHours: z.number(),
557
+ billableHours: z.number(),
558
+ nonBillableHours: z.number(),
559
+ estimatedCostEur: z.number().optional(),
560
+ groups: z.array(timeSummaryGroupItemSchema).optional(),
561
+ }).passthrough();
562
+ /* --- Team member item schema ----------------------------------------------- */
563
+ export const teamMemberItemOutput = z.object({
564
+ id: z.string(),
565
+ name: z.string().optional(),
566
+ email: z.string(),
567
+ role: z.enum(["owner", "admin", "member", "viewer"]).optional(),
568
+ status: z.enum(["active", "pending"]).optional(),
569
+ invitedAt: z.string().optional(),
570
+ joinedAt: z.string().optional(),
571
+ createdAt: z.string().optional(),
572
+ updatedAt: z.string().optional(),
573
+ }).passthrough();
574
+ /* --- Gestoria item schemas ------------------------------------------------- */
575
+ /**
576
+ * Gestoria message — single message in a contextual thread attached to a
577
+ * document request, filing item, or fiscal obligation. Used by both gestor
578
+ * and client; `senderRole` distinguishes them.
579
+ */
580
+ export const gestoriaMessageItemOutput = z.object({
581
+ id: z.string(),
582
+ parentType: z.enum(["documentRequest", "filingItem", "obligation"]).optional(),
583
+ parentId: z.string().optional(),
584
+ senderUid: z.string().optional(),
585
+ senderRole: z.enum(["gestor", "client"]).optional(),
586
+ body: z.string(),
587
+ createdAt: z.string().optional(),
588
+ readAt: z.string().optional(),
589
+ }).passthrough();
590
+ /** Result of `gestoria_message_send` — message metadata + per-side unread counts. */
591
+ export const gestoriaMessageSendResultOutput = z.object({
592
+ messageId: z.string(),
593
+ createdAt: z.string().optional(),
594
+ unreadCounts: z.object({
595
+ gestor: z.number().int().nonnegative().optional(),
596
+ client: z.number().int().nonnegative().optional(),
597
+ }).passthrough().optional(),
598
+ }).passthrough();
599
+ /**
600
+ * Document request template — reusable template gestores can bulk-send to N
601
+ * client workspaces in one call.
602
+ */
603
+ export const gestoriaTemplateItemOutput = z.object({
604
+ id: z.string(),
605
+ name: z.string(),
606
+ title: z.string().optional(),
607
+ description: z.string().optional(),
608
+ dueDateOffsetDays: z.number().int().optional(),
609
+ attachmentRequired: z.boolean().optional(),
610
+ variables: z.array(z.object({
611
+ key: z.string(),
612
+ label: z.string().optional(),
613
+ defaultValue: z.string().optional(),
614
+ }).passthrough()).optional(),
615
+ createdAt: z.string().optional(),
616
+ updatedAt: z.string().optional(),
617
+ }).passthrough();
618
+ /** Result of `gestoria_template_create` — minimal handle for chaining. */
619
+ export const gestoriaTemplateCreateResultOutput = z.object({
620
+ templateId: z.string(),
621
+ }).passthrough();
622
+ /**
623
+ * Result of `gestoria_template_bulk_send` — per-client outcome summary.
624
+ * Mirrors callable `gestoriaBulkSendRequests` shape (Frihet-ERP PR #383).
625
+ */
626
+ export const gestoriaBulkSendResultOutput = z.object({
627
+ success: z.number().int().nonnegative(),
628
+ failed: z.array(z.object({
629
+ clientWorkspaceId: z.string(),
630
+ reason: z.string().optional(),
631
+ }).passthrough()),
632
+ totalDuration: z.number().int().nonnegative().optional().describe("Wall-clock duration in ms"),
633
+ }).passthrough();
634
+ /**
635
+ * Cross-client aging report — totals per overdue bucket + per-workspace
636
+ * breakdown + top-N overdue invoices. Returned by `gestoria_aging_consolidated`.
637
+ */
638
+ export const gestoriaAgingConsolidatedOutput = z.object({
639
+ totals: z.object({
640
+ current: z.number().nonnegative(),
641
+ "30_60": z.number().nonnegative(),
642
+ "60_90": z.number().nonnegative(),
643
+ "90_plus": z.number().nonnegative(),
644
+ }).passthrough(),
645
+ byWorkspace: z.array(z.object({
646
+ workspaceId: z.string(),
647
+ workspaceName: z.string().optional(),
648
+ current: z.number().nonnegative().optional(),
649
+ "30_60": z.number().nonnegative().optional(),
650
+ "60_90": z.number().nonnegative().optional(),
651
+ "90_plus": z.number().nonnegative().optional(),
652
+ total: z.number().nonnegative().optional(),
653
+ }).passthrough()),
654
+ topOverdue: z.array(z.object({
655
+ invoiceId: z.string(),
656
+ workspaceId: z.string().optional(),
657
+ clientName: z.string().optional(),
658
+ amountDue: z.number().optional(),
659
+ daysOverdue: z.number().int().optional(),
660
+ dueDate: z.string().optional(),
661
+ }).passthrough()),
662
+ generatedAt: z.string().optional(),
663
+ }).passthrough();
664
+ /* --- D4-B: HR / Webhook test / Payroll / Onboarding / Permissions / Period close --- */
665
+ /** Leave/PTO request — backend `/v1/leaves`. */
666
+ export const leaveRequestItemOutput = z.object({
667
+ id: z.string(),
668
+ employeeId: z.string().optional(),
669
+ type: z.string().optional().describe("Leave type slug (vacation, sick, personal, etc.)"),
670
+ startDate: z.string().optional(),
671
+ endDate: z.string().optional(),
672
+ durationDays: z.number().optional(),
673
+ status: z.enum(["pending", "approved", "rejected", "cancelled"]).optional(),
674
+ reason: z.string().optional(),
675
+ decisionReason: z.string().optional(),
676
+ decidedAt: z.string().optional(),
677
+ decidedBy: z.string().optional(),
678
+ createdAt: z.string().optional(),
679
+ updatedAt: z.string().optional(),
680
+ }).passthrough();
681
+ /** Attendance / time-entry record — backend `/v1/time-entries`. */
682
+ export const attendanceEntryItemOutput = z.object({
683
+ id: z.string(),
684
+ employeeId: z.string().optional(),
685
+ clockInAt: z.string().optional(),
686
+ clockOutAt: z.string().optional(),
687
+ durationMinutes: z.number().optional(),
688
+ mood: z.string().optional(),
689
+ location: z.string().optional(),
690
+ status: z.enum(["open", "closed"]).optional(),
691
+ createdAt: z.string().optional(),
692
+ updatedAt: z.string().optional(),
693
+ }).passthrough();
694
+ /** Overtime aggregated report. */
695
+ export const overtimeReportOutput = z.object({
696
+ period: z.string(),
697
+ totalRegularHours: z.number().optional(),
698
+ totalOvertimeHours: z.number().optional(),
699
+ estimatedCostEur: z.number().optional(),
700
+ byEmployee: z.array(z.object({
701
+ employeeId: z.string(),
702
+ employeeName: z.string().optional(),
703
+ regularHours: z.number().optional(),
704
+ overtimeHours: z.number().optional(),
705
+ }).passthrough()).optional(),
706
+ generatedAt: z.string().optional(),
707
+ }).passthrough();
708
+ /** Anomaly detection record — backend `/v1/anomalies`. */
709
+ export const anomalyItemOutput = z.object({
710
+ id: z.string(),
711
+ type: z.string().optional().describe("Anomaly type slug (e.g. duplicate_clock_in, overtime_spike)"),
712
+ severity: z.enum(["low", "medium", "high", "critical"]).optional(),
713
+ subjectId: z.string().optional().describe("Related entity ID (employee, transaction, invoice)"),
714
+ description: z.string().optional(),
715
+ detectedAt: z.string().optional(),
716
+ resolvedAt: z.string().optional(),
717
+ status: z.enum(["open", "acknowledged", "resolved", "dismissed"]).optional(),
718
+ createdAt: z.string().optional(),
719
+ updatedAt: z.string().optional(),
720
+ }).passthrough();
721
+ /** Webhook test result — backend `/v1/webhooks/:id/test`. */
722
+ export const webhookTestResultOutput = z.object({
723
+ webhookId: z.string(),
724
+ delivered: z.boolean(),
725
+ statusCode: z.number().int().optional(),
726
+ responseTimeMs: z.number().int().optional(),
727
+ eventType: z.string().optional(),
728
+ attemptedAt: z.string().optional(),
729
+ error: z.string().optional(),
730
+ }).passthrough();
731
+ /** Payroll export result — backend `/v1/payroll/prep/export`. */
732
+ export const payrollExportOutput = z.object({
733
+ format: z.enum(["a3", "contasol", "sage", "holded", "siltra"]),
734
+ month: z.string(),
735
+ fileUrl: z.string().optional(),
736
+ filename: z.string().optional(),
737
+ rowCount: z.number().int().optional(),
738
+ generatedAt: z.string().optional(),
739
+ }).passthrough();
740
+ /** Payroll checklist — backend `/v1/payroll/prep/employees`. */
741
+ export const payrollChecklistOutput = z.object({
742
+ month: z.string(),
743
+ totalEmployees: z.number().int().optional(),
744
+ readyEmployees: z.number().int().optional(),
745
+ missingEmployees: z.number().int().optional(),
746
+ employees: z.array(z.object({
747
+ employeeId: z.string(),
748
+ employeeName: z.string().optional(),
749
+ status: z.enum(["ready", "missing_data", "blocked"]).optional(),
750
+ missingFields: z.array(z.string()).optional(),
751
+ }).passthrough()).optional(),
752
+ generatedAt: z.string().optional(),
753
+ }).passthrough();
754
+ /** Onboarding workspace state — backend `/v1/onboarding/status`. */
755
+ export const onboardingStatusOutput = z.object({
756
+ workspaceId: z.string().optional(),
757
+ persona: z.enum(["autonomo", "empresa", "agencia", "gestoria"]).optional(),
758
+ completedSteps: z.array(z.string()).optional(),
759
+ pendingSteps: z.array(z.string()).optional(),
760
+ percentComplete: z.number().min(0).max(100).optional(),
761
+ startedAt: z.string().optional(),
762
+ completedAt: z.string().optional(),
763
+ }).passthrough();
764
+ /** Onboarding persona update result. */
765
+ export const onboardingPersonaResultOutput = z.object({
766
+ workspaceId: z.string().optional(),
767
+ persona: z.enum(["autonomo", "empresa", "agencia", "gestoria"]),
768
+ updatedAt: z.string().optional(),
769
+ }).passthrough();
770
+ /** Permissions matrix — backend `/v1/permissions/matrix`. */
771
+ export const permissionsMatrixOutput = z.object({
772
+ roles: z.array(z.object({
773
+ role: z.string(),
774
+ permissions: z.array(z.string()),
775
+ }).passthrough()).optional(),
776
+ resources: z.array(z.string()).optional(),
777
+ generatedAt: z.string().optional(),
778
+ }).passthrough();
779
+ /** Caller's own permissions — backend `/v1/permissions/me`. */
780
+ export const permissionsMeOutput = z.object({
781
+ userId: z.string().optional(),
782
+ role: z.string().optional(),
783
+ permissions: z.array(z.string()).optional(),
784
+ workspaceId: z.string().optional(),
785
+ }).passthrough();
786
+ /** Accounting period state — backend `/v1/periods/*`. */
787
+ export const periodStatusOutput = z.object({
788
+ id: z.string(),
789
+ type: z.enum(["monthly", "quarterly"]).optional(),
790
+ status: z.enum(["open", "closing", "closed", "reopened"]).optional(),
791
+ startDate: z.string().optional(),
792
+ endDate: z.string().optional(),
793
+ closedAt: z.string().optional(),
794
+ closedBy: z.string().optional(),
795
+ reopenedAt: z.string().optional(),
796
+ reopenReason: z.string().optional(),
797
+ createdAt: z.string().optional(),
798
+ updatedAt: z.string().optional(),
799
+ }).passthrough();
544
800
  /**
545
801
  * Wraps a tool handler to automatically log execution time, success/failure,
546
802
  * and record metrics. Catches errors and routes them through handleToolError.