Files
legal-ai/skills/docx/references/document-templates.md
Chaim 4de555367d
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m32s
G12 Leak-Guard / leak-guard (push) Successful in 5s
Lint — undefined names / undefined-names (push) Successful in 11s
chore: fix .gitignore inline comments + add untracked code files
Inline # comments in gitignore are not supported — they were silently
breaking three patterns (data/checkpoints/, data/adapter-migration-state.json,
.claude/agents/.generated/). Moved comments to their own lines and added
missing entries for runtime dirs (data/audit/, data/logs/, etc.) and
temp files (.interaction_tmp.json, .design-build/, .taskmaster bak files).

Also tracks previously untracked legitimate files: scripts, tests, docs,
skills references, .env.example, taskmaster templates.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 12:49:32 +00:00

8.0 KiB
Raw Blame History

Document Templates — תבניות מסמכים משפטיים

תבנית 1: כתב טענות (בקשה, תביעה, הגנה, ערעור)

const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
        AlignmentType, LevelFormat, BorderStyle, WidthType } = require('docx');

const PAGE_WIDTH = 11906;
const MARGINS = { top: 1134, right: 1134, bottom: 1134, left: 1134 };
const CONTENT_WIDTH = PAGE_WIDTH - MARGINS.left - MARGINS.right;

const noBorder = { style: BorderStyle.NONE, size: 0, color: "FFFFFF" };
const noBorders = { top: noBorder, bottom: noBorder, left: noBorder, right: noBorder };

// Header בית משפט — טבלה עם שם בית המשפט (ימין) ומספר תיק (שמאל)
function courtHeader(courtName, caseNumber) {
  return new Table({
    width: { size: CONTENT_WIDTH, type: WidthType.DXA },
    columnWidths: [CONTENT_WIDTH / 2, CONTENT_WIDTH / 2],
    visuallyRightToLeft: true,
    rows: [
      new TableRow({
        children: [
          new TableCell({
            width: { size: CONTENT_WIDTH / 2, type: WidthType.DXA },
            borders: noBorders,
            children: [new Paragraph({
              bidirectional: true, alignment: AlignmentType.START,
              children: [new TextRun({ text: courtName, bold: true, font: "David", size: 26, rightToLeft: true })]
            })]
          }),
          new TableCell({
            width: { size: CONTENT_WIDTH / 2, type: WidthType.DXA },
            borders: noBorders,
            children: [new Paragraph({
              bidirectional: true, alignment: AlignmentType.END,
              children: [new TextRun({ text: caseNumber, bold: true, font: "David", size: 26, rightToLeft: true })]
            })]
          })
        ]
      })
    ]
  });
}

function mainTitle(text) {
  return new Paragraph({
    bidirectional: true, alignment: AlignmentType.CENTER,
    spacing: { before: 300, after: 300 },
    children: [new TextRun({ text, bold: true, font: "David", size: 28, rightToLeft: true, underline: {} })]
  });
}

function subHeading(text) {
  return new Paragraph({
    bidirectional: true, alignment: AlignmentType.START,
    spacing: { before: 240, after: 120 },
    children: [new TextRun({ text, bold: true, font: "David", size: 24, rightToLeft: true, underline: {} })]
  });
}

const doc = new Document({
  numbering: {
    config: [{
      reference: "legal-clauses",
      levels: [{
        level: 0, format: LevelFormat.DECIMAL, text: "%1.",
        alignment: AlignmentType.START, suffix: "tab",
        style: { paragraph: { indent: { left: 360, hanging: 360 } } }
      }]
    }]
  },
  sections: [{
    properties: {
      page: { size: { width: PAGE_WIDTH, height: 16838 }, margin: MARGINS },
      bidi: true
    },
    children: [
      courtHeader("בית המשפט המחוזי בתל אביב", "ת\"א 12345-01-26"),
      mainTitle("כתב תביעה"),
      // ... פרטי צדדים, סעיפים, חתימה
    ]
  }]
});

תבנית 2: מכתב התראה

function letterHeader(firmName, address, phone, email) {
  return [
    new Paragraph({
      bidirectional: true, alignment: AlignmentType.START,
      children: [new TextRun({ text: firmName, bold: true, font: "David", size: 28, rightToLeft: true })]
    }),
    new Paragraph({
      bidirectional: true, alignment: AlignmentType.START,
      children: [new TextRun({ text: address, font: "David", size: 22, rightToLeft: true })]
    }),
    new Paragraph({
      bidirectional: true, alignment: AlignmentType.START,
      spacing: { after: 300 },
      children: [new TextRun({ text: `טל': ${phone} | ${email}`, font: "David", size: 22, rightToLeft: true })]
    }),
  ];
}

