Faits: Faits: A. Le Parquet d'Augsbourg a adressé à l'Office fédéral de la justice (OFJ) plusieurs demandes d'entraide judiciaire pour les besoins d'une enquête dirigée contre les dénommés C._, D._, E._ et autres, pour soustraction d'impôt et violation de la loi sur le commerce extérieur. Entre 1994 et 1995, des cigarettes de provenances diverses auraient été importées en Suisse, réassorties puis expédiées (avec de faux documents servant à faire croire que la marchandise était destinée à la Bulgarie), via divers pays, à destination du Monténégro, puis de l'Italie. Le but était d'alimenter le marché noir européen et de renflouer les caisses de la Serbie-Monténégro, alors frappée de l'embargo prononcé par les Nations-Unies. Au total, 2 milliards de DM auraient ainsi échappé au fisc européen. L'autorité requérante mentionnait les diverses entreprises liées à ce trafic. L'entraide judiciaire de la Suisse avait déjà été requise et accordée à plusieurs reprises dans ce cadre (cf. notamment l'arrêt 1A.247/2000 du 27 novembre 2000, concernant la demande initiale du 18 septembre 1998, et l'arrêt 1A.203/2003 du 11 novembre 2003 concernant le complément du 23 avril 2002). Le 15 octobre 2002 le Procureur d'Augsbourg a présenté une demande complémentaire visant à consulter, avec l'inspecteur principal des douanes, et, le cas échéant, à lever copie du dossier d'une procédure pénale administrative ouverte en Suisse pour violation de l'embargo, entre 1992 et 1995, et relative à des faits identiques à ceux poursuivis en Allemagne. Le 7 juillet 2003, la Direction générale des douanes (DGD), chargée de l'exécution de cette demande, est entrée en matière. Les faits décrits étaient constitutifs, en droit suisse, d'escroquerie fiscale et de violation de la loi fédérale sur les douanes. Cette décision a été notifiée, en particulier, à X._ SA, qui avait fait l'objet le 17 octobre 1995 d'une perquisition auprès de sa succursale de Genève, et de la saisie des pièces relatives à la société Z._. Le 18 août 2003, X._ SA s'est opposée à la consultation du dossier par l'autorité étrangère: la demande du 15 octobre 2002 n'était pas suffisamment étayée pour en déduire l'existence d'une escroquerie fiscale. L'autorité requérante devait être invitée à compléter sa démarche. Le 7 juillet 2003, la Direction générale des douanes (DGD), chargée de l'exécution de cette demande, est entrée en matière. Les faits décrits étaient constitutifs, en droit suisse, d'escroquerie fiscale et de violation de la loi fédérale sur les douanes. Cette décision a été notifiée, en particulier, à X._ SA, qui avait fait l'objet le 17 octobre 1995 d'une perquisition auprès de sa succursale de Genève, et de la saisie des pièces relatives à la société Z._. Le 18 août 2003, X._ SA s'est opposée à la consultation du dossier par l'autorité étrangère: la demande du 15 octobre 2002 n'était pas suffisamment étayée pour en déduire l'existence d'une escroquerie fiscale. L'autorité requérante devait être invitée à compléter sa démarche. B. Par ordonnance du 30 octobre 2003, la DGD a prononcé la clôture de la procédure. Les enquêteurs étrangers ont été autorisés à consulter les documents relatifs à la société Z._ saisis le 17 octobre 1995 en mains de X._ SA et, éventuellement, à en recevoir des photocopies. Cette pièce pouvait être déterminante pour la procédure pénale étrangère. B. Par ordonnance du 30 octobre 2003, la DGD a prononcé la clôture de la procédure. Les enquêteurs étrangers ont été autorisés à consulter les documents relatifs à la société Z._ saisis le 17 octobre 1995 en mains de X._ SA et, éventuellement, à en recevoir des photocopies. Cette pièce pouvait être déterminante pour la procédure pénale étrangère. C. X._ SA forme un recours de droit administratif contre cette dernière décision. Elle demande préalablement que la DGD soit invitée à produire les documents sur lesquels elle s'appuie pour pallier les insuffisances de la commission rogatoire. Principalement, elle demande l'annulation de la décision de clôture et le refus de transmettre les documents saisis le 17 octobre 1995. Subsidiairement, elle demande le renvoi de la cause à la DGD afin qu'elle invite l'autorité requérante à compléter l'exposé des faits, et qu'elle produise une traduction en français des dispositions pénales du droit allemand. La DGD et l'OFJ concluent au rejet du recours.