function subjectLine(text) {
  return new Paragraph({
    bidirectional: true, alignment: AlignmentType.CENTER,
    spacing: { before: 200, after: 200 },
    children: [
      new TextRun({ text: "הנדון: ", bold: true, font: "David", size: 24, rightToLeft: true }),
      new TextRun({ text, bold: true, font: "David", size: 24, rightToLeft: true, underline: {} })
    ]
  });
}

// שימוש:
sections: [{
  properties: { page: { size: { width: 11906, height: 16838 }, margin: { top: 1417, right: 1417, bottom: 1417, left: 1417 } }, bidi: true },
  children: [
    ...letterHeader("משרד עו\"ד כהן ושות'", "רח' הרצל 1, תל אביב", "03-1234567", "office@cohen-law.co.il"),
    new Paragraph({
      bidirectional: true, alignment: AlignmentType.START,
      children: [new TextRun({ text: "תאריך: 10.2.2026", font: "David", size: 24, rightToLeft: true })]
    }),
    new Paragraph({
      bidirectional: true, alignment: AlignmentType.START,
      spacing: { before: 200 },
      children: [new TextRun({ text: "לכבוד: [שם הנמען]", font: "David", size: 24, rightToLeft: true })]
    }),
    subjectLine("התראה בטרם נקיטת הליכים משפטיים"),
  ]
}]

תבנית 3: הסכם/חוזה

const CONTENT_WIDTH = 9638; // A4 עם שוליים 2.5 סconst noBorders = { /* ראה תבנית 1 */ };

function contractTitle(text) {
  return new Paragraph({
    bidirectional: true, alignment: AlignmentType.CENTER,
    spacing: { after: 300 },
    children: [new TextRun({ text, bold: true, font: "David", size: 32, rightToLeft: true })]
  });
}

function partyClause(label, name, id, address, alias) {
  return new Paragraph({
    bidirectional: true, alignment: AlignmentType.BOTH,
    spacing: { after: 120 },
    children: [
      new TextRun({ text: `${label}: `, bold: true, font: "David", size: 24, rightToLeft: true }),
      new TextRun({ text: `${name}, ח.פ./ת.ז. ${id}, מ${address} (להלן: "`, font: "David", size: 24, rightToLeft: true }),
      new TextRun({ text: alias, bold: true, font: "David", size: 24, rightToLeft: true }),
      new TextRun({ text: '")', font: "David", size: 24, rightToLeft: true }),
    ]
  });
}

function signatureTable(contentWidth) {
  return new Table({
    width: { size: contentWidth, type: WidthType.DXA },
    columnWidths: [contentWidth / 2, contentWidth / 2],
    visuallyRightToLeft: true,
    rows: [new TableRow({
      children: [
        new TableCell({
          borders: noBorders,
          children: [
            new Paragraph({ bidirectional: true, alignment: AlignmentType.CENTER,
              children: [new TextRun({ text: "_________________", font: "David", size: 24, rightToLeft: true })] }),
            new Paragraph({ bidirectional: true, alignment: AlignmentType.CENTER,
              children: [new TextRun({ text: "צד א'", font: "David", size: 24, rightToLeft: true })] })
          ]
        }),
        new TableCell({
          borders: noBorders,
          children: [
            new Paragraph({ bidirectional: true, alignment: AlignmentType.CENTER,
              children: [new TextRun({ text: "_________________", font: "David", size: 24, rightToLeft: true })] }),
            new Paragraph({ bidirectional: true, alignment: AlignmentType.CENTER,
              children: [new TextRun({ text: "צד ב'", font: "David", size: 24, rightToLeft: true })] })
          ]
        })
      ]
    })]
  });
}

sections: [{
  properties: { page: { size: { width: 11906, height: 16838 }, margin: { top: 1417, right: 1417, bottom: 1417, left: 1417 } }, bidi: true },
  children: [
    contractTitle("הסכם שירותים"),
    new Paragraph({
      bidirectional: true, alignment: AlignmentType.CENTER,
      children: [new TextRun({ text: "נערך ונחתם בתל אביב ביום __________", font: "David", size: 24, rightToLeft: true })]
    }),
    partyClause("מצד אחד", "[שם]", "[מספר]", "[כתובת]", "המזמין"),
    partyClause("מצד שני", "[שם]", "[מספר]", "[כתובת]", "הספק"),
    // הואילים + סעיפים...
    new Paragraph({
      bidirectional: true, alignment: AlignmentType.CENTER,
      spacing: { before: 400, after: 300 },
      children: [new TextRun({ text: "ולראיה באו הצדדים על החתום:", bold: true, font: "David", size: 24, rightToLeft: true })]
    }),
    signatureTable(CONTENT_WIDTH)
  ]
}]